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