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