commit d1d3dad
chld
·
2026-08-22 19:52:46 +0000 UTC
parent c48efcf
patched ffmpeg configure
2 files changed,
+8173,
-2
+8170,
-0
1@@ -0,0 +1,8170 @@
2+#!/bin/sh
3+#
4+# FFmpeg configure script
5+#
6+# Copyright (c) 2000-2002 Fabrice Bellard
7+# Copyright (c) 2005-2008 Diego Biurrun
8+# Copyright (c) 2005-2008 Mans Rullgard
9+#
10+
11+# Prevent locale nonsense from breaking basic text processing.
12+LC_ALL=C
13+export LC_ALL
14+
15+# make sure we are running under a compatible shell
16+# try to make this part work with most shells
17+
18+try_exec(){
19+ echo "Trying shell $1"
20+ type "$1" > /dev/null 2>&1 && exec "$@"
21+}
22+
23+unset foo
24+(: ${foo%%bar}) 2> /dev/null
25+E1="$?"
26+
27+(: ${foo?}) 2> /dev/null
28+E2="$?"
29+
30+if test "$E1" != 0 || test "$E2" = 0; then
31+ echo "Broken shell detected. Trying alternatives."
32+ export FF_CONF_EXEC
33+ if test "0$FF_CONF_EXEC" -lt 1; then
34+ FF_CONF_EXEC=1
35+ try_exec bash "$0" "$@"
36+ fi
37+ if test "0$FF_CONF_EXEC" -lt 2; then
38+ FF_CONF_EXEC=2
39+ try_exec ksh "$0" "$@"
40+ fi
41+ if test "0$FF_CONF_EXEC" -lt 3; then
42+ FF_CONF_EXEC=3
43+ try_exec /usr/xpg4/bin/sh "$0" "$@"
44+ fi
45+ echo "No compatible shell script interpreter found."
46+ echo "This configure script requires a POSIX-compatible shell"
47+ echo "such as bash or ksh."
48+ echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
49+ echo "Instead, install a working POSIX-compatible shell."
50+ echo "Disabling this configure test will create a broken FFmpeg."
51+ if test "$BASH_VERSION" = '2.04.0(1)-release'; then
52+ echo "This bash version ($BASH_VERSION) is broken on your platform."
53+ echo "Upgrade to a later version if available."
54+ fi
55+ exit 1
56+fi
57+
58+test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
59+
60+show_help(){
61+ cat <<EOF
62+Usage: configure [options]
63+Options: [defaults in brackets after descriptions]
64+
65+Help options:
66+ --help print this message
67+ --quiet Suppress showing informative output
68+ --list-decoders show all available decoders
69+ --list-encoders show all available encoders
70+ --list-hwaccels show all available hardware accelerators
71+ --list-demuxers show all available demuxers
72+ --list-muxers show all available muxers
73+ --list-parsers show all available parsers
74+ --list-protocols show all available protocols
75+ --list-bsfs show all available bitstream filters
76+ --list-indevs show all available input devices
77+ --list-outdevs show all available output devices
78+ --list-filters show all available filters
79+
80+Standard options:
81+ --logfile=FILE log tests and output to FILE [ffbuild/config.log]
82+ --disable-logging do not log configure debug information
83+ --fatal-warnings fail if any configure warning is generated
84+ --prefix=PREFIX install in PREFIX [$prefix_default]
85+ --bindir=DIR install binaries in DIR [PREFIX/bin]
86+ --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
87+ --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg]
88+ --libdir=DIR install libs in DIR [PREFIX/lib]
89+ --shlibdir=DIR install shared libs in DIR [LIBDIR]
90+ --incdir=DIR install includes in DIR [PREFIX/include]
91+ --mandir=DIR install man page in DIR [PREFIX/share/man]
92+ --pkgconfigdir=DIR install pkg-config files in DIR [LIBDIR/pkgconfig]
93+ --enable-rpath use rpath to allow installing libraries in paths
94+ not part of the dynamic linker search path
95+ use rpath when linking programs (USE WITH CARE)
96+ --install-name-dir=DIR Darwin directory name for installed targets
97+
98+Licensing options:
99+ --enable-gpl allow use of GPL code, the resulting libs
100+ and binaries will be under GPL [no]
101+ --enable-version3 upgrade (L)GPL to version 3 [no]
102+ --enable-nonfree allow use of nonfree code, the resulting libs
103+ and binaries will be unredistributable [no]
104+
105+Configuration options:
106+ --disable-static do not build static libraries [no]
107+ --enable-shared build shared libraries [no]
108+ --enable-small optimize for size instead of speed
109+ --disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
110+ --enable-gray enable full grayscale support (slower color)
111+ --disable-swscale-alpha disable alpha channel support in swscale
112+ --disable-all disable building components, libraries and programs
113+ --disable-autodetect disable automatically detected external libraries [no]
114+
115+Program options:
116+ --disable-programs do not build command line programs
117+ --disable-ffmpeg disable ffmpeg build
118+ --disable-ffplay disable ffplay build
119+ --disable-ffprobe disable ffprobe build
120+
121+Documentation options:
122+ --disable-doc do not build documentation
123+ --disable-htmlpages do not build HTML documentation pages
124+ --disable-manpages do not build man documentation pages
125+ --disable-podpages do not build POD documentation pages
126+ --disable-txtpages do not build text documentation pages
127+
128+Component options:
129+ --disable-avdevice disable libavdevice build
130+ --disable-avcodec disable libavcodec build
131+ --disable-avformat disable libavformat build
132+ --disable-swresample disable libswresample build
133+ --disable-swscale disable libswscale build
134+ --disable-postproc disable libpostproc build
135+ --disable-avfilter disable libavfilter build
136+ --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-dwt disable DWT code
141+ --disable-error-resilience disable error resilience code
142+ --disable-lsp disable LSP code
143+ --disable-faan disable floating point AAN (I)DCT code
144+ --disable-pixelutils disable pixel utils in libavutil
145+
146+Individual component options:
147+ --disable-everything disable all components listed below
148+ --disable-encoder=NAME disable encoder NAME
149+ --enable-encoder=NAME enable encoder NAME
150+ --disable-encoders disable all encoders
151+ --disable-decoder=NAME disable decoder NAME
152+ --enable-decoder=NAME enable decoder NAME
153+ --disable-decoders disable all decoders
154+ --disable-hwaccel=NAME disable hwaccel NAME
155+ --enable-hwaccel=NAME enable hwaccel NAME
156+ --disable-hwaccels disable all hwaccels
157+ --disable-muxer=NAME disable muxer NAME
158+ --enable-muxer=NAME enable muxer NAME
159+ --disable-muxers disable all muxers
160+ --disable-demuxer=NAME disable demuxer NAME
161+ --enable-demuxer=NAME enable demuxer NAME
162+ --disable-demuxers disable all demuxers
163+ --enable-parser=NAME enable parser NAME
164+ --disable-parser=NAME disable parser NAME
165+ --disable-parsers disable all parsers
166+ --enable-bsf=NAME enable bitstream filter NAME
167+ --disable-bsf=NAME disable bitstream filter NAME
168+ --disable-bsfs disable all bitstream filters
169+ --enable-protocol=NAME enable protocol NAME
170+ --disable-protocol=NAME disable protocol NAME
171+ --disable-protocols disable all protocols
172+ --enable-indev=NAME enable input device NAME
173+ --disable-indev=NAME disable input device NAME
174+ --disable-indevs disable input devices
175+ --enable-outdev=NAME enable output device NAME
176+ --disable-outdev=NAME disable output device NAME
177+ --disable-outdevs disable output devices
178+ --disable-devices disable all devices
179+ --enable-filter=NAME enable filter NAME
180+ --disable-filter=NAME disable filter NAME
181+ --disable-filters disable all filters
182+
183+External library support:
184+
185+ Using any of the following switches will allow FFmpeg to link to the
186+ corresponding external library. All the components depending on that library
187+ will become enabled, if all their other dependencies are met and they are not
188+ explicitly disabled. E.g. --enable-libopus will enable linking to
189+ libopus and allow the libopus encoder to be built, unless it is
190+ specifically disabled with --disable-encoder=libopus.
191+
192+ Note that only the system libraries are auto-detected. All the other external
193+ libraries must be explicitly enabled.
194+
195+ Also note that the following help text describes the purpose of the libraries
196+ themselves, not all their features will necessarily be usable by FFmpeg.
197+
198+ --disable-alsa disable ALSA support [autodetect]
199+ --disable-appkit disable Apple AppKit framework [autodetect]
200+ --disable-avfoundation disable Apple AVFoundation framework [autodetect]
201+ --enable-avisynth enable reading of AviSynth script files [no]
202+ --disable-bzlib disable bzlib [autodetect]
203+ --disable-coreimage disable Apple CoreImage framework [autodetect]
204+ --enable-chromaprint enable audio fingerprinting with chromaprint [no]
205+ --enable-frei0r enable frei0r video filtering [no]
206+ --enable-gcrypt enable gcrypt, needed for rtmp(t)e support
207+ if openssl, librtmp or gmp is not used [no]
208+ --enable-gmp enable gmp, needed for rtmp(t)e support
209+ if openssl or librtmp is not used [no]
210+ --enable-gnutls enable gnutls, needed for https support
211+ if openssl, libtls or mbedtls is not used [no]
212+ --disable-iconv disable iconv [autodetect]
213+ --enable-jni enable JNI support [no]
214+ --enable-ladspa enable LADSPA audio filtering [no]
215+ --enable-lcms2 enable ICC profile support via LittleCMS 2 [no]
216+ --enable-libaom enable AV1 video encoding/decoding via libaom [no]
217+ --enable-libaribb24 enable ARIB text and caption decoding via libaribb24 [no]
218+ --enable-libaribcaption enable ARIB text and caption decoding via libaribcaption [no]
219+ --enable-libass enable libass subtitles rendering,
220+ needed for subtitles and ass filter [no]
221+ --enable-libbluray enable BluRay reading using libbluray [no]
222+ --enable-libbs2b enable bs2b DSP library [no]
223+ --enable-libcaca enable textual display using libcaca [no]
224+ --enable-libcelt enable CELT decoding via libcelt [no]
225+ --enable-libcdio enable audio CD grabbing with libcdio [no]
226+ --enable-libcodec2 enable codec2 en/decoding using libcodec2 [no]
227+ --enable-libdav1d enable AV1 decoding via libdav1d [no]
228+ --enable-libdavs2 enable AVS2 decoding via libdavs2 [no]
229+ --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
230+ and libraw1394 [no]
231+ --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
232+ --enable-libflite enable flite (voice synthesis) support via libflite [no]
233+ --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
234+ --enable-libfreetype enable libfreetype, needed for drawtext filter [no]
235+ --enable-libfribidi enable libfribidi, improves drawtext filter [no]
236+ --enable-libharfbuzz enable libharfbuzz, needed for drawtext filter [no]
237+ --enable-libglslang enable GLSL->SPIRV compilation via libglslang [no]
238+ --enable-libgme enable Game Music Emu via libgme [no]
239+ --enable-libgsm enable GSM de/encoding via libgsm [no]
240+ --enable-libiec61883 enable iec61883 via libiec61883 [no]
241+ --enable-libilbc enable iLBC de/encoding via libilbc [no]
242+ --enable-libjack enable JACK audio sound server [no]
243+ --enable-libjxl enable JPEG XL de/encoding via libjxl [no]
244+ --enable-libklvanc enable Kernel Labs VANC processing [no]
245+ --enable-libkvazaar enable HEVC encoding via libkvazaar [no]
246+ --enable-liblensfun enable lensfun lens correction [no]
247+ --enable-libmodplug enable ModPlug via libmodplug [no]
248+ --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
249+ --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
250+ --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
251+ --enable-libopencv enable video filtering via libopencv [no]
252+ --enable-libopenh264 enable H.264 encoding via OpenH264 [no]
253+ --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
254+ --enable-libopenmpt enable decoding tracked files via libopenmpt [no]
255+ --enable-libopenvino enable OpenVINO as a DNN module backend
256+ for DNN based filters like dnn_processing [no]
257+ --enable-libopus enable Opus de/encoding via libopus [no]
258+ --enable-libplacebo enable libplacebo library [no]
259+ --enable-libpulse enable Pulseaudio input via libpulse [no]
260+ --enable-librabbitmq enable RabbitMQ library [no]
261+ --enable-librav1e enable AV1 encoding via rav1e [no]
262+ --enable-librist enable RIST via librist [no]
263+ --enable-librsvg enable SVG rasterization via librsvg [no]
264+ --enable-librubberband enable rubberband needed for rubberband filter [no]
265+ --enable-librtmp enable RTMP[E] support via librtmp [no]
266+ --enable-libshaderc enable GLSL->SPIRV compilation via libshaderc [no]
267+ --enable-libshine enable fixed-point MP3 encoding via libshine [no]
268+ --enable-libsmbclient enable Samba protocol via libsmbclient [no]
269+ --enable-libsnappy enable Snappy compression, needed for hap encoding [no]
270+ --enable-libsoxr enable Include libsoxr resampling [no]
271+ --enable-libspeex enable Speex de/encoding via libspeex [no]
272+ --enable-libsrt enable Haivision SRT protocol via libsrt [no]
273+ --enable-libssh enable SFTP protocol via libssh [no]
274+ --enable-libsvtav1 enable AV1 encoding via SVT [no]
275+ --enable-libtensorflow enable TensorFlow as a DNN module backend
276+ for DNN based filters like sr [no]
277+ --enable-libtesseract enable Tesseract, needed for ocr filter [no]
278+ --enable-libtheora enable Theora encoding via libtheora [no]
279+ --enable-libtls enable LibreSSL (via libtls), needed for https support
280+ if openssl, gnutls or mbedtls is not used [no]
281+ --enable-libtwolame enable MP2 encoding via libtwolame [no]
282+ --enable-libuavs3d enable AVS3 decoding via libuavs3d [no]
283+ --enable-libv4l2 enable libv4l2/v4l-utils [no]
284+ --enable-libvidstab enable video stabilization using vid.stab [no]
285+ --enable-libvmaf enable vmaf filter via libvmaf [no]
286+ --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
287+ --enable-libvorbis enable Vorbis en/decoding via libvorbis,
288+ native implementation exists [no]
289+ --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
290+ --enable-libwebp enable WebP encoding via libwebp [no]
291+ --enable-libx264 enable H.264 encoding via x264 [no]
292+ --enable-libx265 enable HEVC encoding via x265 [no]
293+ --enable-libxavs enable AVS encoding via xavs [no]
294+ --enable-libxavs2 enable AVS2 encoding via xavs2 [no]
295+ --enable-libxcb enable X11 grabbing using XCB [autodetect]
296+ --enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
297+ --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
298+ --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
299+ --enable-libxvid enable Xvid encoding via xvidcore,
300+ native MPEG-4/Xvid encoder exists [no]
301+ --enable-libxml2 enable XML parsing using the C library libxml2, needed
302+ for dash and imf demuxing support [no]
303+ --enable-libzimg enable z.lib, needed for zscale filter [no]
304+ --enable-libzmq enable message passing via libzmq [no]
305+ --enable-libzvbi enable teletext support via libzvbi [no]
306+ --enable-lv2 enable LV2 audio filtering [no]
307+ --disable-lzma disable lzma [autodetect]
308+ --enable-decklink enable Blackmagic DeckLink I/O support [no]
309+ --enable-mbedtls enable mbedTLS, needed for https support
310+ if openssl, gnutls or libtls is not used [no]
311+ --enable-mediacodec enable Android MediaCodec support [no]
312+ --enable-mediafoundation enable encoding via MediaFoundation [auto]
313+ --disable-metal disable Apple Metal framework [autodetect]
314+ --enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
315+ --enable-openal enable OpenAL 1.1 capture support [no]
316+ --enable-opencl enable OpenCL processing [no]
317+ --enable-opengl enable OpenGL rendering [no]
318+ --enable-openssl enable openssl, needed for https support
319+ if gnutls, libtls or mbedtls is not used [no]
320+ --enable-pocketsphinx enable PocketSphinx, needed for asr filter [no]
321+ --disable-sndio disable sndio support [autodetect]
322+ --disable-schannel disable SChannel SSP, needed for TLS support on
323+ Windows if openssl and gnutls are not used [autodetect]
324+ --disable-sdl2 disable sdl2 [autodetect]
325+ --disable-securetransport disable Secure Transport, needed for TLS support
326+ on OSX if openssl and gnutls are not used [autodetect]
327+ --enable-vapoursynth enable VapourSynth demuxer [no]
328+ --disable-xlib disable xlib [autodetect]
329+ --disable-zlib disable zlib [autodetect]
330+
331+ The following libraries provide various hardware acceleration features:
332+ --disable-amf disable AMF video encoding code [autodetect]
333+ --disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
334+ --enable-cuda-nvcc enable Nvidia CUDA compiler [no]
335+ --disable-cuda-llvm disable CUDA compilation using clang [autodetect]
336+ --disable-cuvid disable Nvidia CUVID support [autodetect]
337+ --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
338+ --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
339+ --disable-ffnvcodec disable dynamically linked Nvidia code [autodetect]
340+ --enable-libdrm enable DRM code (Linux) [no]
341+ --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
342+ --enable-libvpl enable Intel oneVPL code via libvpl if libmfx is not used [no]
343+ --enable-libnpp enable Nvidia Performance Primitives-based code [no]
344+ --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
345+ --disable-nvdec disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
346+ --disable-nvenc disable Nvidia video encoding code [autodetect]
347+ --enable-omx enable OpenMAX IL code [no]
348+ --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
349+ --enable-rkmpp enable Rockchip Media Process Platform code [no]
350+ --disable-v4l2-m2m disable V4L2 mem2mem code [autodetect]
351+ --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
352+ --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
353+ --disable-videotoolbox disable VideoToolbox code [autodetect]
354+ --disable-vulkan disable Vulkan code [autodetect]
355+
356+Toolchain options:
357+ --arch=ARCH select architecture [$arch]
358+ --cpu=CPU select the minimum required CPU (affects
359+ instruction selection, may crash on older CPUs)
360+ --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
361+ --progs-suffix=SUFFIX program name suffix []
362+ --enable-cross-compile assume a cross-compiler is used
363+ --sysroot=PATH root of cross-build tree
364+ --sysinclude=PATH location of cross-build system headers
365+ --target-os=OS compiler targets OS [$target_os]
366+ --target-exec=CMD command to run executables on target
367+ --target-path=DIR path to view of build directory on target
368+ --target-samples=DIR path to samples directory on target
369+ --tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
370+ --toolchain=NAME set tool defaults according to NAME
371+ (gcc-asan, clang-asan, gcc-msan, clang-msan,
372+ gcc-tsan, clang-tsan, gcc-usan, clang-usan,
373+ valgrind-massif, valgrind-memcheck,
374+ msvc, icl, gcov, llvm-cov, hardened)
375+ --nm=NM use nm tool NM [$nm_default]
376+ --ar=AR use archive tool AR [$ar_default]
377+ --as=AS use assembler AS [$as_default]
378+ --ln_s=LN_S use symbolic link tool LN_S [$ln_s_default]
379+ --strip=STRIP use strip tool STRIP [$strip_default]
380+ --windres=WINDRES use windows resource compiler WINDRES [$windres_default]
381+ --x86asmexe=EXE use nasm-compatible assembler EXE [$x86asmexe_default]
382+ --cc=CC use C compiler CC [$cc_default]
383+ --cxx=CXX use C compiler CXX [$cxx_default]
384+ --objcc=OCC use ObjC compiler OCC [$cc_default]
385+ --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
386+ --nvcc=NVCC use Nvidia CUDA compiler NVCC or clang [$nvcc_default]
387+ --ld=LD use linker LD [$ld_default]
388+ --metalcc=METALCC use metal compiler METALCC [$metalcc_default]
389+ --metallib=METALLIB use metal linker METALLIB [$metallib_default]
390+ --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
391+ --pkg-config-flags=FLAGS pass additional flags to pkgconf []
392+ --ranlib=RANLIB use ranlib RANLIB [$ranlib_default]
393+ --doxygen=DOXYGEN use DOXYGEN to generate API doc [$doxygen_default]
394+ --host-cc=HOSTCC use host C compiler HOSTCC
395+ --host-cflags=HCFLAGS use HCFLAGS when compiling for host
396+ --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
397+ --host-ld=HOSTLD use host linker HOSTLD
398+ --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
399+ --host-extralibs=HLIBS use libs HLIBS when linking for host
400+ --host-os=OS compiler host OS [$target_os]
401+ --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
402+ --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
403+ --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
404+ --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
405+ --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
406+ --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
407+ --extra-libs=ELIBS add ELIBS [$ELIBS]
408+ --extra-version=STRING version string suffix []
409+ --optflags=OPTFLAGS override optimization-related compiler flags
410+ --nvccflags=NVCCFLAGS override nvcc flags [$nvccflags_default]
411+ --build-suffix=SUFFIX library name suffix []
412+ --enable-pic build position-independent code
413+ --enable-thumb compile for Thumb instruction set
414+ --enable-lto[=arg] use link-time optimization
415+ --env="ENV=override" override the environment variables
416+
417+Advanced options (experts only):
418+ --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
419+ --custom-allocator=NAME use a supported custom allocator
420+ --disable-symver disable symbol versioning
421+ --enable-hardcoded-tables use hardcoded tables instead of runtime generation
422+ --disable-safe-bitstream-reader
423+ disable buffer boundary checking in bitreaders
424+ (This disables some security checks and can cause undefined behavior,
425+ crashes and arbitrary code execution, it may be faster, but
426+ should only be used with trusted input)
427+ --sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default]
428+
429+Optimization options (experts only):
430+ --disable-asm disable all assembly optimizations
431+ --disable-altivec disable AltiVec optimizations
432+ --disable-vsx disable VSX optimizations
433+ --disable-power8 disable POWER8 optimizations
434+ --disable-amd3dnow disable 3DNow! optimizations
435+ --disable-amd3dnowext disable 3DNow! extended optimizations
436+ --disable-mmx disable MMX optimizations
437+ --disable-mmxext disable MMXEXT optimizations
438+ --disable-sse disable SSE optimizations
439+ --disable-sse2 disable SSE2 optimizations
440+ --disable-sse3 disable SSE3 optimizations
441+ --disable-ssse3 disable SSSE3 optimizations
442+ --disable-sse4 disable SSE4 optimizations
443+ --disable-sse42 disable SSE4.2 optimizations
444+ --disable-avx disable AVX optimizations
445+ --disable-xop disable XOP optimizations
446+ --disable-fma3 disable FMA3 optimizations
447+ --disable-fma4 disable FMA4 optimizations
448+ --disable-avx2 disable AVX2 optimizations
449+ --disable-avx512 disable AVX-512 optimizations
450+ --disable-avx512icl disable AVX-512ICL optimizations
451+ --disable-aesni disable AESNI optimizations
452+ --disable-armv5te disable armv5te optimizations
453+ --disable-armv6 disable armv6 optimizations
454+ --disable-armv6t2 disable armv6t2 optimizations
455+ --disable-vfp disable VFP optimizations
456+ --disable-neon disable NEON optimizations
457+ --disable-dotprod disable DOTPROD optimizations
458+ --disable-i8mm disable I8MM optimizations
459+ --disable-inline-asm disable use of inline assembly
460+ --disable-x86asm disable use of standalone x86 assembly
461+ --disable-mipsdsp disable MIPS DSP ASE R1 optimizations
462+ --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
463+ --disable-msa disable MSA optimizations
464+ --disable-mipsfpu disable floating point MIPS optimizations
465+ --disable-mmi disable Loongson MMI optimizations
466+ --disable-lsx disable Loongson LSX optimizations
467+ --disable-lasx disable Loongson LASX optimizations
468+ --disable-rvv disable RISC-V Vector optimizations
469+ --disable-fast-unaligned consider unaligned accesses slow
470+
471+Developer options (useful when working on FFmpeg itself):
472+ --disable-debug disable debugging symbols
473+ --enable-debug=LEVEL set the debug level [$debuglevel]
474+ --disable-optimizations disable compiler optimizations
475+ --enable-extra-warnings enable more compiler warnings
476+ --disable-stripping disable stripping of executables and shared libraries
477+ --assert-level=level 0(default), 1 or 2, amount of assertion testing,
478+ 2 causes a slowdown at runtime.
479+ --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
480+ --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
481+ leaks and errors, using the specified valgrind binary.
482+ Cannot be combined with --target-exec
483+ --enable-ftrapv Trap arithmetic overflows
484+ --samples=PATH location of test samples for FATE, if not set use
485+ \$FATE_SAMPLES at make invocation time.
486+ --enable-neon-clobber-test check NEON registers for clobbering (should be
487+ used only for debugging purposes)
488+ --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
489+ should be used only for debugging purposes)
490+ --enable-random randomly enable/disable components
491+ --disable-random
492+ --enable-random=LIST randomly enable/disable specific components or
493+ --disable-random=LIST component groups. LIST is a comma-separated list
494+ of NAME[:PROB] entries where NAME is a component
495+ (group) and PROB the probability associated with
496+ NAME (default 0.5).
497+ --random-seed=VALUE seed value for --enable/disable-random
498+ --disable-valgrind-backtrace do not print a backtrace under Valgrind
499+ (only applies to --disable-optimizations builds)
500+ --enable-ossfuzz Enable building fuzzer tool
501+ --libfuzzer=PATH path to libfuzzer
502+ --ignore-tests=TESTS comma-separated list (without "fate-" prefix
503+ in the name) of tests whose result is ignored
504+ --enable-linux-perf enable Linux Performance Monitor API
505+ --enable-macos-kperf enable macOS kperf (private) API
506+ --disable-large-tests disable tests that use a large amount of memory
507+ --disable-ptx-compression don't compress CUDA PTX code even when possible
508+
509+NOTE: Object files are built at the place where configure is launched.
510+EOF
511+ exit 0
512+}
513+
514+if test -t 1 && which tput >/dev/null 2>&1; then
515+ ncolors=$(tput colors)
516+ if test -n "$ncolors" && test $ncolors -ge 8; then
517+ bold_color=$(tput bold)
518+ warn_color=$(tput setaf 3)
519+ error_color=$(tput setaf 1)
520+ reset_color=$(tput sgr0)
521+ fi
522+ # 72 used instead of 80 since that's the default of pr
523+ ncols=$(tput cols)
524+fi
525+: ${ncols:=72}
526+
527+log(){
528+ echo "$@" >> $logfile
529+}
530+
531+log_file(){
532+ log BEGIN "$1"
533+ log_file_i=1
534+ while IFS= read -r log_file_line; do
535+ printf '%5d\t%s\n' "$log_file_i" "$log_file_line"
536+ log_file_i=$(($log_file_i+1))
537+ done < "$1" >> "$logfile"
538+ log END "$1"
539+}
540+
541+warn(){
542+ log "WARNING: $*"
543+ WARNINGS="${WARNINGS}WARNING: $*\n"
544+}
545+
546+die(){
547+ log "$@"
548+ echo "$error_color$bold_color$@$reset_color"
549+ cat <<EOF
550+
551+If you think configure made a mistake, make sure you are using the latest
552+version from Git. If the latest version fails, report the problem to the
553+ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
554+EOF
555+ if disabled logging; then
556+ cat <<EOF
557+Rerun configure with logging enabled (do not use --disable-logging), and
558+include the log this produces with your report.
559+EOF
560+ else
561+ cat <<EOF
562+Include the log file "$logfile" produced by configure as this will help
563+solve the problem.
564+EOF
565+ fi
566+ exit 1
567+}
568+
569+# Avoid locale weirdness, besides we really just want to translate ASCII.
570+toupper(){
571+ echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
572+}
573+
574+tolower(){
575+ echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
576+}
577+
578+c_escape(){
579+ echo "$*" | sed 's/["\\]/\\\0/g'
580+}
581+
582+sh_quote(){
583+ v=$(echo "$1" | sed "s/'/'\\\\''/g")
584+ test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
585+ echo "$v"
586+}
587+
588+cleanws(){
589+ echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
590+}
591+
592+filter(){
593+ pat=$1
594+ shift
595+ for v; do
596+ eval "case '$v' in $pat) printf '%s ' '$v' ;; esac"
597+ done
598+}
599+
600+filter_out(){
601+ pat=$1
602+ shift
603+ for v; do
604+ eval "case '$v' in $pat) ;; *) printf '%s ' '$v' ;; esac"
605+ done
606+}
607+
608+map(){
609+ m=$1
610+ shift
611+ for v; do eval $m; done
612+}
613+
614+add_suffix(){
615+ suffix=$1
616+ shift
617+ for v; do echo ${v}${suffix}; done
618+}
619+
620+remove_suffix(){
621+ suffix=$1
622+ shift
623+ for v; do echo ${v%$suffix}; done
624+}
625+
626+set_all(){
627+ value=$1
628+ shift
629+ for var in $*; do
630+ eval $var=$value
631+ done
632+}
633+
634+set_weak(){
635+ value=$1
636+ shift
637+ for var; do
638+ eval : \${$var:=$value}
639+ done
640+}
641+
642+sanitize_var_name(){
643+ echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
644+}
645+
646+set_sanitized(){
647+ var=$1
648+ shift
649+ eval $(sanitize_var_name "$var")='$*'
650+}
651+
652+get_sanitized(){
653+ eval echo \$$(sanitize_var_name "$1")
654+}
655+
656+pushvar(){
657+ for pvar in $*; do
658+ eval level=\${${pvar}_level:=0}
659+ eval ${pvar}_${level}="\$$pvar"
660+ eval ${pvar}_level=$(($level+1))
661+ done
662+}
663+
664+popvar(){
665+ for pvar in $*; do
666+ eval level=\${${pvar}_level:-0}
667+ test $level = 0 && continue
668+ eval level=$(($level-1))
669+ eval $pvar="\${${pvar}_${level}}"
670+ eval ${pvar}_level=$level
671+ eval unset ${pvar}_${level}
672+ done
673+}
674+
675+request(){
676+ for var in $*; do
677+ eval ${var}_requested=yes
678+ eval $var=
679+ done
680+}
681+
682+warn_if_gets_disabled(){
683+ for var in $*; do
684+ WARN_IF_GETS_DISABLED_LIST="$WARN_IF_GETS_DISABLED_LIST $var"
685+ done
686+}
687+
688+enable(){
689+ set_all yes $*
690+}
691+
692+disable(){
693+ set_all no $*
694+}
695+
696+disable_with_reason(){
697+ disable $1
698+ eval "${1}_disable_reason=\"$2\""
699+ if requested $1; then
700+ die "ERROR: $1 requested, but $2"
701+ fi
702+}
703+
704+enable_weak(){
705+ set_weak yes $*
706+}
707+
708+disable_weak(){
709+ set_weak no $*
710+}
711+
712+enable_sanitized(){
713+ for var; do
714+ enable $(sanitize_var_name $var)
715+ done
716+}
717+
718+disable_sanitized(){
719+ for var; do
720+ disable $(sanitize_var_name $var)
721+ done
722+}
723+
724+do_enable_deep(){
725+ for var; do
726+ enabled $var && continue
727+ set -- $var
728+ eval enable_deep \$${var}_select
729+ var=$1
730+ eval enable_deep_weak \$${var}_suggest
731+ done
732+}
733+
734+enable_deep(){
735+ do_enable_deep $*
736+ enable $*
737+}
738+
739+enable_deep_weak(){
740+ for var; do
741+ disabled $var && continue
742+ set -- $var
743+ do_enable_deep $var
744+ var=$1
745+ enable_weak $var
746+ done
747+}
748+
749+requested(){
750+ test "${1#!}" = "$1" && op="=" || op="!="
751+ eval test "x\$${1#!}_requested" $op "xyes"
752+}
753+
754+enabled(){
755+ test "${1#!}" = "$1" && op="=" || op="!="
756+ eval test "x\$${1#!}" $op "xyes"
757+}
758+
759+disabled(){
760+ test "${1#!}" = "$1" && op="=" || op="!="
761+ eval test "x\$${1#!}" $op "xno"
762+}
763+
764+enabled_all(){
765+ for opt; do
766+ enabled $opt || return 1
767+ done
768+}
769+
770+disabled_all(){
771+ for opt; do
772+ disabled $opt || return 1
773+ done
774+}
775+
776+enabled_any(){
777+ for opt; do
778+ enabled $opt && return 0
779+ done
780+}
781+
782+disabled_any(){
783+ for opt; do
784+ disabled $opt && return 0
785+ done
786+ return 1
787+}
788+
789+set_default(){
790+ for opt; do
791+ eval : \${$opt:=\$${opt}_default}
792+ done
793+}
794+
795+is_in(){
796+ value=$1
797+ shift
798+ for var in $*; do
799+ [ $var = $value ] && return 0
800+ done
801+ return 1
802+}
803+
804+# The cfg loop is very hot (several thousands iterations), and in bash also
805+# potentialy quite slow. Try to abort the iterations early, preferably without
806+# calling functions. 70%+ of the time cfg is already done or without deps.
807+check_deps(){
808+ for cfg; do
809+ eval [ x\$${cfg}_checking = xdone ] && continue
810+ eval [ x\$${cfg}_checking = xinprogress ] && die "Circular dependency for $cfg."
811+
812+ eval "
813+ dep_all=\$${cfg}_deps
814+ dep_any=\$${cfg}_deps_any
815+ dep_con=\$${cfg}_conflict
816+ dep_sel=\$${cfg}_select
817+ dep_sgs=\$${cfg}_suggest
818+ dep_ifa=\$${cfg}_if
819+ dep_ifn=\$${cfg}_if_any
820+ "
821+
822+ # most of the time here $cfg has no deps - avoid costly no-op work
823+ if [ "$dep_all$dep_any$dep_con$dep_sel$dep_sgs$dep_ifa$dep_ifn" ]; then
824+ eval ${cfg}_checking=inprogress
825+
826+ set -- $cfg "$dep_all" "$dep_any" "$dep_con" "$dep_sel" "$dep_sgs" "$dep_ifa" "$dep_ifn"
827+ check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
828+ cfg=$1; dep_all=$2; dep_any=$3; dep_con=$4; dep_sel=$5 dep_sgs=$6; dep_ifa=$7; dep_ifn=$8
829+
830+ [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
831+ [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
832+ enabled_all $dep_all || { disable_with_reason $cfg "not all dependencies are satisfied: $dep_all"; }
833+ enabled_any $dep_any || { disable_with_reason $cfg "not any dependency is satisfied: $dep_any"; }
834+ disabled_all $dep_con || { disable_with_reason $cfg "some conflicting dependencies are unsatisfied: $dep_con"; }
835+ disabled_any $dep_sel && { disable_with_reason $cfg "some selected dependency is unsatisfied: $dep_sel"; }
836+
837+ enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
838+
839+ for dep in $dep_all $dep_any $dep_sel $dep_sgs; do
840+ # filter out library deps, these do not belong in extralibs
841+ is_in $dep $LIBRARY_LIST && continue
842+ enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
843+ done
844+ fi
845+
846+ eval ${cfg}_checking=done
847+ done
848+}
849+
850+print_config(){
851+ pfx=$1
852+ files=$2
853+ shift 2
854+ map 'eval echo "$v \${$v:-no}"' "$@" |
855+ awk "BEGIN { split(\"$files\", files) }
856+ {
857+ c = \"$pfx\" toupper(\$1);
858+ v = \$2;
859+ sub(/yes/, 1, v);
860+ sub(/no/, 0, v);
861+ for (f in files) {
862+ file = files[f];
863+ if (file ~ /\\.h\$/) {
864+ printf(\"#define %s %d\\n\", c, v) >>file;
865+ } else if (file ~ /\\.asm\$/) {
866+ printf(\"%%define %s %d\\n\", c, v) >>file;
867+ } else if (file ~ /\\.mak\$/) {
868+ n = -v ? \"\" : \"!\";
869+ printf(\"%s%s=yes\\n\", n, c) >>file;
870+ } else if (file ~ /\\.texi\$/) {
871+ pre = -v ? \"\" : \"@c \";
872+ yesno = \$2;
873+ c2 = tolower(c);
874+ gsub(/_/, \"-\", c2);
875+ printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
876+ }
877+ }
878+ }"
879+}
880+
881+print_enabled(){
882+ suf=$1
883+ shift
884+ for v; do
885+ enabled $v && printf "%s\n" ${v%$suf}
886+ done
887+}
888+
889+append(){
890+ var=$1
891+ shift
892+ eval "$var=\"\$$var $*\""
893+}
894+
895+prepend(){
896+ var=$1
897+ shift
898+ eval "$var=\"$* \$$var\""
899+}
900+
901+reverse () {
902+ eval '
903+ reverse_out=
904+ for v in $'$1'; do
905+ reverse_out="$v $reverse_out"
906+ done
907+ '$1'=$reverse_out
908+ '
909+}
910+
911+# keeps the last occurence of each non-unique item
912+unique(){
913+ unique_out=
914+ eval unique_in=\$$1
915+ reverse unique_in
916+ for v in $unique_in; do
917+ # " $unique_out" +space such that every item is surrounded with spaces
918+ case " $unique_out" in *" $v "*) continue; esac # already in list
919+ unique_out="$unique_out$v "
920+ done
921+ reverse unique_out
922+ eval $1=\$unique_out
923+}
924+
925+resolve(){
926+ resolve_out=
927+ eval resolve_in=\$$1
928+ for v in $resolve_in; do
929+ eval 'resolve_out="$resolve_out$'$v' "'
930+ done
931+ eval $1=\$resolve_out
932+}
933+
934+add_cppflags(){
935+ append CPPFLAGS "$@"
936+}
937+
938+add_cflags(){
939+ append CFLAGS $($cflags_filter "$@")
940+}
941+
942+add_cflags_headers(){
943+ append CFLAGS_HEADERS $($cflags_filter "$@")
944+}
945+
946+add_cxxflags(){
947+ append CXXFLAGS $($cflags_filter "$@")
948+}
949+
950+add_objcflags(){
951+ append OBJCFLAGS $($objcflags_filter "$@")
952+}
953+
954+add_asflags(){
955+ append ASFLAGS $($asflags_filter "$@")
956+}
957+
958+add_ldflags(){
959+ append LDFLAGS $($ldflags_filter "$@")
960+}
961+
962+add_ldexeflags(){
963+ append LDEXEFLAGS $($ldflags_filter "$@")
964+}
965+
966+add_ldsoflags(){
967+ append LDSOFLAGS $($ldflags_filter "$@")
968+}
969+
970+add_extralibs(){
971+ prepend extralibs $($ldflags_filter "$@")
972+}
973+
974+add_stripflags(){
975+ append ASMSTRIPFLAGS "$@"
976+}
977+
978+add_host_cppflags(){
979+ append host_cppflags "$@"
980+}
981+
982+add_host_cflags(){
983+ append host_cflags $($host_cflags_filter "$@")
984+}
985+
986+add_host_ldflags(){
987+ append host_ldflags $($host_ldflags_filter "$@")
988+}
989+
990+add_compat(){
991+ append compat_objs $1
992+ shift
993+ map 'add_cppflags -D$v' "$@"
994+}
995+
996+test_cmd(){
997+ log "$@"
998+ "$@" >> $logfile 2>&1
999+}
1000+
1001+test_stat(){
1002+ log test_stat "$@"
1003+ stat "$1" >> $logfile 2>&1
1004+}
1005+
1006+cc_e(){
1007+ eval printf '%s\\n' $CC_E
1008+}
1009+
1010+cc_o(){
1011+ eval printf '%s\\n' $CC_O
1012+}
1013+
1014+as_o(){
1015+ eval printf '%s\\n' $AS_O
1016+}
1017+
1018+x86asm_o(){
1019+ eval printf '%s\\n' $X86ASM_O
1020+}
1021+
1022+ld_o(){
1023+ eval printf '%s\\n' $LD_O
1024+}
1025+
1026+hostcc_e(){
1027+ eval printf '%s\\n' $HOSTCC_E
1028+}
1029+
1030+hostcc_o(){
1031+ eval printf '%s\\n' $HOSTCC_O
1032+}
1033+
1034+nvcc_o(){
1035+ eval printf '%s\\n' $NVCC_O
1036+}
1037+
1038+test_cc(){
1039+ log test_cc "$@"
1040+ cat > $TMPC
1041+ log_file $TMPC
1042+ test_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
1043+}
1044+
1045+test_cxx(){
1046+ log test_cxx "$@"
1047+ cat > $TMPCPP
1048+ log_file $TMPCPP
1049+ test_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
1050+}
1051+
1052+test_objcc(){
1053+ log test_objcc "$@"
1054+ cat > $TMPM
1055+ log_file $TMPM
1056+ test_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
1057+}
1058+
1059+test_nvcc(){
1060+ log test_nvcc "$@"
1061+ cat > $TMPCU
1062+ log_file $TMPCU
1063+ tmpcu_=$TMPCU
1064+ tmpo_=$TMPO
1065+ [ -x "$(command -v cygpath)" ] && tmpcu_=$(cygpath -m $tmpcu_) && tmpo_=$(cygpath -m $tmpo_)
1066+ test_cmd $nvcc $nvccflags "$@" $NVCC_C $(nvcc_o $tmpo_) $tmpcu_
1067+}
1068+
1069+check_nvcc() {
1070+ log check_nvcc "$@"
1071+ name=$1
1072+ shift 1
1073+ disabled $name && return
1074+ disable $name
1075+ test_nvcc "$@" <<EOF && enable $name
1076+extern "C" {
1077+ __global__ void hello(unsigned char *data) {}
1078+}
1079+EOF
1080+}
1081+
1082+test_cpp(){
1083+ log test_cpp "$@"
1084+ cat > $TMPC
1085+ log_file $TMPC
1086+ test_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
1087+}
1088+
1089+test_as(){
1090+ log test_as "$@"
1091+ cat > $TMPS
1092+ log_file $TMPS
1093+ test_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
1094+}
1095+
1096+test_x86asm(){
1097+ log test_x86asm "$@"
1098+ echo "$1" > $TMPASM
1099+ log_file $TMPASM
1100+ shift
1101+ test_cmd $x86asmexe $X86ASMFLAGS -Werror "$@" $(x86asm_o $TMPO) $TMPASM
1102+}
1103+
1104+check_cmd(){
1105+ log check_cmd "$@"
1106+ cmd=$1
1107+ disabled $cmd && return
1108+ disable $cmd
1109+ test_cmd $@ && enable $cmd
1110+}
1111+
1112+check_as(){
1113+ log check_as "$@"
1114+ name=$1
1115+ code=$2
1116+ shift 2
1117+ disable $name
1118+ test_as $@ <<EOF && enable $name
1119+$code
1120+EOF
1121+}
1122+
1123+check_inline_asm(){
1124+ log check_inline_asm "$@"
1125+ name="$1"
1126+ code="$2"
1127+ shift 2
1128+ disable $name
1129+ test_cc "$@" <<EOF && enable $name
1130+void foo(void){ __asm__ volatile($code); }
1131+EOF
1132+}
1133+
1134+check_inline_asm_flags(){
1135+ log check_inline_asm_flags "$@"
1136+ name="$1"
1137+ code="$2"
1138+ flags=''
1139+ shift 2
1140+ while [ "$1" != "" ]; do
1141+ append flags $1
1142+ shift
1143+ done;
1144+ disable $name
1145+ cat > $TMPC <<EOF
1146+void foo(void){ __asm__ volatile($code); }
1147+EOF
1148+ log_file $TMPC
1149+ test_cmd $cc $CPPFLAGS $CFLAGS $flags "$@" $CC_C $(cc_o $TMPO) $TMPC &&
1150+ enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
1151+}
1152+
1153+check_insn(){
1154+ log check_insn "$@"
1155+ check_inline_asm ${1}_inline "\"$2\""
1156+ check_as ${1}_external "$2"
1157+}
1158+
1159+check_arch_level(){
1160+ log check_arch_level "$@"
1161+ level="$1"
1162+ check_as tested_arch_level ".arch $level"
1163+ enabled tested_arch_level && as_arch_level="$level"
1164+}
1165+
1166+check_archext_insn(){
1167+ log check_archext_insn "$@"
1168+ feature="$1"
1169+ instr="$2"
1170+ # Check if the assembly is accepted in inline assembly.
1171+ check_inline_asm ${feature}_inline "\"$instr\""
1172+ # We don't check if the instruction is supported out of the box by the
1173+ # external assembler (we don't try to set ${feature}_external) as we don't
1174+ # need to use these instructions in non-runtime detected codepaths.
1175+
1176+ disable $feature
1177+
1178+ enabled as_arch_directive && arch_directive=".arch $as_arch_level" || arch_directive=""
1179+
1180+ # Test if the assembler supports the .arch_extension $feature directive.
1181+ arch_extension_directive=".arch_extension $feature"
1182+ test_as <<EOF && enable as_archext_${feature}_directive || arch_extension_directive=""
1183+$arch_directive
1184+$arch_extension_directive
1185+EOF
1186+
1187+ # Test if we can assemble the instruction after potential .arch and
1188+ # .arch_extension directives.
1189+ test_as <<EOF && enable ${feature}
1190+$arch_directive
1191+$arch_extension_directive
1192+$instr
1193+EOF
1194+}
1195+
1196+check_x86asm(){
1197+ log check_x86asm "$@"
1198+ name=$1
1199+ shift
1200+ disable $name
1201+ test_x86asm "$@" && enable $name
1202+}
1203+
1204+test_ld(){
1205+ log test_ld "$@"
1206+ type=$1
1207+ shift 1
1208+ flags=$(filter_out '-l*|*.so' $@)
1209+ libs=$(filter '-l*|*.so' $@)
1210+ test_$type $($cflags_filter $flags) || return
1211+ flags=$($ldflags_filter $flags)
1212+ libs=$($ldflags_filter $libs)
1213+ test_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
1214+}
1215+
1216+check_ld(){
1217+ log check_ld "$@"
1218+ type=$1
1219+ name=$2
1220+ shift 2
1221+ disable $name
1222+ test_ld $type $@ && enable $name
1223+}
1224+
1225+print_include(){
1226+ hdr=$1
1227+ test "${hdr%.h}" = "${hdr}" &&
1228+ echo "#include $hdr" ||
1229+ echo "#include <$hdr>"
1230+}
1231+
1232+test_code(){
1233+ log test_code "$@"
1234+ check=$1
1235+ headers=$2
1236+ code=$3
1237+ shift 3
1238+ {
1239+ for hdr in $headers; do
1240+ print_include $hdr
1241+ done
1242+ echo "int main(void) { $code; return 0; }"
1243+ } | test_$check "$@"
1244+}
1245+
1246+check_cppflags(){
1247+ log check_cppflags "$@"
1248+ test_cpp "$@" <<EOF && append CPPFLAGS "$@"
1249+#include <stdlib.h>
1250+EOF
1251+}
1252+
1253+test_cflags(){
1254+ log test_cflags "$@"
1255+ set -- $($cflags_filter "$@")
1256+ test_cc "$@" <<EOF
1257+int x;
1258+EOF
1259+}
1260+
1261+check_cflags(){
1262+ log check_cflags "$@"
1263+ test_cflags "$@" && add_cflags "$@"
1264+}
1265+
1266+check_cxxflags(){
1267+ log check_cxxflags "$@"
1268+ set -- $($cflags_filter "$@")
1269+ test_cxx "$@" <<EOF && append CXXFLAGS "$@"
1270+int x;
1271+EOF
1272+}
1273+
1274+test_objcflags(){
1275+ log test_objcflags "$@"
1276+ set -- $($objcflags_filter "$@")
1277+ test_objcc "$@" <<EOF
1278+int x;
1279+EOF
1280+}
1281+
1282+check_objcflags(){
1283+ log check_objcflags "$@"
1284+ test_objcflags "$@" && add_objcflags "$@"
1285+}
1286+
1287+test_ldflags(){
1288+ log test_ldflags "$@"
1289+ set -- $($ldflags_filter "$@")
1290+ test_ld "cc" "$@" <<EOF
1291+int main(void){ return 0; }
1292+EOF
1293+}
1294+
1295+check_ldflags(){
1296+ log check_ldflags "$@"
1297+ test_ldflags "$@" && add_ldflags "$@"
1298+}
1299+
1300+test_stripflags(){
1301+ log test_stripflags "$@"
1302+ # call test_cc to get a fresh TMPO
1303+ test_cc <<EOF
1304+int main(void) { return 0; }
1305+EOF
1306+ test_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
1307+}
1308+
1309+check_stripflags(){
1310+ log check_stripflags "$@"
1311+ test_stripflags "$@" && add_stripflags "$@"
1312+}
1313+
1314+check_headers(){
1315+ log check_headers "$@"
1316+ headers=$1
1317+ shift
1318+ disable_sanitized $headers
1319+ {
1320+ for hdr in $headers; do
1321+ print_include $hdr
1322+ done
1323+ echo "int x;"
1324+ } | test_cpp "$@" && enable_sanitized $headers
1325+}
1326+
1327+check_header_objcc(){
1328+ log check_header_objcc "$@"
1329+ rm -f -- "$TMPO"
1330+ header=$1
1331+ shift
1332+ disable_sanitized $header
1333+ {
1334+ echo "#include <$header>"
1335+ echo "int main(void) { return 0; }"
1336+ } | test_objcc && test_stat "$TMPO" && enable_sanitized $header
1337+}
1338+
1339+check_apple_framework(){
1340+ log check_apple_framework "$@"
1341+ framework="$1"
1342+ name="$(tolower $framework)"
1343+ header="${framework}/${framework}.h"
1344+ disable $name
1345+ check_header_objcc $header &&
1346+ enable $name && eval ${name}_extralibs='"-framework $framework"'
1347+}
1348+
1349+check_func(){
1350+ log check_func "$@"
1351+ func=$1
1352+ shift
1353+ disable $func
1354+ test_ld "cc" "$@" <<EOF && enable $func
1355+extern int $func();
1356+int main(void){ $func(); }
1357+EOF
1358+}
1359+
1360+check_mathfunc(){
1361+ log check_mathfunc "$@"
1362+ func=$1
1363+ narg=$2
1364+ shift 2
1365+ test $narg = 2 && args="f, g" || args="f"
1366+ disable $func
1367+ test_ld "cc" "$@" <<EOF && enable $func
1368+#include <math.h>
1369+float foo(float f, float g) { return $func($args); }
1370+int main(void){ return (int) foo; }
1371+EOF
1372+}
1373+
1374+check_func_headers(){
1375+ log check_func_headers "$@"
1376+ headers=$1
1377+ funcs=$2
1378+ shift 2
1379+ {
1380+ for hdr in $headers; do
1381+ print_include $hdr
1382+ done
1383+ echo "#include <stdint.h>"
1384+ for func in $funcs; do
1385+ echo "long check_$func(void) { return (long) $func; }"
1386+ done
1387+ echo "int main(void) { int ret = 0;"
1388+ # LTO could optimize out the test functions without this
1389+ for func in $funcs; do
1390+ echo " ret |= ((intptr_t)check_$func) & 0xFFFF;"
1391+ done
1392+ echo "return ret; }"
1393+ } | test_ld "cc" "$@" && enable $funcs && enable_sanitized $headers
1394+}
1395+
1396+check_class_headers_cpp(){
1397+ log check_class_headers_cpp "$@"
1398+ headers=$1
1399+ classes=$2
1400+ shift 2
1401+ {
1402+ for hdr in $headers; do
1403+ echo "#include <$hdr>"
1404+ done
1405+ echo "int main(void) { "
1406+ i=1
1407+ for class in $classes; do
1408+ echo "$class obj$i;"
1409+ i=$(expr $i + 1)
1410+ done
1411+ echo "return 0; }"
1412+ } | test_ld "cxx" "$@" && enable $funcs && enable_sanitized $headers
1413+}
1414+
1415+test_cpp_condition(){
1416+ log test_cpp_condition "$@"
1417+ header=$1
1418+ condition=$2
1419+ shift 2
1420+ test_cpp "$@" <<EOF
1421+#include <$header>
1422+#if !($condition)
1423+#error "unsatisfied condition: $condition"
1424+#endif
1425+EOF
1426+}
1427+
1428+check_cpp_condition(){
1429+ log check_cpp_condition "$@"
1430+ name=$1
1431+ shift 1
1432+ disable $name
1433+ test_cpp_condition "$@" && enable $name
1434+}
1435+
1436+test_cflags_cc(){
1437+ log test_cflags_cc "$@"
1438+ flags=$1
1439+ header=$2
1440+ condition=$3
1441+ shift 3
1442+ set -- $($cflags_filter "$flags")
1443+ test_cc "$@" <<EOF
1444+#include <$header>
1445+#if !($condition)
1446+#error "unsatisfied condition: $condition"
1447+#endif
1448+EOF
1449+}
1450+
1451+check_lib(){
1452+ log check_lib "$@"
1453+ name="$1"
1454+ headers="$2"
1455+ funcs="$3"
1456+ shift 3
1457+ disable $name
1458+ check_func_headers "$headers" "$funcs" "$@" &&
1459+ enable $name && eval ${name}_extralibs="\$@"
1460+}
1461+
1462+check_lib_cpp(){
1463+ log check_lib_cpp "$@"
1464+ name="$1"
1465+ headers="$2"
1466+ classes="$3"
1467+ shift 3
1468+ disable $name
1469+ check_class_headers_cpp "$headers" "$classes" "$@" &&
1470+ enable $name && eval ${name}_extralibs="\$@"
1471+}
1472+
1473+test_pkg_config(){
1474+ log test_pkg_config "$@"
1475+ name="$1"
1476+ pkg_version="$2"
1477+ pkg="${2%% *}"
1478+ headers="$3"
1479+ funcs="$4"
1480+ shift 4
1481+ disable $name
1482+ test_cmd $pkg_config --exists --print-errors $pkg_version || return
1483+ pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1484+ pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1485+ pkg_incdir=$($pkg_config --variable=includedir $pkg_config_flags $pkg)
1486+ check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1487+ enable $name &&
1488+ set_sanitized "${name}_cflags" $pkg_cflags &&
1489+ set_sanitized "${name}_incdir" $pkg_incdir &&
1490+ set_sanitized "${name}_extralibs" $pkg_libs
1491+}
1492+
1493+test_pkg_config_cpp(){
1494+ log test_pkg_config_cpp "$@"
1495+ name="$1"
1496+ pkg_version="$2"
1497+ pkg="${2%% *}"
1498+ headers="$3"
1499+ cond="$4"
1500+ shift 4
1501+ disable $name
1502+ test_cmd $pkg_config --exists --print-errors $pkg_version || return
1503+ pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1504+ pkg_incdir=$($pkg_config --variable=includedir $pkg_config_flags $pkg)
1505+ pkg_incflags=$($pkg_config --cflags-only-I $pkg_config_flags $pkg)
1506+ test_cpp_condition "$pkg_incdir/$headers" "$cond" "$@" &&
1507+ enable $name &&
1508+ set_sanitized "${name}_cflags" $pkg_cflags &&
1509+ set_sanitized "${name}_incdir" $pkg_incdir &&
1510+ set_sanitized "${name}_incflags" $pkg_incflags
1511+}
1512+
1513+check_pkg_config(){
1514+ log check_pkg_config "$@"
1515+ name="$1"
1516+ test_pkg_config "$@" &&
1517+ eval add_cflags \$${name}_cflags
1518+}
1519+
1520+check_pkg_config_cpp(){
1521+ log check_pkg_config_cpp "$@"
1522+ name="$1"
1523+ test_pkg_config_cpp "$@" &&
1524+ eval add_cflags \$${name}_cflags
1525+}
1526+
1527+check_pkg_config_header_only(){
1528+ log check_pkg_config_cpp "$@"
1529+ name="$1"
1530+ test_pkg_config_cpp "$@" &&
1531+ eval add_cflags \$${name}_incflags
1532+}
1533+
1534+test_exec(){
1535+ test_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1536+}
1537+
1538+check_exec_crash(){
1539+ log check_exec_crash "$@"
1540+ code=$(cat)
1541+
1542+ # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1543+ # are safe but may not be available everywhere. Thus we use
1544+ # raise(SIGTERM) instead. The check is run in a subshell so we
1545+ # can redirect the "Terminated" message from the shell. SIGBUS
1546+ # is not defined by standard C so it is used conditionally.
1547+
1548+ (test_exec "$@") >> $logfile 2>&1 <<EOF
1549+#include <signal.h>
1550+static void sighandler(int sig){
1551+ raise(SIGTERM);
1552+}
1553+int foo(void){
1554+ $code
1555+}
1556+int (*func_ptr)(void) = foo;
1557+int main(void){
1558+ signal(SIGILL, sighandler);
1559+ signal(SIGFPE, sighandler);
1560+ signal(SIGSEGV, sighandler);
1561+#ifdef SIGBUS
1562+ signal(SIGBUS, sighandler);
1563+#endif
1564+ return func_ptr();
1565+}
1566+EOF
1567+}
1568+
1569+check_type(){
1570+ log check_type "$@"
1571+ headers=$1
1572+ type=$2
1573+ shift 2
1574+ disable_sanitized "$type"
1575+ test_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
1576+}
1577+
1578+check_struct(){
1579+ log check_struct "$@"
1580+ headers=$1
1581+ struct=$2
1582+ member=$3
1583+ shift 3
1584+ disable_sanitized "${struct}_${member}"
1585+ test_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1586+ enable_sanitized "${struct}_${member}"
1587+}
1588+
1589+check_builtin(){
1590+ log check_builtin "$@"
1591+ name=$1
1592+ headers=$2
1593+ builtin=$3
1594+ shift 3
1595+ disable "$name"
1596+ test_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1597+}
1598+
1599+check_compile_assert(){
1600+ log check_compile_assert "$@"
1601+ name=$1
1602+ headers=$2
1603+ condition=$3
1604+ shift 3
1605+ disable "$name"
1606+ test_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1607+}
1608+
1609+check_cc(){
1610+ log check_cc "$@"
1611+ name=$1
1612+ shift
1613+ disable "$name"
1614+ test_code cc "$@" && enable "$name"
1615+}
1616+
1617+require(){
1618+ log require "$@"
1619+ name_version="$1"
1620+ name="${1%% *}"
1621+ shift
1622+ check_lib $name "$@" || die "ERROR: $name_version not found"
1623+}
1624+
1625+require_cc(){
1626+ log require_cc "$@"
1627+ name="$1"
1628+ check_cc "$@" || die "ERROR: $name failed"
1629+}
1630+
1631+require_cpp(){
1632+ log require_cpp "$@"
1633+ name_version="$1"
1634+ name="${1%% *}"
1635+ shift
1636+ check_lib_cpp "$name" "$@" || die "ERROR: $name_version not found"
1637+}
1638+
1639+require_headers(){
1640+ log require_headers "$@"
1641+ headers="$1"
1642+ check_headers "$@" || die "ERROR: $headers not found"
1643+}
1644+
1645+require_cpp_condition(){
1646+ log require_cpp_condition "$@"
1647+ condition="$3"
1648+ check_cpp_condition "$@" || die "ERROR: $condition not satisfied"
1649+}
1650+
1651+require_pkg_config(){
1652+ log require_pkg_config "$@"
1653+ pkg_version="$2"
1654+ check_pkg_config "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message"
1655+}
1656+
1657+require_pkg_config_cpp(){
1658+ log require_pkg_config_cpp "$@"
1659+ pkg_version="$2"
1660+ check_pkg_config_cpp "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message"
1661+}
1662+
1663+test_host_cc(){
1664+ log test_host_cc "$@"
1665+ cat > $TMPC
1666+ log_file $TMPC
1667+ test_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1668+}
1669+
1670+test_host_cpp(){
1671+ log test_host_cpp "$@"
1672+ cat > $TMPC
1673+ log_file $TMPC
1674+ test_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1675+}
1676+
1677+check_host_cppflags(){
1678+ log check_host_cppflags "$@"
1679+ test_host_cpp "$@" <<EOF && append host_cppflags "$@"
1680+#include <stdlib.h>
1681+EOF
1682+}
1683+
1684+check_host_cflags(){
1685+ log check_host_cflags "$@"
1686+ set -- $($host_cflags_filter "$@")
1687+ test_host_cc "$@" <<EOF && append host_cflags "$@"
1688+int x;
1689+EOF
1690+}
1691+
1692+test_host_cpp_condition(){
1693+ log test_host_cpp_condition "$@"
1694+ header=$1
1695+ condition=$2
1696+ shift 2
1697+ test_host_cpp "$@" <<EOF
1698+#include <$header>
1699+#if !($condition)
1700+#error "unsatisfied condition: $condition"
1701+#endif
1702+EOF
1703+}
1704+
1705+check_host_cpp_condition(){
1706+ log check_host_cpp_condition "$@"
1707+ name=$1
1708+ shift 1
1709+ disable $name
1710+ test_host_cpp_condition "$@" && enable $name
1711+}
1712+
1713+cp_if_changed(){
1714+ cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1715+ mkdir -p "$(dirname $2)"
1716+ cp -f "$1" "$2"
1717+}
1718+
1719+# CONFIG_LIST contains configurable options, while HAVE_LIST is for
1720+# system-dependent things.
1721+
1722+AVCODEC_COMPONENTS="
1723+ bsfs
1724+ decoders
1725+ encoders
1726+ hwaccels
1727+ parsers
1728+"
1729+
1730+AVDEVICE_COMPONENTS="
1731+ indevs
1732+ outdevs
1733+"
1734+
1735+AVFILTER_COMPONENTS="
1736+ filters
1737+"
1738+
1739+AVFORMAT_COMPONENTS="
1740+ demuxers
1741+ muxers
1742+ protocols
1743+"
1744+
1745+COMPONENT_LIST="
1746+ $AVCODEC_COMPONENTS
1747+ $AVDEVICE_COMPONENTS
1748+ $AVFILTER_COMPONENTS
1749+ $AVFORMAT_COMPONENTS
1750+"
1751+
1752+EXAMPLE_LIST="
1753+ avio_http_serve_files_example
1754+ avio_list_dir_example
1755+ avio_read_callback_example
1756+ decode_audio_example
1757+ decode_filter_audio_example
1758+ decode_filter_video_example
1759+ decode_video_example
1760+ demux_decode_example
1761+ encode_audio_example
1762+ encode_video_example
1763+ extract_mvs_example
1764+ filter_audio_example
1765+ hw_decode_example
1766+ mux_example
1767+ qsv_decode_example
1768+ remux_example
1769+ resample_audio_example
1770+ scale_video_example
1771+ show_metadata_example
1772+ transcode_aac_example
1773+ transcode_example
1774+ vaapi_encode_example
1775+ vaapi_transcode_example
1776+ qsv_transcode_example
1777+"
1778+
1779+EXTERNAL_AUTODETECT_LIBRARY_LIST="
1780+ alsa
1781+ appkit
1782+ avfoundation
1783+ bzlib
1784+ coreimage
1785+ iconv
1786+ libxcb
1787+ libxcb_shm
1788+ libxcb_shape
1789+ libxcb_xfixes
1790+ lzma
1791+ mediafoundation
1792+ metal
1793+ schannel
1794+ sdl2
1795+ securetransport
1796+ sndio
1797+ xlib
1798+ zlib
1799+"
1800+
1801+EXTERNAL_LIBRARY_GPL_LIST="
1802+ avisynth
1803+ frei0r
1804+ libcdio
1805+ libdavs2
1806+ librubberband
1807+ libvidstab
1808+ libx264
1809+ libx265
1810+ libxavs
1811+ libxavs2
1812+ libxvid
1813+"
1814+
1815+EXTERNAL_LIBRARY_NONFREE_LIST="
1816+ decklink
1817+ libfdk_aac
1818+ libtls
1819+"
1820+
1821+EXTERNAL_LIBRARY_VERSION3_LIST="
1822+ gmp
1823+ libaribb24
1824+ liblensfun
1825+ libopencore_amrnb
1826+ libopencore_amrwb
1827+ libvo_amrwbenc
1828+ mbedtls
1829+ rkmpp
1830+"
1831+
1832+EXTERNAL_LIBRARY_GPLV3_LIST="
1833+ libsmbclient
1834+"
1835+
1836+EXTERNAL_LIBRARY_LIST="
1837+ $EXTERNAL_LIBRARY_GPL_LIST
1838+ $EXTERNAL_LIBRARY_NONFREE_LIST
1839+ $EXTERNAL_LIBRARY_VERSION3_LIST
1840+ $EXTERNAL_LIBRARY_GPLV3_LIST
1841+ chromaprint
1842+ gcrypt
1843+ gnutls
1844+ jni
1845+ ladspa
1846+ lcms2
1847+ libaom
1848+ libaribcaption
1849+ libass
1850+ libbluray
1851+ libbs2b
1852+ libcaca
1853+ libcelt
1854+ libcodec2
1855+ libdav1d
1856+ libdc1394
1857+ libdrm
1858+ libflite
1859+ libfontconfig
1860+ libfreetype
1861+ libfribidi
1862+ libharfbuzz
1863+ libglslang
1864+ libgme
1865+ libgsm
1866+ libiec61883
1867+ libilbc
1868+ libjack
1869+ libjxl
1870+ libklvanc
1871+ libkvazaar
1872+ libmodplug
1873+ libmp3lame
1874+ libmysofa
1875+ libopencv
1876+ libopenh264
1877+ libopenjpeg
1878+ libopenmpt
1879+ libopenvino
1880+ libopus
1881+ libplacebo
1882+ libpulse
1883+ librabbitmq
1884+ librav1e
1885+ librist
1886+ librsvg
1887+ librtmp
1888+ libshaderc
1889+ libshine
1890+ libsmbclient
1891+ libsnappy
1892+ libsoxr
1893+ libspeex
1894+ libsrt
1895+ libssh
1896+ libsvtav1
1897+ libtensorflow
1898+ libtesseract
1899+ libtheora
1900+ libtwolame
1901+ libuavs3d
1902+ libv4l2
1903+ libvmaf
1904+ libvorbis
1905+ libvpx
1906+ libwebp
1907+ libxml2
1908+ libzimg
1909+ libzmq
1910+ libzvbi
1911+ lv2
1912+ mediacodec
1913+ openal
1914+ opengl
1915+ openssl
1916+ pocketsphinx
1917+ vapoursynth
1918+"
1919+
1920+HWACCEL_AUTODETECT_LIBRARY_LIST="
1921+ amf
1922+ audiotoolbox
1923+ crystalhd
1924+ cuda
1925+ cuda_llvm
1926+ cuvid
1927+ d3d11va
1928+ dxva2
1929+ ffnvcodec
1930+ nvdec
1931+ nvenc
1932+ vaapi
1933+ vdpau
1934+ videotoolbox
1935+ vulkan
1936+ v4l2_m2m
1937+"
1938+
1939+# catchall list of things that require external libs to link
1940+EXTRALIBS_LIST="
1941+ cpu_init
1942+ cws2fws
1943+"
1944+
1945+HWACCEL_LIBRARY_NONFREE_LIST="
1946+ cuda_nvcc
1947+ cuda_sdk
1948+ libnpp
1949+"
1950+
1951+HWACCEL_LIBRARY_LIST="
1952+ $HWACCEL_LIBRARY_NONFREE_LIST
1953+ libmfx
1954+ libvpl
1955+ mmal
1956+ omx
1957+ opencl
1958+"
1959+
1960+DOCUMENT_LIST="
1961+ doc
1962+ htmlpages
1963+ manpages
1964+ podpages
1965+ txtpages
1966+"
1967+
1968+FEATURE_LIST="
1969+ ftrapv
1970+ gray
1971+ hardcoded_tables
1972+ omx_rpi
1973+ runtime_cpudetect
1974+ safe_bitstream_reader
1975+ shared
1976+ small
1977+ static
1978+ swscale_alpha
1979+"
1980+
1981+# this list should be kept in linking order
1982+LIBRARY_LIST="
1983+ avdevice
1984+ avfilter
1985+ swscale
1986+ postproc
1987+ avformat
1988+ avcodec
1989+ swresample
1990+ avutil
1991+"
1992+
1993+LICENSE_LIST="
1994+ gpl
1995+ nonfree
1996+ version3
1997+"
1998+
1999+PROGRAM_LIST="
2000+ ffplay
2001+ ffprobe
2002+ ffmpeg
2003+"
2004+
2005+SUBSYSTEM_LIST="
2006+ dwt
2007+ error_resilience
2008+ faan
2009+ fast_unaligned
2010+ lsp
2011+ pixelutils
2012+ network
2013+"
2014+
2015+# COMPONENT_LIST needs to come last to ensure correct dependency checking
2016+CONFIG_LIST="
2017+ $DOCUMENT_LIST
2018+ $EXAMPLE_LIST
2019+ $EXTERNAL_LIBRARY_LIST
2020+ $EXTERNAL_AUTODETECT_LIBRARY_LIST
2021+ $HWACCEL_LIBRARY_LIST
2022+ $HWACCEL_AUTODETECT_LIBRARY_LIST
2023+ $FEATURE_LIST
2024+ $LICENSE_LIST
2025+ $LIBRARY_LIST
2026+ $PROGRAM_LIST
2027+ $SUBSYSTEM_LIST
2028+ autodetect
2029+ fontconfig
2030+ large_tests
2031+ linux_perf
2032+ macos_kperf
2033+ memory_poisoning
2034+ neon_clobber_test
2035+ ossfuzz
2036+ pic
2037+ ptx_compression
2038+ thumb
2039+ valgrind_backtrace
2040+ xmm_clobber_test
2041+ $COMPONENT_LIST
2042+"
2043+
2044+THREADS_LIST="
2045+ pthreads
2046+ os2threads
2047+ w32threads
2048+"
2049+
2050+ATOMICS_LIST="
2051+ atomics_gcc
2052+ atomics_suncc
2053+ atomics_win32
2054+"
2055+
2056+AUTODETECT_LIBS="
2057+ $EXTERNAL_AUTODETECT_LIBRARY_LIST
2058+ $HWACCEL_AUTODETECT_LIBRARY_LIST
2059+ $THREADS_LIST
2060+"
2061+
2062+ARCH_LIST="
2063+ aarch64
2064+ alpha
2065+ arm
2066+ avr32
2067+ avr32_ap
2068+ avr32_uc
2069+ bfin
2070+ ia64
2071+ loongarch
2072+ loongarch32
2073+ loongarch64
2074+ m68k
2075+ mips
2076+ mips64
2077+ parisc
2078+ ppc
2079+ ppc64
2080+ riscv
2081+ s390
2082+ sh4
2083+ sparc
2084+ sparc64
2085+ tilegx
2086+ tilepro
2087+ x86
2088+ x86_32
2089+ x86_64
2090+"
2091+
2092+ARCH_EXT_LIST_ARM="
2093+ armv5te
2094+ armv6
2095+ armv6t2
2096+ armv8
2097+ dotprod
2098+ i8mm
2099+ neon
2100+ vfp
2101+ vfpv3
2102+ setend
2103+"
2104+
2105+ARCH_EXT_LIST_MIPS="
2106+ mipsfpu
2107+ mips32r2
2108+ mips32r5
2109+ mips64r2
2110+ mips32r6
2111+ mips64r6
2112+ mipsdsp
2113+ mipsdspr2
2114+ msa
2115+"
2116+
2117+ARCH_EXT_LIST_LOONGSON="
2118+ loongson2
2119+ loongson3
2120+ mmi
2121+ lsx
2122+ lasx
2123+"
2124+
2125+ARCH_EXT_LIST_X86_SIMD="
2126+ aesni
2127+ amd3dnow
2128+ amd3dnowext
2129+ avx
2130+ avx2
2131+ avx512
2132+ avx512icl
2133+ fma3
2134+ fma4
2135+ mmx
2136+ mmxext
2137+ sse
2138+ sse2
2139+ sse3
2140+ sse4
2141+ sse42
2142+ ssse3
2143+ xop
2144+"
2145+
2146+ARCH_EXT_LIST_PPC="
2147+ altivec
2148+ dcbzl
2149+ ldbrx
2150+ power8
2151+ ppc4xx
2152+ vec_xl
2153+ vsx
2154+"
2155+
2156+ARCH_EXT_LIST_RISCV="
2157+ rv
2158+ rvv
2159+"
2160+
2161+ARCH_EXT_LIST_X86="
2162+ $ARCH_EXT_LIST_X86_SIMD
2163+ cpunop
2164+ i686
2165+"
2166+
2167+ARCH_EXT_LIST="
2168+ $ARCH_EXT_LIST_ARM
2169+ $ARCH_EXT_LIST_PPC
2170+ $ARCH_EXT_LIST_RISCV
2171+ $ARCH_EXT_LIST_X86
2172+ $ARCH_EXT_LIST_MIPS
2173+ $ARCH_EXT_LIST_LOONGSON
2174+"
2175+
2176+ARCH_FEATURES="
2177+ aligned_stack
2178+ fast_64bit
2179+ fast_clz
2180+ fast_cmov
2181+ fast_float16
2182+ local_aligned
2183+ simd_align_16
2184+ simd_align_32
2185+ simd_align_64
2186+"
2187+
2188+BUILTIN_LIST="
2189+ atomic_cas_ptr
2190+ machine_rw_barrier
2191+ MemoryBarrier
2192+ mm_empty
2193+ rdtsc
2194+ sem_timedwait
2195+ sync_val_compare_and_swap
2196+"
2197+HAVE_LIST_CMDLINE="
2198+ inline_asm
2199+ symver
2200+ x86asm
2201+"
2202+
2203+HAVE_LIST_PUB="
2204+ bigendian
2205+ fast_unaligned
2206+"
2207+
2208+HEADERS_LIST="
2209+ arpa_inet_h
2210+ asm_types_h
2211+ cdio_paranoia_h
2212+ cdio_paranoia_paranoia_h
2213+ cuda_h
2214+ dispatch_dispatch_h
2215+ dev_bktr_ioctl_bt848_h
2216+ dev_bktr_ioctl_meteor_h
2217+ dev_ic_bt8xx_h
2218+ dev_video_bktr_ioctl_bt848_h
2219+ dev_video_meteor_ioctl_meteor_h
2220+ direct_h
2221+ dirent_h
2222+ dxgidebug_h
2223+ dxva_h
2224+ ES2_gl_h
2225+ gsm_h
2226+ io_h
2227+ linux_dma_buf_h
2228+ linux_perf_event_h
2229+ machine_ioctl_bt848_h
2230+ machine_ioctl_meteor_h
2231+ malloc_h
2232+ opencv2_core_core_c_h
2233+ OpenGL_gl3_h
2234+ poll_h
2235+ pthread_np_h
2236+ sys_param_h
2237+ sys_resource_h
2238+ sys_select_h
2239+ sys_soundcard_h
2240+ sys_time_h
2241+ sys_un_h
2242+ sys_videoio_h
2243+ termios_h
2244+ udplite_h
2245+ unistd_h
2246+ valgrind_valgrind_h
2247+ windows_h
2248+ winsock2_h
2249+"
2250+
2251+INTRINSICS_LIST="
2252+ intrinsics_neon
2253+"
2254+
2255+MATH_FUNCS="
2256+ atanf
2257+ atan2f
2258+ cbrt
2259+ cbrtf
2260+ copysign
2261+ cosf
2262+ erf
2263+ exp2
2264+ exp2f
2265+ expf
2266+ hypot
2267+ isfinite
2268+ isinf
2269+ isnan
2270+ ldexpf
2271+ llrint
2272+ llrintf
2273+ log2
2274+ log2f
2275+ log10f
2276+ lrint
2277+ lrintf
2278+ powf
2279+ rint
2280+ round
2281+ roundf
2282+ sinf
2283+ trunc
2284+ truncf
2285+"
2286+
2287+SYSTEM_FEATURES="
2288+ dos_paths
2289+ libc_msvcrt
2290+ MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
2291+ section_data_rel_ro
2292+ threads
2293+ uwp
2294+ winrt
2295+"
2296+
2297+SYSTEM_FUNCS="
2298+ access
2299+ aligned_malloc
2300+ arc4random_buf
2301+ clock_gettime
2302+ closesocket
2303+ CommandLineToArgvW
2304+ fcntl
2305+ getaddrinfo
2306+ getauxval
2307+ getenv
2308+ gethrtime
2309+ getopt
2310+ GetModuleHandle
2311+ GetProcessAffinityMask
2312+ GetProcessMemoryInfo
2313+ GetProcessTimes
2314+ getrusage
2315+ GetStdHandle
2316+ GetSystemTimeAsFileTime
2317+ gettimeofday
2318+ glob
2319+ glXGetProcAddress
2320+ gmtime_r
2321+ inet_aton
2322+ isatty
2323+ kbhit
2324+ localtime_r
2325+ lstat
2326+ lzo1x_999_compress
2327+ mach_absolute_time
2328+ MapViewOfFile
2329+ memalign
2330+ mkstemp
2331+ mmap
2332+ mprotect
2333+ nanosleep
2334+ PeekNamedPipe
2335+ posix_memalign
2336+ prctl
2337+ pthread_cancel
2338+ pthread_set_name_np
2339+ pthread_setname_np
2340+ sched_getaffinity
2341+ SecItemImport
2342+ SetConsoleTextAttribute
2343+ SetConsoleCtrlHandler
2344+ SetDllDirectory
2345+ setmode
2346+ setrlimit
2347+ Sleep
2348+ strerror_r
2349+ sysconf
2350+ sysctl
2351+ sysctlbyname
2352+ usleep
2353+ UTGetOSTypeFromString
2354+ VirtualAlloc
2355+ wglGetProcAddress
2356+"
2357+
2358+SYSTEM_LIBRARIES="
2359+ bcrypt
2360+ vaapi_drm
2361+ vaapi_x11
2362+ vaapi_win32
2363+ vdpau_x11
2364+"
2365+
2366+TOOLCHAIN_FEATURES="
2367+ as_arch_directive
2368+ as_archext_dotprod_directive
2369+ as_archext_i8mm_directive
2370+ as_dn_directive
2371+ as_fpu_directive
2372+ as_func
2373+ as_object_arch
2374+ asm_mod_q
2375+ blocks_extension
2376+ ebp_available
2377+ ebx_available
2378+ gnu_as
2379+ gnu_windres
2380+ ibm_asm
2381+ inline_asm_direct_symbol_refs
2382+ inline_asm_labels
2383+ inline_asm_nonlocal_labels
2384+ pragma_deprecated
2385+ rsync_contimeout
2386+ symver_asm_label
2387+ symver_gnu_asm
2388+ vfp_args
2389+ xform_asm
2390+ xmm_clobbers
2391+"
2392+
2393+TYPES_LIST="
2394+ DPI_AWARENESS_CONTEXT
2395+ IDXGIOutput5
2396+ kCMVideoCodecType_HEVC
2397+ kCMVideoCodecType_HEVCWithAlpha
2398+ kCMVideoCodecType_VP9
2399+ kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange
2400+ kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange
2401+ kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange
2402+ kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange
2403+ kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange
2404+ kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange
2405+ kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange
2406+ kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ
2407+ kCVImageBufferTransferFunction_ITU_R_2100_HLG
2408+ kCVImageBufferTransferFunction_Linear
2409+ kCVImageBufferYCbCrMatrix_ITU_R_2020
2410+ kCVImageBufferColorPrimaries_ITU_R_2020
2411+ kCVImageBufferTransferFunction_ITU_R_2020
2412+ kCVImageBufferTransferFunction_SMPTE_ST_428_1
2413+ socklen_t
2414+ struct_addrinfo
2415+ struct_group_source_req
2416+ struct_ip_mreq_source
2417+ struct_ipv6_mreq
2418+ struct_msghdr_msg_flags
2419+ struct_pollfd
2420+ struct_rusage_ru_maxrss
2421+ struct_sctp_event_subscribe
2422+ struct_sockaddr_in6
2423+ struct_sockaddr_sa_len
2424+ struct_sockaddr_storage
2425+ struct_stat_st_mtim_tv_nsec
2426+ struct_v4l2_frmivalenum_discrete
2427+"
2428+
2429+HAVE_LIST="
2430+ $ARCH_EXT_LIST
2431+ $(add_suffix _external $ARCH_EXT_LIST)
2432+ $(add_suffix _inline $ARCH_EXT_LIST)
2433+ $ARCH_FEATURES
2434+ $BUILTIN_LIST
2435+ $HAVE_LIST_CMDLINE
2436+ $HAVE_LIST_PUB
2437+ $HEADERS_LIST
2438+ $INTRINSICS_LIST
2439+ $MATH_FUNCS
2440+ $SYSTEM_FEATURES
2441+ $SYSTEM_FUNCS
2442+ $SYSTEM_LIBRARIES
2443+ $THREADS_LIST
2444+ $TOOLCHAIN_FEATURES
2445+ $TYPES_LIST
2446+ gzip
2447+ libdrm_getfb2
2448+ makeinfo
2449+ makeinfo_html
2450+ opencl_d3d11
2451+ opencl_drm_arm
2452+ opencl_drm_beignet
2453+ opencl_dxva2
2454+ opencl_vaapi_beignet
2455+ opencl_vaapi_intel_media
2456+ perl
2457+ pod2man
2458+ posix_ioctl
2459+ texi2html
2460+ xmllint
2461+ zlib_gzip
2462+ openvino2
2463+"
2464+
2465+# options emitted with CONFIG_ prefix but not available on the command line
2466+CONFIG_EXTRA="
2467+ aandcttables
2468+ ac3dsp
2469+ adts_header
2470+ atsc_a53
2471+ audio_frame_queue
2472+ audiodsp
2473+ blockdsp
2474+ bswapdsp
2475+ cabac
2476+ cbs
2477+ cbs_av1
2478+ cbs_h264
2479+ cbs_h265
2480+ cbs_h266
2481+ cbs_jpeg
2482+ cbs_mpeg2
2483+ cbs_vp9
2484+ deflate_wrapper
2485+ dirac_parse
2486+ dnn
2487+ dovi_rpu
2488+ dvprofile
2489+ evcparse
2490+ exif
2491+ faandct
2492+ faanidct
2493+ fdctdsp
2494+ fmtconvert
2495+ frame_thread_encoder
2496+ g722dsp
2497+ golomb
2498+ gplv3
2499+ h263dsp
2500+ h264chroma
2501+ h264dsp
2502+ h264parse
2503+ h264pred
2504+ h264qpel
2505+ h264_sei
2506+ hevcparse
2507+ hevc_sei
2508+ hpeldsp
2509+ huffman
2510+ huffyuvdsp
2511+ huffyuvencdsp
2512+ idctdsp
2513+ iirfilter
2514+ inflate_wrapper
2515+ intrax8
2516+ iso_media
2517+ ividsp
2518+ jpegtables
2519+ lgplv3
2520+ libx262
2521+ llauddsp
2522+ llviddsp
2523+ llvidencdsp
2524+ lpc
2525+ lzf
2526+ me_cmp
2527+ mpeg_er
2528+ mpegaudio
2529+ mpegaudiodsp
2530+ mpegaudioheader
2531+ mpeg4audio
2532+ mpegvideo
2533+ mpegvideodec
2534+ mpegvideoenc
2535+ msmpeg4dec
2536+ msmpeg4enc
2537+ mss34dsp
2538+ pixblockdsp
2539+ qpeldsp
2540+ qsv
2541+ qsvdec
2542+ qsvenc
2543+ qsvvpp
2544+ rangecoder
2545+ riffdec
2546+ riffenc
2547+ rtpdec
2548+ rtpenc_chain
2549+ rv34dsp
2550+ scene_sad
2551+ sinewin
2552+ snappy
2553+ srtp
2554+ startcode
2555+ texturedsp
2556+ texturedspenc
2557+ tpeldsp
2558+ vaapi_1
2559+ vaapi_encode
2560+ vc1dsp
2561+ videodsp
2562+ vp3dsp
2563+ vp56dsp
2564+ vp8dsp
2565+ wma_freqs
2566+ wmv2dsp
2567+"
2568+
2569+CMDLINE_SELECT="
2570+ $ARCH_EXT_LIST
2571+ $CONFIG_LIST
2572+ $HAVE_LIST_CMDLINE
2573+ $THREADS_LIST
2574+ asm
2575+ cross_compile
2576+ debug
2577+ extra_warnings
2578+ logging
2579+ optimizations
2580+ rpath
2581+ stripping
2582+"
2583+
2584+PATHS_LIST="
2585+ bindir
2586+ datadir
2587+ docdir
2588+ incdir
2589+ libdir
2590+ mandir
2591+ pkgconfigdir
2592+ prefix
2593+ shlibdir
2594+ install_name_dir
2595+"
2596+
2597+CMDLINE_SET="
2598+ $PATHS_LIST
2599+ ar
2600+ arch
2601+ as
2602+ assert_level
2603+ build_suffix
2604+ cc
2605+ objcc
2606+ cpu
2607+ cross_prefix
2608+ custom_allocator
2609+ cxx
2610+ dep_cc
2611+ doxygen
2612+ env
2613+ extra_version
2614+ gas
2615+ host_cc
2616+ host_cflags
2617+ host_extralibs
2618+ host_ld
2619+ host_ldflags
2620+ host_os
2621+ ignore_tests
2622+ install
2623+ ld
2624+ ln_s
2625+ logfile
2626+ malloc_prefix
2627+ metalcc
2628+ metallib
2629+ nm
2630+ optflags
2631+ nvcc
2632+ nvccflags
2633+ pkg_config
2634+ pkg_config_flags
2635+ progs_suffix
2636+ random_seed
2637+ ranlib
2638+ samples
2639+ strip
2640+ sws_max_filter_size
2641+ sysinclude
2642+ sysroot
2643+ target_exec
2644+ target_os
2645+ target_path
2646+ target_samples
2647+ tempprefix
2648+ toolchain
2649+ valgrind
2650+ windres
2651+ x86asmexe
2652+"
2653+
2654+CMDLINE_APPEND="
2655+ extra_cflags
2656+ extra_cxxflags
2657+ extra_objcflags
2658+ host_cppflags
2659+"
2660+
2661+# code dependency declarations
2662+
2663+# architecture extensions
2664+
2665+armv5te_deps="arm"
2666+armv6_deps="arm"
2667+armv6t2_deps="arm"
2668+armv8_deps="aarch64"
2669+neon_deps_any="aarch64 arm"
2670+intrinsics_neon_deps="neon"
2671+vfp_deps="arm"
2672+vfpv3_deps="vfp"
2673+setend_deps="arm"
2674+dotprod_deps="aarch64 neon"
2675+i8mm_deps="aarch64 neon"
2676+
2677+map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2678+
2679+altivec_deps="ppc"
2680+dcbzl_deps="ppc"
2681+ldbrx_deps="ppc"
2682+ppc4xx_deps="ppc"
2683+vec_xl_deps="altivec"
2684+vsx_deps="altivec"
2685+power8_deps="vsx"
2686+
2687+rv_deps="riscv"
2688+rvv_deps="rv"
2689+
2690+loongson2_deps="mips"
2691+loongson3_deps="mips"
2692+mmi_deps_any="loongson2 loongson3"
2693+lsx_deps="loongarch"
2694+lasx_deps="lsx"
2695+
2696+mips32r2_deps="mips"
2697+mips32r5_deps="mips"
2698+mips32r6_deps="mips"
2699+mips64r2_deps="mips"
2700+mips64r6_deps="mips"
2701+mipsfpu_deps="mips"
2702+mipsdsp_deps="mips"
2703+mipsdspr2_deps="mips"
2704+msa_deps="mipsfpu"
2705+
2706+cpunop_deps="i686"
2707+x86_64_select="i686"
2708+x86_64_suggest="fast_cmov"
2709+
2710+amd3dnow_deps="mmx"
2711+amd3dnowext_deps="amd3dnow"
2712+i686_deps="x86"
2713+mmx_deps="x86"
2714+mmxext_deps="mmx"
2715+sse_deps="mmxext"
2716+sse2_deps="sse"
2717+sse3_deps="sse2"
2718+ssse3_deps="sse3"
2719+sse4_deps="ssse3"
2720+sse42_deps="sse4"
2721+aesni_deps="sse42"
2722+avx_deps="sse42"
2723+xop_deps="avx"
2724+fma3_deps="avx"
2725+fma4_deps="avx"
2726+avx2_deps="avx"
2727+avx512_deps="avx2"
2728+avx512icl_deps="avx512"
2729+
2730+mmx_external_deps="x86asm"
2731+mmx_inline_deps="inline_asm x86"
2732+mmx_suggest="mmx_external mmx_inline"
2733+
2734+for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2735+ eval dep=\$${ext}_deps
2736+ eval ${ext}_external_deps='"${dep}_external"'
2737+ eval ${ext}_inline_deps='"${dep}_inline"'
2738+ eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2739+done
2740+
2741+aligned_stack_if_any="aarch64 ppc x86"
2742+fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 riscv64 sparc64 x86_64"
2743+fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2744+fast_unaligned_if_any="aarch64 ppc x86"
2745+simd_align_16_if_any="altivec neon sse"
2746+simd_align_32_if_any="avx"
2747+simd_align_64_if_any="avx512"
2748+
2749+# system capabilities
2750+linux_perf_deps="linux_perf_event_h"
2751+symver_if_any="symver_asm_label symver_gnu_asm"
2752+valgrind_backtrace_conflict="optimizations"
2753+valgrind_backtrace_deps="valgrind_valgrind_h"
2754+
2755+# threading support
2756+atomics_gcc_if="sync_val_compare_and_swap"
2757+atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2758+atomics_win32_if="MemoryBarrier"
2759+atomics_native_if_any="$ATOMICS_LIST"
2760+w32threads_deps="atomics_native"
2761+threads_if_any="$THREADS_LIST"
2762+
2763+# subsystems
2764+cbs_av1_select="cbs"
2765+cbs_h264_select="cbs"
2766+cbs_h265_select="cbs"
2767+cbs_h266_select="cbs"
2768+cbs_jpeg_select="cbs"
2769+cbs_mpeg2_select="cbs"
2770+cbs_vp9_select="cbs"
2771+deflate_wrapper_deps="zlib"
2772+dirac_parse_select="golomb"
2773+dovi_rpu_select="golomb"
2774+dnn_suggest="libtensorflow libopenvino"
2775+dnn_deps="avformat swscale"
2776+error_resilience_select="me_cmp"
2777+evcparse_select="golomb"
2778+faandct_deps="faan"
2779+faandct_select="fdctdsp"
2780+faanidct_deps="faan"
2781+faanidct_select="idctdsp"
2782+h264dsp_select="startcode"
2783+h264_sei_select="atsc_a53 golomb"
2784+hevcparse_select="golomb"
2785+hevc_sei_select="atsc_a53 golomb"
2786+frame_thread_encoder_deps="encoders threads"
2787+inflate_wrapper_deps="zlib"
2788+intrax8_select="blockdsp wmv2dsp"
2789+iso_media_select="mpeg4audio"
2790+me_cmp_select="idctdsp"
2791+mpeg_er_select="error_resilience"
2792+mpegaudio_select="mpegaudiodsp mpegaudioheader"
2793+mpegvideo_select="blockdsp hpeldsp idctdsp videodsp"
2794+mpegvideodec_select="h264chroma mpegvideo mpeg_er"
2795+mpegvideoenc_select="aandcttables fdctdsp me_cmp mpegvideo pixblockdsp"
2796+msmpeg4dec_select="h263_decoder"
2797+msmpeg4enc_select="h263_encoder"
2798+vc1dsp_select="h264chroma qpeldsp startcode"
2799+
2800+# decoders / encoders
2801+aac_decoder_select="adts_header mpeg4audio sinewin"
2802+aac_fixed_decoder_select="adts_header mpeg4audio"
2803+aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
2804+aac_latm_decoder_select="aac_decoder aac_latm_parser"
2805+ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert"
2806+ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp"
2807+ac3_encoder_select="ac3dsp audiodsp me_cmp"
2808+ac3_fixed_encoder_select="ac3dsp audiodsp me_cmp"
2809+acelp_kelvin_decoder_select="audiodsp"
2810+adpcm_g722_decoder_select="g722dsp"
2811+adpcm_g722_encoder_select="g722dsp"
2812+agm_decoder_select="idctdsp"
2813+aic_decoder_select="golomb idctdsp"
2814+alac_encoder_select="lpc"
2815+als_decoder_select="bswapdsp mpeg4audio"
2816+amrnb_decoder_select="lsp"
2817+amrwb_decoder_select="lsp"
2818+amv_decoder_select="sp5x_decoder exif"
2819+amv_encoder_select="jpegtables mpegvideoenc"
2820+ape_decoder_select="bswapdsp llauddsp"
2821+apng_decoder_select="inflate_wrapper"
2822+apng_encoder_select="deflate_wrapper llvidencdsp"
2823+aptx_encoder_select="audio_frame_queue"
2824+aptx_hd_encoder_select="audio_frame_queue"
2825+asv1_decoder_select="blockdsp bswapdsp idctdsp"
2826+asv1_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
2827+asv2_decoder_select="blockdsp bswapdsp idctdsp"
2828+asv2_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
2829+atrac1_decoder_select="sinewin"
2830+av1_decoder_select="cbs_av1 atsc_a53"
2831+bink_decoder_select="blockdsp hpeldsp"
2832+binkaudio_dct_decoder_select="wma_freqs"
2833+binkaudio_rdft_decoder_select="wma_freqs"
2834+cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2835+clearvideo_decoder_select="idctdsp"
2836+cllc_decoder_select="bswapdsp"
2837+comfortnoise_encoder_select="lpc"
2838+cook_decoder_select="audiodsp sinewin"
2839+cri_decoder_select="mjpeg_decoder"
2840+cscd_decoder_suggest="zlib"
2841+dds_decoder_select="texturedsp"
2842+dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
2843+dnxhd_decoder_select="blockdsp idctdsp"
2844+dnxhd_encoder_select="blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp videodsp"
2845+dvvideo_decoder_select="dvprofile idctdsp"
2846+dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2847+dxa_decoder_deps="zlib"
2848+dxv_decoder_select="lzf texturedsp"
2849+eac3_decoder_select="ac3_decoder"
2850+eac3_encoder_select="ac3_encoder"
2851+eamad_decoder_select="aandcttables blockdsp bswapdsp"
2852+eatgq_decoder_select="aandcttables"
2853+eatqi_decoder_select="aandcttables blockdsp bswapdsp"
2854+exr_decoder_deps="zlib"
2855+exr_encoder_deps="zlib"
2856+ffv1_decoder_select="rangecoder"
2857+ffv1_encoder_select="rangecoder"
2858+ffvhuff_decoder_select="huffyuv_decoder"
2859+ffvhuff_encoder_select="huffyuv_encoder"
2860+fic_decoder_select="golomb"
2861+flac_encoder_select="bswapdsp lpc"
2862+flashsv2_decoder_select="inflate_wrapper"
2863+flashsv2_encoder_select="deflate_wrapper"
2864+flashsv_decoder_select="inflate_wrapper"
2865+flashsv_encoder_deps="zlib"
2866+flv_decoder_select="h263_decoder"
2867+flv_encoder_select="h263_encoder"
2868+fourxm_decoder_select="blockdsp bswapdsp"
2869+fraps_decoder_select="bswapdsp huffman"
2870+g2m_decoder_deps="zlib"
2871+g2m_decoder_select="blockdsp idctdsp jpegtables"
2872+g729_decoder_select="audiodsp"
2873+h261_decoder_select="mpegvideodec"
2874+h261_encoder_select="mpegvideoenc"
2875+h263_decoder_select="h263_parser h263dsp mpegvideodec qpeldsp"
2876+h263_encoder_select="h263dsp mpegvideoenc"
2877+h263i_decoder_select="h263_decoder"
2878+h263p_decoder_select="h263_decoder"
2879+h263p_encoder_select="h263_encoder"
2880+h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel h264_sei videodsp"
2881+h264_decoder_suggest="error_resilience"
2882+hap_decoder_select="snappy texturedsp"
2883+hap_encoder_deps="libsnappy"
2884+hap_encoder_select="texturedspenc"
2885+hevc_decoder_select="bswapdsp cabac dovi_rpu golomb hevcparse hevc_sei videodsp"
2886+huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2887+huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
2888+hymt_decoder_select="huffyuv_decoder"
2889+iac_decoder_select="imc_decoder"
2890+imc_decoder_select="bswapdsp sinewin"
2891+imm4_decoder_select="bswapdsp idctdsp"
2892+imm5_decoder_select="h264_decoder hevc_decoder"
2893+indeo3_decoder_select="hpeldsp"
2894+indeo4_decoder_select="ividsp"
2895+indeo5_decoder_select="ividsp"
2896+interplay_video_decoder_select="hpeldsp"
2897+ipu_decoder_select="mpegvideodec"
2898+jpegls_decoder_select="mjpeg_decoder"
2899+jv_decoder_select="blockdsp"
2900+lagarith_decoder_select="llviddsp"
2901+ljpeg_encoder_select="jpegtables"
2902+lscr_decoder_select="inflate_wrapper"
2903+magicyuv_decoder_select="llviddsp"
2904+magicyuv_encoder_select="llvidencdsp"
2905+mdec_decoder_select="blockdsp bswapdsp idctdsp"
2906+media100_decoder_select="media100_to_mjpegb_bsf mjpegb_decoder"
2907+metasound_decoder_select="lsp sinewin"
2908+mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2909+mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2910+mjpeg_encoder_select="jpegtables mpegvideoenc"
2911+mjpegb_decoder_select="mjpeg_decoder"
2912+mlp_decoder_select="mlp_parser"
2913+mlp_encoder_select="lpc audio_frame_queue"
2914+mobiclip_decoder_select="bswapdsp golomb"
2915+motionpixels_decoder_select="bswapdsp"
2916+mp1_decoder_select="mpegaudio"
2917+mp1float_decoder_select="mpegaudio"
2918+mp2_decoder_select="mpegaudio"
2919+mp2float_decoder_select="mpegaudio"
2920+mp3_decoder_select="mpegaudio"
2921+mp3adu_decoder_select="mpegaudio"
2922+mp3adufloat_decoder_select="mpegaudio"
2923+mp3float_decoder_select="mpegaudio"
2924+mp3on4_decoder_select="mpegaudio mpeg4audio"
2925+mp3on4float_decoder_select="mpegaudio mpeg4audio"
2926+mpc7_decoder_select="bswapdsp mpegaudiodsp"
2927+mpc8_decoder_select="mpegaudiodsp"
2928+mpegvideo_decoder_select="mpegvideodec"
2929+mpeg1video_decoder_select="mpegvideodec"
2930+mpeg1video_encoder_select="mpegvideoenc"
2931+mpeg2video_decoder_select="mpegvideodec"
2932+mpeg2video_encoder_select="mpegvideoenc"
2933+mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2934+mpeg4_encoder_select="h263_encoder qpeldsp"
2935+msa1_decoder_select="mss34dsp"
2936+mscc_decoder_select="inflate_wrapper"
2937+msmpeg4v1_decoder_select="msmpeg4dec"
2938+msmpeg4v2_decoder_select="msmpeg4dec"
2939+msmpeg4v2_encoder_select="msmpeg4enc"
2940+msmpeg4v3_decoder_select="msmpeg4dec"
2941+msmpeg4v3_encoder_select="msmpeg4enc"
2942+mss2_decoder_select="mpegvideodec qpeldsp vc1_decoder"
2943+mts2_decoder_select="jpegtables mss34dsp"
2944+mv30_decoder_select="aandcttables blockdsp"
2945+mvha_decoder_select="inflate_wrapper llviddsp"
2946+mwsc_decoder_select="inflate_wrapper"
2947+mxpeg_decoder_select="mjpeg_decoder"
2948+nellymoser_decoder_select="sinewin"
2949+nellymoser_encoder_select="audio_frame_queue sinewin"
2950+notchlc_decoder_select="lzf"
2951+nuv_decoder_select="idctdsp"
2952+opus_decoder_deps="swresample"
2953+opus_encoder_select="audio_frame_queue"
2954+pdv_decoder_deps="zlib"
2955+png_decoder_select="inflate_wrapper"
2956+png_encoder_select="deflate_wrapper llvidencdsp"
2957+prores_decoder_select="blockdsp idctdsp"
2958+prores_encoder_select="fdctdsp"
2959+prores_aw_encoder_select="fdctdsp"
2960+prores_ks_encoder_select="fdctdsp"
2961+qcelp_decoder_select="lsp"
2962+qdm2_decoder_select="mpegaudiodsp"
2963+ra_144_decoder_select="audiodsp"
2964+ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2965+ralf_decoder_select="golomb"
2966+rasc_decoder_select="inflate_wrapper"
2967+rawvideo_decoder_select="bswapdsp"
2968+rscc_decoder_deps="zlib"
2969+rtv1_decoder_select="texturedsp"
2970+rv10_decoder_select="h263_decoder"
2971+rv10_encoder_select="h263_encoder"
2972+rv20_decoder_select="h263_decoder"
2973+rv20_encoder_select="h263_encoder"
2974+rv30_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
2975+rv40_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
2976+screenpresso_decoder_deps="zlib"
2977+shorten_decoder_select="bswapdsp"
2978+sipr_decoder_select="lsp"
2979+smvjpeg_decoder_select="mjpeg_decoder"
2980+snow_decoder_select="dwt h264qpel rangecoder videodsp"
2981+snow_encoder_select="dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder videodsp"
2982+sonic_decoder_select="golomb rangecoder"
2983+sonic_encoder_select="golomb rangecoder"
2984+sonic_ls_encoder_select="golomb rangecoder"
2985+sp5x_decoder_select="mjpeg_decoder"
2986+speedhq_decoder_select="blockdsp idctdsp"
2987+speedhq_encoder_select="mpegvideoenc"
2988+srgc_decoder_select="inflate_wrapper"
2989+svq1_decoder_select="hpeldsp"
2990+svq1_encoder_select="hpeldsp me_cmp mpegvideoenc"
2991+svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2992+svq3_decoder_suggest="zlib"
2993+tak_decoder_select="audiodsp"
2994+tdsc_decoder_deps="zlib"
2995+tdsc_decoder_select="mjpeg_decoder"
2996+theora_decoder_select="vp3_decoder"
2997+thp_decoder_select="mjpeg_decoder"
2998+tiff_decoder_select="mjpeg_decoder"
2999+tiff_decoder_suggest="zlib lzma"
3000+tiff_encoder_suggest="zlib"
3001+truehd_decoder_select="mlp_parser"
3002+truehd_encoder_select="lpc audio_frame_queue"
3003+truemotion2_decoder_select="bswapdsp"
3004+truespeech_decoder_select="bswapdsp"
3005+tscc_decoder_select="inflate_wrapper"
3006+twinvq_decoder_select="lsp sinewin"
3007+txd_decoder_select="texturedsp"
3008+utvideo_decoder_select="bswapdsp llviddsp"
3009+utvideo_encoder_select="bswapdsp huffman llvidencdsp"
3010+vble_decoder_select="llviddsp"
3011+vbn_decoder_select="texturedsp"
3012+vbn_encoder_select="texturedspenc"
3013+vmix_decoder_select="idctdsp"
3014+vc1_decoder_select="blockdsp h264qpel intrax8 mpegvideodec qpeldsp vc1dsp"
3015+vc1image_decoder_select="vc1_decoder"
3016+vorbis_encoder_select="audio_frame_queue"
3017+vp3_decoder_select="hpeldsp vp3dsp videodsp"
3018+vp4_decoder_select="vp3_decoder"
3019+vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
3020+vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
3021+vp6a_decoder_select="vp6_decoder"
3022+vp6f_decoder_select="vp6_decoder"
3023+vp7_decoder_select="h264pred videodsp vp8dsp"
3024+vp8_decoder_select="h264pred videodsp vp8dsp"
3025+vp9_decoder_select="videodsp vp9_parser vp9_superframe_split_bsf"
3026+wcmv_decoder_select="inflate_wrapper"
3027+webp_decoder_select="vp8_decoder exif"
3028+wmalossless_decoder_select="llauddsp"
3029+wmapro_decoder_select="sinewin wma_freqs"
3030+wmav1_decoder_select="sinewin wma_freqs"
3031+wmav1_encoder_select="sinewin wma_freqs"
3032+wmav2_decoder_select="sinewin wma_freqs"
3033+wmav2_encoder_select="sinewin wma_freqs"
3034+wmavoice_decoder_select="lsp sinewin"
3035+wmv1_decoder_select="msmpeg4dec"
3036+wmv1_encoder_select="msmpeg4enc"
3037+wmv2_decoder_select="blockdsp error_resilience idctdsp intrax8 msmpeg4dec videodsp wmv2dsp"
3038+wmv2_encoder_select="msmpeg4enc wmv2dsp"
3039+wmv3_decoder_select="vc1_decoder"
3040+wmv3image_decoder_select="wmv3_decoder"
3041+xma1_decoder_select="wmapro_decoder"
3042+xma2_decoder_select="wmapro_decoder"
3043+ylc_decoder_select="bswapdsp"
3044+zerocodec_decoder_select="inflate_wrapper"
3045+zlib_decoder_select="inflate_wrapper"
3046+zlib_encoder_select="deflate_wrapper"
3047+zmbv_decoder_select="inflate_wrapper"
3048+zmbv_encoder_select="deflate_wrapper"
3049+
3050+# hardware accelerators
3051+crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
3052+cuda_deps="ffnvcodec"
3053+cuvid_deps="ffnvcodec"
3054+d3d11va_deps="dxva_h ID3D11VideoDecoder ID3D11VideoContext"
3055+dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32 user32"
3056+ffnvcodec_deps_any="libdl LoadLibrary"
3057+mediacodec_deps="android"
3058+nvdec_deps="ffnvcodec"
3059+vaapi_x11_deps="xlib_x11"
3060+videotoolbox_hwaccel_deps="videotoolbox pthreads"
3061+videotoolbox_hwaccel_extralibs="-framework QuartzCore"
3062+vulkan_deps_any="libdl LoadLibrary"
3063+
3064+av1_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_AV1"
3065+av1_d3d11va_hwaccel_select="av1_decoder"
3066+av1_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_AV1"
3067+av1_d3d11va2_hwaccel_select="av1_decoder"
3068+av1_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_AV1"
3069+av1_dxva2_hwaccel_select="av1_decoder"
3070+av1_nvdec_hwaccel_deps="nvdec CUVIDAV1PICPARAMS"
3071+av1_nvdec_hwaccel_select="av1_decoder"
3072+av1_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferAV1_bit_depth_idx"
3073+av1_vaapi_hwaccel_select="av1_decoder"
3074+av1_vdpau_hwaccel_deps="vdpau VdpPictureInfoAV1"
3075+av1_vdpau_hwaccel_select="av1_decoder"
3076+av1_vulkan_hwaccel_deps="vulkan"
3077+av1_vulkan_hwaccel_select="av1_decoder"
3078+h263_vaapi_hwaccel_deps="vaapi"
3079+h263_vaapi_hwaccel_select="h263_decoder"
3080+h263_videotoolbox_hwaccel_deps="videotoolbox"
3081+h263_videotoolbox_hwaccel_select="h263_decoder"
3082+h264_d3d11va_hwaccel_deps="d3d11va"
3083+h264_d3d11va_hwaccel_select="h264_decoder"
3084+h264_d3d11va2_hwaccel_deps="d3d11va"
3085+h264_d3d11va2_hwaccel_select="h264_decoder"
3086+h264_dxva2_hwaccel_deps="dxva2"
3087+h264_dxva2_hwaccel_select="h264_decoder"
3088+h264_nvdec_hwaccel_deps="nvdec"
3089+h264_nvdec_hwaccel_select="h264_decoder"
3090+h264_vaapi_hwaccel_deps="vaapi"
3091+h264_vaapi_hwaccel_select="h264_decoder"
3092+h264_vdpau_hwaccel_deps="vdpau"
3093+h264_vdpau_hwaccel_select="h264_decoder"
3094+h264_videotoolbox_hwaccel_deps="videotoolbox"
3095+h264_videotoolbox_hwaccel_select="h264_decoder"
3096+h264_vulkan_hwaccel_deps="vulkan"
3097+h264_vulkan_hwaccel_select="h264_decoder"
3098+hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
3099+hevc_d3d11va_hwaccel_select="hevc_decoder"
3100+hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
3101+hevc_d3d11va2_hwaccel_select="hevc_decoder"
3102+hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
3103+hevc_dxva2_hwaccel_select="hevc_decoder"
3104+hevc_nvdec_hwaccel_deps="nvdec"
3105+hevc_nvdec_hwaccel_select="hevc_decoder"
3106+hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
3107+hevc_vaapi_hwaccel_select="hevc_decoder"
3108+hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
3109+hevc_vdpau_hwaccel_select="hevc_decoder"
3110+hevc_videotoolbox_hwaccel_deps="videotoolbox"
3111+hevc_videotoolbox_hwaccel_select="hevc_decoder"
3112+hevc_vulkan_hwaccel_deps="vulkan"
3113+hevc_vulkan_hwaccel_select="hevc_decoder"
3114+mjpeg_nvdec_hwaccel_deps="nvdec"
3115+mjpeg_nvdec_hwaccel_select="mjpeg_decoder"
3116+mjpeg_vaapi_hwaccel_deps="vaapi"
3117+mjpeg_vaapi_hwaccel_select="mjpeg_decoder"
3118+mpeg1_nvdec_hwaccel_deps="nvdec"
3119+mpeg1_nvdec_hwaccel_select="mpeg1video_decoder"
3120+mpeg1_vdpau_hwaccel_deps="vdpau"
3121+mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
3122+mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
3123+mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
3124+mpeg2_d3d11va_hwaccel_deps="d3d11va"
3125+mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
3126+mpeg2_d3d11va2_hwaccel_deps="d3d11va"
3127+mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
3128+mpeg2_dxva2_hwaccel_deps="dxva2"
3129+mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
3130+mpeg2_nvdec_hwaccel_deps="nvdec"
3131+mpeg2_nvdec_hwaccel_select="mpeg2video_decoder"
3132+mpeg2_vaapi_hwaccel_deps="vaapi"
3133+mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
3134+mpeg2_vdpau_hwaccel_deps="vdpau"
3135+mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
3136+mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
3137+mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
3138+mpeg4_nvdec_hwaccel_deps="nvdec"
3139+mpeg4_nvdec_hwaccel_select="mpeg4_decoder"
3140+mpeg4_vaapi_hwaccel_deps="vaapi"
3141+mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
3142+mpeg4_vdpau_hwaccel_deps="vdpau"
3143+mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
3144+mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
3145+mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
3146+prores_videotoolbox_hwaccel_deps="videotoolbox"
3147+prores_videotoolbox_hwaccel_select="prores_decoder"
3148+vc1_d3d11va_hwaccel_deps="d3d11va"
3149+vc1_d3d11va_hwaccel_select="vc1_decoder"
3150+vc1_d3d11va2_hwaccel_deps="d3d11va"
3151+vc1_d3d11va2_hwaccel_select="vc1_decoder"
3152+vc1_dxva2_hwaccel_deps="dxva2"
3153+vc1_dxva2_hwaccel_select="vc1_decoder"
3154+vc1_nvdec_hwaccel_deps="nvdec"
3155+vc1_nvdec_hwaccel_select="vc1_decoder"
3156+vc1_vaapi_hwaccel_deps="vaapi"
3157+vc1_vaapi_hwaccel_select="vc1_decoder"
3158+vc1_vdpau_hwaccel_deps="vdpau"
3159+vc1_vdpau_hwaccel_select="vc1_decoder"
3160+vp8_nvdec_hwaccel_deps="nvdec"
3161+vp8_nvdec_hwaccel_select="vp8_decoder"
3162+vp8_vaapi_hwaccel_deps="vaapi"
3163+vp8_vaapi_hwaccel_select="vp8_decoder"
3164+vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
3165+vp9_d3d11va_hwaccel_select="vp9_decoder"
3166+vp9_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
3167+vp9_d3d11va2_hwaccel_select="vp9_decoder"
3168+vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
3169+vp9_dxva2_hwaccel_select="vp9_decoder"
3170+vp9_nvdec_hwaccel_deps="nvdec"
3171+vp9_nvdec_hwaccel_select="vp9_decoder"
3172+vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth"
3173+vp9_vaapi_hwaccel_select="vp9_decoder"
3174+vp9_vdpau_hwaccel_deps="vdpau VdpPictureInfoVP9"
3175+vp9_vdpau_hwaccel_select="vp9_decoder"
3176+vp9_videotoolbox_hwaccel_deps="videotoolbox"
3177+vp9_videotoolbox_hwaccel_select="vp9_decoder"
3178+wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
3179+wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
3180+wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
3181+wmv3_nvdec_hwaccel_select="vc1_nvdec_hwaccel"
3182+wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
3183+wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
3184+
3185+# hardware-accelerated codecs
3186+mediafoundation_deps="mftransform_h MFCreateAlignedMemoryBuffer"
3187+omx_deps="libdl pthreads"
3188+omx_rpi_select="omx"
3189+qsv_deps="libmfx"
3190+qsvdec_select="qsv"
3191+qsvenc_select="qsv"
3192+qsvvpp_select="qsv"
3193+vaapi_encode_deps="vaapi"
3194+v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
3195+
3196+bilateral_cuda_filter_deps="ffnvcodec"
3197+bilateral_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3198+chromakey_cuda_filter_deps="ffnvcodec"
3199+chromakey_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3200+colorspace_cuda_filter_deps="ffnvcodec"
3201+colorspace_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3202+hwupload_cuda_filter_deps="ffnvcodec"
3203+scale_npp_filter_deps="ffnvcodec libnpp"
3204+scale2ref_npp_filter_deps="ffnvcodec libnpp"
3205+scale_cuda_filter_deps="ffnvcodec"
3206+scale_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3207+thumbnail_cuda_filter_deps="ffnvcodec"
3208+thumbnail_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3209+transpose_npp_filter_deps="ffnvcodec libnpp"
3210+overlay_cuda_filter_deps="ffnvcodec"
3211+overlay_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3212+sharpen_npp_filter_deps="ffnvcodec libnpp"
3213+
3214+ddagrab_filter_deps="d3d11va IDXGIOutput1 DXGI_OUTDUPL_FRAME_INFO"
3215+
3216+amf_deps_any="libdl LoadLibrary"
3217+nvenc_deps="ffnvcodec"
3218+nvenc_deps_any="libdl LoadLibrary"
3219+
3220+aac_mf_encoder_deps="mediafoundation"
3221+ac3_mf_encoder_deps="mediafoundation"
3222+av1_cuvid_decoder_deps="cuvid CUVIDAV1PICPARAMS"
3223+av1_mediacodec_decoder_deps="mediacodec"
3224+av1_mediacodec_encoder_deps="mediacodec"
3225+av1_nvenc_encoder_deps="nvenc NV_ENC_PIC_PARAMS_AV1"
3226+av1_nvenc_encoder_select="atsc_a53"
3227+h263_v4l2m2m_decoder_deps="v4l2_m2m h263_v4l2_m2m"
3228+h263_v4l2m2m_encoder_deps="v4l2_m2m h263_v4l2_m2m"
3229+h264_amf_encoder_deps="amf"
3230+h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
3231+h264_cuvid_decoder_deps="cuvid"
3232+h264_cuvid_decoder_select="h264_mp4toannexb_bsf"
3233+h264_mediacodec_decoder_deps="mediacodec"
3234+h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
3235+h264_mediacodec_encoder_deps="mediacodec"
3236+h264_mediacodec_encoder_select="h264_metadata"
3237+h264_mf_encoder_deps="mediafoundation"
3238+h264_mmal_decoder_deps="mmal"
3239+h264_nvenc_encoder_deps="nvenc"
3240+h264_nvenc_encoder_select="atsc_a53"
3241+h264_omx_encoder_deps="omx"
3242+h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec"
3243+h264_qsv_encoder_select="atsc_a53 qsvenc"
3244+h264_rkmpp_decoder_deps="rkmpp"
3245+h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
3246+h264_vaapi_encoder_select="atsc_a53 cbs_h264 vaapi_encode"
3247+h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
3248+h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
3249+h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
3250+hevc_amf_encoder_deps="amf"
3251+hevc_cuvid_decoder_deps="cuvid"
3252+hevc_cuvid_decoder_select="hevc_mp4toannexb_bsf"
3253+hevc_mediacodec_decoder_deps="mediacodec"
3254+hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
3255+hevc_mediacodec_encoder_deps="mediacodec"
3256+hevc_mediacodec_encoder_select="hevc_metadata"
3257+hevc_mf_encoder_deps="mediafoundation"
3258+hevc_nvenc_encoder_deps="nvenc"
3259+hevc_nvenc_encoder_select="atsc_a53"
3260+hevc_qsv_decoder_select="hevc_mp4toannexb_bsf qsvdec"
3261+hevc_qsv_encoder_select="hevcparse qsvenc"
3262+hevc_rkmpp_decoder_deps="rkmpp"
3263+hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
3264+hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
3265+hevc_vaapi_encoder_select="atsc_a53 cbs_h265 vaapi_encode"
3266+hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
3267+hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
3268+hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
3269+mjpeg_cuvid_decoder_deps="cuvid"
3270+mjpeg_qsv_decoder_select="qsvdec"
3271+mjpeg_qsv_encoder_deps="libmfx"
3272+mjpeg_qsv_encoder_select="qsvenc"
3273+mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
3274+mjpeg_vaapi_encoder_select="cbs_jpeg jpegtables vaapi_encode"
3275+mp3_mf_encoder_deps="mediafoundation"
3276+mpeg1_cuvid_decoder_deps="cuvid"
3277+mpeg1_v4l2m2m_decoder_deps="v4l2_m2m mpeg1_v4l2_m2m"
3278+mpeg2_crystalhd_decoder_select="crystalhd"
3279+mpeg2_cuvid_decoder_deps="cuvid"
3280+mpeg2_mmal_decoder_deps="mmal"
3281+mpeg2_mediacodec_decoder_deps="mediacodec"
3282+mpeg2_qsv_decoder_select="qsvdec"
3283+mpeg2_qsv_encoder_select="qsvenc"
3284+mpeg2_vaapi_encoder_select="cbs_mpeg2 vaapi_encode"
3285+mpeg2_v4l2m2m_decoder_deps="v4l2_m2m mpeg2_v4l2_m2m"
3286+mpeg4_crystalhd_decoder_select="crystalhd"
3287+mpeg4_cuvid_decoder_deps="cuvid"
3288+mpeg4_mediacodec_decoder_deps="mediacodec"
3289+mpeg4_mediacodec_encoder_deps="mediacodec"
3290+mpeg4_mmal_decoder_deps="mmal"
3291+mpeg4_omx_encoder_deps="omx"
3292+mpeg4_v4l2m2m_decoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
3293+mpeg4_v4l2m2m_encoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
3294+msmpeg4_crystalhd_decoder_select="crystalhd"
3295+vc1_crystalhd_decoder_select="crystalhd"
3296+vc1_cuvid_decoder_deps="cuvid"
3297+vc1_mmal_decoder_deps="mmal"
3298+vc1_qsv_decoder_select="qsvdec"
3299+vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m"
3300+vp8_cuvid_decoder_deps="cuvid"
3301+vp8_mediacodec_decoder_deps="mediacodec"
3302+vp8_mediacodec_encoder_deps="mediacodec"
3303+vp8_qsv_decoder_select="qsvdec"
3304+vp8_rkmpp_decoder_deps="rkmpp"
3305+vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
3306+vp8_vaapi_encoder_select="vaapi_encode"
3307+vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m"
3308+vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"
3309+vp9_cuvid_decoder_deps="cuvid"
3310+vp9_mediacodec_decoder_deps="mediacodec"
3311+vp9_mediacodec_encoder_deps="mediacodec"
3312+vp9_qsv_decoder_select="qsvdec"
3313+vp9_rkmpp_decoder_deps="rkmpp"
3314+vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
3315+vp9_vaapi_encoder_select="vaapi_encode"
3316+vp9_qsv_encoder_deps="libmfx MFX_CODEC_VP9"
3317+vp9_qsv_encoder_select="qsvenc"
3318+vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m"
3319+wmv3_crystalhd_decoder_select="crystalhd"
3320+av1_qsv_decoder_select="qsvdec"
3321+av1_qsv_encoder_select="qsvenc"
3322+av1_qsv_encoder_deps="libvpl"
3323+av1_amf_encoder_deps="amf"
3324+av1_vaapi_encoder_deps="VAEncPictureParameterBufferAV1"
3325+av1_vaapi_encoder_select="cbs_av1 vaapi_encode"
3326+
3327+# parsers
3328+aac_parser_select="adts_header mpeg4audio"
3329+av1_parser_select="cbs_av1"
3330+evc_parser_select="evcparse"
3331+h264_parser_select="golomb h264dsp h264parse h264_sei"
3332+hevc_parser_select="hevcparse hevc_sei"
3333+mpegaudio_parser_select="mpegaudioheader"
3334+mpeg4video_parser_select="h263dsp mpegvideodec qpeldsp"
3335+vc1_parser_select="vc1dsp"
3336+vvc_parser_select="cbs_h266"
3337+
3338+# bitstream_filters
3339+aac_adtstoasc_bsf_select="adts_header mpeg4audio"
3340+av1_frame_merge_bsf_select="cbs_av1"
3341+av1_frame_split_bsf_select="cbs_av1"
3342+av1_metadata_bsf_select="cbs_av1"
3343+dts2pts_bsf_select="cbs_h264 h264parse"
3344+eac3_core_bsf_select="ac3_parser"
3345+evc_frame_merge_bsf_select="evcparse"
3346+filter_units_bsf_select="cbs"
3347+h264_metadata_bsf_deps="const_nan"
3348+h264_metadata_bsf_select="cbs_h264"
3349+h264_redundant_pps_bsf_select="cbs_h264"
3350+hevc_metadata_bsf_select="cbs_h265"
3351+mjpeg2jpeg_bsf_select="jpegtables"
3352+mpeg2_metadata_bsf_select="cbs_mpeg2"
3353+trace_headers_bsf_select="cbs"
3354+vp9_metadata_bsf_select="cbs_vp9"
3355+vvc_metadata_bsf_select="cbs_h266"
3356+
3357+# external libraries
3358+aac_at_decoder_deps="audiotoolbox"
3359+aac_at_decoder_select="aac_adtstoasc_bsf"
3360+ac3_at_decoder_deps="audiotoolbox"
3361+ac3_at_decoder_select="ac3_parser"
3362+adpcm_ima_qt_at_decoder_deps="audiotoolbox"
3363+alac_at_decoder_deps="audiotoolbox"
3364+amr_nb_at_decoder_deps="audiotoolbox"
3365+avisynth_deps_any="libdl LoadLibrary"
3366+avisynth_demuxer_deps="avisynth"
3367+avisynth_demuxer_select="riffdec"
3368+eac3_at_decoder_deps="audiotoolbox"
3369+eac3_at_decoder_select="ac3_parser"
3370+gsm_ms_at_decoder_deps="audiotoolbox"
3371+ilbc_at_decoder_deps="audiotoolbox"
3372+mp1_at_decoder_deps="audiotoolbox"
3373+mp2_at_decoder_deps="audiotoolbox"
3374+mp3_at_decoder_deps="audiotoolbox"
3375+mp1_at_decoder_select="mpegaudioheader"
3376+mp2_at_decoder_select="mpegaudioheader"
3377+mp3_at_decoder_select="mpegaudioheader"
3378+pcm_alaw_at_decoder_deps="audiotoolbox"
3379+pcm_mulaw_at_decoder_deps="audiotoolbox"
3380+qdmc_at_decoder_deps="audiotoolbox"
3381+qdm2_at_decoder_deps="audiotoolbox"
3382+aac_at_encoder_deps="audiotoolbox"
3383+aac_at_encoder_select="audio_frame_queue"
3384+alac_at_encoder_deps="audiotoolbox"
3385+alac_at_encoder_select="audio_frame_queue"
3386+ilbc_at_encoder_deps="audiotoolbox"
3387+ilbc_at_encoder_select="audio_frame_queue"
3388+pcm_alaw_at_encoder_deps="audiotoolbox"
3389+pcm_alaw_at_encoder_select="audio_frame_queue"
3390+pcm_mulaw_at_encoder_deps="audiotoolbox"
3391+pcm_mulaw_at_encoder_select="audio_frame_queue"
3392+chromaprint_muxer_deps="chromaprint"
3393+h264_videotoolbox_encoder_deps="pthreads"
3394+h264_videotoolbox_encoder_select="atsc_a53 videotoolbox_encoder"
3395+hevc_videotoolbox_encoder_deps="pthreads"
3396+hevc_videotoolbox_encoder_select="atsc_a53 videotoolbox_encoder"
3397+prores_videotoolbox_encoder_deps="pthreads"
3398+prores_videotoolbox_encoder_select="videotoolbox_encoder"
3399+libaom_av1_decoder_deps="libaom"
3400+libaom_av1_encoder_deps="libaom"
3401+libaom_av1_encoder_select="extract_extradata_bsf"
3402+libaribb24_decoder_deps="libaribb24"
3403+libaribcaption_decoder_deps="libaribcaption"
3404+libcelt_decoder_deps="libcelt"
3405+libcodec2_decoder_deps="libcodec2"
3406+libcodec2_encoder_deps="libcodec2"
3407+libdav1d_decoder_deps="libdav1d"
3408+libdav1d_decoder_select="atsc_a53"
3409+libdavs2_decoder_deps="libdavs2"
3410+libdavs2_decoder_select="avs2_parser"
3411+libfdk_aac_decoder_deps="libfdk_aac"
3412+libfdk_aac_encoder_deps="libfdk_aac"
3413+libfdk_aac_encoder_select="audio_frame_queue"
3414+libgme_demuxer_deps="libgme"
3415+libgsm_decoder_deps="libgsm"
3416+libgsm_encoder_deps="libgsm"
3417+libgsm_ms_decoder_deps="libgsm"
3418+libgsm_ms_encoder_deps="libgsm"
3419+libilbc_decoder_deps="libilbc"
3420+libilbc_encoder_deps="libilbc"
3421+libjxl_decoder_deps="libjxl libjxl_threads"
3422+libjxl_encoder_deps="libjxl libjxl_threads"
3423+libkvazaar_encoder_deps="libkvazaar"
3424+libmodplug_demuxer_deps="libmodplug"
3425+libmp3lame_encoder_deps="libmp3lame"
3426+libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
3427+libopencore_amrnb_decoder_deps="libopencore_amrnb"
3428+libopencore_amrnb_encoder_deps="libopencore_amrnb"
3429+libopencore_amrnb_encoder_select="audio_frame_queue"
3430+libopencore_amrwb_decoder_deps="libopencore_amrwb"
3431+libopenh264_decoder_deps="libopenh264"
3432+libopenh264_decoder_select="h264_mp4toannexb_bsf"
3433+libopenh264_encoder_deps="libopenh264"
3434+libopenjpeg_encoder_deps="libopenjpeg"
3435+libopenmpt_demuxer_deps="libopenmpt"
3436+libopus_decoder_deps="libopus"
3437+libopus_encoder_deps="libopus"
3438+libopus_encoder_select="audio_frame_queue"
3439+librav1e_encoder_deps="librav1e"
3440+librsvg_decoder_deps="librsvg"
3441+libshine_encoder_deps="libshine"
3442+libshine_encoder_select="audio_frame_queue mpegaudioheader"
3443+libspeex_decoder_deps="libspeex"
3444+libspeex_encoder_deps="libspeex"
3445+libspeex_encoder_select="audio_frame_queue"
3446+libsvtav1_encoder_deps="libsvtav1"
3447+libtheora_encoder_deps="libtheora"
3448+libtwolame_encoder_deps="libtwolame"
3449+libuavs3d_decoder_deps="libuavs3d"
3450+libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
3451+libvorbis_decoder_deps="libvorbis"
3452+libvorbis_encoder_deps="libvorbis libvorbisenc"
3453+libvorbis_encoder_select="audio_frame_queue"
3454+libvpx_vp8_decoder_deps="libvpx"
3455+libvpx_vp8_encoder_deps="libvpx"
3456+libvpx_vp9_decoder_deps="libvpx"
3457+libvpx_vp9_encoder_deps="libvpx"
3458+libwebp_encoder_deps="libwebp"
3459+libwebp_anim_encoder_deps="libwebp"
3460+libx262_encoder_deps="libx262"
3461+libx264_encoder_deps="libx264"
3462+libx264_encoder_select="atsc_a53"
3463+libx264rgb_encoder_deps="libx264"
3464+libx264rgb_encoder_select="libx264_encoder"
3465+libx265_encoder_deps="libx265"
3466+libx265_encoder_select="atsc_a53"
3467+libxavs_encoder_deps="libxavs"
3468+libxavs2_encoder_deps="libxavs2"
3469+libxvid_encoder_deps="libxvid"
3470+libzvbi_teletext_decoder_deps="libzvbi"
3471+vapoursynth_demuxer_deps="vapoursynth"
3472+videotoolbox_suggest="coreservices"
3473+videotoolbox_deps="corefoundation coremedia corevideo"
3474+videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
3475+
3476+# demuxers / muxers
3477+ac3_demuxer_select="ac3_parser"
3478+act_demuxer_select="riffdec"
3479+adts_muxer_select="mpeg4audio"
3480+aiff_muxer_select="iso_media"
3481+amv_muxer_select="riffenc"
3482+asf_demuxer_select="riffdec"
3483+asf_o_demuxer_select="riffdec"
3484+asf_muxer_select="riffenc"
3485+asf_stream_muxer_select="asf_muxer"
3486+av1_demuxer_select="av1_frame_merge_bsf av1_parser"
3487+avi_demuxer_select="riffdec exif"
3488+avi_muxer_select="riffenc"
3489+avif_muxer_select="mov_muxer"
3490+caf_demuxer_select="iso_media"
3491+caf_muxer_select="iso_media"
3492+dash_muxer_select="mp4_muxer"
3493+dash_demuxer_deps="libxml2"
3494+dirac_demuxer_select="dirac_parser"
3495+dts_demuxer_select="dca_parser"
3496+dtshd_demuxer_select="dca_parser"
3497+dv_demuxer_select="dvprofile"
3498+dv_muxer_select="dvprofile"
3499+dxa_demuxer_select="riffdec"
3500+eac3_demuxer_select="ac3_parser"
3501+evc_demuxer_select="evc_frame_merge_bsf evc_parser"
3502+f4v_muxer_select="mov_muxer"
3503+fifo_muxer_deps="threads"
3504+flac_demuxer_select="flac_parser"
3505+flv_muxer_select="aac_adtstoasc_bsf"
3506+gxf_muxer_select="pcm_rechunk_bsf"
3507+hds_muxer_select="flv_muxer"
3508+hls_demuxer_select="adts_header ac3_parser mov_demuxer mpegts_demuxer"
3509+hls_muxer_select="mov_muxer mpegts_muxer"
3510+image2_alias_pix_demuxer_select="image2_demuxer"
3511+image2_brender_pix_demuxer_select="image2_demuxer"
3512+imf_demuxer_deps="libxml2"
3513+imf_demuxer_select="mxf_demuxer"
3514+ipod_muxer_select="mov_muxer"
3515+ismv_muxer_select="mov_muxer"
3516+ivf_muxer_select="av1_metadata_bsf vp9_superframe_bsf"
3517+latm_muxer_select="aac_adtstoasc_bsf mpeg4audio"
3518+matroska_audio_muxer_select="matroska_muxer"
3519+matroska_demuxer_select="riffdec"
3520+matroska_demuxer_suggest="bzlib zlib"
3521+matroska_muxer_select="mpeg4audio riffenc aac_adtstoasc_bsf pgs_frame_merge_bsf vp9_superframe_bsf"
3522+mlp_demuxer_select="mlp_parser"
3523+mmf_muxer_select="riffenc"
3524+mov_demuxer_select="iso_media riffdec"
3525+mov_demuxer_suggest="zlib"
3526+mov_muxer_select="iso_media riffenc rtpenc_chain vp9_superframe_bsf aac_adtstoasc_bsf ac3_parser"
3527+mp3_demuxer_select="mpegaudio_parser"
3528+mp3_muxer_select="mpegaudioheader"
3529+mp4_muxer_select="mov_muxer"
3530+mpegts_demuxer_select="iso_media"
3531+mpegts_muxer_select="ac3_parser adts_muxer latm_muxer h264_mp4toannexb_bsf hevc_mp4toannexb_bsf"
3532+mpegtsraw_demuxer_select="mpegts_demuxer"
3533+mxf_muxer_select="pcm_rechunk_bsf rangecoder"
3534+mxf_d10_muxer_select="mxf_muxer"
3535+mxf_opatom_muxer_select="mxf_muxer"
3536+nut_muxer_select="riffenc"
3537+nuv_demuxer_select="riffdec"
3538+obu_demuxer_select="av1_frame_merge_bsf av1_parser"
3539+obu_muxer_select="av1_metadata_bsf"
3540+oga_muxer_select="ogg_muxer"
3541+ogg_demuxer_select="dirac_parse"
3542+ogv_muxer_select="ogg_muxer"
3543+opus_muxer_select="ogg_muxer"
3544+psp_muxer_select="mov_muxer"
3545+rtp_demuxer_select="sdp_demuxer"
3546+rtp_mpegts_muxer_select="mpegts_muxer rtp_muxer"
3547+rtpdec_select="asf_demuxer mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
3548+rtsp_demuxer_select="http_protocol rtpdec"
3549+rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
3550+sap_demuxer_select="sdp_demuxer"
3551+sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
3552+sdp_demuxer_select="rtpdec"
3553+smoothstreaming_muxer_select="ismv_muxer"
3554+spdif_demuxer_select="adts_header"
3555+spdif_muxer_select="adts_header"
3556+spx_muxer_select="ogg_muxer"
3557+swf_demuxer_suggest="zlib"
3558+tak_demuxer_select="tak_parser"
3559+truehd_demuxer_select="mlp_parser"
3560+tg2_muxer_select="mov_muxer"
3561+tgp_muxer_select="mov_muxer"
3562+vobsub_demuxer_select="mpegps_demuxer"
3563+w64_demuxer_select="wav_demuxer"
3564+w64_muxer_select="wav_muxer"
3565+wav_demuxer_select="riffdec"
3566+wav_muxer_select="riffenc"
3567+webm_chunk_muxer_select="webm_muxer"
3568+webm_dash_manifest_demuxer_select="matroska_demuxer"
3569+wtv_demuxer_select="mpegts_demuxer riffdec"
3570+wtv_muxer_select="mpegts_muxer riffenc"
3571+xmv_demuxer_select="riffdec"
3572+xwma_demuxer_select="riffdec"
3573+
3574+# indevs / outdevs
3575+android_camera_indev_deps="android camera2ndk mediandk pthreads"
3576+alsa_indev_deps="alsa"
3577+alsa_outdev_deps="alsa"
3578+avfoundation_indev_deps="avfoundation corevideo coremedia pthreads"
3579+avfoundation_indev_suggest="coregraphics applicationservices"
3580+avfoundation_indev_extralibs="-framework Foundation"
3581+audiotoolbox_outdev_deps="audiotoolbox pthreads"
3582+audiotoolbox_outdev_extralibs="-framework AudioToolbox -framework CoreAudio"
3583+bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
3584+caca_outdev_deps="libcaca"
3585+decklink_deps_any="libdl LoadLibrary"
3586+decklink_indev_deps="decklink threads"
3587+decklink_indev_extralibs="-lstdc++"
3588+decklink_indev_suggest="libzvbi"
3589+decklink_outdev_deps="decklink threads"
3590+decklink_outdev_suggest="libklvanc"
3591+decklink_outdev_extralibs="-lstdc++"
3592+dshow_indev_deps="IBaseFilter"
3593+dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
3594+fbdev_indev_deps="linux_fb_h"
3595+fbdev_outdev_deps="linux_fb_h"
3596+gdigrab_indev_deps="CreateDIBSection"
3597+gdigrab_indev_extralibs="-lgdi32"
3598+gdigrab_indev_select="bmp_decoder"
3599+iec61883_indev_deps="libiec61883"
3600+iec61883_indev_select="dv_demuxer"
3601+jack_indev_deps="libjack"
3602+jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
3603+kmsgrab_indev_deps="libdrm"
3604+lavfi_indev_deps="avfilter"
3605+libcdio_indev_deps="libcdio"
3606+libdc1394_indev_deps="libdc1394"
3607+openal_indev_deps="openal"
3608+opengl_outdev_deps="opengl"
3609+opengl_outdev_suggest="sdl2"
3610+oss_indev_deps_any="sys_soundcard_h"
3611+oss_outdev_deps_any="sys_soundcard_h"
3612+pulse_indev_deps="libpulse"
3613+pulse_outdev_deps="libpulse"
3614+sdl2_outdev_deps="sdl2"
3615+sndio_indev_deps="sndio"
3616+sndio_outdev_deps="sndio"
3617+v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
3618+v4l2_indev_suggest="libv4l2"
3619+v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
3620+v4l2_outdev_suggest="libv4l2"
3621+vfwcap_indev_deps="vfw32 vfwcap_defines"
3622+xcbgrab_indev_deps="libxcb"
3623+xcbgrab_indev_suggest="libxcb_shm libxcb_shape libxcb_xfixes"
3624+xv_outdev_deps="xlib_xv xlib_x11 xlib_xext"
3625+
3626+# protocols
3627+async_protocol_deps="threads"
3628+bluray_protocol_deps="libbluray"
3629+ffrtmpcrypt_protocol_conflict="librtmp_protocol"
3630+ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl mbedtls"
3631+ffrtmpcrypt_protocol_select="tcp_protocol"
3632+ffrtmphttp_protocol_conflict="librtmp_protocol"
3633+ffrtmphttp_protocol_select="http_protocol"
3634+ftp_protocol_select="tcp_protocol"
3635+gopher_protocol_select="tcp_protocol"
3636+gophers_protocol_select="tls_protocol"
3637+http_protocol_select="tcp_protocol"
3638+http_protocol_suggest="zlib"
3639+httpproxy_protocol_select="tcp_protocol"
3640+httpproxy_protocol_suggest="zlib"
3641+https_protocol_select="tls_protocol"
3642+https_protocol_suggest="zlib"
3643+icecast_protocol_select="http_protocol"
3644+mmsh_protocol_select="http_protocol"
3645+mmst_protocol_select="network"
3646+rtmp_protocol_conflict="librtmp_protocol"
3647+rtmp_protocol_select="tcp_protocol"
3648+rtmp_protocol_suggest="zlib"
3649+rtmpe_protocol_select="ffrtmpcrypt_protocol"
3650+rtmpe_protocol_suggest="zlib"
3651+rtmps_protocol_conflict="librtmp_protocol"
3652+rtmps_protocol_select="tls_protocol"
3653+rtmps_protocol_suggest="zlib"
3654+rtmpt_protocol_select="ffrtmphttp_protocol"
3655+rtmpt_protocol_suggest="zlib"
3656+rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
3657+rtmpte_protocol_suggest="zlib"
3658+rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
3659+rtmpts_protocol_suggest="zlib"
3660+rtp_protocol_select="udp_protocol"
3661+schannel_conflict="openssl gnutls libtls mbedtls"
3662+sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
3663+sctp_protocol_select="network"
3664+securetransport_conflict="openssl gnutls libtls mbedtls"
3665+srtp_protocol_select="rtp_protocol srtp"
3666+tcp_protocol_select="network"
3667+tls_protocol_deps_any="gnutls openssl schannel securetransport libtls mbedtls"
3668+tls_protocol_select="tcp_protocol"
3669+udp_protocol_select="network"
3670+udplite_protocol_select="network"
3671+unix_protocol_deps="sys_un_h"
3672+unix_protocol_select="network"
3673+ipfs_gateway_protocol_select="https_protocol"
3674+ipns_gateway_protocol_select="https_protocol"
3675+
3676+# external library protocols
3677+libamqp_protocol_deps="librabbitmq"
3678+libamqp_protocol_select="network"
3679+librist_protocol_deps="librist"
3680+librist_protocol_select="network"
3681+librtmp_protocol_deps="librtmp"
3682+librtmpe_protocol_deps="librtmp"
3683+librtmps_protocol_deps="librtmp"
3684+librtmpt_protocol_deps="librtmp"
3685+librtmpte_protocol_deps="librtmp"
3686+libsmbclient_protocol_deps="libsmbclient gplv3"
3687+libsrt_protocol_deps="libsrt"
3688+libsrt_protocol_select="network"
3689+libssh_protocol_deps="libssh"
3690+libtls_conflict="openssl gnutls mbedtls"
3691+libzmq_protocol_deps="libzmq"
3692+libzmq_protocol_select="network"
3693+
3694+# filters
3695+ametadata_filter_deps="avformat"
3696+amovie_filter_deps="avcodec avformat"
3697+aresample_filter_deps="swresample"
3698+asr_filter_deps="pocketsphinx"
3699+ass_filter_deps="libass"
3700+avgblur_opencl_filter_deps="opencl"
3701+avgblur_vulkan_filter_deps="vulkan spirv_compiler"
3702+azmq_filter_deps="libzmq"
3703+blackframe_filter_deps="gpl"
3704+blend_vulkan_filter_deps="vulkan spirv_compiler"
3705+boxblur_filter_deps="gpl"
3706+boxblur_opencl_filter_deps="opencl gpl"
3707+bs2b_filter_deps="libbs2b"
3708+bwdif_cuda_filter_deps="ffnvcodec"
3709+bwdif_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3710+bwdif_vulkan_filter_deps="vulkan spirv_compiler"
3711+chromaber_vulkan_filter_deps="vulkan spirv_compiler"
3712+color_vulkan_filter_deps="vulkan spirv_compiler"
3713+colorkey_opencl_filter_deps="opencl"
3714+colormatrix_filter_deps="gpl"
3715+convolution_opencl_filter_deps="opencl"
3716+coreimage_filter_deps="coreimage appkit"
3717+coreimage_filter_extralibs="-framework OpenGL"
3718+coreimagesrc_filter_deps="coreimage appkit"
3719+coreimagesrc_filter_extralibs="-framework OpenGL"
3720+cover_rect_filter_deps="avcodec avformat gpl"
3721+cropdetect_filter_deps="gpl"
3722+deinterlace_qsv_filter_deps="libmfx"
3723+deinterlace_qsv_filter_select="qsvvpp"
3724+deinterlace_vaapi_filter_deps="vaapi"
3725+delogo_filter_deps="gpl"
3726+denoise_vaapi_filter_deps="vaapi"
3727+derain_filter_select="dnn"
3728+deshake_filter_select="pixelutils"
3729+deshake_opencl_filter_deps="opencl"
3730+dilation_opencl_filter_deps="opencl"
3731+dnn_classify_filter_select="dnn"
3732+dnn_detect_filter_select="dnn"
3733+dnn_processing_filter_select="dnn"
3734+drawtext_filter_deps="libfreetype libharfbuzz"
3735+drawtext_filter_suggest="libfontconfig libfribidi"
3736+elbg_filter_deps="avcodec"
3737+eq_filter_deps="gpl"
3738+erosion_opencl_filter_deps="opencl"
3739+find_rect_filter_deps="avcodec avformat gpl"
3740+flip_vulkan_filter_deps="vulkan spirv_compiler"
3741+flite_filter_deps="libflite threads"
3742+framerate_filter_select="scene_sad"
3743+freezedetect_filter_select="scene_sad"
3744+frei0r_deps_any="libdl LoadLibrary"
3745+frei0r_filter_deps="frei0r"
3746+frei0r_src_filter_deps="frei0r"
3747+fspp_filter_deps="gpl"
3748+gblur_vulkan_filter_deps="vulkan spirv_compiler"
3749+hflip_vulkan_filter_deps="vulkan spirv_compiler"
3750+histeq_filter_deps="gpl"
3751+hqdn3d_filter_deps="gpl"
3752+iccdetect_filter_deps="lcms2"
3753+iccgen_filter_deps="lcms2"
3754+interlace_filter_deps="gpl"
3755+kerndeint_filter_deps="gpl"
3756+ladspa_filter_deps="ladspa libdl"
3757+lensfun_filter_deps="liblensfun version3"
3758+libplacebo_filter_deps="libplacebo vulkan"
3759+lv2_filter_deps="lv2"
3760+mcdeint_filter_deps="avcodec gpl"
3761+metadata_filter_deps="avformat"
3762+movie_filter_deps="avcodec avformat"
3763+mpdecimate_filter_deps="gpl"
3764+mpdecimate_filter_select="pixelutils"
3765+minterpolate_filter_select="scene_sad"
3766+mptestsrc_filter_deps="gpl"
3767+negate_filter_deps="lut_filter"
3768+nlmeans_opencl_filter_deps="opencl"
3769+nlmeans_vulkan_filter_deps="vulkan spirv_compiler"
3770+nnedi_filter_deps="gpl"
3771+ocr_filter_deps="libtesseract"
3772+ocv_filter_deps="libopencv"
3773+openclsrc_filter_deps="opencl"
3774+overlay_opencl_filter_deps="opencl"
3775+overlay_qsv_filter_deps="libmfx"
3776+overlay_qsv_filter_select="qsvvpp"
3777+overlay_vaapi_filter_deps="vaapi VAProcPipelineCaps_blend_flags"
3778+overlay_vulkan_filter_deps="vulkan spirv_compiler"
3779+owdenoise_filter_deps="gpl"
3780+pad_opencl_filter_deps="opencl"
3781+pan_filter_deps="swresample"
3782+perspective_filter_deps="gpl"
3783+phase_filter_deps="gpl"
3784+pp7_filter_deps="gpl"
3785+pp_filter_deps="gpl postproc"
3786+prewitt_opencl_filter_deps="opencl"
3787+procamp_vaapi_filter_deps="vaapi"
3788+program_opencl_filter_deps="opencl"
3789+pullup_filter_deps="gpl"
3790+remap_opencl_filter_deps="opencl"
3791+removelogo_filter_deps="avcodec avformat swscale"
3792+repeatfields_filter_deps="gpl"
3793+roberts_opencl_filter_deps="opencl"
3794+rubberband_filter_deps="librubberband"
3795+sab_filter_deps="gpl swscale"
3796+scale2ref_filter_deps="swscale"
3797+scale_filter_deps="swscale"
3798+scale_qsv_filter_deps="libmfx"
3799+scale_qsv_filter_select="qsvvpp"
3800+scdet_filter_select="scene_sad"
3801+select_filter_select="scene_sad"
3802+sharpness_vaapi_filter_deps="vaapi"
3803+showcqt_filter_deps="avformat swscale"
3804+showcqt_filter_suggest="libfontconfig libfreetype"
3805+signature_filter_deps="gpl avcodec avformat"
3806+smartblur_filter_deps="gpl swscale"
3807+sobel_opencl_filter_deps="opencl"
3808+sofalizer_filter_deps="libmysofa"
3809+spp_filter_deps="gpl avcodec"
3810+spp_filter_select="idctdsp fdctdsp me_cmp pixblockdsp"
3811+sr_filter_deps="avformat swscale"
3812+sr_filter_select="dnn"
3813+stereo3d_filter_deps="gpl"
3814+subtitles_filter_deps="avformat avcodec libass"
3815+super2xsai_filter_deps="gpl"
3816+pixfmts_super2xsai_test_deps="super2xsai_filter"
3817+tinterlace_filter_deps="gpl"
3818+tinterlace_merge_test_deps="tinterlace_filter"
3819+tinterlace_pad_test_deps="tinterlace_filter"
3820+tonemap_filter_deps="const_nan"
3821+tonemap_vaapi_filter_deps="vaapi VAProcFilterParameterBufferHDRToneMapping"
3822+tonemap_opencl_filter_deps="opencl const_nan"
3823+transpose_opencl_filter_deps="opencl"
3824+transpose_vaapi_filter_deps="vaapi VAProcPipelineCaps_rotation_flags"
3825+transpose_vt_filter_deps="videotoolbox VTPixelRotationSessionCreate"
3826+transpose_vulkan_filter_deps="vulkan spirv_compiler"
3827+unsharp_opencl_filter_deps="opencl"
3828+uspp_filter_deps="gpl avcodec"
3829+vaguedenoiser_filter_deps="gpl"
3830+vflip_vulkan_filter_deps="vulkan spirv_compiler"
3831+vidstabdetect_filter_deps="libvidstab"
3832+vidstabtransform_filter_deps="libvidstab"
3833+libvmaf_filter_deps="libvmaf"
3834+libvmaf_cuda_filter_deps="libvmaf libvmaf_cuda ffnvcodec"
3835+zmq_filter_deps="libzmq"
3836+zoompan_filter_deps="swscale"
3837+zscale_filter_deps="libzimg const_nan"
3838+scale_vaapi_filter_deps="vaapi"
3839+scale_vt_filter_deps="videotoolbox"
3840+scale_vulkan_filter_deps="vulkan spirv_compiler"
3841+vpp_qsv_filter_deps="libmfx"
3842+vpp_qsv_filter_select="qsvvpp"
3843+xfade_opencl_filter_deps="opencl"
3844+xfade_vulkan_filter_deps="vulkan spirv_compiler"
3845+yadif_cuda_filter_deps="ffnvcodec"
3846+yadif_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
3847+yadif_videotoolbox_filter_deps="metal corevideo videotoolbox"
3848+hstack_vaapi_filter_deps="vaapi_1"
3849+vstack_vaapi_filter_deps="vaapi_1"
3850+xstack_vaapi_filter_deps="vaapi_1"
3851+hstack_qsv_filter_deps="libmfx"
3852+hstack_qsv_filter_select="qsvvpp"
3853+vstack_qsv_filter_deps="libmfx"
3854+vstack_qsv_filter_select="qsvvpp"
3855+xstack_qsv_filter_deps="libmfx"
3856+xstack_qsv_filter_select="qsvvpp"
3857+
3858+# examples
3859+avio_http_serve_files_deps="avformat avutil fork"
3860+avio_list_dir_deps="avformat avutil"
3861+avio_read_callback_deps="avformat avcodec avutil"
3862+decode_audio_example_deps="avcodec avutil"
3863+decode_filter_audio_example_deps="avfilter avcodec avformat avutil"
3864+decode_filter_video_example_deps="avfilter avcodec avformat avutil"
3865+decode_video_example_deps="avcodec avutil"
3866+demux_decode_example_deps="avcodec avformat avutil"
3867+encode_audio_example_deps="avcodec avutil"
3868+encode_video_example_deps="avcodec avutil"
3869+extract_mvs_example_deps="avcodec avformat avutil"
3870+filter_audio_example_deps="avfilter avutil"
3871+hw_decode_example_deps="avcodec avformat avutil"
3872+mux_example_deps="avcodec avformat avutil swscale"
3873+qsv_decode_example_deps="avcodec avutil libmfx h264_qsv_decoder"
3874+remux_example_deps="avcodec avformat avutil"
3875+resample_audio_example_deps="avutil swresample"
3876+scale_video_example_deps="avutil swscale"
3877+show_metadata_example_deps="avformat avutil"
3878+transcode_aac_example_deps="avcodec avformat swresample"
3879+transcode_example_deps="avfilter avcodec avformat avutil"
3880+vaapi_encode_example_deps="avcodec avutil h264_vaapi_encoder"
3881+vaapi_transcode_example_deps="avcodec avformat avutil h264_vaapi_encoder"
3882+qsv_transcode_example_deps="avcodec avformat avutil h264_qsv_encoder"
3883+
3884+# EXTRALIBS_LIST
3885+cpu_init_extralibs="pthreads_extralibs"
3886+cws2fws_extralibs="zlib_extralibs"
3887+
3888+# libraries, in any order
3889+avcodec_deps="avutil"
3890+avcodec_suggest="libm stdatomic"
3891+avdevice_deps="avformat avcodec avutil"
3892+avdevice_suggest="libm stdatomic"
3893+avfilter_deps="avutil"
3894+avfilter_suggest="libm stdatomic"
3895+avformat_deps="avcodec avutil"
3896+avformat_suggest="libm network zlib stdatomic"
3897+avutil_suggest="clock_gettime ffnvcodec gcrypt libm libdrm libmfx opencl openssl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic"
3898+postproc_deps="avutil gpl"
3899+postproc_suggest="libm stdatomic"
3900+swresample_deps="avutil"
3901+swresample_suggest="libm libsoxr stdatomic"
3902+swscale_deps="avutil"
3903+swscale_suggest="libm stdatomic"
3904+
3905+avcodec_extralibs="pthreads_extralibs iconv_extralibs dxva2_extralibs lcms2_extralibs"
3906+avfilter_extralibs="pthreads_extralibs"
3907+avutil_extralibs="d3d11va_extralibs mediacodec_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vaapi_win32_extralibs vdpau_x11_extralibs"
3908+
3909+# programs
3910+ffmpeg_deps="avcodec avfilter avformat threads"
3911+ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
3912+ hflip_filter null_filter
3913+ transpose_filter trim_filter vflip_filter"
3914+ffmpeg_suggest="ole32 psapi shell32"
3915+ffplay_deps="avcodec avformat avfilter swscale swresample sdl2"
3916+ffplay_select="crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
3917+ffplay_suggest="shell32"
3918+ffprobe_deps="avcodec avformat"
3919+ffprobe_suggest="shell32"
3920+
3921+# documentation
3922+podpages_deps="perl"
3923+manpages_deps="perl pod2man"
3924+htmlpages_deps="perl"
3925+htmlpages_deps_any="makeinfo_html texi2html"
3926+txtpages_deps="perl makeinfo"
3927+doc_deps_any="manpages htmlpages podpages txtpages"
3928+
3929+# default parameters
3930+
3931+logfile="ffbuild/config.log"
3932+
3933+# installation paths
3934+prefix_default="/usr/local"
3935+bindir_default='${prefix}/bin'
3936+datadir_default='${prefix}/share/ffmpeg'
3937+docdir_default='${prefix}/share/doc/ffmpeg'
3938+incdir_default='${prefix}/include'
3939+libdir_default='${prefix}/lib'
3940+mandir_default='${prefix}/share/man'
3941+
3942+# toolchain
3943+ar_default="ar"
3944+cc_default="gcc"
3945+cxx_default="g++"
3946+host_cc_default="gcc"
3947+doxygen_default="doxygen"
3948+install="install"
3949+ln_s_default="ln -s -f"
3950+metalcc_default="xcrun -sdk macosx metal"
3951+metallib_default="xcrun -sdk macosx metallib"
3952+nm_default="nm -g"
3953+pkg_config_default=pkg-config
3954+ranlib_default="ranlib"
3955+strip_default="strip"
3956+version_script='--version-script'
3957+objformat="elf32"
3958+x86asmexe_default="nasm"
3959+windres_default="windres"
3960+striptype="direct"
3961+
3962+# OS
3963+target_os_default=$(tolower $(uname -s))
3964+host_os=$target_os_default
3965+
3966+# machine
3967+if test "$target_os_default" = aix; then
3968+ arch_default=$(uname -p)
3969+ strip_default="strip -X32_64"
3970+ nm_default="nm -g -X32_64"
3971+elif test "$MSYSTEM_CARCH" != ""; then
3972+ arch_default="$MSYSTEM_CARCH"
3973+else
3974+ arch_default=$(uname -m)
3975+fi
3976+cpu="generic"
3977+intrinsics="none"
3978+
3979+# configurable options
3980+enable $PROGRAM_LIST
3981+enable $DOCUMENT_LIST
3982+enable $EXAMPLE_LIST
3983+enable $LIBRARY_LIST
3984+enable stripping
3985+
3986+enable asm
3987+enable debug
3988+enable doc
3989+enable faan faandct faanidct
3990+enable large_tests
3991+enable optimizations
3992+enable ptx_compression
3993+enable runtime_cpudetect
3994+enable safe_bitstream_reader
3995+enable static
3996+enable swscale_alpha
3997+enable valgrind_backtrace
3998+
3999+sws_max_filter_size_default=256
4000+set_default sws_max_filter_size
4001+
4002+# internal components are enabled by default
4003+enable $EXTRALIBS_LIST
4004+
4005+# Avoid external, non-system, libraries getting enabled by dependency resolution
4006+disable $EXTERNAL_LIBRARY_LIST $HWACCEL_LIBRARY_LIST
4007+
4008+# build settings
4009+SHFLAGS='-shared -Wl,-soname,$$(@F)'
4010+LIBPREF="lib"
4011+LIBSUF=".a"
4012+FULLNAME='$(NAME)$(BUILDSUF)'
4013+LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
4014+SLIBPREF="lib"
4015+SLIBSUF=".so"
4016+SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
4017+SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
4018+SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
4019+LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
4020+SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
4021+SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
4022+VERSION_SCRIPT_POSTPROCESS_CMD="cat"
4023+
4024+asflags_filter=echo
4025+cflags_filter=echo
4026+ldflags_filter=echo
4027+
4028+AS_C='-c'
4029+AS_O='-o $@'
4030+CC_C='-c'
4031+CC_E='-E -o $@'
4032+CC_O='-o $@'
4033+CXX_C='-c'
4034+CXX_O='-o $@'
4035+OBJCC_C='-c'
4036+OBJCC_E='-E -o $@'
4037+OBJCC_O='-o $@'
4038+X86ASM_O='-o $@'
4039+LD_O='-o $@'
4040+LD_LIB='-l%'
4041+LD_PATH='-L'
4042+HOSTCC_C='-c'
4043+HOSTCC_E='-E -o $@'
4044+HOSTCC_O='-o $@'
4045+HOSTLD_O='-o $@'
4046+NVCC_C='-c'
4047+NVCC_O='-o $@'
4048+
4049+host_extralibs='-lm'
4050+host_cflags_filter=echo
4051+host_ldflags_filter=echo
4052+
4053+target_path='$(CURDIR)'
4054+
4055+# since the object filename is not given with the -MM flag, the compiler
4056+# is only able to print the basename, and we must add the path ourselves
4057+DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
4058+DEPFLAGS='-MM'
4059+
4060+mkdir -p ffbuild
4061+
4062+# find source path
4063+if test -f configure; then
4064+ source_path=.
4065+elif test -f src/configure; then
4066+ source_path=src
4067+else
4068+ source_path=$(cd $(dirname "$0"); pwd)
4069+ case "$source_path" in
4070+ *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
4071+ esac
4072+ test -e "$source_path/config.h" &&
4073+ die "Out of tree builds are impossible with config.h in source dir."
4074+fi
4075+
4076+for v in "$@"; do
4077+ r=${v#*=}
4078+ l=${v%"$r"}
4079+ r=$(sh_quote "$r")
4080+ FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
4081+done
4082+
4083+find_things_extern(){
4084+ thing=$1
4085+ pattern=$2
4086+ file=$source_path/$3
4087+ out=${4:-$thing}
4088+ sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file"
4089+}
4090+
4091+find_filters_extern(){
4092+ file=$source_path/$1
4093+ sed -n 's/^extern const AVFilter ff_[avfsinkrc]\{2,5\}_\([[:alnum:]_]\{1,\}\);/\1_filter/p' $file
4094+}
4095+
4096+FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c)
4097+OUTDEV_LIST=$(find_things_extern muxer FFOutputFormat libavdevice/alldevices.c outdev)
4098+INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev)
4099+MUXER_LIST=$(find_things_extern muxer FFOutputFormat libavformat/allformats.c)
4100+DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c)
4101+ENCODER_LIST=$(find_things_extern encoder FFCodec libavcodec/allcodecs.c)
4102+DECODER_LIST=$(find_things_extern decoder FFCodec libavcodec/allcodecs.c)
4103+CODEC_LIST="
4104+ $ENCODER_LIST
4105+ $DECODER_LIST
4106+"
4107+PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parsers.c)
4108+BSF_LIST=$(find_things_extern bsf FFBitStreamFilter libavcodec/bitstream_filters.c)
4109+HWACCEL_LIST=$(find_things_extern hwaccel FFHWAccel libavcodec/hwaccels.h)
4110+PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
4111+
4112+AVCODEC_COMPONENTS_LIST="
4113+ $BSF_LIST
4114+ $DECODER_LIST
4115+ $ENCODER_LIST
4116+ $HWACCEL_LIST
4117+ $PARSER_LIST
4118+"
4119+
4120+AVDEVICE_COMPONENTS_LIST="
4121+ $INDEV_LIST
4122+ $OUTDEV_LIST
4123+"
4124+
4125+AVFILTER_COMPONENTS_LIST="
4126+ $FILTER_LIST
4127+"
4128+
4129+AVFORMAT_COMPONENTS_LIST="
4130+ $DEMUXER_LIST
4131+ $MUXER_LIST
4132+ $PROTOCOL_LIST
4133+"
4134+
4135+ALL_COMPONENTS="
4136+ $AVCODEC_COMPONENTS_LIST
4137+ $AVDEVICE_COMPONENTS_LIST
4138+ $AVFILTER_COMPONENTS_LIST
4139+ $AVFORMAT_COMPONENTS_LIST
4140+"
4141+
4142+for n in $COMPONENT_LIST; do
4143+ v=$(toupper ${n%s})_LIST
4144+ eval enable \$$v
4145+ eval ${n}_if_any="\$$v"
4146+done
4147+
4148+enable $ARCH_EXT_LIST
4149+
4150+die_unknown(){
4151+ echo "Unknown option \"$1\"."
4152+ echo "See $0 --help for available options."
4153+ exit 1
4154+}
4155+
4156+print_in_columns() {
4157+ tr ' ' '\n' | sort | tr '\r\n' ' ' | awk -v col_width=24 -v width="$ncols" '
4158+ {
4159+ num_cols = width > col_width ? int(width / col_width) : 1;
4160+ num_rows = int((NF + num_cols-1) / num_cols);
4161+ y = x = 1;
4162+ for (y = 1; y <= num_rows; y++) {
4163+ i = y;
4164+ for (x = 1; x <= num_cols; x++) {
4165+ if (i <= NF) {
4166+ line = sprintf("%s%-" col_width "s", line, $i);
4167+ }
4168+ i = i + num_rows;
4169+ }
4170+ print line; line = "";
4171+ }
4172+ }' | sed 's/ *$//'
4173+}
4174+
4175+show_list() {
4176+ suffix=_$1
4177+ shift
4178+ echo $* | sed s/$suffix//g | print_in_columns
4179+ exit 0
4180+}
4181+
4182+rand_list(){
4183+ IFS=', '
4184+ set -- $*
4185+ unset IFS
4186+ for thing; do
4187+ comp=${thing%:*}
4188+ prob=${thing#$comp}
4189+ prob=${prob#:}
4190+ is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
4191+ echo "prob ${prob:-0.5}"
4192+ printf '%s\n' $comp
4193+ done
4194+}
4195+
4196+do_random(){
4197+ action=$1
4198+ shift
4199+ random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
4200+ $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
4201+}
4202+
4203+for opt do
4204+ optval="${opt#*=}"
4205+ case "$opt" in
4206+ --extra-ldflags=*)
4207+ add_ldflags $optval
4208+ ;;
4209+ --extra-ldexeflags=*)
4210+ add_ldexeflags $optval
4211+ ;;
4212+ --extra-ldsoflags=*)
4213+ add_ldsoflags $optval
4214+ ;;
4215+ --extra-ldlibflags=*)
4216+ warn "The --extra-ldlibflags option is only provided for compatibility and will be\n"\
4217+ "removed in the future. Use --extra-ldsoflags instead."
4218+ add_ldsoflags $optval
4219+ ;;
4220+ --extra-libs=*)
4221+ add_extralibs $optval
4222+ ;;
4223+ --disable-devices)
4224+ disable $INDEV_LIST $OUTDEV_LIST
4225+ ;;
4226+ --enable-debug=*)
4227+ debuglevel="$optval"
4228+ ;;
4229+ --disable-programs)
4230+ disable $PROGRAM_LIST
4231+ ;;
4232+ --disable-everything)
4233+ map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
4234+ ;;
4235+ --disable-all)
4236+ map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
4237+ disable $LIBRARY_LIST $PROGRAM_LIST doc
4238+ enable avutil
4239+ ;;
4240+ --enable-random|--disable-random)
4241+ action=${opt%%-random}
4242+ do_random ${action#--} $COMPONENT_LIST
4243+ ;;
4244+ --enable-random=*|--disable-random=*)
4245+ action=${opt%%-random=*}
4246+ do_random ${action#--} $optval
4247+ ;;
4248+ --enable-sdl)
4249+ enable sdl2
4250+ ;;
4251+ --enable-lto*)
4252+ lto=-f${opt#--enable-}
4253+ ;;
4254+ --enable-*=*|--disable-*=*)
4255+ eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
4256+ is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
4257+ eval list=\$$(toupper $thing)_LIST
4258+ name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
4259+ list=$(filter "$name" $list)
4260+ [ "$list" = "" ] && warn "Option $opt did not match anything"
4261+ test $action = enable && warn_if_gets_disabled $list
4262+ $action $list
4263+ ;;
4264+ --enable-yasm|--disable-yasm)
4265+ warn "The ${opt} option is only provided for compatibility and will be\n"\
4266+ "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
4267+ test $opt = --enable-yasm && x86asm=yes || x86asm=no
4268+ ;;
4269+ --yasmexe=*)
4270+ warn "The --yasmexe option is only provided for compatibility and will be\n"\
4271+ "removed in the future. Use --x86asmexe instead."
4272+ x86asmexe="$optval"
4273+ ;;
4274+ --enable-?*|--disable-?*)
4275+ eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
4276+ if is_in $option $COMPONENT_LIST; then
4277+ test $action = disable && action=unset
4278+ eval $action \$$(toupper ${option%s})_LIST
4279+ elif is_in $option $CMDLINE_SELECT; then
4280+ $action $option
4281+ else
4282+ die_unknown $opt
4283+ fi
4284+ ;;
4285+ --list-*)
4286+ NAME="${opt#--list-}"
4287+ is_in $NAME $COMPONENT_LIST || die_unknown $opt
4288+ NAME=${NAME%s}
4289+ eval show_list $NAME \$$(toupper $NAME)_LIST
4290+ ;;
4291+ --help|-h) show_help
4292+ ;;
4293+ --quiet|-q) quiet=yes
4294+ ;;
4295+ --fatal-warnings) enable fatal_warnings
4296+ ;;
4297+ --libfuzzer=*)
4298+ libfuzzer_path="$optval"
4299+ ;;
4300+ *)
4301+ optname="${opt%%=*}"
4302+ optname="${optname#--}"
4303+ optname=$(echo "$optname" | sed 's/-/_/g')
4304+ if is_in $optname $CMDLINE_SET; then
4305+ eval $optname='$optval'
4306+ elif is_in $optname $CMDLINE_APPEND; then
4307+ append $optname "$optval"
4308+ else
4309+ die_unknown $opt
4310+ fi
4311+ ;;
4312+ esac
4313+done
4314+
4315+for e in $env; do
4316+ eval "export $e"
4317+done
4318+
4319+if disabled autodetect; then
4320+
4321+ # Unless iconv is explicitely disabled by the user, we still want to probe
4322+ # for the iconv from the libc.
4323+ disabled iconv || enable libc_iconv
4324+
4325+ disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
4326+ disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
4327+fi
4328+# Mark specifically enabled, but normally autodetected libraries as requested.
4329+for lib in $AUTODETECT_LIBS; do
4330+ enabled $lib && request $lib
4331+done
4332+#TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
4333+enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
4334+enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
4335+
4336+disabled logging && logfile=/dev/null
4337+
4338+# command line configuration sanity checks
4339+
4340+# we need to build at least one lib type
4341+if ! enabled_any static shared; then
4342+ cat <<EOF
4343+At least one library type must be built.
4344+Specify --enable-static to build the static libraries or --enable-shared to
4345+build the shared libraries as well. To only build the shared libraries specify
4346+--disable-static in addition to --enable-shared.
4347+EOF
4348+ exit 1
4349+fi
4350+
4351+die_license_disabled() {
4352+ enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
4353+}
4354+
4355+die_license_disabled_gpl() {
4356+ enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
4357+}
4358+
4359+map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
4360+map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
4361+
4362+enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
4363+map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
4364+
4365+enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4366+
4367+if enabled nonfree; then
4368+ license="nonfree and unredistributable"
4369+elif enabled gplv3; then
4370+ license="GPL version 3 or later"
4371+elif enabled lgplv3; then
4372+ license="LGPL version 3 or later"
4373+elif enabled gpl; then
4374+ license="GPL version 2 or later"
4375+else
4376+ license="LGPL version 2.1 or later"
4377+fi
4378+
4379+enabled_all gnutls openssl &&
4380+ die "GnuTLS and OpenSSL must not be enabled at the same time."
4381+
4382+enabled_all gnutls mbedtls &&
4383+ die "GnuTLS and mbedTLS must not be enabled at the same time."
4384+
4385+enabled_all openssl mbedtls &&
4386+ die "OpenSSL and mbedTLS must not be enabled at the same time."
4387+
4388+# Disable all the library-specific components if the library itself
4389+# is disabled, see AVCODEC_LIST and following _LIST variables.
4390+
4391+disable_components(){
4392+ disabled ${1} && disable $(
4393+ eval components="\$$(toupper ${1})_COMPONENTS"
4394+ map 'eval echo \${$(toupper ${v%s})_LIST}' $components
4395+ )
4396+}
4397+
4398+map 'disable_components $v' $LIBRARY_LIST
4399+
4400+echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
4401+set >> $logfile
4402+
4403+test -n "$valgrind" && toolchain="valgrind-memcheck"
4404+
4405+enabled ossfuzz && ! echo $CFLAGS | grep -q -- "-fsanitize=" && ! echo $CFLAGS | grep -q -- "-fcoverage-mapping" &&{
4406+ add_cflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
4407+ add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
4408+}
4409+
4410+case "$toolchain" in
4411+ *-asan)
4412+ cc_default="${toolchain%-asan}"
4413+ add_cflags -fsanitize=address
4414+ add_ldflags -fsanitize=address
4415+ ;;
4416+ *-lsan)
4417+ cc_default="${toolchain%-lsan}"
4418+ add_cflags -fsanitize=leak
4419+ add_ldflags -fsanitize=leak
4420+ ;;
4421+ *-msan)
4422+ cc_default="${toolchain%-msan}"
4423+ add_cflags -fsanitize=memory -fsanitize-memory-track-origins
4424+ add_ldflags -fsanitize=memory
4425+ ;;
4426+ *-tsan)
4427+ cc_default="${toolchain%-tsan}"
4428+ add_cflags -fsanitize=thread
4429+ add_ldflags -fsanitize=thread
4430+ case "$toolchain" in
4431+ gcc-tsan)
4432+ add_cflags -fPIC
4433+ add_ldflags -fPIC
4434+ ;;
4435+ esac
4436+ ;;
4437+ *-usan)
4438+ cc_default="${toolchain%-usan}"
4439+ add_cflags -fsanitize=undefined
4440+ add_ldflags -fsanitize=undefined
4441+ ;;
4442+ valgrind-*)
4443+ target_exec_default="valgrind"
4444+ case "$toolchain" in
4445+ valgrind-massif)
4446+ 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"
4447+ ;;
4448+ valgrind-memcheck)
4449+ 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"
4450+ ;;
4451+ esac
4452+ ;;
4453+ msvc)
4454+ cl_major_ver=$(cl.exe 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
4455+ if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
4456+ cc_default="cl.exe"
4457+ cxx_default="cl.exe"
4458+ else
4459+ die "Unsupported MSVC version (2013 or newer required)"
4460+ fi
4461+ ld_default="$source_path/compat/windows/mslink"
4462+ windres_default="$source_path/compat/windows/mswindres"
4463+ nm_default="dumpbin.exe -symbols"
4464+ ar_default="lib.exe"
4465+ case "${arch:-$arch_default}" in
4466+ aarch64|arm64)
4467+ as_default="armasm64.exe"
4468+ ;;
4469+ arm*)
4470+ as_default="armasm.exe"
4471+ ;;
4472+ esac
4473+ target_os_default="win32"
4474+ # Use a relative path for TMPDIR. This makes sure all the
4475+ # ffconf temp files are written with a relative path, avoiding
4476+ # issues with msys/win32 path conversion for MSVC parameters
4477+ # such as -Fo<file> or -out:<file>.
4478+ TMPDIR=.
4479+ ;;
4480+ icl)
4481+ cc_default="icl"
4482+ ld_default="xilink"
4483+ nm_default="dumpbin -symbols"
4484+ ar_default="xilib"
4485+ target_os_default="win32"
4486+ TMPDIR=.
4487+ ;;
4488+ gcov)
4489+ add_cflags -fprofile-arcs -ftest-coverage
4490+ add_ldflags -fprofile-arcs -ftest-coverage
4491+ ;;
4492+ llvm-cov)
4493+ add_cflags -fprofile-arcs -ftest-coverage
4494+ add_ldflags --coverage
4495+ ;;
4496+ hardened)
4497+ add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
4498+ add_cflags -fno-strict-overflow -fstack-protector-all
4499+ add_ldflags -Wl,-z,relro -Wl,-z,now
4500+ add_cflags -fPIE
4501+ add_ldexeflags -fPIE -pie
4502+ ;;
4503+ ?*)
4504+ die "Unknown toolchain $toolchain"
4505+ ;;
4506+esac
4507+
4508+if test -n "$cross_prefix"; then
4509+ test -n "$arch" && test -n "$target_os" ||
4510+ die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
4511+ enable cross_compile
4512+fi
4513+
4514+set_default target_os
4515+if test "$target_os" = android; then
4516+ cc_default="clang"
4517+fi
4518+
4519+ar_default="${cross_prefix}${ar_default}"
4520+cc_default="${cross_prefix}${cc_default}"
4521+cxx_default="${cross_prefix}${cxx_default}"
4522+nm_default="${cross_prefix}${nm_default}"
4523+pkg_config_default="${cross_prefix}${pkg_config_default}"
4524+ranlib_default="${cross_prefix}${ranlib_default}"
4525+strip_default="${cross_prefix}${strip_default}"
4526+windres_default="${cross_prefix}${windres_default}"
4527+
4528+sysinclude_default="${sysroot}/usr/include"
4529+
4530+if enabled cuda_sdk; then
4531+ warn "Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead."
4532+ enable cuda_nvcc
4533+fi
4534+
4535+if enabled cuda_nvcc; then
4536+ nvcc_default="nvcc"
4537+ nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
4538+else
4539+ nvcc_default="clang"
4540+ nvccflags_default="--cuda-gpu-arch=sm_30 -O2"
4541+ NVCC_C=""
4542+fi
4543+
4544+set_default nvcc
4545+
4546+if enabled cuda_nvcc; then
4547+ if $nvcc $nvccflags_default 2>&1 | grep -qi unsupported; then
4548+ nvccflags_default="-gencode arch=compute_60,code=sm_60 -O2"
4549+ fi
4550+fi
4551+
4552+set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
4553+ target_exec x86asmexe metalcc metallib
4554+enabled cross_compile || host_cc_default=$cc
4555+set_default host_cc
4556+
4557+if ${ranlib} 2>&1 | grep -q "\-D "; then
4558+ ranlib="${ranlib} -D"
4559+fi
4560+
4561+pkg_config_fail_message=""
4562+if ! $pkg_config --version >/dev/null 2>&1; then
4563+ warn "$pkg_config not found, library detection may fail."
4564+ pkg_config=false
4565+elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
4566+ pkg_config_fail_message="
4567+Note: When building a static binary, add --pkg-config-flags=\"--static\"."
4568+fi
4569+
4570+if test $doxygen != $doxygen_default && \
4571+ ! $doxygen --version >/dev/null 2>&1; then
4572+ warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
4573+fi
4574+
4575+exesuf() {
4576+ case $1 in
4577+ mingw32*|mingw64*|msys*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
4578+ esac
4579+}
4580+
4581+EXESUF=$(exesuf $target_os)
4582+HOSTEXESUF=$(exesuf $host_os)
4583+
4584+# set temporary file name
4585+: ${TMPDIR:=$TEMPDIR}
4586+: ${TMPDIR:=$TMP}
4587+: ${TMPDIR:=/tmp}
4588+
4589+if [ -n "$tempprefix" ] ; then
4590+ mktemp(){
4591+ tmpname="$tempprefix.${HOSTNAME}.${UID}"
4592+ echo "$tmpname"
4593+ mkdir "$tmpname"
4594+ }
4595+elif ! test_cmd mktemp -u XXXXXX; then
4596+ # simple replacement for missing mktemp
4597+ # NOT SAFE FOR GENERAL USE
4598+ mktemp(){
4599+ tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
4600+ echo "$tmpname"
4601+ mkdir "$tmpname"
4602+ }
4603+fi
4604+
4605+FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
4606+ die "Unable to create temporary directory in $TMPDIR."
4607+
4608+tmpfile(){
4609+ tmp="${FFTMPDIR}/test"$2
4610+ (set -C; exec > $tmp) 2> /dev/null ||
4611+ die "Unable to create temporary file in $FFTMPDIR."
4612+ eval $1=$tmp
4613+}
4614+
4615+trap 'rm -rf -- "$FFTMPDIR"' EXIT
4616+trap 'exit 2' INT
4617+
4618+tmpfile TMPASM .asm
4619+tmpfile TMPC .c
4620+tmpfile TMPCPP .cpp
4621+tmpfile TMPE $EXESUF
4622+tmpfile TMPH .h
4623+tmpfile TMPM .m
4624+tmpfile TMPCU .cu
4625+tmpfile TMPO .o
4626+tmpfile TMPS .S
4627+tmpfile TMPSH .sh
4628+tmpfile TMPV .ver
4629+
4630+unset -f mktemp
4631+
4632+chmod +x $TMPE
4633+
4634+# make sure we can execute files in $TMPDIR
4635+cat > $TMPSH 2>> $logfile <<EOF
4636+#! /bin/sh
4637+EOF
4638+chmod +x $TMPSH >> $logfile 2>&1
4639+if ! $TMPSH >> $logfile 2>&1; then
4640+ cat <<EOF
4641+Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
4642+variable to another directory and make sure that it is not mounted noexec.
4643+EOF
4644+ die "Sanity test failed."
4645+fi
4646+
4647+armasm_flags(){
4648+ for flag; do
4649+ case $flag in
4650+ # Filter out MSVC cl.exe options from cflags that shouldn't
4651+ # be passed to gas-preprocessor
4652+ -M[TD]*) ;;
4653+ *) echo $flag ;;
4654+ esac
4655+ done
4656+}
4657+
4658+cparser_flags(){
4659+ for flag; do
4660+ case $flag in
4661+ -Wno-switch) echo -Wno-switch-enum ;;
4662+ -Wno-format-zero-length) ;;
4663+ -Wdisabled-optimization) ;;
4664+ -Wno-pointer-sign) echo -Wno-other ;;
4665+ *) echo $flag ;;
4666+ esac
4667+ done
4668+}
4669+
4670+msvc_common_flags(){
4671+ for flag; do
4672+ case $flag in
4673+ # In addition to specifying certain flags under the compiler
4674+ # specific filters, they must be specified here as well or else the
4675+ # generic catch all at the bottom will print the original flag.
4676+ -Wall) ;;
4677+ -Wextra) ;;
4678+ -std=c*) ;;
4679+ # Common flags
4680+ -fomit-frame-pointer) ;;
4681+ -g) echo -Z7 ;;
4682+ -fno-math-errno) ;;
4683+ -fno-common) ;;
4684+ -fno-signed-zeros) ;;
4685+ -fPIC) ;;
4686+ -mthumb) ;;
4687+ -march=*) ;;
4688+ -lz) echo zlib.lib ;;
4689+ -lx264) echo libx264.lib ;;
4690+ -lstdc++) ;;
4691+ -l*) echo ${flag#-l}.lib ;;
4692+ -LARGEADDRESSAWARE) echo $flag ;;
4693+ -L*) echo -libpath:${flag#-L} ;;
4694+ -Wl,*) ;;
4695+ *) echo $flag ;;
4696+ esac
4697+ done
4698+}
4699+
4700+msvc_flags(){
4701+ msvc_common_flags "$@"
4702+ for flag; do
4703+ case $flag in
4704+ -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
4705+ -wd4554 ;;
4706+ -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
4707+ -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
4708+ -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
4709+ -wd4307 \
4710+ -wd4273 -wd4554 -wd4701 -wd4703 ;;
4711+ esac
4712+ done
4713+}
4714+
4715+icl_flags(){
4716+ msvc_common_flags "$@"
4717+ for flag; do
4718+ case $flag in
4719+ # Despite what Intel's documentation says -Wall, which is supported
4720+ # on Windows, does enable remarks so disable them here.
4721+ -Wall) echo $flag -Qdiag-disable:remark ;;
4722+ -std=c99) echo -Qstd=c99 ;;
4723+ -flto*) echo -ipo ;;
4724+ esac
4725+ done
4726+}
4727+
4728+icc_flags(){
4729+ for flag; do
4730+ case $flag in
4731+ -flto*) echo -ipo ;;
4732+ *) echo $flag ;;
4733+ esac
4734+ done
4735+}
4736+
4737+suncc_flags(){
4738+ for flag; do
4739+ case $flag in
4740+ -march=*|-mcpu=*)
4741+ case "${flag#*=}" in
4742+ native) echo -xtarget=native ;;
4743+ v9|niagara) echo -xarch=sparc ;;
4744+ ultrasparc) echo -xarch=sparcvis ;;
4745+ ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
4746+ i586|pentium) echo -xchip=pentium ;;
4747+ i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
4748+ pentium3*|c3-2) echo -xtarget=pentium3 ;;
4749+ pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
4750+ pentium4*) echo -xtarget=pentium4 ;;
4751+ prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
4752+ *-sse3) echo -xarch=sse3 ;;
4753+ core2) echo -xarch=ssse3 -xchip=core2 ;;
4754+ bonnell) echo -xarch=ssse3 ;;
4755+ corei7|nehalem) echo -xtarget=nehalem ;;
4756+ westmere) echo -xtarget=westmere ;;
4757+ silvermont) echo -xarch=sse4_2 ;;
4758+ corei7-avx|sandybridge) echo -xtarget=sandybridge ;;
4759+ core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
4760+ echo -xarch=avx ;;
4761+ amdfam10|barcelona) echo -xtarget=barcelona ;;
4762+ btver1) echo -xarch=amdsse4a ;;
4763+ btver2|bdver*|znver*) echo -xarch=avx ;;
4764+ athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
4765+ k8|opteron|athlon64|athlon-fx)
4766+ echo -xarch=sse2a ;;
4767+ athlon*) echo -xarch=pentium_proa ;;
4768+ esac
4769+ ;;
4770+ -std=c99) echo -xc99 ;;
4771+ -fomit-frame-pointer) echo -xregs=frameptr ;;
4772+ -fPIC) echo -KPIC -xcode=pic32 ;;
4773+ -W*,*) echo $flag ;;
4774+ -f*-*|-W*|-mimpure-text) ;;
4775+ -shared) echo -G ;;
4776+ *) echo $flag ;;
4777+ esac
4778+ done
4779+}
4780+
4781+probe_cc(){
4782+ pfx=$1
4783+ _cc=$2
4784+ first=$3
4785+
4786+ unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
4787+ unset _ld_o _ldflags _ld_lib _ld_path
4788+ unset _depflags _DEPCMD _DEPFLAGS
4789+ _flags_filter=echo
4790+
4791+ if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
4792+ true # no-op to avoid reading stdin in following checks
4793+ elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
4794+ _type=llvm_gcc
4795+ gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
4796+ _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
4797+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4798+ _cflags_speed='-O3'
4799+ _cflags_size='-Os'
4800+ elif $_cc -v 2>&1 | grep -qi ^gcc; then
4801+ _type=gcc
4802+ gcc_version=$($_cc --version | head -n1)
4803+ gcc_basever=$($_cc -dumpversion)
4804+ gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
4805+ gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
4806+ _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
4807+ case $gcc_basever in
4808+ 2) ;;
4809+ 2.*) ;;
4810+ *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
4811+ esac
4812+ if [ "$first" = true ]; then
4813+ case $gcc_basever in
4814+ 4.2*)
4815+ warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
4816+ esac
4817+ fi
4818+ _cflags_speed='-O3'
4819+ _cflags_size='-Os'
4820+ elif $_cc --version 2>/dev/null | grep -q ^icc; then
4821+ _type=icc
4822+ _ident=$($_cc --version | head -n1)
4823+ _depflags='-MMD'
4824+ _cflags_speed='-O3'
4825+ _cflags_size='-Os'
4826+ _cflags_noopt='-O1'
4827+ _flags_filter=icc_flags
4828+ elif $_cc -v 2>&1 | grep -q xlc; then
4829+ _type=xlc
4830+ _ident=$($_cc -qversion 2>/dev/null | head -n1)
4831+ _cflags_speed='-O5'
4832+ _cflags_size='-O5 -qcompact'
4833+ elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
4834+ test -d "$sysroot" || die "No valid sysroot specified."
4835+ _type=armcc
4836+ _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
4837+ armcc_conf="$PWD/armcc.conf"
4838+ $_cc --arm_linux_configure \
4839+ --arm_linux_config_file="$armcc_conf" \
4840+ --configure_sysroot="$sysroot" \
4841+ --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
4842+ die "Error creating armcc configuration file."
4843+ $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
4844+ _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
4845+ as_default="${cross_prefix}gcc"
4846+ _depflags='-MMD'
4847+ _cflags_speed='-O3'
4848+ _cflags_size='-Os'
4849+ elif $_cc -v 2>&1 | grep -q clang && ! $_cc -? > /dev/null 2>&1; then
4850+ _type=clang
4851+ _ident=$($_cc --version 2>/dev/null | head -n1)
4852+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4853+ _cflags_speed='-O3'
4854+ _cflags_size='-Oz'
4855+ elif $_cc -V 2>&1 | grep -q Sun; then
4856+ _type=suncc
4857+ _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
4858+ _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
4859+ _DEPFLAGS='-xM1 -xc99'
4860+ _ldflags='-std=c99'
4861+ _cflags_speed='-O5'
4862+ _cflags_size='-O5 -xspace'
4863+ _flags_filter=suncc_flags
4864+ elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
4865+ _type=pathscale
4866+ _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4867+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4868+ _cflags_speed='-O2'
4869+ _cflags_size='-Os'
4870+ _flags_filter='filter_out -Wdisabled-optimization'
4871+ elif $_cc -v 2>&1 | grep -q Open64; then
4872+ _type=open64
4873+ _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4874+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4875+ _cflags_speed='-O2'
4876+ _cflags_size='-Os'
4877+ _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
4878+ elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
4879+ _type=armasm
4880+ _ident=$($_cc | head -n1)
4881+ # 4509: "This form of conditional instruction is deprecated"
4882+ _flags="-nologo -ignore 4509"
4883+ _flags_filter=armasm_flags
4884+ elif $_cc 2>&1 | grep -q Intel; then
4885+ _type=icl
4886+ _ident=$($_cc 2>&1 | head -n1)
4887+ _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
4888+ # Not only is O3 broken on 13.x+ but it is slower on all previous
4889+ # versions (tested) as well.
4890+ _cflags_speed="-O2"
4891+ _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
4892+ if $_cc 2>&1 | grep -q Linker; then
4893+ _ld_o='-out:$@'
4894+ else
4895+ _ld_o='-Fe$@'
4896+ fi
4897+ _cc_o='-Fo$@'
4898+ _cc_e='-P'
4899+ _flags_filter=icl_flags
4900+ _ld_lib='lib%.a'
4901+ _ld_path='-libpath:'
4902+ # -Qdiag-error to make icl error when seeing certain unknown arguments
4903+ _flags='-nologo -Qdiag-error:4044,10157'
4904+ # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
4905+ # with MSVC which enables it by default.
4906+ _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
4907+ disable stripping
4908+ elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
4909+ # lld can emulate multiple different linkers; in ms link.exe mode,
4910+ # the -? parameter gives the help output which contains an identifyable
4911+ # string, while it gives an error in other modes.
4912+ _type=lld-link
4913+ # The link.exe mode doesn't have a switch for getting the version,
4914+ # but we can force it back to gnu mode and get the version from there.
4915+ _ident=$($_cc -flavor gnu --version 2>/dev/null)
4916+ _ld_o='-out:$@'
4917+ _flags_filter=msvc_flags
4918+ _ld_lib='lib%.a'
4919+ _ld_path='-libpath:'
4920+ elif $_cc -nologo- 2>&1 | grep -q Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then
4921+ _type=msvc
4922+ if $_cc -nologo- 2>&1 | grep -q Microsoft; then
4923+ _ident=$($_cc 2>&1 | head -n1 | tr -d '\r')
4924+ else
4925+ _ident=$($_cc --version 2>/dev/null | head -n1 | tr -d '\r')
4926+ fi
4927+ _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
4928+ _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
4929+ _cflags_speed="-O2"
4930+ _cflags_size="-O1"
4931+ _cflags_noopt="-O1"
4932+ if $_cc -nologo- 2>&1 | grep -q Linker; then
4933+ _ld_o='-out:$@'
4934+ else
4935+ _ld_o='-Fe$@'
4936+ fi
4937+ _cc_o='-Fo$@'
4938+ _cc_e='-P -Fi$@'
4939+ _flags_filter=msvc_flags
4940+ _ld_lib='lib%.a'
4941+ _ld_path='-libpath:'
4942+ _flags='-nologo'
4943+ disable stripping
4944+ elif $_cc --version 2>/dev/null | grep -q ^cparser; then
4945+ _type=cparser
4946+ _ident=$($_cc --version | head -n1)
4947+ _depflags='-MMD'
4948+ _cflags_speed='-O4'
4949+ _cflags_size='-O2'
4950+ _flags_filter=cparser_flags
4951+ fi
4952+
4953+ eval ${pfx}_type=\$_type
4954+ eval ${pfx}_ident=\$_ident
4955+}
4956+
4957+set_ccvars(){
4958+ eval ${1}_C=\${_cc_c-\${${1}_C}}
4959+ eval ${1}_E=\${_cc_e-\${${1}_E}}
4960+ eval ${1}_O=\${_cc_o-\${${1}_O}}
4961+
4962+ if [ -n "$_depflags" ]; then
4963+ eval ${1}_DEPFLAGS=\$_depflags
4964+ else
4965+ eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
4966+ eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
4967+ eval DEP${1}FLAGS=\$_flags
4968+ fi
4969+}
4970+
4971+probe_cc cc "$cc" "true"
4972+cflags_filter=$_flags_filter
4973+cflags_speed=$_cflags_speed
4974+cflags_size=$_cflags_size
4975+cflags_noopt=$_cflags_noopt
4976+add_cflags $_flags $_cflags
4977+cc_ldflags=$_ldflags
4978+set_ccvars CC
4979+set_ccvars CXX
4980+
4981+probe_cc hostcc "$host_cc"
4982+host_cflags_filter=$_flags_filter
4983+host_cflags_speed=$_cflags_speed
4984+add_host_cflags $_flags $_cflags
4985+set_ccvars HOSTCC
4986+
4987+test -n "$cc_type" && enable $cc_type ||
4988+ warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
4989+
4990+: ${as_default:=$cc}
4991+: ${objcc_default:=$cc}
4992+: ${dep_cc_default:=$cc}
4993+: ${ld_default:=$cc}
4994+: ${host_ld_default:=$host_cc}
4995+set_default ar as objcc dep_cc ld ln_s host_ld windres
4996+
4997+probe_cc as "$as"
4998+asflags_filter=$_flags_filter
4999+add_asflags $_flags $_cflags
5000+set_ccvars AS
5001+
5002+probe_cc objcc "$objcc"
5003+objcflags_filter=$_flags_filter
5004+add_objcflags $_flags $_cflags
5005+set_ccvars OBJC
5006+
5007+probe_cc ld "$ld"
5008+ldflags_filter=$_flags_filter
5009+add_ldflags $_flags $_ldflags
5010+test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
5011+LD_O=${_ld_o-$LD_O}
5012+LD_LIB=${_ld_lib-$LD_LIB}
5013+LD_PATH=${_ld_path-$LD_PATH}
5014+
5015+probe_cc hostld "$host_ld"
5016+host_ldflags_filter=$_flags_filter
5017+add_host_ldflags $_flags $_ldflags
5018+HOSTLD_O=${_ld_o-$HOSTLD_O}
5019+
5020+if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
5021+ probe_cc depcc "$dep_cc"
5022+ CCDEP=${_DEPCMD:-$DEPCMD}
5023+ CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
5024+ DEPCCFLAGS=$_flags
5025+fi
5026+
5027+if $ar 2>&1 | grep -q Microsoft; then
5028+ arflags="-nologo"
5029+ ar_o='-out:$@'
5030+elif $ar 2>&1 | grep -q "\[D\] "; then
5031+ arflags="rcD"
5032+ ar_o='$@'
5033+else
5034+ arflags="rc"
5035+ ar_o='$@'
5036+fi
5037+
5038+add_cflags $extra_cflags
5039+add_cxxflags $extra_cxxflags
5040+add_objcflags $extra_objcflags
5041+add_asflags $extra_cflags
5042+
5043+if test -n "$sysroot"; then
5044+ case "$cc_type" in
5045+ gcc|llvm_gcc|clang)
5046+ add_cppflags --sysroot="$sysroot"
5047+ add_ldflags --sysroot="$sysroot"
5048+ ;;
5049+ esac
5050+fi
5051+
5052+if test "$cpu" = host; then
5053+ enabled cross_compile &&
5054+ warn "--cpu=host makes no sense when cross-compiling."
5055+
5056+ case "$cc_type" in
5057+ gcc|llvm_gcc)
5058+ check_native(){
5059+ $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
5060+ sed -n "/cc1.*$1=/{
5061+ s/.*$1=\\([^ ]*\\).*/\\1/
5062+ p
5063+ q
5064+ }" $TMPE
5065+ }
5066+ cpu=$(check_native -march || check_native -mcpu)
5067+ ;;
5068+ clang)
5069+ check_native(){
5070+ $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
5071+ sed -n "/cc1.*-target-cpu /{
5072+ s/.*-target-cpu \\([^ ]*\\).*/\\1/
5073+ p
5074+ q
5075+ }" $TMPE
5076+ }
5077+ cpu=$(check_native -march)
5078+ ;;
5079+ esac
5080+
5081+ test "${cpu:-host}" = host &&
5082+ die "--cpu=host not supported with compiler $cc"
5083+fi
5084+
5085+# Deal with common $arch aliases
5086+case "$arch" in
5087+ aarch64|arm64)
5088+ arch="aarch64"
5089+ ;;
5090+ arm*|iPad*|iPhone*)
5091+ arch="arm"
5092+ ;;
5093+ loongarch*)
5094+ arch="loongarch"
5095+ ;;
5096+ mips*|IP*)
5097+ case "$arch" in
5098+ *el)
5099+ add_cppflags -EL
5100+ add_ldflags -EL
5101+ ;;
5102+ *eb)
5103+ add_cppflags -EB
5104+ add_ldflags -EB
5105+ ;;
5106+ esac
5107+ arch="mips"
5108+ ;;
5109+ parisc*|hppa*)
5110+ arch="parisc"
5111+ ;;
5112+ "Power Macintosh"|ppc*|powerpc*)
5113+ arch="ppc"
5114+ ;;
5115+ riscv*)
5116+ arch="riscv"
5117+ ;;
5118+ s390|s390x)
5119+ arch="s390"
5120+ ;;
5121+ sh4|sh)
5122+ arch="sh4"
5123+ ;;
5124+ sun4*|sparc*)
5125+ arch="sparc"
5126+ ;;
5127+ tilegx|tile-gx)
5128+ arch="tilegx"
5129+ ;;
5130+ i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
5131+ arch="x86"
5132+ ;;
5133+esac
5134+
5135+is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
5136+enable $arch
5137+
5138+# Add processor-specific flags
5139+if enabled aarch64; then
5140+
5141+ case $cpu in
5142+ armv*)
5143+ cpuflags="-march=$cpu"
5144+ ;;
5145+ *)
5146+ cpuflags="-mcpu=$cpu"
5147+ ;;
5148+ esac
5149+
5150+elif enabled alpha; then
5151+
5152+ cpuflags="-mcpu=$cpu"
5153+
5154+elif enabled arm; then
5155+
5156+ check_arm_arch() {
5157+ test_cpp_condition stddef.h \
5158+ "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
5159+ $cpuflags
5160+ }
5161+
5162+ probe_arm_arch() {
5163+ if check_arm_arch 4; then echo armv4
5164+ elif check_arm_arch 4T; then echo armv4t
5165+ elif check_arm_arch 5; then echo armv5
5166+ elif check_arm_arch 5E; then echo armv5e
5167+ elif check_arm_arch 5T; then echo armv5t
5168+ elif check_arm_arch 5TE; then echo armv5te
5169+ elif check_arm_arch 5TEJ; then echo armv5te
5170+ elif check_arm_arch 6; then echo armv6
5171+ elif check_arm_arch 6J; then echo armv6j
5172+ elif check_arm_arch 6K; then echo armv6k
5173+ elif check_arm_arch 6Z; then echo armv6z
5174+ elif check_arm_arch 6KZ; then echo armv6zk
5175+ elif check_arm_arch 6ZK; then echo armv6zk
5176+ elif check_arm_arch 6T2; then echo armv6t2
5177+ elif check_arm_arch 7; then echo armv7
5178+ elif check_arm_arch 7A 7_A; then echo armv7-a
5179+ elif check_arm_arch 7S; then echo armv7-a
5180+ elif check_arm_arch 7R 7_R; then echo armv7-r
5181+ elif check_arm_arch 7M 7_M; then echo armv7-m
5182+ elif check_arm_arch 7EM 7E_M; then echo armv7-m
5183+ elif check_arm_arch 8A 8_A; then echo armv8-a
5184+ fi
5185+ }
5186+
5187+
5188+ case $cpu in
5189+ generic)
5190+ subarch=$(probe_arm_arch | sed 's/[^a-z0-9]//g')
5191+ ;;
5192+ armv*)
5193+ cpuflags="-march=$cpu"
5194+ subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
5195+ ;;
5196+ *)
5197+ cpuflags="-mcpu=$cpu"
5198+ case $cpu in
5199+ cortex-a*) subarch=armv7a ;;
5200+ cortex-r*) subarch=armv7r ;;
5201+ cortex-m*) enable thumb; subarch=armv7m ;;
5202+ arm11*) subarch=armv6 ;;
5203+ arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
5204+ armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
5205+ *) subarch=$(probe_arm_arch) ;;
5206+ esac
5207+ ;;
5208+ esac
5209+
5210+ case "$subarch" in
5211+ armv5t*) enable fast_clz ;;
5212+ armv[6-8]*)
5213+ enable fast_clz
5214+ disabled fast_unaligned || enable fast_unaligned
5215+ ;;
5216+ esac
5217+
5218+ test_cflags -mfp16-format=ieee && add_cflags -mfp16-format=ieee
5219+
5220+elif enabled avr32; then
5221+
5222+ case $cpu in
5223+ ap7[02]0[0-2])
5224+ subarch="avr32_ap"
5225+ cpuflags="-mpart=$cpu"
5226+ ;;
5227+ ap)
5228+ subarch="avr32_ap"
5229+ cpuflags="-march=$cpu"
5230+ ;;
5231+ uc3[ab]*)
5232+ subarch="avr32_uc"
5233+ cpuflags="-mcpu=$cpu"
5234+ ;;
5235+ uc)
5236+ subarch="avr32_uc"
5237+ cpuflags="-march=$cpu"
5238+ ;;
5239+ esac
5240+
5241+elif enabled bfin; then
5242+
5243+ cpuflags="-mcpu=$cpu"
5244+
5245+elif enabled loongarch; then
5246+
5247+ enable local_aligned
5248+ enable simd_align_32
5249+ enable fast_64bit
5250+ enable fast_clz
5251+ enable fast_unaligned
5252+ case $cpu in
5253+ la464)
5254+ cpuflags="-march=$cpu"
5255+ ;;
5256+ esac
5257+elif enabled mips; then
5258+
5259+ if [ "$cpu" != "generic" ]; then
5260+ disable mips32r2
5261+ disable mips32r5
5262+ disable mips64r2
5263+ disable mips32r6
5264+ disable mips64r6
5265+ disable loongson2
5266+ disable loongson3
5267+ disable mipsdsp
5268+ disable mipsdspr2
5269+
5270+ cpuflags="-march=$cpu"
5271+
5272+ case $cpu in
5273+ # General ISA levels
5274+ mips1|mips3)
5275+ ;;
5276+ mips32r2)
5277+ enable mips32r2
5278+ ;;
5279+ mips32r5)
5280+ enable mips32r2
5281+ enable mips32r5
5282+ ;;
5283+ mips64r2|mips64r5)
5284+ enable mips64r2
5285+ enable loongson3
5286+ ;;
5287+ # Cores from MIPS(MTI)
5288+ 24kc)
5289+ disable mipsfpu
5290+ enable mips32r2
5291+ ;;
5292+ 24kf*|24kec|34kc|74Kc|1004kc)
5293+ enable mips32r2
5294+ ;;
5295+ 24kef*|34kf*|1004kf*)
5296+ enable mipsdsp
5297+ enable mips32r2
5298+ ;;
5299+ p5600)
5300+ enable mips32r2
5301+ enable mips32r5
5302+ check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
5303+ ;;
5304+ i6400)
5305+ enable mips64r6
5306+ check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
5307+ ;;
5308+ p6600)
5309+ enable mips64r6
5310+ check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
5311+ ;;
5312+ # Cores from Loongson
5313+ loongson2e|loongson2f|loongson3*)
5314+ enable local_aligned
5315+ enable simd_align_16
5316+ enable fast_64bit
5317+ enable fast_clz
5318+ enable fast_cmov
5319+ enable fast_unaligned
5320+ disable aligned_stack
5321+ # When gcc version less than 5.3.0, add -fno-expensive-optimizations flag.
5322+ if test "$cc_type" = "gcc"; then
5323+ case $gcc_basever in
5324+ 2|2.*|3.*|4.*|5.0|5.1|5.2)
5325+ expensive_optimization_flag="-fno-expensive-optimizations"
5326+ ;;
5327+ *)
5328+ expensive_optimization_flag=""
5329+ ;;
5330+ esac
5331+ fi
5332+
5333+ case $cpu in
5334+ loongson3*)
5335+ enable loongson3
5336+ cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag"
5337+ ;;
5338+ loongson2e)
5339+ enable loongson2
5340+ cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag"
5341+ ;;
5342+ loongson2f)
5343+ enable loongson2
5344+ cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag"
5345+ ;;
5346+ esac
5347+ ;;
5348+ *)
5349+ warn "unknown MIPS CPU"
5350+ ;;
5351+ esac
5352+
5353+ else
5354+ disable mipsdsp
5355+ disable mipsdspr2
5356+ # Disable DSP stuff for generic CPU, it can't be detected at runtime.
5357+ warn 'generic cpu selected'
5358+ fi
5359+
5360+elif enabled ppc; then
5361+
5362+ disable ldbrx
5363+
5364+ case $(tolower $cpu) in
5365+ 601|ppc601|powerpc601)
5366+ cpuflags="-mcpu=601"
5367+ disable altivec
5368+ ;;
5369+ 603*|ppc603*|powerpc603*)
5370+ cpuflags="-mcpu=603"
5371+ disable altivec
5372+ ;;
5373+ 604*|ppc604*|powerpc604*)
5374+ cpuflags="-mcpu=604"
5375+ disable altivec
5376+ ;;
5377+ g3|75*|ppc75*|powerpc75*)
5378+ cpuflags="-mcpu=750"
5379+ disable altivec
5380+ ;;
5381+ g4|745*|ppc745*|powerpc745*)
5382+ cpuflags="-mcpu=7450"
5383+ disable vsx
5384+ ;;
5385+ 74*|ppc74*|powerpc74*)
5386+ cpuflags="-mcpu=7400"
5387+ disable vsx
5388+ ;;
5389+ g5|970|ppc970|powerpc970)
5390+ cpuflags="-mcpu=970"
5391+ disable vsx
5392+ ;;
5393+ power[3-6]*)
5394+ cpuflags="-mcpu=$cpu"
5395+ disable vsx
5396+ ;;
5397+ power[7-8]*)
5398+ cpuflags="-mcpu=$cpu"
5399+ ;;
5400+ cell)
5401+ cpuflags="-mcpu=cell"
5402+ enable ldbrx
5403+ disable vsx
5404+ ;;
5405+ e500mc)
5406+ cpuflags="-mcpu=e500mc"
5407+ disable altivec
5408+ ;;
5409+ e500v2)
5410+ cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
5411+ disable altivec
5412+ disable dcbzl
5413+ ;;
5414+ e500)
5415+ cpuflags="-mcpu=8540 -mhard-float"
5416+ disable altivec
5417+ disable dcbzl
5418+ ;;
5419+ esac
5420+
5421+elif enabled riscv; then
5422+
5423+ if test_cpp_condition stddef.h "__riscv_zbb"; then
5424+ enable fast_clz
5425+ fi
5426+
5427+elif enabled sparc; then
5428+
5429+ case $cpu in
5430+ cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
5431+ cpuflags="-mcpu=$cpu"
5432+ ;;
5433+ ultrasparc*|niagara[234])
5434+ cpuflags="-mcpu=$cpu"
5435+ ;;
5436+ esac
5437+
5438+elif enabled x86; then
5439+
5440+ case $cpu in
5441+ i[345]86|pentium)
5442+ cpuflags="-march=$cpu"
5443+ disable i686
5444+ disable mmx
5445+ ;;
5446+ # targets that do NOT support nopl and conditional mov (cmov)
5447+ pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
5448+ cpuflags="-march=$cpu"
5449+ disable i686
5450+ ;;
5451+ # targets that do support conditional mov but on which it's slow
5452+ pentium4|pentium4m|prescott|nocona)
5453+ cpuflags="-march=$cpu"
5454+ enable i686
5455+ disable fast_cmov
5456+ ;;
5457+ # everything else should support nopl and conditional mov (cmov)
5458+ *)
5459+ cpuflags="-march=$cpu"
5460+ enable i686
5461+ enable fast_cmov
5462+ ;;
5463+ esac
5464+
5465+fi
5466+
5467+if [ "$cpu" != generic ]; then
5468+ add_cflags $cpuflags
5469+ add_asflags $cpuflags
5470+ test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
5471+fi
5472+
5473+# compiler sanity check
5474+test_exec <<EOF
5475+int main(void){ return 0; }
5476+EOF
5477+if test "$?" != 0; then
5478+ echo "$cc is unable to create an executable file."
5479+ if test -z "$cross_prefix" && ! enabled cross_compile ; then
5480+ echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
5481+ echo "Only do this if you know what cross compiling means."
5482+ fi
5483+ die "C compiler test failed."
5484+fi
5485+
5486+add_cppflags -D_ISOC99_SOURCE
5487+add_cxxflags -D__STDC_CONSTANT_MACROS
5488+check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
5489+
5490+# some compilers silently accept -std=c11, so we also need to check that the
5491+# version macro is defined properly
5492+test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" &&
5493+ add_cflags -std=c11 ||
5494+ check_cflags -std=c99
5495+
5496+check_cppflags -D_FILE_OFFSET_BITS=64
5497+check_cppflags -D_LARGEFILE_SOURCE
5498+
5499+add_host_cppflags -D_ISOC99_SOURCE
5500+check_host_cflags -std=c99
5501+check_host_cflags -Wall
5502+check_host_cflags $host_cflags_speed
5503+
5504+check_64bit(){
5505+ arch32=$1
5506+ arch64=$2
5507+ expr=${3:-'sizeof(void *) > 4'}
5508+ test_code cc "" "int test[2*($expr) - 1]" &&
5509+ subarch=$arch64 || subarch=$arch32
5510+ enable $subarch
5511+}
5512+
5513+case "$arch" in
5514+ aarch64|alpha|ia64)
5515+ enabled shared && enable_weak pic
5516+ ;;
5517+ loongarch)
5518+ check_64bit loongarch32 loongarch64
5519+ enabled loongarch64 && disable loongarch32
5520+ enabled shared && enable_weak pic
5521+ ;;
5522+ mips)
5523+ check_64bit mips mips64 '_MIPS_SIM > 1'
5524+ enabled shared && enable_weak pic
5525+ ;;
5526+ parisc)
5527+ check_64bit parisc parisc64
5528+ enabled shared && enable_weak pic
5529+ ;;
5530+ ppc)
5531+ check_64bit ppc ppc64
5532+ enabled shared && enable_weak pic
5533+ ;;
5534+ riscv)
5535+ check_64bit riscv32 riscv64
5536+ enabled shared && enable_weak pic
5537+ ;;
5538+ s390)
5539+ check_64bit s390 s390x
5540+ enabled shared && enable_weak pic
5541+ ;;
5542+ sparc)
5543+ check_64bit sparc sparc64
5544+ enabled shared && enable_weak pic
5545+ ;;
5546+ x86)
5547+ check_64bit x86_32 x86_64
5548+ # Treat x32 as x64 for now. Note it also needs pic if shared
5549+ test "$subarch" = "x86_32" && test_cpp_condition stddef.h 'defined(__x86_64__)' &&
5550+ subarch=x86_64 && enable x86_64 && disable x86_32
5551+ if enabled x86_64; then
5552+ enabled shared && enable_weak pic
5553+ objformat=elf64
5554+ fi
5555+ ;;
5556+esac
5557+
5558+# OS specific
5559+case $target_os in
5560+ aix)
5561+ SHFLAGS=-shared
5562+ add_cppflags '-I\$(SRC_PATH)/compat/aix'
5563+ enabled shared && add_ldflags -Wl,-brtl
5564+ arflags='-Xany -r -c'
5565+ striptype=""
5566+ ;;
5567+ android)
5568+ disable symver
5569+ enable section_data_rel_ro
5570+ add_cflags -fPIE
5571+ add_ldexeflags -fPIE -pie
5572+ SLIB_INSTALL_NAME='$(SLIBNAME)'
5573+ SLIB_INSTALL_LINKS=
5574+ SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
5575+ ;;
5576+ haiku)
5577+ prefix_default="/boot/common"
5578+ network_extralibs="-lnetwork"
5579+ host_extralibs=
5580+ ;;
5581+ sunos)
5582+ SHFLAGS='-shared -Wl,-h,$$(@F)'
5583+ enabled x86 && append SHFLAGS -mimpure-text
5584+ network_extralibs="-lsocket -lnsl"
5585+ add_cppflags -D__EXTENSIONS__
5586+ # When using suncc to build, the Solaris linker will mark
5587+ # an executable with each instruction set encountered by
5588+ # the Solaris assembler. As our libraries contain their own
5589+ # guards for processor-specific code, instead suppress
5590+ # generation of the HWCAPS ELF section on Solaris x86 only.
5591+ enabled_all suncc x86 &&
5592+ echo "hwcap_1 = OVERRIDE;" > mapfile &&
5593+ add_ldflags -Wl,-M,mapfile
5594+ nm_default='nm -P -g'
5595+ striptype=""
5596+ version_script='-M'
5597+ VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
5598+ ;;
5599+ netbsd)
5600+ disable symver
5601+ enable section_data_rel_ro
5602+ oss_indev_extralibs="-lossaudio"
5603+ oss_outdev_extralibs="-lossaudio"
5604+ enabled gcc || check_ldflags -Wl,-zmuldefs
5605+ ;;
5606+ openbsd|bitrig)
5607+ disable symver
5608+ enable section_data_rel_ro
5609+ striptype=""
5610+ SHFLAGS='-shared'
5611+ SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
5612+ SLIB_INSTALL_LINKS=
5613+ oss_indev_extralibs="-lossaudio"
5614+ oss_outdev_extralibs="-lossaudio"
5615+ ;;
5616+ dragonfly)
5617+ disable symver
5618+ ;;
5619+ freebsd)
5620+ enable section_data_rel_ro
5621+ ;;
5622+ bsd/os)
5623+ add_extralibs -lpoll -lgnugetopt
5624+ strip="strip -d"
5625+ ;;
5626+ darwin)
5627+ enabled ppc && add_asflags -force_cpusubtype_ALL
5628+ install_name_dir_default='$(SHLIBDIR)'
5629+ SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
5630+ enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
5631+ strip="${strip} -x"
5632+ add_ldflags -Wl,-dynamic,-search_paths_first
5633+ check_cflags -Werror=partial-availability
5634+ SLIBSUF=".dylib"
5635+ SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
5636+ SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
5637+ enabled x86_64 && objformat="macho64" || objformat="macho32"
5638+ enabled_any pic shared x86_64 ||
5639+ { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
5640+ check_headers dispatch/dispatch.h &&
5641+ add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
5642+ if test -n "$sysroot"; then
5643+ is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
5644+ is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot
5645+ fi
5646+ version_script='-exported_symbols_list'
5647+ VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
5648+ # Workaround for Xcode 11 -fstack-check bug
5649+ if enabled clang; then
5650+ clang_version=$($cc -dumpversion)
5651+ test ${clang_version%%.*} -eq 11 && add_cflags -fno-stack-check
5652+ fi
5653+ ;;
5654+ msys*)
5655+ die "Native MSYS builds are discouraged, please use the MINGW environment."
5656+ ;;
5657+ mingw32*|mingw64*)
5658+ target_os=mingw32
5659+ LIBTARGET=i386
5660+ if enabled x86_64; then
5661+ LIBTARGET="i386:x86-64"
5662+ elif enabled arm; then
5663+ LIBTARGET="arm"
5664+ elif enabled aarch64; then
5665+ LIBTARGET="arm64"
5666+ fi
5667+ if enabled shared; then
5668+ # Cannot build both shared and static libs when using dllimport.
5669+ disable static
5670+ fi
5671+ ! enabled small && test_cmd $windres --version && enable gnu_windres
5672+ enabled x86_32 && check_ldflags -Wl,--large-address-aware
5673+ add_cppflags -DWIN32_LEAN_AND_MEAN
5674+ shlibdir_default="$bindir_default"
5675+ SLIBPREF=""
5676+ SLIBSUF=".dll"
5677+ SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5678+ SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5679+ if test_cmd lib.exe -list; then
5680+ SLIB_EXTRA_CMD=-'lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
5681+ if enabled x86_64; then
5682+ LIBTARGET=x64
5683+ fi
5684+ else
5685+ SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
5686+ fi
5687+ SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5688+ SLIB_INSTALL_LINKS=
5689+ SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
5690+ SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
5691+ SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" AR="$(AR_CMD)" NM="$(NM_CMD)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
5692+ SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-image-base $$(@:$(SLIBSUF)=.def)'
5693+ enabled x86_64 && objformat="win64" || objformat="win32"
5694+ dlltool="${cross_prefix}dlltool"
5695+ ranlib=:
5696+ enable dos_paths
5697+ check_ldflags -Wl,--nxcompat,--dynamicbase
5698+ # Lets work around some stupidity in binutils.
5699+ # ld will strip relocations from executables even though we need them
5700+ # for dynamicbase (ASLR). Using -pie does retain the reloc section
5701+ # however ld then forgets what the entry point should be (oops) so we
5702+ # have to manually (re)set it.
5703+ if enabled x86_32; then
5704+ disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
5705+ elif enabled x86_64; then
5706+ disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
5707+ check_ldflags -Wl,--high-entropy-va # binutils 2.25
5708+ # Set image base >4GB for extra entropy with HEASLR
5709+ add_ldexeflags -Wl,--image-base,0x140000000
5710+ append SHFLAGS -Wl,--image-base,0x180000000
5711+ fi
5712+ ;;
5713+ win32|win64)
5714+ disable symver
5715+ if enabled shared; then
5716+ # Link to the import library instead of the normal static library
5717+ # for shared libs.
5718+ LD_LIB='%.lib'
5719+ # Cannot build both shared and static libs with MSVC or icl.
5720+ disable static
5721+ fi
5722+ ! enabled small && test_cmd $windres --version && enable gnu_windres
5723+ enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
5724+ add_cppflags -DWIN32_LEAN_AND_MEAN
5725+ shlibdir_default="$bindir_default"
5726+ SLIBPREF=""
5727+ SLIBSUF=".dll"
5728+ SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5729+ SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5730+ SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
5731+ SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5732+ SLIB_INSTALL_LINKS=
5733+ SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
5734+ SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
5735+ SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
5736+ enabled x86_64 && objformat="win64" || objformat="win32"
5737+ ranlib=:
5738+ enable dos_paths
5739+ ;;
5740+ cygwin*)
5741+ target_os=cygwin
5742+ shlibdir_default="$bindir_default"
5743+ SLIBPREF="cyg"
5744+ SLIBSUF=".dll"
5745+ SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5746+ SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5747+ SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5748+ SLIB_INSTALL_LINKS=
5749+ SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
5750+ SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
5751+ enabled x86_64 && objformat="win64" || objformat="win32"
5752+ enable dos_paths
5753+ ! enabled small && test_cmd $windres --version && enable gnu_windres
5754+ add_cppflags -DWIN32_LEAN_AND_MEAN
5755+ add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5756+ ;;
5757+ *-dos|freedos|opendos)
5758+ network_extralibs="-lsocket"
5759+ objformat="coff"
5760+ enable dos_paths
5761+ ;;
5762+ linux)
5763+ enable section_data_rel_ro
5764+ enabled_any arm aarch64 && enable_weak linux_perf
5765+ ;;
5766+ irix*)
5767+ target_os=irix
5768+ ranlib="echo ignoring ranlib"
5769+ ;;
5770+ os/2*)
5771+ strip="lxlite -CS"
5772+ striptype=""
5773+ objformat="aout"
5774+ add_cppflags -D_GNU_SOURCE
5775+ add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
5776+ SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
5777+ LIBSUF="_s.a"
5778+ SLIBPREF=""
5779+ SLIBSUF=".dll"
5780+ SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5781+ SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
5782+ SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \
5783+ echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \
5784+ echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \
5785+ echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \
5786+ emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def'
5787+ SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \
5788+ emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;'
5789+ SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5790+ SLIB_INSTALL_LINKS=
5791+ SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib'
5792+ enable dos_paths
5793+ enable_weak os2threads
5794+ ;;
5795+ gnu/kfreebsd)
5796+ add_cppflags -D_BSD_SOURCE
5797+ ;;
5798+ gnu)
5799+ ;;
5800+ qnx)
5801+ add_cppflags -D_QNX_SOURCE
5802+ network_extralibs="-lsocket"
5803+ ;;
5804+ symbian)
5805+ SLIBSUF=".dll"
5806+ enable dos_paths
5807+ add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
5808+ add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
5809+ add_ldflags -Wl,--target1-abs,--no-undefined \
5810+ -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
5811+ -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
5812+ add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
5813+ -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
5814+ -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
5815+ ;;
5816+ minix)
5817+ ;;
5818+ none)
5819+ ;;
5820+ *)
5821+ die "Unknown OS '$target_os'."
5822+ ;;
5823+esac
5824+
5825+# test if creating links works
5826+link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX)
5827+link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX)
5828+mkdir "$link_dest"
5829+$ln_s "$link_dest" "$link_name"
5830+touch "$link_dest/test_file"
5831+if [ "$source_path" != "." ] && [ "$source_path" != "src" ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then
5832+ # create link to source path
5833+ [ -e src ] && rm src
5834+ $ln_s "$source_path" src
5835+ source_link=src
5836+else
5837+ # creating directory links doesn't work
5838+ # fall back to using the full source path
5839+ source_link="$source_path"
5840+fi
5841+# cleanup
5842+rm -r "$link_dest"
5843+rm -r "$link_name"
5844+
5845+# determine libc flavour
5846+
5847+probe_libc(){
5848+ pfx=$1
5849+ pfx_no_=${pfx%_}
5850+ # uclibc defines __GLIBC__, so it needs to be checked before glibc.
5851+ if test_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
5852+ eval ${pfx}libc_type=uclibc
5853+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5854+ elif test_${pfx}cpp_condition features.h "defined __GLIBC__"; then
5855+ eval ${pfx}libc_type=glibc
5856+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5857+ # MinGW headers can be installed on Cygwin, so check for newlib first.
5858+ elif test_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
5859+ eval ${pfx}libc_type=newlib
5860+ add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
5861+ # MinGW64 is backwards compatible with MinGW32, so check for it first.
5862+ elif test_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
5863+ eval ${pfx}libc_type=mingw64
5864+ if test_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
5865+ add_compat msvcrt/snprintf.o
5866+ add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
5867+ fi
5868+ add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5869+ eval test \$${pfx_no_}cc_type = "gcc" &&
5870+ add_${pfx}cppflags -D__printf__=__gnu_printf__
5871+ test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
5872+ add_${pfx}cppflags -D_WIN32_WINNT=0x0600
5873+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5874+ elif test_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
5875+ test_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
5876+ eval ${pfx}libc_type=mingw32
5877+ test_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
5878+ (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
5879+ die "ERROR: MinGW32 runtime version must be >= 3.15."
5880+ add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5881+ test_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
5882+ add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
5883+ test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
5884+ add_${pfx}cppflags -D_WIN32_WINNT=0x0600
5885+ eval test \$${pfx_no_}cc_type = "gcc" &&
5886+ add_${pfx}cppflags -D__printf__=__gnu_printf__
5887+ add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5888+ elif test_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
5889+ eval ${pfx}libc_type=msvcrt
5890+ if test_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
5891+ if [ "$pfx" = host_ ]; then
5892+ add_host_cppflags -Dsnprintf=_snprintf
5893+ else
5894+ add_compat strtod.o strtod=avpriv_strtod
5895+ add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
5896+ _snprintf=avpriv_snprintf \
5897+ vsnprintf=avpriv_vsnprintf
5898+ fi
5899+ fi
5900+ add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
5901+ # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
5902+ # 0x601 by default unless something else is set by the user.
5903+ # This can easily lead to us detecting functions only present
5904+ # in such new versions and producing binaries requiring windows 7.0.
5905+ # Therefore explicitly set the default to Vista unless the user has
5906+ # set something else on the command line.
5907+ # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
5908+ # family. For these cases, configure is free to use any functions
5909+ # found in the SDK headers by default. (Alternatively, we could force
5910+ # _WIN32_WINNT to 0x0602 in that case.)
5911+ test_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
5912+ { test_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0600; }
5913+#ifdef WINAPI_FAMILY
5914+#include <winapifamily.h>
5915+#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
5916+#error not desktop
5917+#endif
5918+#endif
5919+EOF
5920+ if [ "$pfx" = "" ]; then
5921+ check_func strtoll || add_cflags -Dstrtoll=_strtoi64
5922+ check_func strtoull || add_cflags -Dstrtoull=_strtoui64
5923+ fi
5924+ elif test_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
5925+ eval ${pfx}libc_type=klibc
5926+ elif test_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
5927+ eval ${pfx}libc_type=bionic
5928+ elif test_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
5929+ eval ${pfx}libc_type=solaris
5930+ add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
5931+ elif test_${pfx}cpp_condition sys/version.h "defined __DJGPP__"; then
5932+ eval ${pfx}libc_type=djgpp
5933+ add_cppflags -U__STRICT_ANSI__
5934+ add_cflags "-include $source_path/compat/djgpp/math.h"
5935+ add_compat djgpp/math.o
5936+ fi
5937+ test_${pfx}cc <<EOF
5938+#include <time.h>
5939+void *v = localtime_r;
5940+EOF
5941+test "$?" != 0 && test_${pfx}cc -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 <<EOF && add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5942+#include <time.h>
5943+void *v = localtime_r;
5944+EOF
5945+
5946+ eval test -n "\${${pfx}libc_type}" && enable ${pfx}libc_${libc_type}
5947+}
5948+
5949+probe_libc
5950+probe_libc host_
5951+
5952+# hacks for compiler/libc/os combinations
5953+
5954+case $libc_type in
5955+ bionic)
5956+ add_compat strtod.o strtod=avpriv_strtod
5957+ ;;
5958+esac
5959+
5960+check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
5961+ add_cppflags '-I\$(SRC_PATH)/compat/float'
5962+
5963+test_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
5964+
5965+set_default libdir
5966+: ${shlibdir_default:="$libdir"}
5967+: ${pkgconfigdir_default:="$libdir/pkgconfig"}
5968+
5969+set_default $PATHS_LIST
5970+set_default nm
5971+
5972+disabled optimizations || enabled ossfuzz || check_cflags -fomit-frame-pointer
5973+
5974+enable_weak_pic() {
5975+ disabled pic && return
5976+ enable pic
5977+ add_cppflags -DPIC
5978+ case "$target_os" in
5979+ mingw*|cygwin*|win*)
5980+ ;;
5981+ *)
5982+ add_cflags -fPIC
5983+ add_asflags -fPIC
5984+ ;;
5985+ esac
5986+}
5987+
5988+enabled pic && enable_weak_pic
5989+
5990+test_cc <<EOF || die "Symbol mangling check failed."
5991+int ff_extern;
5992+EOF
5993+sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
5994+extern_prefix=${sym%%ff_extern*}
5995+
5996+! disabled inline_asm && check_inline_asm inline_asm '"" ::'
5997+
5998+for restrict_keyword in restrict __restrict__ __restrict ""; do
5999+ test_code cc "" "char * $restrict_keyword p" && break
6000+done
6001+
6002+check_cc pragma_deprecated "" '_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")'
6003+
6004+# The global variable ensures the bits appear unchanged in the object file.
6005+test_cc <<EOF || die "endian test failed"
6006+unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
6007+EOF
6008+od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
6009+
6010+check_cc const_nan math.h "struct { double d; } static const bar[] = { { NAN } }"
6011+
6012+if ! enabled ppc64 || enabled bigendian; then
6013+ disable vsx
6014+fi
6015+
6016+check_gas() {
6017+ log "check_gas using '$as' as AS"
6018+ # :vararg is used on aarch64, arm and ppc altivec
6019+ check_as vararg "
6020+.macro m n, y:vararg=0
6021+\n: .int \y
6022+.endm
6023+m x" || return 1
6024+ # .altmacro is only used in arm asm
6025+ ! enabled arm || check_as gnu_as ".altmacro"
6026+}
6027+
6028+if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
6029+ nogas=:
6030+ enabled_any arm aarch64 && nogas=die
6031+ enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
6032+ as_noop=-v
6033+
6034+ case $as_type in
6035+ arm*) gaspp_as_type=armasm; as_noop=-h ;;
6036+ gcc) gaspp_as_type=gas ;;
6037+ *) gaspp_as_type=$as_type ;;
6038+ esac
6039+
6040+ [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
6041+
6042+ test "${as#*gas-preprocessor.pl}" != "$as" ||
6043+ test_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
6044+ gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
6045+
6046+ if ! check_gas ; then
6047+ as=${gas:=$as}
6048+ check_gas || \
6049+ $nogas "GNU assembler not found, install/update gas-preprocessor"
6050+ fi
6051+
6052+ check_as as_func ".func test
6053+ .endfunc"
6054+fi
6055+
6056+check_inline_asm inline_asm_labels '"1:\n"'
6057+
6058+check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
6059+
6060+if enabled aarch64; then
6061+ as_arch_level="armv8-a"
6062+ check_as as_arch_directive ".arch $as_arch_level"
6063+ enabled as_arch_directive && check_arch_level armv8.2-a
6064+
6065+ enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
6066+ # internal assembler in clang 3.3 does not support this instruction
6067+ enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
6068+
6069+ archext_list="dotprod i8mm"
6070+ enabled dotprod && check_archext_insn dotprod 'udot v0.4s, v0.16b, v0.16b'
6071+ enabled i8mm && check_archext_insn i8mm 'usdot v0.4s, v0.16b, v0.16b'
6072+
6073+ # Disable the main feature (e.g. HAVE_NEON) if neither inline nor external
6074+ # assembly support the feature out of the box. Skip this for the features
6075+ # checked with check_archext_insn above, as that function takes care of
6076+ # updating all the variables as necessary.
6077+ for v in $ARCH_EXT_LIST_ARM; do
6078+ is_in $v $archext_list && continue
6079+ enabled_any ${v}_external ${v}_inline || disable $v
6080+ done
6081+
6082+elif enabled alpha; then
6083+
6084+ check_cflags -mieee
6085+
6086+elif enabled arm; then
6087+
6088+ enabled msvc && check_cpp_condition thumb stddef.h "defined _M_ARMT"
6089+ test_cpp_condition stddef.h "defined __thumb__" && test_cc <<EOF && enable_weak thumb
6090+float func(float a, float b){ return a+b; }
6091+EOF
6092+ enabled thumb && check_cflags -mthumb || check_cflags -marm
6093+
6094+ if check_cpp_condition vfp_args stddef.h "defined __ARM_PCS_VFP"; then
6095+ :
6096+ elif check_cpp_condition vfp_args stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
6097+ :
6098+ elif ! test_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
6099+ case "${cross_prefix:-$cc}" in
6100+ *hardfloat*) enable vfp_args; fpabi=vfp ;;
6101+ *) check_ld "cc" vfp_args <<EOF && fpabi=vfp || fpabi=soft ;;
6102+__asm__ (".eabi_attribute 28, 1");
6103+int main(void) { return 0; }
6104+EOF
6105+ esac
6106+ warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
6107+ fi
6108+
6109+ # Test for various instruction sets, testing support both in inline and
6110+ # external assembly. This sets the ${v}_inline or ${v}_external flags
6111+ # if the instruction can be used unconditionally in either inline or
6112+ # external assembly. This means that if the ${v}_external feature is set,
6113+ # that feature can be used unconditionally in various support macros
6114+ # anywhere in external assembly, in any function.
6115+ enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
6116+ enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
6117+ enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
6118+ enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
6119+ enabled vfp && check_insn vfp 'fadds s0, s0, s0'
6120+ enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
6121+ enabled setend && check_insn setend 'setend be'
6122+
6123+ # If neither inline nor external assembly can use the feature by default,
6124+ # disable the main unsuffixed feature (e.g. HAVE_NEON).
6125+ #
6126+ # For targets that support runtime CPU feature detection, don't disable
6127+ # the main feature flag - there we assume that all supported toolchains
6128+ # can assemble code for all instruction set features (e.g. NEON) with
6129+ # suitable assembly flags (such as ".fpu neon"); we don't check
6130+ # specifically that they really do.
6131+ [ $target_os = linux ] || [ $target_os = android ] ||
6132+ map 'enabled_any ${v}_external ${v}_inline || disable $v' \
6133+ $ARCH_EXT_LIST_ARM
6134+
6135+ check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
6136+
6137+ check_as as_arch_directive ".arch armv7-a"
6138+ check_as as_dn_directive "ra .dn d0.i16"
6139+ check_as as_fpu_directive ".fpu neon"
6140+
6141+ # llvm's integrated assembler supports .object_arch from llvm 3.5
6142+ [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] &&
6143+ check_as as_object_arch ".object_arch armv4"
6144+
6145+ # MS armasm fails to assemble our PIC constructs
6146+ [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
6147+
6148+elif enabled mips; then
6149+
6150+ # Check toolchain ISA level
6151+ if enabled mips64; then
6152+ enabled mips64r6 && check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' &&
6153+ disable mips64r2
6154+
6155+ enabled mips64r2 && check_inline_asm mips64r2 '"dext $0, $0, 0, 1"'
6156+
6157+ disable mips32r6 && disable mips32r5 && disable mips32r2
6158+ else
6159+ enabled mips32r6 && check_inline_asm mips32r6 '"aui $0, $0, 0"' &&
6160+ disable mips32r5 && disable mips32r2
6161+
6162+ enabled mips32r5 && check_inline_asm mips32r5 '"eretnc"'
6163+ enabled mips32r2 && check_inline_asm mips32r2 '"ext $0, $0, 0, 1"'
6164+
6165+ disable mips64r6 && disable mips64r5 && disable mips64r2
6166+ fi
6167+
6168+ enabled mipsfpu && check_inline_asm mipsfpu '"cvt.d.l $f0, $f2"'
6169+ enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
6170+
6171+ enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
6172+ enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
6173+
6174+ # MSA can be detected at runtime so we supply extra flags here
6175+ enabled mipsfpu && enabled msa && check_inline_asm msa '"addvi.b $w0, $w1, 1"' '-mmsa' && append MSAFLAGS '-mmsa'
6176+
6177+ # loongson2 have no switch cflag so we can only probe toolchain ability
6178+ enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' && disable loongson3
6179+
6180+ # loongson3 is paired with MMI
6181+ enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"' '-mloongson-ext' && append MMIFLAGS '-mloongson-ext'
6182+
6183+ # MMI can be detected at runtime too
6184+ enabled mmi && check_inline_asm mmi '"pxor $f0, $f0, $f0"' '-mloongson-mmi' && append MMIFLAGS '-mloongson-mmi'
6185+
6186+ if enabled bigendian && enabled msa; then
6187+ disable msa
6188+ fi
6189+
6190+elif enabled parisc; then
6191+
6192+ if enabled gcc; then
6193+ case $($cc -dumpversion) in
6194+ 4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
6195+ esac
6196+ fi
6197+
6198+elif enabled ppc; then
6199+
6200+ enable local_aligned
6201+
6202+ check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
6203+ check_inline_asm ibm_asm '"add 0, 0, 0"'
6204+ check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
6205+ check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
6206+
6207+ if enabled altivec; then
6208+ check_cflags -maltivec -mabi=altivec
6209+
6210+ # check if our compiler supports Motorola AltiVec C API
6211+ check_cc altivec altivec.h "vector signed int v1 = (vector signed int) { 0 };
6212+ vector signed int v2 = (vector signed int) { 1 };
6213+ v1 = vec_add(v1, v2);"
6214+
6215+ enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
6216+ fi
6217+
6218+ if enabled vsx; then
6219+ check_cflags -mvsx &&
6220+ check_cc vsx altivec.h "int v[4] = { 0 };
6221+ vector signed int v1 = vec_vsx_ld(0, v);"
6222+ fi
6223+
6224+ if enabled power8; then
6225+ check_cpp_condition power8 "altivec.h" "defined(_ARCH_PWR8)"
6226+ fi
6227+
6228+ if enabled altivec; then
6229+ check_cc vec_xl altivec.h "const unsigned char *y1i = { 0 };
6230+ vector unsigned char y0 = vec_xl(0, y1i);"
6231+ fi
6232+
6233+elif enabled riscv; then
6234+
6235+ enabled rv && check_inline_asm rv '".option arch, +zbb\nrev8 t0, t1"'
6236+ enabled rvv && check_inline_asm rvv '".option arch, +v\nvsetivli zero, 0, e8, m1, ta, ma"'
6237+
6238+elif enabled x86; then
6239+
6240+ check_builtin rdtsc intrin.h "__rdtsc()"
6241+ check_builtin mm_empty mmintrin.h "_mm_empty()"
6242+
6243+ enable local_aligned
6244+
6245+ # check whether EBP is available on x86
6246+ # As 'i' is stored on the stack, this program will crash
6247+ # if the base pointer is used to access it because the
6248+ # base pointer is cleared in the inline assembly code.
6249+ check_exec_crash <<EOF && enable ebp_available
6250+volatile int i=0;
6251+__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
6252+return i;
6253+EOF
6254+
6255+ # check whether EBX is available on x86
6256+ check_inline_asm ebx_available '""::"b"(0)' &&
6257+ check_inline_asm ebx_available '"":::"%ebx"'
6258+
6259+ # check whether xmm clobbers are supported
6260+ check_inline_asm xmm_clobbers '"":::"%xmm0"'
6261+
6262+ check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
6263+ check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
6264+
6265+ # check whether binutils is new enough to compile SSSE3/MMXEXT
6266+ enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
6267+ enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
6268+
6269+ probe_x86asm(){
6270+ x86asmexe_probe=$1
6271+ if test_cmd $x86asmexe_probe -v; then
6272+ x86asmexe=$x86asmexe_probe
6273+ x86asm_type=nasm
6274+ x86asm_debug="-g -F dwarf"
6275+ X86ASMDEP=
6276+ X86ASM_DEPFLAGS='-MD $(@:.o=.d)'
6277+ elif test_cmd $x86asmexe_probe --version; then
6278+ x86asmexe=$x86asmexe_probe
6279+ x86asm_type=yasm
6280+ x86asm_debug="-g dwarf2"
6281+ X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)'
6282+ X86ASM_DEPFLAGS=
6283+ fi
6284+ check_x86asm x86asm "movbe ecx, [5]"
6285+ }
6286+
6287+ if ! disabled_any asm mmx x86asm; then
6288+ disable x86asm
6289+ for program in $x86asmexe nasm yasm; do
6290+ probe_x86asm $program && break
6291+ done
6292+ disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build."
6293+ X86ASMFLAGS="-f $objformat"
6294+ enabled pic && append X86ASMFLAGS "-DPIC"
6295+ test -n "$extern_prefix" && append X86ASMFLAGS "-DPREFIX"
6296+ case "$objformat" in
6297+ elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
6298+ esac
6299+
6300+ enabled avx512 && check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"
6301+ enabled avx512icl && check_x86asm avx512icl_external "vpdpwssds zmm31{k1}{z}, zmm29, zmm28"
6302+ enabled avx2 && check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0"
6303+ enabled xop && check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3"
6304+ enabled fma4 && check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3"
6305+ check_x86asm cpunop "CPU amdnop"
6306+ fi
6307+
6308+ case "$cpu" in
6309+ athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
6310+ disable fast_clz
6311+ ;;
6312+ esac
6313+
6314+elif enabled loongarch; then
6315+ enabled lsx && check_inline_asm lsx '"vadd.b $vr0, $vr1, $vr2"' '-mlsx' && append LSXFLAGS '-mlsx'
6316+ enabled lasx && check_inline_asm lasx '"xvadd.b $xr0, $xr1, $xr2"' '-mlasx' && append LASXFLAGS '-mlasx'
6317+fi
6318+
6319+check_cc intrinsics_neon arm_neon.h "int16x8_t test = vdupq_n_s16(0)"
6320+
6321+check_ldflags -Wl,--as-needed
6322+check_ldflags -Wl,-z,noexecstack
6323+
6324+if ! disabled network; then
6325+ check_func getaddrinfo $network_extralibs
6326+ check_func inet_aton $network_extralibs
6327+
6328+ check_type netdb.h "struct addrinfo"
6329+ check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
6330+ check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
6331+ check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
6332+ check_type poll.h "struct pollfd"
6333+ check_type netinet/sctp.h "struct sctp_event_subscribe"
6334+ check_struct "sys/socket.h" "struct msghdr" msg_flags
6335+ check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
6336+ check_type netinet/in.h "struct sockaddr_in6"
6337+ check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
6338+ check_type "sys/types.h sys/socket.h" socklen_t
6339+
6340+ # Prefer arpa/inet.h over winsock2
6341+ if check_headers arpa/inet.h ; then
6342+ check_func closesocket
6343+ elif check_headers winsock2.h ; then
6344+ check_func_headers winsock2.h closesocket -lws2 &&
6345+ network_extralibs="-lws2" ||
6346+ { check_func_headers winsock2.h closesocket -lws2_32 &&
6347+ network_extralibs="-lws2_32"; } || disable winsock2_h network
6348+ check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
6349+
6350+ check_type ws2tcpip.h socklen_t
6351+ check_type ws2tcpip.h "struct addrinfo"
6352+ check_type ws2tcpip.h "struct group_source_req"
6353+ check_type ws2tcpip.h "struct ip_mreq_source"
6354+ check_type ws2tcpip.h "struct ipv6_mreq"
6355+ check_type winsock2.h "struct pollfd"
6356+ check_struct winsock2.h "struct sockaddr" sa_len
6357+ check_type ws2tcpip.h "struct sockaddr_in6"
6358+ check_type ws2tcpip.h "struct sockaddr_storage"
6359+ else
6360+ disable network
6361+ fi
6362+fi
6363+
6364+check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
6365+check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
6366+check_builtin MemoryBarrier windows.h "MemoryBarrier()"
6367+check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
6368+check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
6369+check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
6370+
6371+check_builtin float16 "" "_Float16 f16var"
6372+if enabled float16; then
6373+ if enabled x86; then
6374+ test_cpp_condition stddef.h "defined(__F16C__)" && enable fast_float16
6375+ elif enabled arm || enabled aarch64; then
6376+ enable fast_float16
6377+ fi
6378+fi
6379+
6380+case "$custom_allocator" in
6381+ "")
6382+ ;;
6383+ jemalloc)
6384+ test -n "$malloc_prefix" ||
6385+ malloc_prefix=$($pkg_config --variable=jemalloc_prefix $pkg_config_flags jemalloc 2>/dev/null)
6386+ require_pkg_config custom_allocator jemalloc jemalloc/jemalloc.h ${malloc_prefix}malloc
6387+ ;;
6388+ tcmalloc)
6389+ require_pkg_config custom_allocator libtcmalloc gperftools/tcmalloc.h tc_malloc
6390+ malloc_prefix=tc_
6391+ ;;
6392+ *)
6393+ require_pkg_config custom_allocator "$custom_allocator" stdlib.h malloc
6394+ ;;
6395+esac
6396+
6397+if test -n "$custom_allocator"; then
6398+ add_extralibs "$custom_allocator_extralibs"
6399+fi
6400+
6401+check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
6402+check_func ${malloc_prefix}memalign && enable memalign
6403+check_func ${malloc_prefix}posix_memalign && enable posix_memalign
6404+
6405+check_func access
6406+check_func_headers stdlib.h arc4random_buf
6407+check_lib clock_gettime time.h clock_gettime || check_lib clock_gettime time.h clock_gettime -lrt
6408+check_func fcntl
6409+check_func fork
6410+check_func gethrtime
6411+check_func getopt
6412+check_func getrusage
6413+check_func gettimeofday
6414+check_func isatty
6415+check_func mkstemp
6416+check_func mmap
6417+check_func mprotect
6418+# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
6419+check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt
6420+check_func_headers sys/prctl.h prctl
6421+check_func sched_getaffinity
6422+check_func setrlimit
6423+check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
6424+check_func strerror_r
6425+check_func sysconf
6426+check_func sysctl
6427+check_func usleep
6428+
6429+check_func_headers conio.h kbhit
6430+check_func_headers io.h setmode
6431+check_func_headers lzo/lzo1x.h lzo1x_999_compress
6432+check_func_headers mach/mach_time.h mach_absolute_time
6433+check_func_headers stdlib.h getenv
6434+check_func_headers sys/stat.h lstat
6435+check_func_headers sys/auxv.h getauxval
6436+check_func_headers sys/sysctl.h sysctlbyname
6437+
6438+check_func_headers windows.h GetModuleHandle
6439+check_func_headers windows.h GetProcessAffinityMask
6440+check_func_headers windows.h GetProcessTimes
6441+check_func_headers windows.h GetStdHandle
6442+check_func_headers windows.h GetSystemTimeAsFileTime
6443+check_func_headers windows.h LoadLibrary
6444+check_func_headers windows.h MapViewOfFile
6445+check_func_headers windows.h PeekNamedPipe
6446+check_func_headers windows.h SetConsoleTextAttribute
6447+check_func_headers windows.h SetConsoleCtrlHandler
6448+check_func_headers windows.h SetDllDirectory
6449+check_func_headers windows.h Sleep
6450+check_func_headers windows.h VirtualAlloc
6451+check_func_headers glob.h glob
6452+
6453+if enabled xlib; then
6454+ check_pkg_config xlib_x11 x11 "X11/Xlib.h" XPending ||
6455+ check_lib xlib_x11 "X11/Xlib.h" XPending -lX11 ||
6456+ disable xlib
6457+
6458+ check_pkg_config xlib_xext xext "X11/Xlib.h X11/extensions/XShm.h" XShmAttach ||
6459+ check_lib xlib_xext "X11/Xlib.h X11/extensions/XShm.h" XShmAttach -lXext ||
6460+ disable xlib
6461+
6462+ check_pkg_config xlib_xv xv "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute ||
6463+ check_lib xlib_xv "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv ||
6464+ disable xlib
6465+fi
6466+
6467+check_headers direct.h
6468+check_headers dirent.h
6469+check_headers dxgidebug.h
6470+check_headers dxva.h
6471+check_headers dxva2api.h -D_WIN32_WINNT=0x0600
6472+check_headers io.h
6473+enabled libdrm &&
6474+ check_headers linux/dma-buf.h
6475+
6476+check_headers linux/perf_event.h
6477+check_headers libcrystalhd/libcrystalhd_if.h
6478+check_headers malloc.h
6479+check_headers mftransform.h
6480+check_headers net/udplite.h
6481+check_headers poll.h
6482+check_headers pthread_np.h
6483+check_headers sys/param.h
6484+check_headers sys/resource.h
6485+check_headers sys/select.h
6486+check_headers sys/time.h
6487+check_headers sys/un.h
6488+check_headers termios.h
6489+check_headers unistd.h
6490+check_headers valgrind/valgrind.h
6491+check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
6492+check_func_headers VideoToolbox/VideoToolbox.h VTPixelRotationSessionCreate -framework VideoToolbox
6493+check_headers windows.h
6494+check_headers asm/types.h
6495+
6496+# it seems there are versions of clang in some distros that try to use the
6497+# gcc headers, which explodes for stdatomic
6498+# so we also check that atomics actually work here
6499+#
6500+# some configurations also require linking to libatomic, so try
6501+# both with -latomic and without
6502+for LATOMIC in "-latomic" ""; do
6503+ check_builtin stdatomic stdatomic.h \
6504+ "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0); foo += bar" \
6505+ $LATOMIC && eval stdatomic_extralibs="\$LATOMIC" && break
6506+done
6507+
6508+check_lib advapi32 "windows.h" RegCloseKey -ladvapi32
6509+check_lib bcrypt "windows.h bcrypt.h" BCryptGenRandom -lbcrypt &&
6510+ check_cpp_condition bcrypt bcrypt.h "defined BCRYPT_RNG_ALGORITHM"
6511+check_lib ole32 "windows.h objbase.h" CoTaskMemFree -lole32
6512+check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32
6513+check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
6514+
6515+check_lib android android/native_window.h ANativeWindow_acquire -landroid
6516+check_lib mediandk "stdint.h media/NdkImage.h" AImage_delete -lmediandk
6517+check_lib camera2ndk "stdbool.h stdint.h camera/NdkCameraManager.h" ACameraManager_create -lcamera2ndk
6518+
6519+enabled appkit && check_apple_framework AppKit
6520+enabled audiotoolbox && check_apple_framework AudioToolbox
6521+enabled avfoundation && check_apple_framework AVFoundation
6522+enabled coreimage && check_apple_framework CoreImage
6523+enabled metal && check_apple_framework Metal
6524+enabled videotoolbox && check_apple_framework VideoToolbox
6525+
6526+check_apple_framework CoreFoundation
6527+check_apple_framework CoreMedia
6528+check_apple_framework CoreVideo
6529+check_apple_framework CoreAudio
6530+
6531+enabled avfoundation && {
6532+ disable coregraphics applicationservices
6533+ check_lib coregraphics CoreGraphics/CoreGraphics.h CGGetActiveDisplayList "-framework CoreGraphics" ||
6534+ check_lib applicationservices ApplicationServices/ApplicationServices.h CGGetActiveDisplayList "-framework ApplicationServices"; }
6535+
6536+enabled videotoolbox && {
6537+ check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices"
6538+ check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia"
6539+ check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVCWithAlpha "-framework CoreMedia"
6540+ check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_VP9 "-framework CoreMedia"
6541+ check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
6542+ check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange "-framework CoreVideo"
6543+ check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
6544+ check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange "-framework CoreVideo"
6545+ check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange "-framework CoreVideo"
6546+ check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
6547+ check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange "-framework CoreVideo"
6548+ check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework CoreVideo"
6549+ check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework CoreVideo"
6550+ check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_Linear "-framework CoreVideo"
6551+ check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferYCbCrMatrix_ITU_R_2020 "-framework CoreVideo"
6552+ check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferColorPrimaries_ITU_R_2020 "-framework CoreVideo"
6553+ check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2020 "-framework CoreVideo"
6554+ check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_428_1 "-framework CoreVideo"
6555+}
6556+
6557+enabled metal && test_cmd $metalcc -v || disable metal
6558+
6559+check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
6560+
6561+check_type "windows.h dxva.h" "DXVA_PicParams_AV1" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
6562+check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
6563+check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
6564+check_type "windows.h dxgi1_2.h" "DXGI_OUTDUPL_FRAME_INFO"
6565+check_type "windows.h dxgi1_2.h" "IDXGIOutput1"
6566+check_type "windows.h dxgi1_5.h" "IDXGIOutput5"
6567+check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
6568+check_type "windows.h d3d11.h" "ID3D11VideoContext"
6569+check_type "windows.h" "DPI_AWARENESS_CONTEXT" -D_WIN32_WINNT=0x0A00
6570+check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
6571+check_func_headers mfapi.h MFCreateAlignedMemoryBuffer -lmfplat
6572+
6573+check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
6574+check_type "vdpau/vdpau.h" "VdpPictureInfoVP9"
6575+check_type "vdpau/vdpau.h" "VdpPictureInfoAV1"
6576+
6577+if [ -z "$nvccflags" ]; then
6578+ nvccflags=$nvccflags_default
6579+fi
6580+
6581+nvccflags="$nvccflags -std=c++11"
6582+
6583+if enabled x86_64 || enabled ppc64 || enabled aarch64; then
6584+ nvccflags="$nvccflags -m64"
6585+else
6586+ nvccflags="$nvccflags -m32"
6587+fi
6588+
6589+if enabled cuda_nvcc; then
6590+ nvccflags="$nvccflags -ptx"
6591+else
6592+ nvccflags="$nvccflags -S -nocudalib -nocudainc --cuda-device-only -Wno-c++11-narrowing -include ${source_link}/compat/cuda/cuda_runtime.h"
6593+ check_nvcc cuda_llvm
6594+fi
6595+
6596+if ! disabled ffnvcodec; then
6597+ ffnv_hdr_list="ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h"
6598+ check_pkg_config ffnvcodec "ffnvcodec >= 12.1.14.0" "$ffnv_hdr_list" "" || \
6599+ check_pkg_config ffnvcodec "ffnvcodec >= 12.0.16.1 ffnvcodec < 12.1" "$ffnv_hdr_list" "" || \
6600+ check_pkg_config ffnvcodec "ffnvcodec >= 11.1.5.3 ffnvcodec < 12.0" "$ffnv_hdr_list" "" || \
6601+ check_pkg_config ffnvcodec "ffnvcodec >= 11.0.10.3 ffnvcodec < 11.1" "$ffnv_hdr_list" "" || \
6602+ check_pkg_config ffnvcodec "ffnvcodec >= 8.1.24.15 ffnvcodec < 8.2" "$ffnv_hdr_list" ""
6603+fi
6604+
6605+if enabled_all libglslang libshaderc; then
6606+ die "ERROR: libshaderc and libglslang are mutually exclusive, if in doubt, disable libglslang"
6607+fi
6608+
6609+check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"
6610+
6611+if ! disabled w32threads && ! enabled pthreads; then
6612+ check_func_headers "windows.h process.h" _beginthreadex &&
6613+ check_type "windows.h" CONDITION_VARIABLE &&
6614+ check_type "windows.h" INIT_ONCE &&
6615+ enable w32threads || disable w32threads
6616+ if ! enabled w32threads && enabled winrt; then
6617+ check_func_headers "windows.h" CreateThread &&
6618+ enable w32threads || disable w32threads
6619+ fi
6620+fi
6621+
6622+# check for some common methods of building with pthread support
6623+# do this before the optional library checks as some of them require pthreads
6624+if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
6625+ if check_lib pthreads pthread.h pthread_join -pthread &&
6626+ check_lib pthreads pthread.h pthread_create -pthread; then
6627+ add_cflags -pthread
6628+ elif check_lib pthreads pthread.h pthread_join -pthreads &&
6629+ check_lib pthreads pthread.h pthread_create -pthreads; then
6630+ add_cflags -pthreads
6631+ elif check_lib pthreads pthread.h pthread_join -ldl -pthread &&
6632+ check_lib pthreads pthread.h pthread_create -ldl -pthread; then
6633+ add_cflags -ldl -pthread
6634+ elif check_lib pthreads pthread.h pthread_join -lpthreadGC2 &&
6635+ check_lib pthreads pthread.h pthread_create -lpthreadGC2; then
6636+ :
6637+ elif check_lib pthreads pthread.h pthread_join -lpthread &&
6638+ check_lib pthreads pthread.h pthread_create -lpthread; then
6639+ :
6640+ elif check_func pthread_join && check_func pthread_create; then
6641+ enable pthreads
6642+ fi
6643+ check_cc pthreads "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER"
6644+
6645+ if enabled pthreads; then
6646+ check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" $pthreads_extralibs
6647+ check_func pthread_cancel $pthreads_extralibs
6648+ hdrs=pthread.h
6649+ if enabled pthread_np_h; then
6650+ hdrs="$hdrs pthread_np.h"
6651+ fi
6652+ check_lib pthread_set_name_np "$hdrs" pthread_set_name_np -lpthread
6653+ check_lib pthread_setname_np "$hdrs" pthread_setname_np -lpthread
6654+ fi
6655+fi
6656+
6657+enabled zlib && { check_pkg_config zlib zlib "zlib.h" zlibVersion ||
6658+ check_lib zlib zlib.h zlibVersion -lz; }
6659+enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
6660+enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma
6661+
6662+enabled zlib && test_exec $zlib_extralibs <<EOF && enable zlib_gzip
6663+#include <zlib.h>
6664+int main(void) {
6665+ if (zlibCompileFlags() & (1 << 17)) return 1;
6666+ return 0;
6667+}
6668+EOF
6669+
6670+[ -x "$(command -v gzip)" ] && enable gzip
6671+
6672+enabled zlib_gzip && enabled gzip || disable ptx_compression
6673+
6674+# On some systems dynamic loading requires no extra linker flags
6675+check_lib libdl dlfcn.h "dlopen dlsym" || check_lib libdl dlfcn.h "dlopen dlsym" -ldl
6676+
6677+check_lib libm math.h sin -lm
6678+
6679+atan2f_args=2
6680+copysign_args=2
6681+hypot_args=2
6682+ldexpf_args=2
6683+powf_args=2
6684+
6685+for func in $MATH_FUNCS; do
6686+ eval check_mathfunc $func \${${func}_args:-1} $libm_extralibs
6687+done
6688+
6689+# these are off by default, so fail if requested and not available
6690+enabled avisynth && { require_headers "avisynth/avisynth_c.h avisynth/avs/version.h" &&
6691+ { test_cpp_condition avisynth/avs/version.h "AVS_MAJOR_VER >= 3 && AVS_MINOR_VER >= 7 && AVS_BUGFIX_VER >= 3 || AVS_MAJOR_VER >= 3 && AVS_MINOR_VER > 7 || AVS_MAJOR_VER > 3" ||
6692+ die "ERROR: AviSynth+ header version must be >= 3.7.3"; } }
6693+enabled cuda_nvcc && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc."; }
6694+enabled chromaprint && { check_pkg_config chromaprint libchromaprint "chromaprint.h" chromaprint_get_version ||
6695+ require chromaprint chromaprint.h chromaprint_get_version -lchromaprint; }
6696+enabled decklink && { require_headers DeckLinkAPI.h &&
6697+ { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a0b0000" || die "ERROR: Decklink API version must be >= 10.11"; } }
6698+enabled frei0r && require_headers "frei0r.h"
6699+enabled gmp && require gmp gmp.h mpz_export -lgmp
6700+enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
6701+enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
6702+enabled ladspa && require_headers "ladspa.h dlfcn.h"
6703+enabled lcms2 && require_pkg_config lcms2 "lcms2 >= 2.13" lcms2.h cmsCreateContext
6704+enabled libaom && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version
6705+enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new ||
6706+ { enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } ||
6707+ die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; }
6708+enabled libaribcaption && require_pkg_config libaribcaption "libaribcaption >= 1.1.1" "aribcaption/aribcaption.h" aribcc_context_alloc
6709+enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
6710+enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
6711+enabled libass && require_pkg_config libass "libass >= 0.11.0" ass/ass.h ass_library_init
6712+enabled libbluray && require_pkg_config libbluray libbluray libbluray/bluray.h bd_open
6713+enabled libbs2b && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open
6714+enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
6715+ { check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 ||
6716+ die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
6717+enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas
6718+enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2
6719+enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.5.0" "dav1d/dav1d.h" dav1d_version
6720+enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open
6721+enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
6722+enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion
6723+enabled libfdk_aac && { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
6724+ { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
6725+ warn "using libfdk without pkg-config"; } }
6726+flite_extralibs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
6727+enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs
6728+enabled fontconfig && enable libfontconfig
6729+enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
6730+enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
6731+enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info
6732+enabled libharfbuzz && require_pkg_config libharfbuzz harfbuzz hb.h hb_buffer_create
6733+enabled libglslang && { check_lib spirv_compiler glslang/Include/glslang_c_interface.h glslang_initialize_process \
6734+ -lglslang -lMachineIndependent -lOSDependent -lHLSL -lOGLCompiler -lGenericCodeGen \
6735+ -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm ||
6736+ require spirv_compiler glslang/Include/glslang_c_interface.h glslang_initialize_process \
6737+ -lglslang -lOSDependent -lHLSL -lOGLCompiler \
6738+ -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm; }
6739+enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu ||
6740+ require libgme gme/gme.h gme_new_emu -lgme -lstdc++; }
6741+enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
6742+ check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break;
6743+ done || die "ERROR: libgsm not found"; }
6744+enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc $pthreads_extralibs
6745+enabled libjxl && require_pkg_config libjxl "libjxl >= 0.7.0" jxl/decode.h JxlDecoderVersion &&
6746+ require_pkg_config libjxl_threads "libjxl_threads >= 0.7.0" jxl/thread_parallel_runner.h JxlThreadParallelRunner
6747+enabled libklvanc && require libklvanc libklvanc/vanc.h klvanc_context_create -lklvanc
6748+enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 2.0.0" kvazaar.h kvz_api_get
6749+enabled liblensfun && require_pkg_config liblensfun lensfun lensfun.h lf_db_new
6750+
6751+if enabled libmfx && enabled libvpl; then
6752+ die "ERROR: can not use libmfx and libvpl together"
6753+# While it may appear that require is being used as a pkg-config
6754+# fallback for libmfx, it is actually being used to detect a different
6755+# installation route altogether. If libmfx is installed via the Intel
6756+# Media SDK or Intel Media Server Studio, these don't come with
6757+# pkg-config support. Instead, users should make sure that the build
6758+# can find the libraries and headers through other means.
6759+elif enabled libmfx; then
6760+ { check_pkg_config libmfx "libmfx >= 1.28 libmfx < 2.0" "mfxvideo.h" MFXInit ||
6761+# Some old versions of libmfx have the following settings in libmfx.pc:
6762+# includedir=/usr/include
6763+# Cflags: -I${includedir}
6764+# So add -I${includedir}/mfx to CFLAGS
6765+ { check_pkg_config libmfx "libmfx >= 1.28 libmfx < 2.0" "mfx/mfxvideo.h" MFXInit && add_cflags -I${libmfx_incdir}/mfx; } ||
6766+ { require libmfx "mfxvideo.h mfxdefs.h" MFXInit "-llibmfx $advapi32_extralibs" &&
6767+ { test_cpp_condition mfxdefs.h "MFX_VERSION >= 1028 && MFX_VERSION < 2000" || die "ERROR: libmfx version must be >= 1.28 and < 2.0"; } &&
6768+ warn "using libmfx without pkg-config"; } } &&
6769+ warn "libmfx is deprecated. Please run configure with --enable-libvpl to use libvpl instead."
6770+elif enabled libvpl; then
6771+# Consider pkg-config only. The name of libmfx is still passed to check_pkg_config function for --enable-libvpl option
6772+# because QSV has dependency on libmfx, we can use the same dependency if using libmfx in this check. The package name
6773+# is extracted from "vpl >= 2.6"
6774+ check_pkg_config libmfx "vpl >= 2.6" "mfxvideo.h mfxdispatcher.h" MFXLoad || \
6775+ die "ERROR: libvpl >= 2.6 not found"
6776+fi
6777+
6778+if enabled libmfx; then
6779+ check_cc MFX_CODEC_VP9 "mfxdefs.h mfxstructures.h" "MFX_CODEC_VP9"
6780+fi
6781+
6782+enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load
6783+enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs
6784+enabled libmysofa && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine ||
6785+ require libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine -lmysofa $zlib_extralibs; }
6786+enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc -lnppidei -lnppif ||
6787+ check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppif -lnppc -lnppidei ||
6788+ die "ERROR: libnpp not found"; }
6789+enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
6790+enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
6791+enabled libopencv && { check_headers opencv2/core/core_c.h &&
6792+ { check_pkg_config libopencv opencv opencv2/core/core_c.h cvCreateImageHeader ||
6793+ require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
6794+ require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
6795+enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
6796+enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
6797+ { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
6798+enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
6799+enabled libopenvino && { { check_pkg_config libopenvino openvino openvino/c/openvino.h ov_core_create && enable openvino2; } ||
6800+ { check_pkg_config libopenvino openvino c_api/ie_c_api.h ie_c_api_version ||
6801+ require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api; } }
6802+enabled libopus && {
6803+ enabled libopus_decoder && {
6804+ require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
6805+ }
6806+ enabled libopus_encoder && {
6807+ require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create
6808+ }
6809+}
6810+enabled libplacebo && require_pkg_config libplacebo "libplacebo >= 4.192.0" libplacebo/vulkan.h pl_vulkan_create
6811+enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new
6812+enabled librabbitmq && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection
6813+enabled librav1e && require_pkg_config librav1e "rav1e >= 0.5.0" rav1e.h rav1e_context_new
6814+enabled librist && require_pkg_config librist "librist >= 0.2.7" librist/librist.h rist_receiver_create
6815+enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_new_from_data
6816+enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
6817+enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++"
6818+enabled libshaderc && require_pkg_config spirv_compiler "shaderc >= 2019.1" shaderc/shaderc.h shaderc_compiler_initialize
6819+enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer
6820+enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init ||
6821+ require libsmbclient libsmbclient.h smbc_init -lsmbclient; }
6822+enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy -lstdc++
6823+enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
6824+enabled libssh && require_pkg_config libssh "libssh >= 0.6.0" libssh/sftp.h sftp_init
6825+enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
6826+enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket
6827+enabled libsvtav1 && require_pkg_config libsvtav1 "SvtAv1Enc >= 0.9.0" EbSvtAv1Enc.h svt_av1_enc_init_handle
6828+enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow
6829+enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate
6830+enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
6831+enabled libtls && require_pkg_config libtls libtls tls.h tls_configure
6832+enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
6833+ { check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
6834+ die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
6835+enabled libuavs3d && require_pkg_config libuavs3d "uavs3d >= 1.1.41" uavs3d.h uavs3d_decode
6836+enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
6837+enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
6838+enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init
6839+enabled libvmaf && check_pkg_config libvmaf_cuda "libvmaf >= 2.0.0" libvmaf_cuda.h vmaf_cuda_state_init
6840+enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
6841+enabled libvorbis && # require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init &&
6842+ # require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init
6843+
6844+enabled libvpx && {
6845+ enabled libvpx_vp8_decoder && {
6846+ check_pkg_config libvpx_vp8_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
6847+ check_lib libvpx_vp8_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp8_dx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs"
6848+ }
6849+ enabled libvpx_vp8_encoder && {
6850+ check_pkg_config libvpx_vp8_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
6851+ check_lib libvpx_vp8_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp8_cx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs"
6852+ }
6853+ enabled libvpx_vp9_decoder && {
6854+ check_pkg_config libvpx_vp9_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
6855+ check_lib libvpx_vp9_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs"
6856+ }
6857+ enabled libvpx_vp9_encoder && {
6858+ check_pkg_config libvpx_vp9_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
6859+ check_lib libvpx_vp9_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs"
6860+ }
6861+ if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
6862+ die "libvpx enabled but no supported decoders found"
6863+ fi
6864+}
6865+
6866+enabled libwebp && {
6867+ enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
6868+ enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
6869+enabled libx264 && require_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode &&
6870+ require_cpp_condition libx264 x264.h "X264_BUILD >= 122" && {
6871+ [ "$toolchain" != "msvc" ] ||
6872+ require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } &&
6873+ check_cpp_condition libx262 x264.h "X264_MPEG2"
6874+enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
6875+ require_cpp_condition libx265 x265.h "X265_BUILD >= 89"
6876+enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs"
6877+enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.3.0" "stdint.h xavs2.h" xavs2_api_get
6878+enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
6879+enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version
6880+enabled libzmq && require_pkg_config libzmq "libzmq >= 4.2.1" zmq.h zmq_ctx_new
6881+enabled libzvbi && require_pkg_config libzvbi zvbi-0.2 libzvbi.h vbi_decoder_new &&
6882+ { test_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
6883+ enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
6884+enabled libxml2 && require_pkg_config libxml2 libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion
6885+enabled mbedtls && { check_pkg_config mbedtls mbedtls mbedtls/x509_crt.h mbedtls_x509_crt_init ||
6886+ check_pkg_config mbedtls mbedtls mbedtls/ssl.h mbedtls_ssl_init ||
6887+ check_lib mbedtls mbedtls/ssl.h mbedtls_ssl_init -lmbedtls -lmbedx509 -lmbedcrypto ||
6888+ die "ERROR: mbedTLS not found"; }
6889+enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; }
6890+enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
6891+ { ! enabled cross_compile &&
6892+ add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
6893+ add_ldflags -L/opt/vc/lib/ &&
6894+ check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
6895+ die "ERROR: mmal not found" &&
6896+ check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
6897+enabled openal && { check_pkg_config openal "openal >= 1.1" "AL/al.h" alGetError ||
6898+ { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
6899+ check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } ||
6900+ die "ERROR: openal not found"; } &&
6901+ { test_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
6902+ die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
6903+enabled opencl && { check_pkg_config opencl OpenCL CL/cl.h clEnqueueNDRangeKernel ||
6904+ check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
6905+ check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
6906+ die "ERROR: opencl not found"; } &&
6907+ { test_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
6908+ test_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
6909+ die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
6910+enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" ||
6911+ check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
6912+ check_lib opengl OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
6913+ check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
6914+ die "ERROR: opengl not found."
6915+ }
6916+enabled omx_rpi && { test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame ||
6917+ { ! enabled cross_compile &&
6918+ add_cflags -isystem/opt/vc/include/IL &&
6919+ test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame; } ||
6920+ die "ERROR: OpenMAX IL headers from raspberrypi/firmware not found"; } &&
6921+ enable omx
6922+enabled omx && require_headers OMX_Core.h
6923+enabled openssl && { { check_pkg_config openssl "openssl >= 3.0.0" openssl/ssl.h OPENSSL_init_ssl &&
6924+ { enabled gplv3 || ! enabled gpl || enabled nonfree || die "ERROR: OpenSSL >=3.0.0 requires --enable-version3"; }; } ||
6925+ { enabled gpl && ! enabled nonfree && die "ERROR: OpenSSL <3.0.0 is incompatible with the gpl"; } ||
6926+ check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
6927+ check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
6928+ check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
6929+ check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
6930+ check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
6931+ check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
6932+ die "ERROR: openssl not found"; }
6933+enabled pocketsphinx && require_pkg_config pocketsphinx pocketsphinx pocketsphinx/pocketsphinx.h ps_init
6934+enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/rk_mpi.h mpp_create &&
6935+ require_pkg_config rockchip_mpp "rockchip_mpp >= 1.3.7" rockchip/rk_mpi.h mpp_create &&
6936+ { enabled libdrm ||
6937+ die "ERROR: rkmpp requires --enable-libdrm"; }
6938+ }
6939+enabled vapoursynth && require_pkg_config vapoursynth "vapoursynth-script >= 42" VSScript.h vsscript_init
6940+
6941+
6942+if enabled gcrypt; then
6943+ GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
6944+ if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
6945+ gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
6946+ gcrypt_extralibs=$("${GCRYPT_CONFIG}" --libs)
6947+ check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs ||
6948+ die "ERROR: gcrypt not found"
6949+ add_cflags $gcrypt_cflags
6950+ else
6951+ require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
6952+ fi
6953+fi
6954+
6955+if enabled sdl2; then
6956+ SDL2_CONFIG="${cross_prefix}sdl2-config"
6957+ test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 3.0.0" SDL_events.h SDL_PollEvent
6958+ if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
6959+ sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
6960+ sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
6961+ test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
6962+ test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x030000" $sdl2_cflags &&
6963+ check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags &&
6964+ enable sdl2
6965+ fi
6966+ if test $target_os = "mingw32"; then
6967+ sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs)
6968+ fi
6969+fi
6970+
6971+if enabled decklink; then
6972+ case $target_os in
6973+ mingw32*|mingw64*|win32|win64)
6974+ decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
6975+ decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
6976+ ;;
6977+ esac
6978+fi
6979+
6980+enabled securetransport &&
6981+ check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
6982+ check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" ||
6983+ disable securetransport
6984+
6985+enabled securetransport &&
6986+ check_func SecItemImport "-Wl,-framework,CoreFoundation -Wl,-framework,Security"
6987+
6988+enabled schannel &&
6989+ check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
6990+ test_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" &&
6991+ schannel_extralibs="-lsecur32" ||
6992+ disable schannel
6993+
6994+makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
6995+enabled makeinfo \
6996+ && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
6997+ && enable makeinfo_html || disable makeinfo_html
6998+disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
6999+perl -v > /dev/null 2>&1 && enable perl || disable perl
7000+pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
7001+rsync --help 2> /dev/null | grep -q 'contimeout=' && enable rsync_contimeout || disable rsync_contimeout
7002+xmllint --version > /dev/null 2>&1 && enable xmllint || disable xmllint
7003+
7004+check_headers linux/fb.h
7005+check_headers linux/videodev2.h
7006+test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
7007+test_code cc sys/ioctl.h "int ioctl(int, int, ...)" && enable posix_ioctl
7008+
7009+# check V4L2 codecs available in the API
7010+if enabled v4l2_m2m; then
7011+ check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;"
7012+ check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;"
7013+ check_cc mpeg1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG1;"
7014+ check_cc mpeg2_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG2;"
7015+ check_cc mpeg4_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG4;"
7016+ check_cc hevc_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_HEVC;"
7017+ check_cc h263_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H263;"
7018+ check_cc h264_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H264;"
7019+ check_cc vp8_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP8;"
7020+ check_cc vp9_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP9;"
7021+fi
7022+
7023+check_headers sys/videoio.h
7024+test_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
7025+
7026+check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
7027+check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
7028+# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
7029+# w32api 3.12 had it defined wrong
7030+check_cpp_condition vfwcap_defines vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER"
7031+
7032+check_type "dshow.h" IBaseFilter
7033+
7034+# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
7035+check_headers "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h" ||
7036+ check_headers "machine/ioctl_meteor.h machine/ioctl_bt848.h" ||
7037+ check_headers "dev/video/meteor/ioctl_meteor.h dev/video/bktr/ioctl_bt848.h" ||
7038+ check_headers "dev/ic/bt8xx.h"
7039+
7040+if check_struct sys/soundcard.h audio_buf_info bytes; then
7041+ enable_sanitized sys/soundcard.h
7042+else
7043+ test_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_sanitized sys/soundcard.h
7044+ #include <sys/soundcard.h>
7045+ audio_buf_info abc;
7046+EOF
7047+fi
7048+
7049+enabled alsa && { check_pkg_config alsa alsa "alsa/asoundlib.h" snd_pcm_htimestamp ||
7050+ check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound; }
7051+
7052+enabled libjack &&
7053+ require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range
7054+
7055+enabled sndio && check_pkg_config sndio sndio sndio.h sio_open
7056+
7057+if enabled libcdio; then
7058+ check_pkg_config libcdio libcdio_paranoia "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open ||
7059+ check_pkg_config libcdio libcdio_paranoia "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open ||
7060+ check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
7061+ check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
7062+ die "ERROR: No usable libcdio/cdparanoia found"
7063+fi
7064+
7065+enabled libxcb && check_pkg_config libxcb "xcb >= 1.4" xcb/xcb.h xcb_connect ||
7066+ disable libxcb_shm libxcb_shape libxcb_xfixes
7067+
7068+if enabled libxcb; then
7069+ enabled libxcb_shm && check_pkg_config libxcb_shm xcb-shm xcb/shm.h xcb_shm_attach
7070+ enabled libxcb_shape && check_pkg_config libxcb_shape xcb-shape xcb/shape.h xcb_shape_get_rectangles
7071+ enabled libxcb_xfixes && check_pkg_config libxcb_xfixes xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image
7072+fi
7073+
7074+check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
7075+
7076+# d3d11va requires linking directly to dxgi and d3d11 if not building for
7077+# the desktop api partition
7078+test_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11"
7079+#ifdef WINAPI_FAMILY
7080+#include <winapifamily.h>
7081+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
7082+#error desktop, not uwp
7083+#else
7084+// WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
7085+#endif
7086+#else
7087+#error no family set
7088+#endif
7089+EOF
7090+
7091+# vaapi_win32 requires linking directly to dxgi if not building for
7092+# the desktop api partition
7093+test_cpp <<EOF && enable uwp && vaapi_win32_extralibs="-ldxgi"
7094+#ifdef WINAPI_FAMILY
7095+#include <winapifamily.h>
7096+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
7097+#error desktop, not uwp
7098+#else
7099+// WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
7100+#endif
7101+#else
7102+#error no family set
7103+#endif
7104+EOF
7105+
7106+# mediafoundation requires linking directly to mfplat if building for uwp target
7107+enabled uwp && mediafoundation_extralibs="-lmfplat -lmfuuid -lole32 -lstrmiids" || mediafoundation_extralibs="-lmfuuid -lole32 -lstrmiids"
7108+
7109+enabled libdrm &&
7110+ check_pkg_config libdrm_getfb2 libdrm "xf86drmMode.h" drmModeGetFB2
7111+
7112+enabled vaapi &&
7113+ check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize
7114+
7115+if enabled vaapi; then
7116+ case $target_os in
7117+ mingw32*|mingw64*|win32|win64)
7118+ check_pkg_config vaapi_win32 "libva-win32" "va/va_win32.h" vaGetDisplayWin32
7119+ ;;
7120+ *)
7121+ check_pkg_config vaapi_drm "libva-drm" "va/va_drm.h" vaGetDisplayDRM
7122+ ;;
7123+ esac
7124+
7125+ if enabled xlib_x11; then
7126+ check_pkg_config vaapi_x11 "libva-x11" "va/va_x11.h" vaGetDisplay
7127+ fi
7128+
7129+ check_cpp_condition vaapi_1 "va/va.h" "VA_CHECK_VERSION(1, 0, 0)"
7130+
7131+ check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
7132+ check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
7133+ check_struct "va/va.h" "VADecPictureParameterBufferAV1" bit_depth_idx
7134+ check_type "va/va.h va/va_vpp.h" "VAProcFilterParameterBufferHDRToneMapping"
7135+ check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" rotation_flags
7136+ check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" blend_flags
7137+ check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
7138+ check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
7139+ check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
7140+ check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9"
7141+ check_type "va/va.h va/va_enc_av1.h" "VAEncPictureParameterBufferAV1"
7142+fi
7143+
7144+if enabled_all opencl libdrm ; then
7145+ check_type "CL/cl_intel.h" "clCreateImageFromFdINTEL_fn" &&
7146+ enable opencl_drm_beignet
7147+ check_func_headers "CL/cl_ext.h" clImportMemoryARM &&
7148+ enable opencl_drm_arm
7149+fi
7150+
7151+if enabled_all opencl vaapi ; then
7152+ if enabled opencl_drm_beignet ; then
7153+ enable opencl_vaapi_beignet
7154+ else
7155+ check_type "CL/cl.h CL/cl_va_api_media_sharing_intel.h" "clCreateFromVA_APIMediaSurfaceINTEL_fn" &&
7156+ enable opencl_vaapi_intel_media
7157+ fi
7158+fi
7159+
7160+if enabled_all opencl dxva2 ; then
7161+ check_type "CL/cl_dx9_media_sharing.h" cl_dx9_surface_info_khr &&
7162+ enable opencl_dxva2
7163+fi
7164+
7165+if enabled_all opencl d3d11va ; then
7166+ check_type "CL/cl_d3d11.h" clGetDeviceIDsFromD3D11KHR_fn &&
7167+ enable opencl_d3d11
7168+fi
7169+
7170+enabled vdpau &&
7171+ check_cpp_condition vdpau vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP"
7172+
7173+enabled vdpau &&
7174+ check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
7175+
7176+enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd && \
7177+ warn "CrystalHD support is deprecated and will be removed, please contact the developers if you are interested" \
7178+ "in maintaining it."
7179+
7180+if enabled vulkan; then
7181+ check_pkg_config_header_only vulkan "vulkan >= 1.3.255" "vulkan/vulkan.h" "defined VK_VERSION_1_3" ||
7182+ check_cpp_condition vulkan "vulkan/vulkan.h" "defined(VK_VERSION_1_4) || (defined(VK_VERSION_1_3) && VK_HEADER_VERSION >= 255)"
7183+fi
7184+
7185+if disabled vulkan; then
7186+ disable libglslang libshaderc spirv_compiler
7187+fi
7188+
7189+if enabled x86; then
7190+ case $target_os in
7191+ freebsd|mingw32*|mingw64*|win32|win64|linux|cygwin*)
7192+ ;;
7193+ *)
7194+ disable ffnvcodec cuvid nvdec nvenc
7195+ ;;
7196+ esac
7197+elif enabled_any aarch64 ppc64 && ! enabled bigendian; then
7198+ case $target_os in
7199+ linux)
7200+ ;;
7201+ *)
7202+ disable ffnvcodec cuvid nvdec nvenc
7203+ ;;
7204+ esac
7205+else
7206+ disable ffnvcodec cuvid nvdec nvenc
7207+fi
7208+
7209+enabled ffnvcodec && enable cuda
7210+
7211+enabled nvenc &&
7212+ test_cc -I$source_path <<EOF || disable nvenc
7213+#include <ffnvcodec/nvEncodeAPI.h>
7214+NV_ENCODE_API_FUNCTION_LIST flist;
7215+void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_CODEC_H264_GUID } }; }
7216+int main(void) { return 0; }
7217+EOF
7218+
7219+if enabled nvenc; then
7220+ check_type "ffnvcodec/nvEncodeAPI.h" "NV_ENC_PIC_PARAMS_AV1"
7221+fi
7222+
7223+if enabled_any nvdec cuvid; then
7224+ check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
7225+fi
7226+
7227+enabled amf &&
7228+ check_cpp_condition amf "AMF/core/Version.h" \
7229+ "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x00010004001d0000"
7230+
7231+# Funny iconv installations are not unusual, so check it after all flags have been set
7232+if enabled libc_iconv; then
7233+ check_func_headers iconv.h iconv
7234+elif enabled iconv; then
7235+ check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
7236+fi
7237+
7238+enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
7239+
7240+# add some useful compiler flags if supported
7241+check_cflags -Wdeclaration-after-statement
7242+check_cflags -Wall
7243+check_cflags -Wdisabled-optimization
7244+check_cflags -Wpointer-arith
7245+check_cflags -Wredundant-decls
7246+check_cflags -Wwrite-strings
7247+check_cflags -Wtype-limits
7248+check_cflags -Wundef
7249+check_cflags -Wmissing-prototypes
7250+check_cflags -Wstrict-prototypes
7251+check_cflags -Wempty-body
7252+
7253+if enabled extra_warnings; then
7254+ check_cflags -Wcast-qual
7255+ check_cflags -Wextra
7256+ check_cflags -Wpedantic
7257+fi
7258+
7259+check_disable_warning(){
7260+ warning_flag=-W${1#-Wno-}
7261+ test_cflags $unknown_warning_flags $warning_flag && add_cflags $1
7262+}
7263+
7264+test_cflags -Werror=unused-command-line-argument &&
7265+ append unknown_warning_flags "-Werror=unused-command-line-argument"
7266+test_cflags -Werror=unknown-warning-option &&
7267+ append unknown_warning_flags "-Werror=unknown-warning-option"
7268+
7269+check_disable_warning -Wno-parentheses
7270+check_disable_warning -Wno-switch
7271+check_disable_warning -Wno-format-zero-length
7272+check_disable_warning -Wno-pointer-sign
7273+check_disable_warning -Wno-unused-const-variable
7274+check_disable_warning -Wno-bool-operation
7275+check_disable_warning -Wno-char-subscripts
7276+
7277+check_disable_warning_headers(){
7278+ warning_flag=-W${1#-Wno-}
7279+ test_cflags $warning_flag && add_cflags_headers $1
7280+}
7281+
7282+check_disable_warning_headers -Wno-deprecated-declarations
7283+check_disable_warning_headers -Wno-unused-variable
7284+
7285+test_cc <<EOF && enable blocks_extension
7286+void (^block)(void);
7287+EOF
7288+
7289+# add some linker flags
7290+check_ldflags -Wl,--warn-common
7291+check_ldflags -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
7292+enabled rpath && add_ldexeflags -Wl,-rpath,$libdir && add_ldsoflags -Wl,-rpath,$libdir
7293+test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
7294+
7295+# add some strip flags
7296+check_stripflags -x
7297+
7298+enabled neon_clobber_test &&
7299+ check_ldflags -Wl,--wrap,avcodec_open2 \
7300+ -Wl,--wrap,avcodec_decode_subtitle2 \
7301+ -Wl,--wrap,avcodec_encode_subtitle \
7302+ -Wl,--wrap,avcodec_send_packet \
7303+ -Wl,--wrap,avcodec_receive_packet \
7304+ -Wl,--wrap,avcodec_send_frame \
7305+ -Wl,--wrap,avcodec_receive_frame \
7306+ -Wl,--wrap,swr_convert ||
7307+ disable neon_clobber_test
7308+
7309+enabled xmm_clobber_test &&
7310+ check_ldflags -Wl,--wrap,avcodec_open2 \
7311+ -Wl,--wrap,avcodec_decode_subtitle2 \
7312+ -Wl,--wrap,avcodec_encode_subtitle \
7313+ -Wl,--wrap,avcodec_send_packet \
7314+ -Wl,--wrap,avcodec_receive_packet \
7315+ -Wl,--wrap,avcodec_send_frame \
7316+ -Wl,--wrap,avcodec_receive_frame \
7317+ -Wl,--wrap,swr_convert \
7318+ -Wl,--wrap,sws_scale ||
7319+ disable xmm_clobber_test
7320+
7321+check_ld "cc" proper_dce <<EOF
7322+extern const int array[512];
7323+static inline int func(void) { return array[0]; }
7324+int main(void) { return 0; }
7325+EOF
7326+
7327+if enabled proper_dce; then
7328+ echo "X { local: *; };" > $TMPV
7329+ if test_ldflags -Wl,${version_script},$TMPV; then
7330+ append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
7331+ quotes='""'
7332+ test_cc <<EOF && enable symver_asm_label
7333+void ff_foo(void) __asm__ ("av_foo@VERSION");
7334+void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
7335+EOF
7336+ test_cc <<EOF && enable symver_gnu_asm
7337+__asm__(".symver ff_foo,av_foo@VERSION");
7338+void ff_foo(void) {}
7339+EOF
7340+ fi
7341+fi
7342+
7343+if [ -z "$optflags" ]; then
7344+ if enabled small; then
7345+ optflags=$cflags_size
7346+ elif enabled optimizations; then
7347+ optflags=$cflags_speed
7348+ else
7349+ optflags=$cflags_noopt
7350+ fi
7351+fi
7352+
7353+check_optflags(){
7354+ check_cflags "$@"
7355+ [ -n "$lto" ] && check_ldflags "$@"
7356+}
7357+
7358+check_optflags $optflags
7359+check_optflags -fno-math-errno
7360+check_optflags -fno-signed-zeros
7361+
7362+if [ -n "$lto" ]; then
7363+ test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
7364+ check_cflags $lto
7365+ check_ldflags $lto $cpuflags
7366+ disable inline_asm_direct_symbol_refs
7367+fi
7368+
7369+enabled ftrapv && check_cflags -ftrapv
7370+
7371+test_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
7372+int x;
7373+EOF
7374+
7375+
7376+if enabled icc; then
7377+ # Just warnings, no remarks
7378+ check_cflags -w1
7379+ # -wd: Disable following warnings
7380+ # 144, 167, 556: -Wno-pointer-sign
7381+ # 188: enumerated type mixed with another type
7382+ # 1292: attribute "foo" ignored
7383+ # 1419: external declaration in primary source file
7384+ # 10006: ignoring unknown option -fno-signed-zeros
7385+ # 10148: ignoring unknown option -Wno-parentheses
7386+ # 10156: ignoring option '-W'; no argument required
7387+ # 13200: No EMMS instruction before call to function
7388+ # 13203: No EMMS instruction before return from function
7389+ check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
7390+ # 11030: Warning unknown option --as-needed
7391+ # 10156: ignoring option '-export'; no argument required
7392+ check_ldflags -wd10156,11030
7393+ # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
7394+ enable ebp_available
7395+ # The test above does not test linking
7396+ [ -n "$lto" ] && disable symver_asm_label
7397+ if enabled x86_32; then
7398+ icc_version=$($cc -dumpversion)
7399+ test ${icc_version%%.*} -ge 11 &&
7400+ check_cflags -falign-stack=maintain-16-byte ||
7401+ disable aligned_stack
7402+ fi
7403+elif enabled gcc; then
7404+ check_optflags -fno-tree-vectorize
7405+ check_cflags -Werror=format-security
7406+ check_cflags -Werror=implicit-function-declaration
7407+ check_cflags -Werror=missing-prototypes
7408+ check_cflags -Werror=return-type
7409+ check_cflags -Werror=vla
7410+ check_cflags -Wformat
7411+ check_cflags -fdiagnostics-color=auto
7412+ enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
7413+ if enabled x86_32; then
7414+ case $target_os in
7415+ *bsd*)
7416+ # BSDs don't guarantee a 16 byte aligned stack, but we can
7417+ # request GCC to try to maintain 16 byte alignment throughout
7418+ # function calls. Library entry points that might call assembly
7419+ # functions align the stack. (The parameter means 2^4 bytes.)
7420+ check_cflags -mpreferred-stack-boundary=4
7421+ ;;
7422+ esac
7423+ fi
7424+elif enabled llvm_gcc; then
7425+ check_cflags -mllvm -stack-alignment=16
7426+elif enabled clang; then
7427+ if enabled x86_32; then
7428+ # Clang doesn't support maintaining alignment without assuming the
7429+ # same alignment in every function. If 16 byte alignment would be
7430+ # enabled, one would also have to either add attribute_align_arg on
7431+ # every single entry point into the libraries or enable -mstackrealign
7432+ # (doing stack realignment in every single function).
7433+ case $target_os in
7434+ mingw32|win32|*bsd*)
7435+ disable aligned_stack
7436+ ;;
7437+ *)
7438+ check_cflags -mllvm -stack-alignment=16
7439+ check_cflags -mstack-alignment=16
7440+ ;;
7441+ esac
7442+ else
7443+ check_cflags -mllvm -stack-alignment=16
7444+ check_cflags -mstack-alignment=16
7445+ fi
7446+ check_cflags -Qunused-arguments
7447+ check_cflags -Werror=implicit-function-declaration
7448+ check_cflags -Werror=missing-prototypes
7449+ check_cflags -Werror=return-type
7450+elif enabled cparser; then
7451+ add_cflags -Wno-missing-variable-declarations
7452+ add_cflags -Wno-empty-statement
7453+elif enabled armcc; then
7454+ add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
7455+ add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
7456+ # 2523: use of inline assembly is deprecated
7457+ add_cflags -W${armcc_opt},--diag_suppress=2523
7458+ add_cflags -W${armcc_opt},--diag_suppress=1207
7459+ add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
7460+ add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
7461+ add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
7462+ add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
7463+elif enabled pathscale; then
7464+ add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
7465+ disable inline_asm
7466+elif enabled_any msvc icl; then
7467+ enabled x86_32 && disable aligned_stack
7468+ enabled_all x86_32 debug && add_cflags -Oy-
7469+ enabled debug && add_ldflags -debug
7470+ enable pragma_deprecated
7471+ if enabled icl; then
7472+ # -Qansi-alias is basically -fstrict-aliasing, but does not work
7473+ # (correctly) on icl 13.x.
7474+ test_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
7475+ add_cflags -Qansi-alias
7476+ # Some inline asm is not compilable in debug
7477+ if enabled debug; then
7478+ disable ebp_available
7479+ disable ebx_available
7480+ fi
7481+ fi
7482+ # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
7483+ check_cpp_condition log2 crtversion.h "_VC_CRT_MAJOR_VERSION >= 12"
7484+ # The CRT headers contain __declspec(restrict) in a few places, but if redefining
7485+ # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
7486+ # (as it ends up if the restrict redefine is done before including stdlib.h), while
7487+ # MSVC 2013 and newer can handle it fine.
7488+ # If this declspec fails, force including stdlib.h before the restrict redefinition
7489+ # happens in config.h.
7490+ if [ $restrict_keyword != restrict ]; then
7491+ test_cc <<EOF || add_cflags -FIstdlib.h
7492+__declspec($restrict_keyword) void *foo(int);
7493+EOF
7494+ fi
7495+ # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
7496+ # Issue has been fixed in MSVC v19.00.24218.
7497+ test_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
7498+ check_cflags -d2SSAOptimizer-
7499+ # enable utf-8 source processing on VS2015 U2 and newer
7500+ test_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
7501+ add_cflags -utf-8
7502+fi
7503+
7504+for pfx in "" host_; do
7505+ varname=${pfx%_}cc_type
7506+ eval "type=\$$varname"
7507+ if [ "$type" = "msvc" ]; then
7508+ test_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
7509+static inline int foo(int a) { return a; }
7510+EOF
7511+ fi
7512+done
7513+
7514+case $as_type in
7515+ clang)
7516+ add_asflags -Qunused-arguments
7517+ ;;
7518+esac
7519+
7520+case $ld_type in
7521+ clang)
7522+ check_ldflags -Qunused-arguments
7523+ ;;
7524+esac
7525+
7526+enable frame_thread_encoder
7527+
7528+enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
7529+
7530+check_deps $CONFIG_LIST \
7531+ $CONFIG_EXTRA \
7532+ $HAVE_LIST \
7533+ $ALL_COMPONENTS \
7534+
7535+enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
7536+
7537+case $target_os in
7538+haiku)
7539+ disable memalign
7540+ disable posix_memalign
7541+ ;;
7542+*-dos|freedos|opendos)
7543+ if test_cpp_condition sys/version.h "defined(__DJGPP__) && __DJGPP__ == 2 && __DJGPP_MINOR__ == 5"; then
7544+ disable memalign
7545+ fi
7546+ ;;
7547+esac
7548+
7549+flatten_extralibs(){
7550+ nested_entries=
7551+ list_name=$1
7552+ eval list=\$${1}
7553+ for entry in $list; do
7554+ entry_copy=$entry
7555+ resolve entry_copy
7556+ flat_entries=
7557+ for e in $entry_copy; do
7558+ case $e in
7559+ *_extralibs) nested_entries="$nested_entries$e ";;
7560+ *) flat_entries="$flat_entries$e ";;
7561+ esac
7562+ done
7563+ eval $entry="\$flat_entries"
7564+ done
7565+ append $list_name "$nested_entries"
7566+
7567+ resolve nested_entries
7568+ if test -n "$(filter '*_extralibs' $nested_entries)"; then
7569+ flatten_extralibs $list_name
7570+ fi
7571+}
7572+
7573+flatten_extralibs_wrapper(){
7574+ list_name=$1
7575+ flatten_extralibs $list_name
7576+ unique $list_name
7577+ resolve $list_name
7578+ eval $list_name=\$\(\$ldflags_filter \$$list_name\)
7579+ eval printf \''%s'\' \""\$$list_name"\"
7580+}
7581+
7582+for linkunit in $LIBRARY_LIST; do
7583+ unset current_extralibs
7584+ eval components=\$$(toupper ${linkunit})_COMPONENTS_LIST
7585+ for comp in ${components}; do
7586+ enabled $comp || continue
7587+ comp_extralibs="${comp}_extralibs"
7588+ append current_extralibs $comp_extralibs
7589+ done
7590+ eval prepend ${linkunit}_extralibs $current_extralibs
7591+done
7592+
7593+for linkunit in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
7594+ eval ${linkunit}_extralibs=\$\(flatten_extralibs_wrapper ${linkunit}_extralibs\)
7595+done
7596+
7597+map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
7598+
7599+for thread in $THREADS_LIST; do
7600+ if enabled $thread; then
7601+ test -n "$thread_type" &&
7602+ die "ERROR: Only one thread type must be selected." ||
7603+ thread_type="$thread"
7604+ fi
7605+done
7606+
7607+if disabled stdatomic; then
7608+ if enabled atomics_gcc; then
7609+ add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
7610+ elif enabled atomics_win32; then
7611+ add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
7612+ elif enabled atomics_suncc; then
7613+ add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
7614+ elif enabled pthreads; then
7615+ add_compat atomics/pthread/stdatomic.o
7616+ add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
7617+ else
7618+ enabled threads && die "Threading is enabled, but no atomics are available"
7619+ add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
7620+ fi
7621+fi
7622+
7623+# Check if requested libraries were found.
7624+for lib in $AUTODETECT_LIBS; do
7625+ requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found";
7626+done
7627+
7628+enabled zlib && add_cppflags -DZLIB_CONST
7629+
7630+# conditional library dependencies, in any order
7631+enabled amovie_filter && prepend avfilter_deps "avformat avcodec"
7632+enabled aresample_filter && prepend avfilter_deps "swresample"
7633+enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec"
7634+enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
7635+enabled elbg_filter && prepend avfilter_deps "avcodec"
7636+enabled find_rect_filter && prepend avfilter_deps "avformat avcodec"
7637+enabled mcdeint_filter && prepend avfilter_deps "avcodec"
7638+enabled movie_filter && prepend avfilter_deps "avformat avcodec"
7639+enabled pan_filter && prepend avfilter_deps "swresample"
7640+enabled pp_filter && prepend avfilter_deps "postproc"
7641+enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
7642+enabled sab_filter && prepend avfilter_deps "swscale"
7643+enabled scale_filter && prepend avfilter_deps "swscale"
7644+enabled scale2ref_filter && prepend avfilter_deps "swscale"
7645+enabled showcqt_filter && prepend avfilter_deps "avformat swscale"
7646+enabled signature_filter && prepend avfilter_deps "avcodec avformat"
7647+enabled smartblur_filter && prepend avfilter_deps "swscale"
7648+enabled spp_filter && prepend avfilter_deps "avcodec"
7649+enabled sr_filter && prepend avfilter_deps "avformat swscale"
7650+enabled subtitles_filter && prepend avfilter_deps "avformat avcodec"
7651+enabled uspp_filter && prepend avfilter_deps "avcodec"
7652+enabled zoompan_filter && prepend avfilter_deps "swscale"
7653+
7654+enabled lavfi_indev && prepend avdevice_deps "avfilter"
7655+
7656+#FIXME
7657+enabled_any sdl2_outdev opengl_outdev && enabled sdl2 &&
7658+ add_cflags $(filter_out '-Dmain=SDL_main' $sdl2_cflags)
7659+
7660+enabled opus_decoder && prepend avcodec_deps "swresample"
7661+
7662+# reorder the items at var $1 to align with the items order at var $2 .
7663+# die if an item at $1 is not at $2 .
7664+reorder_by(){
7665+ eval rb_in=\$$1
7666+ eval rb_ordered=\$$2
7667+
7668+ for rb in $rb_in; do
7669+ is_in $rb $rb_ordered || die "$rb at \$$1 is not at \$$2"
7670+ done
7671+
7672+ rb_out=
7673+ for rb in $rb_ordered; do
7674+ is_in $rb $rb_in && rb_out="$rb_out$rb "
7675+ done
7676+ eval $1=\$rb_out
7677+}
7678+
7679+# deps-expand fflib $1: N x {append all expanded deps; unique}
7680+# within a set of N items, N expansions are enough to expose a cycle.
7681+expand_deps(){
7682+ unique ${1}_deps # required for the early break test.
7683+ for dummy in $LIBRARY_LIST; do # N iteratios
7684+ eval deps=\$${1}_deps
7685+ append ${1}_deps $(map 'eval echo \$${v}_deps' $deps)
7686+ unique ${1}_deps
7687+ eval '[ ${#deps} = ${#'${1}_deps'} ]' && break # doesn't expand anymore
7688+ done
7689+
7690+ eval is_in $1 \$${1}_deps && die "Dependency cycle at ${1}_deps"
7691+ reorder_by ${1}_deps LIBRARY_LIST # linking order is expected later
7692+}
7693+
7694+#we have to remove gpl from the deps here as some code assumes all lib deps are libs
7695+postproc_deps="$(filter_out 'gpl' $postproc_deps)"
7696+
7697+map 'expand_deps $v' $LIBRARY_LIST
7698+
7699+if test "$quiet" != "yes"; then
7700+
7701+echo "install prefix $prefix"
7702+echo "source path $source_path"
7703+echo "C compiler $cc"
7704+echo "C library $libc_type"
7705+if test "$host_cc" != "$cc"; then
7706+ echo "host C compiler $host_cc"
7707+ echo "host C library $host_libc_type"
7708+fi
7709+echo "ARCH $arch ($cpu)"
7710+if test "$build_suffix" != ""; then
7711+ echo "build suffix $build_suffix"
7712+fi
7713+if test "$progs_suffix" != ""; then
7714+ echo "progs suffix $progs_suffix"
7715+fi
7716+if test "$extra_version" != ""; then
7717+ echo "version string suffix $extra_version"
7718+fi
7719+echo "big-endian ${bigendian-no}"
7720+echo "runtime cpu detection ${runtime_cpudetect-no}"
7721+if enabled x86; then
7722+ echo "standalone assembly ${x86asm-no}"
7723+ echo "x86 assembler ${x86asmexe}"
7724+ echo "MMX enabled ${mmx-no}"
7725+ echo "MMXEXT enabled ${mmxext-no}"
7726+ echo "3DNow! enabled ${amd3dnow-no}"
7727+ echo "3DNow! extended enabled ${amd3dnowext-no}"
7728+ echo "SSE enabled ${sse-no}"
7729+ echo "SSSE3 enabled ${ssse3-no}"
7730+ echo "AESNI enabled ${aesni-no}"
7731+ echo "AVX enabled ${avx-no}"
7732+ echo "AVX2 enabled ${avx2-no}"
7733+ echo "AVX-512 enabled ${avx512-no}"
7734+ echo "AVX-512ICL enabled ${avx512icl-no}"
7735+ echo "XOP enabled ${xop-no}"
7736+ echo "FMA3 enabled ${fma3-no}"
7737+ echo "FMA4 enabled ${fma4-no}"
7738+ echo "i686 features enabled ${i686-no}"
7739+ echo "CMOV is fast ${fast_cmov-no}"
7740+ echo "EBX available ${ebx_available-no}"
7741+ echo "EBP available ${ebp_available-no}"
7742+fi
7743+if enabled aarch64; then
7744+ echo "NEON enabled ${neon-no}"
7745+ echo "DOTPROD enabled ${dotprod-no}"
7746+ echo "I8MM enabled ${i8mm-no}"
7747+fi
7748+if enabled arm; then
7749+ echo "ARMv5TE enabled ${armv5te-no}"
7750+ echo "ARMv6 enabled ${armv6-no}"
7751+ echo "ARMv6T2 enabled ${armv6t2-no}"
7752+ echo "VFP enabled ${vfp-no}"
7753+ echo "NEON enabled ${neon-no}"
7754+ echo "THUMB enabled ${thumb-no}"
7755+fi
7756+if enabled mips; then
7757+ echo "MIPS FPU enabled ${mipsfpu-no}"
7758+ echo "MIPS DSP R1 enabled ${mipsdsp-no}"
7759+ echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
7760+ echo "MIPS MSA enabled ${msa-no}"
7761+ echo "LOONGSON MMI enabled ${mmi-no}"
7762+fi
7763+if enabled ppc; then
7764+ echo "AltiVec enabled ${altivec-no}"
7765+ echo "VSX enabled ${vsx-no}"
7766+ echo "POWER8 enabled ${power8-no}"
7767+ echo "PPC 4xx optimizations ${ppc4xx-no}"
7768+ echo "dcbzl available ${dcbzl-no}"
7769+ echo "vec_xl available ${vec_xl-no}"
7770+fi
7771+if enabled loongarch; then
7772+ echo "LSX enabled ${lsx-no}"
7773+ echo "LASX enabled ${lasx-no}"
7774+fi
7775+if enabled riscv; then
7776+ echo "RISC-V Vector enabled ${rvv-no}"
7777+fi
7778+echo "debug symbols ${debug-no}"
7779+echo "strip symbols ${stripping-no}"
7780+echo "optimize for size ${small-no}"
7781+echo "optimizations ${optimizations-no}"
7782+echo "static ${static-no}"
7783+echo "shared ${shared-no}"
7784+echo "postprocessing support ${postproc-no}"
7785+echo "network support ${network-no}"
7786+echo "threading support ${thread_type-no}"
7787+echo "safe bitstream reader ${safe_bitstream_reader-no}"
7788+echo "texi2html enabled ${texi2html-no}"
7789+echo "perl enabled ${perl-no}"
7790+echo "pod2man enabled ${pod2man-no}"
7791+echo "makeinfo enabled ${makeinfo-no}"
7792+echo "makeinfo supports HTML ${makeinfo_html-no}"
7793+echo "xmllint enabled ${xmllint-no}"
7794+test -n "$random_seed" &&
7795+ echo "random seed ${random_seed}"
7796+echo
7797+
7798+echo "External libraries:"
7799+print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | print_in_columns
7800+echo
7801+
7802+echo "External libraries providing hardware acceleration:"
7803+print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | print_in_columns
7804+echo
7805+
7806+echo "Libraries:"
7807+print_enabled '' $LIBRARY_LIST | print_in_columns
7808+echo
7809+
7810+echo "Programs:"
7811+print_enabled '' $PROGRAM_LIST | print_in_columns
7812+echo
7813+
7814+for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
7815+ echo "Enabled ${type}s:"
7816+ eval list=\$$(toupper $type)_LIST
7817+ print_enabled '_*' $list | print_in_columns
7818+ echo
7819+done
7820+
7821+if test -n "$ignore_tests"; then
7822+ ignore_tests=$(echo $ignore_tests | tr ',' ' ')
7823+ echo "Ignored FATE tests:"
7824+ echo $ignore_tests | print_in_columns
7825+ echo
7826+fi
7827+
7828+echo "License: $license"
7829+
7830+fi # test "$quiet" != "yes"
7831+
7832+if test -n "$WARN_IF_GETS_DISABLED_LIST"; then
7833+ for cfg in $WARN_IF_GETS_DISABLED_LIST; do
7834+ if disabled $cfg; then
7835+ varname=${cfg}_disable_reason
7836+ eval "warn \"Disabled $cfg because \$$varname\""
7837+ fi
7838+ done
7839+fi
7840+
7841+if test -n "$WARNINGS"; then
7842+ printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color"
7843+ enabled fatal_warnings && exit 1
7844+fi
7845+
7846+test -e Makefile || echo "include $source_path/Makefile" > Makefile
7847+
7848+esc(){
7849+ echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
7850+}
7851+
7852+echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" > ffbuild/config.fate
7853+
7854+enabled stripping || strip="echo skipping strip"
7855+enabled stripping || striptype=""
7856+
7857+config_files="$TMPH ffbuild/config.mak doc/config.texi"
7858+
7859+cat > ffbuild/config.mak <<EOF
7860+# Automatically generated by configure - do not modify!
7861+ifndef FFMPEG_CONFIG_MAK
7862+FFMPEG_CONFIG_MAK=1
7863+FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
7864+prefix=$prefix
7865+LIBDIR=\$(DESTDIR)$libdir
7866+SHLIBDIR=\$(DESTDIR)$shlibdir
7867+INCDIR=\$(DESTDIR)$incdir
7868+BINDIR=\$(DESTDIR)$bindir
7869+DATADIR=\$(DESTDIR)$datadir
7870+DOCDIR=\$(DESTDIR)$docdir
7871+MANDIR=\$(DESTDIR)$mandir
7872+PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
7873+INSTALL_NAME_DIR=$install_name_dir
7874+SRC_PATH=$source_path
7875+SRC_LINK=$source_link
7876+ifndef MAIN_MAKEFILE
7877+SRC_PATH:=\$(SRC_PATH:.%=..%)
7878+endif
7879+CC_IDENT=$cc_ident
7880+ARCH=$arch
7881+INTRINSICS=$intrinsics
7882+EXTERN_PREFIX=$extern_prefix
7883+CC=$cc
7884+CXX=$cxx
7885+AS=$as
7886+OBJCC=$objcc
7887+LD=$ld
7888+DEPCC=$dep_cc
7889+DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
7890+DEPAS=$as
7891+DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
7892+X86ASM=$x86asmexe
7893+DEPX86ASM=$x86asmexe
7894+DEPX86ASMFLAGS=\$(X86ASMFLAGS)
7895+AR=$ar
7896+ARFLAGS=$arflags
7897+AR_O=$ar_o
7898+AR_CMD=$ar
7899+NM_CMD=$nm
7900+METALCC=$metalcc
7901+METALLIB=$metallib
7902+RANLIB=$ranlib
7903+STRIP=$strip
7904+STRIPTYPE=$striptype
7905+NVCC=$nvcc
7906+CP=cp -p
7907+LN_S=$ln_s
7908+CPPFLAGS=$CPPFLAGS
7909+CFLAGS=$CFLAGS
7910+CXXFLAGS=$CXXFLAGS
7911+OBJCCFLAGS=$OBJCFLAGS
7912+ASFLAGS=$ASFLAGS
7913+NVCCFLAGS=$nvccflags
7914+AS_C=$AS_C
7915+AS_O=$AS_O
7916+OBJCC_C=$OBJCC_C
7917+OBJCC_E=$OBJCC_E
7918+OBJCC_O=$OBJCC_O
7919+CC_C=$CC_C
7920+CC_E=$CC_E
7921+CC_O=$CC_O
7922+CXX_C=$CXX_C
7923+CXX_O=$CXX_O
7924+NVCC_C=$NVCC_C
7925+NVCC_O=$NVCC_O
7926+LD_O=$LD_O
7927+X86ASM_O=$X86ASM_O
7928+LD_LIB=$LD_LIB
7929+LD_PATH=$LD_PATH
7930+DLLTOOL=$dlltool
7931+WINDRES=$windres
7932+DOXYGEN=$doxygen
7933+LDFLAGS=$LDFLAGS
7934+LDEXEFLAGS=$LDEXEFLAGS
7935+LDSOFLAGS=$LDSOFLAGS
7936+SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
7937+ASMSTRIPFLAGS=$ASMSTRIPFLAGS
7938+X86ASMFLAGS=$X86ASMFLAGS
7939+MSAFLAGS=$MSAFLAGS
7940+MMIFLAGS=$MMIFLAGS
7941+LSXFLAGS=$LSXFLAGS
7942+LASXFLAGS=$LASXFLAGS
7943+BUILDSUF=$build_suffix
7944+PROGSSUF=$progs_suffix
7945+FULLNAME=$FULLNAME
7946+LIBPREF=$LIBPREF
7947+LIBSUF=$LIBSUF
7948+LIBNAME=$LIBNAME
7949+SLIBPREF=$SLIBPREF
7950+SLIBSUF=$SLIBSUF
7951+EXESUF=$EXESUF
7952+EXTRA_VERSION=$extra_version
7953+CCDEP=$CCDEP
7954+CXXDEP=$CXXDEP
7955+CCDEP_FLAGS=$CCDEP_FLAGS
7956+ASDEP=$ASDEP
7957+ASDEP_FLAGS=$ASDEP_FLAGS
7958+X86ASMDEP=$X86ASMDEP
7959+X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS
7960+CC_DEPFLAGS=$CC_DEPFLAGS
7961+CXX_DEPFLAGS=$CXX_DEPFLAGS
7962+OBJCC_DEPFLAGS=$OBJC_DEPFLAGS
7963+AS_DEPFLAGS=$AS_DEPFLAGS
7964+X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS
7965+HOSTCC=$host_cc
7966+HOSTLD=$host_ld
7967+HOSTCFLAGS=$host_cflags
7968+HOSTCPPFLAGS=$host_cppflags
7969+HOSTEXESUF=$HOSTEXESUF
7970+HOSTLDFLAGS=$host_ldflags
7971+HOSTEXTRALIBS=$host_extralibs
7972+DEPHOSTCC=$host_cc
7973+DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
7974+HOSTCCDEP=$HOSTCCDEP
7975+HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
7976+HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
7977+HOSTCC_C=$HOSTCC_C
7978+HOSTCC_O=$HOSTCC_O
7979+HOSTLD_O=$HOSTLD_O
7980+TARGET_EXEC=$target_exec $target_exec_args
7981+TARGET_PATH=$target_path
7982+TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
7983+CFLAGS-ffplay=${sdl2_cflags}
7984+CFLAGS_HEADERS=$CFLAGS_HEADERS
7985+LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
7986+EXTRALIBS=$extralibs
7987+COMPAT_OBJS=$compat_objs
7988+INSTALL=$install
7989+LIBTARGET=${LIBTARGET}
7990+SLIBNAME=${SLIBNAME}
7991+SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
7992+SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
7993+SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
7994+SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
7995+SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
7996+SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
7997+SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
7998+SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
7999+VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
8000+SAMPLES:=${samples:-\$(FATE_SAMPLES)}
8001+NOREDZONE_FLAGS=$noredzone_flags
8002+LIBFUZZER_PATH=$libfuzzer_path
8003+IGNORE_TESTS=$ignore_tests
8004+EOF
8005+
8006+map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST
8007+
8008+for entry in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
8009+ eval echo "EXTRALIBS-${entry}=\$${entry}_extralibs" >> ffbuild/config.mak
8010+done
8011+
8012+cat > $TMPH <<EOF
8013+/* Automatically generated by configure - do not modify! */
8014+#ifndef FFMPEG_CONFIG_H
8015+#define FFMPEG_CONFIG_H
8016+#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
8017+#define FFMPEG_LICENSE "$(c_escape $license)"
8018+#define CONFIG_THIS_YEAR 2025
8019+#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
8020+#define AVCONV_DATADIR "$(eval c_escape $datadir)"
8021+#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
8022+#define OS_NAME $target_os
8023+#define av_restrict $restrict_keyword
8024+#define EXTERN_PREFIX "${extern_prefix}"
8025+#define EXTERN_ASM ${extern_prefix}
8026+#define BUILDSUF "$build_suffix"
8027+#define SLIBSUF "$SLIBSUF"
8028+#define HAVE_MMX2 HAVE_MMXEXT
8029+#define SWS_MAX_FILTER_SIZE $sws_max_filter_size
8030+EOF
8031+
8032+test -n "$assert_level" &&
8033+ echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
8034+
8035+test -n "$malloc_prefix" &&
8036+ echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
8037+
8038+enabled aarch64 &&
8039+ echo "#define AS_ARCH_LEVEL $as_arch_level" >>$TMPH
8040+
8041+if enabled x86asm; then
8042+ append config_files $TMPASM
8043+ cat > $TMPASM <<EOF
8044+; Automatically generated by configure - do not modify!
8045+EOF
8046+fi
8047+
8048+enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
8049+
8050+
8051+mkdir -p doc
8052+mkdir -p tests
8053+mkdir -p tests/api
8054+echo "@c auto-generated by configure - do not modify! " > doc/config.texi
8055+
8056+print_config ARCH_ "$config_files" $ARCH_LIST
8057+print_config HAVE_ "$config_files" $HAVE_LIST
8058+print_config CONFIG_ "$config_files" $CONFIG_LIST \
8059+ $CONFIG_EXTRA \
8060+
8061+echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
8062+
8063+# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
8064+cp_if_changed $TMPH config.h
8065+touch ffbuild/.config
8066+
8067+# Copy config.asm before printing ALL_COMPONENTS; that's not needed in assembly.
8068+enabled x86asm && cp_if_changed $TMPASM config.asm
8069+
8070+# Reopen a new TMPH for config_components.h.
8071+cat > $TMPH <<EOF
8072+/* Automatically generated by configure - do not modify! */
8073+#ifndef FFMPEG_CONFIG_COMPONENTS_H
8074+#define FFMPEG_CONFIG_COMPONENTS_H
8075+EOF
8076+
8077+print_config CONFIG_ "$config_files" $ALL_COMPONENTS
8078+
8079+echo "#endif /* FFMPEG_CONFIG_COMPONENTS_H */" >> $TMPH
8080+echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak
8081+
8082+cp_if_changed $TMPH config_components.h
8083+
8084+cat > $TMPH <<EOF
8085+/* Generated by ffmpeg configure */
8086+#ifndef AVUTIL_AVCONFIG_H
8087+#define AVUTIL_AVCONFIG_H
8088+EOF
8089+
8090+print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
8091+
8092+echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
8093+
8094+cp_if_changed $TMPH libavutil/avconfig.h
8095+
8096+# full_filter_name_foo=vf_foo
8097+# full_filter_name_bar=asrc_bar
8098+# ...
8099+eval "$(sed -n "s/^extern const AVFilter ff_\([avfsinkrc]\{2,5\}\)_\(.*\);/full_filter_name_\2=\1_\2/p" $source_path/libavfilter/allfilters.c)"
8100+
8101+# generate the lists of enabled components
8102+print_enabled_components(){
8103+ file=$1
8104+ struct_name=$2
8105+ name=$3
8106+ shift 3
8107+ echo "static const $struct_name * const $name[] = {" > $TMPH
8108+ for c in $*; do
8109+ if enabled $c; then
8110+ case $name in
8111+ filter_list)
8112+ eval c=\$full_filter_name_${c%_filter}
8113+ ;;
8114+ indev_list)
8115+ c=${c%_indev}_demuxer
8116+ ;;
8117+ outdev_list)
8118+ c=${c%_outdev}_muxer
8119+ ;;
8120+ esac
8121+ printf " &ff_%s,\n" $c >> $TMPH
8122+ fi
8123+ done
8124+ if [ "$name" = "filter_list" ]; then
8125+ for c in asrc_abuffer vsrc_buffer asink_abuffer vsink_buffer; do
8126+ printf " &ff_%s,\n" $c >> $TMPH
8127+ done
8128+ fi
8129+ echo " NULL };" >> $TMPH
8130+ cp_if_changed $TMPH $file
8131+}
8132+
8133+print_enabled_components libavfilter/filter_list.c AVFilter filter_list $FILTER_LIST
8134+print_enabled_components libavcodec/codec_list.c FFCodec codec_list $CODEC_LIST
8135+print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST
8136+print_enabled_components libavcodec/bsf_list.c FFBitStreamFilter bitstream_filters $BSF_LIST
8137+print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST
8138+print_enabled_components libavformat/muxer_list.c FFOutputFormat muxer_list $MUXER_LIST
8139+print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST
8140+print_enabled_components libavdevice/outdev_list.c FFOutputFormat outdev_list $OUTDEV_LIST
8141+print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
8142+
8143+# Settings for pkg-config files
8144+
8145+cat > $TMPH <<EOF
8146+# Automatically generated by configure - do not modify!
8147+shared=$shared
8148+build_suffix=$build_suffix
8149+prefix=$prefix
8150+libdir=$libdir
8151+incdir=$incdir
8152+rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}")
8153+source_path=${source_path}
8154+LIBPREF=${LIBPREF}
8155+LIBSUF=${LIBSUF}
8156+extralibs_avutil="$avutil_extralibs"
8157+extralibs_avcodec="$avcodec_extralibs"
8158+extralibs_avformat="$avformat_extralibs"
8159+extralibs_avdevice="$avdevice_extralibs"
8160+extralibs_avfilter="$avfilter_extralibs"
8161+extralibs_postproc="$postproc_extralibs"
8162+extralibs_swscale="$swscale_extralibs"
8163+extralibs_swresample="$swresample_extralibs"
8164+EOF
8165+
8166+for lib in $LIBRARY_LIST; do
8167+ lib_deps="$(eval echo \$${lib}_deps)"
8168+ echo ${lib}_deps=\"$lib_deps\" >> $TMPH
8169+done
8170+
8171+cp_if_changed $TMPH ffbuild/config.sh
+3,
-2
1@@ -2,10 +2,11 @@
2 NAME=ffmpeg
3 VERSION=git:n6.1.4
4 RELEASE=1
5-SOURCE="https://git.ffmpeg.org/ffmpeg.git"
6+SOURCE="https://git.ffmpeg.org/ffmpeg.git
7+ configure"
8
9 build() {
10- echo "this is ffmpeg by chld!!! override"
11+ cp -f ../configure ./configure
12 ./configure \
13 --pkg-config-flags=--static \
14 --extra-cflags="-I$PREFIX/include" \