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