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