Merge commit '6adf4290ebcf65ac8243d74f34ba0a508f561633'
[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     xop
1458     fma4
1459     i686
1460     mmx
1461     mmxext
1462     sse
1463     sse2
1464     sse3
1465     sse4
1466     sse42
1467     ssse3
1468 '
1469
1470 ARCH_EXT_LIST="
1471     $ARCH_EXT_LIST_ARM
1472     $ARCH_EXT_LIST_X86
1473     altivec
1474     ppc4xx
1475     vis
1476     mipsfpu
1477     mips32r2
1478     mipsdspr1
1479     mipsdspr2
1480 "
1481
1482 HAVE_LIST_CMDLINE='
1483     inline_asm
1484     symver
1485     yasm
1486 '
1487
1488 HAVE_LIST_PUB='
1489     bigendian
1490     fast_unaligned
1491     incompatible_libav_abi
1492     incompatible_fork_abi
1493 '
1494
1495 MATH_FUNCS="
1496     atanf
1497     atan2f
1498     cbrt
1499     cbrtf
1500     cosf
1501     exp2
1502     exp2f
1503     expf
1504     isinf
1505     isnan
1506     ldexpf
1507     llrint
1508     llrintf
1509     log2
1510     log2f
1511     log10f
1512     lrint
1513     lrintf
1514     powf
1515     rint
1516     round
1517     roundf
1518     sinf
1519     trunc
1520     truncf
1521 "
1522
1523 HAVE_LIST="
1524     $ARCH_EXT_LIST
1525     $(add_suffix _external $ARCH_EXT_LIST)
1526     $(add_suffix _inline   $ARCH_EXT_LIST)
1527     $HAVE_LIST_CMDLINE
1528     $HAVE_LIST_PUB
1529     $THREADS_LIST
1530     $ATOMICS_LIST
1531     $MATH_FUNCS
1532     access
1533     aligned_malloc
1534     aligned_stack
1535     alsa_asoundlib_h
1536     altivec_h
1537     arpa_inet_h
1538     asm_mod_q
1539     asm_mod_y
1540     asm_types_h
1541     atomic_cas_ptr
1542     atomics_native
1543     attribute_may_alias
1544     attribute_packed
1545     cdio_paranoia_h
1546     cdio_paranoia_paranoia_h
1547     CL_cl_h
1548     clock_gettime
1549     closesocket
1550     CommandLineToArgvW
1551     cpunop
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     gcc-asan)
2762         cc_default="gcc"
2763         add_cflags  -fsanitize=address
2764         add_ldflags -fsanitize=address
2765     ;;
2766     gcc-tsan)
2767         cc_default="gcc"
2768         add_cflags  -fsanitize=thread -pie -fPIC
2769         add_ldflags -fsanitize=thread -pie -fPIC
2770     ;;
2771     valgrind-massif)
2772         target_exec_default=${valgrind:-"valgrind"}
2773         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"
2774     ;;
2775     valgrind-memcheck)
2776         target_exec_default=${valgrind:-"valgrind"}
2777         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"
2778     ;;
2779     msvc)
2780         # Check whether the current MSVC version needs the C99 converter.
2781         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2782         # support enough of C99 to build ffmpeg. Default to the new
2783         # behaviour if the regexp was unable to match anything, since this
2784         # successfully parses the version number of existing supported
2785         # versions that require the converter (MSVC 2010 and 2012).
2786         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2787         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2788             cc_default="cl"
2789         else
2790             cc_default="c99wrap cl"
2791         fi
2792         ld_default="link"
2793         nm_default="dumpbin -symbols"
2794         ar_default="lib"
2795         target_os_default="win32"
2796         # Use a relative path for TMPDIR. This makes sure all the
2797         # ffconf temp files are written with a relative path, avoiding
2798         # issues with msys/win32 path conversion for MSVC parameters
2799         # such as -Fo<file> or -out:<file>.
2800         TMPDIR=.
2801     ;;
2802     icl)
2803         cc_default="icl"
2804         ld_default="xilink"
2805         nm_default="dumpbin -symbols"
2806         ar_default="xilib"
2807         target_os_default="win32"
2808         TMPDIR=.
2809     ;;
2810     gcov)
2811         add_cflags  -fprofile-arcs -ftest-coverage
2812         add_ldflags -fprofile-arcs -ftest-coverage
2813     ;;
2814     hardened)
2815         add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2816         add_ldflags -Wl,-z,relro -Wl,-z,now
2817     ;;
2818     ?*)
2819         die "Unknown toolchain $toolchain"
2820     ;;
2821 esac
2822
2823 set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2824 enabled cross_compile || host_cc_default=$cc
2825 set_default host_cc
2826
2827 if ! $pkg_config --version >/dev/null 2>&1; then
2828     warn "$pkg_config not found, library detection may fail."
2829     pkg_config=false
2830 fi
2831
2832 exesuf() {
2833     case $1 in
2834         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2835     esac
2836 }
2837
2838 EXESUF=$(exesuf $target_os)
2839 HOSTEXESUF=$(exesuf $host_os)
2840
2841 # set temporary file name
2842 : ${TMPDIR:=$TEMPDIR}
2843 : ${TMPDIR:=$TMP}
2844 : ${TMPDIR:=/tmp}
2845
2846 if [ -n "$tempprefix" ] ; then
2847     mktemp(){
2848         echo $tempprefix.${HOSTNAME}.${UID}
2849     }
2850 elif ! check_cmd mktemp -u XXXXXX; then
2851     # simple replacement for missing mktemp
2852     # NOT SAFE FOR GENERAL USE
2853     mktemp(){
2854         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2855     }
2856 fi
2857
2858 tmpfile(){
2859     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2860         (set -C; exec > $tmp) 2>/dev/null ||
2861         die "Unable to create temporary file in $TMPDIR."
2862     append TMPFILES $tmp
2863     eval $1=$tmp
2864 }
2865
2866 trap 'rm -f -- $TMPFILES' EXIT
2867
2868 tmpfile TMPASM .asm
2869 tmpfile TMPC   .c
2870 tmpfile TMPCPP .cpp
2871 tmpfile TMPE   $EXESUF
2872 tmpfile TMPH   .h
2873 tmpfile TMPO   .o
2874 tmpfile TMPS   .S
2875 tmpfile TMPSH  .sh
2876 tmpfile TMPV   .ver
2877
2878 unset -f mktemp
2879
2880 chmod +x $TMPE
2881
2882 # make sure we can execute files in $TMPDIR
2883 cat > $TMPSH 2>> $logfile <<EOF
2884 #! /bin/sh
2885 EOF
2886 chmod +x $TMPSH >> $logfile 2>&1
2887 if ! $TMPSH >> $logfile 2>&1; then
2888     cat <<EOF
2889 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2890 variable to another directory and make sure that it is not mounted noexec.
2891 EOF
2892     die "Sanity test failed."
2893 fi
2894
2895 ccc_flags(){
2896     for flag; do
2897         case $flag in
2898             -std=c99)           echo -c99                       ;;
2899             -mcpu=*)            echo -arch ${flag#*=}           ;;
2900             -mieee)             echo -ieee                      ;;
2901             -O*|-fast)          echo $flag                      ;;
2902             -fno-math-errno)    echo -assume nomath_errno       ;;
2903             -g)                 echo -g3                        ;;
2904             -Wall)              echo -msg_enable level2         ;;
2905             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2906             -Wl,*)              echo $flag                      ;;
2907             -f*|-W*)                                            ;;
2908             *)                  echo $flag                      ;;
2909         esac
2910    done
2911 }
2912
2913 cparser_flags(){
2914     for flag; do
2915         case $flag in
2916             -Wno-switch)             echo -Wno-switch-enum ;;
2917             -Wno-format-zero-length) ;;
2918             -Wdisabled-optimization) ;;
2919             -Wno-pointer-sign)       echo -Wno-other ;;
2920             *)                       echo $flag ;;
2921         esac
2922     done
2923 }
2924
2925 msvc_common_flags(){
2926     for flag; do
2927         case $flag in
2928             # In addition to specifying certain flags under the compiler
2929             # specific filters, they must be specified here as well or else the
2930             # generic catch all at the bottom will print the original flag.
2931             -Wall)                ;;
2932             -std=c99)             ;;
2933             # Common flags
2934             -fomit-frame-pointer) ;;
2935             -g)                   echo -Z7 ;;
2936             -fno-math-errno)      ;;
2937             -fno-common)          ;;
2938             -fno-signed-zeros)    ;;
2939             -fPIC)                ;;
2940             -mthumb)              ;;
2941             -march=*)             ;;
2942             -lz)                  echo zlib.lib ;;
2943             -lavifil32)           echo vfw32.lib ;;
2944             -lavicap32)           echo vfw32.lib user32.lib ;;
2945             -l*)                  echo ${flag#-l}.lib ;;
2946             *)                    echo $flag ;;
2947         esac
2948     done
2949 }
2950
2951 msvc_flags(){
2952     msvc_common_flags "$@"
2953     for flag; do
2954         case $flag in
2955             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2956                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2957                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2958                                        -wd4554 \
2959                                        -wd4273 ;;
2960         esac
2961     done
2962 }
2963
2964 icl_flags(){
2965     msvc_common_flags "$@"
2966     for flag; do
2967         case $flag in
2968             # Despite what Intel's documentation says -Wall, which is supported
2969             # on Windows, does enable remarks so disable them here.
2970             -Wall)                echo $flag -Qdiag-disable:remark ;;
2971             -std=c99)             echo -Qstd=c99 ;;
2972         esac
2973     done
2974 }
2975
2976 pgi_flags(){
2977     for flag; do
2978         case $flag in
2979             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2980             -fomit-frame-pointer) echo -Mnoframe ;;
2981             -g)                   echo -gopt ;;
2982             *)                    echo $flag ;;
2983         esac
2984     done
2985 }
2986
2987 suncc_flags(){
2988     for flag; do
2989         case $flag in
2990             -march=*|-mcpu=*)
2991                 case "${flag#*=}" in
2992                     native)                   echo -xtarget=native       ;;
2993                     v9|niagara)               echo -xarch=sparc          ;;
2994                     ultrasparc)               echo -xarch=sparcvis       ;;
2995                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2996                     i586|pentium)             echo -xchip=pentium        ;;
2997                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2998                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2999                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3000                     pentium4*)          echo -xtarget=pentium4           ;;
3001                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3002                     *-sse3)             echo -xarch=sse3                 ;;
3003                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3004                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
3005                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
3006                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3007                     bdver*)                    echo -xarch=avx           ;;
3008                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3009                     k8|opteron|athlon64|athlon-fx)
3010                                                echo -xarch=sse2a         ;;
3011                     athlon*)                   echo -xarch=pentium_proa  ;;
3012                 esac
3013                 ;;
3014             -std=c99)             echo -xc99              ;;
3015             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3016             -fPIC)                echo -KPIC -xcode=pic32 ;;
3017             -W*,*)                echo $flag              ;;
3018             -f*-*|-W*|-mimpure-text)                      ;;
3019             -shared)              echo -G                 ;;
3020             *)                    echo $flag              ;;
3021         esac
3022     done
3023 }
3024
3025 tms470_flags(){
3026     for flag; do
3027         case $flag in
3028             -march=*|-mcpu=*)
3029                 case "${flag#*=}" in
3030                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3031                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3032                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3033                     armv6*|arm11*)          echo -mv=6   ;;
3034                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3035                                             echo -mv=5e  ;;
3036                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3037                 esac
3038                 ;;
3039             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3040             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3041             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3042             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3043             -msoft-float)   echo --float_support=vfplib       ;;
3044             -O[0-3]|-mf=*)  echo $flag                        ;;
3045             -g)             echo -g -mn                       ;;
3046             -pds=*)         echo $flag                        ;;
3047             -D*|-I*)        echo $flag                        ;;
3048             --gcc|--abi=*)  echo $flag                        ;;
3049             -me)            echo $flag                        ;;
3050         esac
3051     done
3052 }
3053
3054 probe_cc(){
3055     pfx=$1
3056     _cc=$2
3057
3058     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3059     unset _ld_o _ldflags _ld_lib _ld_path
3060     unset _depflags _DEPCMD _DEPFLAGS
3061     _flags_filter=echo
3062
3063     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3064         true # no-op to avoid reading stdin in following checks
3065     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3066         _type=llvm_gcc
3067         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3068         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3069         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3070         _cflags_speed='-O3'
3071         _cflags_size='-Os'
3072     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3073         _type=gcc
3074         gcc_version=$($_cc --version | head -n1)
3075         gcc_basever=$($_cc -dumpversion)
3076         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3077         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3078         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3079         if ! $_cc -dumpversion | grep -q '^2\.'; then
3080             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3081         fi
3082         _cflags_speed='-O3'
3083         _cflags_size='-Os'
3084     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3085         _type=icc
3086         _ident=$($_cc --version | head -n1)
3087         _depflags='-MMD'
3088         _cflags_speed='-O3'
3089         _cflags_size='-Os'
3090         _cflags_noopt='-O1'
3091     elif $_cc -v 2>&1 | grep -q xlc; then
3092         _type=xlc
3093         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3094         _cflags_speed='-O5'
3095         _cflags_size='-O5 -qcompact'
3096     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3097         _type=ccc
3098         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3099         _DEPFLAGS='-M'
3100         _cflags_speed='-fast'
3101         _cflags_size='-O1'
3102         _flags_filter=ccc_flags
3103     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
3104         test -d "$sysroot" || die "No valid sysroot specified."
3105         _type=armcc
3106         _ident=$($_cc --vsn | head -n1)
3107         armcc_conf="$PWD/armcc.conf"
3108         $_cc --arm_linux_configure                 \
3109              --arm_linux_config_file="$armcc_conf" \
3110              --configure_sysroot="$sysroot"        \
3111              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3112              die "Error creating armcc configuration file."
3113         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3114         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3115         as_default="${cross_prefix}gcc"
3116         _depflags='-MMD'
3117         _cflags_speed='-O3'
3118         _cflags_size='-Os'
3119     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3120         _type=tms470
3121         _ident=$($_cc -version | head -n1 | tr -s ' ')
3122         _flags='--gcc --abi=eabi -me'
3123         _cc_e='-ppl -fe=$@'
3124         _cc_o='-fe=$@'
3125         _depflags='-ppa -ppd=$(@:.o=.d)'
3126         _cflags_speed='-O3 -mf=5'
3127         _cflags_size='-O3 -mf=2'
3128         _flags_filter=tms470_flags
3129     elif $_cc -v 2>&1 | grep -q clang; then
3130         _type=clang
3131         _ident=$($_cc --version | head -n1)
3132         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3133         _cflags_speed='-O3'
3134         _cflags_size='-Os'
3135     elif $_cc -V 2>&1 | grep -q Sun; then
3136         _type=suncc
3137         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3138         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3139         _DEPFLAGS='-xM1 -xc99'
3140         _ldflags='-std=c99'
3141         _cflags_speed='-O5'
3142         _cflags_size='-O5 -xspace'
3143         _flags_filter=suncc_flags
3144     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3145         _type=pathscale
3146         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3147         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3148         _cflags_speed='-O2'
3149         _cflags_size='-Os'
3150         _flags_filter='filter_out -Wdisabled-optimization'
3151     elif $_cc -v 2>&1 | grep -q Open64; then
3152         _type=open64
3153         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3154         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3155         _cflags_speed='-O2'
3156         _cflags_size='-Os'
3157         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3158     elif $_cc -V 2>&1 | grep -q Portland; then
3159         _type=pgi
3160         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3161         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3162         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3163         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3164         _cflags_noopt="-O"
3165         _flags_filter=pgi_flags
3166     elif $_cc 2>&1 | grep -q Microsoft; then
3167         _type=msvc
3168         _ident=$($cc 2>&1 | head -n1)
3169         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3170         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3171         _cflags_speed="-O2"
3172         _cflags_size="-O1"
3173         if $_cc 2>&1 | grep -q Linker; then
3174             _ld_o='-out:$@'
3175         else
3176             _ld_o='-Fe$@'
3177         fi
3178         _cc_o='-Fo$@'
3179         _cc_e='-P -Fi$@'
3180         _flags_filter=msvc_flags
3181         _ld_lib='lib%.a'
3182         _ld_path='-libpath:'
3183         _flags='-nologo'
3184         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3185         if [ $pfx = hostcc ]; then
3186             append _cflags -Dsnprintf=_snprintf
3187         fi
3188         disable stripping
3189     elif $_cc 2>&1 | grep -q Intel; then
3190         _type=icl
3191         _ident=$($cc 2>&1 | head -n1)
3192         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3193         # Not only is O3 broken on 13.x+ but it is slower on all previous
3194         # versions (tested) as well.
3195         _cflags_speed="-O2"
3196         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3197         if $_cc 2>&1 | grep -q Linker; then
3198             _ld_o='-out:$@'
3199         else
3200             _ld_o='-Fe$@'
3201         fi
3202         _cc_o='-Fo$@'
3203         _cc_e='-P'
3204         _flags_filter=icl_flags
3205         _ld_lib='lib%.a'
3206         _ld_path='-libpath:'
3207         # -Qdiag-error to make icl error when seeing certain unknown arguments
3208         _flags='-nologo -Qdiag-error:4044,10157'
3209         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3210         # with MSVC which enables it by default.
3211         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3212         if [ $pfx = hostcc ]; then
3213             append _cflags -Dsnprintf=_snprintf
3214         fi
3215     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3216         _type=cparser
3217         _ident=$($_cc --version | head -n1)
3218         _depflags='-MMD'
3219         _cflags_speed='-O4'
3220         _cflags_size='-O2'
3221         _flags_filter=cparser_flags
3222     fi
3223
3224     eval ${pfx}_type=\$_type
3225     eval ${pfx}_ident=\$_ident
3226 }
3227
3228 set_ccvars(){
3229     eval ${1}_C=\${_cc_c-\${${1}_C}}
3230     eval ${1}_E=\${_cc_e-\${${1}_E}}
3231     eval ${1}_O=\${_cc_o-\${${1}_O}}
3232
3233     if [ -n "$_depflags" ]; then
3234         eval ${1}_DEPFLAGS=\$_depflags
3235     else
3236         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3237         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3238         eval DEP${1}FLAGS=\$_flags
3239     fi
3240 }
3241
3242 probe_cc cc "$cc"
3243 cflags_filter=$_flags_filter
3244 cflags_speed=$_cflags_speed
3245 cflags_size=$_cflags_size
3246 cflags_noopt=$_cflags_noopt
3247 add_cflags $_flags $_cflags
3248 cc_ldflags=$_ldflags
3249 set_ccvars CC
3250
3251 probe_cc hostcc "$host_cc"
3252 host_cflags_filter=$_flags_filter
3253 add_host_cflags  $_flags $_cflags
3254 set_ccvars HOSTCC
3255
3256 test -n "$cc_type" && enable $cc_type ||
3257     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3258
3259 : ${as_default:=$cc}
3260 : ${dep_cc_default:=$cc}
3261 : ${ld_default:=$cc}
3262 : ${host_ld_default:=$host_cc}
3263 set_default ar as dep_cc ld host_ld windres
3264
3265 probe_cc as "$as"
3266 asflags_filter=$_flags_filter
3267 add_asflags $_flags $_cflags
3268 set_ccvars AS
3269
3270 probe_cc ld "$ld"
3271 ldflags_filter=$_flags_filter
3272 add_ldflags $_flags $_ldflags
3273 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3274 LD_O=${_ld_o-$LD_O}
3275 LD_LIB=${_ld_lib-$LD_LIB}
3276 LD_PATH=${_ld_path-$LD_PATH}
3277
3278 probe_cc hostld "$host_ld"
3279 host_ldflags_filter=$_flags_filter
3280 add_host_ldflags $_flags $_ldflags
3281 HOSTLD_O=${_ld_o-$HOSTLD_O}
3282
3283 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3284     probe_cc depcc "$dep_cc"
3285     CCDEP=${_DEPCMD:-$DEPCMD}
3286     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3287     DEPCCFLAGS=$_flags
3288 fi
3289
3290 if $ar 2>&1 | grep -q Microsoft; then
3291     arflags="-nologo"
3292     ar_o='-out:$@'
3293 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3294     arflags="rq"
3295     ar_o='$@'
3296 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3297     arflags='-Xany -r -c'
3298     ar_o='$@'
3299 else
3300     arflags="rc"
3301     ar_o='$@'
3302 fi
3303
3304 add_cflags $extra_cflags
3305 add_cxxflags $extra_cxxflags
3306 add_asflags $extra_cflags
3307
3308 if test -n "$sysroot"; then
3309     case "$cc_type" in
3310         gcc|llvm_gcc|clang)
3311             add_cppflags --sysroot="$sysroot"
3312             add_ldflags --sysroot="$sysroot"
3313         ;;
3314         tms470)
3315             add_cppflags -I"$sysinclude"
3316             add_ldflags  --sysroot="$sysroot"
3317         ;;
3318     esac
3319 fi
3320
3321 if test "$cpu" = host; then
3322     enabled cross_compile &&
3323         die "--cpu=host makes no sense when cross-compiling."
3324
3325     case "$cc_type" in
3326         gcc|llvm_gcc)
3327             check_native(){
3328                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3329                 sed -n "/cc1.*$1=/{
3330                             s/.*$1=\\([^ ]*\\).*/\\1/
3331                             p
3332                             q
3333                         }" $TMPE
3334             }
3335             cpu=$(check_native -march || check_native -mcpu)
3336         ;;
3337     esac
3338
3339     test "${cpu:-host}" = host &&
3340         die "--cpu=host not supported with compiler $cc"
3341 fi
3342
3343 # Deal with common $arch aliases
3344 case "$arch" in
3345     aarch64|arm64)
3346         arch="aarch64"
3347     ;;
3348     arm*|iPad*|iPhone*)
3349         arch="arm"
3350     ;;
3351     mips*|IP*)
3352         arch="mips"
3353     ;;
3354     parisc*|hppa*)
3355         arch="parisc"
3356     ;;
3357     "Power Macintosh"|ppc*|powerpc*)
3358         arch="ppc"
3359     ;;
3360     s390|s390x)
3361         arch="s390"
3362     ;;
3363     sh4|sh)
3364         arch="sh4"
3365     ;;
3366     sun4u|sparc*)
3367         arch="sparc"
3368     ;;
3369     tilegx|tile-gx)
3370         arch="tilegx"
3371     ;;
3372     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3373         arch="x86"
3374     ;;
3375 esac
3376
3377 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3378 enable $arch
3379
3380 # Add processor-specific flags
3381 if enabled aarch64; then
3382
3383     case $cpu in
3384         armv*)
3385             cpuflags="-march=$cpu"
3386         ;;
3387         *)
3388             cpuflags="-mcpu=$cpu"
3389         ;;
3390     esac
3391
3392 elif enabled alpha; then
3393
3394     cpuflags="-mcpu=$cpu"
3395
3396 elif enabled arm; then
3397
3398     check_arm_arch() {
3399         check_cpp_condition stddef.h \
3400             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3401             $cpuflags
3402     }
3403
3404     probe_arm_arch() {
3405         if   check_arm_arch 4;        then echo armv4;
3406         elif check_arm_arch 4T;       then echo armv4t;
3407         elif check_arm_arch 5;        then echo armv5;
3408         elif check_arm_arch 5E;       then echo armv5e;
3409         elif check_arm_arch 5T;       then echo armv5t;
3410         elif check_arm_arch 5TE;      then echo armv5te;
3411         elif check_arm_arch 5TEJ;     then echo armv5te;
3412         elif check_arm_arch 6;        then echo armv6;
3413         elif check_arm_arch 6J;       then echo armv6j;
3414         elif check_arm_arch 6K;       then echo armv6k;
3415         elif check_arm_arch 6Z;       then echo armv6z;
3416         elif check_arm_arch 6ZK;      then echo armv6zk;
3417         elif check_arm_arch 6T2;      then echo armv6t2;
3418         elif check_arm_arch 7;        then echo armv7;
3419         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3420         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3421         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3422         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3423         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3424         fi
3425     }
3426
3427     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3428
3429     case $cpu in
3430         armv*)
3431             cpuflags="-march=$cpu"
3432             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3433         ;;
3434         *)
3435             cpuflags="-mcpu=$cpu"
3436             case $cpu in
3437                 cortex-a*)                               subarch=armv7a  ;;
3438                 cortex-r*)                               subarch=armv7r  ;;
3439                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3440                 arm11*)                                  subarch=armv6   ;;
3441                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3442                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3443                 *)                             subarch=$(probe_arm_arch) ;;
3444             esac
3445         ;;
3446     esac
3447
3448     case "$subarch" in
3449         armv5t*)    enable fast_clz                ;;
3450         armv[6-8]*) enable fast_clz fast_unaligned ;;
3451     esac
3452
3453 elif enabled avr32; then
3454
3455     case $cpu in
3456         ap7[02]0[0-2])
3457             subarch="avr32_ap"
3458             cpuflags="-mpart=$cpu"
3459         ;;
3460         ap)
3461             subarch="avr32_ap"
3462             cpuflags="-march=$cpu"
3463         ;;
3464         uc3[ab]*)
3465             subarch="avr32_uc"
3466             cpuflags="-mcpu=$cpu"
3467         ;;
3468         uc)
3469             subarch="avr32_uc"
3470             cpuflags="-march=$cpu"
3471         ;;
3472     esac
3473
3474 elif enabled bfin; then
3475
3476     cpuflags="-mcpu=$cpu"
3477
3478 elif enabled mips; then
3479
3480     cpuflags="-march=$cpu"
3481
3482     case $cpu in
3483         24kc)
3484             disable mipsfpu
3485             disable mipsdspr1
3486             disable mipsdspr2
3487         ;;
3488         24kf*)
3489             disable mipsdspr1
3490             disable mipsdspr2
3491         ;;
3492         24kec|34kc|1004kc)
3493             disable mipsfpu
3494             disable mipsdspr2
3495         ;;
3496         24kef*|34kf*|1004kf*)
3497             disable mipsdspr2
3498         ;;
3499         74kc)
3500             disable mipsfpu
3501         ;;
3502     esac
3503
3504 elif enabled ppc; then
3505
3506     case $(tolower $cpu) in
3507         601|ppc601|powerpc601)
3508             cpuflags="-mcpu=601"
3509             disable altivec
3510         ;;
3511         603*|ppc603*|powerpc603*)
3512             cpuflags="-mcpu=603"
3513             disable altivec
3514         ;;
3515         604*|ppc604*|powerpc604*)
3516             cpuflags="-mcpu=604"
3517             disable altivec
3518         ;;
3519         g3|75*|ppc75*|powerpc75*)
3520             cpuflags="-mcpu=750"
3521             disable altivec
3522         ;;
3523         g4|745*|ppc745*|powerpc745*)
3524             cpuflags="-mcpu=7450"
3525         ;;
3526         74*|ppc74*|powerpc74*)
3527             cpuflags="-mcpu=7400"
3528         ;;
3529         g5|970|ppc970|powerpc970)
3530             cpuflags="-mcpu=970"
3531         ;;
3532         power[3-7]*)
3533             cpuflags="-mcpu=$cpu"
3534         ;;
3535         cell)
3536             cpuflags="-mcpu=cell"
3537             enable ldbrx
3538         ;;
3539         e500mc)
3540             cpuflags="-mcpu=e500mc"
3541             disable altivec
3542         ;;
3543         e500v2)
3544             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3545             disable altivec
3546         ;;
3547         e500)
3548             cpuflags="-mcpu=8540 -mhard-float"
3549             disable altivec
3550         ;;
3551     esac
3552
3553 elif enabled sparc; then
3554
3555     case $cpu in
3556         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3557             cpuflags="-mcpu=$cpu"
3558             disable vis
3559         ;;
3560         ultrasparc*|niagara[234])
3561             cpuflags="-mcpu=$cpu"
3562         ;;
3563     esac
3564
3565 elif enabled x86; then
3566
3567     case $cpu in
3568         i[345]86|pentium)
3569             cpuflags="-march=$cpu"
3570             disable mmx
3571         ;;
3572         # targets that do NOT support nopl and conditional mov (cmov)
3573         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3574             cpuflags="-march=$cpu"
3575             disable i686
3576         ;;
3577         # targets that do support nopl and conditional mov (cmov)
3578         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*)
3579             cpuflags="-march=$cpu"
3580             enable i686
3581             enable fast_cmov
3582         ;;
3583         # targets that do support conditional mov but on which it's slow
3584         pentium4|pentium4m|prescott|nocona)
3585             cpuflags="-march=$cpu"
3586             enable i686
3587             disable fast_cmov
3588         ;;
3589     esac
3590
3591 fi
3592
3593 if [ "$cpu" != generic ]; then
3594     add_cflags  $cpuflags
3595     add_asflags $cpuflags
3596 fi
3597
3598 # compiler sanity check
3599 check_exec <<EOF
3600 int main(void){ return 0; }
3601 EOF
3602 if test "$?" != 0; then
3603     echo "$cc is unable to create an executable file."
3604     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3605         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3606         echo "Only do this if you know what cross compiling means."
3607     fi
3608     die "C compiler test failed."
3609 fi
3610
3611 add_cppflags -D_ISOC99_SOURCE
3612 add_cxxflags -D__STDC_CONSTANT_MACROS
3613 check_cflags -std=c99
3614 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3615 #include <stdlib.h>
3616 EOF
3617 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3618 #include <stdlib.h>
3619 EOF
3620
3621 add_host_cppflags -D_ISOC99_SOURCE
3622 check_host_cflags -std=c99
3623 check_host_cflags -Wall
3624 check_host_cflags -O3
3625
3626 check_64bit(){
3627     arch32=$1
3628     arch64=$2
3629     expr=$3
3630     check_code cc "" "int test[2*($expr) - 1]" &&
3631         subarch=$arch64 || subarch=$arch32
3632 }
3633
3634 case "$arch" in
3635     aarch64|alpha|ia64)
3636         spic=$shared
3637     ;;
3638     mips)
3639         check_64bit mips mips64 '_MIPS_SIM > 1'
3640         spic=$shared
3641     ;;
3642     parisc)
3643         check_64bit parisc parisc64 'sizeof(void *) > 4'
3644         spic=$shared
3645     ;;
3646     ppc)
3647         check_64bit ppc ppc64 'sizeof(void *) > 4'
3648         spic=$shared
3649     ;;
3650     sparc)
3651         check_64bit sparc sparc64 'sizeof(void *) > 4'
3652         spic=$shared
3653     ;;
3654     x86)
3655         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3656         if test "$subarch" = "x86_64"; then
3657             spic=$shared
3658         fi
3659     ;;
3660     ppc)
3661         check_cc <<EOF && subarch="ppc64"
3662         int test[(int)sizeof(char*) - 7];
3663 EOF
3664     ;;
3665 esac
3666
3667 enable $subarch
3668 enabled spic && enable_weak pic
3669
3670 # OS specific
3671 case $target_os in
3672     aix)
3673         SHFLAGS=-shared
3674         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3675         enabled shared && add_ldflags -Wl,-brtl
3676         ;;
3677     haiku)
3678         prefix_default="/boot/common"
3679         network_extralibs="-lnetwork"
3680         host_libs=
3681         ;;
3682     sunos)
3683         SHFLAGS='-shared -Wl,-h,$$(@F)'
3684         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3685         network_extralibs="-lsocket -lnsl"
3686         # When using suncc to build, the Solaris linker will mark
3687         # an executable with each instruction set encountered by
3688         # the Solaris assembler.  As our libraries contain their own
3689         # guards for processor-specific code, instead suppress
3690         # generation of the HWCAPS ELF section on Solaris x86 only.
3691         enabled_all suncc x86 &&
3692             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3693             add_ldflags -Wl,-M,mapfile
3694         nm_default='nm -P -g'
3695         ;;
3696     netbsd)
3697         disable symver
3698         oss_indev_extralibs="-lossaudio"
3699         oss_outdev_extralibs="-lossaudio"
3700         enabled gcc || check_ldflags -Wl,-zmuldefs
3701         ;;
3702     openbsd|bitrig)
3703         disable symver
3704         SHFLAGS='-shared'
3705         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3706         SLIB_INSTALL_LINKS=
3707         oss_indev_extralibs="-lossaudio"
3708         oss_outdev_extralibs="-lossaudio"
3709         ;;
3710     dragonfly)
3711         disable symver
3712         ;;
3713     freebsd)
3714         ;;
3715     bsd/os)
3716         add_extralibs -lpoll -lgnugetopt
3717         strip="strip -d"
3718         ;;
3719     darwin)
3720         gas="gas-preprocessor.pl $cc"
3721         enabled ppc && add_asflags -force_cpusubtype_ALL
3722         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3723         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3724         strip="${strip} -x"
3725         add_ldflags -Wl,-dynamic,-search_paths_first
3726         SLIBSUF=".dylib"
3727         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3728         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3729         objformat="macho"
3730         enabled x86_64 && objformat="macho64"
3731         enabled_any pic shared ||
3732             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3733         ;;
3734     mingw32*)
3735         if test $target_os = "mingw32ce"; then
3736             disable network
3737         else
3738             target_os=mingw32
3739         fi
3740         LIBTARGET=i386
3741         if enabled x86_64; then
3742             LIBTARGET="i386:x86-64"
3743         elif enabled arm; then
3744             LIBTARGET=arm-wince
3745         fi
3746         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3747         check_ldflags -Wl,--nxcompat
3748         check_ldflags -Wl,--dynamicbase
3749         shlibdir_default="$bindir_default"
3750         SLIBPREF=""
3751         SLIBSUF=".dll"
3752         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3753         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3754         dlltool="${cross_prefix}dlltool"
3755         if check_cmd lib.exe -list; then
3756             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3757             if enabled x86_64; then
3758                 LIBTARGET=x64
3759             fi
3760         elif check_cmd $dlltool --version; then
3761             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)'
3762         fi
3763         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3764         SLIB_INSTALL_LINKS=
3765         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3766         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3767         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'
3768         objformat="win32"
3769         ranlib=:
3770         enable dos_paths
3771         ;;
3772     win32|win64)
3773         disable symver
3774         if enabled shared; then
3775             # Link to the import library instead of the normal static library
3776             # for shared libs.
3777             LD_LIB='%.lib'
3778             # Cannot build both shared and static libs with MSVC or icl.
3779             disable static
3780         fi
3781         shlibdir_default="$bindir_default"
3782         SLIBPREF=""
3783         SLIBSUF=".dll"
3784         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3785         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3786         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3787         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3788         SLIB_INSTALL_LINKS=
3789         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3790         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3791         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3792         objformat="win32"
3793         ranlib=:
3794         enable dos_paths
3795         ;;
3796     cygwin*)
3797         target_os=cygwin
3798         shlibdir_default="$bindir_default"
3799         SLIBPREF="cyg"
3800         SLIBSUF=".dll"
3801         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3802         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3803         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3804         SLIB_INSTALL_LINKS=
3805         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3806         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3807         objformat="win32"
3808         enable dos_paths
3809         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3810         ;;
3811     *-dos|freedos|opendos)
3812         network_extralibs="-lsocket"
3813         objformat="coff"
3814         enable dos_paths
3815         add_cppflags -U__STRICT_ANSI__
3816         ;;
3817     linux)
3818         enable dv1394
3819         ;;
3820     irix*)
3821         target_os=irix
3822         ranlib="echo ignoring ranlib"
3823         ;;
3824     os/2*)
3825         strip="lxlite -CS"
3826         ln_s="cp -f"
3827         objformat="aout"
3828         add_cppflags -D_GNU_SOURCE
3829         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3830         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3831         LIBSUF="_s.a"
3832         SLIBPREF=""
3833         SLIBSUF=".dll"
3834         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3835         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3836         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3837             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3838             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3839             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3840             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3841             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3842         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3843             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3844         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3845         enable dos_paths
3846         enable_weak os2threads
3847         ;;
3848     gnu/kfreebsd)
3849         add_cppflags -D_BSD_SOURCE
3850         ;;
3851     gnu)
3852         ;;
3853     qnx)
3854         add_cppflags -D_QNX_SOURCE
3855         network_extralibs="-lsocket"
3856         ;;
3857     symbian)
3858         SLIBSUF=".dll"
3859         enable dos_paths
3860         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3861         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3862         add_ldflags -Wl,--target1-abs,--no-undefined \
3863                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3864                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3865         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3866                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3867                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3868         ;;
3869     osf1)
3870         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3871         ;;
3872     minix)
3873         ;;
3874     plan9)
3875         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3876                      -D_REENTRANT_SOURCE        \
3877                      -D_RESEARCH_SOURCE         \
3878                      -DFD_SETSIZE=96            \
3879                      -DHAVE_SOCK_OPTS
3880         add_compat strtod.o strtod=avpriv_strtod
3881         network_extralibs='-lbsd'
3882         exeobjs=compat/plan9/main.o
3883         disable ffserver
3884         cp_f='cp'
3885         ;;
3886     none)
3887         ;;
3888     *)
3889         die "Unknown OS '$target_os'."
3890         ;;
3891 esac
3892
3893 # determine libc flavour
3894
3895 probe_libc(){
3896     pfx=$1
3897     pfx_no_=${pfx%_}
3898     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3899     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3900         eval ${pfx}libc_type=uclibc
3901         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3902     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3903         eval ${pfx}libc_type=glibc
3904         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3905     # MinGW headers can be installed on Cygwin, so check for newlib first.
3906     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3907         eval ${pfx}libc_type=newlib
3908         add_${pfx}cppflags -U__STRICT_ANSI__
3909     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3910     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3911         eval ${pfx}libc_type=mingw64
3912         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
3913             add_compat msvcrt/snprintf.o
3914             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3915         fi
3916         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3917         eval test \$${pfx_no_}cc_type = "gcc" &&
3918             add_${pfx}cppflags -D__printf__=__gnu_printf__
3919     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3920          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3921         eval ${pfx}libc_type=mingw32
3922         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3923             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3924             die "ERROR: MinGW32 runtime version must be >= 3.15."
3925         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3926         eval test \$${pfx_no_}cc_type = "gcc" &&
3927             add_${pfx}cppflags -D__printf__=__gnu_printf__
3928     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3929         eval ${pfx}libc_type=msvcrt
3930         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3931         # 0x601 by default unless something else is set by the user.
3932         # This can easily lead to us detecting functions only present
3933         # in such new versions and producing binaries requiring windows 7.0.
3934         # Therefore explicitly set the default to XP unless the user has
3935         # set something else on the command line.
3936         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3937             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3938     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3939         eval ${pfx}libc_type=klibc
3940     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3941         eval ${pfx}libc_type=bionic
3942     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3943         eval ${pfx}libc_type=solaris
3944         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3945     fi
3946 }
3947
3948 probe_libc
3949 test -n "$libc_type" && enable libc_$libc_type
3950 probe_libc host_
3951 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3952
3953 case $libc_type in
3954     bionic)
3955         add_compat strtod.o strtod=avpriv_strtod
3956         ;;
3957     msvcrt)
3958         add_compat strtod.o strtod=avpriv_strtod
3959         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3960                                      _snprintf=avpriv_snprintf  \
3961                                      vsnprintf=avpriv_vsnprintf
3962         ;;
3963 esac
3964
3965 # hacks for compiler/libc/os combinations
3966
3967 if enabled_all tms470 libc_glibc; then
3968     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3969     add_cppflags -D__USER_LABEL_PREFIX__=
3970     add_cppflags -D__builtin_memset=memset
3971     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3972     add_cflags   -pds=48    # incompatible redefinition of macro
3973 fi
3974
3975 if enabled_all ccc libc_glibc; then
3976     add_ldflags -Wl,-z,now  # calls to libots crash without this
3977 fi
3978
3979 esc(){
3980     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3981 }
3982
3983 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3984
3985 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3986
3987 set_default $PATHS_LIST
3988 set_default nm
3989
3990 # we need to build at least one lib type
3991 if ! enabled_any static shared; then
3992     cat <<EOF
3993 At least one library type must be built.
3994 Specify --enable-static to build the static libraries or --enable-shared to
3995 build the shared libraries as well. To only build the shared libraries specify
3996 --disable-static in addition to --enable-shared.
3997 EOF
3998     exit 1;
3999 fi
4000
4001 # backward compatibility layer for incompatible_libav/fork_abi
4002 enabled incompatible_fork_abi  && enable incompatible_libav_abi
4003 enabled incompatible_libav_abi && enable incompatible_fork_abi
4004
4005 die_license_disabled() {
4006     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4007 }
4008
4009 die_license_disabled_gpl() {
4010     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4011 }
4012
4013 die_license_disabled gpl frei0r
4014 die_license_disabled gpl libcdio
4015 die_license_disabled gpl libutvideo
4016 die_license_disabled gpl libvidstab
4017 die_license_disabled gpl libx264
4018 die_license_disabled gpl libx265
4019 die_license_disabled gpl libxavs
4020 die_license_disabled gpl libxvid
4021 die_license_disabled gpl libzvbi
4022 die_license_disabled gpl x11grab
4023
4024 die_license_disabled nonfree libaacplus
4025 die_license_disabled nonfree libfaac
4026 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4027 enabled gpl && die_license_disabled_gpl nonfree openssl
4028
4029 die_license_disabled version3 libopencore_amrnb
4030 die_license_disabled version3 libopencore_amrwb
4031 die_license_disabled version3 libvo_aacenc
4032 die_license_disabled version3 libvo_amrwbenc
4033
4034 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4035
4036 disabled optimizations || check_cflags -fomit-frame-pointer
4037
4038 enable_weak_pic() {
4039     disabled pic && return
4040     enable pic
4041     add_cppflags -DPIC
4042     case "$target_os" in
4043     mingw*|cygwin*)
4044         ;;
4045     *)
4046         add_cflags -fPIC
4047         ;;
4048     esac
4049     add_asflags  -fPIC
4050 }
4051
4052 enabled pic && enable_weak_pic
4053
4054 check_cc <<EOF || die "Symbol mangling check failed."
4055 int ff_extern;
4056 EOF
4057 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4058 extern_prefix=${sym%%ff_extern*}
4059
4060 check_cc <<EOF && enable_weak inline_asm
4061 void foo(void) { __asm__ volatile ("" ::); }
4062 EOF
4063
4064 _restrict=
4065 for restrict_keyword in restrict __restrict__ __restrict; do
4066     check_cc <<EOF && _restrict=$restrict_keyword && break
4067 void foo(char * $restrict_keyword p);
4068 EOF
4069 done
4070
4071 check_cc <<EOF && enable pragma_deprecated
4072 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4073 EOF
4074
4075 check_cc <<EOF && enable attribute_packed
4076 struct { int x; } __attribute__((packed)) x;
4077 EOF
4078
4079 check_cc <<EOF && enable attribute_may_alias
4080 union { int x; } __attribute__((may_alias)) x;
4081 EOF
4082
4083 check_cc <<EOF || die "endian test failed"
4084 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4085 EOF
4086 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4087
4088 check_inline_asm inline_asm_labels '"1:\n"'
4089
4090 if enabled aarch64; then
4091     # internal assembler in clang 3.3 does not support this instruction
4092     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4093     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4094
4095     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4096
4097 elif enabled alpha; then
4098
4099     check_cflags -mieee
4100
4101 elif enabled arm; then
4102
4103     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4104 float func(float a, float b){ return a+b; }
4105 EOF
4106
4107     enabled thumb && check_cflags -mthumb || check_cflags -marm
4108     nogas=die
4109
4110     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4111         enable vfp_args
4112     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4113         case "${cross_prefix:-$cc}" in
4114             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4115             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4116 __asm__ (".eabi_attribute 28, 1");
4117 int main(void) { return 0; }
4118 EOF
4119         esac
4120         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4121     fi
4122
4123     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4124     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4125     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4126     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4127     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4128     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4129
4130     [ $target_os = linux ] ||
4131         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4132             $ARCH_EXT_LIST_ARM
4133
4134     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4135     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
4136
4137     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4138
4139 elif enabled mips; then
4140
4141     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4142     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
4143      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
4144     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4145      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4146     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4147      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4148     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4149      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4150
4151 elif enabled parisc; then
4152
4153     if enabled gcc; then
4154         case $($cc -dumpversion) in
4155             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4156         esac
4157     fi
4158
4159 elif enabled ppc; then
4160
4161     enable local_aligned_8 local_aligned_16
4162
4163     [ $cpu != e500 -a $cpu != e500v2 ] &&
4164      check_inline_asm dcbzl    '"dcbzl 0, %0" :: "r"(0)'
4165     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4166     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4167     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4168
4169     # AltiVec flags: The FSF version of GCC differs from the Apple version
4170     if enabled altivec; then
4171         if ! enabled_any pic ppc64; then
4172             nogas=warn
4173         fi
4174         check_cflags -maltivec -mabi=altivec &&
4175         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4176         check_cflags -faltivec
4177
4178         # check if our compiler supports Motorola AltiVec C API
4179         check_cc <<EOF || disable altivec
4180 $inc_altivec_h
4181 int main(void) {
4182     vector signed int v1 = (vector signed int) { 0 };
4183     vector signed int v2 = (vector signed int) { 1 };
4184     v1 = vec_add(v1, v2);
4185     return 0;
4186 }
4187 EOF
4188
4189         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4190     fi
4191
4192 elif enabled sparc; then
4193
4194     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
4195
4196 elif enabled x86; then
4197
4198     check_builtin rdtsc    intrin.h   "__rdtsc()"
4199     check_builtin mm_empty mmintrin.h "_mm_empty()"
4200
4201     enable local_aligned_8 local_aligned_16
4202
4203     # check whether EBP is available on x86
4204     # As 'i' is stored on the stack, this program will crash
4205     # if the base pointer is used to access it because the
4206     # base pointer is cleared in the inline assembly code.
4207     check_exec_crash <<EOF && enable ebp_available
4208 volatile int i=0;
4209 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4210 return i;
4211 EOF
4212
4213     # check whether EBX is available on x86
4214     check_inline_asm ebx_available '""::"b"(0)' &&
4215         check_inline_asm ebx_available '"":::"%ebx"'
4216
4217     # check whether xmm clobbers are supported
4218     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4219
4220     # check whether binutils is new enough to compile SSSE3/MMXEXT
4221     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4222     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4223
4224     if ! disabled_any asm mmx yasm; then
4225         if check_cmd $yasmexe --version; then
4226             enabled x86_64 && yasm_extra="-m amd64"
4227             yasm_debug="-g dwarf2"
4228         elif check_cmd nasm -v; then
4229             yasmexe=nasm
4230             yasm_debug="-g -F dwarf"
4231             enabled x86_64 && test "$objformat" = elf && objformat=elf64
4232         fi
4233
4234         YASMFLAGS="-f $objformat $yasm_extra"
4235         enabled pic               && append YASMFLAGS "-DPIC"
4236         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4237         case "$objformat" in
4238             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4239         esac
4240
4241         check_yasm "movbe ecx, [5]" && enable yasm ||
4242             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4243         check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external avresample
4244         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4245         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4246         check_yasm "CPU amdnop" && enable cpunop
4247     fi
4248
4249     case "$cpu" in
4250         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4251             disable fast_clz
4252         ;;
4253     esac
4254
4255 fi
4256
4257 if enabled asm; then
4258     as=${gas:=$as}
4259     check_as <<EOF && enable gnu_as || \
4260         $nogas "GNU assembler not found, install gas-preprocessor"
4261 .macro m n
4262 \n: .int 0
4263 .endm
4264 m x
4265 EOF
4266 fi
4267
4268 check_ldflags -Wl,--as-needed
4269
4270 if check_func dlopen; then
4271     ldl=
4272 elif check_func dlopen -ldl; then
4273     ldl=-ldl
4274 fi
4275
4276 if ! disabled network; then
4277     check_type "sys/types.h sys/socket.h" socklen_t
4278     check_type netdb.h "struct addrinfo"
4279     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4280     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4281     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4282     check_type netinet/in.h "struct sockaddr_in6"
4283     check_type poll.h "struct pollfd"
4284     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4285     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4286     check_type netinet/sctp.h "struct sctp_event_subscribe"
4287     check_func getaddrinfo $network_extralibs
4288     check_func getservbyport $network_extralibs
4289     check_func inet_aton $network_extralibs
4290     # Prefer arpa/inet.h over winsock2
4291     if check_header arpa/inet.h ; then
4292         check_func closesocket
4293     elif check_header winsock2.h ; then
4294         check_func_headers winsock2.h closesocket -lws2 &&
4295             network_extralibs="-lws2" ||
4296         { check_func_headers winsock2.h closesocket -lws2_32 &&
4297             network_extralibs="-lws2_32"; } || disable winsock2_h network
4298         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4299         check_type ws2tcpip.h socklen_t
4300         check_type ws2tcpip.h "struct addrinfo"
4301         check_type ws2tcpip.h "struct group_source_req"
4302         check_type ws2tcpip.h "struct ip_mreq_source"
4303         check_type ws2tcpip.h "struct ipv6_mreq"
4304         check_type winsock2.h "struct pollfd"
4305         check_type ws2tcpip.h "struct sockaddr_in6"
4306         check_type ws2tcpip.h "struct sockaddr_storage"
4307         check_struct winsock2.h "struct sockaddr" sa_len
4308     else
4309         disable network
4310     fi
4311 fi
4312
4313 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4314 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
4315
4316 check_func  access
4317 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
4318 check_func  fcntl
4319 check_func  fork
4320 check_func_headers stdlib.h getenv
4321 check_func  gethrtime
4322 check_func  getopt
4323 check_func  getrusage
4324 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4325 check_func  gettimeofday
4326 check_func  isatty
4327 check_func  localtime_r
4328 check_func  ${malloc_prefix}memalign            && enable memalign
4329 check_func  mkstemp
4330 check_func  mmap
4331 check_func  mprotect
4332 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4333 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4334 check_func  setrlimit
4335 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4336 check_func  strerror_r
4337 check_func  sched_getaffinity
4338 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4339 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4340 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4341 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4342 check_builtin sarestart signal.h "SA_RESTART"
4343 check_func  sysconf
4344 check_func  sysctl
4345 check_func  usleep
4346 check_func_headers conio.h kbhit
4347 check_func_headers windows.h PeekNamedPipe
4348 check_func_headers io.h setmode
4349 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4350 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4351 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4352 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4353 check_func_headers windows.h GetProcessAffinityMask
4354 check_func_headers windows.h GetProcessTimes
4355 check_func_headers windows.h GetSystemTimeAsFileTime
4356 check_func_headers windows.h MapViewOfFile
4357 check_func_headers windows.h SetConsoleTextAttribute
4358 check_func_headers windows.h Sleep
4359 check_func_headers windows.h VirtualAlloc
4360 check_func_headers glob.h glob
4361 check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4362
4363 check_header cl/cl.h
4364 check_header direct.h
4365 check_header dlfcn.h
4366 check_header dxva.h
4367 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4368 check_header io.h
4369 check_header libcrystalhd/libcrystalhd_if.h
4370 check_header malloc.h
4371 check_header poll.h
4372 check_header sys/mman.h
4373 check_header sys/param.h
4374 check_header sys/resource.h
4375 check_header sys/select.h
4376 check_header sys/time.h
4377 check_header sys/un.h
4378 check_header termios.h
4379 check_header unistd.h
4380 check_header vdpau/vdpau.h
4381 check_header vdpau/vdpau_x11.h
4382 check_header VideoDecodeAcceleration/VDADecoder.h
4383 check_header windows.h
4384 check_header X11/extensions/XvMClib.h
4385 check_header asm/types.h
4386
4387 if ! disabled w32threads && ! enabled pthreads; then
4388     check_func_headers "windows.h process.h" _beginthreadex &&
4389         enable w32threads || disable w32threads
4390 fi
4391
4392 # check for some common methods of building with pthread support
4393 # do this before the optional library checks as some of them require pthreads
4394 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4395     enable pthreads
4396     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
4397         add_cflags -pthread
4398         add_extralibs -pthread
4399     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
4400         add_cflags -pthreads
4401         add_extralibs -pthreads
4402     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
4403         add_extralibs -lpthreadGC2
4404     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
4405         :
4406     elif ! check_func pthread_join && ! check_func pthread_create; then
4407         disable pthreads
4408     fi
4409     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
4410 fi
4411
4412 for thread in $THREADS_LIST; do
4413     if enabled $thread; then
4414         test -n "$thread_type" &&
4415             die "ERROR: Only one thread type must be selected." ||
4416             thread_type="$thread"
4417     fi
4418 done
4419
4420 if enabled pthreads; then
4421   check_func pthread_cancel
4422 fi
4423
4424 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4425 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4426
4427 check_lib math.h sin -lm && LIBM="-lm"
4428 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4429
4430 atan2f_args=2
4431 ldexpf_args=2
4432 powf_args=2
4433
4434 for func in $MATH_FUNCS; do
4435     eval check_mathfunc $func \${${func}_args:-1}
4436 done
4437
4438 # these are off by default, so fail if requested and not available
4439 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
4440                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4441                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4442 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
4443 enabled fontconfig        && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4444 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4445 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4446 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4447 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4448 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4449 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
4450 enabled libbluray         && require libbluray libbluray/bluray.h bd_open -lbluray
4451 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
4452                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4453                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4454 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4455 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4456 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4457 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"
4458 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
4459 enabled libfreetype       && require_libfreetype
4460 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
4461 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4462                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4463                                done || die "ERROR: libgsm not found"; }
4464 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4465 enabled libmodplug        && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4466 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4467 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
4468 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4469 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4470 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4471 enabled libopenjpeg       && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
4472                                check_lib openjpeg.h opj_version -lopenjpeg ||
4473                                die "ERROR: libopenjpeg not found"; }
4474 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4475 enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4476 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
4477 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4478 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4479 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
4480 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
4481 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
4482 enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex
4483 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4484     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4485     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4486 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4487 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
4488                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4489                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4490 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4491 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4492 enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
4493 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4494 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4495 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4496 enabled libvpx            && {
4497     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4498                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
4499     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 ||
4500                                     die "ERROR: libvpx encoder version must be >=0.9.7"; }
4501     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4502     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; } }
4503 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4504 enabled libwebp           && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4505 enabled libx264           && require libx264 x264.h x264_encoder_encode -lx264 &&
4506                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4507                                die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4508 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
4509                              { check_cpp_condition x265.h "X265_BUILD >= 5" ||
4510                                die "ERROR: libx265 version must be >= 5."; }
4511 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
4512 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4513 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
4514 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
4515 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
4516                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
4517                                die "ERROR: openal not found"; } &&
4518                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
4519                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
4520 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
4521                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
4522                                die "ERROR: opencl not found"; } &&
4523                              { ! enabled_any w32threads os2threads ||
4524                                die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
4525                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
4526                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
4527                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4528 enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
4529                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
4530                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
4531                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
4532                                die "ERROR: opengl not found."
4533                              }
4534 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4535                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4536                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4537                                die "ERROR: openssl not found"; }
4538
4539 if enabled gnutls; then
4540     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4541     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4542 fi
4543
4544 # libdc1394 check
4545 if enabled libdc1394; then
4546     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4547         enable libdc1394_2; } ||
4548     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4549         enable libdc1394_1; } ||
4550     die "ERROR: No version of libdc1394 found "
4551 fi
4552
4553 SDL_CONFIG="${cross_prefix}sdl-config"
4554 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4555     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4556     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4557     enable sdl
4558 else
4559   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4560     sdl_cflags=$("${SDL_CONFIG}" --cflags)
4561     sdl_libs=$("${SDL_CONFIG}" --libs)
4562     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4563     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4564     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4565     enable sdl
4566   fi
4567 fi
4568 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4569
4570 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4571 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
4572 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
4573 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
4574 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4575
4576 check_header linux/fb.h
4577 check_header linux/videodev.h
4578 check_header linux/videodev2.h
4579 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4580
4581 check_header sys/videoio.h
4582
4583 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4584 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4585 # w32api 3.12 had it defined wrong
4586 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4587
4588 check_type "dshow.h" IBaseFilter
4589
4590 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4591 { check_header dev/bktr/ioctl_meteor.h &&
4592   check_header dev/bktr/ioctl_bt848.h; } ||
4593 { check_header machine/ioctl_meteor.h &&
4594   check_header machine/ioctl_bt848.h; } ||
4595 { check_header dev/video/meteor/ioctl_meteor.h &&
4596   check_header dev/video/bktr/ioctl_bt848.h; } ||
4597 check_header dev/ic/bt8xx.h
4598
4599 check_header sndio.h
4600 if check_struct sys/soundcard.h audio_buf_info bytes; then
4601     enable_safe sys/soundcard.h
4602 else
4603     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
4604     #include <sys/soundcard.h>
4605     audio_buf_info abc;
4606 EOF
4607 fi
4608 check_header soundcard.h
4609
4610 enabled_any alsa_indev alsa_outdev &&
4611     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4612
4613 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4614     check_func jack_port_get_latency_range -ljack
4615
4616 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4617
4618 if enabled libcdio; then
4619     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4620     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4621     die "ERROR: libcdio-paranoia not found"
4622 fi
4623
4624 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4625
4626 enabled x11grab                                           &&
4627 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4628 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes &&
4629 { enabled xlib || die "ERROR: Xlib not found"; }
4630
4631 enabled vaapi &&
4632     check_lib va/va.h vaInitialize -lva ||
4633     disable vaapi
4634
4635 enabled vdpau &&
4636     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4637     disable vdpau
4638
4639 enabled vdpau && enabled xlib &&
4640     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4641     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
4642     enable vdpau_x11
4643
4644 # Funny iconv installations are not unusual, so check it after all flags have been set
4645 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
4646
4647 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4648
4649 # add some useful compiler flags if supported
4650 check_cflags -Wdeclaration-after-statement
4651 check_cflags -Wall
4652 check_cflags -Wdisabled-optimization
4653 check_cflags -Wpointer-arith
4654 check_cflags -Wredundant-decls
4655 check_cflags -Wwrite-strings
4656 check_cflags -Wtype-limits
4657 check_cflags -Wundef
4658 check_cflags -Wmissing-prototypes
4659 check_cflags -Wno-pointer-to-int-cast
4660 check_cflags -Wstrict-prototypes
4661 enabled extra_warnings && check_cflags -Winline
4662
4663 check_disable_warning(){
4664     warning_flag=-W${1#-Wno-}
4665     test_cflags $warning_flag && add_cflags $1
4666 }
4667
4668 check_disable_warning -Wno-parentheses
4669 check_disable_warning -Wno-switch
4670 check_disable_warning -Wno-format-zero-length
4671 check_disable_warning -Wno-pointer-sign
4672
4673 # add some linker flags
4674 check_ldflags -Wl,--warn-common
4675 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4676 enabled rpath && add_ldflags -Wl,-rpath=$libdir
4677 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4678
4679 # add some strip flags
4680 # -wN '..@*' is more selective than -x, but not available everywhere.
4681 check_stripflags -wN \'..@*\' || check_stripflags -x
4682
4683 enabled neon_clobber_test &&
4684     check_ldflags -Wl,--wrap,avcodec_open2              \
4685                   -Wl,--wrap,avcodec_decode_audio4      \
4686                   -Wl,--wrap,avcodec_decode_video2      \
4687                   -Wl,--wrap,avcodec_decode_subtitle2   \
4688                   -Wl,--wrap,avcodec_encode_audio2      \
4689                   -Wl,--wrap,avcodec_encode_video2      \
4690                   -Wl,--wrap,avcodec_encode_subtitle    \
4691                   -Wl,--wrap,swr_convert                \
4692                   -Wl,--wrap,avresample_convert ||
4693     disable neon_clobber_test
4694
4695 enabled xmm_clobber_test &&
4696     check_ldflags -Wl,--wrap,avcodec_open2              \
4697                   -Wl,--wrap,avcodec_decode_audio4      \
4698                   -Wl,--wrap,avcodec_decode_video2      \
4699                   -Wl,--wrap,avcodec_decode_subtitle2   \
4700                   -Wl,--wrap,avcodec_encode_audio2      \
4701                   -Wl,--wrap,avcodec_encode_video       \
4702                   -Wl,--wrap,avcodec_encode_video2      \
4703                   -Wl,--wrap,avcodec_encode_subtitle    \
4704                   -Wl,--wrap,swr_convert                \
4705                   -Wl,--wrap,avresample_convert         \
4706                   -Wl,--wrap,sws_scale ||
4707     disable xmm_clobber_test
4708
4709 echo "X{};" > $TMPV
4710 if test_ldflags -Wl,--version-script,$TMPV; then
4711     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4712     check_cc <<EOF && enable symver_asm_label
4713 void ff_foo(void) __asm__ ("av_foo@VERSION");
4714 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4715 EOF
4716     check_cc <<EOF && enable symver_gnu_asm
4717 __asm__(".symver ff_foo,av_foo@VERSION");
4718 void ff_foo(void) {}
4719 EOF
4720 fi
4721
4722 if [ -z "$optflags" ]; then
4723     if enabled small; then
4724         optflags=$cflags_size
4725     elif enabled optimizations; then
4726         optflags=$cflags_speed
4727     else
4728         optflags=$cflags_noopt
4729     fi
4730 fi
4731
4732 check_optflags(){
4733     check_cflags "$@"
4734     enabled lto && check_ldflags "$@"
4735 }
4736
4737
4738 if enabled lto; then
4739     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4740     check_cflags  -flto
4741     check_ldflags -flto $cpuflags
4742 fi
4743
4744 check_optflags $optflags
4745 check_optflags -fno-math-errno
4746 check_optflags -fno-signed-zeros
4747
4748 enabled ftrapv && check_cflags -ftrapv
4749
4750 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
4751 int x;
4752 EOF
4753
4754
4755 if enabled icc; then
4756     # Just warnings, no remarks
4757     check_cflags -w1
4758     # -wd: Disable following warnings
4759     # 144, 167, 556: -Wno-pointer-sign
4760     # 188: enumerated type mixed with another type
4761     # 1292: attribute "foo" ignored
4762     # 1419: external declaration in primary source file
4763     # 10006: ignoring unknown option -fno-signed-zeros
4764     # 10148: ignoring unknown option -Wno-parentheses
4765     # 10156: ignoring option '-W'; no argument required
4766     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
4767     # 11030: Warning unknown option --as-needed
4768     # 10156: ignoring option '-export'; no argument required
4769     check_ldflags -wd10156,11030
4770     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4771     enable ebp_available
4772     if enabled x86_32; then
4773         icc_version=$($cc -dumpversion)
4774         test ${icc_version%%.*} -ge 11 &&
4775             check_cflags -falign-stack=maintain-16-byte ||
4776             disable aligned_stack
4777     fi
4778 elif enabled ccc; then
4779     # disable some annoying warnings
4780     add_cflags -msg_disable bitnotint
4781     add_cflags -msg_disable mixfuncvoid
4782     add_cflags -msg_disable nonstandcast
4783     add_cflags -msg_disable unsupieee
4784 elif enabled gcc; then
4785     check_optflags -fno-tree-vectorize
4786     check_cflags -Werror=implicit-function-declaration
4787     check_cflags -Werror=missing-prototypes
4788     check_cflags -Werror=return-type
4789     check_cflags -Werror=vla
4790     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4791 elif enabled llvm_gcc; then
4792     check_cflags -mllvm -stack-alignment=16
4793 elif enabled clang; then
4794     check_cflags -mllvm -stack-alignment=16
4795     check_cflags -Qunused-arguments
4796     check_cflags -Werror=implicit-function-declaration