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