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