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