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