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