Use makeinfo to generate html doc for the new website
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --list-decoders          show all available decoders
67   --list-encoders          show all available encoders
68   --list-hwaccels          show all available hardware accelerators
69   --list-demuxers          show all available demuxers
70   --list-muxers            show all available muxers
71   --list-parsers           show all available parsers
72   --list-protocols         show all available protocols
73   --list-bsfs              show all available bitstream filters
74   --list-indevs            show all available input devices
75   --list-outdevs           show all available output devices
76   --list-filters           show all available filters
77
78 Standard options:
79   --logfile=FILE           log tests and output to FILE [config.log]
80   --disable-logging        do not log configure debug information
81   --fatal-warnings         fail if any configure warning is generated
82   --prefix=PREFIX          install in PREFIX [$prefix]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
86   --libdir=DIR             install libs in DIR [PREFIX/lib]
87   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
88   --incdir=DIR             install includes in DIR [PREFIX/include]
89   --mandir=DIR             install man page in DIR [PREFIX/share/man]
90   --enable-rpath           use rpath to allow installing libraries in paths
91                            not part of the dynamic linker search path
92                            use rpath when linking programs [USE WITH CARE]
93
94 Licensing options:
95   --enable-gpl             allow use of GPL code, the resulting libs
96                            and binaries will be under GPL [no]
97   --enable-version3        upgrade (L)GPL to version 3 [no]
98   --enable-nonfree         allow use of nonfree code, the resulting libs
99                            and binaries will be unredistributable [no]
100
101 Configuration options:
102   --disable-static         do not build static libraries [no]
103   --enable-shared          build shared libraries [no]
104   --enable-small           optimize for size instead of speed
105   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
106   --enable-gray            enable full grayscale support (slower color)
107   --disable-swscale-alpha  disable alpha channel support in swscale
108   --disable-all            disable building components, libraries and programs
109   --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
110   --enable-raise-major     increase major version numbers in sonames [no]
111
112 Program options:
113   --disable-programs       do not build command line programs
114   --disable-ffmpeg         disable ffmpeg build
115   --disable-ffplay         disable ffplay build
116   --disable-ffprobe        disable ffprobe build
117   --disable-ffserver       disable ffserver build
118
119 Documentation options:
120   --disable-doc            do not build documentation
121   --disable-htmlpages      do not build HTML documentation pages
122   --disable-manpages       do not build man documentation pages
123   --disable-podpages       do not build POD documentation pages
124   --disable-txtpages       do not build text documentation pages
125
126 Component options:
127   --disable-avdevice       disable libavdevice build
128   --disable-avcodec        disable libavcodec build
129   --disable-avformat       disable libavformat build
130   --disable-avutil         disable libavutil build
131   --disable-swresample     disable libswresample build
132   --disable-swscale        disable libswscale build
133   --disable-postproc       disable libpostproc build
134   --disable-avfilter       disable libavfilter build
135   --enable-avresample      enable libavresample build [no]
136   --disable-pthreads       disable pthreads [auto]
137   --disable-w32threads     disable Win32 threads [auto]
138   --disable-os2threads     disable OS/2 threads [auto]
139   --disable-network        disable network support [no]
140   --disable-dct            disable DCT code
141   --disable-dwt            disable DWT code
142   --disable-error-resilience disable error resilience code
143   --disable-lsp            disable LSP code
144   --disable-lzo            disable LZO decoder code
145   --disable-mdct           disable MDCT code
146   --disable-rdft           disable RDFT code
147   --disable-fft            disable FFT code
148   --disable-pixelutils     disable pixel utils in libavutil
149
150 Hardware accelerators:
151   --disable-dxva2          disable DXVA2 code [autodetect]
152   --disable-vaapi          disable VAAPI code [autodetect]
153   --disable-vda            disable VDA code [autodetect]
154   --disable-vdpau          disable VDPAU code [autodetect]
155
156 Individual component options:
157   --disable-everything     disable all components listed below
158   --disable-encoder=NAME   disable encoder NAME
159   --enable-encoder=NAME    enable encoder NAME
160   --disable-encoders       disable all encoders
161   --disable-decoder=NAME   disable decoder NAME
162   --enable-decoder=NAME    enable decoder NAME
163   --disable-decoders       disable all decoders
164   --disable-hwaccel=NAME   disable hwaccel NAME
165   --enable-hwaccel=NAME    enable hwaccel NAME
166   --disable-hwaccels       disable all hwaccels
167   --disable-muxer=NAME     disable muxer NAME
168   --enable-muxer=NAME      enable muxer NAME
169   --disable-muxers         disable all muxers
170   --disable-demuxer=NAME   disable demuxer NAME
171   --enable-demuxer=NAME    enable demuxer NAME
172   --disable-demuxers       disable all demuxers
173   --enable-parser=NAME     enable parser NAME
174   --disable-parser=NAME    disable parser NAME
175   --disable-parsers        disable all parsers
176   --enable-bsf=NAME        enable bitstream filter NAME
177   --disable-bsf=NAME       disable bitstream filter NAME
178   --disable-bsfs           disable all bitstream filters
179   --enable-protocol=NAME   enable protocol NAME
180   --disable-protocol=NAME  disable protocol NAME
181   --disable-protocols      disable all protocols
182   --enable-indev=NAME      enable input device NAME
183   --disable-indev=NAME     disable input device NAME
184   --disable-indevs         disable input devices
185   --enable-outdev=NAME     enable output device NAME
186   --disable-outdev=NAME    disable output device NAME
187   --disable-outdevs        disable output devices
188   --disable-devices        disable all devices
189   --enable-filter=NAME     enable filter NAME
190   --disable-filter=NAME    disable filter NAME
191   --disable-filters        disable all filters
192
193 External library support:
194   --enable-avisynth        enable reading of AviSynth script files [no]
195   --disable-bzlib          disable bzlib [autodetect]
196   --enable-fontconfig      enable fontconfig
197   --enable-frei0r          enable frei0r video filtering
198   --enable-gnutls          enable gnutls [no]
199   --disable-iconv          disable iconv [autodetect]
200   --enable-ladspa          enable LADSPA audio filtering
201   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
202   --enable-libass          enable libass subtitles rendering [no]
203   --enable-libbluray       enable BluRay reading using libbluray [no]
204   --enable-libbs2b         enable bs2b DSP library [no]
205   --enable-libcaca         enable textual display using libcaca
206   --enable-libcelt         enable CELT decoding via libcelt [no]
207   --enable-libcdio         enable audio CD grabbing with libcdio
208   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
209                            and libraw1394 [no]
210   --enable-libfaac         enable AAC encoding via libfaac [no]
211   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
212   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
213   --enable-libfreetype     enable libfreetype [no]
214   --enable-libfribidi      enable libfribidi [no]
215   --enable-libgme          enable Game Music Emu via libgme [no]
216   --enable-libgsm          enable GSM de/encoding via libgsm [no]
217   --enable-libiec61883     enable iec61883 via libiec61883 [no]
218   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
219   --enable-libmodplug      enable ModPlug via libmodplug [no]
220   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
221   --enable-libnut          enable NUT (de)muxing via libnut,
222                            native (de)muxer exists [no]
223   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
224   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
225   --enable-libopencv       enable video filtering via libopencv [no]
226   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
227   --enable-libopus         enable Opus de/encoding via libopus [no]
228   --enable-libpulse        enable Pulseaudio input via libpulse [no]
229   --enable-libquvi         enable quvi input via libquvi [no]
230   --enable-librtmp         enable RTMP[E] support via librtmp [no]
231   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
232   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
233   --enable-libsmbclient    enable Samba protocol via libsmbclient [no]
234   --enable-libsoxr         enable Include libsoxr resampling [no]
235   --enable-libspeex        enable Speex de/encoding via libspeex [no]
236   --enable-libssh          enable SFTP protocol via libssh [no]
237   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
238   --enable-libtheora       enable Theora encoding via libtheora [no]
239   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
240   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
241   --enable-libv4l2         enable libv4l2/v4l-utils [no]
242   --enable-libvidstab      enable video stabilization using vid.stab [no]
243   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
244   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
245   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
246                            native implementation exists [no]
247   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
248   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
249   --enable-libwebp         enable WebP encoding via libwebp [no]
250   --enable-libx264         enable H.264 encoding via x264 [no]
251   --enable-libx265         enable HEVC encoding via x265 [no]
252   --enable-libxavs         enable AVS encoding via xavs [no]
253   --enable-libxvid         enable Xvid encoding via xvidcore,
254                            native MPEG-4/Xvid encoder exists [no]
255   --enable-libzmq          enable message passing via libzmq [no]
256   --enable-libzvbi         enable teletext support via libzvbi [no]
257   --disable-lzma           disable lzma [autodetect]
258   --enable-decklink        enable Blackmagick DeckLink output [no]
259   --enable-openal          enable OpenAL 1.1 capture support [no]
260   --enable-opencl          enable OpenCL code
261   --enable-opengl          enable OpenGL rendering [no]
262   --enable-openssl         enable openssl [no]
263   --enable-x11grab         enable X11 grabbing [no]
264   --disable-xlib           disable xlib [autodetect]
265   --disable-zlib           disable zlib [autodetect]
266
267 Toolchain options:
268   --arch=ARCH              select architecture [$arch]
269   --cpu=CPU                select the minimum required CPU (affects
270                            instruction selection, may crash on older CPUs)
271   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
272   --progs-suffix=SUFFIX    program name suffix []
273   --enable-cross-compile   assume a cross-compiler is used
274   --sysroot=PATH           root of cross-build tree
275   --sysinclude=PATH        location of cross-build system headers
276   --target-os=OS           compiler targets OS [$target_os]
277   --target-exec=CMD        command to run executables on target
278   --target-path=DIR        path to view of build directory on target
279   --target-samples=DIR     path to samples directory on target
280   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
281   --toolchain=NAME         set tool defaults according to NAME
282   --nm=NM                  use nm tool NM [$nm_default]
283   --ar=AR                  use archive tool AR [$ar_default]
284   --as=AS                  use assembler AS [$as_default]
285   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
286   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
287   --cc=CC                  use C compiler CC [$cc_default]
288   --cxx=CXX                use C compiler CXX [$cxx_default]
289   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
290   --ld=LD                  use linker LD [$ld_default]
291   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
292   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
293   --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
294   --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
295   --host-cc=HOSTCC         use host C compiler HOSTCC
296   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
297   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
298   --host-ld=HOSTLD         use host linker HOSTLD
299   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
300   --host-libs=HLIBS        use libs HLIBS when linking for host
301   --host-os=OS             compiler host OS [$target_os]
302   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
303   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
304   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
305   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
306   --extra-libs=ELIBS       add ELIBS [$ELIBS]
307   --extra-version=STRING   version string suffix []
308   --optflags=OPTFLAGS      override optimization-related compiler flags
309   --build-suffix=SUFFIX    library name suffix []
310   --enable-pic             build position-independent code
311   --enable-thumb           compile for Thumb instruction set
312   --enable-lto             use link-time optimization
313
314 Advanced options (experts only):
315   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
316   --disable-symver         disable symbol versioning
317   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
318   --disable-safe-bitstream-reader
319                            disable buffer boundary checking in bitreaders
320                            (faster, but may crash)
321   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
322   --sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]
323
324 Optimization options (experts only):
325   --disable-asm            disable all assembly optimizations
326   --disable-altivec        disable AltiVec optimizations
327   --disable-amd3dnow       disable 3DNow! optimizations
328   --disable-amd3dnowext    disable 3DNow! extended optimizations
329   --disable-mmx            disable MMX optimizations
330   --disable-mmxext         disable MMXEXT optimizations
331   --disable-sse            disable SSE optimizations
332   --disable-sse2           disable SSE2 optimizations
333   --disable-sse3           disable SSE3 optimizations
334   --disable-ssse3          disable SSSE3 optimizations
335   --disable-sse4           disable SSE4 optimizations
336   --disable-sse42          disable SSE4.2 optimizations
337   --disable-avx            disable AVX optimizations
338   --disable-xop            disable XOP optimizations
339   --disable-fma3           disable FMA3 optimizations
340   --disable-fma4           disable FMA4 optimizations
341   --disable-avx2           disable AVX2 optimizations
342   --disable-armv5te        disable armv5te optimizations
343   --disable-armv6          disable armv6 optimizations
344   --disable-armv6t2        disable armv6t2 optimizations
345   --disable-vfp            disable VFP optimizations
346   --disable-neon           disable NEON optimizations
347   --disable-inline-asm     disable use of inline assembly
348   --disable-yasm           disable use of nasm/yasm assembly
349   --disable-mips32r2       disable MIPS32R2 optimizations
350   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
351   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
352   --disable-mipsfpu        disable floating point MIPS optimizations
353   --disable-fast-unaligned consider unaligned accesses slow
354
355 Developer options (useful when working on FFmpeg itself):
356   --disable-debug          disable debugging symbols
357   --enable-debug=LEVEL     set the debug level [$debuglevel]
358   --disable-optimizations  disable compiler optimizations
359   --enable-extra-warnings  enable more compiler warnings
360   --disable-stripping      disable stripping of executables and shared libraries
361   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
362                            2 causes a slowdown at runtime.
363   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
364   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
365                            leaks and errors, using the specified valgrind binary.
366                            Cannot be combined with --target-exec
367   --enable-ftrapv          Trap arithmetic overflows
368   --samples=PATH           location of test samples for FATE, if not set use
369                            \$FATE_SAMPLES at make invocation time.
370   --enable-neon-clobber-test check NEON registers for clobbering (should be
371                            used only for debugging purposes)
372   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
373                            should be used only for debugging purposes)
374   --enable-random          randomly enable/disable components
375   --disable-random
376   --enable-random=LIST     randomly enable/disable specific components or
377   --disable-random=LIST    component groups. LIST is a comma-separated list
378                            of NAME[:PROB] entries where NAME is a component
379                            (group) and PROB the probability associated with
380                            NAME (default 0.5).
381   --random-seed=VALUE      seed value for --enable/disable-random
382
383 NOTE: Object files are built at the place where configure is launched.
384 EOF
385   exit 0
386 }
387
388 quotes='""'
389
390 log(){
391     echo "$@" >> $logfile
392 }
393
394 log_file(){
395     log BEGIN $1
396     pr -n -t $1 >> $logfile
397     log END $1
398 }
399
400 echolog(){
401     log "$@"
402     echo "$@"
403 }
404
405 warn(){
406     log "WARNING: $*"
407     WARNINGS="${WARNINGS}WARNING: $*\n"
408 }
409
410 die(){
411     echolog "$@"
412     cat <<EOF
413
414 If you think configure made a mistake, make sure you are using the latest
415 version from Git.  If the latest version fails, report the problem to the
416 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
417 EOF
418     if disabled logging; then
419         cat <<EOF
420 Rerun configure with logging enabled (do not use --disable-logging), and
421 include the log this produces with your report.
422 EOF
423     else
424         cat <<EOF
425 Include the log file "$logfile" produced by configure as this will help
426 solve the problem.
427 EOF
428     fi
429     exit 1
430 }
431
432 # Avoid locale weirdness, besides we really just want to translate ASCII.
433 toupper(){
434     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
435 }
436
437 tolower(){
438     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
439 }
440
441 c_escape(){
442     echo "$*" | sed 's/["\\]/\\\0/g'
443 }
444
445 sh_quote(){
446     v=$(echo "$1" | sed "s/'/'\\\\''/g")
447     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
448     echo "$v"
449 }
450
451 cleanws(){
452     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\\r//g'
453 }
454
455 filter(){
456     pat=$1
457     shift
458     for v; do
459         eval "case $v in $pat) echo $v ;; esac"
460     done
461 }
462
463 filter_out(){
464     pat=$1
465     shift
466     for v; do
467         eval "case $v in $pat) ;; *) echo $v ;; esac"
468     done
469 }
470
471 map(){
472     m=$1
473     shift
474     for v; do eval $m; done
475 }
476
477 add_suffix(){
478     suffix=$1
479     shift
480     for v; do echo ${v}${suffix}; done
481 }
482
483 set_all(){
484     value=$1
485     shift
486     for var in $*; do
487         eval $var=$value
488     done
489 }
490
491 set_weak(){
492     value=$1
493     shift
494     for var; do
495         eval : \${$var:=$value}
496     done
497 }
498
499 sanitize_var_name(){
500     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
501 }
502
503 set_safe(){
504     var=$1
505     shift
506     eval $(sanitize_var_name "$var")='$*'
507 }
508
509 get_safe(){
510     eval echo \$$(sanitize_var_name "$1")
511 }
512
513 pushvar(){
514     for pvar in $*; do
515         eval level=\${${pvar}_level:=0}
516         eval ${pvar}_${level}="\$$pvar"
517         eval ${pvar}_level=$(($level+1))
518     done
519 }
520
521 popvar(){
522     for pvar in $*; do
523         eval level=\${${pvar}_level:-0}
524         test $level = 0 && continue
525         eval level=$(($level-1))
526         eval $pvar="\${${pvar}_${level}}"
527         eval ${pvar}_level=$level
528         eval unset ${pvar}_${level}
529     done
530 }
531
532 enable(){
533     set_all yes $*
534 }
535
536 disable(){
537     set_all no $*
538 }
539
540 enable_weak(){
541     set_weak yes $*
542 }
543
544 disable_weak(){
545     set_weak no $*
546 }
547
548 enable_safe(){
549     for var; do
550         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
551     done
552 }
553
554 disable_safe(){
555     for var; do
556         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
557     done
558 }
559
560 do_enable_deep(){
561     for var; do
562         enabled $var && continue
563         eval sel="\$${var}_select"
564         eval sgs="\$${var}_suggest"
565         pushvar var sgs
566         enable_deep $sel
567         popvar sgs
568         enable_deep_weak $sgs
569         popvar var
570     done
571 }
572
573 enable_deep(){
574     do_enable_deep $*
575     enable $*
576 }
577
578 enable_deep_weak(){
579     for var; do
580         disabled $var && continue
581         pushvar var
582         do_enable_deep $var
583         popvar var
584         enable_weak $var
585     done
586 }
587
588 enabled(){
589     test "${1#!}" = "$1" && op== || op=!=
590     eval test "x\$${1#!}" $op "xyes"
591 }
592
593 disabled(){
594     test "${1#!}" = "$1" && op== || op=!=
595     eval test "x\$${1#!}" $op "xno"
596 }
597
598 enabled_all(){
599     for opt; do
600         enabled $opt || return 1
601     done
602 }
603
604 disabled_all(){
605     for opt; do
606         disabled $opt || return 1
607     done
608 }
609
610 enabled_any(){
611     for opt; do
612         enabled $opt && return 0
613     done
614 }
615
616 disabled_any(){
617     for opt; do
618         disabled $opt && return 0
619     done
620     return 1
621 }
622
623 set_default(){
624     for opt; do
625         eval : \${$opt:=\$${opt}_default}
626     done
627 }
628
629 is_in(){
630     value=$1
631     shift
632     for var in $*; do
633         [ $var = $value ] && return 0
634     done
635     return 1
636 }
637
638 do_check_deps(){
639     for cfg; do
640         cfg="${cfg#!}"
641         enabled ${cfg}_checking && die "Circular dependency for $cfg."
642         disabled ${cfg}_checking && continue
643         enable ${cfg}_checking
644         append allopts $cfg
645
646         eval dep_all="\$${cfg}_deps"
647         eval dep_any="\$${cfg}_deps_any"
648         eval dep_sel="\$${cfg}_select"
649         eval dep_sgs="\$${cfg}_suggest"
650         eval dep_ifa="\$${cfg}_if"
651         eval dep_ifn="\$${cfg}_if_any"
652
653         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
654         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
655         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
656
657         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
658         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
659         enabled_all  $dep_all || disable $cfg
660         enabled_any  $dep_any || disable $cfg
661         disabled_any $dep_sel && disable $cfg
662
663         if enabled $cfg; then
664             enable_deep $dep_sel
665             enable_deep_weak $dep_sgs
666         fi
667
668         disable ${cfg}_checking
669     done
670 }
671
672 check_deps(){
673     unset allopts
674
675     do_check_deps "$@"
676
677     for cfg in $allopts; do
678         enabled $cfg || continue
679         eval dep_extralibs="\$${cfg}_extralibs"
680         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
681     done
682 }
683
684 print_config(){
685     pfx=$1
686     files=$2
687     shift 2
688     map 'eval echo "$v \${$v:-no}"' "$@" |
689     awk "BEGIN { split(\"$files\", files) }
690         {
691             c = \"$pfx\" toupper(\$1);
692             v = \$2;
693             sub(/yes/, 1, v);
694             sub(/no/,  0, v);
695             for (f in files) {
696                 file = files[f];
697                 if (file ~ /\\.h\$/) {
698                     printf(\"#define %s %d\\n\", c, v) >>file;
699                 } else if (file ~ /\\.asm\$/) {
700                     printf(\"%%define %s %d\\n\", c, v) >>file;
701                 } else if (file ~ /\\.mak\$/) {
702                     n = -v ? \"\" : \"!\";
703                     printf(\"%s%s=yes\\n\", n, c) >>file;
704                 } else if (file ~ /\\.texi\$/) {
705                     pre = -v ? \"\" : \"@c \";
706                     yesno = \$2;
707                     c2 = tolower(c);
708                     gsub(/_/, \"-\", c2);
709                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
710                 }
711             }
712         }"
713 }
714
715 print_enabled(){
716     suf=$1
717     shift
718     for v; do
719         enabled $v && printf "%s\n" ${v%$suf};
720     done
721 }
722
723 append(){
724     var=$1
725     shift
726     eval "$var=\"\$$var $*\""
727 }
728
729 prepend(){
730     var=$1
731     shift
732     eval "$var=\"$* \$$var\""
733 }
734
735 unique(){
736     var=$1
737     uniq_list=""
738     for tok in $(eval echo \$$var); do
739         uniq_list="$(filter_out $tok $uniq_list) $tok"
740     done
741     eval "$var=\"${uniq_list}\""
742 }
743
744 add_cppflags(){
745     append CPPFLAGS "$@"
746 }
747
748 add_cflags(){
749     append CFLAGS $($cflags_filter "$@")
750 }
751
752 add_cxxflags(){
753     append CXXFLAGS $($cflags_filter "$@")
754 }
755
756 add_asflags(){
757     append ASFLAGS $($asflags_filter "$@")
758 }
759
760 add_ldflags(){
761     append LDFLAGS $($ldflags_filter "$@")
762 }
763
764 add_ldexeflags(){
765     append LDEXEFLAGS $($ldflags_filter "$@")
766 }
767
768 add_stripflags(){
769     append ASMSTRIPFLAGS "$@"
770 }
771
772 add_extralibs(){
773     prepend extralibs $($ldflags_filter "$@")
774 }
775
776 add_host_cppflags(){
777     append host_cppflags "$@"
778 }
779
780 add_host_cflags(){
781     append host_cflags $($host_cflags_filter "$@")
782 }
783
784 add_host_ldflags(){
785     append host_ldflags $($host_ldflags_filter "$@")
786 }
787
788 add_compat(){
789     append compat_objs $1
790     shift
791     map 'add_cppflags -D$v' "$@"
792 }
793
794 check_cmd(){
795     log "$@"
796     "$@" >> $logfile 2>&1
797 }
798
799 check_stat(){
800     log check_stat "$@"
801     stat "$1" >> $logfile 2>&1
802 }
803
804 cc_o(){
805     eval printf '%s\\n' $CC_O
806 }
807
808 cc_e(){
809     eval printf '%s\\n' $CC_E
810 }
811
812 check_cc(){
813     log check_cc "$@"
814     cat > $TMPC
815     log_file $TMPC
816     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
817 }
818
819 check_cxx(){
820     log check_cxx "$@"
821     cat > $TMPCPP
822     log_file $TMPCPP
823     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
824 }
825
826 check_oc(){
827     log check_oc "$@"
828     cat > $TMPM
829     log_file $TMPM
830     check_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM
831 }
832
833 check_cpp(){
834     log check_cpp "$@"
835     cat > $TMPC
836     log_file $TMPC
837     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
838 }
839
840 as_o(){
841     eval printf '%s\\n' $AS_O
842 }
843
844 check_as(){
845     log check_as "$@"
846     cat > $TMPS
847     log_file $TMPS
848     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
849 }
850
851 check_inline_asm(){
852     log check_inline_asm "$@"
853     name="$1"
854     code="$2"
855     shift 2
856     disable $name
857     check_cc "$@" <<EOF && enable $name
858 void foo(void){ __asm__ volatile($code); }
859 EOF
860 }
861
862 check_insn(){
863     log check_insn "$@"
864     check_inline_asm ${1}_inline "\"$2\""
865     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
866 }
867
868 check_yasm(){
869     log check_yasm "$@"
870     echo "$1" > $TMPS
871     log_file $TMPS
872     shift 1
873     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
874 }
875
876 ld_o(){
877     eval printf '%s\\n' $LD_O
878 }
879
880 check_ld(){
881     log check_ld "$@"
882     type=$1
883     shift 1
884     flags=$(filter_out '-l*|*.so' $@)
885     libs=$(filter '-l*|*.so' $@)
886     check_$type $($cflags_filter $flags) || return
887     flags=$($ldflags_filter $flags)
888     libs=$($ldflags_filter $libs)
889     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
890 }
891
892 print_include(){
893     hdr=$1
894     test "${hdr%.h}" = "${hdr}" &&
895         echo "#include $hdr"    ||
896         echo "#include <$hdr>"
897 }
898
899 check_code(){
900     log check_code "$@"
901     check=$1
902     headers=$2
903     code=$3
904     shift 3
905     {
906         for hdr in $headers; do
907             print_include $hdr
908         done
909         echo "int main(void) { $code; return 0; }"
910     } | check_$check "$@"
911 }
912
913 check_cppflags(){
914     log check_cppflags "$@"
915     check_cc "$@" <<EOF && append CPPFLAGS "$@"
916 int x;
917 EOF
918 }
919
920 test_cflags(){
921     log test_cflags "$@"
922     set -- $($cflags_filter "$@")
923     check_cc "$@" <<EOF
924 int x;
925 EOF
926 }
927
928 check_cflags(){
929     log check_cflags "$@"
930     test_cflags "$@" && add_cflags "$@"
931 }
932
933 check_cxxflags(){
934     log check_cxxflags "$@"
935     set -- $($cflags_filter "$@")
936     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
937 int x;
938 EOF
939 }
940
941 test_ldflags(){
942     log test_ldflags "$@"
943     check_ld "cc" "$@" <<EOF
944 int main(void){ return 0; }
945 EOF
946 }
947
948 check_ldflags(){
949     log check_ldflags "$@"
950     test_ldflags "$@" && add_ldflags "$@"
951 }
952
953 test_stripflags(){
954     log test_stripflags "$@"
955     # call check_cc to get a fresh TMPO
956     check_cc <<EOF
957 int main(void) { return 0; }
958 EOF
959     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
960 }
961
962 check_stripflags(){
963     log check_stripflags "$@"
964     test_stripflags "$@" && add_stripflags "$@"
965 }
966
967 check_header(){
968     log check_header "$@"
969     header=$1
970     shift
971     disable_safe $header
972     check_cpp "$@" <<EOF && enable_safe $header
973 #include <$header>
974 int x;
975 EOF
976 }
977
978 check_header_oc(){
979     log check_header_oc "$@"
980     rm -f -- "$TMPO"
981     header=$1
982     shift
983     disable_safe $header
984     {
985        echo "#include <$header>"
986        echo "int main(void) { return 0; }"
987     } | check_oc && check_stat "$TMPO" && enable_safe $headers
988 }
989
990 check_func(){
991     log check_func "$@"
992     func=$1
993     shift
994     disable $func
995     check_ld "cc" "$@" <<EOF && enable $func
996 extern int $func();
997 int main(void){ $func(); }
998 EOF
999 }
1000
1001 check_mathfunc(){
1002     log check_mathfunc "$@"
1003     func=$1
1004     narg=$2
1005     shift 2
1006     test $narg = 2 && args="f, g" || args="f"
1007     disable $func
1008     check_ld "cc" "$@" <<EOF && enable $func
1009 #include <math.h>
1010 float foo(float f, float g) { return $func($args); }
1011 int main(void){ return (int) foo; }
1012 EOF
1013 }
1014
1015 check_func_headers(){
1016     log check_func_headers "$@"
1017     headers=$1
1018     funcs=$2
1019     shift 2
1020     {
1021         for hdr in $headers; do
1022             print_include $hdr
1023         done
1024         for func in $funcs; do
1025             echo "long check_$func(void) { return (long) $func; }"
1026         done
1027         echo "int main(void) { return 0; }"
1028     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1029 }
1030
1031 check_class_headers_cpp(){
1032     log check_class_headers_cpp "$@"
1033     headers=$1
1034     classes=$2
1035     shift 2
1036     {
1037         for hdr in $headers; do
1038             echo "#include <$hdr>"
1039         done
1040         echo "int main(void) { "
1041         i=1
1042         for class in $classes; do
1043             echo "$class obj$i;"
1044             i=$(expr $i + 1)
1045         done
1046         echo "return 0; }"
1047     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1048 }
1049
1050 check_cpp_condition(){
1051     log check_cpp_condition "$@"
1052     header=$1
1053     condition=$2
1054     shift 2
1055     check_cpp "$@" <<EOF
1056 #include <$header>
1057 #if !($condition)
1058 #error "unsatisfied condition: $condition"
1059 #endif
1060 EOF
1061 }
1062
1063 check_lib(){
1064     log check_lib "$@"
1065     header="$1"
1066     func="$2"
1067     shift 2
1068     check_header $header && check_func $func "$@" && add_extralibs "$@"
1069 }
1070
1071 check_lib2(){
1072     log check_lib2 "$@"
1073     headers="$1"
1074     funcs="$2"
1075     shift 2
1076     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1077 }
1078
1079 check_lib_cpp(){
1080     log check_lib_cpp "$@"
1081     headers="$1"
1082     classes="$2"
1083     shift 2
1084     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1085 }
1086
1087 check_pkg_config(){
1088     log check_pkg_config "$@"
1089     pkgandversion="$1"
1090     pkg="${1%% *}"
1091     headers="$2"
1092     funcs="$3"
1093     shift 3
1094     check_cmd $pkg_config --exists --print-errors $pkgandversion || return
1095     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1096     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1097     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1098         set_safe ${pkg}_cflags $pkg_cflags   &&
1099         set_safe ${pkg}_libs   $pkg_libs
1100 }
1101
1102 check_exec(){
1103     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1104 }
1105
1106 check_exec_crash(){
1107     code=$(cat)
1108
1109     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1110     # are safe but may not be available everywhere.  Thus we use
1111     # raise(SIGTERM) instead.  The check is run in a subshell so we
1112     # can redirect the "Terminated" message from the shell.  SIGBUS
1113     # is not defined by standard C so it is used conditionally.
1114
1115     (check_exec "$@") >> $logfile 2>&1 <<EOF
1116 #include <signal.h>
1117 static void sighandler(int sig){
1118     raise(SIGTERM);
1119 }
1120 int foo(void){
1121     $code
1122 }
1123 int (*func_ptr)(void) = foo;
1124 int main(void){
1125     signal(SIGILL, sighandler);
1126     signal(SIGFPE, sighandler);
1127     signal(SIGSEGV, sighandler);
1128 #ifdef SIGBUS
1129     signal(SIGBUS, sighandler);
1130 #endif
1131     return func_ptr();
1132 }
1133 EOF
1134 }
1135
1136 check_type(){
1137     log check_type "$@"
1138     headers=$1
1139     type=$2
1140     shift 2
1141     disable_safe "$type"
1142     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1143 }
1144
1145 check_struct(){
1146     log check_struct "$@"
1147     headers=$1
1148     struct=$2
1149     member=$3
1150     shift 3
1151     disable_safe "${struct}_${member}"
1152     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1153         enable_safe "${struct}_${member}"
1154 }
1155
1156 check_builtin(){
1157     log check_builtin "$@"
1158     name=$1
1159     headers=$2
1160     builtin=$3
1161     shift 3
1162     disable "$name"
1163     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1164 }
1165
1166 check_compile_assert(){
1167     log check_compile_assert "$@"
1168     name=$1
1169     headers=$2
1170     condition=$3
1171     shift 3
1172     disable "$name"
1173     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1174 }
1175
1176 require(){
1177     name="$1"
1178     header="$2"
1179     func="$3"
1180     shift 3
1181     check_lib $header $func "$@" || die "ERROR: $name not found"
1182 }
1183
1184 require2(){
1185     name="$1"
1186     headers="$2"
1187     func="$3"
1188     shift 3
1189     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1190 }
1191
1192 require_cpp(){
1193     name="$1"
1194     headers="$2"
1195     classes="$3"
1196     shift 3
1197     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1198 }
1199
1200 require_pkg_config(){
1201     pkg="$1"
1202     check_pkg_config "$@" || die "ERROR: $pkg not found"
1203     add_cflags    $(get_safe ${pkg}_cflags)
1204     add_extralibs $(get_safe ${pkg}_libs)
1205 }
1206
1207 require_libfreetype(){
1208     log require_libfreetype "$@"
1209     pkg="freetype2"
1210     check_cmd $pkg_config --exists --print-errors $pkg \
1211       || die "ERROR: $pkg not found"
1212     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1213     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1214     {
1215         echo "#include <ft2build.h>"
1216         echo "#include FT_FREETYPE_H"
1217         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1218         echo "int main(void) { return 0; }"
1219     } | check_ld "cc" $pkg_cflags $pkg_libs \
1220       && set_safe ${pkg}_cflags $pkg_cflags \
1221       && set_safe ${pkg}_libs   $pkg_libs \
1222       || die "ERROR: $pkg not found"
1223     add_cflags    $(get_safe ${pkg}_cflags)
1224     add_extralibs $(get_safe ${pkg}_libs)
1225 }
1226
1227 hostcc_e(){
1228     eval printf '%s\\n' $HOSTCC_E
1229 }
1230
1231 hostcc_o(){
1232     eval printf '%s\\n' $HOSTCC_O
1233 }
1234
1235 check_host_cc(){
1236     log check_host_cc "$@"
1237     cat > $TMPC
1238     log_file $TMPC
1239     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1240 }
1241
1242 check_host_cpp(){
1243     log check_host_cpp "$@"
1244     cat > $TMPC
1245     log_file $TMPC
1246     check_cmd $host_cc $HOSTCPPFLAGS $HOSTCFLAGS "$@" $(hostcc_e $TMPO) $TMPC
1247 }
1248
1249 check_host_cppflags(){
1250     log check_host_cppflags "$@"
1251     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1252 int x;
1253 EOF
1254 }
1255
1256 check_host_cflags(){
1257     log check_host_cflags "$@"
1258     set -- $($host_cflags_filter "$@")
1259     check_host_cc "$@" <<EOF && append host_cflags "$@"
1260 int x;
1261 EOF
1262 }
1263
1264 check_host_cpp_condition(){
1265     log check_host_cpp_condition "$@"
1266     header=$1
1267     condition=$2
1268     shift 2
1269     check_host_cpp "$@" <<EOF
1270 #include <$header>
1271 #if !($condition)
1272 #error "unsatisfied condition: $condition"
1273 #endif
1274 EOF
1275 }
1276
1277 apply(){
1278     file=$1
1279     shift
1280     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1281 }
1282
1283 cp_if_changed(){
1284     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1285     mkdir -p "$(dirname $2)"
1286     $cp_f "$1" "$2"
1287 }
1288
1289 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1290 # system-dependent things.
1291
1292 COMPONENT_LIST="
1293     bsfs
1294     decoders
1295     demuxers
1296     encoders
1297     filters
1298     hwaccels
1299     indevs
1300     muxers
1301     outdevs
1302     parsers
1303     protocols
1304 "
1305
1306 EXAMPLE_LIST="
1307     avio_reading_example
1308     decoding_encoding_example
1309     demuxing_decoding_example
1310     extract_mvs_example
1311     filter_audio_example
1312     filtering_audio_example
1313     filtering_video_example
1314     metadata_example
1315     muxing_example
1316     remuxing_example
1317     resampling_audio_example
1318     scaling_video_example
1319     transcode_aac_example
1320     transcoding_example
1321 "
1322
1323 EXTERNAL_LIBRARY_LIST="
1324     avisynth
1325     bzlib
1326     crystalhd
1327     decklink
1328     frei0r
1329     gnutls
1330     iconv
1331     ladspa
1332     libaacplus
1333     libass
1334     libbluray
1335     libbs2b
1336     libcaca
1337     libcdio
1338     libcelt
1339     libdc1394
1340     libfaac
1341     libfdk_aac
1342     libflite
1343     libfontconfig
1344     libfreetype
1345     libfribidi
1346     libgme
1347     libgsm
1348     libiec61883
1349     libilbc
1350     libmodplug
1351     libmp3lame
1352     libnut
1353     libopencore_amrnb
1354     libopencore_amrwb
1355     libopencv
1356     libopenjpeg
1357     libopus
1358     libpulse
1359     libquvi
1360     librtmp
1361     libschroedinger
1362     libshine
1363     libsmbclient
1364     libsoxr
1365     libspeex
1366     libssh
1367     libstagefright_h264
1368     libtheora
1369     libtwolame
1370     libutvideo
1371     libv4l2
1372     libvidstab
1373     libvo_aacenc
1374     libvo_amrwbenc
1375     libvorbis
1376     libvpx
1377     libwavpack
1378     libwebp
1379     libx264
1380     libx265
1381     libxavs
1382     libxvid
1383     libzmq
1384     libzvbi
1385     lzma
1386     openal
1387     opencl
1388     opengl
1389     openssl
1390     x11grab
1391     xlib
1392     zlib
1393 "
1394
1395 DOCUMENT_LIST="
1396     doc
1397     htmlpages
1398     manpages
1399     podpages
1400     txtpages
1401 "
1402
1403 FEATURE_LIST="
1404     ftrapv
1405     gray
1406     hardcoded_tables
1407     runtime_cpudetect
1408     safe_bitstream_reader
1409     shared
1410     small
1411     static
1412     swscale_alpha
1413 "
1414
1415 HWACCEL_LIST="
1416     dxva2
1417     vaapi
1418     vda
1419     vdpau
1420     xvmc
1421 "
1422
1423 LIBRARY_LIST="
1424     avcodec
1425     avdevice
1426     avfilter
1427     avformat
1428     avresample
1429     avutil
1430     postproc
1431     swresample
1432     swscale
1433 "
1434
1435 LICENSE_LIST="
1436     gpl
1437     nonfree
1438     version3
1439 "
1440
1441 PROGRAM_LIST="
1442     ffplay
1443     ffprobe
1444     ffserver
1445     ffmpeg
1446 "
1447
1448 SUBSYSTEM_LIST="
1449     dct
1450     dwt
1451     error_resilience
1452     fast_unaligned
1453     fft
1454     lsp
1455     lzo
1456     mdct
1457     pixelutils
1458     network
1459     rdft
1460 "
1461
1462 CONFIG_LIST="
1463     $COMPONENT_LIST
1464     $DOCUMENT_LIST
1465     $EXAMPLE_LIST
1466     $EXTERNAL_LIBRARY_LIST
1467     $FEATURE_LIST
1468     $HWACCEL_LIST
1469     $LICENSE_LIST
1470     $LIBRARY_LIST
1471     $PROGRAM_LIST
1472     $SUBSYSTEM_LIST
1473     fontconfig
1474     incompatible_libav_abi
1475     memalign_hack
1476     memory_poisoning
1477     neon_clobber_test
1478     pic
1479     pod2man
1480     raise_major
1481     thumb
1482     xmm_clobber_test
1483 "
1484
1485 THREADS_LIST="
1486     pthreads
1487     os2threads
1488     w32threads
1489 "
1490
1491 ATOMICS_LIST="
1492     atomics_gcc
1493     atomics_suncc
1494     atomics_win32
1495 "
1496
1497 ARCH_LIST="
1498     aarch64
1499     alpha
1500     arm
1501     avr32
1502     avr32_ap
1503     avr32_uc
1504     bfin
1505     ia64
1506     m68k
1507     mips
1508     mips64
1509     parisc
1510     ppc
1511     ppc64
1512     s390
1513     sh4
1514     sparc
1515     sparc64
1516     tilegx
1517     tilepro
1518     tomi
1519     x86
1520     x86_32
1521     x86_64
1522 "
1523
1524 ARCH_EXT_LIST_ARM="
1525     armv5te
1526     armv6
1527     armv6t2
1528     armv8
1529     neon
1530     vfp
1531     vfpv3
1532     setend
1533 "
1534
1535 ARCH_EXT_LIST_MIPS="
1536     mipsfpu
1537     mips32r2
1538     mipsdspr1
1539     mipsdspr2
1540 "
1541
1542 ARCH_EXT_LIST_X86_SIMD="
1543     amd3dnow
1544     amd3dnowext
1545     avx
1546     avx2
1547     fma3
1548     fma4
1549     mmx
1550     mmxext
1551     sse
1552     sse2
1553     sse3
1554     sse4
1555     sse42
1556     ssse3
1557     xop
1558 "
1559
1560 ARCH_EXT_LIST_PPC="
1561     altivec
1562     dcbzl
1563     ldbrx
1564     ppc4xx
1565     vsx
1566 "
1567
1568 ARCH_EXT_LIST_X86="
1569     $ARCH_EXT_LIST_X86_SIMD
1570     cpunop
1571     i686
1572 "
1573
1574 ARCH_EXT_LIST="
1575     $ARCH_EXT_LIST_ARM
1576     $ARCH_EXT_LIST_PPC
1577     $ARCH_EXT_LIST_X86
1578     $ARCH_EXT_LIST_MIPS
1579     loongson
1580 "
1581
1582 ARCH_FEATURES="
1583     aligned_stack
1584     fast_64bit
1585     fast_clz
1586     fast_cmov
1587     local_aligned_8
1588     local_aligned_16
1589     local_aligned_32
1590     simd_align_16
1591 "
1592
1593 BUILTIN_LIST="
1594     atomic_cas_ptr
1595     machine_rw_barrier
1596     MemoryBarrier
1597     mm_empty
1598     rdtsc
1599     sarestart
1600     sync_val_compare_and_swap
1601 "
1602 HAVE_LIST_CMDLINE="
1603     inline_asm
1604     symver
1605     yasm
1606 "
1607
1608 HAVE_LIST_PUB="
1609     bigendian
1610     fast_unaligned
1611     incompatible_libav_abi
1612 "
1613
1614 HEADERS_LIST="
1615     alsa_asoundlib_h
1616     altivec_h
1617     arpa_inet_h
1618     asm_types_h
1619     cdio_paranoia_h
1620     cdio_paranoia_paranoia_h
1621     CL_cl_h
1622     dev_bktr_ioctl_bt848_h
1623     dev_bktr_ioctl_meteor_h
1624     dev_ic_bt8xx_h
1625     dev_video_bktr_ioctl_bt848_h
1626     dev_video_meteor_ioctl_meteor_h
1627     direct_h
1628     dlfcn_h
1629     dxva_h
1630     ES2_gl_h
1631     gsm_h
1632     io_h
1633     mach_mach_time_h
1634     machine_ioctl_bt848_h
1635     machine_ioctl_meteor_h
1636     malloc_h
1637     openjpeg_1_5_openjpeg_h
1638     OpenGL_gl3_h
1639     poll_h
1640     sndio_h
1641     soundcard_h
1642     sys_mman_h
1643     sys_param_h
1644     sys_resource_h
1645     sys_select_h
1646     sys_soundcard_h
1647     sys_time_h
1648     sys_un_h
1649     sys_videoio_h
1650     termios_h
1651     unistd_h
1652     windows_h
1653     winsock2_h
1654 "
1655
1656 INTRINSICS_LIST="
1657     intrinsics_neon
1658 "
1659
1660 MATH_FUNCS="
1661     atanf
1662     atan2f
1663     cbrt
1664     cbrtf
1665     cosf
1666     exp2
1667     exp2f
1668     expf
1669     fminf
1670     isinf
1671     isnan
1672     ldexpf
1673     llrint
1674     llrintf
1675     log2
1676     log2f
1677     log10f
1678     lrint
1679     lrintf
1680     powf
1681     rint
1682     round
1683     roundf
1684     sinf
1685     trunc
1686     truncf
1687 "
1688
1689 SYSTEM_FUNCS="
1690     access
1691     aligned_malloc
1692     clock_gettime
1693     closesocket
1694     CommandLineToArgvW
1695     CoTaskMemFree
1696     CryptGenRandom
1697     dlopen
1698     fcntl
1699     flt_lim
1700     fork
1701     getaddrinfo
1702     gethrtime
1703     getopt
1704     GetProcessAffinityMask
1705     GetProcessMemoryInfo
1706     GetProcessTimes
1707     getrusage
1708     getservbyport
1709     GetSystemTimeAsFileTime
1710     gettimeofday
1711     glob
1712     glXGetProcAddress
1713     inet_aton
1714     isatty
1715     jack_port_get_latency_range
1716     kbhit
1717     localtime_r
1718     lzo1x_999_compress
1719     mach_absolute_time
1720     MapViewOfFile
1721     memalign
1722     mkstemp
1723     mmap
1724     mprotect
1725     nanosleep
1726     PeekNamedPipe
1727     posix_memalign
1728     pthread_cancel
1729     sched_getaffinity
1730     SetConsoleTextAttribute
1731     setmode
1732     setrlimit
1733     Sleep
1734     strerror_r
1735     sysconf
1736     sysctl
1737     usleep
1738     VirtualAlloc
1739     wglGetProcAddress
1740 "
1741
1742 TOOLCHAIN_FEATURES="
1743     as_dn_directive
1744     as_func
1745     asm_mod_q
1746     attribute_may_alias
1747     attribute_packed
1748     ebp_available
1749     ebx_available
1750     gnu_as
1751     gnu_windres
1752     ibm_asm
1753     inline_asm_labels
1754     inline_asm_nonlocal_labels
1755     inline_asm_direct_symbol_refs
1756     pragma_deprecated
1757     rsync_contimeout
1758     symver_asm_label
1759     symver_gnu_asm
1760     vfp_args
1761     xform_asm
1762     xmm_clobbers
1763 "
1764
1765 TYPES_LIST="
1766     socklen_t
1767     struct_addrinfo
1768     struct_group_source_req
1769     struct_ip_mreq_source
1770     struct_ipv6_mreq
1771     struct_pollfd
1772     struct_rusage_ru_maxrss
1773     struct_sctp_event_subscribe
1774     struct_sockaddr_in6
1775     struct_sockaddr_sa_len
1776     struct_sockaddr_storage
1777     struct_stat_st_mtim_tv_nsec
1778     struct_v4l2_frmivalenum_discrete
1779 "
1780
1781 HAVE_LIST="
1782     $ARCH_EXT_LIST
1783     $(add_suffix _external $ARCH_EXT_LIST)
1784     $(add_suffix _inline   $ARCH_EXT_LIST)
1785     $ARCH_FEATURES
1786     $ATOMICS_LIST
1787     $BUILTIN_LIST
1788     $HAVE_LIST_CMDLINE
1789     $HAVE_LIST_PUB
1790     $HEADERS_LIST
1791     $INTRINSICS_LIST
1792     $MATH_FUNCS
1793     $SYSTEM_FUNCS
1794     $THREADS_LIST
1795     $TOOLCHAIN_FEATURES
1796     $TYPES_LIST
1797     atomics_native
1798     dos_paths
1799     dxva2api_cobj
1800     dxva2_lib
1801     libc_msvcrt
1802     libdc1394_1
1803     libdc1394_2
1804     makeinfo
1805     makeinfo_html
1806     perl
1807     pod2man
1808     sdl
1809     texi2html
1810     threads
1811     vdpau_x11
1812     xlib
1813 "
1814
1815 # options emitted with CONFIG_ prefix but not available on the command line
1816 CONFIG_EXTRA="
1817     aandcttables
1818     ac3dsp
1819     audio_frame_queue
1820     audiodsp
1821     blockdsp
1822     bswapdsp
1823     cabac
1824     dvprofile
1825     exif
1826     fdctdsp
1827     frame_thread_encoder
1828     gcrypt
1829     golomb
1830     gplv3
1831     h263dsp
1832     h264chroma
1833     h264dsp
1834     h264pred
1835     h264qpel
1836     hpeldsp
1837     huffman
1838     huffyuvdsp
1839     huffyuvencdsp
1840     idctdsp
1841     iirfilter
1842     intrax8
1843     lgplv3
1844     llauddsp
1845     llviddsp
1846     lpc
1847     me_cmp
1848     mpeg_er
1849     mpegaudio
1850     mpegaudiodsp
1851     mpegvideo
1852     mpegvideoenc
1853     nettle
1854     pixblockdsp
1855     qpeldsp
1856     rangecoder
1857     riffdec
1858     riffenc
1859     rtpdec
1860     rtpenc_chain
1861     sinewin
1862     startcode
1863     tpeldsp
1864     videodsp
1865     vp3dsp
1866 "
1867
1868 CMDLINE_SELECT="
1869     $ARCH_EXT_LIST
1870     $CONFIG_LIST
1871     $HAVE_LIST_CMDLINE
1872     $THREADS_LIST
1873     asm
1874     cross_compile
1875     debug
1876     extra_warnings
1877     logging
1878     lto
1879     optimizations
1880     rpath
1881     stripping
1882 "
1883
1884 PATHS_LIST="
1885     bindir
1886     datadir
1887     docdir
1888     incdir
1889     libdir
1890     mandir
1891     prefix
1892     shlibdir
1893 "
1894
1895 CMDLINE_SET="
1896     $PATHS_LIST
1897     ar
1898     arch
1899     as
1900     assert_level
1901     build_suffix
1902     cc
1903     cpu
1904     cross_prefix
1905     cxx
1906     dep_cc
1907     doxygen
1908     extra_version
1909     gas
1910     host_cc
1911     host_cflags
1912     host_ld
1913     host_ldflags
1914     host_libs
1915     host_os
1916     install
1917     ld
1918     logfile
1919     malloc_prefix
1920     nm
1921     optflags
1922     pkg_config
1923     pkg_config_flags
1924     progs_suffix
1925     random_seed
1926     ranlib
1927     samples
1928     strip
1929     sws_max_filter_size
1930     sysinclude
1931     sysroot
1932     target_exec
1933     target_os
1934     target_path
1935     target_samples
1936     tempprefix
1937     toolchain
1938     valgrind
1939     yasmexe
1940 "
1941
1942 CMDLINE_APPEND="
1943     extra_cflags
1944     extra_cxxflags
1945     host_cppflags
1946 "
1947
1948 # code dependency declarations
1949
1950 # architecture extensions
1951
1952 armv5te_deps="arm"
1953 armv6_deps="arm"
1954 armv6t2_deps="arm"
1955 armv8_deps="aarch64"
1956 neon_deps_any="aarch64 arm"
1957 intrinsics_neon_deps="neon"
1958 vfp_deps_any="aarch64 arm"
1959 vfpv3_deps="vfp"
1960 setend_deps="arm"
1961
1962 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1963
1964 mipsfpu_deps="mips"
1965 mips32r2_deps="mips"
1966 mipsdspr1_deps="mips"
1967 mipsdspr2_deps="mips"
1968
1969 altivec_deps="ppc"
1970 ppc4xx_deps="ppc"
1971 vsx_deps="ppc"
1972
1973 cpunop_deps="i686"
1974 x86_64_select="i686"
1975 x86_64_suggest="fast_cmov"
1976
1977 amd3dnow_deps="mmx"
1978 amd3dnowext_deps="amd3dnow"
1979 i686_deps="x86"
1980 mmx_deps="x86"
1981 mmxext_deps="mmx"
1982 sse_deps="mmxext"
1983 sse2_deps="sse"
1984 sse3_deps="sse2"
1985 ssse3_deps="sse3"
1986 sse4_deps="ssse3"
1987 sse42_deps="sse4"
1988 avx_deps="sse42"
1989 xop_deps="avx"
1990 fma3_deps="avx"
1991 fma4_deps="avx"
1992 avx2_deps="avx"
1993
1994 mmx_external_deps="yasm"
1995 mmx_inline_deps="inline_asm"
1996 mmx_suggest="mmx_external mmx_inline"
1997
1998 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1999     eval dep=\$${ext}_deps
2000     eval ${ext}_external_deps='"${dep}_external"'
2001     eval ${ext}_inline_deps='"${dep}_inline"'
2002     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2003 done
2004
2005 aligned_stack_if_any="aarch64 ppc x86"
2006 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2007 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2008 fast_unaligned_if_any="aarch64 ppc x86"
2009 simd_align_16_if_any="altivec neon sse"
2010
2011 # system capabilities
2012
2013 symver_if_any="symver_asm_label symver_gnu_asm"
2014
2015 # threading support
2016 atomics_gcc_if="sync_val_compare_and_swap"
2017 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2018 atomics_win32_if="MemoryBarrier"
2019 atomics_native_if_any="$ATOMICS_LIST"
2020 w32threads_deps="atomics_native"
2021 threads_if_any="$THREADS_LIST"
2022
2023 # subsystems
2024 dct_select="rdft"
2025 error_resilience_select="me_cmp"
2026 frame_thread_encoder_deps="encoders threads"
2027 intrax8_select="error_resilience"
2028 mdct_select="fft"
2029 rdft_select="fft"
2030 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2031 mpeg_er_select="error_resilience"
2032 mpegaudio_select="mpegaudiodsp"
2033 mpegaudiodsp_select="dct"
2034 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
2035 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2036
2037 # decoders / encoders
2038 aac_decoder_select="mdct sinewin"
2039 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2040 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2041 ac3_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2042 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2043 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2044 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2045 aic_decoder_select="golomb idctdsp"
2046 alac_encoder_select="lpc"
2047 als_decoder_select="bswapdsp"
2048 amrnb_decoder_select="lsp"
2049 amrwb_decoder_select="lsp"
2050 amv_decoder_select="sp5x_decoder exif"
2051 amv_encoder_select="aandcttables mpegvideoenc"
2052 ape_decoder_select="bswapdsp llauddsp"
2053 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2054 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2055 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2056 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2057 atrac1_decoder_select="mdct sinewin"
2058 atrac3_decoder_select="mdct"
2059 atrac3p_decoder_select="mdct sinewin"
2060 avrn_decoder_select="exif"
2061 bink_decoder_select="blockdsp hpeldsp"
2062 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
2063 binkaudio_rdft_decoder_select="mdct rdft sinewin"
2064 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2065 cllc_decoder_select="bswapdsp"
2066 comfortnoise_encoder_select="lpc"
2067 cook_decoder_select="audiodsp mdct sinewin"
2068 cscd_decoder_select="lzo"
2069 cscd_decoder_suggest="zlib"
2070 dca_decoder_select="mdct"
2071 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2072 dnxhd_decoder_select="blockdsp idctdsp"
2073 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2074 dvvideo_decoder_select="dvprofile idctdsp"
2075 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2076 dxa_decoder_select="zlib"
2077 eac3_decoder_select="ac3_decoder"
2078 eac3_encoder_select="ac3_encoder"
2079 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2080 eatgq_decoder_select="aandcttables"
2081 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2082 exr_decoder_select="zlib"
2083 ffv1_decoder_select="golomb rangecoder"
2084 ffv1_encoder_select="rangecoder"
2085 ffvhuff_decoder_select="huffyuv_decoder"
2086 ffvhuff_encoder_select="huffyuv_encoder"
2087 fic_decoder_select="golomb"
2088 flac_decoder_select="golomb"
2089 flac_encoder_select="bswapdsp golomb lpc"
2090 flashsv_decoder_select="zlib"
2091 flashsv_encoder_select="zlib"
2092 flashsv2_encoder_select="zlib"
2093 flashsv2_decoder_select="zlib"
2094 flv_decoder_select="h263_decoder"
2095 flv_encoder_select="h263_encoder"
2096 fourxm_decoder_select="blockdsp bswapdsp"
2097 fraps_decoder_select="bswapdsp huffman"
2098 g2m_decoder_select="blockdsp idctdsp zlib"
2099 g729_decoder_select="audiodsp"
2100 h261_decoder_select="mpeg_er mpegvideo"
2101 h261_encoder_select="aandcttables mpegvideoenc"
2102 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2103 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2104 h263i_decoder_select="h263_decoder"
2105 h263p_encoder_select="h263_encoder"
2106 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2107 h264_decoder_suggest="error_resilience"
2108 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2109 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2110 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2111 iac_decoder_select="imc_decoder"
2112 imc_decoder_select="bswapdsp fft mdct sinewin"
2113 indeo3_decoder_select="hpeldsp"
2114 interplay_video_decoder_select="hpeldsp"
2115 jpegls_decoder_select="golomb mjpeg_decoder"
2116 jpegls_encoder_select="golomb"
2117 jv_decoder_select="blockdsp"
2118 lagarith_decoder_select="huffyuvdsp"
2119 ljpeg_encoder_select="aandcttables idctdsp"
2120 loco_decoder_select="golomb"
2121 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2122 metasound_decoder_select="lsp mdct sinewin"
2123 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2124 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp"
2125 mjpeg_encoder_select="aandcttables mpegvideoenc"
2126 mjpegb_decoder_select="mjpeg_decoder"
2127 mlp_decoder_select="mlp_parser"
2128 motionpixels_decoder_select="bswapdsp"
2129 mp1_decoder_select="mpegaudio"
2130 mp1float_decoder_select="mpegaudio"
2131 mp2_decoder_select="mpegaudio"
2132 mp2float_decoder_select="mpegaudio"
2133 mp3_decoder_select="mpegaudio"
2134 mp3adu_decoder_select="mpegaudio"
2135 mp3adufloat_decoder_select="mpegaudio"
2136 mp3float_decoder_select="mpegaudio"
2137 mp3on4_decoder_select="mpegaudio"
2138 mp3on4float_decoder_select="mpegaudio"
2139 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2140 mpc8_decoder_select="mpegaudiodsp"
2141 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2142 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2143 mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
2144 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2145 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2146 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2147 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2148 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2149 mpeg4_encoder_select="h263_encoder"
2150 msmpeg4v1_decoder_select="h263_decoder"
2151 msmpeg4v2_decoder_select="h263_decoder"
2152 msmpeg4v2_encoder_select="h263_encoder"
2153 msmpeg4v3_decoder_select="h263_decoder"
2154 msmpeg4v3_encoder_select="h263_encoder"
2155 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
2156 mxpeg_decoder_select="mjpeg_decoder"
2157 nellymoser_decoder_select="mdct sinewin"
2158 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2159 nuv_decoder_select="idctdsp lzo"
2160 on2avc_decoder_select="mdct"
2161 opus_decoder_deps="swresample"
2162 png_decoder_select="zlib"
2163 png_encoder_select="huffyuvencdsp zlib"
2164 prores_decoder_select="blockdsp idctdsp"
2165 prores_encoder_select="fdctdsp"
2166 qcelp_decoder_select="lsp"
2167 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2168 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2169 ra_144_decoder_select="audiodsp"
2170 ralf_decoder_select="golomb"
2171 rawvideo_decoder_select="bswapdsp"
2172 rtjpeg_decoder_select="me_cmp"
2173 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2174 rv10_encoder_select="h263_encoder"
2175 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2176 rv20_encoder_select="h263_encoder"
2177 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2178 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2179 shorten_decoder_select="golomb"
2180 sipr_decoder_select="lsp"
2181 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2182 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2183 sonic_decoder_select="golomb rangecoder"
2184 sonic_encoder_select="golomb rangecoder"
2185 sonic_ls_encoder_select="golomb rangecoder"
2186 sp5x_decoder_select="mjpeg_decoder"
2187 svq1_decoder_select="hpeldsp"
2188 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2189 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2190 svq3_decoder_suggest="zlib"
2191 tak_decoder_select="audiodsp"
2192 theora_decoder_select="vp3_decoder"
2193 thp_decoder_select="mjpeg_decoder"
2194 tiff_decoder_suggest="zlib lzma"
2195 tiff_encoder_suggest="zlib"
2196 truehd_decoder_select="mlp_parser"
2197 truemotion2_decoder_select="bswapdsp"
2198 truespeech_decoder_select="bswapdsp"
2199 tscc_decoder_select="zlib"
2200 twinvq_decoder_select="mdct lsp sinewin"
2201 utvideo_decoder_select="bswapdsp"
2202 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2203 vble_decoder_select="huffyuvdsp"
2204 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
2205 vc1image_decoder_select="vc1_decoder"
2206 vorbis_decoder_select="mdct"
2207 vorbis_encoder_select="mdct"
2208 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2209 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2210 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2211 vp6a_decoder_select="vp6_decoder"
2212 vp6f_decoder_select="vp6_decoder"
2213 vp7_decoder_select="h264pred videodsp"
2214 vp8_decoder_select="h264pred videodsp"
2215 vp9_decoder_select="videodsp vp9_parser"
2216 webp_decoder_select="vp8_decoder"
2217 wmalossless_decoder_select="llauddsp"
2218 wmapro_decoder_select="mdct sinewin"
2219 wmav1_decoder_select="mdct sinewin"
2220 wmav1_encoder_select="mdct sinewin"
2221 wmav2_decoder_select="mdct sinewin"
2222 wmav2_encoder_select="mdct sinewin"
2223 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2224 wmv1_decoder_select="h263_decoder"
2225 wmv1_encoder_select="h263_encoder"
2226 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
2227 wmv2_encoder_select="h263_encoder"
2228 wmv3_decoder_select="vc1_decoder"
2229 wmv3image_decoder_select="wmv3_decoder"
2230 zerocodec_decoder_select="zlib"
2231 zlib_decoder_select="zlib"
2232 zlib_encoder_select="zlib"
2233 zmbv_decoder_select="zlib"
2234 zmbv_encoder_select="zlib"
2235
2236 # hardware accelerators
2237 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2238 dxva2_deps="dxva2api_h"
2239 vaapi_deps="va_va_h"
2240 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2241 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2242 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2243 xvmc_deps="X11_extensions_XvMClib_h"
2244
2245 h263_vaapi_hwaccel_deps="vaapi"
2246 h263_vaapi_hwaccel_select="h263_decoder"
2247 h263_vdpau_hwaccel_deps="vdpau"
2248 h263_vdpau_hwaccel_select="h263_decoder"
2249 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2250 h264_dxva2_hwaccel_deps="dxva2"
2251 h264_dxva2_hwaccel_select="h264_decoder"
2252 h264_vaapi_hwaccel_deps="vaapi"
2253 h264_vaapi_hwaccel_select="h264_decoder"
2254 h264_vda_decoder_deps="vda"
2255 h264_vda_decoder_select="h264_decoder"
2256 h264_vda_hwaccel_deps="vda"
2257 h264_vda_hwaccel_select="h264_decoder"
2258 h264_vda_old_hwaccel_deps="vda"
2259 h264_vda_old_hwaccel_select="h264_decoder"
2260 h264_vdpau_decoder_deps="vdpau"
2261 h264_vdpau_decoder_select="h264_decoder"
2262 h264_vdpau_hwaccel_deps="vdpau"
2263 h264_vdpau_hwaccel_select="h264_decoder"
2264 mpeg_vdpau_decoder_deps="vdpau"
2265 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2266 mpeg_xvmc_hwaccel_deps="xvmc"
2267 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2268 mpeg1_vdpau_decoder_deps="vdpau"
2269 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2270 mpeg1_vdpau_hwaccel_deps="vdpau"
2271 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2272 mpeg1_xvmc_hwaccel_deps="xvmc"
2273 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2274 mpeg2_crystalhd_decoder_select="crystalhd"
2275 mpeg2_dxva2_hwaccel_deps="dxva2"
2276 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2277 mpeg2_vaapi_hwaccel_deps="vaapi"
2278 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2279 mpeg2_vdpau_hwaccel_deps="vdpau"
2280 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2281 mpeg2_xvmc_hwaccel_deps="xvmc"
2282 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2283 mpeg4_crystalhd_decoder_select="crystalhd"
2284 mpeg4_vaapi_hwaccel_deps="vaapi"
2285 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2286 mpeg4_vdpau_decoder_deps="vdpau"
2287 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2288 mpeg4_vdpau_hwaccel_deps="vdpau"
2289 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2290 msmpeg4_crystalhd_decoder_select="crystalhd"
2291 vc1_crystalhd_decoder_select="crystalhd"
2292 vc1_dxva2_hwaccel_deps="dxva2"
2293 vc1_dxva2_hwaccel_select="vc1_decoder"
2294 vc1_vaapi_hwaccel_deps="vaapi"
2295 vc1_vaapi_hwaccel_select="vc1_decoder"
2296 vc1_vdpau_decoder_deps="vdpau"
2297 vc1_vdpau_decoder_select="vc1_decoder"
2298 vc1_vdpau_hwaccel_deps="vdpau"
2299 vc1_vdpau_hwaccel_select="vc1_decoder"
2300 wmv3_crystalhd_decoder_select="crystalhd"
2301 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2302 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2303 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2304 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2305
2306 # parsers
2307 h264_parser_select="h264_decoder"
2308 hevc_parser_select="hevc_decoder"
2309 mpegvideo_parser_select="mpegvideo"
2310 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2311 vc1_parser_select="mpegvideo startcode vc1_decoder"
2312
2313 # external libraries
2314 libaacplus_encoder_deps="libaacplus"
2315 libcelt_decoder_deps="libcelt"
2316 libfaac_encoder_deps="libfaac"
2317 libfaac_encoder_select="audio_frame_queue"
2318 libfdk_aac_decoder_deps="libfdk_aac"
2319 libfdk_aac_encoder_deps="libfdk_aac"
2320 libfdk_aac_encoder_select="audio_frame_queue"
2321 libgme_demuxer_deps="libgme"
2322 libgsm_decoder_deps="libgsm"
2323 libgsm_encoder_deps="libgsm"
2324 libgsm_ms_decoder_deps="libgsm"
2325 libgsm_ms_encoder_deps="libgsm"
2326 libilbc_decoder_deps="libilbc"
2327 libilbc_encoder_deps="libilbc"
2328 libmodplug_demuxer_deps="libmodplug"
2329 libmp3lame_encoder_deps="libmp3lame"
2330 libmp3lame_encoder_select="audio_frame_queue"
2331 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2332 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2333 libopencore_amrnb_encoder_select="audio_frame_queue"
2334 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2335 libopenjpeg_decoder_deps="libopenjpeg"
2336 libopenjpeg_encoder_deps="libopenjpeg"
2337 libopus_decoder_deps="libopus"
2338 libopus_encoder_deps="libopus"
2339 libopus_encoder_select="audio_frame_queue"
2340 libquvi_demuxer_deps="libquvi"
2341 libschroedinger_decoder_deps="libschroedinger"
2342 libschroedinger_encoder_deps="libschroedinger"
2343 libshine_encoder_deps="libshine"
2344 libshine_encoder_select="audio_frame_queue"
2345 libspeex_decoder_deps="libspeex"
2346 libspeex_encoder_deps="libspeex"
2347 libspeex_encoder_select="audio_frame_queue"
2348 libstagefright_h264_decoder_deps="libstagefright_h264"
2349 libtheora_encoder_deps="libtheora"
2350 libtwolame_encoder_deps="libtwolame"
2351 libvo_aacenc_encoder_deps="libvo_aacenc"
2352 libvo_aacenc_encoder_select="audio_frame_queue"
2353 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2354 libvorbis_decoder_deps="libvorbis"
2355 libvorbis_encoder_deps="libvorbis"
2356 libvorbis_encoder_select="audio_frame_queue"
2357 libvpx_vp8_decoder_deps="libvpx"
2358 libvpx_vp8_encoder_deps="libvpx"
2359 libvpx_vp9_decoder_deps="libvpx"
2360 libvpx_vp9_encoder_deps="libvpx"
2361 libwavpack_encoder_deps="libwavpack"
2362 libwebp_encoder_deps="libwebp"
2363 libx264_encoder_deps="libx264"
2364 libx264rgb_encoder_deps="libx264"
2365 libx265_encoder_deps="libx265"
2366 libxavs_encoder_deps="libxavs"
2367 libxvid_encoder_deps="libxvid"
2368 libutvideo_decoder_deps="libutvideo"
2369 libutvideo_encoder_deps="libutvideo"
2370 libzvbi_teletext_decoder_deps="libzvbi"
2371
2372 # demuxers / muxers
2373 ac3_demuxer_select="ac3_parser"
2374 asf_demuxer_select="riffdec"
2375 asf_muxer_select="riffenc"
2376 asf_stream_muxer_select="asf_muxer"
2377 avi_demuxer_select="riffdec exif"
2378 avi_muxer_select="riffenc"
2379 avisynth_demuxer_deps="avisynth"
2380 avisynth_demuxer_select="riffdec"
2381 caf_demuxer_select="riffdec"
2382 dirac_demuxer_select="dirac_parser"
2383 dts_demuxer_select="dca_parser"
2384 dtshd_demuxer_select="dca_parser"
2385 dv_demuxer_select="dvprofile"
2386 dv_muxer_select="dvprofile"
2387 dxa_demuxer_select="riffdec"
2388 eac3_demuxer_select="ac3_parser"
2389 f4v_muxer_select="mov_muxer"
2390 flac_demuxer_select="flac_parser"
2391 hds_muxer_select="flv_muxer"
2392 hls_muxer_select="mpegts_muxer"
2393 image2_alias_pix_demuxer_select="image2_demuxer"
2394 image2_brender_pix_demuxer_select="image2_demuxer"
2395 ipod_muxer_select="mov_muxer"
2396 ismv_muxer_select="mov_muxer"
2397 libnut_demuxer_deps="libnut"
2398 libnut_muxer_deps="libnut"
2399 matroska_audio_muxer_select="matroska_muxer"
2400 matroska_demuxer_select="riffdec"
2401 matroska_demuxer_suggest="bzlib lzo zlib"
2402 matroska_muxer_select="riffenc"
2403 mmf_muxer_select="riffenc"
2404 mov_demuxer_select="riffdec"
2405 mov_demuxer_suggest="zlib"
2406 mov_muxer_select="riffenc rtpenc_chain"
2407 mp3_demuxer_select="mpegaudio_parser"
2408 mp4_muxer_select="mov_muxer"
2409 mpegts_muxer_select="adts_muxer latm_muxer"
2410 mpegtsraw_demuxer_select="mpegts_demuxer"
2411 mxf_d10_muxer_select="mxf_muxer"
2412 nut_muxer_select="riffenc"
2413 nuv_demuxer_select="riffdec"
2414 oga_muxer_select="ogg_muxer"
2415 ogg_demuxer_select="golomb"
2416 opus_muxer_select="ogg_muxer"
2417 psp_muxer_select="mov_muxer"
2418 rtp_demuxer_select="sdp_demuxer"
2419 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2420 rtsp_demuxer_select="http_protocol rtpdec"
2421 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2422 sap_demuxer_select="sdp_demuxer"
2423 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2424 sdp_demuxer_select="rtpdec"
2425 smoothstreaming_muxer_select="ismv_muxer"
2426 spdif_muxer_select="aac_parser"
2427 spx_muxer_select="ogg_muxer"
2428 tak_demuxer_select="tak_parser"
2429 tg2_muxer_select="mov_muxer"
2430 tgp_muxer_select="mov_muxer"
2431 vobsub_demuxer_select="mpegps_demuxer"
2432 w64_demuxer_select="wav_demuxer"
2433 w64_muxer_select="wav_muxer"
2434 wav_demuxer_select="riffdec"
2435 wav_muxer_select="riffenc"
2436 webm_muxer_select="riffenc"
2437 wtv_demuxer_select="riffdec"
2438 wtv_muxer_select="riffenc"
2439 xmv_demuxer_select="riffdec"
2440 xwma_demuxer_select="riffdec"
2441
2442 # indevs / outdevs
2443 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2444 alsa_outdev_deps="alsa_asoundlib_h"
2445 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2446 avfoundation_indev_select="avfoundation"
2447 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2448 caca_outdev_deps="libcaca"
2449 decklink_outdev_deps="decklink pthreads"
2450 decklink_outdev_extralibs="-lstdc++"
2451 dshow_indev_deps="IBaseFilter"
2452 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2453 dv1394_indev_deps="dv1394"
2454 dv1394_indev_select="dv_demuxer"
2455 fbdev_indev_deps="linux_fb_h"
2456 fbdev_outdev_deps="linux_fb_h"
2457 gdigrab_indev_deps="CreateDIBSection"
2458 gdigrab_indev_extralibs="-lgdi32"
2459 gdigrab_indev_select="bmp_decoder"
2460 iec61883_indev_deps="libiec61883"
2461 jack_indev_deps="jack_jack_h sem_timedwait"
2462 lavfi_indev_deps="avfilter"
2463 libcdio_indev_deps="libcdio"
2464 libdc1394_indev_deps="libdc1394"
2465 libv4l2_indev_deps="libv4l2"
2466 openal_indev_deps="openal"
2467 opengl_outdev_deps="opengl"
2468 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2469 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2470 pulse_indev_deps="libpulse"
2471 pulse_outdev_deps="libpulse"
2472 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2473 qtkit_indev_select="qtkit"
2474 sdl_outdev_deps="sdl"
2475 sndio_indev_deps="sndio_h"
2476 sndio_outdev_deps="sndio_h"
2477 v4l_indev_deps="linux_videodev_h"
2478 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2479 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2480 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2481 vfwcap_indev_extralibs="-lavicap32"
2482 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2483 xv_outdev_extralibs="-lXv -lX11 -lXext"
2484 x11grab_indev_deps="x11grab"
2485
2486 # protocols
2487 bluray_protocol_deps="libbluray"
2488 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2489 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2490 ffrtmpcrypt_protocol_select="tcp_protocol"
2491 ffrtmphttp_protocol_deps="!librtmp_protocol"
2492 ffrtmphttp_protocol_select="http_protocol"
2493 ftp_protocol_select="tcp_protocol"
2494 gopher_protocol_select="network"
2495 http_protocol_select="tcp_protocol"
2496 httpproxy_protocol_select="tcp_protocol"
2497 https_protocol_select="tls_protocol"
2498 icecast_protocol_select="http_protocol"
2499 librtmp_protocol_deps="librtmp"
2500 librtmpe_protocol_deps="librtmp"
2501 librtmps_protocol_deps="librtmp"
2502 librtmpt_protocol_deps="librtmp"
2503 librtmpte_protocol_deps="librtmp"
2504 libsmbclient_protocol_deps="libsmbclient gplv3"
2505 libssh_protocol_deps="libssh"
2506 mmsh_protocol_select="http_protocol"
2507 mmst_protocol_select="network"
2508 rtmp_protocol_deps="!librtmp_protocol"
2509 rtmp_protocol_select="tcp_protocol"
2510 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2511 rtmps_protocol_deps="!librtmp_protocol"
2512 rtmps_protocol_select="tls_protocol"
2513 rtmpt_protocol_select="ffrtmphttp_protocol"
2514 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2515 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2516 rtp_protocol_select="udp_protocol"
2517 sctp_protocol_deps="struct_sctp_event_subscribe"
2518 sctp_protocol_select="network"
2519 srtp_protocol_select="rtp_protocol"
2520 tcp_protocol_select="network"
2521 tls_protocol_deps_any="openssl gnutls"
2522 tls_protocol_select="tcp_protocol"
2523 udp_protocol_select="network"
2524 unix_protocol_deps="sys_un_h"
2525 unix_protocol_select="network"
2526
2527 # filters
2528 aconvert_filter_deps="swresample"
2529 amovie_filter_deps="avcodec avformat"
2530 aresample_filter_deps="swresample"
2531 ass_filter_deps="libass"
2532 asyncts_filter_deps="avresample"
2533 atempo_filter_deps="avcodec"
2534 atempo_filter_select="rdft"
2535 azmq_filter_deps="libzmq"
2536 blackframe_filter_deps="gpl"
2537 boxblur_filter_deps="gpl"
2538 bs2b_filter_deps="libbs2b"
2539 colormatrix_filter_deps="gpl"
2540 cropdetect_filter_deps="gpl"
2541 delogo_filter_deps="gpl"
2542 deshake_filter_select="pixelutils"
2543 drawtext_filter_deps="libfreetype"
2544 ebur128_filter_deps="gpl"
2545 flite_filter_deps="libflite"
2546 frei0r_filter_deps="frei0r dlopen"
2547 frei0r_filter_extralibs='$ldl'
2548 frei0r_src_filter_deps="frei0r dlopen"
2549 frei0r_src_filter_extralibs='$ldl'
2550 geq_filter_deps="gpl"
2551 histeq_filter_deps="gpl"
2552 hqdn3d_filter_deps="gpl"
2553 interlace_filter_deps="gpl"
2554 kerndeint_filter_deps="gpl"
2555 ladspa_filter_deps="ladspa dlopen"
2556 ladspa_filter_extralibs='$ldl'
2557 mcdeint_filter_deps="avcodec gpl"
2558 movie_filter_deps="avcodec avformat"
2559 mp_filter_deps="gpl avcodec swscale inline_asm"
2560 mpdecimate_filter_deps="gpl"
2561 mpdecimate_filter_select="pixelutils"
2562 mptestsrc_filter_deps="gpl"
2563 negate_filter_deps="lut_filter"
2564 perspective_filter_deps="gpl"
2565 ocv_filter_deps="libopencv"
2566 owdenoise_filter_deps="gpl"
2567 pan_filter_deps="swresample"
2568 phase_filter_deps="gpl"
2569 pp_filter_deps="gpl postproc"
2570 pullup_filter_deps="gpl"
2571 removelogo_filter_deps="avcodec avformat swscale"
2572 resample_filter_deps="avresample"
2573 sab_filter_deps="gpl swscale"
2574 scale_filter_deps="swscale"
2575 select_filter_select="pixelutils"
2576 smartblur_filter_deps="gpl swscale"
2577 showspectrum_filter_deps="avcodec"
2578 showspectrum_filter_select="rdft"
2579 spp_filter_deps="gpl avcodec"
2580 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2581 stereo3d_filter_deps="gpl"
2582 subtitles_filter_deps="avformat avcodec libass"
2583 super2xsai_filter_deps="gpl"
2584 tinterlace_filter_deps="gpl"
2585 vidstabdetect_filter_deps="libvidstab"
2586 vidstabtransform_filter_deps="libvidstab"
2587 pixfmts_super2xsai_test_deps="super2xsai_filter"
2588 tinterlace_merge_test_deps="tinterlace_filter"
2589 tinterlace_pad_test_deps="tinterlace_filter"
2590 zmq_filter_deps="libzmq"
2591 zoompan_filter_deps="swscale"
2592
2593 # examples
2594 avio_reading="avformat avcodec avutil"
2595 avcodec_example_deps="avcodec avutil"
2596 decoding_encoding_example_deps="avcodec avformat avutil"
2597 demuxing_decoding_example_deps="avcodec avformat avutil"
2598 extract_mvs_example_deps="avcodec avformat avutil"
2599 filter_audio_example_deps="avfilter avutil"
2600 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2601 filtering_video_example_deps="avfilter avcodec avformat avutil"
2602 metadata_example_deps="avformat avutil"
2603 muxing_example_deps="avcodec avformat avutil swscale"
2604 remuxing_example_deps="avcodec avformat avutil"
2605 resampling_audio_example_deps="avutil swresample"
2606 scaling_video_example_deps="avutil swscale"
2607 transcode_aac_example_deps="avcodec avformat swresample"
2608 transcoding_example_deps="avfilter avcodec avformat avutil"
2609
2610 # libraries, in linking order
2611 avcodec_deps="avutil"
2612 avdevice_deps="avformat avcodec avutil"
2613 avfilter_deps="avutil"
2614 avformat_deps="avcodec avutil"
2615 avresample_deps="avutil"
2616 postproc_deps="avutil gpl"
2617 swresample_deps="avutil"
2618 swscale_deps="avutil"
2619
2620 # programs
2621 ffmpeg_deps="avcodec avfilter avformat swresample"
2622 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2623                null_filter
2624                setpts_filter trim_filter"
2625 ffplay_deps="avcodec avformat swscale swresample sdl"
2626 ffplay_libs='$sdl_libs'
2627 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2628 ffprobe_deps="avcodec avformat"
2629 ffserver_deps="avformat fork sarestart"
2630 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2631
2632 # documentation
2633 podpages_deps="perl"
2634 manpages_deps="perl pod2man"
2635 htmlpages_deps="perl"
2636 htmlpages_deps_any="makeinfo_html texi2html"
2637 txtpages_deps="perl makeinfo"
2638 doc_deps_any="manpages htmlpages podpages txtpages"
2639
2640 # default parameters
2641
2642 logfile="config.log"
2643
2644 # installation paths
2645 prefix_default="/usr/local"
2646 bindir_default='${prefix}/bin'
2647 datadir_default='${prefix}/share/ffmpeg'
2648 docdir_default='${prefix}/share/doc/ffmpeg'
2649 incdir_default='${prefix}/include'
2650 libdir_default='${prefix}/lib'
2651 mandir_default='${prefix}/share/man'
2652 shlibdir_default="$libdir_default"
2653
2654 # toolchain
2655 ar_default="ar"
2656 cc_default="gcc"
2657 cxx_default="g++"
2658 host_cc_default="gcc"
2659 cp_f="cp -f"
2660 doxygen_default="doxygen"
2661 install="install"
2662 ln_s="ln -s -f"
2663 nm_default="nm -g"
2664 objformat="elf"
2665 pkg_config_default=pkg-config
2666 ranlib_default="ranlib"
2667 strip_default="strip"
2668 yasmexe_default="yasm"
2669 windres_default="windres"
2670
2671 # OS
2672 target_os_default=$(tolower $(uname -s))
2673 host_os=$target_os_default
2674
2675 # machine
2676 if test "$target_os_default" = aix; then
2677     arch_default=$(uname -p)
2678     strip_default="strip -X32_64"
2679 else
2680     arch_default=$(uname -m)
2681 fi
2682 cpu="generic"
2683 intrinsics="none"
2684
2685 # configurable options
2686 enable $PROGRAM_LIST
2687 enable $DOCUMENT_LIST
2688 enable $EXAMPLE_LIST
2689 enable $(filter_out avresample $LIBRARY_LIST)
2690 enable stripping
2691
2692 enable asm
2693 enable debug
2694 enable doc
2695 enable optimizations
2696 enable runtime_cpudetect
2697 enable safe_bitstream_reader
2698 enable static
2699 enable swscale_alpha
2700
2701 sws_max_filter_size_default=256
2702 set_default sws_max_filter_size
2703
2704 # Enable hwaccels by default.
2705 enable dxva2 vaapi vda vdpau xvmc
2706 enable xlib
2707
2708 # build settings
2709 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2710 LIBPREF="lib"
2711 LIBSUF=".a"
2712 FULLNAME='$(NAME)$(BUILDSUF)'
2713 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2714 SLIBPREF="lib"
2715 SLIBSUF=".so"
2716 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2717 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2718 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2719 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2720 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2721 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2722
2723 asflags_filter=echo
2724 cflags_filter=echo
2725 ldflags_filter=echo
2726
2727 AS_C='-c'
2728 AS_O='-o $@'
2729 CC_C='-c'
2730 CC_E='-E -o $@'
2731 CC_O='-o $@'
2732 CXX_C='-c'
2733 CXX_O='-o $@'
2734 LD_O='-o $@'
2735 LD_LIB='-l%'
2736 LD_PATH='-L'
2737 HOSTCC_C='-c'
2738 HOSTCC_E='-E -o $@'
2739 HOSTCC_O='-o $@'
2740 HOSTLD_O='-o $@'
2741
2742 host_libs='-lm'
2743 host_cflags_filter=echo
2744 host_ldflags_filter=echo
2745
2746 target_path='$(CURDIR)'
2747
2748 # since the object filename is not given with the -MM flag, the compiler
2749 # is only able to print the basename, and we must add the path ourselves
2750 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2751 DEPFLAGS='-MM'
2752
2753 # find source path
2754 if test -f configure; then
2755     source_path=.
2756 else
2757     source_path=$(cd $(dirname "$0"); pwd)
2758     echo "$source_path" | grep -q '[[:blank:]]' &&
2759         die "Out of tree builds are impossible with whitespace in source path."
2760     test -e "$source_path/config.h" &&
2761         die "Out of tree builds are impossible with config.h in source dir."
2762 fi
2763
2764 for v in "$@"; do
2765     r=${v#*=}
2766     l=${v%"$r"}
2767     r=$(sh_quote "$r")
2768     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2769 done
2770
2771 find_things(){
2772     thing=$1
2773     pattern=$2
2774     file=$source_path/$3
2775     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2776 }
2777
2778 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2779 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2780 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2781 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2782 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2783 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2784 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2785 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2786 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2787 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2788 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2789
2790 ALL_COMPONENTS="
2791     $BSF_LIST
2792     $DECODER_LIST
2793     $DEMUXER_LIST
2794     $ENCODER_LIST
2795     $FILTER_LIST
2796     $HWACCEL_LIST
2797     $INDEV_LIST
2798     $MUXER_LIST
2799     $OUTDEV_LIST
2800     $PARSER_LIST
2801     $PROTOCOL_LIST
2802 "
2803
2804 for n in $COMPONENT_LIST; do
2805     v=$(toupper ${n%s})_LIST
2806     eval enable \$$v
2807     eval ${n}_if_any="\$$v"
2808 done
2809
2810 enable $ARCH_EXT_LIST
2811
2812 die_unknown(){
2813     echo "Unknown option \"$1\"."
2814     echo "See $0 --help for available options."
2815     exit 1
2816 }
2817
2818 print_3_columns() {
2819     cat | tr ' ' '\n' | sort | pr -r -3 -t
2820 }
2821
2822 show_list() {
2823     suffix=_$1
2824     shift
2825     echo $* | sed s/$suffix//g | print_3_columns
2826     exit 0
2827 }
2828
2829 rand_list(){
2830     IFS=', '
2831     set -- $*
2832     unset IFS
2833     for thing; do
2834         comp=${thing%:*}
2835         prob=${thing#$comp}
2836         prob=${prob#:}
2837         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2838         echo "prob ${prob:-0.5}"
2839         printf '%s\n' $comp
2840     done
2841 }
2842
2843 do_random(){
2844     action=$1
2845     shift
2846     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2847     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2848 }
2849
2850 for opt do
2851     optval="${opt#*=}"
2852     case "$opt" in
2853         --extra-ldflags=*)
2854             add_ldflags $optval
2855         ;;
2856         --extra-ldexeflags=*)
2857             add_ldexeflags $optval
2858         ;;
2859         --extra-libs=*)
2860             add_extralibs $optval
2861         ;;
2862         --disable-devices)
2863             disable $INDEV_LIST $OUTDEV_LIST
2864         ;;
2865         --enable-debug=*)
2866             debuglevel="$optval"
2867         ;;
2868         --disable-programs)
2869             disable $PROGRAM_LIST
2870         ;;
2871         --disable-everything)
2872             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2873         ;;
2874         --disable-all)
2875             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2876             disable $LIBRARY_LIST $PROGRAM_LIST doc
2877         ;;
2878         --enable-random|--disable-random)
2879             action=${opt%%-random}
2880             do_random ${action#--} $COMPONENT_LIST
2881         ;;
2882         --enable-random=*|--disable-random=*)
2883             action=${opt%%-random=*}
2884             do_random ${action#--} $optval
2885         ;;
2886         --enable-*=*|--disable-*=*)
2887             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2888             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2889             eval list=\$$(toupper $thing)_LIST
2890             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2891             list=$(filter "$name" $list)
2892             [ "$list" = "" ] && warn "Option $opt did not match anything"
2893             $action $list
2894         ;;
2895         --enable-?*|--disable-?*)
2896             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2897             if is_in $option $COMPONENT_LIST; then
2898                 test $action = disable && action=unset
2899                 eval $action \$$(toupper ${option%s})_LIST
2900             elif is_in $option $CMDLINE_SELECT; then
2901                 $action $option
2902             else
2903                 die_unknown $opt
2904             fi
2905         ;;
2906         --list-*)
2907             NAME="${opt#--list-}"
2908             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2909             NAME=${NAME%s}
2910             eval show_list $NAME \$$(toupper $NAME)_LIST
2911         ;;
2912         --help|-h) show_help
2913         ;;
2914         --fatal-warnings) enable fatal_warnings
2915         ;;
2916         *)
2917             optname="${opt%%=*}"
2918             optname="${optname#--}"
2919             optname=$(echo "$optname" | sed 's/-/_/g')
2920             if is_in $optname $CMDLINE_SET; then
2921                 eval $optname='$optval'
2922             elif is_in $optname $CMDLINE_APPEND; then
2923                 append $optname "$optval"
2924             else
2925                 die_unknown $opt
2926             fi
2927         ;;
2928     esac
2929 done
2930
2931 disabled logging && logfile=/dev/null
2932
2933 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2934 set >> $logfile
2935
2936 test -n "$cross_prefix" && enable cross_compile
2937
2938 if enabled cross_compile; then
2939     test -n "$arch" && test -n "$target_os" ||
2940         die "Must specify target arch and OS when cross-compiling"
2941 fi
2942
2943 ar_default="${cross_prefix}${ar_default}"
2944 cc_default="${cross_prefix}${cc_default}"
2945 cxx_default="${cross_prefix}${cxx_default}"
2946 nm_default="${cross_prefix}${nm_default}"
2947 pkg_config_default="${cross_prefix}${pkg_config_default}"
2948 ranlib_default="${cross_prefix}${ranlib_default}"
2949 strip_default="${cross_prefix}${strip_default}"
2950 windres_default="${cross_prefix}${windres_default}"
2951
2952 sysinclude_default="${sysroot}/usr/include"
2953
2954 test -n "$valgrind" && toolchain="valgrind-memcheck"
2955
2956 case "$toolchain" in
2957     clang-asan)
2958         cc_default="clang"
2959         add_cflags  -fsanitize=address
2960         add_ldflags -fsanitize=address
2961     ;;
2962     clang-tsan)
2963         cc_default="clang"
2964         add_cflags  -fsanitize=thread -pie
2965         add_ldflags -fsanitize=thread -pie
2966     ;;
2967     clang-usan)
2968         cc_default="clang"
2969         add_cflags  -fsanitize=undefined
2970         add_ldflags -fsanitize=undefined
2971     ;;
2972     gcc-asan)
2973         cc_default="gcc"
2974         add_cflags  -fsanitize=address
2975         add_ldflags -fsanitize=address
2976     ;;
2977     gcc-tsan)
2978         cc_default="gcc"
2979         add_cflags  -fsanitize=thread -pie -fPIC
2980         add_ldflags -fsanitize=thread -pie -fPIC
2981     ;;
2982     gcc-usan)
2983         cc_default="gcc"
2984         add_cflags  -fsanitize=undefined
2985         add_ldflags -fsanitize=undefined
2986     ;;
2987     valgrind-massif)
2988         target_exec_default=${valgrind:-"valgrind"}
2989         target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
2990     ;;
2991     valgrind-memcheck)
2992         target_exec_default=${valgrind:-"valgrind"}
2993         target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
2994     ;;
2995     msvc)
2996         # Check whether the current MSVC version needs the C99 converter.
2997         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2998         # support enough of C99 to build ffmpeg. Default to the new
2999         # behaviour if the regexp was unable to match anything, since this
3000         # successfully parses the version number of existing supported
3001         # versions that require the converter (MSVC 2010 and 2012).
3002         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3003         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3004             cc_default="cl"
3005         else
3006             cc_default="c99wrap cl"
3007         fi
3008         ld_default="link"
3009         nm_default="dumpbin -symbols"
3010         ar_default="lib"
3011         target_os_default="win32"
3012         # Use a relative path for TMPDIR. This makes sure all the
3013         # ffconf temp files are written with a relative path, avoiding
3014         # issues with msys/win32 path conversion for MSVC parameters
3015         # such as -Fo<file> or -out:<file>.
3016         TMPDIR=.
3017     ;;
3018     icl)
3019         cc_default="icl"
3020         ld_default="xilink"
3021         nm_default="dumpbin -symbols"
3022         ar_default="xilib"
3023         target_os_default="win32"
3024         TMPDIR=.
3025     ;;
3026     gcov)
3027         add_cflags  -fprofile-arcs -ftest-coverage
3028         add_ldflags -fprofile-arcs -ftest-coverage
3029     ;;
3030     hardened)
3031         add_cflags  -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
3032         add_ldflags -Wl,-z,relro -Wl,-z,now
3033     ;;
3034     ?*)
3035         die "Unknown toolchain $toolchain"
3036     ;;
3037 esac
3038
3039 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3040     target_exec target_os yasmexe
3041 enabled cross_compile || host_cc_default=$cc
3042 set_default host_cc
3043
3044 if ! $pkg_config --version >/dev/null 2>&1; then
3045     warn "$pkg_config not found, library detection may fail."
3046     pkg_config=false
3047 fi
3048
3049 if test $doxygen != $doxygen_default && \
3050   ! $doxygen --version >/dev/null 2>&1; then
3051     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3052 fi
3053
3054 exesuf() {
3055     case $1 in
3056         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3057     esac
3058 }
3059
3060 EXESUF=$(exesuf $target_os)
3061 HOSTEXESUF=$(exesuf $host_os)
3062
3063 # set temporary file name
3064 : ${TMPDIR:=$TEMPDIR}
3065 : ${TMPDIR:=$TMP}
3066 : ${TMPDIR:=/tmp}
3067
3068 if [ -n "$tempprefix" ] ; then
3069     mktemp(){
3070         echo $tempprefix.${HOSTNAME}.${UID}
3071     }
3072 elif ! check_cmd mktemp -u XXXXXX; then
3073     # simple replacement for missing mktemp
3074     # NOT SAFE FOR GENERAL USE
3075     mktemp(){
3076         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3077     }
3078 fi
3079
3080 tmpfile(){
3081     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3082         (set -C; exec > $tmp) 2>/dev/null ||
3083         die "Unable to create temporary file in $TMPDIR."
3084     append TMPFILES $tmp
3085     eval $1=$tmp
3086 }
3087
3088 trap 'rm -f -- $TMPFILES' EXIT
3089
3090 tmpfile TMPASM .asm
3091 tmpfile TMPC   .c
3092 tmpfile TMPCPP .cpp
3093 tmpfile TMPE   $EXESUF
3094 tmpfile TMPH   .h
3095 tmpfile TMPM   .m
3096 tmpfile TMPO   .o
3097 tmpfile TMPS   .S
3098 tmpfile TMPSH  .sh
3099 tmpfile TMPV   .ver
3100
3101 unset -f mktemp
3102
3103 chmod +x $TMPE
3104
3105 # make sure we can execute files in $TMPDIR
3106 cat > $TMPSH 2>> $logfile <<EOF
3107 #! /bin/sh
3108 EOF
3109 chmod +x $TMPSH >> $logfile 2>&1
3110 if ! $TMPSH >> $logfile 2>&1; then
3111     cat <<EOF
3112 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3113 variable to another directory and make sure that it is not mounted noexec.
3114 EOF
3115     die "Sanity test failed."
3116 fi
3117
3118 armasm_flags(){
3119     for flag; do
3120         case $flag in
3121             # Filter out MSVC cl.exe options from cflags that shouldn't
3122             # be passed to gas-preprocessor
3123             -M[TD]*)                                            ;;
3124             *)                  echo $flag                      ;;
3125         esac
3126    done
3127 }
3128
3129 ccc_flags(){
3130     for flag; do
3131         case $flag in
3132             -std=c99)           echo -c99                       ;;
3133             -mcpu=*)            echo -arch ${flag#*=}           ;;
3134             -mieee)             echo -ieee                      ;;
3135             -O*|-fast)          echo $flag                      ;;
3136             -fno-math-errno)    echo -assume nomath_errno       ;;
3137             -g)                 echo -g3                        ;;
3138             -Wall)              echo -msg_enable level2         ;;
3139             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3140             -Wl,*)              echo $flag                      ;;
3141             -f*|-W*)                                            ;;
3142             *)                  echo $flag                      ;;
3143         esac
3144    done
3145 }
3146
3147 cparser_flags(){
3148     for flag; do
3149         case $flag in
3150             -Wno-switch)             echo -Wno-switch-enum ;;
3151             -Wno-format-zero-length) ;;
3152             -Wdisabled-optimization) ;;
3153             -Wno-pointer-sign)       echo -Wno-other ;;
3154             *)                       echo $flag ;;
3155         esac
3156     done
3157 }
3158
3159 msvc_common_flags(){
3160     for flag; do
3161         case $flag in
3162             # In addition to specifying certain flags under the compiler
3163             # specific filters, they must be specified here as well or else the
3164             # generic catch all at the bottom will print the original flag.
3165             -Wall)                ;;
3166             -std=c99)             ;;
3167             # Common flags
3168             -fomit-frame-pointer) ;;
3169             -g)                   echo -Z7 ;;
3170             -fno-math-errno)      ;;
3171             -fno-common)          ;;
3172             -fno-signed-zeros)    ;;
3173             -fPIC)                ;;
3174             -mthumb)              ;;
3175             -march=*)             ;;
3176             -lz)                  echo zlib.lib ;;
3177             -lavifil32)           echo vfw32.lib ;;
3178             -lavicap32)           echo vfw32.lib user32.lib ;;
3179             -l*)                  echo ${flag#-l}.lib ;;
3180             *)                    echo $flag ;;
3181         esac
3182     done
3183 }
3184
3185 msvc_flags(){
3186     msvc_common_flags "$@"
3187     for flag; do
3188         case $flag in
3189             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3190                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3191                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3192                                        -wd4554 \
3193                                        -wd4273 -wd4701 ;;
3194         esac
3195     done
3196 }
3197
3198 icl_flags(){
3199     msvc_common_flags "$@"
3200     for flag; do
3201         case $flag in
3202             # Despite what Intel's documentation says -Wall, which is supported
3203             # on Windows, does enable remarks so disable them here.
3204             -Wall)                echo $flag -Qdiag-disable:remark ;;
3205             -std=c99)             echo -Qstd=c99 ;;
3206             -flto)                echo -ipo ;;
3207         esac
3208     done
3209 }
3210
3211 icc_flags(){
3212     for flag; do
3213         case $flag in
3214             -flto)                echo -ipo ;;
3215             *)                    echo $flag ;;
3216         esac
3217     done
3218 }
3219
3220 pgi_flags(){
3221     for flag; do
3222         case $flag in
3223             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3224             -fomit-frame-pointer) echo -Mnoframe ;;
3225             -g)                   echo -gopt ;;
3226             *)                    echo $flag ;;
3227         esac
3228     done
3229 }
3230
3231 suncc_flags(){
3232     for flag; do
3233         case $flag in
3234             -march=*|-mcpu=*)
3235                 case "${flag#*=}" in
3236                     native)                   echo -xtarget=native       ;;
3237                     v9|niagara)               echo -xarch=sparc          ;;
3238                     ultrasparc)               echo -xarch=sparcvis       ;;
3239                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3240                     i586|pentium)             echo -xchip=pentium        ;;
3241                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3242                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3243                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3244                     pentium4*)          echo -xtarget=pentium4           ;;
3245                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3246                     *-sse3)             echo -xarch=sse3                 ;;
3247                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3248                     bonnell)                   echo -xarch=ssse3         ;;
3249                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3250                     westmere)                  echo -xtarget=westmere    ;;
3251                     silvermont)                echo -xarch=sse4_2        ;;
3252                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3253                     core-avx*|ivybridge|haswell|broadwell)
3254                                                echo -xarch=avx           ;;
3255                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3256                     btver1)                    echo -xarch=amdsse4a      ;;
3257                     btver2|bdver*)             echo -xarch=avx           ;;
3258                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3259                     k8|opteron|athlon64|athlon-fx)
3260                                                echo -xarch=sse2a         ;;
3261                     athlon*)                   echo -xarch=pentium_proa  ;;
3262                 esac
3263                 ;;
3264             -std=c99)             echo -xc99              ;;
3265             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3266             -fPIC)                echo -KPIC -xcode=pic32 ;;
3267             -W*,*)                echo $flag              ;;
3268             -f*-*|-W*|-mimpure-text)                      ;;
3269             -shared)              echo -G                 ;;
3270             *)                    echo $flag              ;;
3271         esac
3272     done
3273 }
3274
3275 tms470_flags(){
3276     for flag; do
3277         case $flag in
3278             -march=*|-mcpu=*)
3279                 case "${flag#*=}" in
3280                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3281                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3282                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3283                     armv6*|arm11*)          echo -mv=6   ;;
3284                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3285                                             echo -mv=5e  ;;
3286                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3287                 esac
3288                 ;;
3289             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3290             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3291             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3292             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3293             -msoft-float)   echo --float_support=vfplib       ;;
3294             -O[0-3]|-mf=*)  echo $flag                        ;;
3295             -g)             echo -g -mn                       ;;
3296             -pds=*)         echo $flag                        ;;
3297             -D*|-I*)        echo $flag                        ;;
3298             --gcc|--abi=*)  echo $flag                        ;;
3299             -me)            echo $flag                        ;;
3300         esac
3301     done
3302 }
3303
3304 probe_cc(){
3305     pfx=$1
3306     _cc=$2
3307
3308     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3309     unset _ld_o _ldflags _ld_lib _ld_path
3310     unset _depflags _DEPCMD _DEPFLAGS
3311     _flags_filter=echo
3312
3313     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3314         true # no-op to avoid reading stdin in following checks
3315     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3316         _type=llvm_gcc
3317         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3318         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3319         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3320         _cflags_speed='-O3'
3321         _cflags_size='-Os'
3322     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3323         _type=gcc
3324         gcc_version=$($_cc --version | head -n1)
3325         gcc_basever=$($_cc -dumpversion)
3326         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3327         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3328         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3329         if ! $_cc -dumpversion | grep -q '^2\.'; then
3330             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3331         fi
3332         _cflags_speed='-O3'
3333         _cflags_size='-Os'
3334     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3335         _type=icc
3336         _ident=$($_cc --version | head -n1)
3337         _depflags='-MMD'
3338         _cflags_speed='-O3'
3339         _cflags_size='-Os'
3340         _cflags_noopt='-O1'
3341         _flags_filter=icc_flags
3342     elif $_cc -v 2>&1 | grep -q xlc; then
3343         _type=xlc
3344         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3345         _cflags_speed='-O5'
3346         _cflags_size='-O5 -qcompact'
3347     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3348         _type=ccc
3349         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3350         _DEPFLAGS='-M'
3351         _cflags_speed='-fast'
3352         _cflags_size='-O1'
3353         _flags_filter=ccc_flags
3354     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3355         test -d "$sysroot" || die "No valid sysroot specified."
3356         _type=armcc
3357         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3358         armcc_conf="$PWD/armcc.conf"
3359         $_cc --arm_linux_configure                 \
3360              --arm_linux_config_file="$armcc_conf" \
3361              --configure_sysroot="$sysroot"        \
3362              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3363              die "Error creating armcc configuration file."
3364         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3365         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3366         as_default="${cross_prefix}gcc"
3367         _depflags='-MMD'
3368         _cflags_speed='-O3'
3369         _cflags_size='-Os'
3370     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3371         _type=tms470
3372         _ident=$($_cc -version | head -n1 | tr -s ' ')
3373         _flags='--gcc --abi=eabi -me'
3374         _cc_e='-ppl -fe=$@'
3375         _cc_o='-fe=$@'
3376         _depflags='-ppa -ppd=$(@:.o=.d)'
3377         _cflags_speed='-O3 -mf=5'
3378         _cflags_size='-O3 -mf=2'
3379         _flags_filter=tms470_flags
3380     elif $_cc -v 2>&1 | grep -q clang; then
3381         _type=clang
3382         _ident=$($_cc --version | head -n1)
3383         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3384         _cflags_speed='-O3'
3385         _cflags_size='-Os'
3386     elif $_cc -V 2>&1 | grep -q Sun; then
3387         _type=suncc
3388         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3389         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3390         _DEPFLAGS='-xM1 -xc99'
3391         _ldflags='-std=c99'
3392         _cflags_speed='-O5'
3393         _cflags_size='-O5 -xspace'
3394         _flags_filter=suncc_flags
3395     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3396         _type=pathscale
3397         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3398         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3399         _cflags_speed='-O2'
3400         _cflags_size='-Os'
3401         _flags_filter='filter_out -Wdisabled-optimization'
3402     elif $_cc -v 2>&1 | grep -q Open64; then
3403         _type=open64
3404         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3405         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3406         _cflags_speed='-O2'
3407         _cflags_size='-Os'
3408         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3409     elif $_cc -V 2>&1 | grep -q Portland; then
3410         _type=pgi
3411         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3412         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3413         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3414         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3415         _cflags_noopt="-O"
3416         _flags_filter=pgi_flags
3417     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3418         _type=armasm
3419         _ident=$($_cc | head -n1)
3420         # 4509: "This form of conditional instruction is deprecated"
3421         _flags="-nologo -ignore 4509"
3422         _flags_filter=armasm_flags
3423     elif $_cc 2>&1 | grep -q Microsoft; then
3424         _type=msvc
3425         _ident=$($cc 2>&1 | head -n1)
3426         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3427         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3428         _cflags_speed="-O2"
3429         _cflags_size="-O1"
3430         if $_cc 2>&1 | grep -q Linker; then
3431             _ld_o='-out:$@'
3432         else
3433             _ld_o='-Fe$@'
3434         fi
3435         _cc_o='-Fo$@'
3436         _cc_e='-P -Fi$@'
3437         _flags_filter=msvc_flags
3438         _ld_lib='lib%.a'
3439         _ld_path='-libpath:'
3440         _flags='-nologo'
3441         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3442         if [ $pfx = hostcc ]; then
3443             append _cflags -Dsnprintf=_snprintf
3444         fi
3445         disable stripping
3446     elif $_cc 2>&1 | grep -q Intel; then
3447         _type=icl
3448         _ident=$($cc 2>&1 | head -n1)
3449         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3450         # Not only is O3 broken on 13.x+ but it is slower on all previous
3451         # versions (tested) as well.
3452         _cflags_speed="-O2"
3453         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3454         if $_cc 2>&1 | grep -q Linker; then
3455             _ld_o='-out:$@'
3456         else
3457             _ld_o='-Fe$@'
3458         fi
3459         _cc_o='-Fo$@'
3460         _cc_e='-P'
3461         _flags_filter=icl_flags
3462         _ld_lib='lib%.a'
3463         _ld_path='-libpath:'
3464         # -Qdiag-error to make icl error when seeing certain unknown arguments
3465         _flags='-nologo -Qdiag-error:4044,10157'
3466         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3467         # with MSVC which enables it by default.
3468         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3469         if [ $pfx = hostcc ]; then
3470             append _cflags -Dsnprintf=_snprintf
3471         fi
3472     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3473         _type=cparser
3474         _ident=$($_cc --version | head -n1)
3475         _depflags='-MMD'
3476         _cflags_speed='-O4'
3477         _cflags_size='-O2'
3478         _flags_filter=cparser_flags
3479     fi
3480
3481     eval ${pfx}_type=\$_type
3482     eval ${pfx}_ident=\$_ident
3483 }
3484
3485 set_ccvars(){
3486     eval ${1}_C=\${_cc_c-\${${1}_C}}
3487     eval ${1}_E=\${_cc_e-\${${1}_E}}
3488     eval ${1}_O=\${_cc_o-\${${1}_O}}
3489
3490     if [ -n "$_depflags" ]; then
3491         eval ${1}_DEPFLAGS=\$_depflags
3492     else
3493         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3494         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3495         eval DEP${1}FLAGS=\$_flags
3496     fi
3497 }
3498
3499 probe_cc cc "$cc"
3500 cflags_filter=$_flags_filter
3501 cflags_speed=$_cflags_speed
3502 cflags_size=$_cflags_size
3503 cflags_noopt=$_cflags_noopt
3504 add_cflags $_flags $_cflags
3505 cc_ldflags=$_ldflags
3506 set_ccvars CC
3507
3508 probe_cc hostcc "$host_cc"
3509 host_cflags_filter=$_flags_filter
3510 add_host_cflags  $_flags $_cflags
3511 set_ccvars HOSTCC
3512
3513 test -n "$cc_type" && enable $cc_type ||
3514     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3515
3516 : ${as_default:=$cc}
3517 : ${dep_cc_default:=$cc}
3518 : ${ld_default:=$cc}
3519 : ${host_ld_default:=$host_cc}
3520 set_default ar as dep_cc ld host_ld windres
3521
3522 probe_cc as "$as"
3523 asflags_filter=$_flags_filter
3524 add_asflags $_flags $_cflags
3525 set_ccvars AS
3526
3527 probe_cc ld "$ld"
3528 ldflags_filter=$_flags_filter
3529 add_ldflags $_flags $_ldflags
3530 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3531 LD_O=${_ld_o-$LD_O}
3532 LD_LIB=${_ld_lib-$LD_LIB}
3533 LD_PATH=${_ld_path-$LD_PATH}
3534
3535 probe_cc hostld "$host_ld"
3536 host_ldflags_filter=$_flags_filter
3537 add_host_ldflags $_flags $_ldflags
3538 HOSTLD_O=${_ld_o-$HOSTLD_O}
3539
3540 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3541     probe_cc depcc "$dep_cc"
3542     CCDEP=${_DEPCMD:-$DEPCMD}
3543     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3544     DEPCCFLAGS=$_flags
3545 fi
3546
3547 if $ar 2>&1 | grep -q Microsoft; then
3548     arflags="-nologo"
3549     ar_o='-out:$@'
3550 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3551     arflags="rq"
3552     ar_o='$@'
3553 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3554     arflags='-Xany -r -c'
3555     ar_o='$@'
3556 else
3557     arflags="rc"
3558     ar_o='$@'
3559 fi
3560
3561 add_cflags $extra_cflags
3562 add_cxxflags $extra_cxxflags
3563 add_asflags $extra_cflags
3564
3565 if test -n "$sysroot"; then
3566     case "$cc_type" in
3567         gcc|llvm_gcc|clang)
3568             add_cppflags --sysroot="$sysroot"
3569             add_ldflags --sysroot="$sysroot"
3570 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3571             add_cppflags -isysroot "$sysroot"
3572             add_ldflags -isysroot "$sysroot"
3573         ;;
3574         tms470)
3575             add_cppflags -I"$sysinclude"
3576             add_ldflags  --sysroot="$sysroot"
3577         ;;
3578     esac
3579 fi
3580
3581 if test "$cpu" = host; then
3582     enabled cross_compile &&
3583         die "--cpu=host makes no sense when cross-compiling."
3584
3585     case "$cc_type" in
3586         gcc|llvm_gcc)
3587             check_native(){
3588                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3589                 sed -n "/cc1.*$1=/{
3590                             s/.*$1=\\([^ ]*\\).*/\\1/
3591                             p
3592                             q
3593                         }" $TMPE
3594             }
3595             cpu=$(check_native -march || check_native -mcpu)
3596         ;;
3597     esac
3598
3599     test "${cpu:-host}" = host &&
3600         die "--cpu=host not supported with compiler $cc"
3601 fi
3602
3603 # Deal with common $arch aliases
3604 case "$arch" in
3605     aarch64|arm64)
3606         arch="aarch64"
3607     ;;
3608     arm*|iPad*|iPhone*)
3609         arch="arm"
3610     ;;
3611     mips*|IP*)
3612         arch="mips"
3613     ;;
3614     parisc*|hppa*)
3615         arch="parisc"
3616     ;;
3617     "Power Macintosh"|ppc*|powerpc*)
3618         arch="ppc"
3619     ;;
3620     s390|s390x)
3621         arch="s390"
3622     ;;
3623     sh4|sh)
3624         arch="sh4"
3625     ;;
3626     sun4u|sparc*)
3627         arch="sparc"
3628     ;;
3629     tilegx|tile-gx)
3630         arch="tilegx"
3631     ;;
3632     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3633         arch="x86"
3634     ;;
3635 esac
3636
3637 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3638 enable $arch
3639
3640 # Add processor-specific flags
3641 if enabled aarch64; then
3642
3643     case $cpu in
3644         armv*)
3645             cpuflags="-march=$cpu"
3646         ;;
3647         *)
3648             cpuflags="-mcpu=$cpu"
3649         ;;
3650     esac
3651
3652 elif enabled alpha; then
3653
3654     cpuflags="-mcpu=$cpu"
3655
3656 elif enabled arm; then
3657
3658     check_arm_arch() {
3659         check_cpp_condition stddef.h \
3660             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3661             $cpuflags
3662     }
3663
3664     probe_arm_arch() {
3665         if   check_arm_arch 4;        then echo armv4;
3666         elif check_arm_arch 4T;       then echo armv4t;
3667         elif check_arm_arch 5;        then echo armv5;
3668         elif check_arm_arch 5E;       then echo armv5e;
3669         elif check_arm_arch 5T;       then echo armv5t;
3670         elif check_arm_arch 5TE;      then echo armv5te;
3671         elif check_arm_arch 5TEJ;     then echo armv5te;
3672         elif check_arm_arch 6;        then echo armv6;
3673         elif check_arm_arch 6J;       then echo armv6j;
3674         elif check_arm_arch 6K;       then echo armv6k;
3675         elif check_arm_arch 6Z;       then echo armv6z;
3676         elif check_arm_arch 6ZK;      then echo armv6zk;
3677         elif check_arm_arch 6T2;      then echo armv6t2;
3678         elif check_arm_arch 7;        then echo armv7;
3679         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3680         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3681         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3682         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3683         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3684         fi
3685     }
3686
3687     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3688
3689     case $cpu in
3690         armv*)
3691             cpuflags="-march=$cpu"
3692             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3693         ;;
3694         *)
3695             cpuflags="-mcpu=$cpu"
3696             case $cpu in
3697                 cortex-a*)                               subarch=armv7a  ;;
3698                 cortex-r*)                               subarch=armv7r  ;;
3699                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3700                 arm11*)                                  subarch=armv6   ;;
3701                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3702                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3703                 *)                             subarch=$(probe_arm_arch) ;;
3704             esac
3705         ;;
3706     esac
3707
3708     case "$subarch" in
3709         armv5t*)    enable fast_clz                ;;
3710         armv[6-8]*)
3711             enable fast_clz
3712             disabled fast_unaligned || enable fast_unaligned
3713             ;;
3714     esac
3715
3716 elif enabled avr32; then
3717
3718     case $cpu in
3719         ap7[02]0[0-2])
3720             subarch="avr32_ap"
3721             cpuflags="-mpart=$cpu"
3722         ;;
3723         ap)
3724             subarch="avr32_ap"
3725             cpuflags="-march=$cpu"
3726         ;;
3727         uc3[ab]*)
3728             subarch="avr32_uc"
3729             cpuflags="-mcpu=$cpu"
3730         ;;
3731         uc)
3732             subarch="avr32_uc"
3733             cpuflags="-march=$cpu"
3734         ;;
3735     esac
3736
3737 elif enabled bfin; then
3738
3739     cpuflags="-mcpu=$cpu"
3740
3741 elif enabled mips; then
3742
3743     cpuflags="-march=$cpu"
3744
3745     case $cpu in
3746         24kc)
3747             disable mipsfpu
3748             disable mipsdspr1
3749             disable mipsdspr2
3750         ;;
3751         24kf*)
3752             disable mipsdspr1
3753             disable mipsdspr2
3754         ;;
3755         24kec|34kc|1004kc)
3756             disable mipsfpu
3757             disable mipsdspr2
3758         ;;
3759         24kef*|34kf*|1004kf*)
3760             disable mipsdspr2
3761         ;;
3762         74kc)
3763             disable mipsfpu
3764         ;;
3765     esac
3766
3767 elif enabled ppc; then
3768
3769     disable ldbrx
3770     disable vsx
3771
3772     case $(tolower $cpu) in
3773         601|ppc601|powerpc601)
3774             cpuflags="-mcpu=601"
3775             disable altivec
3776         ;;
3777         603*|ppc603*|powerpc603*)
3778             cpuflags="-mcpu=603"
3779             disable altivec
3780         ;;
3781         604*|ppc604*|powerpc604*)
3782             cpuflags="-mcpu=604"
3783             disable altivec
3784         ;;
3785         g3|75*|ppc75*|powerpc75*)
3786             cpuflags="-mcpu=750"
3787             disable altivec
3788         ;;
3789         g4|745*|ppc745*|powerpc745*)
3790             cpuflags="-mcpu=7450"
3791         ;;
3792         74*|ppc74*|powerpc74*)
3793             cpuflags="-mcpu=7400"
3794         ;;
3795         g5|970|ppc970|powerpc970)
3796             cpuflags="-mcpu=970"
3797         ;;
3798         power[3-8]*)
3799             cpuflags="-mcpu=$cpu"
3800         ;;
3801         cell)
3802             cpuflags="-mcpu=cell"
3803             enable ldbrx
3804         ;;
3805         e500mc)
3806             cpuflags="-mcpu=e500mc"
3807             disable altivec
3808         ;;
3809         e500v2)
3810             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3811             disable altivec
3812             disable dcbzl
3813         ;;
3814         e500)
3815             cpuflags="-mcpu=8540 -mhard-float"
3816             disable altivec
3817             disable dcbzl
3818         ;;
3819     esac
3820
3821 elif enabled sparc; then
3822
3823     case $cpu in
3824         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3825             cpuflags="-mcpu=$cpu"
3826         ;;
3827         ultrasparc*|niagara[234])
3828             cpuflags="-mcpu=$cpu"
3829         ;;
3830     esac
3831
3832 elif enabled x86; then
3833
3834     case $cpu in
3835         i[345]86|pentium)
3836             cpuflags="-march=$cpu"
3837             disable mmx
3838         ;;
3839         # targets that do NOT support nopl and conditional mov (cmov)
3840         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3841             cpuflags="-march=$cpu"
3842             disable i686
3843         ;;
3844         # targets that do support nopl and conditional mov (cmov)
3845         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
3846         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
3847             cpuflags="-march=$cpu"
3848             enable i686
3849             enable fast_cmov
3850         ;;
3851         # targets that do support conditional mov but on which it's slow
3852         pentium4|pentium4m|prescott|nocona)
3853             cpuflags="-march=$cpu"
3854             enable i686
3855             disable fast_cmov
3856         ;;
3857     esac
3858
3859 fi
3860
3861 if [ "$cpu" != generic ]; then
3862     add_cflags  $cpuflags
3863     add_asflags $cpuflags
3864 fi
3865
3866 # compiler sanity check
3867 check_exec <<EOF
3868 int main(void){ return 0; }
3869 EOF
3870 if test "$?" != 0; then
3871     echo "$cc is unable to create an executable file."
3872     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3873         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3874         echo "Only do this if you know what cross compiling means."
3875     fi
3876     die "C compiler test failed."
3877 fi
3878
3879 add_cppflags -D_ISOC99_SOURCE
3880 add_cxxflags -D__STDC_CONSTANT_MACROS
3881 check_cflags -std=c99
3882 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3883 #include <stdlib.h>
3884 EOF
3885 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3886 #include <stdlib.h>
3887 EOF
3888
3889 add_host_cppflags -D_ISOC99_SOURCE
3890 check_host_cflags -std=c99
3891 check_host_cflags -Wall
3892 check_host_cflags -O3
3893
3894 check_64bit(){
3895     arch32=$1
3896     arch64=$2
3897     expr=$3
3898     check_code cc "" "int test[2*($expr) - 1]" &&
3899         subarch=$arch64 || subarch=$arch32
3900 }
3901
3902 case "$arch" in
3903     aarch64|alpha|ia64)
3904         spic=$shared
3905     ;;
3906     mips)
3907         check_64bit mips mips64 '_MIPS_SIM > 1'
3908         spic=$shared
3909     ;;
3910     parisc)
3911         check_64bit parisc parisc64 'sizeof(void *) > 4'
3912         spic=$shared
3913     ;;
3914     ppc)
3915         check_64bit ppc ppc64 'sizeof(void *) > 4'
3916         spic=$shared
3917     ;;
3918     s390)
3919         check_64bit s390 s390x 'sizeof(void *) > 4'
3920         spic=$shared
3921     ;;
3922     sparc)
3923         check_64bit sparc sparc64 'sizeof(void *) > 4'
3924         spic=$shared
3925     ;;
3926     x86)
3927         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3928         if test "$subarch" = "x86_64"; then
3929             spic=$shared
3930         fi
3931     ;;
3932     ppc)
3933         check_cc <<EOF && subarch="ppc64"
3934         int test[(int)sizeof(char*) - 7];
3935 EOF
3936     ;;
3937 esac
3938
3939 enable $subarch
3940 enabled spic && enable_weak pic
3941
3942 # OS specific
3943 case $target_os in
3944     aix)
3945         SHFLAGS=-shared
3946         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3947         enabled shared && add_ldflags -Wl,-brtl
3948         ;;
3949     android)
3950         disable symver
3951         SLIB_INSTALL_NAME='$(SLIBNAME)'
3952         SLIB_INSTALL_LINKS=
3953         # soname not set on purpose
3954         SHFLAGS=-shared
3955         ;;
3956     haiku)
3957         prefix_default="/boot/common"
3958         network_extralibs="-lnetwork"
3959         host_libs=
3960         ;;
3961     sunos)
3962         SHFLAGS='-shared -Wl,-h,$$(@F)'
3963         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3964         network_extralibs="-lsocket -lnsl"
3965         # When using suncc to build, the Solaris linker will mark
3966         # an executable with each instruction set encountered by
3967         # the Solaris assembler.  As our libraries contain their own
3968         # guards for processor-specific code, instead suppress
3969         # generation of the HWCAPS ELF section on Solaris x86 only.
3970         enabled_all suncc x86 &&
3971             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3972             add_ldflags -Wl,-M,mapfile
3973         nm_default='nm -P -g'
3974         ;;
3975     netbsd)
3976         disable symver
3977         oss_indev_extralibs="-lossaudio"
3978         oss_outdev_extralibs="-lossaudio"
3979         enabled gcc || check_ldflags -Wl,-zmuldefs
3980         ;;
3981     openbsd|bitrig)
3982         disable symver
3983         SHFLAGS='-shared'
3984         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3985         SLIB_INSTALL_LINKS=
3986         oss_indev_extralibs="-lossaudio"
3987         oss_outdev_extralibs="-lossaudio"
3988         ;;
3989     dragonfly)
3990         disable symver
3991         ;;
3992     freebsd)
3993         ;;
3994     bsd/os)
3995         add_extralibs -lpoll -lgnugetopt
3996         strip="strip -d"
3997         ;;
3998     darwin)
3999         enabled ppc && add_asflags -force_cpusubtype_ALL
4000         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4001         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4002         strip="${strip} -x"
4003         add_ldflags -Wl,-dynamic,-search_paths_first
4004         SLIBSUF=".dylib"
4005         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4006         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4007         objformat="macho"
4008         enabled x86_64 && objformat="macho64"
4009         enabled_any pic shared ||
4010             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4011         ;;
4012     mingw32*)
4013         if test $target_os = "mingw32ce"; then
4014             disable network
4015         else
4016             target_os=mingw32
4017         fi
4018         LIBTARGET=i386
4019         if enabled x86_64; then
4020             LIBTARGET="i386:x86-64"
4021         elif enabled arm; then
4022             LIBTARGET=arm-wince
4023         fi
4024         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4025         check_ldflags -Wl,--nxcompat
4026         check_ldflags -Wl,--dynamicbase
4027         shlibdir_default="$bindir_default"
4028         SLIBPREF=""
4029         SLIBSUF=".dll"
4030         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4031         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4032         dlltool="${cross_prefix}dlltool"
4033         if check_cmd lib.exe -list; then
4034             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4035             if enabled x86_64; then
4036                 LIBTARGET=x64
4037             fi
4038         elif check_cmd $dlltool --version; then
4039             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
4040         fi
4041         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4042         SLIB_INSTALL_LINKS=
4043         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4044         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4045         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
4046         objformat="win32"
4047         ranlib=:
4048         enable dos_paths
4049         ;;
4050     win32|win64)
4051         disable symver
4052         if enabled shared; then
4053             # Link to the import library instead of the normal static library
4054             # for shared libs.
4055             LD_LIB='%.lib'
4056             # Cannot build both shared and static libs with MSVC or icl.
4057             disable static
4058         fi
4059         shlibdir_default="$bindir_default"
4060         SLIBPREF=""
4061         SLIBSUF=".dll"
4062         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4063         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4064         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4065         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4066         SLIB_INSTALL_LINKS=
4067         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4068         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4069         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4070         objformat="win32"
4071         ranlib=:
4072         enable dos_paths
4073         ;;
4074     cygwin*)
4075         target_os=cygwin
4076         shlibdir_default="$bindir_default"
4077         SLIBPREF="cyg"
4078         SLIBSUF=".dll"
4079         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4080         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4081         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4082         SLIB_INSTALL_LINKS=
4083         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4084         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4085         objformat="win32"
4086         enable dos_paths
4087         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4088         ;;
4089     *-dos|freedos|opendos)
4090         network_extralibs="-lsocket"
4091         objformat="coff"
4092         enable dos_paths
4093         add_cppflags -U__STRICT_ANSI__
4094         ;;
4095     linux)
4096         enable dv1394
4097         ;;
4098     irix*)
4099         target_os=irix
4100         ranlib="echo ignoring ranlib"
4101         ;;
4102     os/2*)
4103         strip="lxlite -CS"
4104         ln_s="cp -f"
4105         objformat="aout"
4106         add_cppflags -D_GNU_SOURCE
4107         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4108         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4109         LIBSUF="_s.a"
4110         SLIBPREF=""
4111         SLIBSUF=".dll"
4112         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4113         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4114         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4115             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
4116             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4117             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4118             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4119             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
4120         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4121             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4122         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4123         enable dos_paths
4124         enable_weak os2threads
4125         ;;
4126     gnu/kfreebsd)
4127         add_cppflags -D_BSD_SOURCE
4128         ;;
4129     gnu)
4130         ;;
4131     qnx)
4132         add_cppflags -D_QNX_SOURCE
4133         network_extralibs="-lsocket"
4134         ;;
4135     symbian)
4136         SLIBSUF=".dll"
4137         enable dos_paths
4138         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4139         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4140         add_ldflags -Wl,--target1-abs,--no-undefined \
4141                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4142                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4143         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4144                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4145                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4146         ;;
4147     osf1)
4148         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4149         ;;
4150     minix)
4151         ;;
4152     plan9)
4153         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4154                      -D_REENTRANT_SOURCE        \
4155                      -D_RESEARCH_SOURCE         \
4156                      -DFD_SETSIZE=96            \
4157                      -DHAVE_SOCK_OPTS
4158         add_compat strtod.o strtod=avpriv_strtod
4159         network_extralibs='-lbsd'
4160         exeobjs=compat/plan9/main.o
4161         disable ffserver
4162         cp_f='cp'
4163         ;;
4164     none)
4165         ;;
4166     *)
4167         die "Unknown OS '$target_os'."
4168         ;;
4169 esac
4170
4171 # determine libc flavour
4172
4173 probe_libc(){
4174     pfx=$1
4175     pfx_no_=${pfx%_}
4176     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4177     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4178         eval ${pfx}libc_type=uclibc
4179         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4180     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4181         eval ${pfx}libc_type=glibc
4182         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4183     # MinGW headers can be installed on Cygwin, so check for newlib first.
4184     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4185         eval ${pfx}libc_type=newlib
4186         add_${pfx}cppflags -U__STRICT_ANSI__
4187     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4188     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4189         eval ${pfx}libc_type=mingw64
4190         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4191             add_compat msvcrt/snprintf.o
4192             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4193         fi
4194         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4195         eval test \$${pfx_no_}cc_type = "gcc" &&
4196             add_${pfx}cppflags -D__printf__=__gnu_printf__
4197     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4198          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4199         eval ${pfx}libc_type=mingw32
4200         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4201             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4202             die "ERROR: MinGW32 runtime version must be >= 3.15."
4203         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4204         eval test \$${pfx_no_}cc_type = "gcc" &&
4205             add_${pfx}cppflags -D__printf__=__gnu_printf__
4206     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4207         eval ${pfx}libc_type=msvcrt
4208         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4209         # 0x601 by default unless something else is set by the user.
4210         # This can easily lead to us detecting functions only present
4211         # in such new versions and producing binaries requiring windows 7.0.
4212         # Therefore explicitly set the default to XP unless the user has
4213         # set something else on the command line.
4214         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4215             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4216     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4217         eval ${pfx}libc_type=klibc
4218     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4219         eval ${pfx}libc_type=bionic
4220     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4221         eval ${pfx}libc_type=solaris
4222         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4223     fi
4224 }
4225
4226 probe_libc
4227 test -n "$libc_type" && enable libc_$libc_type
4228 probe_libc host_
4229 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4230
4231 case $libc_type in
4232     bionic)
4233         add_compat strtod.o strtod=avpriv_strtod
4234         ;;
4235     msvcrt)
4236         add_compat strtod.o strtod=avpriv_strtod
4237         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4238                                      _snprintf=avpriv_snprintf  \
4239                                      vsnprintf=avpriv_vsnprintf
4240         ;;
4241 esac
4242
4243 # hacks for compiler/libc/os combinations
4244
4245 if enabled_all tms470 libc_glibc; then
4246     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4247     add_cppflags -D__USER_LABEL_PREFIX__=
4248     add_cppflags -D__builtin_memset=memset
4249     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4250     add_cflags   -pds=48    # incompatible redefinition of macro
4251 fi
4252
4253 if enabled_all ccc libc_glibc; then
4254     add_ldflags -Wl,-z,now  # calls to libots crash without this
4255 fi
4256
4257 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4258     add_cppflags '-I\$(SRC_PATH)/compat/float'
4259
4260 esc(){
4261     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4262 }
4263
4264 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4265
4266 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4267
4268 set_default $PATHS_LIST
4269 set_default nm
4270
4271 # we need to build at least one lib type
4272 if ! enabled_any static shared; then
4273     cat <<EOF
4274 At least one library type must be built.
4275 Specify --enable-static to build the static libraries or --enable-shared to
4276 build the shared libraries as well. To only build the shared libraries specify
4277 --disable-static in addition to --enable-shared.
4278 EOF
4279     exit 1;
4280 fi
4281
4282 die_license_disabled() {
4283     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4284 }
4285
4286 die_license_disabled_gpl() {
4287     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4288 }
4289
4290 die_license_disabled gpl frei0r
4291 die_license_disabled gpl libcdio
4292 die_license_disabled gpl libsmbclient
4293 die_license_disabled gpl libutvideo
4294 die_license_disabled gpl libvidstab
4295 die_license_disabled gpl libx264
4296 die_license_disabled gpl libx265
4297 die_license_disabled gpl libxavs
4298 die_license_disabled gpl libxvid
4299 die_license_disabled gpl libzvbi
4300 die_license_disabled gpl x11grab
4301
4302 die_license_disabled nonfree libaacplus
4303 die_license_disabled nonfree libfaac
4304 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4305 enabled gpl && die_license_disabled_gpl nonfree openssl
4306
4307 die_license_disabled version3 libopencore_amrnb
4308 die_license_disabled version3 libopencore_amrwb
4309 die_license_disabled version3 libsmbclient
4310 die_license_disabled version3 libvo_aacenc
4311 die_license_disabled version3 libvo_amrwbenc
4312
4313 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4314
4315 disabled optimizations || check_cflags -fomit-frame-pointer
4316
4317 enable_weak_pic() {
4318     disabled pic && return
4319     enable pic
4320     add_cppflags -DPIC
4321     case "$target_os" in
4322     mingw*|cygwin*)
4323         ;;
4324     *)
4325         add_cflags -fPIC
4326         ;;
4327     esac
4328     add_asflags  -fPIC
4329 }
4330
4331 enabled pic && enable_weak_pic
4332
4333 check_cc <<EOF || die "Symbol mangling check failed."
4334 int ff_extern;
4335 EOF
4336 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4337 extern_prefix=${sym%%ff_extern*}
4338
4339 check_cc <<EOF && enable_weak inline_asm
4340 void foo(void) { __asm__ volatile ("" ::); }
4341 EOF
4342
4343 _restrict=
4344 for restrict_keyword in restrict __restrict__ __restrict; do
4345     check_cc <<EOF && _restrict=$restrict_keyword && break
4346 void foo(char * $restrict_keyword p);
4347 EOF
4348 done
4349
4350 check_cc <<EOF && enable pragma_deprecated
4351 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4352 EOF
4353
4354 check_cc <<EOF && enable attribute_packed
4355 struct { int x; } __attribute__((packed)) x;
4356 EOF
4357
4358 check_cc <<EOF && enable attribute_may_alias
4359 union { int x; } __attribute__((may_alias)) x;
4360 EOF
4361
4362 check_cc <<EOF || die "endian test failed"
4363 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4364 EOF
4365 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4366
4367 if  [ "$cpu" = "power7" ] || [ "$cpu" = "power8" ] ;then
4368     if ! enabled bigendian ;then
4369         enable vsx
4370     fi
4371 fi
4372
4373 check_gas() {
4374     log "check_gas using '$as' as AS"
4375     # :vararg is used on aarch64, arm and ppc altivec
4376     check_as <<EOF || return 1
4377 .macro m n, y:vararg=0
4378 \n: .int \y
4379 .endm
4380 m x
4381 EOF
4382     # .altmacro is only used in arm asm
4383     ! enabled arm || check_as <<EOF || return 1
4384 .altmacro
4385 EOF
4386     enable gnu_as
4387     return 0
4388 }
4389
4390 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4391     nogas=:
4392     enabled_any arm aarch64 && nogas=die
4393     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4394     as_noop=-v
4395
4396     case $as_type in
4397         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4398         gcc)  gaspp_as_type=gas ;;
4399         *)    gaspp_as_type=$as_type ;;
4400     esac
4401
4402     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4403
4404     test "${as#*gas-preprocessor.pl}" != "$as" ||
4405     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4406         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4407
4408     if ! check_gas ; then
4409         as=${gas:=$as}
4410         check_gas || \
4411             $nogas "GNU assembler not found, install/update gas-preprocessor"
4412     fi
4413
4414     check_as <<EOF && enable as_func
4415 .func test
4416 .endfunc
4417 EOF
4418 fi
4419
4420 check_inline_asm inline_asm_labels '"1:\n"'
4421
4422 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4423
4424 if enabled aarch64; then
4425     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4426     # internal assembler in clang 3.3 does not support this instruction
4427     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4428     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4429
4430     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4431
4432 elif enabled alpha; then
4433
4434     check_cflags -mieee
4435
4436 elif enabled arm; then
4437
4438     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4439 float func(float a, float b){ return a+b; }
4440 EOF
4441
4442     enabled thumb && check_cflags -mthumb || check_cflags -marm
4443
4444     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4445         enable vfp_args
4446     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4447         case "${cross_prefix:-$cc}" in
4448             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4449             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4450 __asm__ (".eabi_attribute 28, 1");
4451 int main(void) { return 0; }
4452 EOF
4453         esac
4454         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4455     fi
4456
4457     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4458     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4459     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4460     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4461     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4462     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4463     enabled setend  && check_insn setend  'setend be'
4464
4465     [ $target_os = linux ] || [ $target_os = android ] ||
4466         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4467             $ARCH_EXT_LIST_ARM
4468
4469     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4470
4471     check_as <<EOF && enable as_dn_directive
4472 ra .dn d0.i16
4473 .unreq ra
4474 EOF
4475
4476     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4477
4478 elif enabled mips; then
4479
4480     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4481     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
4482      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
4483     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4484      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4485     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4486      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4487     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4488      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4489
4490 elif enabled parisc; then
4491
4492     if enabled gcc; then
4493         case $($cc -dumpversion) in
4494             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4495         esac
4496     fi
4497
4498 elif enabled ppc; then
4499
4500     enable local_aligned_8 local_aligned_16 local_aligned_32
4501
4502     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4503     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4504     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4505     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4506
4507     # AltiVec flags: The FSF version of GCC differs from the Apple version
4508     if enabled altivec; then
4509         check_cflags -maltivec -mabi=altivec &&
4510         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4511         check_cflags -faltivec
4512
4513         # check if our compiler supports Motorola AltiVec C API
4514         check_cc <<EOF || disable altivec
4515 $inc_altivec_h
4516 int main(void) {
4517     vector signed int v1 = (vector signed int) { 0 };
4518     vector signed int v2 = (vector signed int) { 1 };
4519     v1 = vec_add(v1, v2);
4520     return 0;
4521 }
4522 EOF
4523
4524         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4525     fi
4526
4527     if enabled vsx; then
4528         check_cflags -mvsx
4529     fi
4530 elif enabled x86; then
4531
4532     check_builtin rdtsc    intrin.h   "__rdtsc()"
4533     check_builtin mm_empty mmintrin.h "_mm_empty()"
4534
4535     enable local_aligned_8 local_aligned_16 local_aligned_32
4536
4537     # check whether EBP is available on x86
4538     # As 'i' is stored on the stack, this program will crash
4539     # if the base pointer is used to access it because the
4540     # base pointer is cleared in the inline assembly code.
4541     check_exec_crash <<EOF && enable ebp_available
4542 volatile int i=0;
4543 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4544 return i;
4545 EOF
4546
4547     # check whether EBX is available on x86
4548     check_inline_asm ebx_available '""::"b"(0)' &&
4549         check_inline_asm ebx_available '"":::"%ebx"'
4550
4551     # check whether xmm clobbers are supported
4552     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4553
4554     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4555         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4556
4557     # check whether binutils is new enough to compile SSSE3/MMXEXT
4558     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4559     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4560
4561     if ! disabled_any asm mmx yasm; then
4562         if check_cmd $yasmexe --version; then
4563             enabled x86_64 && yasm_extra="-m amd64"
4564             yasm_debug="-g dwarf2"
4565         elif check_cmd nasm -v; then
4566             yasmexe=nasm
4567             yasm_debug="-g -F dwarf"
4568             if enabled x86_64; then
4569                 case "$objformat" in
4570                     elf)   objformat=elf64 ;;
4571                     win32) objformat=win64 ;;
4572                 esac
4573             fi
4574         fi
4575
4576         YASMFLAGS="-f $objformat $yasm_extra"
4577         enabled pic               && append YASMFLAGS "-DPIC"
4578         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4579         case "$objformat" in
4580             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4581         esac
4582
4583         check_yasm "movbe ecx, [5]" && enable yasm ||
4584             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4585         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4586         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4587         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4588         check_yasm "CPU amdnop" || disable cpunop
4589     fi
4590
4591     case "$cpu" in
4592         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4593             disable fast_clz
4594         ;;
4595     esac
4596
4597 fi
4598
4599 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4600
4601 check_ldflags -Wl,--as-needed
4602
4603 if check_func dlopen; then
4604     ldl=
4605 elif check_func dlopen -ldl; then
4606     ldl=-ldl
4607 fi
4608
4609 if ! disabled network; then
4610     check_func getaddrinfo $network_extralibs
4611     check_func getservbyport $network_extralibs
4612     check_func inet_aton $network_extralibs
4613
4614     check_type netdb.h "struct addrinfo"
4615     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4616     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4617     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4618     check_type poll.h "struct pollfd"
4619     check_type netinet/sctp.h "struct sctp_event_subscribe"
4620     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4621     check_type netinet/in.h "struct sockaddr_in6"
4622     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4623     check_type "sys/types.h sys/socket.h" socklen_t
4624
4625     # Prefer arpa/inet.h over winsock2
4626     if check_header arpa/inet.h ; then
4627         check_func closesocket
4628     elif check_header winsock2.h ; then
4629         check_func_headers winsock2.h closesocket -lws2 &&
4630             network_extralibs="-lws2" ||
4631         { check_func_headers winsock2.h closesocket -lws2_32 &&
4632             network_extralibs="-lws2_32"; } || disable winsock2_h network
4633         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4634
4635         check_type ws2tcpip.h socklen_t
4636         check_type ws2tcpip.h "struct addrinfo"
4637         check_type ws2tcpip.h "struct group_source_req"
4638         check_type ws2tcpip.h "struct ip_mreq_source"
4639         check_type ws2tcpip.h "struct ipv6_mreq"
4640         check_type winsock2.h "struct pollfd"
4641         check_struct winsock2.h "struct sockaddr" sa_len
4642         check_type ws2tcpip.h "struct sockaddr_in6"
4643         check_type ws2tcpip.h "struct sockaddr_storage"
4644     else
4645         disable network
4646     fi
4647 fi
4648
4649 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4650 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4651 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4652 check_builtin sarestart signal.h "SA_RESTART"
4653 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4654
4655 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4656 check_func  ${malloc_prefix}memalign            && enable memalign
4657 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4658
4659 check_func  access
4660 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt; }
4661 check_func  fcntl
4662 check_func  fork
4663 check_func  gethrtime
4664 check_func  getopt
4665 check_func  getrusage
4666 check_func  gettimeofday
4667 check_func  isatty
4668 check_func  localtime_r
4669 check_func  mach_absolute_time
4670 check_func  mkstemp
4671 check_func  mmap
4672 check_func  mprotect
4673 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4674 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4675 check_func  sched_getaffinity
4676 check_func  setrlimit
4677 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4678 check_func  strerror_r
4679 check_func  sysconf
4680 check_func  sysctl
4681 check_func  usleep
4682
4683 check_func_headers conio.h kbhit
4684 check_func_headers io.h setmode
4685 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4686 check_func_headers stdlib.h getenv
4687
4688 check_func_headers windows.h CoTaskMemFree -lole32
4689 check_func_headers windows.h GetProcessAffinityMask
4690 check_func_headers windows.h GetProcessTimes
4691 check_func_headers windows.h GetSystemTimeAsFileTime
4692 check_func_headers windows.h MapViewOfFile
4693 check_func_headers windows.h PeekNamedPipe
4694 check_func_headers windows.h SetConsoleTextAttribute
4695 check_func_headers windows.h Sleep
4696 check_func_headers windows.h VirtualAlloc
4697 check_func_headers glob.h glob
4698 enabled xlib &&
4699     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4700
4701 check_header cl/cl.h
4702 check_header direct.h
4703 check_header dlfcn.h
4704 check_header dxva.h
4705 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4706 check_header io.h
4707 check_header libcrystalhd/libcrystalhd_if.h
4708 check_header mach/mach_time.h
4709 check_header malloc.h
4710 check_header poll.h
4711 check_header sys/mman.h
4712 check_header sys/param.h
4713 check_header sys/resource.h
4714 check_header sys/select.h
4715 check_header sys/time.h
4716 check_header sys/un.h
4717 check_header termios.h
4718 check_header unistd.h
4719 check_header vdpau/vdpau.h
4720 check_header vdpau/vdpau_x11.h
4721 check_header VideoDecodeAcceleration/VDADecoder.h
4722 check_header windows.h
4723 check_header X11/extensions/XvMClib.h
4724 check_header asm/types.h
4725
4726 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4727 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4728 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4729
4730 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4731
4732 if ! disabled w32threads && ! enabled pthreads; then
4733     check_func_headers "windows.h process.h" _beginthreadex &&
4734         enable w32threads || disable w32threads
4735 fi
4736
4737 # check for some common methods of building with pthread support
4738 # do this before the optional library checks as some of them require pthreads
4739 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4740     enable pthreads
4741     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
4742         add_cflags -pthread
4743         add_extralibs -pthread
4744     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
4745         add_cflags -pthreads
4746         add_extralibs -pthreads
4747     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
4748         add_cflags -ldl -pthread
4749         add_extralibs -ldl -pthread
4750     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
4751         add_extralibs -lpthreadGC2
4752     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
4753         :
4754     elif ! check_func pthread_join && ! check_func pthread_create; then
4755         disable pthreads
4756     fi
4757     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
4758 fi
4759
4760
4761 if enabled pthreads; then
4762   check_func pthread_cancel
4763 fi
4764
4765 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4766 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4767 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
4768
4769 check_lib math.h sin -lm && LIBM="-lm"
4770 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4771
4772 atan2f_args=2
4773 ldexpf_args=2
4774 powf_args=2
4775 fminf_args=2
4776
4777 for func in $MATH_FUNCS; do
4778     eval check_mathfunc $func \${${func}_args:-1}
4779 done
4780
4781 # these are off by default, so fail if requested and not available
4782 enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
4783 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
4784                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4785                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4786 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
4787 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4788 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4789 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4790 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4791 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4792 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
4793 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
4794 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
4795 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
4796                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4797                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4798 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4799 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4800 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4801 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
4802 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
4803 enabled fontconfig        && enable libfontconfig
4804 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4805 enabled libfreetype       && require_libfreetype
4806 enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
4807 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
4808 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4809                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4810                                done || die "ERROR: libgsm not found"; }
4811 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4812 enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
4813 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4814 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
4815 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4816 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb