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