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