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