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