build: mov_muxer requires ac3_parser
[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     CONDITION_VARIABLE_Ptr
1771     socklen_t
1772     struct_addrinfo
1773     struct_group_source_req
1774     struct_ip_mreq_source
1775     struct_ipv6_mreq
1776     struct_pollfd
1777     struct_rusage_ru_maxrss
1778     struct_sctp_event_subscribe
1779     struct_sockaddr_in6
1780     struct_sockaddr_sa_len
1781     struct_sockaddr_storage
1782     struct_stat_st_mtim_tv_nsec
1783     struct_v4l2_frmivalenum_discrete
1784 "
1785
1786 HAVE_LIST="
1787     $ARCH_EXT_LIST
1788     $(add_suffix _external $ARCH_EXT_LIST)
1789     $(add_suffix _inline   $ARCH_EXT_LIST)
1790     $ARCH_FEATURES
1791     $ATOMICS_LIST
1792     $BUILTIN_LIST
1793     $HAVE_LIST_CMDLINE
1794     $HAVE_LIST_PUB
1795     $HEADERS_LIST
1796     $INTRINSICS_LIST
1797     $MATH_FUNCS
1798     $SYSTEM_FUNCS
1799     $THREADS_LIST
1800     $TOOLCHAIN_FEATURES
1801     $TYPES_LIST
1802     atomics_native
1803     dos_paths
1804     dxva2api_cobj
1805     dxva2_lib
1806     libc_msvcrt
1807     libdc1394_1
1808     libdc1394_2
1809     makeinfo
1810     makeinfo_html
1811     perl
1812     pod2man
1813     sdl
1814     texi2html
1815     threads
1816     vdpau_x11
1817     xlib
1818 "
1819
1820 # options emitted with CONFIG_ prefix but not available on the command line
1821 CONFIG_EXTRA="
1822     aandcttables
1823     ac3dsp
1824     audio_frame_queue
1825     audiodsp
1826     blockdsp
1827     bswapdsp
1828     cabac
1829     dvprofile
1830     exif
1831     faandct
1832     faanidct
1833     fdctdsp
1834     frame_thread_encoder
1835     gcrypt
1836     golomb
1837     gplv3
1838     h263dsp
1839     h264chroma
1840     h264dsp
1841     h264pred
1842     h264qpel
1843     hpeldsp
1844     huffman
1845     huffyuvdsp
1846     huffyuvencdsp
1847     idctdsp
1848     iirfilter
1849     intrax8
1850     lgplv3
1851     llauddsp
1852     llviddsp
1853     lpc
1854     me_cmp
1855     mpeg_er
1856     mpegaudio
1857     mpegaudiodsp
1858     mpegvideo
1859     mpegvideoenc
1860     nettle
1861     pixblockdsp
1862     qpeldsp
1863     rangecoder
1864     riffdec
1865     riffenc
1866     rtpdec
1867     rtpenc_chain
1868     sinewin
1869     startcode
1870     tpeldsp
1871     videodsp
1872     vp3dsp
1873     wma_freqs
1874 "
1875
1876 CMDLINE_SELECT="
1877     $ARCH_EXT_LIST
1878     $CONFIG_LIST
1879     $HAVE_LIST_CMDLINE
1880     $THREADS_LIST
1881     asm
1882     cross_compile
1883     debug
1884     extra_warnings
1885     logging
1886     lto
1887     optimizations
1888     rpath
1889     stripping
1890 "
1891
1892 PATHS_LIST="
1893     bindir
1894     datadir
1895     docdir
1896     incdir
1897     libdir
1898     mandir
1899     prefix
1900     shlibdir
1901 "
1902
1903 CMDLINE_SET="
1904     $PATHS_LIST
1905     ar
1906     arch
1907     as
1908     assert_level
1909     build_suffix
1910     cc
1911     cpu
1912     cross_prefix
1913     cxx
1914     dep_cc
1915     doxygen
1916     extra_version
1917     gas
1918     host_cc
1919     host_cflags
1920     host_ld
1921     host_ldflags
1922     host_libs
1923     host_os
1924     install
1925     ld
1926     logfile
1927     malloc_prefix
1928     nm
1929     optflags
1930     pkg_config
1931     pkg_config_flags
1932     progs_suffix
1933     random_seed
1934     ranlib
1935     samples
1936     strip
1937     sws_max_filter_size
1938     sysinclude
1939     sysroot
1940     target_exec
1941     target_os
1942     target_path
1943     target_samples
1944     tempprefix
1945     toolchain
1946     valgrind
1947     yasmexe
1948 "
1949
1950 CMDLINE_APPEND="
1951     extra_cflags
1952     extra_cxxflags
1953     host_cppflags
1954 "
1955
1956 # code dependency declarations
1957
1958 # architecture extensions
1959
1960 armv5te_deps="arm"
1961 armv6_deps="arm"
1962 armv6t2_deps="arm"
1963 armv8_deps="aarch64"
1964 neon_deps_any="aarch64 arm"
1965 intrinsics_neon_deps="neon"
1966 vfp_deps_any="aarch64 arm"
1967 vfpv3_deps="vfp"
1968 setend_deps="arm"
1969
1970 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1971
1972 mipsfpu_deps="mips"
1973 mips32r2_deps="mips"
1974 mipsdspr1_deps="mips"
1975 mipsdspr2_deps="mips"
1976
1977 altivec_deps="ppc"
1978 ppc4xx_deps="ppc"
1979 vsx_deps="ppc"
1980
1981 cpunop_deps="i686"
1982 x86_64_select="i686"
1983 x86_64_suggest="fast_cmov"
1984
1985 amd3dnow_deps="mmx"
1986 amd3dnowext_deps="amd3dnow"
1987 i686_deps="x86"
1988 mmx_deps="x86"
1989 mmxext_deps="mmx"
1990 sse_deps="mmxext"
1991 sse2_deps="sse"
1992 sse3_deps="sse2"
1993 ssse3_deps="sse3"
1994 sse4_deps="ssse3"
1995 sse42_deps="sse4"
1996 avx_deps="sse42"
1997 xop_deps="avx"
1998 fma3_deps="avx"
1999 fma4_deps="avx"
2000 avx2_deps="avx"
2001
2002 mmx_external_deps="yasm"
2003 mmx_inline_deps="inline_asm"
2004 mmx_suggest="mmx_external mmx_inline"
2005
2006 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2007     eval dep=\$${ext}_deps
2008     eval ${ext}_external_deps='"${dep}_external"'
2009     eval ${ext}_inline_deps='"${dep}_inline"'
2010     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2011 done
2012
2013 aligned_stack_if_any="aarch64 ppc x86"
2014 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2015 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2016 fast_unaligned_if_any="aarch64 ppc x86"
2017 simd_align_16_if_any="altivec neon sse"
2018
2019 # system capabilities
2020
2021 symver_if_any="symver_asm_label symver_gnu_asm"
2022
2023 # threading support
2024 atomics_gcc_if="sync_val_compare_and_swap"
2025 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2026 atomics_win32_if="MemoryBarrier"
2027 atomics_native_if_any="$ATOMICS_LIST"
2028 w32threads_deps="atomics_native"
2029 threads_if_any="$THREADS_LIST"
2030
2031 # subsystems
2032 dct_select="rdft"
2033 error_resilience_select="me_cmp"
2034 faandct_deps="faan fdctdsp"
2035 faanidct_deps="faan idctdsp"
2036 frame_thread_encoder_deps="encoders threads"
2037 intrax8_select="error_resilience"
2038 mdct_select="fft"
2039 rdft_select="fft"
2040 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2041 mpeg_er_select="error_resilience"
2042 mpegaudio_select="mpegaudiodsp"
2043 mpegaudiodsp_select="dct"
2044 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
2045 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2046
2047 # decoders / encoders
2048 aac_decoder_select="mdct sinewin"
2049 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2050 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2051 ac3_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2052 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2053 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2054 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2055 aic_decoder_select="golomb idctdsp"
2056 alac_encoder_select="lpc"
2057 als_decoder_select="bswapdsp"
2058 amrnb_decoder_select="lsp"
2059 amrwb_decoder_select="lsp"
2060 amv_decoder_select="sp5x_decoder exif"
2061 amv_encoder_select="aandcttables mpegvideoenc"
2062 ape_decoder_select="bswapdsp llauddsp"
2063 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2064 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2065 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2066 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2067 atrac1_decoder_select="mdct sinewin"
2068 atrac3_decoder_select="mdct"
2069 atrac3p_decoder_select="mdct sinewin"
2070 avrn_decoder_select="exif"
2071 bink_decoder_select="blockdsp hpeldsp"
2072 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2073 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2074 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2075 cllc_decoder_select="bswapdsp"
2076 comfortnoise_encoder_select="lpc"
2077 cook_decoder_select="audiodsp mdct sinewin"
2078 cscd_decoder_select="lzo"
2079 cscd_decoder_suggest="zlib"
2080 dca_decoder_select="mdct"
2081 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2082 dnxhd_decoder_select="blockdsp idctdsp"
2083 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2084 dvvideo_decoder_select="dvprofile idctdsp"
2085 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2086 dxa_decoder_select="zlib"
2087 eac3_decoder_select="ac3_decoder"
2088 eac3_encoder_select="ac3_encoder"
2089 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2090 eatgq_decoder_select="aandcttables"
2091 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2092 exr_decoder_select="zlib"
2093 ffv1_decoder_select="golomb rangecoder"
2094 ffv1_encoder_select="rangecoder"
2095 ffvhuff_decoder_select="huffyuv_decoder"
2096 ffvhuff_encoder_select="huffyuv_encoder"
2097 fic_decoder_select="golomb"
2098 flac_decoder_select="golomb"
2099 flac_encoder_select="bswapdsp golomb lpc"
2100 flashsv_decoder_select="zlib"
2101 flashsv_encoder_select="zlib"
2102 flashsv2_encoder_select="zlib"
2103 flashsv2_decoder_select="zlib"
2104 flv_decoder_select="h263_decoder"
2105 flv_encoder_select="h263_encoder"
2106 fourxm_decoder_select="blockdsp bswapdsp"
2107 fraps_decoder_select="bswapdsp huffman"
2108 g2m_decoder_select="blockdsp idctdsp zlib"
2109 g729_decoder_select="audiodsp"
2110 h261_decoder_select="mpeg_er mpegvideo"
2111 h261_encoder_select="aandcttables mpegvideoenc"
2112 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2113 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2114 h263i_decoder_select="h263_decoder"
2115 h263p_encoder_select="h263_encoder"
2116 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2117 h264_decoder_suggest="error_resilience"
2118 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2119 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2120 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2121 iac_decoder_select="imc_decoder"
2122 imc_decoder_select="bswapdsp fft mdct sinewin"
2123 indeo3_decoder_select="hpeldsp"
2124 interplay_video_decoder_select="hpeldsp"
2125 jpegls_decoder_select="golomb mjpeg_decoder"
2126 jpegls_encoder_select="golomb"
2127 jv_decoder_select="blockdsp"
2128 lagarith_decoder_select="huffyuvdsp"
2129 ljpeg_encoder_select="aandcttables idctdsp"
2130 loco_decoder_select="golomb"
2131 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2132 metasound_decoder_select="lsp mdct sinewin"
2133 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2134 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp"
2135 mjpeg_encoder_select="aandcttables mpegvideoenc"
2136 mjpegb_decoder_select="mjpeg_decoder"
2137 mlp_decoder_select="mlp_parser"
2138 motionpixels_decoder_select="bswapdsp"
2139 mp1_decoder_select="mpegaudio"
2140 mp1float_decoder_select="mpegaudio"
2141 mp2_decoder_select="mpegaudio"
2142 mp2float_decoder_select="mpegaudio"
2143 mp3_decoder_select="mpegaudio"
2144 mp3adu_decoder_select="mpegaudio"
2145 mp3adufloat_decoder_select="mpegaudio"
2146 mp3float_decoder_select="mpegaudio"
2147 mp3on4_decoder_select="mpegaudio"
2148 mp3on4float_decoder_select="mpegaudio"
2149 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2150 mpc8_decoder_select="mpegaudiodsp"
2151 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2152 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2153 mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
2154 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2155 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2156 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2157 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2158 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2159 mpeg4_encoder_select="h263_encoder"
2160 msmpeg4v1_decoder_select="h263_decoder"
2161 msmpeg4v2_decoder_select="h263_decoder"
2162 msmpeg4v2_encoder_select="h263_encoder"
2163 msmpeg4v3_decoder_select="h263_decoder"
2164 msmpeg4v3_encoder_select="h263_encoder"
2165 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
2166 mxpeg_decoder_select="mjpeg_decoder"
2167 nellymoser_decoder_select="mdct sinewin"
2168 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2169 nuv_decoder_select="idctdsp lzo"
2170 on2avc_decoder_select="mdct"
2171 opus_decoder_deps="swresample"
2172 png_decoder_select="zlib"
2173 png_encoder_select="huffyuvencdsp zlib"
2174 prores_decoder_select="blockdsp idctdsp"
2175 prores_encoder_select="fdctdsp"
2176 qcelp_decoder_select="lsp"
2177 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2178 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2179 ra_144_decoder_select="audiodsp"
2180 ralf_decoder_select="golomb"
2181 rawvideo_decoder_select="bswapdsp"
2182 rtjpeg_decoder_select="me_cmp"
2183 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2184 rv10_encoder_select="h263_encoder"
2185 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2186 rv20_encoder_select="h263_encoder"
2187 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2188 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2189 shorten_decoder_select="golomb"
2190 sipr_decoder_select="lsp"
2191 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2192 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2193 sonic_decoder_select="golomb rangecoder"
2194 sonic_encoder_select="golomb rangecoder"
2195 sonic_ls_encoder_select="golomb rangecoder"
2196 sp5x_decoder_select="mjpeg_decoder"
2197 svq1_decoder_select="hpeldsp"
2198 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2199 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2200 svq3_decoder_suggest="zlib"
2201 tak_decoder_select="audiodsp"
2202 theora_decoder_select="vp3_decoder"
2203 thp_decoder_select="mjpeg_decoder"
2204 tiff_decoder_suggest="zlib lzma"
2205 tiff_encoder_suggest="zlib"
2206 truehd_decoder_select="mlp_parser"
2207 truemotion2_decoder_select="bswapdsp"
2208 truespeech_decoder_select="bswapdsp"
2209 tscc_decoder_select="zlib"
2210 twinvq_decoder_select="mdct lsp sinewin"
2211 utvideo_decoder_select="bswapdsp"
2212 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2213 vble_decoder_select="huffyuvdsp"
2214 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
2215 vc1image_decoder_select="vc1_decoder"
2216 vorbis_decoder_select="mdct"
2217 vorbis_encoder_select="mdct"
2218 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2219 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2220 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2221 vp6a_decoder_select="vp6_decoder"
2222 vp6f_decoder_select="vp6_decoder"
2223 vp7_decoder_select="h264pred videodsp"
2224 vp8_decoder_select="h264pred videodsp"
2225 vp9_decoder_select="videodsp vp9_parser"
2226 webp_decoder_select="vp8_decoder"
2227 wmalossless_decoder_select="llauddsp"
2228 wmapro_decoder_select="mdct sinewin wma_freqs"
2229 wmav1_decoder_select="mdct sinewin wma_freqs"
2230 wmav1_encoder_select="mdct sinewin wma_freqs"
2231 wmav2_decoder_select="mdct sinewin wma_freqs"
2232 wmav2_encoder_select="mdct sinewin wma_freqs"
2233 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2234 wmv1_decoder_select="h263_decoder"
2235 wmv1_encoder_select="h263_encoder"
2236 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
2237 wmv2_encoder_select="h263_encoder"
2238 wmv3_decoder_select="vc1_decoder"
2239 wmv3image_decoder_select="wmv3_decoder"
2240 zerocodec_decoder_select="zlib"
2241 zlib_decoder_select="zlib"
2242 zlib_encoder_select="zlib"
2243 zmbv_decoder_select="zlib"
2244 zmbv_encoder_select="zlib"
2245
2246 # hardware accelerators
2247 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2248 dxva2_deps="dxva2api_h"
2249 vaapi_deps="va_va_h"
2250 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2251 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2252 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2253 xvmc_deps="X11_extensions_XvMClib_h"
2254
2255 h263_vaapi_hwaccel_deps="vaapi"
2256 h263_vaapi_hwaccel_select="h263_decoder"
2257 h263_vdpau_hwaccel_deps="vdpau"
2258 h263_vdpau_hwaccel_select="h263_decoder"
2259 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2260 h264_dxva2_hwaccel_deps="dxva2"
2261 h264_dxva2_hwaccel_select="h264_decoder"
2262 h264_vaapi_hwaccel_deps="vaapi"
2263 h264_vaapi_hwaccel_select="h264_decoder"
2264 h264_vda_decoder_deps="vda"
2265 h264_vda_decoder_select="h264_decoder"
2266 h264_vda_hwaccel_deps="vda"
2267 h264_vda_hwaccel_select="h264_decoder"
2268 h264_vda_old_hwaccel_deps="vda"
2269 h264_vda_old_hwaccel_select="h264_decoder"
2270 h264_vdpau_decoder_deps="vdpau"
2271 h264_vdpau_decoder_select="h264_decoder"
2272 h264_vdpau_hwaccel_deps="vdpau"
2273 h264_vdpau_hwaccel_select="h264_decoder"
2274 mpeg_vdpau_decoder_deps="vdpau"
2275 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2276 mpeg_xvmc_hwaccel_deps="xvmc"
2277 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2278 mpeg1_vdpau_decoder_deps="vdpau"
2279 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2280 mpeg1_vdpau_hwaccel_deps="vdpau"
2281 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2282 mpeg1_xvmc_hwaccel_deps="xvmc"
2283 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2284 mpeg2_crystalhd_decoder_select="crystalhd"
2285 mpeg2_dxva2_hwaccel_deps="dxva2"
2286 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2287 mpeg2_vaapi_hwaccel_deps="vaapi"
2288 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2289 mpeg2_vdpau_hwaccel_deps="vdpau"
2290 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2291 mpeg2_xvmc_hwaccel_deps="xvmc"
2292 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2293 mpeg4_crystalhd_decoder_select="crystalhd"
2294 mpeg4_vaapi_hwaccel_deps="vaapi"
2295 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2296 mpeg4_vdpau_decoder_deps="vdpau"
2297 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2298 mpeg4_vdpau_hwaccel_deps="vdpau"
2299 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2300 msmpeg4_crystalhd_decoder_select="crystalhd"
2301 vc1_crystalhd_decoder_select="crystalhd"
2302 vc1_dxva2_hwaccel_deps="dxva2"
2303 vc1_dxva2_hwaccel_select="vc1_decoder"
2304 vc1_vaapi_hwaccel_deps="vaapi"
2305 vc1_vaapi_hwaccel_select="vc1_decoder"
2306 vc1_vdpau_decoder_deps="vdpau"
2307 vc1_vdpau_decoder_select="vc1_decoder"
2308 vc1_vdpau_hwaccel_deps="vdpau"
2309 vc1_vdpau_hwaccel_select="vc1_decoder"
2310 wmv3_crystalhd_decoder_select="crystalhd"
2311 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2312 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2313 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2314 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2315
2316 # parsers
2317 h264_parser_select="h264_decoder"
2318 hevc_parser_select="hevc_decoder"
2319 mpegvideo_parser_select="mpegvideo"
2320 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2321 vc1_parser_select="mpegvideo startcode vc1_decoder"
2322
2323 # external libraries
2324 libaacplus_encoder_deps="libaacplus"
2325 libcelt_decoder_deps="libcelt"
2326 libfaac_encoder_deps="libfaac"
2327 libfaac_encoder_select="audio_frame_queue"
2328 libfdk_aac_decoder_deps="libfdk_aac"
2329 libfdk_aac_encoder_deps="libfdk_aac"
2330 libfdk_aac_encoder_select="audio_frame_queue"
2331 libgme_demuxer_deps="libgme"
2332 libgsm_decoder_deps="libgsm"
2333 libgsm_encoder_deps="libgsm"
2334 libgsm_ms_decoder_deps="libgsm"
2335 libgsm_ms_encoder_deps="libgsm"
2336 libilbc_decoder_deps="libilbc"
2337 libilbc_encoder_deps="libilbc"
2338 libmodplug_demuxer_deps="libmodplug"
2339 libmp3lame_encoder_deps="libmp3lame"
2340 libmp3lame_encoder_select="audio_frame_queue"
2341 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2342 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2343 libopencore_amrnb_encoder_select="audio_frame_queue"
2344 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2345 libopenjpeg_decoder_deps="libopenjpeg"
2346 libopenjpeg_encoder_deps="libopenjpeg"
2347 libopus_decoder_deps="libopus"
2348 libopus_encoder_deps="libopus"
2349 libopus_encoder_select="audio_frame_queue"
2350 libquvi_demuxer_deps="libquvi"
2351 libschroedinger_decoder_deps="libschroedinger"
2352 libschroedinger_encoder_deps="libschroedinger"
2353 libshine_encoder_deps="libshine"
2354 libshine_encoder_select="audio_frame_queue"
2355 libspeex_decoder_deps="libspeex"
2356 libspeex_encoder_deps="libspeex"
2357 libspeex_encoder_select="audio_frame_queue"
2358 libstagefright_h264_decoder_deps="libstagefright_h264"
2359 libtheora_encoder_deps="libtheora"
2360 libtwolame_encoder_deps="libtwolame"
2361 libvo_aacenc_encoder_deps="libvo_aacenc"
2362 libvo_aacenc_encoder_select="audio_frame_queue"
2363 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2364 libvorbis_decoder_deps="libvorbis"
2365 libvorbis_encoder_deps="libvorbis"
2366 libvorbis_encoder_select="audio_frame_queue"
2367 libvpx_vp8_decoder_deps="libvpx"
2368 libvpx_vp8_encoder_deps="libvpx"
2369 libvpx_vp9_decoder_deps="libvpx"
2370 libvpx_vp9_encoder_deps="libvpx"
2371 libwavpack_encoder_deps="libwavpack"
2372 libwebp_encoder_deps="libwebp"
2373 libx264_encoder_deps="libx264"
2374 libx264rgb_encoder_deps="libx264"
2375 libx265_encoder_deps="libx265"
2376 libxavs_encoder_deps="libxavs"
2377 libxvid_encoder_deps="libxvid"
2378 libutvideo_decoder_deps="libutvideo"
2379 libutvideo_encoder_deps="libutvideo"
2380 libzvbi_teletext_decoder_deps="libzvbi"
2381
2382 # demuxers / muxers
2383 ac3_demuxer_select="ac3_parser"
2384 asf_demuxer_select="riffdec"
2385 asf_muxer_select="riffenc"
2386 asf_stream_muxer_select="asf_muxer"
2387 avi_demuxer_select="riffdec exif"
2388 avi_muxer_select="riffenc"
2389 avisynth_demuxer_deps="avisynth"
2390 avisynth_demuxer_select="riffdec"
2391 caf_demuxer_select="riffdec"
2392 dirac_demuxer_select="dirac_parser"
2393 dts_demuxer_select="dca_parser"
2394 dtshd_demuxer_select="dca_parser"
2395 dv_demuxer_select="dvprofile"
2396 dv_muxer_select="dvprofile"
2397 dxa_demuxer_select="riffdec"
2398 eac3_demuxer_select="ac3_parser"
2399 f4v_muxer_select="mov_muxer"
2400 flac_demuxer_select="flac_parser"
2401 hds_muxer_select="flv_muxer"
2402 hls_muxer_select="mpegts_muxer"
2403 image2_alias_pix_demuxer_select="image2_demuxer"
2404 image2_brender_pix_demuxer_select="image2_demuxer"
2405 ipod_muxer_select="mov_muxer"
2406 ismv_muxer_select="mov_muxer"
2407 libnut_demuxer_deps="libnut"
2408 libnut_muxer_deps="libnut"
2409 matroska_audio_muxer_select="matroska_muxer"
2410 matroska_demuxer_select="riffdec"
2411 matroska_demuxer_suggest="bzlib lzo zlib"
2412 matroska_muxer_select="riffenc"
2413 mmf_muxer_select="riffenc"
2414 mov_demuxer_select="riffdec"
2415 mov_demuxer_suggest="zlib"
2416 mov_muxer_select="riffenc rtpenc_chain ac3_parser"
2417 mp3_demuxer_select="mpegaudio_parser"
2418 mp4_muxer_select="mov_muxer"
2419 mpegts_muxer_select="adts_muxer latm_muxer"
2420 mpegtsraw_demuxer_select="mpegts_demuxer"
2421 mxf_d10_muxer_select="mxf_muxer"
2422 nut_muxer_select="riffenc"
2423 nuv_demuxer_select="riffdec"
2424 oga_muxer_select="ogg_muxer"
2425 ogg_demuxer_select="golomb"
2426 opus_muxer_select="ogg_muxer"
2427 psp_muxer_select="mov_muxer"
2428 rtp_demuxer_select="sdp_demuxer"
2429 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2430 rtsp_demuxer_select="http_protocol rtpdec"
2431 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2432 sap_demuxer_select="sdp_demuxer"
2433 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2434 sdp_demuxer_select="rtpdec"
2435 smoothstreaming_muxer_select="ismv_muxer"
2436 spdif_muxer_select="aac_parser"
2437 spx_muxer_select="ogg_muxer"
2438 tak_demuxer_select="tak_parser"
2439 tg2_muxer_select="mov_muxer"
2440 tgp_muxer_select="mov_muxer"
2441 vobsub_demuxer_select="mpegps_demuxer"
2442 w64_demuxer_select="wav_demuxer"
2443 w64_muxer_select="wav_muxer"
2444 wav_demuxer_select="riffdec"
2445 wav_muxer_select="riffenc"
2446 webm_muxer_select="riffenc"
2447 wtv_demuxer_select="riffdec"
2448 wtv_muxer_select="riffenc"
2449 xmv_demuxer_select="riffdec"
2450 xwma_demuxer_select="riffdec"
2451
2452 # indevs / outdevs
2453 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2454 alsa_outdev_deps="alsa_asoundlib_h"
2455 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2456 avfoundation_indev_select="avfoundation"
2457 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2458 caca_outdev_deps="libcaca"
2459 decklink_outdev_deps="decklink pthreads"
2460 decklink_outdev_extralibs="-lstdc++"
2461 decklink_indev_deps="decklink pthreads"
2462 decklink_indev_extralibs="-lstdc++"
2463 dshow_indev_deps="IBaseFilter"
2464 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2465 dv1394_indev_deps="dv1394"
2466 dv1394_indev_select="dv_demuxer"
2467 fbdev_indev_deps="linux_fb_h"
2468 fbdev_outdev_deps="linux_fb_h"
2469 gdigrab_indev_deps="CreateDIBSection"
2470 gdigrab_indev_extralibs="-lgdi32"
2471 gdigrab_indev_select="bmp_decoder"
2472 iec61883_indev_deps="libiec61883"
2473 jack_indev_deps="jack_jack_h sem_timedwait"
2474 lavfi_indev_deps="avfilter"
2475 libcdio_indev_deps="libcdio"
2476 libdc1394_indev_deps="libdc1394"
2477 libv4l2_indev_deps="libv4l2"
2478 openal_indev_deps="openal"
2479 opengl_outdev_deps="opengl"
2480 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2481 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2482 pulse_indev_deps="libpulse"
2483 pulse_outdev_deps="libpulse"
2484 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2485 qtkit_indev_select="qtkit"
2486 sdl_outdev_deps="sdl"
2487 sndio_indev_deps="sndio_h"
2488 sndio_outdev_deps="sndio_h"
2489 v4l_indev_deps="linux_videodev_h"
2490 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2491 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2492 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2493 vfwcap_indev_extralibs="-lavicap32"
2494 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2495 xv_outdev_extralibs="-lXv -lX11 -lXext"
2496 x11grab_indev_deps="x11grab"
2497
2498 # protocols
2499 bluray_protocol_deps="libbluray"
2500 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2501 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2502 ffrtmpcrypt_protocol_select="tcp_protocol"
2503 ffrtmphttp_protocol_deps="!librtmp_protocol"
2504 ffrtmphttp_protocol_select="http_protocol"
2505 ftp_protocol_select="tcp_protocol"
2506 gopher_protocol_select="network"
2507 http_protocol_select="tcp_protocol"
2508 httpproxy_protocol_select="tcp_protocol"
2509 https_protocol_select="tls_protocol"
2510 icecast_protocol_select="http_protocol"
2511 librtmp_protocol_deps="librtmp"
2512 librtmpe_protocol_deps="librtmp"
2513 librtmps_protocol_deps="librtmp"
2514 librtmpt_protocol_deps="librtmp"
2515 librtmpte_protocol_deps="librtmp"
2516 libsmbclient_protocol_deps="libsmbclient gplv3"
2517 libssh_protocol_deps="libssh"
2518 mmsh_protocol_select="http_protocol"
2519 mmst_protocol_select="network"
2520 rtmp_protocol_deps="!librtmp_protocol"
2521 rtmp_protocol_select="tcp_protocol"
2522 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2523 rtmps_protocol_deps="!librtmp_protocol"
2524 rtmps_protocol_select="tls_protocol"
2525 rtmpt_protocol_select="ffrtmphttp_protocol"
2526 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2527 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2528 rtp_protocol_select="udp_protocol"
2529 sctp_protocol_deps="struct_sctp_event_subscribe"
2530 sctp_protocol_select="network"
2531 srtp_protocol_select="rtp_protocol"
2532 tcp_protocol_select="network"
2533 tls_protocol_deps_any="openssl gnutls"
2534 tls_protocol_select="tcp_protocol"
2535 udp_protocol_select="network"
2536 unix_protocol_deps="sys_un_h"
2537 unix_protocol_select="network"
2538
2539 # filters
2540 amovie_filter_deps="avcodec avformat"
2541 aresample_filter_deps="swresample"
2542 ass_filter_deps="libass"
2543 asyncts_filter_deps="avresample"
2544 atempo_filter_deps="avcodec"
2545 atempo_filter_select="rdft"
2546 azmq_filter_deps="libzmq"
2547 blackframe_filter_deps="gpl"
2548 boxblur_filter_deps="gpl"
2549 bs2b_filter_deps="libbs2b"
2550 colormatrix_filter_deps="gpl"
2551 cropdetect_filter_deps="gpl"
2552 delogo_filter_deps="gpl"
2553 deshake_filter_select="pixelutils"
2554 drawtext_filter_deps="libfreetype"
2555 ebur128_filter_deps="gpl"
2556 flite_filter_deps="libflite"
2557 frei0r_filter_deps="frei0r dlopen"
2558 frei0r_filter_extralibs='$ldl'
2559 frei0r_src_filter_deps="frei0r dlopen"
2560 frei0r_src_filter_extralibs='$ldl'
2561 geq_filter_deps="gpl"
2562 histeq_filter_deps="gpl"
2563 hqdn3d_filter_deps="gpl"
2564 interlace_filter_deps="gpl"
2565 kerndeint_filter_deps="gpl"
2566 ladspa_filter_deps="ladspa dlopen"
2567 ladspa_filter_extralibs='$ldl'
2568 mcdeint_filter_deps="avcodec gpl"
2569 movie_filter_deps="avcodec avformat"
2570 mp_filter_deps="gpl avcodec swscale inline_asm"
2571 mpdecimate_filter_deps="gpl"
2572 mpdecimate_filter_select="pixelutils"
2573 mptestsrc_filter_deps="gpl"
2574 negate_filter_deps="lut_filter"
2575 perspective_filter_deps="gpl"
2576 ocv_filter_deps="libopencv"
2577 owdenoise_filter_deps="gpl"
2578 pan_filter_deps="swresample"
2579 phase_filter_deps="gpl"
2580 pp_filter_deps="gpl postproc"
2581 pullup_filter_deps="gpl"
2582 removelogo_filter_deps="avcodec avformat swscale"
2583 resample_filter_deps="avresample"
2584 sab_filter_deps="gpl swscale"
2585 scale_filter_deps="swscale"
2586 select_filter_select="pixelutils"
2587 smartblur_filter_deps="gpl swscale"
2588 showspectrum_filter_deps="avcodec"
2589 showspectrum_filter_select="rdft"
2590 spp_filter_deps="gpl avcodec"
2591 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2592 stereo3d_filter_deps="gpl"
2593 subtitles_filter_deps="avformat avcodec libass"
2594 super2xsai_filter_deps="gpl"
2595 tinterlace_filter_deps="gpl"
2596 vidstabdetect_filter_deps="libvidstab"
2597 vidstabtransform_filter_deps="libvidstab"
2598 pixfmts_super2xsai_test_deps="super2xsai_filter"
2599 tinterlace_merge_test_deps="tinterlace_filter"
2600 tinterlace_pad_test_deps="tinterlace_filter"
2601 zmq_filter_deps="libzmq"
2602 zoompan_filter_deps="swscale"
2603
2604 # examples
2605 avio_reading="avformat avcodec avutil"
2606 avcodec_example_deps="avcodec avutil"
2607 decoding_encoding_example_deps="avcodec avformat avutil"
2608 demuxing_decoding_example_deps="avcodec avformat avutil"
2609 extract_mvs_example_deps="avcodec avformat avutil"
2610 filter_audio_example_deps="avfilter avutil"
2611 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2612 filtering_video_example_deps="avfilter avcodec avformat avutil"
2613 metadata_example_deps="avformat avutil"
2614 muxing_example_deps="avcodec avformat avutil swscale"
2615 remuxing_example_deps="avcodec avformat avutil"
2616 resampling_audio_example_deps="avutil swresample"
2617 scaling_video_example_deps="avutil swscale"
2618 transcode_aac_example_deps="avcodec avformat swresample"
2619 transcoding_example_deps="avfilter avcodec avformat avutil"
2620
2621 # libraries, in linking order
2622 avcodec_deps="avutil"
2623 avdevice_deps="avformat avcodec avutil"
2624 avfilter_deps="avutil"
2625 avformat_deps="avcodec avutil"
2626 avresample_deps="avutil"
2627 postproc_deps="avutil gpl"
2628 swresample_deps="avutil"
2629 swscale_deps="avutil"
2630
2631 # programs
2632 ffmpeg_deps="avcodec avfilter avformat swresample"
2633 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2634                null_filter
2635                setpts_filter trim_filter"
2636 ffplay_deps="avcodec avformat swscale swresample sdl"
2637 ffplay_libs='$sdl_libs'
2638 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2639 ffprobe_deps="avcodec avformat"
2640 ffserver_deps="avformat fork sarestart"
2641 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2642
2643 # documentation
2644 podpages_deps="perl"
2645 manpages_deps="perl pod2man"
2646 htmlpages_deps="perl"
2647 htmlpages_deps_any="makeinfo_html texi2html"
2648 txtpages_deps="perl makeinfo"
2649 doc_deps_any="manpages htmlpages podpages txtpages"
2650
2651 # default parameters
2652
2653 logfile="config.log"
2654
2655 # installation paths
2656 prefix_default="/usr/local"
2657 bindir_default='${prefix}/bin'
2658 datadir_default='${prefix}/share/ffmpeg'
2659 docdir_default='${prefix}/share/doc/ffmpeg'
2660 incdir_default='${prefix}/include'
2661 libdir_default='${prefix}/lib'
2662 mandir_default='${prefix}/share/man'
2663 shlibdir_default="$libdir_default"
2664
2665 # toolchain
2666 ar_default="ar"
2667 cc_default="gcc"
2668 cxx_default="g++"
2669 host_cc_default="gcc"
2670 cp_f="cp -f"
2671 doxygen_default="doxygen"
2672 install="install"
2673 ln_s="ln -s -f"
2674 nm_default="nm -g"
2675 objformat="elf"
2676 pkg_config_default=pkg-config
2677 ranlib_default="ranlib"
2678 strip_default="strip"
2679 yasmexe_default="yasm"
2680 windres_default="windres"
2681
2682 # OS
2683 target_os_default=$(tolower $(uname -s))
2684 host_os=$target_os_default
2685
2686 # machine
2687 if test "$target_os_default" = aix; then
2688     arch_default=$(uname -p)
2689     strip_default="strip -X32_64"
2690 else
2691     arch_default=$(uname -m)
2692 fi
2693 cpu="generic"
2694 intrinsics="none"
2695
2696 # configurable options
2697 enable $PROGRAM_LIST
2698 enable $DOCUMENT_LIST
2699 enable $EXAMPLE_LIST
2700 enable $(filter_out avresample $LIBRARY_LIST)
2701 enable stripping
2702
2703 enable asm
2704 enable debug
2705 enable doc
2706 enable faan faandct faanidct
2707 enable optimizations
2708 enable runtime_cpudetect
2709 enable safe_bitstream_reader
2710 enable static
2711 enable swscale_alpha
2712
2713 sws_max_filter_size_default=256
2714 set_default sws_max_filter_size
2715
2716 # Enable hwaccels by default.
2717 enable dxva2 vaapi vda vdpau xvmc
2718 enable xlib
2719
2720 # build settings
2721 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2722 LIBPREF="lib"
2723 LIBSUF=".a"
2724 FULLNAME='$(NAME)$(BUILDSUF)'
2725 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2726 SLIBPREF="lib"
2727 SLIBSUF=".so"
2728 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2729 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2730 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2731 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2732 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2733 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2734
2735 asflags_filter=echo
2736 cflags_filter=echo
2737 ldflags_filter=echo
2738
2739 AS_C='-c'
2740 AS_O='-o $@'
2741 CC_C='-c'
2742 CC_E='-E -o $@'
2743 CC_O='-o $@'
2744 CXX_C='-c'
2745 CXX_O='-o $@'
2746 LD_O='-o $@'
2747 LD_LIB='-l%'
2748 LD_PATH='-L'
2749 HOSTCC_C='-c'
2750 HOSTCC_E='-E -o $@'
2751 HOSTCC_O='-o $@'
2752 HOSTLD_O='-o $@'
2753
2754 host_libs='-lm'
2755 host_cflags_filter=echo
2756 host_ldflags_filter=echo
2757
2758 target_path='$(CURDIR)'
2759
2760 # since the object filename is not given with the -MM flag, the compiler
2761 # is only able to print the basename, and we must add the path ourselves
2762 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2763 DEPFLAGS='-MM'
2764
2765 # find source path
2766 if test -f configure; then
2767     source_path=.
2768 else
2769     source_path=$(cd $(dirname "$0"); pwd)
2770     echo "$source_path" | grep -q '[[:blank:]]' &&
2771         die "Out of tree builds are impossible with whitespace in source path."
2772     test -e "$source_path/config.h" &&
2773         die "Out of tree builds are impossible with config.h in source dir."
2774 fi
2775
2776 for v in "$@"; do
2777     r=${v#*=}
2778     l=${v%"$r"}
2779     r=$(sh_quote "$r")
2780     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2781 done
2782
2783 find_things(){
2784     thing=$1
2785     pattern=$2
2786     file=$source_path/$3
2787     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2788 }
2789
2790 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2791 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2792 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2793 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2794 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2795 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2796 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2797 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2798 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2799 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2800 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2801
2802 ALL_COMPONENTS="
2803     $BSF_LIST
2804     $DECODER_LIST
2805     $DEMUXER_LIST
2806     $ENCODER_LIST
2807     $FILTER_LIST
2808     $HWACCEL_LIST
2809     $INDEV_LIST
2810     $MUXER_LIST
2811     $OUTDEV_LIST
2812     $PARSER_LIST
2813     $PROTOCOL_LIST
2814 "
2815
2816 for n in $COMPONENT_LIST; do
2817     v=$(toupper ${n%s})_LIST
2818     eval enable \$$v
2819     eval ${n}_if_any="\$$v"
2820 done
2821
2822 enable $ARCH_EXT_LIST
2823
2824 die_unknown(){
2825     echo "Unknown option \"$1\"."
2826     echo "See $0 --help for available options."
2827     exit 1
2828 }
2829
2830 print_3_columns() {
2831     cat | tr ' ' '\n' | sort | pr -r -3 -t
2832 }
2833
2834 show_list() {
2835     suffix=_$1
2836     shift
2837     echo $* | sed s/$suffix//g | print_3_columns
2838     exit 0
2839 }
2840
2841 rand_list(){
2842     IFS=', '
2843     set -- $*
2844     unset IFS
2845     for thing; do
2846         comp=${thing%:*}
2847         prob=${thing#$comp}
2848         prob=${prob#:}
2849         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2850         echo "prob ${prob:-0.5}"
2851         printf '%s\n' $comp
2852     done
2853 }
2854
2855 do_random(){
2856     action=$1
2857     shift
2858     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2859     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2860 }
2861
2862 for opt do
2863     optval="${opt#*=}"
2864     case "$opt" in
2865         --extra-ldflags=*)
2866             add_ldflags $optval
2867         ;;
2868         --extra-ldexeflags=*)
2869             add_ldexeflags $optval
2870         ;;
2871         --extra-libs=*)
2872             add_extralibs $optval
2873         ;;
2874         --disable-devices)
2875             disable $INDEV_LIST $OUTDEV_LIST
2876         ;;
2877         --enable-debug=*)
2878             debuglevel="$optval"
2879         ;;
2880         --disable-programs)
2881             disable $PROGRAM_LIST
2882         ;;
2883         --disable-everything)
2884             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2885         ;;
2886         --disable-all)
2887             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2888             disable $LIBRARY_LIST $PROGRAM_LIST doc
2889         ;;
2890         --enable-random|--disable-random)
2891             action=${opt%%-random}
2892             do_random ${action#--} $COMPONENT_LIST
2893         ;;
2894         --enable-random=*|--disable-random=*)
2895             action=${opt%%-random=*}
2896             do_random ${action#--} $optval
2897         ;;
2898         --enable-*=*|--disable-*=*)
2899             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2900             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2901             eval list=\$$(toupper $thing)_LIST
2902             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2903             list=$(filter "$name" $list)
2904             [ "$list" = "" ] && warn "Option $opt did not match anything"
2905             $action $list
2906         ;;
2907         --enable-?*|--disable-?*)
2908             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2909             if is_in $option $COMPONENT_LIST; then
2910                 test $action = disable && action=unset
2911                 eval $action \$$(toupper ${option%s})_LIST
2912             elif is_in $option $CMDLINE_SELECT; then
2913                 $action $option
2914             else
2915                 die_unknown $opt
2916             fi
2917         ;;
2918         --list-*)
2919             NAME="${opt#--list-}"
2920             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2921             NAME=${NAME%s}
2922             eval show_list $NAME \$$(toupper $NAME)_LIST
2923         ;;
2924         --help|-h) show_help
2925         ;;
2926         --fatal-warnings) enable fatal_warnings
2927         ;;
2928         *)
2929             optname="${opt%%=*}"
2930             optname="${optname#--}"
2931             optname=$(echo "$optname" | sed 's/-/_/g')
2932             if is_in $optname $CMDLINE_SET; then
2933                 eval $optname='$optval'
2934             elif is_in $optname $CMDLINE_APPEND; then
2935                 append $optname "$optval"
2936             else
2937                 die_unknown $opt
2938             fi
2939         ;;
2940     esac
2941 done
2942
2943 disabled logging && logfile=/dev/null
2944
2945 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2946 set >> $logfile
2947
2948 test -n "$cross_prefix" && enable cross_compile
2949
2950 if enabled cross_compile; then
2951     test -n "$arch" && test -n "$target_os" ||
2952         die "Must specify target arch and OS when cross-compiling"
2953 fi
2954
2955 ar_default="${cross_prefix}${ar_default}"
2956 cc_default="${cross_prefix}${cc_default}"
2957 cxx_default="${cross_prefix}${cxx_default}"
2958 nm_default="${cross_prefix}${nm_default}"
2959 pkg_config_default="${cross_prefix}${pkg_config_default}"
2960 ranlib_default="${cross_prefix}${ranlib_default}"
2961 strip_default="${cross_prefix}${strip_default}"
2962 windres_default="${cross_prefix}${windres_default}"
2963
2964 sysinclude_default="${sysroot}/usr/include"
2965
2966 test -n "$valgrind" && toolchain="valgrind-memcheck"
2967
2968 case "$toolchain" in
2969     clang-asan)
2970         cc_default="clang"
2971         add_cflags  -fsanitize=address
2972         add_ldflags -fsanitize=address
2973     ;;
2974     clang-tsan)
2975         cc_default="clang"
2976         add_cflags  -fsanitize=thread -pie
2977         add_ldflags -fsanitize=thread -pie
2978     ;;
2979     clang-usan)
2980         cc_default="clang"
2981         add_cflags  -fsanitize=undefined
2982         add_ldflags -fsanitize=undefined
2983     ;;
2984     gcc-asan)
2985         cc_default="gcc"
2986         add_cflags  -fsanitize=address
2987         add_ldflags -fsanitize=address
2988     ;;
2989     gcc-tsan)
2990         cc_default="gcc"
2991         add_cflags  -fsanitize=thread -pie -fPIC
2992         add_ldflags -fsanitize=thread -pie -fPIC
2993     ;;
2994     gcc-usan)
2995         cc_default="gcc"
2996         add_cflags  -fsanitize=undefined
2997         add_ldflags -fsanitize=undefined
2998     ;;
2999     valgrind-massif)
3000         target_exec_default=${valgrind:-"valgrind"}
3001         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"
3002     ;;
3003     valgrind-memcheck)
3004         target_exec_default=${valgrind:-"valgrind"}
3005         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"
3006     ;;
3007     msvc)
3008         # Check whether the current MSVC version needs the C99 converter.
3009         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3010         # support enough of C99 to build ffmpeg. Default to the new
3011         # behaviour if the regexp was unable to match anything, since this
3012         # successfully parses the version number of existing supported
3013         # versions that require the converter (MSVC 2010 and 2012).
3014         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3015         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3016             cc_default="cl"
3017         else
3018             cc_default="c99wrap cl"
3019         fi
3020         ld_default="link"
3021         nm_default="dumpbin -symbols"
3022         ar_default="lib"
3023         target_os_default="win32"
3024         # Use a relative path for TMPDIR. This makes sure all the
3025         # ffconf temp files are written with a relative path, avoiding
3026         # issues with msys/win32 path conversion for MSVC parameters
3027         # such as -Fo<file> or -out:<file>.
3028         TMPDIR=.
3029     ;;
3030     icl)
3031         cc_default="icl"
3032         ld_default="xilink"
3033         nm_default="dumpbin -symbols"
3034         ar_default="xilib"
3035         target_os_default="win32"
3036         TMPDIR=.
3037     ;;
3038     gcov)
3039         add_cflags  -fprofile-arcs -ftest-coverage
3040         add_ldflags -fprofile-arcs -ftest-coverage
3041     ;;
3042     hardened)
3043         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3044         add_cflags   -fno-strict-overflow -fstack-protector-all
3045         add_ldflags  -Wl,-z,relro -Wl,-z,now
3046     ;;
3047     ?*)
3048         die "Unknown toolchain $toolchain"
3049     ;;
3050 esac
3051
3052 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3053     target_exec target_os yasmexe
3054 enabled cross_compile || host_cc_default=$cc
3055 set_default host_cc
3056
3057 if ! $pkg_config --version >/dev/null 2>&1; then
3058     warn "$pkg_config not found, library detection may fail."
3059     pkg_config=false
3060 fi
3061
3062 if test $doxygen != $doxygen_default && \
3063   ! $doxygen --version >/dev/null 2>&1; then
3064     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3065 fi
3066
3067 exesuf() {
3068     case $1 in
3069         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3070     esac
3071 }
3072
3073 EXESUF=$(exesuf $target_os)
3074 HOSTEXESUF=$(exesuf $host_os)
3075
3076 # set temporary file name
3077 : ${TMPDIR:=$TEMPDIR}
3078 : ${TMPDIR:=$TMP}
3079 : ${TMPDIR:=/tmp}
3080
3081 if [ -n "$tempprefix" ] ; then
3082     mktemp(){
3083         echo $tempprefix.${HOSTNAME}.${UID}
3084     }
3085 elif ! check_cmd mktemp -u XXXXXX; then
3086     # simple replacement for missing mktemp
3087     # NOT SAFE FOR GENERAL USE
3088     mktemp(){
3089         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3090     }
3091 fi
3092
3093 tmpfile(){
3094     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3095         (set -C; exec > $tmp) 2>/dev/null ||
3096         die "Unable to create temporary file in $TMPDIR."
3097     append TMPFILES $tmp
3098     eval $1=$tmp
3099 }
3100
3101 trap 'rm -f -- $TMPFILES' EXIT
3102
3103 tmpfile TMPASM .asm
3104 tmpfile TMPC   .c
3105 tmpfile TMPCPP .cpp
3106 tmpfile TMPE   $EXESUF
3107 tmpfile TMPH   .h
3108 tmpfile TMPM   .m
3109 tmpfile TMPO   .o
3110 tmpfile TMPS   .S
3111 tmpfile TMPSH  .sh
3112 tmpfile TMPV   .ver
3113
3114 unset -f mktemp
3115
3116 chmod +x $TMPE
3117
3118 # make sure we can execute files in $TMPDIR
3119 cat > $TMPSH 2>> $logfile <<EOF
3120 #! /bin/sh
3121 EOF
3122 chmod +x $TMPSH >> $logfile 2>&1
3123 if ! $TMPSH >> $logfile 2>&1; then
3124     cat <<EOF
3125 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3126 variable to another directory and make sure that it is not mounted noexec.
3127 EOF
3128     die "Sanity test failed."
3129 fi
3130
3131 armasm_flags(){
3132     for flag; do
3133         case $flag in
3134             # Filter out MSVC cl.exe options from cflags that shouldn't
3135             # be passed to gas-preprocessor
3136             -M[TD]*)                                            ;;
3137             *)                  echo $flag                      ;;
3138         esac
3139    done
3140 }
3141
3142 ccc_flags(){
3143     for flag; do
3144         case $flag in
3145             -std=c99)           echo -c99                       ;;
3146             -mcpu=*)            echo -arch ${flag#*=}           ;;
3147             -mieee)             echo -ieee                      ;;
3148             -O*|-fast)          echo $flag                      ;;
3149             -fno-math-errno)    echo -assume nomath_errno       ;;
3150             -g)                 echo -g3                        ;;
3151             -Wall)              echo -msg_enable level2         ;;
3152             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3153             -Wl,*)              echo $flag                      ;;
3154             -f*|-W*)                                            ;;
3155             *)                  echo $flag                      ;;
3156         esac
3157    done
3158 }
3159
3160 cparser_flags(){
3161     for flag; do
3162         case $flag in
3163             -Wno-switch)             echo -Wno-switch-enum ;;
3164             -Wno-format-zero-length) ;;
3165             -Wdisabled-optimization) ;;
3166             -Wno-pointer-sign)       echo -Wno-other ;;
3167             *)                       echo $flag ;;
3168         esac
3169     done
3170 }
3171
3172 msvc_common_flags(){
3173     for flag; do
3174         case $flag in
3175             # In addition to specifying certain flags under the compiler
3176             # specific filters, they must be specified here as well or else the
3177             # generic catch all at the bottom will print the original flag.
3178             -Wall)                ;;
3179             -std=c99)             ;;
3180             # Common flags
3181             -fomit-frame-pointer) ;;
3182             -g)                   echo -Z7 ;;
3183             -fno-math-errno)      ;;
3184             -fno-common)          ;;
3185             -fno-signed-zeros)    ;;
3186             -fPIC)                ;;
3187             -mthumb)              ;;
3188             -march=*)             ;;
3189             -lz)                  echo zlib.lib ;;
3190             -lavifil32)           echo vfw32.lib ;;
3191             -lavicap32)           echo vfw32.lib user32.lib ;;
3192             -l*)                  echo ${flag#-l}.lib ;;
3193             *)                    echo $flag ;;
3194         esac
3195     done
3196 }
3197
3198 msvc_flags(){
3199     msvc_common_flags "$@"
3200     for flag; do
3201         case $flag in
3202             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3203                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3204                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3205                                        -wd4554 \
3206                                        -wd4273 -wd4701 ;;
3207         esac
3208     done
3209 }
3210
3211 icl_flags(){
3212     msvc_common_flags "$@"
3213     for flag; do
3214         case $flag in
3215             # Despite what Intel's documentation says -Wall, which is supported
3216             # on Windows, does enable remarks so disable them here.
3217             -Wall)                echo $flag -Qdiag-disable:remark ;;
3218             -std=c99)             echo -Qstd=c99 ;;
3219             -flto)                echo -ipo ;;
3220         esac
3221     done
3222 }
3223
3224 icc_flags(){
3225     for flag; do
3226         case $flag in
3227             -flto)                echo -ipo ;;
3228             *)                    echo $flag ;;
3229         esac
3230     done
3231 }
3232
3233 pgi_flags(){
3234     for flag; do
3235         case $flag in
3236             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3237             -fomit-frame-pointer) echo -Mnoframe ;;
3238             -g)                   echo -gopt ;;
3239             *)                    echo $flag ;;
3240         esac
3241     done
3242 }
3243
3244 suncc_flags(){
3245     for flag; do
3246         case $flag in
3247             -march=*|-mcpu=*)
3248                 case "${flag#*=}" in
3249                     native)                   echo -xtarget=native       ;;
3250                     v9|niagara)               echo -xarch=sparc          ;;
3251                     ultrasparc)               echo -xarch=sparcvis       ;;
3252                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3253                     i586|pentium)             echo -xchip=pentium        ;;
3254                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3255                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3256                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3257                     pentium4*)          echo -xtarget=pentium4           ;;
3258                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3259                     *-sse3)             echo -xarch=sse3                 ;;
3260                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3261                     bonnell)                   echo -xarch=ssse3         ;;
3262                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3263                     westmere)                  echo -xtarget=westmere    ;;
3264                     silvermont)                echo -xarch=sse4_2        ;;
3265                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3266                     core-avx*|ivybridge|haswell|broadwell)
3267                                                echo -xarch=avx           ;;
3268                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3269                     btver1)                    echo -xarch=amdsse4a      ;;
3270                     btver2|bdver*)             echo -xarch=avx           ;;
3271                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3272                     k8|opteron|athlon64|athlon-fx)
3273                                                echo -xarch=sse2a         ;;
3274                     athlon*)                   echo -xarch=pentium_proa  ;;
3275                 esac
3276                 ;;
3277             -std=c99)             echo -xc99              ;;
3278             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3279             -fPIC)                echo -KPIC -xcode=pic32 ;;
3280             -W*,*)                echo $flag              ;;
3281             -f*-*|-W*|-mimpure-text)                      ;;
3282             -shared)              echo -G                 ;;
3283             *)                    echo $flag              ;;
3284         esac
3285     done
3286 }
3287
3288 tms470_flags(){
3289     for flag; do
3290         case $flag in
3291             -march=*|-mcpu=*)
3292                 case "${flag#*=}" in
3293                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3294                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3295                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3296                     armv6*|arm11*)          echo -mv=6   ;;
3297                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3298                                             echo -mv=5e  ;;
3299                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3300                 esac
3301                 ;;
3302             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3303             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3304             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3305             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3306             -msoft-float)   echo --float_support=vfplib       ;;
3307             -O[0-3]|-mf=*)  echo $flag                        ;;
3308             -g)             echo -g -mn                       ;;
3309             -pds=*)         echo $flag                        ;;
3310             -D*|-I*)        echo $flag                        ;;
3311             --gcc|--abi=*)  echo $flag                        ;;
3312             -me)            echo $flag                        ;;
3313         esac
3314     done
3315 }
3316
3317 probe_cc(){
3318     pfx=$1
3319     _cc=$2
3320
3321     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3322     unset _ld_o _ldflags _ld_lib _ld_path
3323     unset _depflags _DEPCMD _DEPFLAGS
3324     _flags_filter=echo
3325
3326     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3327         true # no-op to avoid reading stdin in following checks
3328     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3329         _type=llvm_gcc
3330         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3331         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3332         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3333         _cflags_speed='-O3'
3334         _cflags_size='-Os'
3335     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3336         _type=gcc
3337         gcc_version=$($_cc --version | head -n1)
3338         gcc_basever=$($_cc -dumpversion)
3339         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3340         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3341         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3342         if ! $_cc -dumpversion | grep -q '^2\.'; then
3343             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3344         fi
3345         _cflags_speed='-O3'
3346         _cflags_size='-Os'
3347     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3348         _type=icc
3349         _ident=$($_cc --version | head -n1)
3350         _depflags='-MMD'
3351         _cflags_speed='-O3'
3352         _cflags_size='-Os'
3353         _cflags_noopt='-O1'
3354         _flags_filter=icc_flags
3355     elif $_cc -v 2>&1 | grep -q xlc; then
3356         _type=xlc
3357         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3358         _cflags_speed='-O5'
3359         _cflags_size='-O5 -qcompact'
3360     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3361         _type=ccc
3362         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3363         _DEPFLAGS='-M'
3364         _cflags_speed='-fast'
3365         _cflags_size='-O1'
3366         _flags_filter=ccc_flags
3367     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3368         test -d "$sysroot" || die "No valid sysroot specified."
3369         _type=armcc
3370         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3371         armcc_conf="$PWD/armcc.conf"
3372         $_cc --arm_linux_configure                 \
3373              --arm_linux_config_file="$armcc_conf" \
3374              --configure_sysroot="$sysroot"        \
3375              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3376              die "Error creating armcc configuration file."
3377         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3378         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3379         as_default="${cross_prefix}gcc"
3380         _depflags='-MMD'
3381         _cflags_speed='-O3'
3382         _cflags_size='-Os'
3383     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3384         _type=tms470
3385         _ident=$($_cc -version | head -n1 | tr -s ' ')
3386         _flags='--gcc --abi=eabi -me'
3387         _cc_e='-ppl -fe=$@'
3388         _cc_o='-fe=$@'
3389         _depflags='-ppa -ppd=$(@:.o=.d)'
3390         _cflags_speed='-O3 -mf=5'
3391         _cflags_size='-O3 -mf=2'
3392         _flags_filter=tms470_flags
3393     elif $_cc -v 2>&1 | grep -q clang; then
3394         _type=clang
3395         _ident=$($_cc --version | head -n1)
3396         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3397         _cflags_speed='-O3'
3398         _cflags_size='-Os'
3399     elif $_cc -V 2>&1 | grep -q Sun; then
3400         _type=suncc
3401         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3402         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3403         _DEPFLAGS='-xM1 -xc99'
3404         _ldflags='-std=c99'
3405         _cflags_speed='-O5'
3406         _cflags_size='-O5 -xspace'
3407         _flags_filter=suncc_flags
3408     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3409         _type=pathscale
3410         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3411         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3412         _cflags_speed='-O2'
3413         _cflags_size='-Os'
3414         _flags_filter='filter_out -Wdisabled-optimization'
3415     elif $_cc -v 2>&1 | grep -q Open64; then
3416         _type=open64
3417         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3418         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3419         _cflags_speed='-O2'
3420         _cflags_size='-Os'
3421         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3422     elif $_cc -V 2>&1 | grep -q Portland; then
3423         _type=pgi
3424         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3425         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3426         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3427         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3428         _cflags_noopt="-O"
3429         _flags_filter=pgi_flags
3430     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3431         _type=armasm
3432         _ident=$($_cc | head -n1)
3433         # 4509: "This form of conditional instruction is deprecated"
3434         _flags="-nologo -ignore 4509"
3435         _flags_filter=armasm_flags
3436     elif $_cc 2>&1 | grep -q Microsoft; then
3437         _type=msvc
3438         _ident=$($cc 2>&1 | head -n1)
3439         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3440         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3441         _cflags_speed="-O2"
3442         _cflags_size="-O1"
3443         if $_cc 2>&1 | grep -q Linker; then
3444             _ld_o='-out:$@'
3445         else
3446             _ld_o='-Fe$@'
3447         fi
3448         _cc_o='-Fo$@'
3449         _cc_e='-P -Fi$@'
3450         _flags_filter=msvc_flags
3451         _ld_lib='lib%.a'
3452         _ld_path='-libpath:'
3453         _flags='-nologo'
3454         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3455         if [ $pfx = hostcc ]; then
3456             append _cflags -Dsnprintf=_snprintf
3457         fi
3458         disable stripping
3459     elif $_cc 2>&1 | grep -q Intel; then
3460         _type=icl
3461         _ident=$($cc 2>&1 | head -n1)
3462         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3463         # Not only is O3 broken on 13.x+ but it is slower on all previous
3464         # versions (tested) as well.
3465         _cflags_speed="-O2"
3466         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3467         if $_cc 2>&1 | grep -q Linker; then
3468             _ld_o='-out:$@'
3469         else
3470             _ld_o='-Fe$@'
3471         fi
3472         _cc_o='-Fo$@'
3473         _cc_e='-P'
3474         _flags_filter=icl_flags
3475         _ld_lib='lib%.a'
3476         _ld_path='-libpath:'
3477         # -Qdiag-error to make icl error when seeing certain unknown arguments
3478         _flags='-nologo -Qdiag-error:4044,10157'
3479         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3480         # with MSVC which enables it by default.
3481         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3482         if [ $pfx = hostcc ]; then
3483             append _cflags -Dsnprintf=_snprintf
3484         fi
3485     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3486         _type=cparser
3487         _ident=$($_cc --version | head -n1)
3488         _depflags='-MMD'
3489         _cflags_speed='-O4'
3490         _cflags_size='-O2'
3491         _flags_filter=cparser_flags
3492     fi
3493
3494     eval ${pfx}_type=\$_type
3495     eval ${pfx}_ident=\$_ident
3496 }
3497
3498 set_ccvars(){
3499     eval ${1}_C=\${_cc_c-\${${1}_C}}
3500     eval ${1}_E=\${_cc_e-\${${1}_E}}
3501     eval ${1}_O=\${_cc_o-\${${1}_O}}
3502
3503     if [ -n "$_depflags" ]; then
3504         eval ${1}_DEPFLAGS=\$_depflags
3505     else
3506         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3507         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3508         eval DEP${1}FLAGS=\$_flags
3509     fi
3510 }
3511
3512 probe_cc cc "$cc"
3513 cflags_filter=$_flags_filter
3514 cflags_speed=$_cflags_speed
3515 cflags_size=$_cflags_size
3516 cflags_noopt=$_cflags_noopt
3517 add_cflags $_flags $_cflags
3518 cc_ldflags=$_ldflags
3519 set_ccvars CC
3520
3521 probe_cc hostcc "$host_cc"
3522 host_cflags_filter=$_flags_filter
3523 add_host_cflags  $_flags $_cflags
3524 set_ccvars HOSTCC
3525
3526 test -n "$cc_type" && enable $cc_type ||
3527     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3528
3529 : ${as_default:=$cc}
3530 : ${dep_cc_default:=$cc}
3531 : ${ld_default:=$cc}
3532 : ${host_ld_default:=$host_cc}
3533 set_default ar as dep_cc ld host_ld windres
3534
3535 probe_cc as "$as"
3536 asflags_filter=$_flags_filter
3537 add_asflags $_flags $_cflags
3538 set_ccvars AS
3539
3540 probe_cc ld "$ld"
3541 ldflags_filter=$_flags_filter
3542 add_ldflags $_flags $_ldflags
3543 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3544 LD_O=${_ld_o-$LD_O}
3545 LD_LIB=${_ld_lib-$LD_LIB}
3546 LD_PATH=${_ld_path-$LD_PATH}
3547
3548 probe_cc hostld "$host_ld"
3549 host_ldflags_filter=$_flags_filter
3550 add_host_ldflags $_flags $_ldflags
3551 HOSTLD_O=${_ld_o-$HOSTLD_O}
3552
3553 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3554     probe_cc depcc "$dep_cc"
3555     CCDEP=${_DEPCMD:-$DEPCMD}
3556     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3557     DEPCCFLAGS=$_flags
3558 fi
3559
3560 if $ar 2>&1 | grep -q Microsoft; then
3561     arflags="-nologo"
3562     ar_o='-out:$@'
3563 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3564     arflags="rq"
3565     ar_o='$@'
3566 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3567     arflags='-Xany -r -c'
3568     ar_o='$@'
3569 else
3570     arflags="rc"
3571     ar_o='$@'
3572 fi
3573
3574 add_cflags $extra_cflags
3575 add_cxxflags $extra_cxxflags
3576 add_asflags $extra_cflags
3577
3578 if test -n "$sysroot"; then
3579     case "$cc_type" in
3580         gcc|llvm_gcc|clang)
3581             add_cppflags --sysroot="$sysroot"
3582             add_ldflags --sysroot="$sysroot"
3583 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3584             add_cppflags -isysroot "$sysroot"
3585             add_ldflags -isysroot "$sysroot"
3586         ;;
3587         tms470)
3588             add_cppflags -I"$sysinclude"
3589             add_ldflags  --sysroot="$sysroot"
3590         ;;
3591     esac
3592 fi
3593
3594 if test "$cpu" = host; then
3595     enabled cross_compile &&
3596         die "--cpu=host makes no sense when cross-compiling."
3597
3598     case "$cc_type" in
3599         gcc|llvm_gcc)
3600             check_native(){
3601                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3602                 sed -n "/cc1.*$1=/{
3603                             s/.*$1=\\([^ ]*\\).*/\\1/
3604                             p
3605                             q
3606                         }" $TMPE
3607             }
3608             cpu=$(check_native -march || check_native -mcpu)
3609         ;;
3610     esac
3611
3612     test "${cpu:-host}" = host &&
3613         die "--cpu=host not supported with compiler $cc"
3614 fi
3615
3616 # Deal with common $arch aliases
3617 case "$arch" in
3618     aarch64|arm64)
3619         arch="aarch64"
3620     ;;
3621     arm*|iPad*|iPhone*)
3622         arch="arm"
3623     ;;
3624     mips*|IP*)
3625         arch="mips"
3626     ;;
3627     parisc*|hppa*)
3628         arch="parisc"
3629     ;;
3630     "Power Macintosh"|ppc*|powerpc*)
3631         arch="ppc"
3632     ;;
3633     s390|s390x)
3634         arch="s390"
3635     ;;
3636     sh4|sh)
3637         arch="sh4"
3638     ;;
3639     sun4u|sparc*)
3640         arch="sparc"
3641     ;;
3642     tilegx|tile-gx)
3643         arch="tilegx"
3644     ;;
3645     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3646         arch="x86"
3647     ;;
3648 esac
3649
3650 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3651 enable $arch
3652
3653 # Add processor-specific flags
3654 if enabled aarch64; then
3655
3656     case $cpu in
3657         armv*)
3658             cpuflags="-march=$cpu"
3659         ;;
3660         *)
3661             cpuflags="-mcpu=$cpu"
3662         ;;
3663     esac
3664
3665 elif enabled alpha; then
3666
3667     cpuflags="-mcpu=$cpu"
3668
3669 elif enabled arm; then
3670
3671     check_arm_arch() {
3672         check_cpp_condition stddef.h \
3673             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3674             $cpuflags
3675     }
3676
3677     probe_arm_arch() {
3678         if   check_arm_arch 4;        then echo armv4;
3679         elif check_arm_arch 4T;       then echo armv4t;
3680         elif check_arm_arch 5;        then echo armv5;
3681         elif check_arm_arch 5E;       then echo armv5e;
3682         elif check_arm_arch 5T;       then echo armv5t;
3683         elif check_arm_arch 5TE;      then echo armv5te;
3684         elif check_arm_arch 5TEJ;     then echo armv5te;
3685         elif check_arm_arch 6;        then echo armv6;
3686         elif check_arm_arch 6J;       then echo armv6j;
3687         elif check_arm_arch 6K;       then echo armv6k;
3688         elif check_arm_arch 6Z;       then echo armv6z;
3689         elif check_arm_arch 6ZK;      then echo armv6zk;
3690         elif check_arm_arch 6T2;      then echo armv6t2;
3691         elif check_arm_arch 7;        then echo armv7;
3692         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3693         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3694         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3695         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3696         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3697         fi
3698     }
3699
3700     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3701
3702     case $cpu in
3703         armv*)
3704             cpuflags="-march=$cpu"
3705             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3706         ;;
3707         *)
3708             cpuflags="-mcpu=$cpu"
3709             case $cpu in
3710                 cortex-a*)                               subarch=armv7a  ;;
3711                 cortex-r*)                               subarch=armv7r  ;;
3712                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3713                 arm11*)                                  subarch=armv6   ;;
3714                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3715                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3716                 *)                             subarch=$(probe_arm_arch) ;;
3717             esac
3718         ;;
3719     esac
3720
3721     case "$subarch" in
3722         armv5t*)    enable fast_clz                ;;
3723         armv[6-8]*)
3724             enable fast_clz
3725             disabled fast_unaligned || enable fast_unaligned
3726             ;;
3727     esac
3728
3729 elif enabled avr32; then
3730
3731     case $cpu in
3732         ap7[02]0[0-2])
3733             subarch="avr32_ap"
3734             cpuflags="-mpart=$cpu"
3735         ;;
3736         ap)
3737             subarch="avr32_ap"
3738             cpuflags="-march=$cpu"
3739         ;;
3740         uc3[ab]*)
3741             subarch="avr32_uc"
3742             cpuflags="-mcpu=$cpu"
3743         ;;
3744         uc)
3745             subarch="avr32_uc"
3746             cpuflags="-march=$cpu"
3747         ;;
3748     esac
3749
3750 elif enabled bfin; then
3751
3752     cpuflags="-mcpu=$cpu"
3753
3754 elif enabled mips; then
3755
3756     cpuflags="-march=$cpu"
3757
3758     case $cpu in
3759         24kc)
3760             disable mipsfpu
3761             disable mipsdspr1
3762             disable mipsdspr2
3763         ;;
3764         24kf*)
3765             disable mipsdspr1
3766             disable mipsdspr2
3767         ;;
3768         24kec|34kc|1004kc)
3769             disable mipsfpu
3770             disable mipsdspr2
3771         ;;
3772         24kef*|34kf*|1004kf*)
3773             disable mipsdspr2
3774         ;;
3775         74kc)
3776             disable mipsfpu
3777         ;;
3778     esac
3779
3780 elif enabled ppc; then
3781
3782     disable ldbrx
3783     disable vsx
3784
3785     case $(tolower $cpu) in
3786         601|ppc601|powerpc601)
3787             cpuflags="-mcpu=601"
3788             disable altivec
3789         ;;
3790         603*|ppc603*|powerpc603*)
3791             cpuflags="-mcpu=603"
3792             disable altivec
3793         ;;
3794         604*|ppc604*|powerpc604*)
3795             cpuflags="-mcpu=604"
3796             disable altivec
3797         ;;
3798         g3|75*|ppc75*|powerpc75*)
3799             cpuflags="-mcpu=750"
3800             disable altivec
3801         ;;
3802         g4|745*|ppc745*|powerpc745*)
3803             cpuflags="-mcpu=7450"
3804         ;;
3805         74*|ppc74*|powerpc74*)
3806             cpuflags="-mcpu=7400"
3807         ;;
3808         g5|970|ppc970|powerpc970)
3809             cpuflags="-mcpu=970"
3810         ;;
3811         power[3-8]*)
3812             cpuflags="-mcpu=$cpu"
3813         ;;
3814         cell)
3815             cpuflags="-mcpu=cell"
3816             enable ldbrx
3817         ;;
3818         e500mc)
3819             cpuflags="-mcpu=e500mc"
3820             disable altivec
3821         ;;
3822         e500v2)
3823             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3824             disable altivec
3825             disable dcbzl
3826         ;;
3827         e500)
3828             cpuflags="-mcpu=8540 -mhard-float"
3829             disable altivec
3830             disable dcbzl
3831         ;;
3832     esac
3833
3834 elif enabled sparc; then
3835
3836     case $cpu in
3837         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3838             cpuflags="-mcpu=$cpu"
3839         ;;
3840         ultrasparc*|niagara[234])
3841             cpuflags="-mcpu=$cpu"
3842         ;;
3843     esac
3844
3845 elif enabled x86; then
3846
3847     case $cpu in
3848         i[345]86|pentium)
3849             cpuflags="-march=$cpu"
3850             disable i686
3851             disable mmx
3852         ;;
3853         # targets that do NOT support nopl and conditional mov (cmov)
3854         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3855             cpuflags="-march=$cpu"
3856             disable i686
3857         ;;
3858         # targets that do support nopl and conditional mov (cmov)
3859         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
3860         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
3861             cpuflags="-march=$cpu"
3862             enable i686
3863             enable fast_cmov
3864         ;;
3865         # targets that do support conditional mov but on which it's slow
3866         pentium4|pentium4m|prescott|nocona)
3867             cpuflags="-march=$cpu"
3868             enable i686
3869             disable fast_cmov
3870         ;;
3871     esac
3872
3873 fi
3874
3875 if [ "$cpu" != generic ]; then
3876     add_cflags  $cpuflags
3877     add_asflags $cpuflags
3878 fi
3879
3880 # compiler sanity check
3881 check_exec <<EOF
3882 int main(void){ return 0; }
3883 EOF
3884 if test "$?" != 0; then
3885     echo "$cc is unable to create an executable file."
3886     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3887         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3888         echo "Only do this if you know what cross compiling means."
3889     fi
3890     die "C compiler test failed."
3891 fi
3892
3893 add_cppflags -D_ISOC99_SOURCE
3894 add_cxxflags -D__STDC_CONSTANT_MACROS
3895 check_cflags -std=c99
3896 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3897 #include <stdlib.h>
3898 EOF
3899 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3900 #include <stdlib.h>
3901 EOF
3902
3903 add_host_cppflags -D_ISOC99_SOURCE
3904 check_host_cflags -std=c99
3905 check_host_cflags -Wall
3906 check_host_cflags -O3
3907
3908 check_64bit(){
3909     arch32=$1
3910     arch64=$2
3911     expr=$3
3912     check_code cc "" "int test[2*($expr) - 1]" &&
3913         subarch=$arch64 || subarch=$arch32
3914 }
3915
3916 case "$arch" in
3917     aarch64|alpha|ia64)
3918         spic=$shared
3919     ;;
3920     mips)
3921         check_64bit mips mips64 '_MIPS_SIM > 1'
3922         spic=$shared
3923     ;;
3924     parisc)
3925         check_64bit parisc parisc64 'sizeof(void *) > 4'
3926         spic=$shared
3927     ;;
3928     ppc)
3929         check_64bit ppc ppc64 'sizeof(void *) > 4'
3930         spic=$shared
3931     ;;
3932     s390)
3933         check_64bit s390 s390x 'sizeof(void *) > 4'
3934         spic=$shared
3935     ;;
3936     sparc)
3937         check_64bit sparc sparc64 'sizeof(void *) > 4'
3938         spic=$shared
3939     ;;
3940     x86)
3941         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3942         if test "$subarch" = "x86_64"; then
3943             spic=$shared
3944         fi
3945     ;;
3946     ppc)
3947         check_cc <<EOF && subarch="ppc64"
3948         int test[(int)sizeof(char*) - 7];
3949 EOF
3950     ;;
3951 esac
3952
3953 enable $subarch
3954 enabled spic && enable_weak pic
3955
3956 # OS specific
3957 case $target_os in
3958     aix)
3959         SHFLAGS=-shared
3960         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3961         enabled shared && add_ldflags -Wl,-brtl
3962         ;;
3963     android)
3964         disable symver
3965         SLIB_INSTALL_NAME='$(SLIBNAME)'
3966         SLIB_INSTALL_LINKS=
3967         # soname not set on purpose
3968         SHFLAGS=-shared
3969         ;;
3970     haiku)
3971         prefix_default="/boot/common"
3972         network_extralibs="-lnetwork"
3973         host_libs=
3974         ;;
3975     sunos)
3976         SHFLAGS='-shared -Wl,-h,$$(@F)'
3977         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3978         network_extralibs="-lsocket -lnsl"
3979         # When using suncc to build, the Solaris linker will mark
3980         # an executable with each instruction set encountered by
3981         # the Solaris assembler.  As our libraries contain their own
3982         # guards for processor-specific code, instead suppress
3983         # generation of the HWCAPS ELF section on Solaris x86 only.
3984         enabled_all suncc x86 &&
3985             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3986             add_ldflags -Wl,-M,mapfile
3987         nm_default='nm -P -g'
3988         ;;
3989     netbsd)
3990         disable symver
3991         oss_indev_extralibs="-lossaudio"
3992         oss_outdev_extralibs="-lossaudio"
3993         enabled gcc || check_ldflags -Wl,-zmuldefs
3994         ;;
3995     openbsd|bitrig)
3996         disable symver
3997         SHFLAGS='-shared'
3998         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3999         SLIB_INSTALL_LINKS=
4000         oss_indev_extralibs="-lossaudio"
4001         oss_outdev_extralibs="-lossaudio"
4002         ;;
4003     dragonfly)
4004         disable symver
4005         ;;
4006     freebsd)
4007         ;;
4008     bsd/os)
4009         add_extralibs -lpoll -lgnugetopt
4010         strip="strip -d"
4011         ;;
4012     darwin)
4013         enabled ppc && add_asflags -force_cpusubtype_ALL
4014         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4015         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4016         strip="${strip} -x"
4017         add_ldflags -Wl,-dynamic,-search_paths_first
4018         SLIBSUF=".dylib"
4019         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4020         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4021         objformat="macho"
4022         enabled x86_64 && objformat="macho64"
4023         enabled_any pic shared ||
4024             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4025         ;;
4026     mingw32*)
4027         if test $target_os = "mingw32ce"; then
4028             disable network
4029         else
4030             target_os=mingw32
4031         fi
4032         LIBTARGET=i386
4033         if enabled x86_64; then
4034             LIBTARGET="i386:x86-64"
4035         elif enabled arm; then
4036             LIBTARGET=arm-wince
4037         fi
4038         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4039         check_ldflags -Wl,--nxcompat
4040         check_ldflags -Wl,--dynamicbase
4041         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4042         shlibdir_default="$bindir_default"
4043         SLIBPREF=""
4044         SLIBSUF=".dll"
4045         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4046         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4047         dlltool="${cross_prefix}dlltool"
4048         if check_cmd lib.exe -list; then
4049             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4050             if enabled x86_64; then
4051                 LIBTARGET=x64
4052             fi
4053         elif check_cmd $dlltool --version; then
4054             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)'
4055         fi
4056         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4057         SLIB_INSTALL_LINKS=
4058         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4059         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4060         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'
4061         objformat="win32"
4062         ranlib=:
4063         enable dos_paths
4064         ;;
4065     win32|win64)
4066         disable symver
4067         if enabled shared; then
4068             # Link to the import library instead of the normal static library
4069             # for shared libs.
4070             LD_LIB='%.lib'
4071             # Cannot build both shared and static libs with MSVC or icl.
4072             disable static
4073         fi
4074         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4075         shlibdir_default="$bindir_default"
4076         SLIBPREF=""
4077         SLIBSUF=".dll"
4078         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4079         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4080         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4081         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4082         SLIB_INSTALL_LINKS=
4083         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4084         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4085         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4086         objformat="win32"
4087         ranlib=:
4088         enable dos_paths
4089         ;;
4090     cygwin*)
4091         target_os=cygwin
4092         shlibdir_default="$bindir_default"
4093         SLIBPREF="cyg"
4094         SLIBSUF=".dll"
4095         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4096         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4097         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4098         SLIB_INSTALL_LINKS=
4099         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4100         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4101         objformat="win32"
4102         enable dos_paths
4103         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4104         ;;
4105     *-dos|freedos|opendos)
4106         network_extralibs="-lsocket"
4107         objformat="coff"
4108         enable dos_paths
4109         add_cppflags -U__STRICT_ANSI__
4110         ;;
4111     linux)
4112         enable dv1394
4113         ;;
4114     irix*)
4115         target_os=irix
4116         ranlib="echo ignoring ranlib"
4117         ;;
4118     os/2*)
4119         strip="lxlite -CS"
4120         ln_s="cp -f"
4121         objformat="aout"
4122         add_cppflags -D_GNU_SOURCE
4123         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4124         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4125         LIBSUF="_s.a"
4126         SLIBPREF=""
4127         SLIBSUF=".dll"
4128         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4129         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4130         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4131             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
4132             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4133             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4134             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4135             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
4136         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4137             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4138         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4139         enable dos_paths
4140         enable_weak os2threads
4141         ;;
4142     gnu/kfreebsd)
4143         add_cppflags -D_BSD_SOURCE
4144         ;;
4145     gnu)
4146         ;;
4147     qnx)
4148         add_cppflags -D_QNX_SOURCE
4149         network_extralibs="-lsocket"
4150         ;;
4151     symbian)
4152         SLIBSUF=".dll"
4153         enable dos_paths
4154         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4155         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4156         add_ldflags -Wl,--target1-abs,--no-undefined \
4157                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4158                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4159         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4160                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4161                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4162         ;;
4163     osf1)
4164         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4165         ;;
4166     minix)
4167         ;;
4168     plan9)
4169         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4170                      -D_REENTRANT_SOURCE        \
4171                      -D_RESEARCH_SOURCE         \
4172                      -DFD_SETSIZE=96            \
4173                      -DHAVE_SOCK_OPTS
4174         add_compat strtod.o strtod=avpriv_strtod
4175         network_extralibs='-lbsd'
4176         exeobjs=compat/plan9/main.o
4177         disable ffserver
4178         cp_f='cp'
4179         ;;
4180     none)
4181         ;;
4182     *)
4183         die "Unknown OS '$target_os'."
4184         ;;
4185 esac
4186
4187 # determine libc flavour
4188
4189 probe_libc(){
4190     pfx=$1
4191     pfx_no_=${pfx%_}
4192     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4193     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4194         eval ${pfx}libc_type=uclibc
4195         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4196     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4197         eval ${pfx}libc_type=glibc
4198         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4199     # MinGW headers can be installed on Cygwin, so check for newlib first.
4200     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4201         eval ${pfx}libc_type=newlib
4202         add_${pfx}cppflags -U__STRICT_ANSI__
4203     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4204     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4205         eval ${pfx}libc_type=mingw64
4206         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4207             add_compat msvcrt/snprintf.o
4208             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4209         fi
4210         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4211         eval test \$${pfx_no_}cc_type = "gcc" &&
4212             add_${pfx}cppflags -D__printf__=__gnu_printf__
4213     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4214          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4215         eval ${pfx}libc_type=mingw32
4216         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4217             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4218             die "ERROR: MinGW32 runtime version must be >= 3.15."
4219         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4220         eval test \$${pfx_no_}cc_type = "gcc" &&
4221             add_${pfx}cppflags -D__printf__=__gnu_printf__
4222     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4223         eval ${pfx}libc_type=msvcrt
4224         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4225         # 0x601 by default unless something else is set by the user.
4226         # This can easily lead to us detecting functions only present
4227         # in such new versions and producing binaries requiring windows 7.0.
4228         # Therefore explicitly set the default to XP unless the user has
4229         # set something else on the command line.
4230         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4231             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4232     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4233         eval ${pfx}libc_type=klibc
4234     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4235         eval ${pfx}libc_type=bionic
4236     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4237         eval ${pfx}libc_type=solaris
4238         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4239     fi
4240     check_${pfx}cc <<EOF
4241 #include <time.h>
4242 void *v = localtime_r;
4243 EOF
4244 test "$?" != 0 && check_${pfx}cc -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 <<EOF && add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4245 #include <time.h>
4246 void *v = localtime_r;
4247 EOF
4248
4249 }
4250
4251 probe_libc
4252 test -n "$libc_type" && enable libc_$libc_type
4253 probe_libc host_
4254 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4255
4256 case $libc_type in
4257     bionic)
4258         add_compat strtod.o strtod=avpriv_strtod
4259         ;;
4260     msvcrt)
4261         add_compat strtod.o strtod=avpriv_strtod
4262         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4263                                      _snprintf=avpriv_snprintf  \
4264                                      vsnprintf=avpriv_vsnprintf
4265         ;;
4266 esac
4267
4268 # hacks for compiler/libc/os combinations
4269
4270 if enabled_all tms470 libc_glibc; then
4271     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4272     add_cppflags -D__USER_LABEL_PREFIX__=
4273     add_cppflags -D__builtin_memset=memset
4274     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4275     add_cflags   -pds=48    # incompatible redefinition of macro
4276 fi
4277
4278 if enabled_all ccc libc_glibc; then
4279     add_ldflags -Wl,-z,now  # calls to libots crash without this
4280 fi
4281
4282 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4283     add_cppflags '-I\$(SRC_PATH)/compat/float'
4284
4285 esc(){
4286     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4287 }
4288
4289 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4290
4291 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4292
4293 set_default $PATHS_LIST
4294 set_default nm
4295
4296 # we need to build at least one lib type
4297 if ! enabled_any static shared; then
4298     cat <<EOF
4299 At least one library type must be built.
4300 Specify --enable-static to build the static libraries or --enable-shared to
4301 build the shared libraries as well. To only build the shared libraries specify
4302 --disable-static in addition to --enable-shared.
4303 EOF
4304     exit 1;
4305 fi
4306
4307 die_license_disabled() {
4308     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4309 }
4310
4311 die_license_disabled_gpl() {
4312     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4313 }
4314
4315 die_license_disabled gpl frei0r
4316 die_license_disabled gpl libcdio
4317 die_license_disabled gpl libsmbclient
4318 die_license_disabled gpl libutvideo
4319 die_license_disabled gpl libvidstab
4320 die_license_disabled gpl libx264
4321 die_license_disabled gpl libx265
4322 die_license_disabled gpl libxavs
4323 die_license_disabled gpl libxvid
4324 die_license_disabled gpl libzvbi
4325 die_license_disabled gpl x11grab
4326
4327 die_license_disabled nonfree libaacplus
4328 die_license_disabled nonfree libfaac
4329 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4330 enabled gpl && die_license_disabled_gpl nonfree openssl
4331
4332 die_license_disabled version3 libopencore_amrnb
4333 die_license_disabled version3 libopencore_amrwb
4334 die_license_disabled version3 libsmbclient
4335 die_license_disabled version3 libvo_aacenc
4336 die_license_disabled version3 libvo_amrwbenc
4337
4338 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4339
4340 disabled optimizations || check_cflags -fomit-frame-pointer
4341
4342 enable_weak_pic() {
4343     disabled pic && return
4344     enable pic
4345     add_cppflags -DPIC
4346     case "$target_os" in
4347     mingw*|cygwin*)
4348         ;;
4349     *)
4350         add_cflags -fPIC
4351         ;;
4352     esac
4353     add_asflags  -fPIC
4354 }
4355
4356 enabled pic && enable_weak_pic
4357
4358 check_cc <<EOF || die "Symbol mangling check failed."
4359 int ff_extern;
4360 EOF
4361 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4362 extern_prefix=${sym%%ff_extern*}
4363
4364 check_cc <<EOF && enable_weak inline_asm
4365 void foo(void) { __asm__ volatile ("" ::); }
4366 EOF
4367
4368 _restrict=
4369 for restrict_keyword in restrict __restrict__ __restrict; do
4370     check_cc <<EOF && _restrict=$restrict_keyword && break
4371 void foo(char * $restrict_keyword p);
4372 EOF
4373 done
4374
4375 check_cc <<EOF && enable pragma_deprecated
4376 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4377 EOF
4378
4379 check_cc <<EOF && enable attribute_packed
4380 struct { int x; } __attribute__((packed)) x;
4381 EOF
4382
4383 check_cc <<EOF && enable attribute_may_alias
4384 union { int x; } __attribute__((may_alias)) x;
4385 EOF
4386
4387 check_cc <<EOF || die "endian test failed"
4388 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4389 EOF
4390 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4391
4392 if  [ "$cpu" = "power7" ] || [ "$cpu" = "power8" ] ;then
4393     if ! enabled bigendian ;then
4394         enable vsx
4395     fi
4396 fi
4397
4398 check_gas() {
4399     log "check_gas using '$as' as AS"
4400     # :vararg is used on aarch64, arm and ppc altivec
4401     check_as <<EOF || return 1
4402 .macro m n, y:vararg=0
4403 \n: .int \y
4404 .endm
4405 m x
4406 EOF
4407     # .altmacro is only used in arm asm
4408     ! enabled arm || check_as <<EOF || return 1
4409 .altmacro
4410 EOF
4411     enable gnu_as
4412     return 0
4413 }
4414
4415 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4416     nogas=:
4417     enabled_any arm aarch64 && nogas=die
4418     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4419     as_noop=-v
4420
4421     case $as_type in
4422         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4423         gcc)  gaspp_as_type=gas ;;
4424         *)    gaspp_as_type=$as_type ;;
4425     esac
4426
4427     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4428
4429     test "${as#*gas-preprocessor.pl}" != "$as" ||
4430     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4431         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4432
4433     if ! check_gas ; then
4434         as=${gas:=$as}
4435         check_gas || \
4436             $nogas "GNU assembler not found, install/update gas-preprocessor"
4437     fi
4438
4439     check_as <<EOF && enable as_func
4440 .func test
4441 .endfunc
4442 EOF
4443 fi
4444
4445 check_inline_asm inline_asm_labels '"1:\n"'
4446
4447 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4448
4449 if enabled aarch64; then
4450     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4451     # internal assembler in clang 3.3 does not support this instruction
4452     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4453     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4454
4455     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4456
4457 elif enabled alpha; then
4458
4459     check_cflags -mieee
4460
4461 elif enabled arm; then
4462
4463     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4464 float func(float a, float b){ return a+b; }
4465 EOF
4466
4467     enabled thumb && check_cflags -mthumb || check_cflags -marm
4468
4469     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4470         enable vfp_args
4471     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4472         case "${cross_prefix:-$cc}" in
4473             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4474             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4475 __asm__ (".eabi_attribute 28, 1");
4476 int main(void) { return 0; }
4477 EOF
4478         esac
4479         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4480     fi
4481
4482     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4483     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4484     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4485     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4486     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4487     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4488     enabled setend  && check_insn setend  'setend be'
4489
4490     [ $target_os = linux ] || [ $target_os = android ] ||
4491         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4492             $ARCH_EXT_LIST_ARM
4493
4494     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4495
4496     check_as <<EOF && enable as_dn_directive
4497 ra .dn d0.i16
4498 .unreq ra
4499 EOF
4500
4501     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4502
4503 elif enabled mips; then
4504
4505     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4506     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
4507      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
4508     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4509      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4510     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4511      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4512     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4513      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4514
4515 elif enabled parisc; then
4516
4517     if enabled gcc; then
4518         case $($cc -dumpversion) in
4519             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4520         esac
4521     fi
4522
4523 elif enabled ppc; then
4524
4525     enable local_aligned_8 local_aligned_16 local_aligned_32
4526
4527     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4528     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4529     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4530     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4531
4532     # AltiVec flags: The FSF version of GCC differs from the Apple version
4533     if enabled altivec; then
4534         check_cflags -maltivec -mabi=altivec &&
4535         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4536         check_cflags -faltivec
4537
4538         # check if our compiler supports Motorola AltiVec C API
4539         check_cc <<EOF || disable altivec
4540 $inc_altivec_h
4541 int main(void) {
4542     vector signed int v1 = (vector signed int) { 0 };
4543     vector signed int v2 = (vector signed int) { 1 };
4544     v1 = vec_add(v1, v2);
4545     return 0;
4546 }
4547 EOF
4548
4549         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4550     fi
4551
4552     if enabled vsx; then
4553         check_cflags -mvsx
4554     fi
4555 elif enabled x86; then
4556
4557     check_builtin rdtsc    intrin.h   "__rdtsc()"
4558     check_builtin mm_empty mmintrin.h "_mm_empty()"
4559
4560     enable local_aligned_8 local_aligned_16 local_aligned_32
4561
4562     # check whether EBP is available on x86
4563     # As 'i' is stored on the stack, this program will crash
4564     # if the base pointer is used to access it because the
4565     # base pointer is cleared in the inline assembly code.
4566     check_exec_crash <<EOF && enable ebp_available
4567 volatile int i=0;
4568 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4569 return i;
4570 EOF
4571
4572     # check whether EBX is available on x86
4573     check_inline_asm ebx_available '""::"b"(0)' &&
4574         check_inline_asm ebx_available '"":::"%ebx"'
4575
4576     # check whether xmm clobbers are supported
4577     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4578
4579     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4580         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4581
4582     # check whether binutils is new enough to compile SSSE3/MMXEXT
4583     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4584     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4585
4586     if ! disabled_any asm mmx yasm; then
4587         if check_cmd $yasmexe --version; then
4588             enabled x86_64 && yasm_extra="-m amd64"
4589             yasm_debug="-g dwarf2"
4590         elif check_cmd nasm -v; then
4591             yasmexe=nasm
4592             yasm_debug="-g -F dwarf"
4593             if enabled x86_64; then
4594                 case "$objformat" in
4595                     elf)   objformat=elf64 ;;
4596                     win32) objformat=win64 ;;
4597                 esac
4598             fi
4599         fi
4600
4601         YASMFLAGS="-f $objformat $yasm_extra"
4602         enabled pic               && append YASMFLAGS "-DPIC"
4603         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4604         case "$objformat" in
4605             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4606         esac
4607
4608         check_yasm "movbe ecx, [5]" && enable yasm ||
4609             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4610         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4611         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4612         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4613         check_yasm "CPU amdnop" || disable cpunop
4614     fi
4615
4616     case "$cpu" in
4617         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4618             disable fast_clz
4619         ;;
4620     esac
4621
4622 fi
4623
4624 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4625
4626 check_ldflags -Wl,--as-needed
4627 check_ldflags -Wl,-z,noexecstack
4628
4629 if check_func dlopen; then
4630     ldl=
4631 elif check_func dlopen -ldl; then
4632     ldl=-ldl
4633 fi
4634
4635 if ! disabled network; then
4636     check_func getaddrinfo $network_extralibs
4637     check_func getservbyport $network_extralibs
4638     check_func inet_aton $network_extralibs
4639
4640     check_type netdb.h "struct addrinfo"
4641     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4642     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4643     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4644     check_type poll.h "struct pollfd"
4645     check_type netinet/sctp.h "struct sctp_event_subscribe"
4646     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4647     check_type netinet/in.h "struct sockaddr_in6"
4648     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4649     check_type "sys/types.h sys/socket.h" socklen_t
4650
4651     # Prefer arpa/inet.h over winsock2
4652     if check_header arpa/inet.h ; then
4653         check_func closesocket
4654     elif check_header winsock2.h ; then
4655         check_func_headers winsock2.h closesocket -lws2 &&
4656             network_extralibs="-lws2" ||
4657         { check_func_headers winsock2.h closesocket -lws2_32 &&
4658             network_extralibs="-lws2_32"; } || disable winsock2_h network
4659         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4660
4661         check_type ws2tcpip.h socklen_t
4662         check_type ws2tcpip.h "struct addrinfo"
4663         check_type ws2tcpip.h "struct group_source_req"
4664         check_type ws2tcpip.h "struct ip_mreq_source"
4665         check_type ws2tcpip.h "struct ipv6_mreq"
4666         check_type winsock2.h "struct pollfd"
4667         check_struct winsock2.h "struct sockaddr" sa_len
4668         check_type ws2tcpip.h "struct sockaddr_in6"
4669         check_type ws2tcpip.h "struct sockaddr_storage"
4670     else
4671         disable network
4672     fi
4673 fi
4674
4675 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4676 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4677 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4678 check_builtin sarestart signal.h "SA_RESTART"
4679 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4680
4681 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4682 check_func  ${malloc_prefix}memalign            && enable memalign
4683 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4684
4685 check_func  access
4686 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4687 check_func  fcntl
4688 check_func  fork
4689 check_func  gethrtime
4690 check_func  getopt
4691 check_func  getrusage
4692 check_func  gettimeofday
4693 check_func  isatty
4694 check_func  localtime_r
4695 check_func  mach_absolute_time
4696 check_func  mkstemp
4697 check_func  mmap
4698 check_func  mprotect
4699 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4700 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4701 check_func  sched_getaffinity
4702 check_func  setrlimit
4703 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4704 check_func  strerror_r
4705 check_func  sysconf
4706 check_func  sysctl
4707 check_func  usleep
4708
4709 check_func_headers conio.h kbhit
4710 check_func_headers io.h setmode
4711 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4712 check_func_headers stdlib.h getenv
4713
4714 check_func_headers windows.h CoTaskMemFree -lole32
4715 check_func_headers windows.h GetProcessAffinityMask
4716 check_func_headers windows.h GetProcessTimes
4717 check_func_headers windows.h GetSystemTimeAsFileTime
4718 check_func_headers windows.h MapViewOfFile
4719 check_func_headers windows.h PeekNamedPipe
4720 check_func_headers windows.h SetConsoleTextAttribute
4721 check_func_headers windows.h Sleep
4722 check_func_headers windows.h VirtualAlloc
4723 check_struct windows.h "CONDITION_VARIABLE" Ptr
4724 check_func_headers glob.h glob
4725 enabled xlib &&
4726     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4727
4728 check_header cl/cl.h
4729 check_header direct.h
4730 check_header dlfcn.h
4731 check_header dxva.h
4732 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4733 check_header io.h
4734 check_header libcrystalhd/libcrystalhd_if.h
4735 check_header mach/mach_time.h
4736 check_header malloc.h
4737 check_header poll.h
4738 check_header sys/mman.h
4739 check_header sys/param.h
4740 check_header sys/resource.h
4741 check_header sys/select.h
4742 check_header sys/time.h
4743 check_header sys/un.h
4744 check_header termios.h
4745 check_header unistd.h
4746 check_header vdpau/vdpau.h
4747 check_header vdpau/vdpau_x11.h
4748 check_header VideoDecodeAcceleration/VDADecoder.h
4749 check_header windows.h
4750 check_header X11/extensions/XvMClib.h
4751 check_header asm/types.h
4752
4753 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4754 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4755 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4756
4757 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4758
4759 if ! disabled w32threads && ! enabled pthreads; then
4760     check_func_headers "windows.h process.h" _beginthreadex &&
4761         enable w32threads || disable w32threads
4762 fi
4763
4764 # check for some common methods of building with pthread support
4765 # do this before the optional library checks as some of them require pthreads
4766 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4767     enable pthreads
4768     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
4769         add_cflags -pthread
4770         add_extralibs -pthread
4771     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
4772         add_cflags -pthreads
4773         add_extralibs -pthreads
4774     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
4775         add_cflags -ldl -pthread
4776         add_extralibs -ldl -pthread
4777     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
4778         add_extralibs -lpthreadGC2
4779     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
4780         :
4781     elif ! check_func pthread_join && ! check_func pthread_create; then
4782         disable pthreads
4783     fi
4784     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
4785 fi
4786
4787
4788 if enabled pthreads; then
4789   check_func pthread_cancel
4790 fi
4791
4792 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4793 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4794 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
4795
4796 check_lib math.h sin -lm && LIBM="-lm"
4797 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4798
4799 atan2f_args=2
4800 ldexpf_args=2
4801 powf_args=2
4802 fminf_args=2
4803
4804 for func in $MATH_FUNCS; do
4805     eval check_mathfunc $func \${${func}_args:-1}
4806 done
4807
4808 # these are off by default, so fail if requested and not available
4809 enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
4810 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
4811                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4812                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4813 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
4814 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4815 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4816 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4817 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4818 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4819 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
4820 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
4821 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
4822 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
4823                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4824                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4825 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4826 enabled libfaac