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