3 # FFmpeg configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
23 (: ${foo%%bar}) 2> /dev/null
26 (: ${foo?}) 2> /dev/null
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
32 if test "0$FF_CONF_EXEC" -lt 1; then
34 try_exec bash "$0" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
65 --help print this message
66 --quiet Suppress showing informative output
67 --list-decoders show all available decoders
68 --list-encoders show all available encoders
69 --list-hwaccels show all available hardware accelerators
70 --list-demuxers show all available demuxers
71 --list-muxers show all available muxers
72 --list-parsers show all available parsers
73 --list-protocols show all available protocols
74 --list-bsfs show all available bitstream filters
75 --list-indevs show all available input devices
76 --list-outdevs show all available output devices
77 --list-filters show all available filters
80 --logfile=FILE log tests and output to FILE [ffbuild/config.log]
81 --disable-logging do not log configure debug information
82 --fatal-warnings fail if any configure warning is generated
83 --prefix=PREFIX install in PREFIX [$prefix_default]
84 --bindir=DIR install binaries in DIR [PREFIX/bin]
85 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
86 --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg]
87 --libdir=DIR install libs in DIR [PREFIX/lib]
88 --shlibdir=DIR install shared libs in DIR [LIBDIR]
89 --incdir=DIR install includes in DIR [PREFIX/include]
90 --mandir=DIR install man page in DIR [PREFIX/share/man]
91 --pkgconfigdir=DIR install pkg-config files in DIR [LIBDIR/pkgconfig]
92 --enable-rpath use rpath to allow installing libraries in paths
93 not part of the dynamic linker search path
94 use rpath when linking programs (USE WITH CARE)
95 --install-name-dir=DIR Darwin directory name for installed targets
98 --enable-gpl allow use of GPL code, the resulting libs
99 and binaries will be under GPL [no]
100 --enable-version3 upgrade (L)GPL to version 3 [no]
101 --enable-nonfree allow use of nonfree code, the resulting libs
102 and binaries will be unredistributable [no]
104 Configuration options:
105 --disable-static do not build static libraries [no]
106 --enable-shared build shared libraries [no]
107 --enable-small optimize for size instead of speed
108 --disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
109 --enable-gray enable full grayscale support (slower color)
110 --disable-swscale-alpha disable alpha channel support in swscale
111 --disable-all disable building components, libraries and programs
112 --disable-autodetect disable automatically detected external libraries [no]
115 --disable-programs do not build command line programs
116 --disable-ffmpeg disable ffmpeg build
117 --disable-ffplay disable ffplay build
118 --disable-ffprobe disable ffprobe build
120 Documentation options:
121 --disable-doc do not build documentation
122 --disable-htmlpages do not build HTML documentation pages
123 --disable-manpages do not build man documentation pages
124 --disable-podpages do not build POD documentation pages
125 --disable-txtpages do not build text documentation pages
128 --disable-avdevice disable libavdevice build
129 --disable-avcodec disable libavcodec build
130 --disable-avformat disable libavformat build
131 --disable-swresample disable libswresample build
132 --disable-swscale disable libswscale build
133 --disable-postproc disable libpostproc build
134 --disable-avfilter disable libavfilter build
135 --enable-avresample enable libavresample build (deprecated) [no]
136 --disable-pthreads disable pthreads [autodetect]
137 --disable-w32threads disable Win32 threads [autodetect]
138 --disable-os2threads disable OS/2 threads [autodetect]
139 --disable-network disable network support [no]
140 --disable-dct disable DCT code
141 --disable-dwt disable DWT code
142 --disable-error-resilience disable error resilience code
143 --disable-lsp disable LSP code
144 --disable-lzo disable LZO decoder code
145 --disable-mdct disable MDCT code
146 --disable-rdft disable RDFT code
147 --disable-fft disable FFT code
148 --disable-faan disable floating point AAN (I)DCT code
149 --disable-pixelutils disable pixel utils in libavutil
151 Individual component options:
152 --disable-everything disable all components listed below
153 --disable-encoder=NAME disable encoder NAME
154 --enable-encoder=NAME enable encoder NAME
155 --disable-encoders disable all encoders
156 --disable-decoder=NAME disable decoder NAME
157 --enable-decoder=NAME enable decoder NAME
158 --disable-decoders disable all decoders
159 --disable-hwaccel=NAME disable hwaccel NAME
160 --enable-hwaccel=NAME enable hwaccel NAME
161 --disable-hwaccels disable all hwaccels
162 --disable-muxer=NAME disable muxer NAME
163 --enable-muxer=NAME enable muxer NAME
164 --disable-muxers disable all muxers
165 --disable-demuxer=NAME disable demuxer NAME
166 --enable-demuxer=NAME enable demuxer NAME
167 --disable-demuxers disable all demuxers
168 --enable-parser=NAME enable parser NAME
169 --disable-parser=NAME disable parser NAME
170 --disable-parsers disable all parsers
171 --enable-bsf=NAME enable bitstream filter NAME
172 --disable-bsf=NAME disable bitstream filter NAME
173 --disable-bsfs disable all bitstream filters
174 --enable-protocol=NAME enable protocol NAME
175 --disable-protocol=NAME disable protocol NAME
176 --disable-protocols disable all protocols
177 --enable-indev=NAME enable input device NAME
178 --disable-indev=NAME disable input device NAME
179 --disable-indevs disable input devices
180 --enable-outdev=NAME enable output device NAME
181 --disable-outdev=NAME disable output device NAME
182 --disable-outdevs disable output devices
183 --disable-devices disable all devices
184 --enable-filter=NAME enable filter NAME
185 --disable-filter=NAME disable filter NAME
186 --disable-filters disable all filters
188 External library support:
190 Using any of the following switches will allow FFmpeg to link to the
191 corresponding external library. All the components depending on that library
192 will become enabled, if all their other dependencies are met and they are not
193 explicitly disabled. E.g. --enable-libwavpack will enable linking to
194 libwavpack and allow the libwavpack encoder to be built, unless it is
195 specifically disabled with --disable-encoder=libwavpack.
197 Note that only the system libraries are auto-detected. All the other external
198 libraries must be explicitly enabled.
200 Also note that the following help text describes the purpose of the libraries
201 themselves, not all their features will necessarily be usable by FFmpeg.
203 --disable-alsa disable ALSA support [autodetect]
204 --disable-appkit disable Apple AppKit framework [autodetect]
205 --disable-avfoundation disable Apple AVFoundation framework [autodetect]
206 --enable-avisynth enable reading of AviSynth script files [no]
207 --disable-bzlib disable bzlib [autodetect]
208 --disable-coreimage disable Apple CoreImage framework [autodetect]
209 --enable-chromaprint enable audio fingerprinting with chromaprint [no]
210 --enable-frei0r enable frei0r video filtering [no]
211 --enable-gcrypt enable gcrypt, needed for rtmp(t)e support
212 if openssl, librtmp or gmp is not used [no]
213 --enable-gmp enable gmp, needed for rtmp(t)e support
214 if openssl or librtmp is not used [no]
215 --enable-gnutls enable gnutls, needed for https support
216 if openssl, libtls or mbedtls is not used [no]
217 --disable-iconv disable iconv [autodetect]
218 --enable-jni enable JNI support [no]
219 --enable-ladspa enable LADSPA audio filtering [no]
220 --enable-libaom enable AV1 video encoding/decoding via libaom [no]
221 --enable-libaribb24 enable ARIB text and caption decoding via libaribb24 [no]
222 --enable-libass enable libass subtitles rendering,
223 needed for subtitles and ass filter [no]
224 --enable-libbluray enable BluRay reading using libbluray [no]
225 --enable-libbs2b enable bs2b DSP library [no]
226 --enable-libcaca enable textual display using libcaca [no]
227 --enable-libcelt enable CELT decoding via libcelt [no]
228 --enable-libcdio enable audio CD grabbing with libcdio [no]
229 --enable-libcodec2 enable codec2 en/decoding using libcodec2 [no]
230 --enable-libdav1d enable AV1 decoding via libdav1d [no]
231 --enable-libdavs2 enable AVS2 decoding via libdavs2 [no]
232 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
234 --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
235 --enable-libflite enable flite (voice synthesis) support via libflite [no]
236 --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
237 --enable-libfreetype enable libfreetype, needed for drawtext filter [no]
238 --enable-libfribidi enable libfribidi, improves drawtext filter [no]
239 --enable-libgme enable Game Music Emu via libgme [no]
240 --enable-libgsm enable GSM de/encoding via libgsm [no]
241 --enable-libiec61883 enable iec61883 via libiec61883 [no]
242 --enable-libilbc enable iLBC de/encoding via libilbc [no]
243 --enable-libjack enable JACK audio sound server [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-libopus enable Opus de/encoding via libopus [no]
256 --enable-libpulse enable Pulseaudio input via libpulse [no]
257 --enable-librsvg enable SVG rasterization via librsvg [no]
258 --enable-librubberband enable rubberband needed for rubberband filter [no]
259 --enable-librtmp enable RTMP[E] support via librtmp [no]
260 --enable-libshine enable fixed-point MP3 encoding via libshine [no]
261 --enable-libsmbclient enable Samba protocol via libsmbclient [no]
262 --enable-libsnappy enable Snappy compression, needed for hap encoding [no]
263 --enable-libsoxr enable Include libsoxr resampling [no]
264 --enable-libspeex enable Speex de/encoding via libspeex [no]
265 --enable-libsrt enable Haivision SRT protocol via libsrt [no]
266 --enable-libssh enable SFTP protocol via libssh [no]
267 --enable-libtensorflow enable TensorFlow as a DNN module backend
268 for DNN based filters like sr [no]
269 --enable-libtesseract enable Tesseract, needed for ocr filter [no]
270 --enable-libtheora enable Theora encoding via libtheora [no]
271 --enable-libtls enable LibreSSL (via libtls), needed for https support
272 if openssl, gnutls or mbedtls is not used [no]
273 --enable-libtwolame enable MP2 encoding via libtwolame [no]
274 --enable-libv4l2 enable libv4l2/v4l-utils [no]
275 --enable-libvidstab enable video stabilization using vid.stab [no]
276 --enable-libvmaf enable vmaf filter via libvmaf [no]
277 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
278 --enable-libvorbis enable Vorbis en/decoding via libvorbis,
279 native implementation exists [no]
280 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
281 --enable-libwavpack enable wavpack encoding via libwavpack [no]
282 --enable-libwebp enable WebP encoding via libwebp [no]
283 --enable-libx264 enable H.264 encoding via x264 [no]
284 --enable-libx265 enable HEVC encoding via x265 [no]
285 --enable-libxavs enable AVS encoding via xavs [no]
286 --enable-libxavs2 enable AVS2 encoding via xavs2 [no]
287 --enable-libxcb enable X11 grabbing using XCB [autodetect]
288 --enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
289 --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
290 --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
291 --enable-libxvid enable Xvid encoding via xvidcore,
292 native MPEG-4/Xvid encoder exists [no]
293 --enable-libxml2 enable XML parsing using the C library libxml2, needed
294 for dash demuxing support [no]
295 --enable-libzimg enable z.lib, needed for zscale filter [no]
296 --enable-libzmq enable message passing via libzmq [no]
297 --enable-libzvbi enable teletext support via libzvbi [no]
298 --enable-lv2 enable LV2 audio filtering [no]
299 --disable-lzma disable lzma [autodetect]
300 --enable-decklink enable Blackmagic DeckLink I/O support [no]
301 --enable-mbedtls enable mbedTLS, needed for https support
302 if openssl, gnutls or libtls is not used [no]
303 --enable-mediacodec enable Android MediaCodec support [no]
304 --enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
305 --enable-openal enable OpenAL 1.1 capture support [no]
306 --enable-opencl enable OpenCL processing [no]
307 --enable-opengl enable OpenGL rendering [no]
308 --enable-openssl enable openssl, needed for https support
309 if gnutls, libtls or mbedtls is not used [no]
310 --enable-pocketsphinx enable PocketSphinx, needed for asr filter [no]
311 --disable-sndio disable sndio support [autodetect]
312 --disable-schannel disable SChannel SSP, needed for TLS support on
313 Windows if openssl and gnutls are not used [autodetect]
314 --disable-sdl2 disable sdl2 [autodetect]
315 --disable-securetransport disable Secure Transport, needed for TLS support
316 on OSX if openssl and gnutls are not used [autodetect]
317 --enable-vapoursynth enable VapourSynth demuxer [no]
318 --disable-xlib disable xlib [autodetect]
319 --disable-zlib disable zlib [autodetect]
321 The following libraries provide various hardware acceleration features:
322 --disable-amf disable AMF video encoding code [autodetect]
323 --disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
324 --enable-cuda-nvcc enable Nvidia CUDA compiler [no]
325 --disable-cuvid disable Nvidia CUVID support [autodetect]
326 --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
327 --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
328 --disable-ffnvcodec disable dynamically linked Nvidia code [autodetect]
329 --enable-libdrm enable DRM code (Linux) [no]
330 --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
331 --enable-libnpp enable Nvidia Performance Primitives-based code [no]
332 --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
333 --disable-nvdec disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
334 --disable-nvenc disable Nvidia video encoding code [autodetect]
335 --enable-omx enable OpenMAX IL code [no]
336 --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
337 --enable-rkmpp enable Rockchip Media Process Platform code [no]
338 --disable-v4l2-m2m disable V4L2 mem2mem code [autodetect]
339 --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
340 --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
341 --disable-videotoolbox disable VideoToolbox code [autodetect]
344 --arch=ARCH select architecture [$arch]
345 --cpu=CPU select the minimum required CPU (affects
346 instruction selection, may crash on older CPUs)
347 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
348 --progs-suffix=SUFFIX program name suffix []
349 --enable-cross-compile assume a cross-compiler is used
350 --sysroot=PATH root of cross-build tree
351 --sysinclude=PATH location of cross-build system headers
352 --target-os=OS compiler targets OS [$target_os]
353 --target-exec=CMD command to run executables on target
354 --target-path=DIR path to view of build directory on target
355 --target-samples=DIR path to samples directory on target
356 --tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
357 --toolchain=NAME set tool defaults according to NAME
358 (gcc-asan, clang-asan, gcc-msan, clang-msan,
359 gcc-tsan, clang-tsan, gcc-usan, clang-usan,
360 valgrind-massif, valgrind-memcheck,
361 msvc, icl, gcov, llvm-cov, hardened)
362 --nm=NM use nm tool NM [$nm_default]
363 --ar=AR use archive tool AR [$ar_default]
364 --as=AS use assembler AS [$as_default]
365 --ln_s=LN_S use symbolic link tool LN_S [$ln_s_default]
366 --strip=STRIP use strip tool STRIP [$strip_default]
367 --windres=WINDRES use windows resource compiler WINDRES [$windres_default]
368 --x86asmexe=EXE use nasm-compatible assembler EXE [$x86asmexe_default]
369 --cc=CC use C compiler CC [$cc_default]
370 --cxx=CXX use C compiler CXX [$cxx_default]
371 --objcc=OCC use ObjC compiler OCC [$cc_default]
372 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
373 --nvcc=NVCC use Nvidia CUDA compiler NVCC [$nvcc_default]
374 --ld=LD use linker LD [$ld_default]
375 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
376 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
377 --ranlib=RANLIB use ranlib RANLIB [$ranlib_default]
378 --doxygen=DOXYGEN use DOXYGEN to generate API doc [$doxygen_default]
379 --host-cc=HOSTCC use host C compiler HOSTCC
380 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
381 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
382 --host-ld=HOSTLD use host linker HOSTLD
383 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
384 --host-extralibs=HLIBS use libs HLIBS when linking for host
385 --host-os=OS compiler host OS [$target_os]
386 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
387 --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
388 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
389 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
390 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
391 --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
392 --extra-libs=ELIBS add ELIBS [$ELIBS]
393 --extra-version=STRING version string suffix []
394 --optflags=OPTFLAGS override optimization-related compiler flags
395 --nvccflags=NVCCFLAGS override nvcc flags [$nvccflags_default]
396 --build-suffix=SUFFIX library name suffix []
397 --enable-pic build position-independent code
398 --enable-thumb compile for Thumb instruction set
399 --enable-lto use link-time optimization
400 --env="ENV=override" override the environment variables
402 Advanced options (experts only):
403 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
404 --custom-allocator=NAME use a supported custom allocator
405 --disable-symver disable symbol versioning
406 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
407 --disable-safe-bitstream-reader
408 disable buffer boundary checking in bitreaders
409 (faster, but may crash)
410 --sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default]
412 Optimization options (experts only):
413 --disable-asm disable all assembly optimizations
414 --disable-altivec disable AltiVec optimizations
415 --disable-vsx disable VSX optimizations
416 --disable-power8 disable POWER8 optimizations
417 --disable-amd3dnow disable 3DNow! optimizations
418 --disable-amd3dnowext disable 3DNow! extended optimizations
419 --disable-mmx disable MMX optimizations
420 --disable-mmxext disable MMXEXT optimizations
421 --disable-sse disable SSE optimizations
422 --disable-sse2 disable SSE2 optimizations
423 --disable-sse3 disable SSE3 optimizations
424 --disable-ssse3 disable SSSE3 optimizations
425 --disable-sse4 disable SSE4 optimizations
426 --disable-sse42 disable SSE4.2 optimizations
427 --disable-avx disable AVX optimizations
428 --disable-xop disable XOP optimizations
429 --disable-fma3 disable FMA3 optimizations
430 --disable-fma4 disable FMA4 optimizations
431 --disable-avx2 disable AVX2 optimizations
432 --disable-avx512 disable AVX-512 optimizations
433 --disable-aesni disable AESNI optimizations
434 --disable-armv5te disable armv5te optimizations
435 --disable-armv6 disable armv6 optimizations
436 --disable-armv6t2 disable armv6t2 optimizations
437 --disable-vfp disable VFP optimizations
438 --disable-neon disable NEON optimizations
439 --disable-inline-asm disable use of inline assembly
440 --disable-x86asm disable use of standalone x86 assembly
441 --disable-mipsdsp disable MIPS DSP ASE R1 optimizations
442 --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
443 --disable-msa disable MSA optimizations
444 --disable-msa2 disable MSA2 optimizations
445 --disable-mipsfpu disable floating point MIPS optimizations
446 --disable-mmi disable Loongson SIMD optimizations
447 --disable-fast-unaligned consider unaligned accesses slow
449 Developer options (useful when working on FFmpeg itself):
450 --disable-debug disable debugging symbols
451 --enable-debug=LEVEL set the debug level [$debuglevel]
452 --disable-optimizations disable compiler optimizations
453 --enable-extra-warnings enable more compiler warnings
454 --disable-stripping disable stripping of executables and shared libraries
455 --assert-level=level 0(default), 1 or 2, amount of assertion testing,
456 2 causes a slowdown at runtime.
457 --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
458 --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
459 leaks and errors, using the specified valgrind binary.
460 Cannot be combined with --target-exec
461 --enable-ftrapv Trap arithmetic overflows
462 --samples=PATH location of test samples for FATE, if not set use
463 \$FATE_SAMPLES at make invocation time.
464 --enable-neon-clobber-test check NEON registers for clobbering (should be
465 used only for debugging purposes)
466 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
467 should be used only for debugging purposes)
468 --enable-random randomly enable/disable components
470 --enable-random=LIST randomly enable/disable specific components or
471 --disable-random=LIST component groups. LIST is a comma-separated list
472 of NAME[:PROB] entries where NAME is a component
473 (group) and PROB the probability associated with
475 --random-seed=VALUE seed value for --enable/disable-random
476 --disable-valgrind-backtrace do not print a backtrace under Valgrind
477 (only applies to --disable-optimizations builds)
478 --enable-ossfuzz Enable building fuzzer tool
479 --libfuzzer=PATH path to libfuzzer
480 --ignore-tests=TESTS comma-separated list (without "fate-" prefix
481 in the name) of tests whose result is ignored
482 --enable-linux-perf enable Linux Performance Monitor API
484 NOTE: Object files are built at the place where configure is launched.
489 if test -t 1 && which tput >/dev/null 2>&1; then
490 ncolors=$(tput colors)
491 if test -n "$ncolors" && test $ncolors -ge 8; then
492 bold_color=$(tput bold)
493 warn_color=$(tput setaf 3)
494 error_color=$(tput setaf 1)
495 reset_color=$(tput sgr0)
497 # 72 used instead of 80 since that's the default of pr
503 echo "$@" >> $logfile
509 while IFS= read -r log_file_line; do
510 printf '%5d\t%s\n' "$log_file_i" "$log_file_line"
511 log_file_i=$(($log_file_i+1))
512 done < "$1" >> "$logfile"
518 WARNINGS="${WARNINGS}WARNING: $*\n"
523 echo "$error_color$bold_color$@$reset_color"
526 If you think configure made a mistake, make sure you are using the latest
527 version from Git. If the latest version fails, report the problem to the
528 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
530 if disabled logging; then
532 Rerun configure with logging enabled (do not use --disable-logging), and
533 include the log this produces with your report.
537 Include the log file "$logfile" produced by configure as this will help
544 # Avoid locale weirdness, besides we really just want to translate ASCII.
546 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
550 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
554 echo "$*" | sed 's/["\\]/\\\0/g'
558 v=$(echo "$1" | sed "s/'/'\\\\''/g")
559 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
564 echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
571 eval "case '$v' in $pat) printf '%s ' '$v' ;; esac"
579 eval "case '$v' in $pat) ;; *) printf '%s ' '$v' ;; esac"
586 for v; do eval $m; done
592 for v; do echo ${v}${suffix}; done
598 for v; do echo ${v%$suffix}; done
613 eval : \${$var:=$value}
618 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
624 eval $(sanitize_var_name "$var")='$*'
628 eval echo \$$(sanitize_var_name "$1")
633 eval level=\${${pvar}_level:=0}
634 eval ${pvar}_${level}="\$$pvar"
635 eval ${pvar}_level=$(($level+1))
641 eval level=\${${pvar}_level:-0}
642 test $level = 0 && continue
643 eval level=$(($level-1))
644 eval $pvar="\${${pvar}_${level}}"
645 eval ${pvar}_level=$level
646 eval unset ${pvar}_${level}
652 eval ${var}_requested=yes
657 warn_if_gets_disabled(){
659 WARN_IF_GETS_DISABLED_LIST="$WARN_IF_GETS_DISABLED_LIST $var"
671 disable_with_reason(){
673 eval "${1}_disable_reason=\"$2\""
674 if requested $1; then
675 die "ERROR: $1 requested, but $2"
689 enable $(sanitize_var_name $var)
695 disable $(sanitize_var_name $var)
701 enabled $var && continue
703 eval enable_deep \$${var}_select
705 eval enable_deep_weak \$${var}_suggest
716 disabled $var && continue
725 test "${1#!}" = "$1" && op="=" || op="!="
726 eval test "x\$${1#!}_requested" $op "xyes"
730 test "${1#!}" = "$1" && op="=" || op="!="
731 eval test "x\$${1#!}" $op "xyes"
735 test "${1#!}" = "$1" && op="=" || op="!="
736 eval test "x\$${1#!}" $op "xno"
741 enabled $opt || return 1
747 disabled $opt || return 1
753 enabled $opt && return 0
759 disabled $opt && return 0
766 eval : \${$opt:=\$${opt}_default}
774 [ $var = $value ] && return 0
779 # The cfg loop is very hot (several thousands iterations), and in bash also
780 # potentialy quite slow. Try to abort the iterations early, preferably without
781 # calling functions. 70%+ of the time cfg is already done or without deps.
784 eval [ x\$${cfg}_checking = xdone ] && continue
785 eval [ x\$${cfg}_checking = xinprogress ] && die "Circular dependency for $cfg."
788 dep_all=\$${cfg}_deps
789 dep_any=\$${cfg}_deps_any
790 dep_con=\$${cfg}_conflict
791 dep_sel=\$${cfg}_select
792 dep_sgs=\$${cfg}_suggest
794 dep_ifn=\$${cfg}_if_any
797 # most of the time here $cfg has no deps - avoid costly no-op work
798 if [ "$dep_all$dep_any$dep_con$dep_sel$dep_sgs$dep_ifa$dep_ifn" ]; then
799 eval ${cfg}_checking=inprogress
801 set -- $cfg "$dep_all" "$dep_any" "$dep_con" "$dep_sel" "$dep_sgs" "$dep_ifa" "$dep_ifn"
802 check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
803 cfg=$1; dep_all=$2; dep_any=$3; dep_con=$4; dep_sel=$5 dep_sgs=$6; dep_ifa=$7; dep_ifn=$8
805 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
806 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
807 enabled_all $dep_all || { disable_with_reason $cfg "not all dependencies are satisfied: $dep_all"; }
808 enabled_any $dep_any || { disable_with_reason $cfg "not any dependency is satisfied: $dep_any"; }
809 disabled_all $dep_con || { disable_with_reason $cfg "some conflicting dependencies are unsatisfied: $dep_con"; }
810 disabled_any $dep_sel && { disable_with_reason $cfg "some selected dependency is unsatisfied: $dep_sel"; }
812 enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
814 for dep in $dep_all $dep_any $dep_sel $dep_sgs; do
815 # filter out library deps, these do not belong in extralibs
816 is_in $dep $LIBRARY_LIST && continue
817 enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
821 eval ${cfg}_checking=done
829 map 'eval echo "$v \${$v:-no}"' "$@" |
830 awk "BEGIN { split(\"$files\", files) }
832 c = \"$pfx\" toupper(\$1);
838 if (file ~ /\\.h\$/) {
839 printf(\"#define %s %d\\n\", c, v) >>file;
840 } else if (file ~ /\\.asm\$/) {
841 printf(\"%%define %s %d\\n\", c, v) >>file;
842 } else if (file ~ /\\.mak\$/) {
843 n = -v ? \"\" : \"!\";
844 printf(\"%s%s=yes\\n\", n, c) >>file;
845 } else if (file ~ /\\.texi\$/) {
846 pre = -v ? \"\" : \"@c \";
849 gsub(/_/, \"-\", c2);
850 printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
860 enabled $v && printf "%s\n" ${v%$suf}
867 eval "$var=\"\$$var $*\""
873 eval "$var=\"$* \$$var\""
880 reverse_out="$v $reverse_out"
886 # keeps the last occurence of each non-unique item
891 for v in $unique_in; do
892 # " $unique_out" +space such that every item is surrounded with spaces
893 case " $unique_out" in *" $v "*) continue; esac # already in list
894 unique_out="$unique_out$v "
903 for v in $resolve_in; do
904 eval 'resolve_out="$resolve_out$'$v' "'
906 eval $1=\$resolve_out
914 append CFLAGS $($cflags_filter "$@")
917 add_cflags_headers(){
918 append CFLAGS_HEADERS $($cflags_filter "$@")
922 append CXXFLAGS $($cflags_filter "$@")
926 append OBJCFLAGS $($objcflags_filter "$@")
930 append ASFLAGS $($asflags_filter "$@")
934 append LDFLAGS $($ldflags_filter "$@")
938 append LDEXEFLAGS $($ldflags_filter "$@")
942 append LDSOFLAGS $($ldflags_filter "$@")
946 prepend extralibs $($ldflags_filter "$@")
950 append ASMSTRIPFLAGS "$@"
954 append host_cppflags "$@"
958 append host_cflags $($host_cflags_filter "$@")
962 append host_ldflags $($host_ldflags_filter "$@")
966 append compat_objs $1
968 map 'add_cppflags -D$v' "$@"
973 "$@" >> $logfile 2>&1
978 stat "$1" >> $logfile 2>&1
982 eval printf '%s\\n' $CC_E
986 eval printf '%s\\n' $CC_O
990 eval printf '%s\\n' $AS_O
994 eval printf '%s\\n' $X86ASM_O
998 eval printf '%s\\n' $LD_O
1002 eval printf '%s\\n' $HOSTCC_E
1006 eval printf '%s\\n' $HOSTCC_O
1010 eval printf '%s\\n' $NVCC_O
1017 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
1024 test_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
1031 test_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
1040 [ -x "$(command -v cygpath)" ] && tmpcu_=$(cygpath -m $tmpcu_) && tmpo_=$(cygpath -m $tmpo_)
1041 test_cmd $nvcc -ptx $NVCCFLAGS "$@" $NVCC_C $(nvcc_o $tmpo_) $tmpcu_
1048 __global__ void hello(unsigned char *data) {}
1057 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
1064 test_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
1068 log test_x86asm "$@"
1072 test_cmd $x86asmexe $X86ASMFLAGS -Werror "$@" $(x86asm_o $TMPO) $TMPASM
1078 disabled $cmd && return
1080 test_cmd $@ && enable $cmd
1089 test_as $@ <<EOF && enable $name
1095 log check_inline_asm "$@"
1100 test_cc "$@" <<EOF && enable $name
1101 void foo(void){ __asm__ volatile($code); }
1105 check_inline_asm_flags(){
1106 log check_inline_asm_flags "$@"
1111 while [ "$1" != "" ]; do
1117 void foo(void){ __asm__ volatile($code); }
1120 test_cmd $cc $CPPFLAGS $CFLAGS $flags "$@" $CC_C $(cc_o $TMPO) $TMPC &&
1121 enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
1126 check_inline_asm ${1}_inline "\"$2\""
1127 check_as ${1}_external "$2"
1131 log check_x86asm "$@"
1135 test_x86asm "$@" && enable $name
1142 flags=$(filter_out '-l*|*.so' $@)
1143 libs=$(filter '-l*|*.so' $@)
1144 test_$type $($cflags_filter $flags) || return
1145 flags=$($ldflags_filter $flags)
1146 libs=$($ldflags_filter $libs)
1147 test_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
1156 test_ld $type $@ && enable $name
1161 test "${hdr%.h}" = "${hdr}" &&
1162 echo "#include $hdr" ||
1163 echo "#include <$hdr>"
1173 for hdr in $headers; do
1176 echo "int main(void) { $code; return 0; }"
1177 } | test_$check "$@"
1181 log check_cppflags "$@"
1182 test_cpp "$@" <<EOF && append CPPFLAGS "$@"
1188 log test_cflags "$@"
1189 set -- $($cflags_filter "$@")
1196 log check_cflags "$@"
1197 test_cflags "$@" && add_cflags "$@"
1201 log check_cxxflags "$@"
1202 set -- $($cflags_filter "$@")
1203 test_cxx "$@" <<EOF && append CXXFLAGS "$@"
1209 log test_objcflags "$@"
1210 set -- $($objcflags_filter "$@")
1211 test_objcc "$@" <<EOF
1217 log check_objcflags "$@"
1218 test_objcflags "$@" && add_objcflags "$@"
1222 log test_ldflags "$@"
1223 set -- $($ldflags_filter "$@")
1224 test_ld "cc" "$@" <<EOF
1225 int main(void){ return 0; }
1230 log check_ldflags "$@"
1231 test_ldflags "$@" && add_ldflags "$@"
1235 log test_stripflags "$@"
1236 # call test_cc to get a fresh TMPO
1238 int main(void) { return 0; }
1240 test_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
1244 log check_stripflags "$@"
1245 test_stripflags "$@" && add_stripflags "$@"
1249 log check_headers "$@"
1252 disable_sanitized $headers
1254 for hdr in $headers; do
1258 } | test_cpp "$@" && enable_sanitized $headers
1261 check_header_objcc(){
1262 log check_header_objcc "$@"
1266 disable_sanitized $header
1268 echo "#include <$header>"
1269 echo "int main(void) { return 0; }"
1270 } | test_objcc && test_stat "$TMPO" && enable_sanitized $header
1273 check_apple_framework(){
1274 log check_apple_framework "$@"
1276 name="$(tolower $framework)"
1277 header="${framework}/${framework}.h"
1279 check_header_objcc $header &&
1280 enable $name && eval ${name}_extralibs='"-framework $framework"'
1288 test_ld "cc" "$@" <<EOF && enable $func
1290 int main(void){ $func(); }
1294 check_complexfunc(){
1295 log check_complexfunc "$@"
1299 test $narg = 2 && args="f, g" || args="f * I"
1301 test_ld "cc" "$@" <<EOF && enable $func
1302 #include <complex.h>
1304 float foo(complex float f, complex float g) { return $func($args); }
1305 int main(void){ return (int) foo; }
1310 log check_mathfunc "$@"
1314 test $narg = 2 && args="f, g" || args="f"
1316 test_ld "cc" "$@" <<EOF && enable $func
1318 float foo(float f, float g) { return $func($args); }
1319 int main(void){ return (int) foo; }
1323 check_func_headers(){
1324 log check_func_headers "$@"
1329 for hdr in $headers; do
1332 echo "#include <stdint.h>"
1333 for func in $funcs; do
1334 echo "long check_$func(void) { return (long) $func; }"
1336 echo "int main(void) { int ret = 0;"
1337 # LTO could optimize out the test functions without this
1338 for func in $funcs; do
1339 echo " ret |= ((intptr_t)check_$func) & 0xFFFF;"
1341 echo "return ret; }"
1342 } | test_ld "cc" "$@" && enable $funcs && enable_sanitized $headers
1345 check_class_headers_cpp(){
1346 log check_class_headers_cpp "$@"
1351 for hdr in $headers; do
1352 echo "#include <$hdr>"
1354 echo "int main(void) { "
1356 for class in $classes; do
1357 echo "$class obj$i;"
1361 } | test_ld "cxx" "$@" && enable $funcs && enable_sanitized $headers
1364 test_cpp_condition(){
1365 log test_cpp_condition "$@"
1372 #error "unsatisfied condition: $condition"
1377 check_cpp_condition(){
1378 log check_cpp_condition "$@"
1382 test_cpp_condition "$@" && enable $name
1386 log test_cflags_cc "$@"
1391 set -- $($cflags_filter "$flags")
1395 #error "unsatisfied condition: $condition"
1407 check_func_headers "$headers" "$funcs" "$@" &&
1408 enable $name && eval ${name}_extralibs="\$@"
1412 log check_lib_cpp "$@"
1418 check_class_headers_cpp "$headers" "$classes" "$@" &&
1419 enable $name && eval ${name}_extralibs="\$@"
1423 log test_pkg_config "$@"
1431 test_cmd $pkg_config --exists --print-errors $pkg_version || return
1432 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1433 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1434 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1436 set_sanitized "${name}_cflags" $pkg_cflags &&
1437 set_sanitized "${name}_extralibs" $pkg_libs
1441 log check_pkg_config "$@"
1443 test_pkg_config "$@" &&
1444 eval add_cflags \$${name}_cflags
1448 test_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1452 log check_exec_crash "$@"
1455 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1456 # are safe but may not be available everywhere. Thus we use
1457 # raise(SIGTERM) instead. The check is run in a subshell so we
1458 # can redirect the "Terminated" message from the shell. SIGBUS
1459 # is not defined by standard C so it is used conditionally.
1461 (test_exec "$@") >> $logfile 2>&1 <<EOF
1463 static void sighandler(int sig){
1469 int (*func_ptr)(void) = foo;
1471 signal(SIGILL, sighandler);
1472 signal(SIGFPE, sighandler);
1473 signal(SIGSEGV, sighandler);
1475 signal(SIGBUS, sighandler);
1487 disable_sanitized "$type"
1488 test_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
1492 log check_struct "$@"
1497 disable_sanitized "${struct}_${member}"
1498 test_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1499 enable_sanitized "${struct}_${member}"
1503 log check_builtin "$@"
1509 test_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1512 check_compile_assert(){
1513 log check_compile_assert "$@"
1519 test_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1527 test_code cc "$@" && enable "$name"
1535 check_lib $name "$@" || die "ERROR: $name_version not found"
1541 check_cc "$@" || die "ERROR: $name failed"
1549 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1553 log require_headers "$@"
1555 check_headers "$@" || die "ERROR: $headers not found"
1558 require_cpp_condition(){
1559 log require_cpp_condition "$@"
1561 check_cpp_condition "$@" || die "ERROR: $condition not satisfied"
1564 require_pkg_config(){
1565 log require_pkg_config "$@"
1567 check_pkg_config "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message"
1571 log test_host_cc "$@"
1574 test_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1578 log test_host_cpp "$@"
1581 test_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1584 check_host_cppflags(){
1585 log check_host_cppflags "$@"
1586 test_host_cpp "$@" <<EOF && append host_cppflags "$@"
1591 check_host_cflags(){
1592 log check_host_cflags "$@"
1593 set -- $($host_cflags_filter "$@")
1594 test_host_cc "$@" <<EOF && append host_cflags "$@"
1599 test_host_cpp_condition(){
1600 log test_host_cpp_condition "$@"
1604 test_host_cpp "$@" <<EOF
1607 #error "unsatisfied condition: $condition"
1612 check_host_cpp_condition(){
1613 log check_host_cpp_condition "$@"
1617 test_host_cpp_condition "$@" && enable $name
1621 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1622 mkdir -p "$(dirname $2)"
1626 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1627 # system-dependent things.
1629 AVCODEC_COMPONENTS="
1637 AVDEVICE_COMPONENTS="
1642 AVFILTER_COMPONENTS="
1646 AVFORMAT_COMPONENTS="
1654 $AVDEVICE_COMPONENTS
1655 $AVFILTER_COMPONENTS
1656 $AVFORMAT_COMPONENTS
1660 avio_dir_cmd_example
1661 avio_reading_example
1662 decode_audio_example
1663 decode_video_example
1664 demuxing_decoding_example
1665 encode_audio_example
1666 encode_video_example
1668 filter_audio_example
1669 filtering_audio_example
1670 filtering_video_example
1671 http_multiclient_example
1677 resampling_audio_example
1678 scaling_video_example
1679 transcode_aac_example
1681 vaapi_encode_example
1682 vaapi_transcode_example
1685 EXTERNAL_AUTODETECT_LIBRARY_LIST="
1705 EXTERNAL_LIBRARY_GPL_LIST="
1719 EXTERNAL_LIBRARY_NONFREE_LIST="
1726 EXTERNAL_LIBRARY_VERSION3_LIST="
1738 EXTERNAL_LIBRARY_GPLV3_LIST="
1742 EXTERNAL_LIBRARY_LIST="
1743 $EXTERNAL_LIBRARY_GPL_LIST
1744 $EXTERNAL_LIBRARY_NONFREE_LIST
1745 $EXTERNAL_LIBRARY_VERSION3_LIST
1746 $EXTERNAL_LIBRARY_GPLV3_LIST
1812 HWACCEL_AUTODETECT_LIBRARY_LIST="
1830 # catchall list of things that require external libs to link
1836 HWACCEL_LIBRARY_NONFREE_LIST="
1842 HWACCEL_LIBRARY_LIST="
1843 $HWACCEL_LIBRARY_NONFREE_LIST
1864 safe_bitstream_reader
1871 # this list should be kept in linking order
1911 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1915 $EXTERNAL_LIBRARY_LIST
1916 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1917 $HWACCEL_LIBRARY_LIST
1918 $HWACCEL_AUTODETECT_LIBRARY_LIST
1950 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1951 $HWACCEL_AUTODETECT_LIBRARY_LIST
1993 ARCH_EXT_LIST_MIPS="
2006 ARCH_EXT_LIST_LOONGSON="
2012 ARCH_EXT_LIST_X86_SIMD="
2042 $ARCH_EXT_LIST_X86_SIMD
2052 $ARCH_EXT_LIST_LOONGSON
2073 sync_val_compare_and_swap
2090 cdio_paranoia_paranoia_h
2093 dev_bktr_ioctl_bt848_h
2094 dev_bktr_ioctl_meteor_h
2096 dev_video_bktr_ioctl_bt848_h
2097 dev_video_meteor_ioctl_meteor_h
2106 machine_ioctl_bt848_h
2107 machine_ioctl_meteor_h
2109 opencv2_core_core_c_h
2171 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
2189 GetProcessAffinityMask
2190 GetProcessMemoryInfo
2193 GetSystemTimeAsFileTime
2216 SetConsoleTextAttribute
2217 SetConsoleCtrlHandler
2225 UTGetOSTypeFromString
2237 TOOLCHAIN_FEATURES="
2250 inline_asm_direct_symbol_refs
2252 inline_asm_nonlocal_labels
2263 kCMVideoCodecType_HEVC
2264 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange
2267 struct_group_source_req
2268 struct_ip_mreq_source
2270 struct_msghdr_msg_flags
2272 struct_rusage_ru_maxrss
2273 struct_sctp_event_subscribe
2275 struct_sockaddr_sa_len
2276 struct_sockaddr_storage
2277 struct_stat_st_mtim_tv_nsec
2278 struct_v4l2_frmivalenum_discrete
2283 $(add_suffix _external $ARCH_EXT_LIST)
2284 $(add_suffix _inline $ARCH_EXT_LIST)
2305 opencl_vaapi_beignet
2306 opencl_vaapi_intel_media
2312 # options emitted with CONFIG_ prefix but not available on the command line
2338 frame_thread_encoder
2497 # code dependency declarations
2499 # architecture extensions
2504 armv8_deps="aarch64"
2505 neon_deps_any="aarch64 arm"
2506 intrinsics_neon_deps="neon"
2507 vfp_deps_any="aarch64 arm"
2511 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2520 loongson2_deps="mips"
2521 loongson3_deps="mips"
2522 mips32r2_deps="mips"
2523 mips32r5_deps="mips"
2524 mips32r6_deps="mips"
2525 mips64r2_deps="mips"
2526 mips64r6_deps="mips"
2529 mipsdspr2_deps="mips"
2535 x86_64_select="i686"
2536 x86_64_suggest="fast_cmov"
2539 amd3dnowext_deps="amd3dnow"
2557 mmx_external_deps="x86asm"
2558 mmx_inline_deps="inline_asm x86"
2559 mmx_suggest="mmx_external mmx_inline"
2561 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2562 eval dep=\$${ext}_deps
2563 eval ${ext}_external_deps='"${dep}_external"'
2564 eval ${ext}_inline_deps='"${dep}_inline"'
2565 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2568 aligned_stack_if_any="aarch64 ppc x86"
2569 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2570 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2571 fast_unaligned_if_any="aarch64 ppc x86"
2572 simd_align_16_if_any="altivec neon sse"
2573 simd_align_32_if_any="avx"
2574 simd_align_64_if_any="avx512"
2576 # system capabilities
2577 linux_perf_deps="linux_perf_event_h"
2578 symver_if_any="symver_asm_label symver_gnu_asm"
2579 valgrind_backtrace_conflict="optimizations"
2580 valgrind_backtrace_deps="valgrind_valgrind_h"
2583 atomics_gcc_if="sync_val_compare_and_swap"
2584 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2585 atomics_win32_if="MemoryBarrier"
2586 atomics_native_if_any="$ATOMICS_LIST"
2587 w32threads_deps="atomics_native"
2588 threads_if_any="$THREADS_LIST"
2591 cbs_av1_select="cbs"
2592 cbs_h264_select="cbs"
2593 cbs_h265_select="cbs"
2594 cbs_jpeg_select="cbs"
2595 cbs_mpeg2_select="cbs"
2596 cbs_vp9_select="cbs"
2598 dirac_parse_select="golomb"
2599 dnn_suggest="libtensorflow"
2600 error_resilience_select="me_cmp"
2602 faandct_select="fdctdsp"
2603 faanidct_deps="faan"
2604 faanidct_select="idctdsp"
2605 h264dsp_select="startcode"
2606 hevcparse_select="golomb"
2607 frame_thread_encoder_deps="encoders threads"
2608 intrax8_select="blockdsp idctdsp"
2611 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2612 mpeg_er_select="error_resilience"
2613 mpegaudio_select="mpegaudiodsp mpegaudioheader"
2614 mpegaudiodsp_select="dct"
2615 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
2616 mpegvideoenc_select="aandcttables me_cmp mpegvideo pixblockdsp qpeldsp"
2617 vc1dsp_select="h264chroma qpeldsp startcode"
2620 # decoders / encoders
2621 aac_decoder_select="adts_header mdct15 mdct sinewin"
2622 aac_fixed_decoder_select="adts_header mdct sinewin"
2623 aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
2624 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2625 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2626 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2627 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2628 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2629 adpcm_g722_decoder_select="g722dsp"
2630 adpcm_g722_encoder_select="g722dsp"
2631 aic_decoder_select="golomb idctdsp"
2632 alac_encoder_select="lpc"
2633 als_decoder_select="bswapdsp"
2634 amrnb_decoder_select="lsp"
2635 amrwb_decoder_select="lsp"
2636 amv_decoder_select="sp5x_decoder exif"
2637 amv_encoder_select="jpegtables mpegvideoenc"
2638 ape_decoder_select="bswapdsp llauddsp"
2639 apng_decoder_deps="zlib"
2640 apng_encoder_deps="zlib"
2641 apng_encoder_select="llvidencdsp"
2642 aptx_decoder_select="audio_frame_queue"
2643 aptx_encoder_select="audio_frame_queue"
2644 aptx_hd_decoder_select="audio_frame_queue"
2645 aptx_hd_encoder_select="audio_frame_queue"
2646 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2647 asv1_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
2648 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2649 asv2_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
2650 atrac1_decoder_select="mdct sinewin"
2651 atrac3_decoder_select="mdct"
2652 atrac3p_decoder_select="mdct sinewin"
2653 atrac9_decoder_select="mdct"
2654 avrn_decoder_select="exif jpegtables"
2655 bink_decoder_select="blockdsp hpeldsp"
2656 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2657 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2658 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2659 clearvideo_decoder_select="idctdsp"
2660 cllc_decoder_select="bswapdsp"
2661 comfortnoise_encoder_select="lpc"
2662 cook_decoder_select="audiodsp mdct sinewin"
2663 cscd_decoder_select="lzo"
2664 cscd_decoder_suggest="zlib"
2665 dca_decoder_select="mdct"
2666 dds_decoder_select="texturedsp"
2667 dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
2668 dnxhd_decoder_select="blockdsp idctdsp"
2669 dnxhd_encoder_select="blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2670 dolby_e_decoder_select="mdct"
2671 dvvideo_decoder_select="dvprofile idctdsp"
2672 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2673 dxa_decoder_deps="zlib"
2674 dxv_decoder_select="lzf texturedsp"
2675 eac3_decoder_select="ac3_decoder"
2676 eac3_encoder_select="ac3_encoder"
2677 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2678 eatgq_decoder_select="aandcttables"
2679 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2680 exr_decoder_deps="zlib"
2681 ffv1_decoder_select="rangecoder"
2682 ffv1_encoder_select="rangecoder"
2683 ffvhuff_decoder_select="huffyuv_decoder"
2684 ffvhuff_encoder_select="huffyuv_encoder"
2685 fic_decoder_select="golomb"
2686 flac_decoder_select="flacdsp"
2687 flac_encoder_select="bswapdsp flacdsp lpc"
2688 flashsv2_decoder_deps="zlib"
2689 flashsv2_encoder_deps="zlib"
2690 flashsv_decoder_deps="zlib"
2691 flashsv_encoder_deps="zlib"
2692 flv_decoder_select="h263_decoder"
2693 flv_encoder_select="h263_encoder"
2694 fourxm_decoder_select="blockdsp bswapdsp"
2695 fraps_decoder_select="bswapdsp huffman"
2696 g2m_decoder_deps="zlib"
2697 g2m_decoder_select="blockdsp idctdsp jpegtables"
2698 g729_decoder_select="audiodsp"
2699 h261_decoder_select="mpegvideo"
2700 h261_encoder_select="mpegvideoenc"
2701 h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
2702 h263_encoder_select="h263dsp mpegvideoenc"
2703 h263i_decoder_select="h263_decoder"
2704 h263p_decoder_select="h263_decoder"
2705 h263p_encoder_select="h263_encoder"
2706 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2707 h264_decoder_suggest="error_resilience"
2708 hap_decoder_select="snappy texturedsp"
2709 hap_encoder_deps="libsnappy"
2710 hap_encoder_select="texturedspenc"
2711 hevc_decoder_select="bswapdsp cabac golomb hevcparse videodsp"
2712 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2713 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
2714 hymt_decoder_select="huffyuv_decoder"
2715 iac_decoder_select="imc_decoder"
2716 imc_decoder_select="bswapdsp fft mdct sinewin"
2717 indeo3_decoder_select="hpeldsp"
2718 indeo4_decoder_select="ividsp"
2719 indeo5_decoder_select="ividsp"
2720 interplay_video_decoder_select="hpeldsp"
2721 jpegls_decoder_select="mjpeg_decoder"
2722 jv_decoder_select="blockdsp"
2723 lagarith_decoder_select="llviddsp"
2724 ljpeg_encoder_select="idctdsp jpegtables mpegvideoenc"
2725 lscr_decoder_deps="zlib"
2726 magicyuv_decoder_select="llviddsp"
2727 magicyuv_encoder_select="llvidencdsp"
2728 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2729 metasound_decoder_select="lsp mdct sinewin"
2730 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2731 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2732 mjpeg_encoder_select="jpegtables mpegvideoenc"
2733 mjpegb_decoder_select="mjpeg_decoder"
2734 mlp_decoder_select="mlp_parser"
2735 mlp_encoder_select="lpc audio_frame_queue"
2736 motionpixels_decoder_select="bswapdsp"
2737 mp1_decoder_select="mpegaudio"
2738 mp1float_decoder_select="mpegaudio"
2739 mp2_decoder_select="mpegaudio"
2740 mp2float_decoder_select="mpegaudio"
2741 mp3_decoder_select="mpegaudio"
2742 mp3adu_decoder_select="mpegaudio"
2743 mp3adufloat_decoder_select="mpegaudio"
2744 mp3float_decoder_select="mpegaudio"
2745 mp3on4_decoder_select="mpegaudio"
2746 mp3on4float_decoder_select="mpegaudio"
2747 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2748 mpc8_decoder_select="mpegaudiodsp"
2749 mpegvideo_decoder_select="mpegvideo"
2750 mpeg1video_decoder_select="mpegvideo"
2751 mpeg1video_encoder_select="mpegvideoenc h263dsp"
2752 mpeg2video_decoder_select="mpegvideo"
2753 mpeg2video_encoder_select="mpegvideoenc h263dsp"
2754 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2755 mpeg4_encoder_select="h263_encoder"
2756 msa1_decoder_select="mss34dsp"
2757 mscc_decoder_deps="zlib"
2758 msmpeg4v1_decoder_select="h263_decoder"
2759 msmpeg4v2_decoder_select="h263_decoder"
2760 msmpeg4v2_encoder_select="h263_encoder"
2761 msmpeg4v3_decoder_select="h263_decoder"
2762 msmpeg4v3_encoder_select="h263_encoder"
2763 mss2_decoder_select="mpegvideo qpeldsp vc1_decoder"
2764 mts2_decoder_select="mss34dsp"
2765 mwsc_decoder_deps="zlib"
2766 mxpeg_decoder_select="mjpeg_decoder"
2767 nellymoser_decoder_select="mdct sinewin"
2768 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2769 nuv_decoder_select="idctdsp lzo"
2770 on2avc_decoder_select="mdct"
2771 opus_decoder_deps="swresample"
2772 opus_decoder_select="mdct15"
2773 opus_encoder_select="audio_frame_queue mdct15"
2774 png_decoder_deps="zlib"
2775 png_encoder_deps="zlib"
2776 png_encoder_select="llvidencdsp"
2777 prores_decoder_select="blockdsp idctdsp"
2778 prores_encoder_select="fdctdsp"
2779 qcelp_decoder_select="lsp"
2780 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2781 ra_144_decoder_select="audiodsp"
2782 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2783 ralf_decoder_select="golomb"
2784 rasc_decoder_deps="zlib"
2785 rawvideo_decoder_select="bswapdsp"
2786 rscc_decoder_deps="zlib"
2787 rtjpeg_decoder_select="me_cmp"
2788 rv10_decoder_select="h263_decoder"
2789 rv10_encoder_select="h263_encoder"
2790 rv20_decoder_select="h263_decoder"
2791 rv20_encoder_select="h263_encoder"
2792 rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2793 rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2794 screenpresso_decoder_deps="zlib"
2795 shorten_decoder_select="bswapdsp"
2796 sipr_decoder_select="lsp"
2797 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2798 snow_encoder_select="dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2799 sonic_decoder_select="golomb rangecoder"
2800 sonic_encoder_select="golomb rangecoder"
2801 sonic_ls_encoder_select="golomb rangecoder"
2802 sp5x_decoder_select="mjpeg_decoder"
2803 speedhq_decoder_select="mpegvideo"
2804 srgc_decoder_deps="zlib"
2805 svq1_decoder_select="hpeldsp"
2806 svq1_encoder_select="hpeldsp me_cmp mpegvideoenc"
2807 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2808 svq3_decoder_suggest="zlib"
2809 tak_decoder_select="audiodsp"
2810 tdsc_decoder_deps="zlib"
2811 tdsc_decoder_select="mjpeg_decoder"
2812 theora_decoder_select="vp3_decoder"
2813 thp_decoder_select="mjpeg_decoder"
2814 tiff_decoder_suggest="zlib lzma"
2815 tiff_encoder_suggest="zlib"
2816 truehd_decoder_select="mlp_parser"
2817 truehd_encoder_select="lpc audio_frame_queue"
2818 truemotion2_decoder_select="bswapdsp"
2819 truespeech_decoder_select="bswapdsp"
2820 tscc_decoder_deps="zlib"
2821 twinvq_decoder_select="mdct lsp sinewin"
2822 txd_decoder_select="texturedsp"
2823 utvideo_decoder_select="bswapdsp llviddsp"
2824 utvideo_encoder_select="bswapdsp huffman llvidencdsp"
2825 vble_decoder_select="llviddsp"
2826 vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 mpegvideo vc1dsp"
2827 vc1image_decoder_select="vc1_decoder"
2828 vorbis_decoder_select="mdct"
2829 vorbis_encoder_select="audio_frame_queue mdct"
2830 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2831 vp4_decoder_select="vp3_decoder"
2832 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2833 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2834 vp6a_decoder_select="vp6_decoder"
2835 vp6f_decoder_select="vp6_decoder"
2836 vp7_decoder_select="h264pred videodsp vp8dsp"
2837 vp8_decoder_select="h264pred videodsp vp8dsp"
2838 vp9_decoder_select="videodsp vp9_parser vp9_superframe_split_bsf"
2839 wcmv_decoder_deps="zlib"
2840 webp_decoder_select="vp8_decoder exif"
2841 wmalossless_decoder_select="llauddsp"
2842 wmapro_decoder_select="mdct sinewin wma_freqs"
2843 wmav1_decoder_select="mdct sinewin wma_freqs"
2844 wmav1_encoder_select="mdct sinewin wma_freqs"
2845 wmav2_decoder_select="mdct sinewin wma_freqs"
2846 wmav2_encoder_select="mdct sinewin wma_freqs"
2847 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2848 wmv1_decoder_select="h263_decoder"
2849 wmv1_encoder_select="h263_encoder"
2850 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2851 wmv2_encoder_select="h263_encoder wmv2dsp"
2852 wmv3_decoder_select="vc1_decoder"
2853 wmv3image_decoder_select="wmv3_decoder"
2854 xma1_decoder_select="wmapro_decoder"
2855 xma2_decoder_select="wmapro_decoder"
2856 zerocodec_decoder_deps="zlib"
2857 zlib_decoder_deps="zlib"
2858 zlib_encoder_deps="zlib"
2859 zmbv_decoder_deps="zlib"
2860 zmbv_encoder_deps="zlib"
2862 # hardware accelerators
2863 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2864 cuda_deps="ffnvcodec"
2865 cuvid_deps="ffnvcodec"
2866 d3d11va_deps="dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2867 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32 user32"
2868 ffnvcodec_deps_any="libdl LoadLibrary"
2869 nvdec_deps="ffnvcodec"
2870 vaapi_x11_deps="xlib"
2871 videotoolbox_hwaccel_deps="videotoolbox pthreads"
2872 videotoolbox_hwaccel_extralibs="-framework QuartzCore"
2873 xvmc_deps="X11_extensions_XvMClib_h"
2875 h263_vaapi_hwaccel_deps="vaapi"
2876 h263_vaapi_hwaccel_select="h263_decoder"
2877 h263_videotoolbox_hwaccel_deps="videotoolbox"
2878 h263_videotoolbox_hwaccel_select="h263_decoder"
2879 h264_d3d11va_hwaccel_deps="d3d11va"
2880 h264_d3d11va_hwaccel_select="h264_decoder"
2881 h264_d3d11va2_hwaccel_deps="d3d11va"
2882 h264_d3d11va2_hwaccel_select="h264_decoder"
2883 h264_dxva2_hwaccel_deps="dxva2"
2884 h264_dxva2_hwaccel_select="h264_decoder"
2885 h264_nvdec_hwaccel_deps="nvdec"
2886 h264_nvdec_hwaccel_select="h264_decoder"
2887 h264_vaapi_hwaccel_deps="vaapi"
2888 h264_vaapi_hwaccel_select="h264_decoder"
2889 h264_vdpau_hwaccel_deps="vdpau"
2890 h264_vdpau_hwaccel_select="h264_decoder"
2891 h264_videotoolbox_hwaccel_deps="videotoolbox"
2892 h264_videotoolbox_hwaccel_select="h264_decoder"
2893 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2894 hevc_d3d11va_hwaccel_select="hevc_decoder"
2895 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2896 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2897 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2898 hevc_dxva2_hwaccel_select="hevc_decoder"
2899 hevc_nvdec_hwaccel_deps="nvdec"
2900 hevc_nvdec_hwaccel_select="hevc_decoder"
2901 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2902 hevc_vaapi_hwaccel_select="hevc_decoder"
2903 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2904 hevc_vdpau_hwaccel_select="hevc_decoder"
2905 hevc_videotoolbox_hwaccel_deps="videotoolbox"
2906 hevc_videotoolbox_hwaccel_select="hevc_decoder"
2907 mjpeg_nvdec_hwaccel_deps="nvdec"
2908 mjpeg_nvdec_hwaccel_select="mjpeg_decoder"
2909 mjpeg_vaapi_hwaccel_deps="vaapi"
2910 mjpeg_vaapi_hwaccel_select="mjpeg_decoder"
2911 mpeg_xvmc_hwaccel_deps="xvmc"
2912 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2913 mpeg1_nvdec_hwaccel_deps="nvdec"
2914 mpeg1_nvdec_hwaccel_select="mpeg1video_decoder"
2915 mpeg1_vdpau_hwaccel_deps="vdpau"
2916 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2917 mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
2918 mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
2919 mpeg1_xvmc_hwaccel_deps="xvmc"
2920 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2921 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2922 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2923 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2924 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2925 mpeg2_dxva2_hwaccel_deps="dxva2"
2926 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2927 mpeg2_nvdec_hwaccel_deps="nvdec"
2928 mpeg2_nvdec_hwaccel_select="mpeg2video_decoder"
2929 mpeg2_vaapi_hwaccel_deps="vaapi"
2930 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2931 mpeg2_vdpau_hwaccel_deps="vdpau"
2932 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2933 mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
2934 mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
2935 mpeg2_xvmc_hwaccel_deps="xvmc"
2936 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2937 mpeg4_nvdec_hwaccel_deps="nvdec"
2938 mpeg4_nvdec_hwaccel_select="mpeg4_decoder"
2939 mpeg4_vaapi_hwaccel_deps="vaapi"
2940 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2941 mpeg4_vdpau_hwaccel_deps="vdpau"
2942 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2943 mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
2944 mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
2945 vc1_d3d11va_hwaccel_deps="d3d11va"
2946 vc1_d3d11va_hwaccel_select="vc1_decoder"
2947 vc1_d3d11va2_hwaccel_deps="d3d11va"
2948 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2949 vc1_dxva2_hwaccel_deps="dxva2"
2950 vc1_dxva2_hwaccel_select="vc1_decoder"
2951 vc1_nvdec_hwaccel_deps="nvdec"
2952 vc1_nvdec_hwaccel_select="vc1_decoder"
2953 vc1_vaapi_hwaccel_deps="vaapi"
2954 vc1_vaapi_hwaccel_select="vc1_decoder"
2955 vc1_vdpau_hwaccel_deps="vdpau"
2956 vc1_vdpau_hwaccel_select="vc1_decoder"
2957 vp8_nvdec_hwaccel_deps="nvdec"
2958 vp8_nvdec_hwaccel_select="vp8_decoder"
2959 vp8_vaapi_hwaccel_deps="vaapi"
2960 vp8_vaapi_hwaccel_select="vp8_decoder"
2961 vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2962 vp9_d3d11va_hwaccel_select="vp9_decoder"
2963 vp9_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2964 vp9_d3d11va2_hwaccel_select="vp9_decoder"
2965 vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
2966 vp9_dxva2_hwaccel_select="vp9_decoder"
2967 vp9_nvdec_hwaccel_deps="nvdec"
2968 vp9_nvdec_hwaccel_select="vp9_decoder"
2969 vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth"
2970 vp9_vaapi_hwaccel_select="vp9_decoder"
2971 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2972 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2973 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2974 wmv3_nvdec_hwaccel_select="vc1_nvdec_hwaccel"
2975 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2976 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2978 # hardware-accelerated codecs
2979 omx_deps="libdl pthreads"
2980 omx_rpi_select="omx"
2985 vaapi_encode_deps="vaapi"
2986 v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
2988 hwupload_cuda_filter_deps="ffnvcodec"
2989 scale_npp_filter_deps="ffnvcodec libnpp"
2990 scale_cuda_filter_deps="ffnvcodec cuda_nvcc"
2991 thumbnail_cuda_filter_deps="ffnvcodec cuda_nvcc"
2992 transpose_npp_filter_deps="ffnvcodec libnpp"
2994 amf_deps_any="libdl LoadLibrary"
2995 nvenc_deps="ffnvcodec"
2996 nvenc_deps_any="libdl LoadLibrary"
2997 nvenc_encoder_deps="nvenc"
2999 h263_v4l2m2m_decoder_deps="v4l2_m2m h263_v4l2_m2m"
3000 h263_v4l2m2m_encoder_deps="v4l2_m2m h263_v4l2_m2m"
3001 h264_amf_encoder_deps="amf"
3002 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
3003 h264_cuvid_decoder_deps="cuvid"
3004 h264_cuvid_decoder_select="h264_mp4toannexb_bsf"
3005 h264_mediacodec_decoder_deps="mediacodec"
3006 h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
3007 h264_mmal_decoder_deps="mmal"
3008 h264_nvenc_encoder_deps="nvenc"
3009 h264_omx_encoder_deps="omx"
3010 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec"
3011 h264_qsv_encoder_select="qsvenc"
3012 h264_rkmpp_decoder_deps="rkmpp"
3013 h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
3014 h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
3015 h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
3016 h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
3017 h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
3018 hevc_amf_encoder_deps="amf"
3019 hevc_cuvid_decoder_deps="cuvid"
3020 hevc_cuvid_decoder_select="hevc_mp4toannexb_bsf"
3021 hevc_mediacodec_decoder_deps="mediacodec"
3022 hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
3023 hevc_nvenc_encoder_deps="nvenc"
3024 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec"
3025 hevc_qsv_encoder_select="hevcparse qsvenc"
3026 hevc_rkmpp_decoder_deps="rkmpp"
3027 hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
3028 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
3029 hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
3030 hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
3031 hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
3032 hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
3033 mjpeg_cuvid_decoder_deps="cuvid"
3034 mjpeg_qsv_encoder_deps="libmfx"
3035 mjpeg_qsv_encoder_select="qsvenc"
3036 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
3037 mjpeg_vaapi_encoder_select="cbs_jpeg jpegtables vaapi_encode"
3038 mpeg1_cuvid_decoder_deps="cuvid"
3039 mpeg1_v4l2m2m_decoder_deps="v4l2_m2m mpeg1_v4l2_m2m"
3040 mpeg2_crystalhd_decoder_select="crystalhd"
3041 mpeg2_cuvid_decoder_deps="cuvid"
3042 mpeg2_mmal_decoder_deps="mmal"
3043 mpeg2_mediacodec_decoder_deps="mediacodec"
3044 mpeg2_qsv_decoder_select="qsvdec mpegvideo_parser"
3045 mpeg2_qsv_encoder_select="qsvenc"
3046 mpeg2_vaapi_encoder_select="cbs_mpeg2 vaapi_encode"
3047 mpeg2_v4l2m2m_decoder_deps="v4l2_m2m mpeg2_v4l2_m2m"
3048 mpeg4_crystalhd_decoder_select="crystalhd"
3049 mpeg4_cuvid_decoder_deps="cuvid"
3050 mpeg4_mediacodec_decoder_deps="mediacodec"
3051 mpeg4_mmal_decoder_deps="mmal"
3052 mpeg4_omx_encoder_deps="omx"
3053 mpeg4_v4l2m2m_decoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
3054 mpeg4_v4l2m2m_encoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
3055 msmpeg4_crystalhd_decoder_select="crystalhd"
3056 nvenc_h264_encoder_select="h264_nvenc_encoder"
3057 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
3058 vc1_crystalhd_decoder_select="crystalhd"
3059 vc1_cuvid_decoder_deps="cuvid"
3060 vc1_mmal_decoder_deps="mmal"
3061 vc1_qsv_decoder_select="qsvdec vc1_parser"
3062 vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m"
3063 vp8_cuvid_decoder_deps="cuvid"
3064 vp8_mediacodec_decoder_deps="mediacodec"
3065 vp8_qsv_decoder_select="qsvdec vp8_parser"
3066 vp8_rkmpp_decoder_deps="rkmpp"
3067 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
3068 vp8_vaapi_encoder_select="vaapi_encode"
3069 vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m"
3070 vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"
3071 vp9_cuvid_decoder_deps="cuvid"
3072 vp9_mediacodec_decoder_deps="mediacodec"
3073 vp9_rkmpp_decoder_deps="rkmpp"
3074 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
3075 vp9_vaapi_encoder_select="vaapi_encode"
3076 vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m"
3077 wmv3_crystalhd_decoder_select="crystalhd"
3080 aac_parser_select="adts_header"
3081 av1_parser_select="cbs_av1"
3082 h264_parser_select="golomb h264dsp h264parse"
3083 hevc_parser_select="hevcparse"
3084 mpegaudio_parser_select="mpegaudioheader"
3085 mpegvideo_parser_select="mpegvideo"
3086 mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
3087 vc1_parser_select="vc1dsp"
3090 aac_adtstoasc_bsf_select="adts_header"
3091 av1_frame_split_bsf_select="cbs_av1"
3092 av1_metadata_bsf_select="cbs_av1"
3093 eac3_core_bsf_select="ac3_parser"
3094 filter_units_bsf_select="cbs"
3095 h264_metadata_bsf_deps="const_nan"
3096 h264_metadata_bsf_select="cbs_h264"
3097 h264_redundant_pps_bsf_select="cbs_h264"
3098 hevc_metadata_bsf_select="cbs_h265"
3099 mjpeg2jpeg_bsf_select="jpegtables"
3100 mpeg2_metadata_bsf_select="cbs_mpeg2"
3101 trace_headers_bsf_select="cbs"
3102 vp9_metadata_bsf_select="cbs_vp9"
3104 # external libraries
3105 aac_at_decoder_deps="audiotoolbox"
3106 aac_at_decoder_select="aac_adtstoasc_bsf"
3107 ac3_at_decoder_deps="audiotoolbox"
3108 ac3_at_decoder_select="ac3_parser"
3109 adpcm_ima_qt_at_decoder_deps="audiotoolbox"
3110 alac_at_decoder_deps="audiotoolbox"
3111 amr_nb_at_decoder_deps="audiotoolbox"
3112 avisynth_deps_any="libdl LoadLibrary"
3113 avisynth_demuxer_deps="avisynth"
3114 avisynth_demuxer_select="riffdec"
3115 eac3_at_decoder_deps="audiotoolbox"
3116 eac3_at_decoder_select="ac3_parser"
3117 gsm_ms_at_decoder_deps="audiotoolbox"
3118 ilbc_at_decoder_deps="audiotoolbox"
3119 mp1_at_decoder_deps="audiotoolbox"
3120 mp2_at_decoder_deps="audiotoolbox"
3121 mp3_at_decoder_deps="audiotoolbox"
3122 mp1_at_decoder_select="mpegaudioheader"
3123 mp2_at_decoder_select="mpegaudioheader"
3124 mp3_at_decoder_select="mpegaudioheader"
3125 pcm_alaw_at_decoder_deps="audiotoolbox"
3126 pcm_mulaw_at_decoder_deps="audiotoolbox"
3127 qdmc_at_decoder_deps="audiotoolbox"
3128 qdm2_at_decoder_deps="audiotoolbox"
3129 aac_at_encoder_deps="audiotoolbox"
3130 aac_at_encoder_select="audio_frame_queue"
3131 alac_at_encoder_deps="audiotoolbox"
3132 alac_at_encoder_select="audio_frame_queue"
3133 ilbc_at_encoder_deps="audiotoolbox"
3134 ilbc_at_encoder_select="audio_frame_queue"
3135 pcm_alaw_at_encoder_deps="audiotoolbox"
3136 pcm_alaw_at_encoder_select="audio_frame_queue"
3137 pcm_mulaw_at_encoder_deps="audiotoolbox"
3138 pcm_mulaw_at_encoder_select="audio_frame_queue"
3139 chromaprint_muxer_deps="chromaprint"
3140 h264_videotoolbox_encoder_deps="pthreads"
3141 h264_videotoolbox_encoder_select="videotoolbox_encoder"
3142 hevc_videotoolbox_encoder_deps="pthreads"
3143 hevc_videotoolbox_encoder_select="videotoolbox_encoder"
3144 libaom_av1_decoder_deps="libaom"
3145 libaom_av1_encoder_deps="libaom"
3146 libaom_av1_encoder_select="extract_extradata_bsf"
3147 libaribb24_decoder_deps="libaribb24"
3148 libcelt_decoder_deps="libcelt"
3149 libcodec2_decoder_deps="libcodec2"
3150 libcodec2_encoder_deps="libcodec2"
3151 libdav1d_decoder_deps="libdav1d"
3152 libdavs2_decoder_deps="libdavs2"
3153 libfdk_aac_decoder_deps="libfdk_aac"
3154 libfdk_aac_encoder_deps="libfdk_aac"
3155 libfdk_aac_encoder_select="audio_frame_queue"
3156 libgme_demuxer_deps="libgme"
3157 libgsm_decoder_deps="libgsm"
3158 libgsm_encoder_deps="libgsm"
3159 libgsm_ms_decoder_deps="libgsm"
3160 libgsm_ms_encoder_deps="libgsm"
3161 libilbc_decoder_deps="libilbc"
3162 libilbc_encoder_deps="libilbc"
3163 libkvazaar_encoder_deps="libkvazaar"
3164 libmodplug_demuxer_deps="libmodplug"
3165 libmp3lame_encoder_deps="libmp3lame"
3166 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
3167 libopencore_amrnb_decoder_deps="libopencore_amrnb"
3168 libopencore_amrnb_encoder_deps="libopencore_amrnb"
3169 libopencore_amrnb_encoder_select="audio_frame_queue"
3170 libopencore_amrwb_decoder_deps="libopencore_amrwb"
3171 libopenh264_decoder_deps="libopenh264"
3172 libopenh264_decoder_select="h264_mp4toannexb_bsf"
3173 libopenh264_encoder_deps="libopenh264"
3174 libopenjpeg_decoder_deps="libopenjpeg"
3175 libopenjpeg_encoder_deps="libopenjpeg"
3176 libopenmpt_demuxer_deps="libopenmpt"
3177 libopus_decoder_deps="libopus"
3178 libopus_encoder_deps="libopus"
3179 libopus_encoder_select="audio_frame_queue"
3180 librsvg_decoder_deps="librsvg"
3181 libshine_encoder_deps="libshine"
3182 libshine_encoder_select="audio_frame_queue"
3183 libspeex_decoder_deps="libspeex"
3184 libspeex_encoder_deps="libspeex"
3185 libspeex_encoder_select="audio_frame_queue"
3186 libtheora_encoder_deps="libtheora"
3187 libtwolame_encoder_deps="libtwolame"
3188 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
3189 libvorbis_decoder_deps="libvorbis"
3190 libvorbis_encoder_deps="libvorbis libvorbisenc"
3191 libvorbis_encoder_select="audio_frame_queue"
3192 libvpx_vp8_decoder_deps="libvpx"
3193 libvpx_vp8_encoder_deps="libvpx"
3194 libvpx_vp9_decoder_deps="libvpx"
3195 libvpx_vp9_encoder_deps="libvpx"
3196 libwavpack_encoder_deps="libwavpack"
3197 libwavpack_encoder_select="audio_frame_queue"
3198 libwebp_encoder_deps="libwebp"
3199 libwebp_anim_encoder_deps="libwebp"
3200 libx262_encoder_deps="libx262"
3201 libx264_encoder_deps="libx264"
3202 libx264rgb_encoder_deps="libx264 x264_csp_bgr"
3203 libx264rgb_encoder_select="libx264_encoder"
3204 libx265_encoder_deps="libx265"
3205 libxavs_encoder_deps="libxavs"
3206 libxavs2_encoder_deps="libxavs2"
3207 libxvid_encoder_deps="libxvid"
3208 libzvbi_teletext_decoder_deps="libzvbi"
3209 vapoursynth_demuxer_deps="vapoursynth"
3210 videotoolbox_suggest="coreservices"
3211 videotoolbox_deps="corefoundation coremedia corevideo"
3212 videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
3215 ac3_demuxer_select="ac3_parser"
3216 aiff_muxer_select="iso_media"
3217 asf_demuxer_select="riffdec"
3218 asf_o_demuxer_select="riffdec"
3219 asf_muxer_select="riffenc"
3220 asf_stream_muxer_select="asf_muxer"
3221 avi_demuxer_select="iso_media riffdec exif"
3222 avi_muxer_select="riffenc"
3223 caf_demuxer_select="iso_media riffdec"
3224 caf_muxer_select="iso_media"
3225 dash_muxer_select="mp4_muxer"
3226 dash_demuxer_deps="libxml2"
3227 dirac_demuxer_select="dirac_parser"
3228 dts_demuxer_select="dca_parser"
3229 dtshd_demuxer_select="dca_parser"
3230 dv_demuxer_select="dvprofile"
3231 dv_muxer_select="dvprofile"
3232 dxa_demuxer_select="riffdec"
3233 eac3_demuxer_select="ac3_parser"
3234 f4v_muxer_select="mov_muxer"
3235 fifo_muxer_deps="threads"
3236 flac_demuxer_select="flac_parser"
3237 hds_muxer_select="flv_muxer"
3238 hls_muxer_select="mpegts_muxer"
3239 hls_muxer_suggest="gcrypt openssl"
3240 image2_alias_pix_demuxer_select="image2_demuxer"
3241 image2_brender_pix_demuxer_select="image2_demuxer"
3242 ipod_muxer_select="mov_muxer"
3243 ismv_muxer_select="mov_muxer"
3244 ivf_muxer_select="av1_metadata_bsf vp9_superframe_bsf"
3245 matroska_audio_muxer_select="matroska_muxer"
3246 matroska_demuxer_select="iso_media riffdec"
3247 matroska_demuxer_suggest="bzlib lzo zlib"
3248 matroska_muxer_select="iso_media riffenc"
3249 mmf_muxer_select="riffenc"
3250 mov_demuxer_select="iso_media riffdec"
3251 mov_demuxer_suggest="zlib"
3252 mov_muxer_select="iso_media riffenc rtpenc_chain"
3253 mp3_demuxer_select="mpegaudio_parser"
3254 mp3_muxer_select="mpegaudioheader"
3255 mp4_muxer_select="mov_muxer"
3256 mpegts_demuxer_select="iso_media"
3257 mpegts_muxer_select="adts_muxer latm_muxer"
3258 mpegtsraw_demuxer_select="mpegts_demuxer"
3259 mxf_d10_muxer_select="mxf_muxer"
3260 mxf_opatom_muxer_select="mxf_muxer"
3261 nut_muxer_select="riffenc"
3262 nuv_demuxer_select="riffdec"
3263 oga_muxer_select="ogg_muxer"
3264 ogg_demuxer_select="dirac_parse"
3265 ogv_muxer_select="ogg_muxer"
3266 opus_muxer_select="ogg_muxer"
3267 psp_muxer_select="mov_muxer"
3268 rtp_demuxer_select="sdp_demuxer"
3269 rtp_muxer_select="golomb"
3270 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
3271 rtsp_demuxer_select="http_protocol rtpdec"
3272 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
3273 sap_demuxer_select="sdp_demuxer"
3274 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
3275 sdp_demuxer_select="rtpdec"
3276 smoothstreaming_muxer_select="ismv_muxer"
3277 spdif_demuxer_select="adts_header"
3278 spdif_muxer_select="adts_header"
3279 spx_muxer_select="ogg_muxer"
3280 swf_demuxer_suggest="zlib"
3281 tak_demuxer_select="tak_parser"
3282 tg2_muxer_select="mov_muxer"
3283 tgp_muxer_select="mov_muxer"
3284 vobsub_demuxer_select="mpegps_demuxer"
3285 w64_demuxer_select="wav_demuxer"
3286 w64_muxer_select="wav_muxer"
3287 wav_demuxer_select="riffdec"
3288 wav_muxer_select="riffenc"
3289 webm_muxer_select="iso_media riffenc"
3290 webm_dash_manifest_demuxer_select="matroska_demuxer"
3291 wtv_demuxer_select="mpegts_demuxer riffdec"
3292 wtv_muxer_select="mpegts_muxer riffenc"
3293 xmv_demuxer_select="riffdec"
3294 xwma_demuxer_select="riffdec"
3297 android_camera_indev_deps="android camera2ndk mediandk pthreads"
3298 android_camera_indev_extralibs="-landroid -lcamera2ndk -lmediandk"
3299 alsa_indev_deps="alsa"
3300 alsa_outdev_deps="alsa"
3301 avfoundation_indev_deps="avfoundation corevideo coremedia pthreads"
3302 avfoundation_indev_suggest="coregraphics applicationservices"
3303 avfoundation_indev_extralibs="-framework Foundation"
3304 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
3305 caca_outdev_deps="libcaca"
3306 decklink_deps_any="libdl LoadLibrary"
3307 decklink_indev_deps="decklink threads"
3308 decklink_indev_extralibs="-lstdc++"
3309 decklink_outdev_deps="decklink threads"
3310 decklink_outdev_suggest="libklvanc"
3311 decklink_outdev_extralibs="-lstdc++"
3312 dshow_indev_deps="IBaseFilter"
3313 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
3314 fbdev_indev_deps="linux_fb_h"
3315 fbdev_outdev_deps="linux_fb_h"
3316 gdigrab_indev_deps="CreateDIBSection"
3317 gdigrab_indev_extralibs="-lgdi32"
3318 gdigrab_indev_select="bmp_decoder"
3319 iec61883_indev_deps="libiec61883"
3320 jack_indev_deps="libjack"
3321 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
3322 kmsgrab_indev_deps="libdrm"
3323 lavfi_indev_deps="avfilter"
3324 libcdio_indev_deps="libcdio"
3325 libdc1394_indev_deps="libdc1394"
3326 openal_indev_deps="openal"
3327 opengl_outdev_deps="opengl"
3328 opengl_outdev_suggest="sdl2"
3329 oss_indev_deps_any="sys_soundcard_h"
3330 oss_outdev_deps_any="sys_soundcard_h"
3331 pulse_indev_deps="libpulse"
3332 pulse_outdev_deps="libpulse"
3333 sdl2_outdev_deps="sdl2"
3334 sndio_indev_deps="sndio"
3335 sndio_outdev_deps="sndio"
3336 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
3337 v4l2_indev_suggest="libv4l2"
3338 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
3339 v4l2_outdev_suggest="libv4l2"
3340 vfwcap_indev_deps="vfw32 vfwcap_defines"
3341 xcbgrab_indev_deps="libxcb"
3342 xcbgrab_indev_suggest="libxcb_shm libxcb_shape libxcb_xfixes"
3343 xv_outdev_deps="xlib"
3346 async_protocol_deps="threads"
3347 bluray_protocol_deps="libbluray"
3348 ffrtmpcrypt_protocol_conflict="librtmp_protocol"
3349 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl mbedtls"
3350 ffrtmpcrypt_protocol_select="tcp_protocol"
3351 ffrtmphttp_protocol_conflict="librtmp_protocol"
3352 ffrtmphttp_protocol_select="http_protocol"
3353 ftp_protocol_select="tcp_protocol"
3354 gopher_protocol_select="network"
3355 http_protocol_select="tcp_protocol"
3356 http_protocol_suggest="zlib"
3357 httpproxy_protocol_select="tcp_protocol"
3358 httpproxy_protocol_suggest="zlib"
3359 https_protocol_select="tls_protocol"
3360 https_protocol_suggest="zlib"
3361 icecast_protocol_select="http_protocol"
3362 mmsh_protocol_select="http_protocol"
3363 mmst_protocol_select="network"
3364 rtmp_protocol_conflict="librtmp_protocol"
3365 rtmp_protocol_select="tcp_protocol"
3366 rtmp_protocol_suggest="zlib"
3367 rtmpe_protocol_select="ffrtmpcrypt_protocol"
3368 rtmpe_protocol_suggest="zlib"
3369 rtmps_protocol_conflict="librtmp_protocol"
3370 rtmps_protocol_select="tls_protocol"
3371 rtmps_protocol_suggest="zlib"
3372 rtmpt_protocol_select="ffrtmphttp_protocol"
3373 rtmpt_protocol_suggest="zlib"
3374 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
3375 rtmpte_protocol_suggest="zlib"
3376 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
3377 rtmpts_protocol_suggest="zlib"
3378 rtp_protocol_select="udp_protocol"
3379 schannel_conflict="openssl gnutls libtls mbedtls"
3380 sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
3381 sctp_protocol_select="network"
3382 securetransport_conflict="openssl gnutls libtls mbedtls"
3383 srtp_protocol_select="rtp_protocol srtp"
3384 tcp_protocol_select="network"
3385 tls_protocol_deps_any="gnutls openssl schannel securetransport libtls mbedtls"
3386 tls_protocol_select="tcp_protocol"
3387 udp_protocol_select="network"
3388 udplite_protocol_select="network"
3389 unix_protocol_deps="sys_un_h"
3390 unix_protocol_select="network"
3392 # external library protocols
3393 librtmp_protocol_deps="librtmp"
3394 librtmpe_protocol_deps="librtmp"
3395 librtmps_protocol_deps="librtmp"
3396 librtmpt_protocol_deps="librtmp"
3397 librtmpte_protocol_deps="librtmp"
3398 libsmbclient_protocol_deps="libsmbclient gplv3"
3399 libsrt_protocol_deps="libsrt"
3400 libsrt_protocol_select="network"
3401 libssh_protocol_deps="libssh"
3402 libtls_conflict="openssl gnutls mbedtls"
3405 afftdn_filter_deps="avcodec"
3406 afftdn_filter_select="fft"
3407 afftfilt_filter_deps="avcodec"
3408 afftfilt_filter_select="fft"
3409 afir_filter_deps="avcodec"
3410 afir_filter_select="fft"
3411 amovie_filter_deps="avcodec avformat"
3412 aresample_filter_deps="swresample"
3413 asr_filter_deps="pocketsphinx"
3414 ass_filter_deps="libass"
3415 atempo_filter_deps="avcodec"
3416 atempo_filter_select="rdft"
3417 avgblur_opencl_filter_deps="opencl"
3418 azmq_filter_deps="libzmq"
3419 blackframe_filter_deps="gpl"
3420 bm3d_filter_deps="avcodec"
3421 bm3d_filter_select="dct"
3422 boxblur_filter_deps="gpl"
3423 boxblur_opencl_filter_deps="opencl gpl"
3424 bs2b_filter_deps="libbs2b"
3425 colorkey_opencl_filter_deps="opencl"
3426 colormatrix_filter_deps="gpl"
3427 convolution_opencl_filter_deps="opencl"
3428 convolve_filter_deps="avcodec"
3429 convolve_filter_select="fft"
3430 coreimage_filter_deps="coreimage appkit"
3431 coreimage_filter_extralibs="-framework OpenGL"
3432 coreimagesrc_filter_deps="coreimage appkit"
3433 coreimagesrc_filter_extralibs="-framework OpenGL"
3434 cover_rect_filter_deps="avcodec avformat gpl"
3435 cropdetect_filter_deps="gpl"
3436 deconvolve_filter_deps="avcodec"
3437 deconvolve_filter_select="fft"
3438 deinterlace_qsv_filter_deps="libmfx"
3439 deinterlace_vaapi_filter_deps="vaapi"
3440 delogo_filter_deps="gpl"
3441 denoise_vaapi_filter_deps="vaapi"
3442 derain_filter_select="dnn"
3443 deshake_filter_select="pixelutils"
3444 dilation_opencl_filter_deps="opencl"
3445 drawtext_filter_deps="libfreetype"
3446 drawtext_filter_suggest="libfontconfig libfribidi"
3447 elbg_filter_deps="avcodec"
3448 eq_filter_deps="gpl"
3449 erosion_opencl_filter_deps="opencl"
3450 fftfilt_filter_deps="avcodec"
3451 fftfilt_filter_select="rdft"
3452 fftdnoiz_filter_deps="avcodec"
3453 fftdnoiz_filter_select="fft"
3454 find_rect_filter_deps="avcodec avformat gpl"
3455 firequalizer_filter_deps="avcodec"
3456 firequalizer_filter_select="rdft"
3457 flite_filter_deps="libflite"
3458 framerate_filter_select="scene_sad"
3459 freezedetect_filter_select="scene_sad"
3460 frei0r_filter_deps="frei0r libdl"
3461 frei0r_src_filter_deps="frei0r libdl"
3462 fspp_filter_deps="gpl"
3463 geq_filter_deps="gpl"
3464 histeq_filter_deps="gpl"
3465 hqdn3d_filter_deps="gpl"
3466 interlace_filter_deps="gpl"
3467 kerndeint_filter_deps="gpl"
3468 ladspa_filter_deps="ladspa libdl"
3469 lensfun_filter_deps="liblensfun version3"
3470 lv2_filter_deps="lv2"
3471 mcdeint_filter_deps="avcodec gpl"
3472 movie_filter_deps="avcodec avformat"
3473 mpdecimate_filter_deps="gpl"
3474 mpdecimate_filter_select="pixelutils"
3475 minterpolate_filter_select="scene_sad"
3476 mptestsrc_filter_deps="gpl"
3477 negate_filter_deps="lut_filter"
3478 nlmeans_opencl_filter_deps="opencl"
3479 nnedi_filter_deps="gpl"
3480 ocr_filter_deps="libtesseract"
3481 ocv_filter_deps="libopencv"
3482 openclsrc_filter_deps="opencl"
3483 overlay_opencl_filter_deps="opencl"
3484 overlay_qsv_filter_deps="libmfx"
3485 overlay_qsv_filter_select="qsvvpp"
3486 owdenoise_filter_deps="gpl"
3487 pan_filter_deps="swresample"
3488 perspective_filter_deps="gpl"
3489 phase_filter_deps="gpl"
3490 pp7_filter_deps="gpl"
3491 pp_filter_deps="gpl postproc"
3492 prewitt_opencl_filter_deps="opencl"
3493 procamp_vaapi_filter_deps="vaapi"
3494 program_opencl_filter_deps="opencl"
3495 pullup_filter_deps="gpl"
3496 removelogo_filter_deps="avcodec avformat swscale"
3497 repeatfields_filter_deps="gpl"
3498 resample_filter_deps="avresample"
3499 roberts_opencl_filter_deps="opencl"
3500 rubberband_filter_deps="librubberband"
3501 sab_filter_deps="gpl swscale"
3502 scale2ref_filter_deps="swscale"
3503 scale_filter_deps="swscale"
3504 scale_qsv_filter_deps="libmfx"
3505 select_filter_select="scene_sad"
3506 sharpness_vaapi_filter_deps="vaapi"
3507 showcqt_filter_deps="avcodec avformat swscale"
3508 showcqt_filter_suggest="libfontconfig libfreetype"
3509 showcqt_filter_select="fft"
3510 showfreqs_filter_deps="avcodec"
3511 showfreqs_filter_select="fft"
3512 showspectrum_filter_deps="avcodec"
3513 showspectrum_filter_select="fft"
3514 showspectrumpic_filter_deps="avcodec"
3515 showspectrumpic_filter_select="fft"
3516 signature_filter_deps="gpl avcodec avformat"
3517 smartblur_filter_deps="gpl swscale"
3518 sobel_opencl_filter_deps="opencl"
3519 sofalizer_filter_deps="libmysofa avcodec"
3520 sofalizer_filter_select="fft"
3521 spectrumsynth_filter_deps="avcodec"
3522 spectrumsynth_filter_select="fft"
3523 spp_filter_deps="gpl avcodec"
3524 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
3525 sr_filter_deps="avformat swscale"
3526 sr_filter_select="dnn"
3527 stereo3d_filter_deps="gpl"
3528 subtitles_filter_deps="avformat avcodec libass"
3529 super2xsai_filter_deps="gpl"
3530 pixfmts_super2xsai_test_deps="super2xsai_filter"
3531 tinterlace_filter_deps="gpl"
3532 tinterlace_merge_test_deps="tinterlace_filter"
3533 tinterlace_pad_test_deps="tinterlace_filter"
3534 tonemap_filter_deps="const_nan"
3535 tonemap_opencl_filter_deps="opencl const_nan"
3536 transpose_opencl_filter_deps="opencl"
3537 transpose_vaapi_filter_deps="vaapi VAProcPipelineCaps_rotation_flags"
3538 unsharp_opencl_filter_deps="opencl"
3539 uspp_filter_deps="gpl avcodec"
3540 vaguedenoiser_filter_deps="gpl"
3541 vidstabdetect_filter_deps="libvidstab"
3542 vidstabtransform_filter_deps="libvidstab"
3543 libvmaf_filter_deps="libvmaf pthreads"
3544 zmq_filter_deps="libzmq"
3545 zoompan_filter_deps="swscale"
3546 zscale_filter_deps="libzimg const_nan"
3547 scale_vaapi_filter_deps="vaapi"
3548 vpp_qsv_filter_deps="libmfx"
3549 vpp_qsv_filter_select="qsvvpp"
3550 yadif_cuda_filter_deps="ffnvcodec cuda_nvcc"
3553 avio_dir_cmd_deps="avformat avutil"
3554 avio_reading_deps="avformat avcodec avutil"
3555 decode_audio_example_deps="avcodec avutil"
3556 decode_video_example_deps="avcodec avutil"
3557 demuxing_decoding_example_deps="avcodec avformat avutil"
3558 encode_audio_example_deps="avcodec avutil"
3559 encode_video_example_deps="avcodec avutil"
3560 extract_mvs_example_deps="avcodec avformat avutil"
3561 filter_audio_example_deps="avfilter avutil"
3562 filtering_audio_example_deps="avfilter avcodec avformat avutil"
3563 filtering_video_example_deps="avfilter avcodec avformat avutil"
3564 http_multiclient_example_deps="avformat avutil fork"
3565 hw_decode_example_deps="avcodec avformat avutil"
3566 metadata_example_deps="avformat avutil"
3567 muxing_example_deps="avcodec avformat avutil swscale"
3568 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
3569 remuxing_example_deps="avcodec avformat avutil"
3570 resampling_audio_example_deps="avutil swresample"
3571 scaling_video_example_deps="avutil swscale"
3572 transcode_aac_example_deps="avcodec avformat swresample"
3573 transcoding_example_deps="avfilter avcodec avformat avutil"
3574 vaapi_encode_example_deps="avcodec avutil h264_vaapi_encoder"
3575 vaapi_transcode_example_deps="avcodec avformat avutil h264_vaapi_encoder"
3578 cpu_init_extralibs="pthreads_extralibs"
3579 cws2fws_extralibs="zlib_extralibs"
3581 # libraries, in any order
3582 avcodec_deps="avutil"
3583 avcodec_suggest="libm"
3584 avcodec_select="null_bsf"
3585 avdevice_deps="avformat avcodec avutil"
3586 avdevice_suggest="libm"
3587 avfilter_deps="avutil"
3588 avfilter_suggest="libm"
3589 avformat_deps="avcodec avutil"
3590 avformat_suggest="libm network zlib"
3591 avresample_deps="avutil"
3592 avresample_suggest="libm"
3593 avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl user32 vaapi videotoolbox corefoundation corevideo coremedia bcrypt"
3594 postproc_deps="avutil gpl"
3595 postproc_suggest="libm"
3596 swresample_deps="avutil"
3597 swresample_suggest="libm libsoxr"
3598 swscale_deps="avutil"
3599 swscale_suggest="libm"
3601 avcodec_extralibs="pthreads_extralibs iconv_extralibs dxva2_extralibs"
3602 avfilter_extralibs="pthreads_extralibs"
3603 avutil_extralibs="d3d11va_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs"
3606 ffmpeg_deps="avcodec avfilter avformat"
3607 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
3608 hflip_filter null_filter
3609 transpose_filter trim_filter vflip_filter"
3610 ffmpeg_suggest="ole32 psapi shell32"
3611 ffplay_deps="avcodec avformat swscale swresample sdl2"
3612 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
3613 ffplay_suggest="shell32"
3614 ffprobe_deps="avcodec avformat"
3615 ffprobe_suggest="shell32"
3618 podpages_deps="perl"
3619 manpages_deps="perl pod2man"
3620 htmlpages_deps="perl"
3621 htmlpages_deps_any="makeinfo_html texi2html"
3622 txtpages_deps="perl makeinfo"
3623 doc_deps_any="manpages htmlpages podpages txtpages"
3625 # default parameters
3627 logfile="ffbuild/config.log"
3629 # installation paths
3630 prefix_default="/usr/local"
3631 bindir_default='${prefix}/bin'
3632 datadir_default='${prefix}/share/ffmpeg'
3633 docdir_default='${prefix}/share/doc/ffmpeg'
3634 incdir_default='${prefix}/include'
3635 libdir_default='${prefix}/lib'
3636 mandir_default='${prefix}/share/man'
3642 host_cc_default="gcc"
3643 doxygen_default="doxygen"
3645 ln_s_default="ln -s -f"
3647 pkg_config_default=pkg-config
3648 ranlib_default="ranlib"
3649 strip_default="strip"
3650 version_script='--version-script'
3652 x86asmexe_default="nasm"
3653 windres_default="windres"
3655 nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
3659 target_os_default=$(tolower $(uname -s))
3660 host_os=$target_os_default
3663 if test "$target_os_default" = aix; then
3664 arch_default=$(uname -p)
3665 strip_default="strip -X32_64"
3666 nm_default="nm -g -X32_64"
3668 arch_default=$(uname -m)
3673 # configurable options
3674 enable $PROGRAM_LIST
3675 enable $DOCUMENT_LIST
3676 enable $EXAMPLE_LIST
3677 enable $(filter_out avresample $LIBRARY_LIST)
3683 enable faan faandct faanidct
3684 enable optimizations
3685 enable runtime_cpudetect
3686 enable safe_bitstream_reader
3688 enable swscale_alpha
3689 enable valgrind_backtrace
3691 sws_max_filter_size_default=256
3692 set_default sws_max_filter_size
3694 # internal components are enabled by default
3695 enable $EXTRALIBS_LIST
3697 # Avoid external, non-system, libraries getting enabled by dependency resolution
3698 disable $EXTERNAL_LIBRARY_LIST $HWACCEL_LIBRARY_LIST
3701 SHFLAGS='-shared -Wl,-soname,$$(@F)'
3704 FULLNAME='$(NAME)$(BUILDSUF)'
3705 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
3708 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
3709 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
3710 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
3711 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
3712 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
3713 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
3714 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
3741 host_extralibs='-lm'
3742 host_cflags_filter=echo
3743 host_ldflags_filter=echo
3745 target_path='$(CURDIR)'
3747 # since the object filename is not given with the -MM flag, the compiler
3748 # is only able to print the basename, and we must add the path ourselves
3749 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
3755 if test -f configure; then
3757 elif test -f src/configure; then
3760 source_path=$(cd $(dirname "$0"); pwd)
3761 case "$source_path" in
3762 *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
3764 test -e "$source_path/config.h" &&
3765 die "Out of tree builds are impossible with config.h in source dir."
3772 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3775 find_things_extern(){
3778 file=$source_path/$3
3780 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file"
3783 find_filters_extern(){
3784 file=$source_path/$1
3785 sed -n 's/^extern AVFilter ff_[avfsinkrc]\{2,5\}_\([[:alnum:]_]\{1,\}\);/\1_filter/p' $file
3788 FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c)
3789 OUTDEV_LIST=$(find_things_extern muxer AVOutputFormat libavdevice/alldevices.c outdev)
3790 INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev)
3791 MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c)
3792 DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c)
3793 ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c)
3794 DECODER_LIST=$(find_things_extern decoder AVCodec libavcodec/allcodecs.c)
3799 PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parsers.c)
3800 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
3801 HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h)
3802 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
3804 AVCODEC_COMPONENTS_LIST="
3812 AVDEVICE_COMPONENTS_LIST="
3817 AVFILTER_COMPONENTS_LIST="
3821 AVFORMAT_COMPONENTS_LIST="
3828 $AVCODEC_COMPONENTS_LIST
3829 $AVDEVICE_COMPONENTS_LIST
3830 $AVFILTER_COMPONENTS_LIST
3831 $AVFORMAT_COMPONENTS_LIST
3834 for n in $COMPONENT_LIST; do
3835 v=$(toupper ${n%s})_LIST
3837 eval ${n}_if_any="\$$v"
3840 enable $ARCH_EXT_LIST
3843 echo "Unknown option \"$1\"."
3844 echo "See $0 --help for available options."
3848 print_in_columns() {
3849 tr ' ' '\n' | sort | tr '\r\n' ' ' | awk -v col_width=24 -v width="$ncols" '
3851 num_cols = width > col_width ? int(width / col_width) : 1;
3852 num_rows = int((NF + num_cols-1) / num_cols);
3854 for (y = 1; y <= num_rows; y++) {
3856 for (x = 1; x <= num_cols; x++) {
3858 line = sprintf("%s%-" col_width "s", line, $i);
3862 print line; line = "";
3870 echo $* | sed s/$suffix//g | print_in_columns
3882 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3883 echo "prob ${prob:-0.5}"
3891 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3892 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3901 --extra-ldexeflags=*)
3902 add_ldexeflags $optval
3904 --extra-ldsoflags=*)
3905 add_ldsoflags $optval
3907 --extra-ldlibflags=*)
3908 warn "The --extra-ldlibflags option is only provided for compatibility and will be\n"\
3909 "removed in the future. Use --extra-ldsoflags instead."
3910 add_ldsoflags $optval
3913 add_extralibs $optval
3916 disable $INDEV_LIST $OUTDEV_LIST
3919 debuglevel="$optval"
3922 disable $PROGRAM_LIST
3924 --disable-everything)
3925 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3928 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3929 disable $LIBRARY_LIST $PROGRAM_LIST doc
3932 --enable-random|--disable-random)
3933 action=${opt%%-random}
3934 do_random ${action#--} $COMPONENT_LIST
3936 --enable-random=*|--disable-random=*)
3937 action=${opt%%-random=*}
3938 do_random ${action#--} $optval
3943 --enable-*=*|--disable-*=*)
3944 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3945 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3946 eval list=\$$(toupper $thing)_LIST
3947 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3948 list=$(filter "$name" $list)
3949 [ "$list" = "" ] && warn "Option $opt did not match anything"
3950 test $action = enable && warn_if_gets_disabled $list
3953 --enable-yasm|--disable-yasm)
3954 warn "The ${opt} option is only provided for compatibility and will be\n"\
3955 "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
3956 test $opt = --enable-yasm && x86asm=yes || x86asm=no
3959 warn "The --yasmexe option is only provided for compatibility and will be\n"\
3960 "removed in the future. Use --x86asmexe instead."
3963 --enable-?*|--disable-?*)
3964 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3965 if is_in $option $COMPONENT_LIST; then
3966 test $action = disable && action=unset
3967 eval $action \$$(toupper ${option%s})_LIST
3968 elif is_in $option $CMDLINE_SELECT; then
3975 NAME="${opt#--list-}"
3976 is_in $NAME $COMPONENT_LIST || die_unknown $opt
3978 eval show_list $NAME \$$(toupper $NAME)_LIST
3980 --help|-h) show_help
3982 --quiet|-q) quiet=yes
3984 --fatal-warnings) enable fatal_warnings
3987 libfuzzer_path="$optval"
3990 optname="${opt%%=*}"
3991 optname="${optname#--}"
3992 optname=$(echo "$optname" | sed 's/-/_/g')
3993 if is_in $optname $CMDLINE_SET; then
3994 eval $optname='$optval'
3995 elif is_in $optname $CMDLINE_APPEND; then
3996 append $optname "$optval"
4008 if disabled autodetect; then
4010 # Unless iconv is explicitely disabled by the user, we still want to probe
4011 # for the iconv from the libc.
4012 disabled iconv || enable libc_iconv
4014 disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
4015 disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
4017 # Mark specifically enabled, but normally autodetected libraries as requested.
4018 for lib in $AUTODETECT_LIBS; do
4019 enabled $lib && request $lib
4021 #TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
4022 enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
4023 enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
4025 disabled logging && logfile=/dev/null
4027 # command line configuration sanity checks
4029 # we need to build at least one lib type
4030 if ! enabled_any static shared; then
4032 At least one library type must be built.
4033 Specify --enable-static to build the static libraries or --enable-shared to
4034 build the shared libraries as well. To only build the shared libraries specify
4035 --disable-static in addition to --enable-shared.
4040 die_license_disabled() {
4041 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
4044 die_license_disabled_gpl() {
4045 enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
4048 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
4049 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
4051 enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
4052 map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
4054 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4056 if enabled nonfree; then
4057 license="nonfree and unredistributable"
4058 elif enabled gplv3; then
4059 license="GPL version 3 or later"
4060 elif enabled lgplv3; then
4061 license="LGPL version 3 or later"
4062 elif enabled gpl; then
4063 license="GPL version 2 or later"
4065 license="LGPL version 2.1 or later"
4068 enabled_all gnutls openssl &&
4069 die "GnuTLS and OpenSSL must not be enabled at the same time."
4071 enabled_all gnutls mbedtls &&
4072 die "GnuTLS and mbedTLS must not be enabled at the same time."
4074 enabled_all openssl mbedtls &&
4075 die "OpenSSL and mbedTLS must not be enabled at the same time."
4077 # Disable all the library-specific components if the library itself
4078 # is disabled, see AVCODEC_LIST and following _LIST variables.
4080 disable_components(){
4081 disabled ${1} && disable $(
4082 eval components="\$$(toupper ${1})_COMPONENTS"
4083 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
4087 map 'disable_components $v' $LIBRARY_LIST
4089 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
4092 test -n "$valgrind" && toolchain="valgrind-memcheck"
4094 enabled ossfuzz && ! echo $CFLAGS | grep -q -- "-fsanitize=" && ! echo $CFLAGS | grep -q -- "-fcoverage-mapping" &&{
4095 add_cflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
4096 add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
4099 case "$toolchain" in
4101 cc_default="${toolchain%-asan}"
4102 add_cflags -fsanitize=address
4103 add_ldflags -fsanitize=address
4106 cc_default="${toolchain%-msan}"
4107 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
4108 add_ldflags -fsanitize=memory
4111 cc_default="${toolchain%-tsan}"
4112 add_cflags -fsanitize=thread
4113 add_ldflags -fsanitize=thread
4114 case "$toolchain" in
4122 cc_default="${toolchain%-usan}"
4123 add_cflags -fsanitize=undefined
4124 add_ldflags -fsanitize=undefined
4127 target_exec_default="valgrind"
4128 case "$toolchain" in
4130 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"
4133 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"
4138 # Check whether the current MSVC version needs the C99 converter.
4139 # From MSVC 2013 (compiler major version 18) onwards, it does actually
4140 # support enough of C99 to build ffmpeg. Default to the new
4141 # behaviour if the regexp was unable to match anything, since this
4142 # successfully parses the version number of existing supported
4143 # versions that require the converter (MSVC 2010 and 2012).
4144 cl_major_ver=$(cl.exe 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
4145 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
4147 cxx_default="cl.exe"
4149 die "Unsupported MSVC version (2013 or newer required)"
4151 ld_default="$source_path/compat/windows/mslink"
4152 nm_default="dumpbin.exe -symbols"
4153 ar_default="lib.exe"
4156 as_default="armasm64.exe"
4159 as_default="armasm.exe"
4162 target_os_default="win32"
4163 # Use a relative path for TMPDIR. This makes sure all the
4164 # ffconf temp files are written with a relative path, avoiding
4165 # issues with msys/win32 path conversion for MSVC parameters
4166 # such as -Fo<file> or -out:<file>.
4172 nm_default="dumpbin -symbols"
4174 target_os_default="win32"
4178 add_cflags -fprofile-arcs -ftest-coverage
4179 add_ldflags -fprofile-arcs -ftest-coverage
4182 add_cflags -fprofile-arcs -ftest-coverage
4183 add_ldflags --coverage
4186 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
4187 add_cflags -fno-strict-overflow -fstack-protector-all
4188 add_ldflags -Wl,-z,relro -Wl,-z,now
4190 add_ldexeflags -fPIE -pie
4193 die "Unknown toolchain $toolchain"
4197 if test -n "$cross_prefix"; then
4198 test -n "$arch" && test -n "$target_os" ||
4199 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
4200 enable cross_compile
4203 set_default target_os
4204 if test "$target_os" = android; then
4208 ar_default="${cross_prefix}${ar_default}"
4209 cc_default="${cross_prefix}${cc_default}"
4210 cxx_default="${cross_prefix}${cxx_default}"
4211 nm_default="${cross_prefix}${nm_default}"
4212 pkg_config_default="${cross_prefix}${pkg_config_default}"
4213 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
4214 ranlib_default="${cross_prefix}${ranlib_default} -D"
4216 ranlib_default="${cross_prefix}${ranlib_default}"
4218 strip_default="${cross_prefix}${strip_default}"
4219 windres_default="${cross_prefix}${windres_default}"
4221 sysinclude_default="${sysroot}/usr/include"
4223 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
4224 target_exec x86asmexe nvcc
4225 enabled cross_compile || host_cc_default=$cc
4228 pkg_config_fail_message=""
4229 if ! $pkg_config --version >/dev/null 2>&1; then
4230 warn "$pkg_config not found, library detection may fail."
4232 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
4233 pkg_config_fail_message="
4234 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
4237 if test $doxygen != $doxygen_default && \
4238 ! $doxygen --version >/dev/null 2>&1; then
4239 warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
4244 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
4248 EXESUF=$(exesuf $target_os)
4249 HOSTEXESUF=$(exesuf $host_os)
4251 # set temporary file name
4252 : ${TMPDIR:=$TEMPDIR}
4256 if [ -n "$tempprefix" ] ; then
4258 tmpname="$tempprefix.${HOSTNAME}.${UID}"
4262 elif ! test_cmd mktemp -u XXXXXX; then
4263 # simple replacement for missing mktemp
4264 # NOT SAFE FOR GENERAL USE
4266 tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
4272 FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
4273 die "Unable to create temporary directory in $TMPDIR."
4276 tmp="${FFTMPDIR}/test"$2
4277 (set -C; exec > $tmp) 2> /dev/null ||
4278 die "Unable to create temporary file in $FFTMPDIR."
4282 trap 'rm -rf -- "$FFTMPDIR"' EXIT
4288 tmpfile TMPE $EXESUF
4301 # make sure we can execute files in $TMPDIR
4302 cat > $TMPSH 2>> $logfile <<EOF
4305 chmod +x $TMPSH >> $logfile 2>&1
4306 if ! $TMPSH >> $logfile 2>&1; then
4308 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
4309 variable to another directory and make sure that it is not mounted noexec.
4311 die "Sanity test failed."
4317 # Filter out MSVC cl.exe options from cflags that shouldn't
4318 # be passed to gas-preprocessor
4328 -Wno-switch) echo -Wno-switch-enum ;;
4329 -Wno-format-zero-length) ;;
4330 -Wdisabled-optimization) ;;
4331 -Wno-pointer-sign) echo -Wno-other ;;
4337 msvc_common_flags(){
4340 # In addition to specifying certain flags under the compiler
4341 # specific filters, they must be specified here as well or else the
4342 # generic catch all at the bottom will print the original flag.
4347 -fomit-frame-pointer) ;;
4351 -fno-signed-zeros) ;;
4355 -lz) echo zlib.lib ;;
4356 -lx264) echo libx264.lib ;;
4358 -l*) echo ${flag#-l}.lib ;;
4359 -LARGEADDRESSAWARE) echo $flag ;;
4360 -L*) echo -libpath:${flag#-L} ;;
4367 msvc_common_flags "$@"
4370 -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
4372 -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
4373 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
4374 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
4376 -wd4273 -wd4554 -wd4701 -wd4703 ;;
4382 msvc_common_flags "$@"
4385 # Despite what Intel's documentation says -Wall, which is supported
4386 # on Windows, does enable remarks so disable them here.
4387 -Wall) echo $flag -Qdiag-disable:remark ;;
4388 -std=c99) echo -Qstd=c99 ;;
4407 case "${flag#*=}" in
4408 native) echo -xtarget=native ;;
4409 v9|niagara) echo -xarch=sparc ;;
4410 ultrasparc) echo -xarch=sparcvis ;;
4411 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
4412 i586|pentium) echo -xchip=pentium ;;
4413 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
4414 pentium3*|c3-2) echo -xtarget=pentium3 ;;
4415 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
4416 pentium4*) echo -xtarget=pentium4 ;;
4417 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
4418 *-sse3) echo -xarch=sse3 ;;
4419 core2) echo -xarch=ssse3 -xchip=core2 ;;
4420 bonnell) echo -xarch=ssse3 ;;
4421 corei7|nehalem) echo -xtarget=nehalem ;;
4422 westmere) echo -xtarget=westmere ;;
4423 silvermont) echo -xarch=sse4_2 ;;
4424 corei7-avx|sandybridge) echo -xtarget=sandybridge ;;
4425 core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
4427 amdfam10|barcelona) echo -xtarget=barcelona ;;
4428 btver1) echo -xarch=amdsse4a ;;
4429 btver2|bdver*|znver*) echo -xarch=avx ;;
4430 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
4431 k8|opteron|athlon64|athlon-fx)
4432 echo -xarch=sse2a ;;
4433 athlon*) echo -xarch=pentium_proa ;;
4436 -std=c99) echo -xc99 ;;
4437 -fomit-frame-pointer) echo -xregs=frameptr ;;
4438 -fPIC) echo -KPIC -xcode=pic32 ;;
4439 -W*,*) echo $flag ;;
4440 -f*-*|-W*|-mimpure-text) ;;
4452 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
4453 unset _ld_o _ldflags _ld_lib _ld_path
4454 unset _depflags _DEPCMD _DEPFLAGS
4457 if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
4458 true # no-op to avoid reading stdin in following checks
4459 elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
4461 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
4462 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
4463 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4466 elif $_cc -v 2>&1 | grep -qi ^gcc; then
4468 gcc_version=$($_cc --version | head -n1)
4469 gcc_basever=$($_cc -dumpversion)
4470 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
4471 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
4472 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
4473 case $gcc_basever in
4476 *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
4478 if [ "$first" = true ]; then
4479 case $gcc_basever in
4481 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
4486 elif $_cc --version 2>/dev/null | grep -q ^icc; then
4488 _ident=$($_cc --version | head -n1)
4493 _flags_filter=icc_flags
4494 elif $_cc -v 2>&1 | grep -q xlc; then
4496 _ident=$($_cc -qversion 2>/dev/null | head -n1)
4498 _cflags_size='-O5 -qcompact'
4499 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
4500 test -d "$sysroot" || die "No valid sysroot specified."
4502 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
4503 armcc_conf="$PWD/armcc.conf"
4504 $_cc --arm_linux_configure \
4505 --arm_linux_config_file="$armcc_conf" \
4506 --configure_sysroot="$sysroot" \
4507 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
4508 die "Error creating armcc configuration file."
4509 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
4510 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
4511 as_default="${cross_prefix}gcc"
4515 elif $_cc -v 2>&1 | grep -q clang && ! $_cc -? > /dev/null 2>&1; then
4517 _ident=$($_cc --version 2>/dev/null | head -n1)
4518 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4521 elif $_cc -V 2>&1 | grep -q Sun; then
4523 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
4524 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
4525 _DEPFLAGS='-xM1 -xc99'
4528 _cflags_size='-O5 -xspace'
4529 _flags_filter=suncc_flags
4530 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
4532 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4533 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4536 _flags_filter='filter_out -Wdisabled-optimization'
4537 elif $_cc -v 2>&1 | grep -q Open64; then
4539 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4540 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4543 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
4544 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
4546 _ident=$($_cc | head -n1)
4547 # 4509: "This form of conditional instruction is deprecated"
4548 _flags="-nologo -ignore 4509"
4549 _flags_filter=armasm_flags
4550 elif $_cc 2>&1 | grep -q Intel; then
4552 _ident=$($_cc 2>&1 | head -n1)
4553 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
4554 # Not only is O3 broken on 13.x+ but it is slower on all previous
4555 # versions (tested) as well.
4557 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
4558 if $_cc 2>&1 | grep -q Linker; then
4565 _flags_filter=icl_flags
4567 _ld_path='-libpath:'
4568 # -Qdiag-error to make icl error when seeing certain unknown arguments
4569 _flags='-nologo -Qdiag-error:4044,10157'
4570 # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
4571 # with MSVC which enables it by default.
4572 _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
4574 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
4575 # lld can emulate multiple different linkers; in ms link.exe mode,
4576 # the -? parameter gives the help output which contains an identifyable
4577 # string, while it gives an error in other modes.
4579 # The link.exe mode doesn't have a switch for getting the version,
4580 # but we can force it back to gnu mode and get the version from there.
4581 _ident=$($_cc -flavor gnu --version 2>/dev/null)
4583 _flags_filter=msvc_flags
4585 _ld_path='-libpath:'
4586 elif $_cc -nologo- 2>&1 | grep -q Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then
4588 _ident=$($_cc 2>&1 | head -n1 | tr -d '\r')
4589 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
4590 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
4594 if $_cc -nologo- 2>&1 | grep -q Linker; then
4601 _flags_filter=msvc_flags
4603 _ld_path='-libpath:'
4606 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
4608 _ident=$($_cc --version | head -n1)
4612 _flags_filter=cparser_flags
4615 eval ${pfx}_type=\$_type
4616 eval ${pfx}_ident=\$_ident
4620 eval ${1}_C=\${_cc_c-\${${1}_C}}
4621 eval ${1}_E=\${_cc_e-\${${1}_E}}
4622 eval ${1}_O=\${_cc_o-\${${1}_O}}
4624 if [ -n "$_depflags" ]; then
4625 eval ${1}_DEPFLAGS=\$_depflags
4627 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
4628 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
4629 eval DEP${1}FLAGS=\$_flags
4633 probe_cc cc "$cc" "true"
4634 cflags_filter=$_flags_filter
4635 cflags_speed=$_cflags_speed
4636 cflags_size=$_cflags_size
4637 cflags_noopt=$_cflags_noopt
4638 add_cflags $_flags $_cflags
4639 cc_ldflags=$_ldflags
4643 probe_cc hostcc "$host_cc"
4644 host_cflags_filter=$_flags_filter
4645 host_cflags_speed=$_cflags_speed
4646 add_host_cflags $_flags $_cflags
4649 test -n "$cc_type" && enable $cc_type ||
4650 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
4652 : ${as_default:=$cc}
4653 : ${objcc_default:=$cc}
4654 : ${dep_cc_default:=$cc}
4655 : ${ld_default:=$cc}
4656 : ${host_ld_default:=$host_cc}
4657 set_default ar as objcc dep_cc ld ln_s host_ld windres
4660 asflags_filter=$_flags_filter
4661 add_asflags $_flags $_cflags
4664 probe_cc objcc "$objcc"
4665 objcflags_filter=$_flags_filter
4666 add_objcflags $_flags $_cflags
4670 ldflags_filter=$_flags_filter
4671 add_ldflags $_flags $_ldflags
4672 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
4674 LD_LIB=${_ld_lib-$LD_LIB}
4675 LD_PATH=${_ld_path-$LD_PATH}
4677 probe_cc hostld "$host_ld"
4678 host_ldflags_filter=$_flags_filter
4679 add_host_ldflags $_flags $_ldflags
4680 HOSTLD_O=${_ld_o-$HOSTLD_O}
4682 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
4683 probe_cc depcc "$dep_cc"
4684 CCDEP=${_DEPCMD:-$DEPCMD}
4685 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
4689 if $ar 2>&1 | grep -q Microsoft; then
4692 elif $ar 2>&1 | grep -q "\[D\] "; then
4700 add_cflags $extra_cflags
4701 add_cxxflags $extra_cxxflags
4702 add_objcflags $extra_objcflags
4703 add_asflags $extra_cflags
4705 if test -n "$sysroot"; then
4708 add_cppflags --sysroot="$sysroot"
4709 add_ldflags --sysroot="$sysroot"
4714 if test "$cpu" = host; then
4715 enabled cross_compile &&
4716 die "--cpu=host makes no sense when cross-compiling."
4721 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4723 s/.*$1=\\([^ ]*\\).*/\\1/
4728 cpu=$(check_native -march || check_native -mcpu)
4732 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4733 sed -n "/cc1.*-target-cpu /{
4734 s/.*-target-cpu \\([^ ]*\\).*/\\1/
4739 cpu=$(check_native -march)
4743 test "${cpu:-host}" = host &&
4744 die "--cpu=host not supported with compiler $cc"
4747 # Deal with common $arch aliases
4771 "Power Macintosh"|ppc*|powerpc*)
4786 i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
4791 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
4794 # Add processor-specific flags
4795 if enabled aarch64; then
4799 cpuflags="-march=$cpu"
4802 cpuflags="-mcpu=$cpu"
4806 elif enabled alpha; then
4808 cpuflags="-mcpu=$cpu"
4810 elif enabled arm; then
4813 test_cpp_condition stddef.h \
4814 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
4819 if check_arm_arch 4; then echo armv4
4820 elif check_arm_arch 4T; then echo armv4t
4821 elif check_arm_arch 5; then echo armv5
4822 elif check_arm_arch 5E; then echo armv5e
4823 elif check_arm_arch 5T; then echo armv5t
4824 elif check_arm_arch 5TE; then echo armv5te
4825 elif check_arm_arch 5TEJ; then echo armv5te
4826 elif check_arm_arch 6; then echo armv6
4827 elif check_arm_arch 6J; then echo armv6j
4828 elif check_arm_arch 6K; then echo armv6k
4829 elif check_arm_arch 6Z; then echo armv6z
4830 elif check_arm_arch 6KZ; then echo armv6zk
4831 elif check_arm_arch 6ZK; then echo armv6zk
4832 elif check_arm_arch 6T2; then echo armv6t2
4833 elif check_arm_arch 7; then echo armv7
4834 elif check_arm_arch 7A 7_A; then echo armv7-a
4835 elif check_arm_arch 7S; then echo armv7-a
4836 elif check_arm_arch 7R 7_R; then echo armv7-r
4837 elif check_arm_arch 7M 7_M; then echo armv7-m
4838 elif check_arm_arch 7EM 7E_M; then echo armv7-m
4839 elif check_arm_arch 8A 8_A; then echo armv8-a
4843 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
4847 cpuflags="-march=$cpu"
4848 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
4851 cpuflags="-mcpu=$cpu"
4853 cortex-a*) subarch=armv7a ;;
4854 cortex-r*) subarch=armv7r ;;
4855 cortex-m*) enable thumb; subarch=armv7m ;;
4856 arm11*) subarch=armv6 ;;
4857 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
4858 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
4859 *) subarch=$(probe_arm_arch) ;;
4865 armv5t*) enable fast_clz ;;
4868 disabled fast_unaligned || enable fast_unaligned
4872 elif enabled avr32; then
4877 cpuflags="-mpart=$cpu"
4881 cpuflags="-march=$cpu"
4885 cpuflags="-mcpu=$cpu"
4889 cpuflags="-march=$cpu"
4893 elif enabled bfin; then
4895 cpuflags="-mcpu=$cpu"
4897 elif enabled mips; then
4899 cpuflags="-march=$cpu"
4901 if [ "$cpu" != "generic" ]; then
4911 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
4922 enable local_aligned
4923 enable simd_align_16
4927 enable fast_unaligned
4928 disable aligned_stack
4931 # When gcc version less than 5.3.0, add -fno-expensive-optimizations flag.
4932 if [ $cc == gcc ]; then
4933 gcc_version=$(gcc -dumpversion)
4934 if [ "$(echo "$gcc_version 5.3.0" | tr " " "\n" | sort -rV | head -n 1)" == "$gcc_version" ]; then
4935 expensive_optimization_flag=""
4937 expensive_optimization_flag="-fno-expensive-optimizations"
4942 cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag"
4945 cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag"
4948 cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag"
4953 # Unknown CPU. Disable everything.
4954 warn "unknown CPU. Disabling all MIPS optimizations."
4977 24kef*|34kf*|1004kf*)
4985 check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
4989 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4993 check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4997 # We do not disable anything. Is up to the user to disable the unwanted features.
4998 warn 'generic cpu selected'
5001 elif enabled ppc; then
5005 case $(tolower $cpu) in
5006 601|ppc601|powerpc601)
5007 cpuflags="-mcpu=601"
5010 603*|ppc603*|powerpc603*)
5011 cpuflags="-mcpu=603"
5014 604*|ppc604*|powerpc604*)
5015 cpuflags="-mcpu=604"
5018 g3|75*|ppc75*|powerpc75*)
5019 cpuflags="-mcpu=750"
5022 g4|745*|ppc745*|powerpc745*)
5023 cpuflags="-mcpu=7450"
5026 74*|ppc74*|powerpc74*)
5027 cpuflags="-mcpu=7400"
5030 g5|970|ppc970|powerpc970)
5031 cpuflags="-mcpu=970"
5035 cpuflags="-mcpu=$cpu"
5039 cpuflags="-mcpu=$cpu"
5042 cpuflags="-mcpu=cell"
5047 cpuflags="-mcpu=e500mc"
5051 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
5056 cpuflags="-mcpu=8540 -mhard-float"
5062 elif enabled sparc; then
5065 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
5066 cpuflags="-mcpu=$cpu"
5068 ultrasparc*|niagara[234])
5069 cpuflags="-mcpu=$cpu"
5073 elif enabled x86; then
5077 cpuflags="-march=$cpu"
5081 # targets that do NOT support nopl and conditional mov (cmov)
5082 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
5083 cpuflags="-march=$cpu"
5086 # targets that do support nopl and conditional mov (cmov)
5087 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
5088 |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
5089 |amdfam10|barcelona|b[dt]ver*|znver*)
5090 cpuflags="-march=$cpu"
5094 # targets that do support conditional mov but on which it's slow
5095 pentium4|pentium4m|prescott|nocona)
5096 cpuflags="-march=$cpu"
5104 if [ "$cpu" != generic ]; then
5105 add_cflags $cpuflags
5106 add_asflags $cpuflags
5107 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
5110 # compiler sanity check
5112 int main(void){ return 0; }
5114 if test "$?" != 0; then
5115 echo "$cc is unable to create an executable file."
5116 if test -z "$cross_prefix" && ! enabled cross_compile ; then
5117 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
5118 echo "Only do this if you know what cross compiling means."
5120 die "C compiler test failed."
5123 add_cppflags -D_ISOC99_SOURCE
5124 add_cxxflags -D__STDC_CONSTANT_MACROS
5125 check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
5127 # some compilers silently accept -std=c11, so we also need to check that the
5128 # version macro is defined properly
5129 test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" &&
5130 add_cflags -std=c11 ||
5131 check_cflags -std=c99
5133 check_cppflags -D_FILE_OFFSET_BITS=64
5134 check_cppflags -D_LARGEFILE_SOURCE
5136 add_host_cppflags -D_ISOC99_SOURCE
5137 check_host_cflags -std=c99
5138 check_host_cflags -Wall
5139 check_host_cflags $host_cflags_speed
5144 expr=${3:-'sizeof(void *) > 4'}
5145 test_code cc "" "int test[2*($expr) - 1]" &&
5146 subarch=$arch64 || subarch=$arch32
5152 enabled shared && enable_weak pic
5155 check_64bit mips mips64 '_MIPS_SIM > 1'
5156 enabled shared && enable_weak pic
5159 check_64bit parisc parisc64
5160 enabled shared && enable_weak pic
5163 check_64bit ppc ppc64
5164 enabled shared && enable_weak pic
5167 check_64bit s390 s390x
5168 enabled shared && enable_weak pic
5171 check_64bit sparc sparc64
5172 enabled shared && enable_weak pic
5175 check_64bit x86_32 x86_64
5176 # Treat x32 as x64 for now. Note it also needs pic if shared
5177 test "$subarch" = "x86_32" && test_cpp_condition stddef.h 'defined(__x86_64__)' &&
5178 subarch=x86_64 && enable x86_64 && disable x86_32
5179 if enabled x86_64; then
5180 enabled shared && enable_weak pic
5190 add_cppflags '-I\$(SRC_PATH)/compat/aix'
5191 enabled shared && add_ldflags -Wl,-brtl
5192 arflags='-Xany -r -c'
5197 enable section_data_rel_ro
5199 add_ldexeflags -fPIE -pie
5200 SLIB_INSTALL_NAME='$(SLIBNAME)'
5202 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
5205 prefix_default="/boot/common"
5206 network_extralibs="-lnetwork"
5210 SHFLAGS='-shared -Wl,-h,$$(@F)'
5211 enabled x86 && append SHFLAGS -mimpure-text
5212 network_extralibs="-lsocket -lnsl"
5213 add_cppflags -D__EXTENSIONS__
5214 # When using suncc to build, the Solaris linker will mark
5215 # an executable with each instruction set encountered by
5216 # the Solaris assembler. As our libraries contain their own
5217 # guards for processor-specific code, instead suppress
5218 # generation of the HWCAPS ELF section on Solaris x86 only.
5219 enabled_all suncc x86 &&
5220 echo "hwcap_1 = OVERRIDE;" > mapfile &&
5221 add_ldflags -Wl,-M,mapfile
5222 nm_default='nm -P -g'
5225 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
5229 oss_indev_extralibs="-lossaudio"
5230 oss_outdev_extralibs="-lossaudio"
5231 enabled gcc || check_ldflags -Wl,-zmuldefs
5237 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
5239 oss_indev_extralibs="-lossaudio"
5240 oss_outdev_extralibs="-lossaudio"
5248 add_extralibs -lpoll -lgnugetopt
5252 enabled ppc && add_asflags -force_cpusubtype_ALL
5253 install_name_dir_default='$(SHLIBDIR)'
5254 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
5255 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
5257 add_ldflags -Wl,-dynamic,-search_paths_first
5258 check_cflags -Werror=partial-availability
5260 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
5261 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
5262 enabled x86_64 && objformat="macho64" || objformat="macho32"
5263 enabled_any pic shared x86_64 ||
5264 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
5265 check_headers dispatch/dispatch.h &&
5266 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
5267 if test -n "$sysroot"; then
5268 is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
5269 is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot
5271 version_script='-exported_symbols_list'
5272 VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
5275 die "Native MSYS builds are discouraged, please use the MINGW environment."
5280 if enabled x86_64; then
5281 LIBTARGET="i386:x86-64"
5282 elif enabled arm; then
5284 elif enabled aarch64; then
5287 if enabled shared; then
5288 # Cannot build both shared and static libs when using dllimport.
5291 enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres
5292 enabled x86_32 && check_ldflags -Wl,--large-address-aware
5293 shlibdir_default="$bindir_default"
5296 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5297 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5298 if test_cmd lib.exe -list; then
5299 SLIB_EXTRA_CMD=-'lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
5300 if enabled x86_64; then
5304 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
5306 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5308 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
5309 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
5310 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)'
5311 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-image-base $$(@:$(SLIBSUF)=.def)'
5312 enabled x86_64 && objformat="win64" || objformat="win32"
5313 dlltool="${cross_prefix}dlltool"
5316 check_ldflags -Wl,--nxcompat,--dynamicbase
5317 # Lets work around some stupidity in binutils.
5318 # ld will strip relocations from executables even though we need them
5319 # for dynamicbase (ASLR). Using -pie does retain the reloc section
5320 # however ld then forgets what the entry point should be (oops) so we
5321 # have to manually (re)set it.
5322 if enabled x86_32; then
5323 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
5324 elif enabled x86_64; then
5325 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
5326 check_ldflags -Wl,--high-entropy-va # binutils 2.25
5327 # Set image base >4GB for extra entropy with HEASLR
5328 add_ldexeflags -Wl,--image-base,0x140000000
5329 append SHFLAGS -Wl,--image-base,0x180000000
5334 if enabled shared; then
5335 # Link to the import library instead of the normal static library
5338 # Cannot build both shared and static libs with MSVC or icl.
5341 enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
5342 shlibdir_default="$bindir_default"
5345 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5346 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5347 SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
5348 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5350 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
5351 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
5352 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
5353 enabled x86_64 && objformat="win64" || objformat="win32"
5359 shlibdir_default="$bindir_default"
5362 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5363 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5364 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5366 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
5367 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
5368 enabled x86_64 && objformat="win64" || objformat="win32"
5370 enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres
5371 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5373 *-dos|freedos|opendos)
5374 network_extralibs="-lsocket"
5379 enable section_data_rel_ro
5380 enabled_any arm aarch64 && enable_weak linux_perf
5384 ranlib="echo ignoring ranlib"
5390 add_cppflags -D_GNU_SOURCE
5391 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
5392 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
5396 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5397 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
5398 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \
5399 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \
5400 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \
5401 echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \
5402 emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def'
5403 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \
5404 emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;'
5405 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5407 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib'
5409 enable_weak os2threads
5412 add_cppflags -D_BSD_SOURCE
5417 add_cppflags -D_QNX_SOURCE
5418 network_extralibs="-lsocket"
5423 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
5424 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
5425 add_ldflags -Wl,--target1-abs,--no-undefined \
5426 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
5427 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
5428 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
5429 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
5430 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
5437 die "Unknown OS '$target_os'."
5441 # test if creating links works
5442 link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX)
5443 link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX)
5445 $ln_s "$link_dest" "$link_name"
5446 touch "$link_dest/test_file"
5447 if [ "$source_path" != "." ] && [ "$source_path" != "src" ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then
5448 # create link to source path
5449 [ -e src ] && rm src
5450 $ln_s "$source_path" src
5453 # creating directory links doesn't work
5454 # fall back to using the full source path
5455 source_link="$source_path"
5461 # determine libc flavour
5466 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
5467 if test_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
5468 eval ${pfx}libc_type=uclibc
5469 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5470 elif test_${pfx}cpp_condition features.h "defined __GLIBC__"; then
5471 eval ${pfx}libc_type=glibc
5472 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5473 # MinGW headers can be installed on Cygwin, so check for newlib first.
5474 elif test_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
5475 eval ${pfx}libc_type=newlib
5476 add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
5477 # MinGW64 is backwards compatible with MinGW32, so check for it first.
5478 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
5479 eval ${pfx}libc_type=mingw64
5480 if test_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
5481 add_compat msvcrt/snprintf.o
5482 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
5484 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5485 eval test \$${pfx_no_}cc_type = "gcc" &&
5486 add_${pfx}cppflags -D__printf__=__gnu_printf__
5487 test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
5488 add_${pfx}cppflags -D_WIN32_WINNT=0x0600
5489 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5490 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
5491 test_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
5492 eval ${pfx}libc_type=mingw32
5493 test_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
5494 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
5495 die "ERROR: MinGW32 runtime version must be >= 3.15."
5496 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5497 test_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
5498 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
5499 test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
5500 add_${pfx}cppflags -D_WIN32_WINNT=0x0600
5501 eval test \$${pfx_no_}cc_type = "gcc" &&
5502 add_${pfx}cppflags -D__printf__=__gnu_printf__
5503 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5504 elif test_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
5505 eval ${pfx}libc_type=msvcrt
5506 if test_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
5507 if [ "$pfx" = host_ ]; then
5508 add_host_cppflags -Dsnprintf=_snprintf
5510 add_compat strtod.o strtod=avpriv_strtod
5511 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
5512 _snprintf=avpriv_snprintf \
5513 vsnprintf=avpriv_vsnprintf
5516 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
5517 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
5518 # 0x601 by default unless something else is set by the user.
5519 # This can easily lead to us detecting functions only present
5520 # in such new versions and producing binaries requiring windows 7.0.
5521 # Therefore explicitly set the default to Vista unless the user has
5522 # set something else on the command line.
5523 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
5524 # family. For these cases, configure is free to use any functions
5525 # found in the SDK headers by default. (Alternatively, we could force
5526 # _WIN32_WINNT to 0x0602 in that case.)
5527 test_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
5528 { test_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0600; }
5529 #ifdef WINAPI_FAMILY
5530 #include <winapifamily.h>
5531 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
5536 if [ "$pfx" = "" ]; then
5537 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
5538 check_func strtoull || add_cflags -Dstrtoull=_strtoui64
5540 elif test_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
5541 eval ${pfx}libc_type=klibc
5542 elif test_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
5543 eval ${pfx}libc_type=bionic
5544 elif test_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
5545 eval ${pfx}libc_type=solaris
5546 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
5547 elif test_${pfx}cpp_condition sys/version.h "defined __DJGPP__"; then
5548 eval ${pfx}libc_type=djgpp
5549 add_cppflags -U__STRICT_ANSI__
5550 add_cflags "-include $source_path/compat/djgpp/math.h"
5551 add_compat djgpp/math.o
5555 void *v = localtime_r;
5557 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
5559 void *v = localtime_r;
5562 eval test -n "\${${pfx}libc_type}" && enable ${pfx}libc_${libc_type}
5568 # hacks for compiler/libc/os combinations
5572 add_compat strtod.o strtod=avpriv_strtod
5576 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
5577 add_cppflags '-I\$(SRC_PATH)/compat/float'
5579 test_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
5582 : ${shlibdir_default:="$libdir"}
5583 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
5585 set_default $PATHS_LIST
5588 disabled optimizations || enabled ossfuzz || check_cflags -fomit-frame-pointer
5591 disabled pic && return
5594 case "$target_os" in
5595 mingw*|cygwin*|win*)
5604 enabled pic && enable_weak_pic
5606 test_cc <<EOF || die "Symbol mangling check failed."
5609 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
5610 extern_prefix=${sym%%ff_extern*}
5612 ! disabled inline_asm && check_inline_asm inline_asm '"" ::'
5614 for restrict_keyword in restrict __restrict__ __restrict ""; do
5615 test_code cc "" "char * $restrict_keyword p" && break
5618 check_cc pragma_deprecated "" '_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")'
5620 # The global variable ensures the bits appear unchanged in the object file.
5621 test_cc <<EOF || die "endian test failed"
5622 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
5624 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
5626 check_cc const_nan math.h "struct { double d; } static const bar[] = { { NAN } }"
5628 if ! enabled ppc64 || enabled bigendian; then
5633 log "check_gas using '$as' as AS"
5634 # :vararg is used on aarch64, arm and ppc altivec
5636 .macro m n, y:vararg=0
5640 # .altmacro is only used in arm asm
5641 ! enabled arm || check_as gnu_as ".altmacro"
5644 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
5646 enabled_any arm aarch64 && nogas=die
5647 enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
5651 arm*) gaspp_as_type=armasm; as_noop=-h ;;
5652 gcc) gaspp_as_type=gas ;;
5653 *) gaspp_as_type=$as_type ;;
5656 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
5658 test "${as#*gas-preprocessor.pl}" != "$as" ||
5659 test_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
5660 gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
5662 if ! check_gas ; then
5665 $nogas "GNU assembler not found, install/update gas-preprocessor"
5668 check_as as_func ".func test
5672 check_inline_asm inline_asm_labels '"1:\n"'
5674 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
5676 if enabled aarch64; then
5677 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
5678 # internal assembler in clang 3.3 does not support this instruction
5679 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
5680 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
5682 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
5684 elif enabled alpha; then
5688 elif enabled arm; then
5690 enabled msvc && check_cpp_condition thumb stddef.h "defined _M_ARMT"
5691 test_cpp_condition stddef.h "defined __thumb__" && test_cc <<EOF && enable_weak thumb
5692 float func(float a, float b){ return a+b; }
5694 enabled thumb && check_cflags -mthumb || check_cflags -marm
5696 if check_cpp_condition vfp_args stddef.h "defined __ARM_PCS_VFP"; then
5698 elif check_cpp_condition vfp_args stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
5700 elif ! test_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
5701 case "${cross_prefix:-$cc}" in
5702 *hardfloat*) enable vfp_args; fpabi=vfp ;;
5703 *) check_ld "cc" vfp_args <<EOF && fpabi=vfp || fpabi=soft ;;
5704 __asm__ (".eabi_attribute 28, 1");
5705 int main(void) { return 0; }
5708 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
5711 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
5712 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
5713 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
5714 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
5715 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
5716 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
5717 enabled setend && check_insn setend 'setend be'
5719 [ $target_os = linux ] || [ $target_os = android ] ||
5720 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
5723 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
5725 check_as as_arch_directive ".arch armv7-a"
5726 check_as as_dn_directive "ra .dn d0.i16"
5727 check_as as_fpu_directive ".fpu neon"
5729 # llvm's integrated assembler supports .object_arch from llvm 3.5
5730 [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] &&
5731 check_as as_object_arch ".object_arch armv4"
5733 # MS armasm fails to assemble our PIC constructs
5734 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
5736 elif enabled mips; then
5738 enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
5739 enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
5740 enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
5742 # Enable minimum ISA based on selected options
5743 if enabled mips64; then
5744 enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6'
5745 enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2'
5746 disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64'
5748 enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6'
5749 enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5'
5750 enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2'
5751 disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32'
5754 enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float'
5755 enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
5756 enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_headers msa.h || disable msa
5757 enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
5758 enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
5759 enabled msa && enabled msa2 && check_inline_asm_flags msa2 '"nxbits.any.b $w0, $w0"' '-mmsa2' && check_headers msa2.h || disable msa2
5761 if enabled bigendian && enabled msa; then
5765 elif enabled parisc; then
5767 if enabled gcc; then
5768 case $($cc -dumpversion) in
5769 4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
5773 elif enabled ppc; then
5775 enable local_aligned
5777 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
5778 check_inline_asm ibm_asm '"add 0, 0, 0"'
5779 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
5780 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
5782 if enabled altivec; then
5783 check_cflags -maltivec -mabi=altivec
5785 # check if our compiler supports Motorola AltiVec C API
5786 check_cc altivec altivec.h "vector signed int v1 = (vector signed int) { 0 };
5787 vector signed int v2 = (vector signed int) { 1 };
5788 v1 = vec_add(v1, v2);"
5790 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
5793 if enabled vsx; then
5794 check_cflags -mvsx &&
5795 check_cc vsx altivec.h "int v[4] = { 0 };
5796 vector signed int v1 = vec_vsx_ld(0, v);"
5799 if enabled power8; then
5800 check_cpp_condition power8 "altivec.h" "defined(_ARCH_PWR8)"
5803 elif enabled x86; then
5805 check_builtin rdtsc intrin.h "__rdtsc()"
5806 check_builtin mm_empty mmintrin.h "_mm_empty()"
5808 enable local_aligned
5810 # check whether EBP is available on x86
5811 # As 'i' is stored on the stack, this program will crash
5812 # if the base pointer is used to access it because the
5813 # base pointer is cleared in the inline assembly code.
5814 check_exec_crash <<EOF && enable ebp_available
5816 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
5820 # check whether EBX is available on x86
5821 check_inline_asm ebx_available '""::"b"(0)' &&
5822 check_inline_asm ebx_available '"":::"%ebx"'
5824 # check whether xmm clobbers are supported
5825 check_inline_asm xmm_clobbers '"":::"%xmm0"'
5827 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
5828 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
5830 # check whether binutils is new enough to compile SSSE3/MMXEXT
5831 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
5832 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
5836 if test_cmd $x86asmexe_probe -v; then
5837 x86asmexe=$x86asmexe_probe
5839 x86asm_debug="-g -F dwarf"
5841 X86ASM_DEPFLAGS='-MD $(@:.o=.d)'
5842 elif test_cmd $x86asmexe_probe --version; then
5843 x86asmexe=$x86asmexe_probe
5845 x86asm_debug="-g dwarf2"
5846 X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)'
5849 check_x86asm x86asm "movbe ecx, [5]"
5852 if ! disabled_any asm mmx x86asm; then
5854 for program in $x86asmexe nasm yasm; do
5855 probe_x86asm $program && break
5857 disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build."
5858 X86ASMFLAGS="-f $objformat"
5859 enabled pic && append X86ASMFLAGS "-DPIC"
5860 test -n "$extern_prefix" && append X86ASMFLAGS "-DPREFIX"
5861 case "$objformat" in
5862 elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
5865 check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"
5866 check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0"
5867 check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3"
5868 check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3"
5869 check_x86asm cpunop "CPU amdnop"
5873 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
5880 check_cc intrinsics_neon arm_neon.h "int16x8_t test = vdupq_n_s16(0)"
5882 check_ldflags -Wl,--as-needed
5883 check_ldflags -Wl,-z,noexecstack
5885 if ! disabled network; then
5886 check_func getaddrinfo $network_extralibs
5887 check_func inet_aton $network_extralibs
5889 check_type netdb.h "struct addrinfo"
5890 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
5891 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
5892 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
5893 check_type poll.h "struct pollfd"
5894 check_type netinet/sctp.h "struct sctp_event_subscribe"
5895 check_struct "sys/socket.h" "struct msghdr" msg_flags
5896 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
5897 check_type netinet/in.h "struct sockaddr_in6"
5898 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
5899 check_type "sys/types.h sys/socket.h" socklen_t
5901 # Prefer arpa/inet.h over winsock2
5902 if check_headers arpa/inet.h ; then
5903 check_func closesocket
5904 elif check_headers winsock2.h ; then
5905 check_func_headers winsock2.h closesocket -lws2 &&
5906 network_extralibs="-lws2" ||
5907 { check_func_headers winsock2.h closesocket -lws2_32 &&
5908 network_extralibs="-lws2_32"; } || disable winsock2_h network
5909 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
5911 check_type ws2tcpip.h socklen_t
5912 check_type ws2tcpip.h "struct addrinfo"
5913 check_type ws2tcpip.h "struct group_source_req"
5914 check_type ws2tcpip.h "struct ip_mreq_source"
5915 check_type ws2tcpip.h "struct ipv6_mreq"
5916 check_type winsock2.h "struct pollfd"
5917 check_struct winsock2.h "struct sockaddr" sa_len
5918 check_type ws2tcpip.h "struct sockaddr_in6"
5919 check_type ws2tcpip.h "struct sockaddr_storage"
5925 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
5926 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
5927 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
5928 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
5929 check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
5930 check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
5931 check_builtin x264_csp_bgr "stdint.h x264.h" "X264_CSP_BGR"
5933 case "$custom_allocator" in
5935 # jemalloc by default does not use a prefix
5936 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
5939 require_pkg_config libtcmalloc libtcmalloc gperftools/tcmalloc.h tc_malloc
5944 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
5945 check_func ${malloc_prefix}memalign && enable memalign
5946 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
5949 check_func_headers stdlib.h arc4random
5950 check_lib clock_gettime time.h clock_gettime || check_lib clock_gettime time.h clock_gettime -lrt
5953 check_func gethrtime
5955 check_func getrusage
5956 check_func gettimeofday
5961 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
5962 check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt
5963 check_func sched_getaffinity
5964 check_func setrlimit
5965 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
5966 check_func strerror_r
5971 check_func_headers conio.h kbhit
5972 check_func_headers io.h setmode
5973 check_func_headers lzo/lzo1x.h lzo1x_999_compress
5974 check_func_headers mach/mach_time.h mach_absolute_time
5975 check_func_headers stdlib.h getenv
5976 check_func_headers sys/stat.h lstat
5978 check_func_headers windows.h GetProcessAffinityMask
5979 check_func_headers windows.h GetProcessTimes
5980 check_func_headers windows.h GetSystemTimeAsFileTime
5981 check_func_headers windows.h LoadLibrary
5982 check_func_headers windows.h MapViewOfFile
5983 check_func_headers windows.h PeekNamedPipe
5984 check_func_headers windows.h SetConsoleTextAttribute
5985 check_func_headers windows.h SetConsoleCtrlHandler
5986 check_func_headers windows.h Sleep
5987 check_func_headers windows.h VirtualAlloc
5988 check_func_headers glob.h glob
5990 check_lib xlib "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
5992 check_headers direct.h
5993 check_headers dirent.h
5994 check_headers dxgidebug.h
5995 check_headers dxva.h
5996 check_headers dxva2api.h -D_WIN32_WINNT=0x0600
5998 check_headers linux/perf_event.h
5999 check_headers libcrystalhd/libcrystalhd_if.h
6000 check_headers malloc.h
6001 check_headers net/udplite.h
6002 check_headers poll.h
6003 check_headers sys/param.h
6004 check_headers sys/resource.h
6005 check_headers sys/select.h
6006 check_headers sys/time.h
6007 check_headers sys/un.h
6008 check_headers termios.h
6009 check_headers unistd.h
6010 check_headers valgrind/valgrind.h
6011 check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
6012 check_headers windows.h
6013 check_headers X11/extensions/XvMClib.h
6014 check_headers asm/types.h
6016 # it seems there are versions of clang in some distros that try to use the
6017 # gcc headers, which explodes for stdatomic
6018 # so we also check that atomics actually work here
6019 check_builtin stdatomic stdatomic.h "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0); foo += bar"
6021 check_lib advapi32 "windows.h" RegCloseKey -ladvapi32
6022 check_lib bcrypt "windows.h bcrypt.h" BCryptGenRandom -lbcrypt &&
6023 check_cpp_condition bcrypt bcrypt.h "defined BCRYPT_RNG_ALGORITHM"
6024 check_lib ole32 "windows.h" CoTaskMemFree -lole32
6025 check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32
6026 check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
6028 check_lib android android/native_window.h ANativeWindow_acquire -landroid
6029 check_lib mediandk "stdint.h media/NdkImage.h" AImage_delete -lmediandk
6030 check_lib camera2ndk "stdbool.h stdint.h camera/NdkCameraManager.h" ACameraManager_create -lcamera2ndk
6032 enabled appkit && check_apple_framework AppKit
6033 enabled audiotoolbox && check_apple_framework AudioToolbox
6034 enabled avfoundation && check_apple_framework AVFoundation
6035 enabled coreimage && check_apple_framework CoreImage
6036 enabled videotoolbox && check_apple_framework VideoToolbox
6038 check_apple_framework CoreFoundation
6039 check_apple_framework CoreMedia
6040 check_apple_framework CoreVideo
6042 enabled avfoundation && {
6043 disable coregraphics applicationservices
6044 check_lib coregraphics CoreGraphics/CoreGraphics.h CGGetActiveDisplayList "-framework CoreGraphics" ||
6045 check_lib applicationservices ApplicationServices/ApplicationServices.h CGGetActiveDisplayList "-framework ApplicationServices"; }
6047 enabled videotoolbox && {
6048 check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices"
6049 check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia"
6050 check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
6053 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
6055 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
6056 check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
6057 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
6058 check_type "windows.h d3d11.h" "ID3D11VideoContext"
6059 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
6061 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
6063 if enabled cuda_sdk; then
6064 warn "Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead."
6068 if ! disabled ffnvcodec; then
6069 ffnv_hdr_list="ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h"
6070 check_pkg_config ffnvcodec "ffnvcodec >= 9.0.18.0" "$ffnv_hdr_list" "" || \
6071 check_pkg_config ffnvcodec "ffnvcodec >= 8.2.15.8 ffnvcodec < 8.3" "$ffnv_hdr_list" "" || \
6072 check_pkg_config ffnvcodec "ffnvcodec >= 8.1.24.9 ffnvcodec < 8.2" "$ffnv_hdr_list" "" || \
6073 check_pkg_config ffnvcodec "ffnvcodec >= 8.0.14.9 ffnvcodec < 8.1" "$ffnv_hdr_list" ""
6076 check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"
6078 if ! disabled w32threads && ! enabled pthreads; then
6079 check_func_headers "windows.h process.h" _beginthreadex &&
6080 check_type "windows.h" CONDITION_VARIABLE &&
6081 check_type "windows.h" INIT_ONCE &&
6082 enable w32threads || disable w32threads
6083 if ! enabled w32threads && enabled winrt; then
6084 check_func_headers "windows.h" CreateThread &&
6085 enable w32threads || disable w32threads
6089 # check for some common methods of building with pthread support
6090 # do this before the optional library checks as some of them require pthreads
6091 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
6092 if check_lib pthreads pthread.h pthread_join -pthread &&
6093 check_lib pthreads pthread.h pthread_create -pthread; then
6095 elif check_lib pthreads pthread.h pthread_join -pthreads &&
6096 check_lib pthreads pthread.h pthread_create -pthreads; then
6097 add_cflags -pthreads
6098 elif check_lib pthreads pthread.h pthread_join -ldl -pthread &&
6099 check_lib pthreads pthread.h pthread_create -ldl -pthread; then
6100 add_cflags -ldl -pthread
6101 elif check_lib pthreads pthread.h pthread_join -lpthreadGC2 &&
6102 check_lib pthreads pthread.h pthread_create -lpthreadGC2; then
6104 elif check_lib pthreads pthread.h pthread_join -lpthread &&
6105 check_lib pthreads pthread.h pthread_create -lpthread; then
6107 elif check_func pthread_join && check_func pthread_create; then
6110 check_cc pthreads "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER"
6112 if enabled pthreads; then
6113 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" $pthreads_extralibs
6114 check_func pthread_cancel $pthreads_extralibs
6118 enabled zlib && { check_pkg_config zlib zlib "zlib.h" zlibVersion ||
6119 check_lib zlib zlib.h zlibVersion -lz; }
6120 enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
6121 enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma
6123 # On some systems dynamic loading requires no extra linker flags
6124 check_lib libdl dlfcn.h "dlopen dlsym" || check_lib libdl dlfcn.h "dlopen dlsym" -ldl
6126 check_lib libm math.h sin -lm
6134 for func in $MATH_FUNCS; do
6135 eval check_mathfunc $func \${${func}_args:-1} $libm_extralibs
6138 for func in $COMPLEX_FUNCS; do
6139 eval check_complexfunc $func \${${func}_args:-1}
6142 # these are off by default, so fail if requested and not available
6143 enabled cuda_nvcc && { check_nvcc || die "ERROR: failed checking for nvcc."; }
6144 enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
6145 enabled decklink && { require_headers DeckLinkAPI.h &&
6146 { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink API version must be >= 10.9.5."; } }
6147 enabled frei0r && require_headers "frei0r.h dlfcn.h"
6148 enabled gmp && require gmp gmp.h mpz_export -lgmp
6149 enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
6150 enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
6151 enabled ladspa && require_headers "ladspa.h dlfcn.h"
6152 enabled libaom && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version
6153 enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new ||
6154 { enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } ||
6155 die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; }
6156 enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
6157 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
6158 enabled libass && require_pkg_config libass libass ass/ass.h ass_library_init
6159 enabled libbluray && require_pkg_config libbluray libbluray libbluray/bluray.h bd_open
6160 enabled libbs2b && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open
6161 enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
6162 { check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 ||
6163 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
6164 enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas
6165 enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2
6166 enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.2.1" "dav1d/dav1d.h" dav1d_version
6167 enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open
6168 enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
6169 enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion
6170 enabled libfdk_aac && { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
6171 { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
6172 warn "using libfdk without pkg-config"; } }
6173 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"
6174 enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs
6175 enabled fontconfig && enable libfontconfig
6176 enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
6177 enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
6178 enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info
6179 enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu ||
6180 require libgme gme/gme.h gme_new_emu -lgme -lstdc++; }
6181 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
6182 check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break;
6183 done || die "ERROR: libgsm not found"; }
6184 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc $pthreads_extralibs
6185 enabled libklvanc && require libklvanc libklvanc/vanc.h klvanc_context_create -lklvanc
6186 enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
6187 enabled liblensfun && require_pkg_config liblensfun lensfun lensfun.h lf_db_new
6188 # While it may appear that require is being used as a pkg-config
6189 # fallback for libmfx, it is actually being used to detect a different
6190 # installation route altogether. If libmfx is installed via the Intel
6191 # Media SDK or Intel Media Server Studio, these don't come with
6192 # pkg-config support. Instead, users should make sure that the build
6193 # can find the libraries and headers through other means.
6194 enabled libmfx && { check_pkg_config libmfx libmfx "mfx/mfxvideo.h" MFXInit ||
6195 { require libmfx "mfx/mfxvideo.h" MFXInit "-llibmfx $advapi32_extralibs" && warn "using libmfx without pkg-config"; } }
6196 enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load
6197 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs
6198 enabled libmysofa && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_load ||
6199 require libmysofa mysofa.h mysofa_load -lmysofa $zlib_extralibs; }
6200 enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc -lnppidei ||
6201 check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc -lnppidei ||
6202 die "ERROR: libnpp not found"; }
6203 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
6204 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
6205 enabled libopencv && { check_headers opencv2/core/core_c.h &&
6206 { check_pkg_config libopencv opencv opencv2/core/core_c.h cvCreateImageHeader ||
6207 require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
6208 require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
6209 enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
6210 enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
6211 { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
6212 enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
6213 enabled libopus && {
6214 enabled libopus_decoder && {
6215 require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
6217 enabled libopus_encoder && {
6218 require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create
6221 enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new
6222 enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo
6223 enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
6224 enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++"
6225 enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer
6226 enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init ||
6227 require libsmbclient libsmbclient.h smbc_init -lsmbclient; }
6228 enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy -lstdc++
6229 enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
6230 enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init
6231 enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
6232 enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket
6233 enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow
6234 enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate
6235 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
6236 enabled libtls && require_pkg_config libtls libtls tls.h tls_configure
6237 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
6238 { check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
6239 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
6240 enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
6241 enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
6242 enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.3.9" libvmaf.h compute_vmaf
6243 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
6244 enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init &&
6245 require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init
6248 enabled libvpx_vp8_decoder && {
6249 check_pkg_config libvpx_vp8_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
6250 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"
6252 enabled libvpx_vp8_encoder && {
6253 check_pkg_config libvpx_vp8_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
6254 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"
6256 enabled libvpx_vp9_decoder && {
6257 check_pkg_config libvpx_vp9_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
6258 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"
6260 enabled libvpx_vp9_encoder && {
6261 check_pkg_config libvpx_vp9_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
6262 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"
6264 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
6265 die "libvpx enabled but no supported decoders found"
6269 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
6270 enabled libwebp && {
6271 enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
6272 enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
6273 enabled libx264 && { check_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode ||
6274 { require libx264 "stdint.h x264.h" x264_encoder_encode "-lx264 $pthreads_extralibs $libm_extralibs" &&
6275 warn "using libx264 without pkg-config"; } } &&
6276 require_cpp_condition libx264 x264.h "X264_BUILD >= 118" &&
6277 check_cpp_condition libx262 x264.h "X264_MPEG2"
6278 enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
6279 require_cpp_condition libx265 x265.h "X265_BUILD >= 68"
6280 enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs"
6281 enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.3.0" "stdint.h xavs2.h" xavs2_api_get
6282 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
6283 enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version
6284 enabled libzmq && require_pkg_config libzmq libzmq zmq.h zmq_ctx_new
6285 enabled libzvbi && require_pkg_config libzvbi zvbi-0.2 libzvbi.h vbi_decoder_new &&
6286 { test_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
6287 enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
6288 enabled libxml2 && require_pkg_config libxml2 libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion
6289 enabled mbedtls && { check_pkg_config mbedtls mbedtls mbedtls/x509_crt.h mbedtls_x509_crt_init ||
6290 check_pkg_config mbedtls mbedtls mbedtls/ssl.h mbedtls_ssl_init ||
6291 check_lib mbedtls mbedtls/ssl.h mbedtls_ssl_init -lmbedtls -lmbedx509 -lmbedcrypto ||
6292 die "ERROR: mbedTLS not found"; }
6293 enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; }
6294 enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
6295 { ! enabled cross_compile &&
6296 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
6297 add_ldflags -L/opt/vc/lib/ &&
6298 check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
6299 die "ERROR: mmal not found" &&
6300 check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
6301 enabled openal && { { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
6302 check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } ||
6303 die "ERROR: openal not found"; } &&
6304 { test_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
6305 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
6306 enabled opencl && { check_pkg_config opencl OpenCL CL/cl.h clEnqueueNDRangeKernel ||
6307 check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
6308 check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
6309 die "ERROR: opencl not found"; } &&
6310 { test_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
6311 test_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
6312 die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
6313 enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" ||
6314 check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
6315 check_lib opengl OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
6316 check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
6317 die "ERROR: opengl not found."
6319 enabled omx && require_headers OMX_Core.h
6320 enabled omx_rpi && { check_headers OMX_Core.h ||
6321 { ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_headers OMX_Core.h ; } ||
6322 die "ERROR: OpenMAX IL headers not found"; } && enable omx
6323 enabled openssl && { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
6324 check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
6325 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
6326 check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
6327 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
6328 die "ERROR: openssl not found"; }
6329 enabled pocketsphinx && require_pkg_config pocketsphinx pocketsphinx pocketsphinx/pocketsphinx.h ps_init
6330 enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/rk_mpi.h mpp_create &&
6331 require_pkg_config rockchip_mpp "rockchip_mpp >= 1.3.7" rockchip/rk_mpi.h mpp_create &&
6333 die "ERROR: rkmpp requires --enable-libdrm"; }
6335 enabled vapoursynth && require_pkg_config vapoursynth "vapoursynth-script >= 42" VSScript.h vsscript_init
6338 if enabled gcrypt; then
6339 GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
6340 if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
6341 gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
6342 gcrypt_extralibs=$("${GCRYPT_CONFIG}" --libs)
6343 check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs ||
6344 die "ERROR: gcrypt not found"
6345 add_cflags $gcrypt_cflags
6347 require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
6351 if enabled sdl2; then
6352 SDL2_CONFIG="${cross_prefix}sdl2-config"
6353 test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 2.1.0" SDL_events.h SDL_PollEvent
6354 if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
6355 sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
6356 sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
6357 test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
6358 test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
6359 check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags &&
6362 if test $target_os = "mingw32"; then
6363 sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs)
6367 if enabled decklink; then
6369 mingw32*|mingw64*|win32|win64)
6370 decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
6371 decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
6376 enabled securetransport &&
6377 check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
6378 check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" ||
6379 disable securetransport
6381 enabled securetransport &&
6382 check_func SecItemImport "-Wl,-framework,CoreFoundation -Wl,-framework,Security"
6385 check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
6386 test_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" &&
6387 schannel_extralibs="-lsecur32" ||
6390 makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
6392 && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
6393 && enable makeinfo_html || disable makeinfo_html
6394 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
6395 perl -v > /dev/null 2>&1 && enable perl || disable perl
6396 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
6397 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
6399 # check V4L2 codecs available in the API
6400 check_headers linux/fb.h
6401 check_headers linux/videodev2.h
6402 test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
6403 check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;"
6404 check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;"
6405 check_cc mpeg1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG1;"
6406 check_cc mpeg2_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG2;"
6407 check_cc mpeg4_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG4;"
6408 check_cc hevc_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_HEVC;"
6409 check_cc h263_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H263;"
6410 check_cc h264_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H264;"
6411 check_cc vp8_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP8;"
6412 check_cc vp9_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP9;"
6414 check_headers sys/videoio.h
6415 test_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
6417 check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
6418 check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
6419 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
6420 # w32api 3.12 had it defined wrong
6421 check_cpp_condition vfwcap_defines vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER"
6423 check_type "dshow.h" IBaseFilter
6425 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
6426 check_headers "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h" ||
6427 check_headers "machine/ioctl_meteor.h machine/ioctl_bt848.h" ||
6428 check_headers "dev/video/meteor/ioctl_meteor.h dev/video/bktr/ioctl_bt848.h" ||
6429 check_headers "dev/ic/bt8xx.h"
6431 if check_struct sys/soundcard.h audio_buf_info bytes; then
6432 enable_sanitized sys/soundcard.h
6434 test_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_sanitized sys/soundcard.h
6435 #include <sys/soundcard.h>
6440 enabled alsa && check_pkg_config alsa alsa "alsa/asoundlib.h" snd_pcm_htimestamp ||
6441 check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
6444 require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range
6446 enabled sndio && check_lib sndio sndio.h sio_open -lsndio
6448 if enabled libcdio; then
6449 check_pkg_config libcdio libcdio_paranoia "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open ||
6450 check_pkg_config libcdio libcdio_paranoia "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open ||
6451 check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6452 check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6453 die "ERROR: No usable libcdio/cdparanoia found"
6456 enabled libxcb && check_pkg_config libxcb "xcb >= 1.4" xcb/xcb.h xcb_connect ||
6457 disable libxcb_shm libxcb_shape libxcb_xfixes
6459 if enabled libxcb; then
6460 enabled libxcb_shm && check_pkg_config libxcb_shm xcb-shm xcb/shm.h xcb_shm_attach
6461 enabled libxcb_shape && check_pkg_config libxcb_shape xcb-shape xcb/shape.h xcb_shape_get_rectangles
6462 enabled libxcb_xfixes && check_pkg_config libxcb_xfixes xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image
6465 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
6467 # d3d11va requires linking directly to dxgi and d3d11 if not building for
6468 # the desktop api partition
6469 test_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11"
6470 #ifdef WINAPI_FAMILY
6471 #include <winapifamily.h>
6472 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
6473 #error desktop, not uwp
6475 // WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
6478 #error no family set
6483 check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize
6485 if enabled vaapi; then
6486 check_pkg_config vaapi_drm "libva-drm" "va/va_drm.h" vaGetDisplayDRM
6488 if enabled xlib; then
6489 check_pkg_config vaapi_x11 "libva-x11" "va/va_x11.h" vaGetDisplay
6492 check_cpp_condition vaapi_1 "va/va.h" "VA_CHECK_VERSION(1, 0, 0)"
6494 check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
6495 check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
6496 check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" rotation_flags
6497 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
6498 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
6499 check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
6500 check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9"
6503 if enabled_all opencl libdrm ; then
6504 check_type "CL/cl_intel.h" "clCreateImageFromFdINTEL_fn" &&
6505 enable opencl_drm_beignet
6506 check_func_headers "CL/cl_ext.h" clImportMemoryARM &&
6507 enable opencl_drm_arm
6510 if enabled_all opencl vaapi ; then
6511 if enabled opencl_drm_beignet ; then
6512 enable opencl_vaapi_beignet
6514 check_type "CL/cl.h CL/cl_va_api_media_sharing_intel.h" "clCreateFromVA_APIMediaSurfaceINTEL_fn" &&
6515 enable opencl_vaapi_intel_media
6519 if enabled_all opencl dxva2 ; then
6520 check_type "CL/cl_dx9_media_sharing.h" cl_dx9_surface_info_khr &&
6524 if enabled_all opencl d3d11va ; then
6525 check_type "CL/cl_d3d11.h" clGetDeviceIDsFromD3D11KHR_fn &&
6530 check_cpp_condition vdpau vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP"
6533 check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
6535 enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd
6537 if enabled x86; then
6539 mingw32*|mingw64*|win32|win64|linux|cygwin*)
6542 disable ffnvcodec cuvid nvdec nvenc
6545 elif enabled ppc64 && ! enabled bigendian; then
6550 disable ffnvcodec cuvid nvdec nvenc
6554 disable ffnvcodec cuvid nvdec nvenc
6557 enabled ffnvcodec && enable cuda
6560 test_cc -I$source_path <<EOF || disable nvenc
6561 #include <ffnvcodec/nvEncodeAPI.h>
6562 NV_ENCODE_API_FUNCTION_LIST flist;
6563 void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; }
6564 int main(void) { return 0; }
6568 check_cpp_condition amf "AMF/core/Version.h" \
6569 "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400040001"
6571 # Funny iconv installations are not unusual, so check it after all flags have been set
6572 if enabled libc_iconv; then
6573 check_func_headers iconv.h iconv
6574 elif enabled iconv; then
6575 check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
6578 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
6580 # add some useful compiler flags if supported
6581 check_cflags -Wdeclaration-after-statement
6583 check_cflags -Wdisabled-optimization
6584 check_cflags -Wpointer-arith
6585 check_cflags -Wredundant-decls
6586 check_cflags -Wwrite-strings
6587 check_cflags -Wtype-limits
6588 check_cflags -Wundef
6589 check_cflags -Wmissing-prototypes
6590 check_cflags -Wno-pointer-to-int-cast
6591 check_cflags -Wstrict-prototypes
6592 check_cflags -Wempty-body
6594 if enabled extra_warnings; then
6595 check_cflags -Wcast-qual
6596 check_cflags -Wextra
6597 check_cflags -Wpedantic
6600 check_disable_warning(){
6601 warning_flag=-W${1#-Wno-}
6602 test_cflags $unknown_warning_flags $warning_flag && add_cflags $1
6605 test_cflags -Werror=unused-command-line-argument &&
6606 append unknown_warning_flags "-Werror=unused-command-line-argument"
6607 test_cflags -Werror=unknown-warning-option &&
6608 append unknown_warning_flags "-Werror=unknown-warning-option"
6610 check_disable_warning -Wno-parentheses
6611 check_disable_warning -Wno-switch
6612 check_disable_warning -Wno-format-zero-length
6613 check_disable_warning -Wno-pointer-sign
6614 check_disable_warning -Wno-unused-const-variable
6615 check_disable_warning -Wno-bool-operation
6616 check_disable_warning -Wno-char-subscripts
6618 check_disable_warning_headers(){
6619 warning_flag=-W${1#-Wno-}
6620 test_cflags $warning_flag && add_cflags_headers $1
6623 check_disable_warning_headers -Wno-deprecated-declarations
6624 check_disable_warning_headers -Wno-unused-variable
6626 test_cc <<EOF && enable blocks_extension
6627 void (^block)(void);
6630 # add some linker flags
6631 check_ldflags -Wl,--warn-common
6632 check_ldflags -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
6633 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir && add_ldsoflags -Wl,-rpath,$libdir
6634 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
6636 # add some strip flags
6639 enabled neon_clobber_test &&
6640 check_ldflags -Wl,--wrap,avcodec_open2 \
6641 -Wl,--wrap,avcodec_decode_audio4 \
6642 -Wl,--wrap,avcodec_decode_video2 \
6643 -Wl,--wrap,avcodec_decode_subtitle2 \
6644 -Wl,--wrap,avcodec_encode_audio2 \
6645 -Wl,--wrap,avcodec_encode_video2 \
6646 -Wl,--wrap,avcodec_encode_subtitle \
6647 -Wl,--wrap,avcodec_send_packet \
6648 -Wl,--wrap,avcodec_receive_packet \
6649 -Wl,--wrap,avcodec_send_frame \
6650 -Wl,--wrap,avcodec_receive_frame \
6651 -Wl,--wrap,swr_convert \
6652 -Wl,--wrap,avresample_convert ||
6653 disable neon_clobber_test
6655 enabled xmm_clobber_test &&
6656 check_ldflags -Wl,--wrap,avcodec_open2 \
6657 -Wl,--wrap,avcodec_decode_audio4 \
6658 -Wl,--wrap,avcodec_decode_video2 \
6659 -Wl,--wrap,avcodec_decode_subtitle2 \
6660 -Wl,--wrap,avcodec_encode_audio2 \
6661 -Wl,--wrap,avcodec_encode_video2 \
6662 -Wl,--wrap,avcodec_encode_subtitle \
6663 -Wl,--wrap,avcodec_send_packet \
6664 -Wl,--wrap,avcodec_receive_packet \
6665 -Wl,--wrap,avcodec_send_frame \
6666 -Wl,--wrap,avcodec_receive_frame \
6667 -Wl,--wrap,swr_convert \
6668 -Wl,--wrap,avresample_convert \
6669 -Wl,--wrap,sws_scale ||
6670 disable xmm_clobber_test
6672 check_ld "cc" proper_dce <<EOF
6673 extern const int array[512];
6674 static inline int func(void) { return array[0]; }
6675 int main(void) { return 0; }
6678 if enabled proper_dce; then
6679 echo "X { local: *; };" > $TMPV
6680 if test_ldflags -Wl,${version_script},$TMPV; then
6681 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
6683 test_cc <<EOF && enable symver_asm_label
6684 void ff_foo(void) __asm__ ("av_foo@VERSION");
6685 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
6687 test_cc <<EOF && enable symver_gnu_asm
6688 __asm__(".symver ff_foo,av_foo@VERSION");
6689 void ff_foo(void) {}
6694 if [ -z "$optflags" ]; then
6695 if enabled small; then
6696 optflags=$cflags_size
6697 elif enabled optimizations; then
6698 optflags=$cflags_speed
6700 optflags=$cflags_noopt
6704 if [ -z "$nvccflags" ]; then
6705 nvccflags=$nvccflags_default
6708 if enabled x86_64 || enabled ppc64 || enabled aarch64; then
6709 nvccflags="$nvccflags -m64"
6711 nvccflags="$nvccflags -m32"
6716 enabled lto && check_ldflags "$@"
6719 check_optflags $optflags
6720 check_optflags -fno-math-errno
6721 check_optflags -fno-signed-zeros
6723 if enabled lto; then
6724 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
6726 check_ldflags -flto $cpuflags
6727 disable inline_asm_direct_symbol_refs
6730 enabled ftrapv && check_cflags -ftrapv
6732 test_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
6737 if enabled icc; then
6738 # Just warnings, no remarks
6740 # -wd: Disable following warnings
6741 # 144, 167, 556: -Wno-pointer-sign
6742 # 188: enumerated type mixed with another type
6743 # 1292: attribute "foo" ignored
6744 # 1419: external declaration in primary source file
6745 # 10006: ignoring unknown option -fno-signed-zeros
6746 # 10148: ignoring unknown option -Wno-parentheses
6747 # 10156: ignoring option '-W'; no argument required
6748 # 13200: No EMMS instruction before call to function
6749 # 13203: No EMMS instruction before return from function
6750 check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
6751 # 11030: Warning unknown option --as-needed
6752 # 10156: ignoring option '-export'; no argument required
6753 check_ldflags -wd10156,11030
6754 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
6755 enable ebp_available
6756 # The test above does not test linking
6757 enabled lto && disable symver_asm_label
6758 if enabled x86_32; then
6759 icc_version=$($cc -dumpversion)
6760 test ${icc_version%%.*} -ge 11 &&
6761 check_cflags -falign-stack=maintain-16-byte ||
6762 disable aligned_stack
6764 elif enabled gcc; then
6765 check_optflags -fno-tree-vectorize
6766 check_cflags -Werror=format-security
6767 check_cflags -Werror=implicit-function-declaration
6768 check_cflags -Werror=missing-prototypes
6769 check_cflags -Werror=return-type
6770 check_cflags -Werror=vla
6771 check_cflags -Wformat
6772 check_cflags -fdiagnostics-color=auto
6773 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
6774 if enabled x86_32; then
6777 # BSDs don't guarantee a 16 byte aligned stack, but we can
6778 # request GCC to try to maintain 16 byte alignment throughout
6779 # function calls. Library entry points that might call assembly
6780 # functions align the stack. (The parameter means 2^4 bytes.)
6781 check_cflags -mpreferred-stack-boundary=4
6785 elif enabled llvm_gcc; then
6786 check_cflags -mllvm -stack-alignment=16
6787 elif enabled clang; then
6788 if enabled x86_32; then
6789 # Clang doesn't support maintaining alignment without assuming the
6790 # same alignment in every function. If 16 byte alignment would be
6791 # enabled, one would also have to either add attribute_align_arg on
6792 # every single entry point into the libraries or enable -mstackrealign
6793 # (doing stack realignment in every single function).
6795 mingw32|win32|*bsd*)
6796 disable aligned_stack
6799 check_cflags -mllvm -stack-alignment=16
6800 check_cflags -mstack-alignment=16
6804 check_cflags -mllvm -stack-alignment=16
6805 check_cflags -mstack-alignment=16
6807 check_cflags -Qunused-arguments
6808 check_cflags -Werror=implicit-function-declaration
6809 check_cflags -Werror=missing-prototypes
6810 check_cflags -Werror=return-type
6811 elif enabled cparser; then
6812 add_cflags -Wno-missing-variable-declarations
6813 add_cflags -Wno-empty-statement
6814 elif enabled armcc; then
6815 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
6816 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
6817 # 2523: use of inline assembly is deprecated
6818 add_cflags -W${armcc_opt},--diag_suppress=2523
6819 add_cflags -W${armcc_opt},--diag_suppress=1207
6820 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
6821 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
6822 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
6823 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
6824 elif enabled pathscale; then
6825 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
6827 elif enabled_any msvc icl; then
6828 enabled x86_32 && disable aligned_stack
6829 enabled_all x86_32 debug && add_cflags -Oy-
6830 enabled debug && add_ldflags -debug
6831 enable pragma_deprecated
6832 if enabled icl; then
6833 # -Qansi-alias is basically -fstrict-aliasing, but does not work
6834 # (correctly) on icl 13.x.
6835 test_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
6836 add_cflags -Qansi-alias
6837 # Some inline asm is not compilable in debug
6838 if enabled debug; then
6839 disable ebp_available
6840 disable ebx_available
6843 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
6844 check_cpp_condition log2 crtversion.h "_VC_CRT_MAJOR_VERSION >= 12"
6845 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
6846 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
6847 # (as it ends up if the restrict redefine is done before including stdlib.h), while
6848 # MSVC 2013 and newer can handle it fine.
6849 # If this declspec fails, force including stdlib.h before the restrict redefinition
6850 # happens in config.h.
6851 if [ $restrict_keyword != restrict ]; then
6852 test_cc <<EOF || add_cflags -FIstdlib.h
6853 __declspec($restrict_keyword) void *foo(int);
6856 # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
6857 # Issue has been fixed in MSVC v19.00.24218.
6858 test_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
6859 check_cflags -d2SSAOptimizer-
6860 # enable utf-8 source processing on VS2015 U2 and newer
6861 test_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
6865 for pfx in "" host_; do
6866 varname=${pfx%_}cc_type
6867 eval "type=\$$varname"
6868 if [ "$type" = "msvc" ]; then
6869 test_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
6870 static inline int foo(int a) { return a; }
6877 add_asflags -Qunused-arguments
6883 check_ldflags -Qunused-arguments
6887 enable frame_thread_encoder
6889 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
6891 check_deps $CONFIG_LIST \
6896 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"
6897 enabled avresample && warn "Building with deprecated library libavresample"
6902 disable posix_memalign
6904 *-dos|freedos|opendos)
6905 if test_cpp_condition sys/version.h "defined(__DJGPP__) && __DJGPP__ == 2 && __DJGPP_MINOR__ == 5"; then
6911 flatten_extralibs(){
6915 for entry in $list; do
6919 for e in $entry_copy; do
6921 *_extralibs) nested_entries="$nested_entries$e ";;
6922 *) flat_entries="$flat_entries$e ";;
6925 eval $entry="\$flat_entries"
6927 append $list_name "$nested_entries"
6929 resolve nested_entries
6930 if test -n "$(filter '*_extralibs' $nested_entries)"; then
6931 flatten_extralibs $list_name
6935 flatten_extralibs_wrapper(){
6937 flatten_extralibs $list_name
6940 eval $list_name=\$\(\$ldflags_filter \$$list_name\)
6941 eval printf \''%s'\' \""\$$list_name"\"
6944 for linkunit in $LIBRARY_LIST; do
6945 unset current_extralibs
6946 eval components=\$$(toupper ${linkunit})_COMPONENTS_LIST
6947 for comp in ${components}; do
6948 enabled $comp || continue
6949 comp_extralibs="${comp}_extralibs"
6950 append current_extralibs $comp_extralibs
6952 eval prepend ${linkunit}_extralibs $current_extralibs
6955 for linkunit in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
6956 eval ${linkunit}_extralibs=\$\(flatten_extralibs_wrapper ${linkunit}_extralibs\)
6959 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
6961 for thread in $THREADS_LIST; do
6962 if enabled $thread; then
6963 test -n "$thread_type" &&
6964 die "ERROR: Only one thread type must be selected." ||
6965 thread_type="$thread"
6969 if disabled stdatomic; then
6970 if enabled atomics_gcc; then
6971 add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
6972 elif enabled atomics_win32; then
6973 add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
6974 elif enabled atomics_suncc; then
6975 add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
6976 elif enabled pthreads; then
6977 add_compat atomics/pthread/stdatomic.o
6978 add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
6980 enabled threads && die "Threading is enabled, but no atomics are available"
6981 add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
6985 # Check if requested libraries were found.
6986 for lib in $AUTODETECT_LIBS; do
6987 requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found";
6990 enabled zlib && add_cppflags -DZLIB_CONST
6992 # conditional library dependencies, in any order
6993 enabled afftdn_filter && prepend avfilter_deps "avcodec"
6994 enabled afftfilt_filter && prepend avfilter_deps "avcodec"
6995 enabled afir_filter && prepend avfilter_deps "avcodec"
6996 enabled amovie_filter && prepend avfilter_deps "avformat avcodec"
6997 enabled aresample_filter && prepend avfilter_deps "swresample"
6998 enabled atempo_filter && prepend avfilter_deps "avcodec"
6999 enabled bm3d_filter && prepend avfilter_deps "avcodec"
7000 enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec"
7001 enabled convolve_filter && prepend avfilter_deps "avcodec"
7002 enabled deconvolve_filter && prepend avfilter_deps "avcodec"
7003 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
7004 enabled elbg_filter && prepend avfilter_deps "avcodec"
7005 enabled fftfilt_filter && prepend avfilter_deps "avcodec"
7006 enabled find_rect_filter && prepend avfilter_deps "avformat avcodec"
7007 enabled firequalizer_filter && prepend avfilter_deps "avcodec"
7008 enabled mcdeint_filter && prepend avfilter_deps "avcodec"
7009 enabled movie_filter && prepend avfilter_deps "avformat avcodec"
7010 enabled pan_filter && prepend avfilter_deps "swresample"
7011 enabled pp_filter && prepend avfilter_deps "postproc"
7012 enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
7013 enabled resample_filter && prepend avfilter_deps "avresample"
7014 enabled sab_filter && prepend avfilter_deps "swscale"
7015 enabled scale_filter && prepend avfilter_deps "swscale"
7016 enabled scale2ref_filter && prepend avfilter_deps "swscale"
7017 enabled sofalizer_filter && prepend avfilter_deps "avcodec"
7018 enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale"
7019 enabled showfreqs_filter && prepend avfilter_deps "avcodec"
7020 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
7021 enabled signature_filter && prepend avfilter_deps "avcodec avformat"
7022 enabled smartblur_filter && prepend avfilter_deps "swscale"
7023 enabled spectrumsynth_filter && prepend avfilter_deps "avcodec"
7024 enabled spp_filter && prepend avfilter_deps "avcodec"
7025 enabled sr_filter && prepend avfilter_deps "avformat swscale"
7026 enabled subtitles_filter && prepend avfilter_deps "avformat avcodec"
7027 enabled uspp_filter && prepend avfilter_deps "avcodec"
7028 enabled zoompan_filter && prepend avfilter_deps "swscale"
7030 enabled lavfi_indev && prepend avdevice_deps "avfilter"
7033 enabled_any sdl2_outdev opengl_outdev && enabled sdl2 &&
7034 add_cflags $(filter_out '-Dmain=SDL_main' $sdl2_cflags)
7036 enabled opus_decoder && prepend avcodec_deps "swresample"
7038 # reorder the items at var $1 to align with the items order at var $2 .
7039 # die if an item at $1 is not at $2 .
7042 eval rb_ordered=\$$2
7044 for rb in $rb_in; do
7045 is_in $rb $rb_ordered || die "$rb at \$$1 is not at \$$2"
7049 for rb in $rb_ordered; do
7050 is_in $rb $rb_in && rb_out="$rb_out$rb "
7055 # deps-expand fflib $1: N x {append all expanded deps; unique}
7056 # within a set of N items, N expansions are enough to expose a cycle.
7058 unique ${1}_deps # required for the early break test.
7059 for dummy in $LIBRARY_LIST; do # N iteratios
7060 eval deps=\$${1}_deps
7061 append ${1}_deps $(map 'eval echo \$${v}_deps' $deps)
7063 eval '[ ${#deps} = ${#'${1}_deps'} ]' && break # doesn't expand anymore
7066 eval is_in $1 \$${1}_deps && die "Dependency cycle at ${1}_deps"
7067 reorder_by ${1}_deps LIBRARY_LIST # linking order is expected later
7070 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
7071 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
7073 map 'expand_deps $v' $LIBRARY_LIST
7075 if test "$quiet" != "yes"; then
7077 echo "install prefix $prefix"
7078 echo "source path $source_path"
7079 echo "C compiler $cc"
7080 echo "C library $libc_type"
7081 if test "$host_cc" != "$cc"; then
7082 echo "host C compiler $host_cc"
7083 echo "host C library $host_libc_type"
7085 echo "ARCH $arch ($cpu)"
7086 if test "$build_suffix" != ""; then
7087 echo "build suffix $build_suffix"
7089 if test "$progs_suffix" != ""; then
7090 echo "progs suffix $progs_suffix"
7092 if test "$extra_version" != ""; then
7093 echo "version string suffix $extra_version"
7095 echo "big-endian ${bigendian-no}"
7096 echo "runtime cpu detection ${runtime_cpudetect-no}"
7097 if enabled x86; then
7098 echo "standalone assembly ${x86asm-no}"
7099 echo "x86 assembler ${x86asmexe}"
7100 echo "MMX enabled ${mmx-no}"
7101 echo "MMXEXT enabled ${mmxext-no}"
7102 echo "3DNow! enabled ${amd3dnow-no}"
7103 echo "3DNow! extended enabled ${amd3dnowext-no}"
7104 echo "SSE enabled ${sse-no}"
7105 echo "SSSE3 enabled ${ssse3-no}"
7106 echo "AESNI enabled ${aesni-no}"
7107 echo "AVX enabled ${avx-no}"
7108 echo "AVX2 enabled ${avx2-no}"
7109 echo "AVX-512 enabled ${avx512-no}"
7110 echo "XOP enabled ${xop-no}"
7111 echo "FMA3 enabled ${fma3-no}"
7112 echo "FMA4 enabled ${fma4-no}"
7113 echo "i686 features enabled ${i686-no}"
7114 echo "CMOV is fast ${fast_cmov-no}"
7115 echo "EBX available ${ebx_available-no}"
7116 echo "EBP available ${ebp_available-no}"
7118 if enabled aarch64; then
7119 echo "NEON enabled ${neon-no}"
7120 echo "VFP enabled ${vfp-no}"
7122 if enabled arm; then
7123 echo "ARMv5TE enabled ${armv5te-no}"
7124 echo "ARMv6 enabled ${armv6-no}"
7125 echo "ARMv6T2 enabled ${armv6t2-no}"
7126 echo "VFP enabled ${vfp-no}"
7127 echo "NEON enabled ${neon-no}"
7128 echo "THUMB enabled ${thumb-no}"
7130 if enabled mips; then
7131 echo "MIPS FPU enabled ${mipsfpu-no}"
7132 echo "MIPS DSP R1 enabled ${mipsdsp-no}"
7133 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
7134 echo "MIPS MSA enabled ${msa-no}"
7135 echo "MIPS MSA2 enabled ${msa2-no}"
7136 echo "LOONGSON MMI enabled ${mmi-no}"
7138 if enabled ppc; then
7139 echo "AltiVec enabled ${altivec-no}"
7140 echo "VSX enabled ${vsx-no}"
7141 echo "POWER8 enabled ${power8-no}"
7142 echo "PPC 4xx optimizations ${ppc4xx-no}"
7143 echo "dcbzl available ${dcbzl-no}"
7145 echo "debug symbols ${debug-no}"
7146 echo "strip symbols ${stripping-no}"
7147 echo "optimize for size ${small-no}"
7148 echo "optimizations ${optimizations-no}"
7149 echo "static ${static-no}"
7150 echo "shared ${shared-no}"
7151 echo "postprocessing support ${postproc-no}"
7152 echo "network support ${network-no}"
7153 echo "threading support ${thread_type-no}"
7154 echo "safe bitstream reader ${safe_bitstream_reader-no}"
7155 echo "texi2html enabled ${texi2html-no}"
7156 echo "perl enabled ${perl-no}"
7157 echo "pod2man enabled ${pod2man-no}"
7158 echo "makeinfo enabled ${makeinfo-no}"
7159 echo "makeinfo supports HTML ${makeinfo_html-no}"
7160 test -n "$random_seed" &&
7161 echo "random seed ${random_seed}"
7164 echo "External libraries:"
7165 print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | print_in_columns
7168 echo "External libraries providing hardware acceleration:"
7169 print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | print_in_columns
7173 print_enabled '' $LIBRARY_LIST | print_in_columns
7177 print_enabled '' $PROGRAM_LIST | print_in_columns
7180 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
7181 echo "Enabled ${type}s:"
7182 eval list=\$$(toupper $type)_LIST
7183 print_enabled '_*' $list | print_in_columns
7187 if test -n "$ignore_tests"; then
7188 ignore_tests=$(echo $ignore_tests | tr ',' ' ')
7189 echo "Ignored FATE tests:"
7190 echo $ignore_tests | print_in_columns
7194 echo "License: $license"
7196 fi # test "$quiet" != "yes"
7198 if test -n "$WARN_IF_GETS_DISABLED_LIST"; then
7199 for cfg in $WARN_IF_GETS_DISABLED_LIST; do
7200 if disabled $cfg; then
7201 varname=${cfg}_disable_reason
7202 eval "warn \"Disabled $cfg because \$$varname\""
7207 if test -n "$WARNINGS"; then
7208 printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color"
7209 enabled fatal_warnings && exit 1
7212 test -e Makefile || echo "include $source_path/Makefile" > Makefile
7215 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
7218 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" > ffbuild/config.fate
7220 enabled stripping || strip="echo skipping strip"
7221 enabled stripping || striptype=""
7223 config_files="$TMPH ffbuild/config.mak doc/config.texi"
7225 cat > ffbuild/config.mak <<EOF
7226 # Automatically generated by configure - do not modify!
7227 ifndef FFMPEG_CONFIG_MAK
7229 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
7231 LIBDIR=\$(DESTDIR)$libdir
7232 SHLIBDIR=\$(DESTDIR)$shlibdir
7233 INCDIR=\$(DESTDIR)$incdir
7234 BINDIR=\$(DESTDIR)$bindir
7235 DATADIR=\$(DESTDIR)$datadir
7236 DOCDIR=\$(DESTDIR)$docdir
7237 MANDIR=\$(DESTDIR)$mandir
7238 PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
7239 INSTALL_NAME_DIR=$install_name_dir
7240 SRC_PATH=$source_path
7241 SRC_LINK=$source_link
7242 ifndef MAIN_MAKEFILE
7243 SRC_PATH:=\$(SRC_PATH:.%=..%)
7247 INTRINSICS=$intrinsics
7248 EXTERN_PREFIX=$extern_prefix
7255 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
7257 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
7259 DEPX86ASM=$x86asmexe
7260 DEPX86ASMFLAGS=\$(X86ASMFLAGS)
7268 STRIPTYPE=$striptype
7275 OBJCFLAGS=$OBJCFLAGS
7277 NVCCFLAGS=$nvccflags
7299 LDEXEFLAGS=$LDEXEFLAGS
7300 LDSOFLAGS=$LDSOFLAGS
7301 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
7302 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
7303 X86ASMFLAGS=$X86ASMFLAGS
7304 BUILDSUF=$build_suffix
7305 PROGSSUF=$progs_suffix
7313 EXTRA_VERSION=$extra_version
7316 CCDEP_FLAGS=$CCDEP_FLAGS
7318 ASDEP_FLAGS=$ASDEP_FLAGS
7319 X86ASMDEP=$X86ASMDEP
7320 X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS
7321 CC_DEPFLAGS=$CC_DEPFLAGS
7322 AS_DEPFLAGS=$AS_DEPFLAGS
7323 X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS
7326 HOSTCFLAGS=$host_cflags
7327 HOSTCPPFLAGS=$host_cppflags
7328 HOSTEXESUF=$HOSTEXESUF
7329 HOSTLDFLAGS=$host_ldflags
7330 HOSTEXTRALIBS=$host_extralibs
7332 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
7333 HOSTCCDEP=$HOSTCCDEP
7334 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
7335 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
7339 TARGET_EXEC=$target_exec $target_exec_args
7340 TARGET_PATH=$target_path
7341 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
7342 CFLAGS-ffplay=${sdl2_cflags}
7343 CFLAGS_HEADERS=$CFLAGS_HEADERS
7344 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
7345 EXTRALIBS=$extralibs
7346 COMPAT_OBJS=$compat_objs
7348 LIBTARGET=${LIBTARGET}
7349 SLIBNAME=${SLIBNAME}
7350 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
7351 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
7352 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
7353 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
7354 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
7355 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
7356 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
7357 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
7358 VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
7359 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
7360 NOREDZONE_FLAGS=$noredzone_flags
7361 LIBFUZZER_PATH=$libfuzzer_path
7362 IGNORE_TESTS=$ignore_tests
7365 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST
7367 for entry in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
7368 eval echo "EXTRALIBS-${entry}=\$${entry}_extralibs" >> ffbuild/config.mak
7372 /* Automatically generated by configure - do not modify! */
7373 #ifndef FFMPEG_CONFIG_H
7374 #define FFMPEG_CONFIG_H
7375 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
7376 #define FFMPEG_LICENSE "$(c_escape $license)"
7377 #define CONFIG_THIS_YEAR 2019
7378 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
7379 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
7380 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
7381 #define av_restrict $restrict_keyword
7382 #define EXTERN_PREFIX "${extern_prefix}"
7383 #define EXTERN_ASM ${extern_prefix}
7384 #define BUILDSUF "$build_suffix"
7385 #define SLIBSUF "$SLIBSUF"
7386 #define HAVE_MMX2 HAVE_MMXEXT
7387 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
7390 test -n "$assert_level" &&
7391 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
7393 test -n "$malloc_prefix" &&
7394 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
7396 if enabled x86asm; then
7397 append config_files $TMPASM
7399 ; Automatically generated by configure - do not modify!
7403 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
7409 echo "@c auto-generated by configure - do not modify! " > doc/config.texi
7411 print_config ARCH_ "$config_files" $ARCH_LIST
7412 print_config HAVE_ "$config_files" $HAVE_LIST
7413 print_config CONFIG_ "$config_files" $CONFIG_LIST \
7417 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
7418 echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak
7420 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
7421 cp_if_changed $TMPH config.h
7422 touch ffbuild/.config
7424 enabled x86asm && cp_if_changed $TMPASM config.asm
7427 /* Generated by ffmpeg configure */
7428 #ifndef AVUTIL_AVCONFIG_H
7429 #define AVUTIL_AVCONFIG_H
7432 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
7434 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
7436 cp_if_changed $TMPH libavutil/avconfig.h
7438 # full_filter_name_foo=vf_foo
7439 # full_filter_name_bar=asrc_bar
7441 eval "$(sed -n "s/^extern AVFilter ff_\([avfsinkrc]\{2,5\}\)_\(.*\);/full_filter_name_\2=\1_\2/p" $source_path/libavfilter/allfilters.c)"
7443 # generate the lists of enabled components
7444 print_enabled_components(){
7449 echo "static const $struct_name * const $name[] = {" > $TMPH
7454 eval c=\$full_filter_name_${c%_filter}
7457 c=${c%_indev}_demuxer
7460 c=${c%_outdev}_muxer
7463 printf " &ff_%s,\n" $c >> $TMPH
7466 if [ "$name" = "filter_list" ]; then
7467 for c in asrc_abuffer vsrc_buffer asink_abuffer vsink_buffer; do
7468 printf " &ff_%s,\n" $c >> $TMPH
7471 echo " NULL };" >> $TMPH
7472 cp_if_changed $TMPH $file
7475 print_enabled_components libavfilter/filter_list.c AVFilter filter_list $FILTER_LIST
7476 print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST
7477 print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST
7478 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
7479 print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST
7480 print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list $MUXER_LIST
7481 print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST
7482 print_enabled_components libavdevice/outdev_list.c AVOutputFormat outdev_list $OUTDEV_LIST
7483 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
7485 # Settings for pkg-config files
7488 # Automatically generated by configure - do not modify!
7490 build_suffix=$build_suffix
7494 rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}")
7495 source_path=${source_path}
7498 extralibs_avutil="$avutil_extralibs"
7499 extralibs_avcodec="$avcodec_extralibs"
7500 extralibs_avformat="$avformat_extralibs"
7501 extralibs_avdevice="$avdevice_extralibs"
7502 extralibs_avfilter="$avfilter_extralibs"
7503 extralibs_avresample="$avresample_extralibs"
7504 extralibs_postproc="$postproc_extralibs"
7505 extralibs_swscale="$swscale_extralibs"
7506 extralibs_swresample="$swresample_extralibs"
7509 for lib in $LIBRARY_LIST; do
7510 lib_deps="$(eval echo \$${lib}_deps)"
7511 echo ${lib}_deps=\"$lib_deps\" >> $TMPH
7514 cp_if_changed $TMPH ffbuild/config.sh