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