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