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 or libtls is not used [no]
217 --disable-iconv disable iconv [autodetect]
218 --enable-jni enable JNI support [no]
219 --enable-ladspa enable LADSPA audio filtering [no]
220 --enable-libaom enable AV1 video encoding/decoding via libaom [no]
221 --enable-libass enable libass subtitles rendering,
222 needed for subtitles and ass filter [no]
223 --enable-libbluray enable BluRay reading using libbluray [no]
224 --enable-libbs2b enable bs2b DSP library [no]
225 --enable-libcaca enable textual display using libcaca [no]
226 --enable-libcelt enable CELT decoding via libcelt [no]
227 --enable-libcdio enable audio CD grabbing with libcdio [no]
228 --enable-libcodec2 enable codec2 en/decoding using libcodec2 [no]
229 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
231 --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
232 --enable-libflite enable flite (voice synthesis) support via libflite [no]
233 --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
234 --enable-libfreetype enable libfreetype, needed for drawtext filter [no]
235 --enable-libfribidi enable libfribidi, improves drawtext filter [no]
236 --enable-libgme enable Game Music Emu via libgme [no]
237 --enable-libgsm enable GSM de/encoding via libgsm [no]
238 --enable-libiec61883 enable iec61883 via libiec61883 [no]
239 --enable-libilbc enable iLBC de/encoding via libilbc [no]
240 --enable-libjack enable JACK audio sound server [no]
241 --enable-libkvazaar enable HEVC encoding via libkvazaar [no]
242 --enable-libmodplug enable ModPlug via libmodplug [no]
243 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
244 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
245 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
246 --enable-libopencv enable video filtering via libopencv [no]
247 --enable-libopenh264 enable H.264 encoding via OpenH264 [no]
248 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
249 --enable-libopenmpt enable decoding tracked files via libopenmpt [no]
250 --enable-libopus enable Opus de/encoding via libopus [no]
251 --enable-libpulse enable Pulseaudio input via libpulse [no]
252 --enable-librsvg enable SVG rasterization via librsvg [no]
253 --enable-librubberband enable rubberband needed for rubberband filter [no]
254 --enable-librtmp enable RTMP[E] support via librtmp [no]
255 --enable-libshine enable fixed-point MP3 encoding via libshine [no]
256 --enable-libsmbclient enable Samba protocol via libsmbclient [no]
257 --enable-libsnappy enable Snappy compression, needed for hap encoding [no]
258 --enable-libsoxr enable Include libsoxr resampling [no]
259 --enable-libspeex enable Speex de/encoding via libspeex [no]
260 --enable-libsrt enable Haivision SRT protocol via libsrt [no]
261 --enable-libssh enable SFTP protocol via libssh [no]
262 --enable-libtesseract enable Tesseract, needed for ocr filter [no]
263 --enable-libtheora enable Theora encoding via libtheora [no]
264 --enable-libtls enable LibreSSL (via libtls), needed for https support
265 if openssl or gnutls is not used [no]
266 --enable-libtwolame enable MP2 encoding via libtwolame [no]
267 --enable-libv4l2 enable libv4l2/v4l-utils [no]
268 --enable-libvidstab enable video stabilization using vid.stab [no]
269 --enable-libvmaf enable vmaf filter via libvmaf [no]
270 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
271 --enable-libvorbis enable Vorbis en/decoding via libvorbis,
272 native implementation exists [no]
273 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
274 --enable-libwavpack enable wavpack encoding via libwavpack [no]
275 --enable-libwebp enable WebP encoding via libwebp [no]
276 --enable-libx264 enable H.264 encoding via x264 [no]
277 --enable-libx265 enable HEVC encoding via x265 [no]
278 --enable-libxavs enable AVS encoding via xavs [no]
279 --enable-libxcb enable X11 grabbing using XCB [autodetect]
280 --enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
281 --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
282 --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
283 --enable-libxvid enable Xvid encoding via xvidcore,
284 native MPEG-4/Xvid encoder exists [no]
285 --enable-libxml2 enable XML parsing using the C library libxml2 [no]
286 --enable-libzimg enable z.lib, needed for zscale filter [no]
287 --enable-libzmq enable message passing via libzmq [no]
288 --enable-libzvbi enable teletext support via libzvbi [no]
289 --enable-lv2 enable LV2 audio filtering [no]
290 --disable-lzma disable lzma [autodetect]
291 --enable-decklink enable Blackmagic DeckLink I/O support [no]
292 --enable-libndi_newtek enable Newteck NDI I/O support [no]
293 --enable-mediacodec enable Android MediaCodec support [no]
294 --enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
295 --enable-openal enable OpenAL 1.1 capture support [no]
296 --enable-opencl enable OpenCL processing [no]
297 --enable-opengl enable OpenGL rendering [no]
298 --enable-openssl enable openssl, needed for https support
299 if gnutls or libtls is not used [no]
300 --disable-sndio disable sndio support [autodetect]
301 --disable-schannel disable SChannel SSP, needed for TLS support on
302 Windows if openssl and gnutls are not used [autodetect]
303 --disable-sdl2 disable sdl2 [autodetect]
304 --disable-securetransport disable Secure Transport, needed for TLS support
305 on OSX if openssl and gnutls are not used [autodetect]
306 --disable-xlib disable xlib [autodetect]
307 --disable-zlib disable zlib [autodetect]
309 The following libraries provide various hardware acceleration features:
310 --disable-amf disable AMF video encoding code [autodetect]
311 --disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
312 --enable-cuda-sdk enable CUDA features that require the CUDA SDK [no]
313 --disable-cuvid disable Nvidia CUVID support [autodetect]
314 --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
315 --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
316 --disable-ffnvcodec disable dynamically linked Nvidia code [autodetect]
317 --enable-libdrm enable DRM code (Linux) [no]
318 --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
319 --enable-libnpp enable Nvidia Performance Primitives-based code [no]
320 --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
321 --disable-nvdec disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
322 --disable-nvenc disable Nvidia video encoding code [autodetect]
323 --enable-omx enable OpenMAX IL code [no]
324 --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
325 --enable-rkmpp enable Rockchip Media Process Platform code [no]
326 --disable-v4l2-m2m disable V4L2 mem2mem code [autodetect]
327 --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
328 --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
329 --disable-videotoolbox disable VideoToolbox code [autodetect]
332 --arch=ARCH select architecture [$arch]
333 --cpu=CPU select the minimum required CPU (affects
334 instruction selection, may crash on older CPUs)
335 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
336 --progs-suffix=SUFFIX program name suffix []
337 --enable-cross-compile assume a cross-compiler is used
338 --sysroot=PATH root of cross-build tree
339 --sysinclude=PATH location of cross-build system headers
340 --target-os=OS compiler targets OS [$target_os]
341 --target-exec=CMD command to run executables on target
342 --target-path=DIR path to view of build directory on target
343 --target-samples=DIR path to samples directory on target
344 --tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
345 --toolchain=NAME set tool defaults according to NAME
346 (gcc-asan, clang-asan, gcc-msan, clang-msan,
347 gcc-tsan, clang-tsan, gcc-usan, clang-usan,
348 valgrind-massif, valgrind-memcheck,
349 msvc, icl, gcov, llvm-cov, hardened)
350 --nm=NM use nm tool NM [$nm_default]
351 --ar=AR use archive tool AR [$ar_default]
352 --as=AS use assembler AS [$as_default]
353 --ln_s=LN_S use symbolic link tool LN_S [$ln_s_default]
354 --strip=STRIP use strip tool STRIP [$strip_default]
355 --windres=WINDRES use windows resource compiler WINDRES [$windres_default]
356 --x86asmexe=EXE use nasm-compatible assembler EXE [$x86asmexe_default]
357 --cc=CC use C compiler CC [$cc_default]
358 --cxx=CXX use C compiler CXX [$cxx_default]
359 --objcc=OCC use ObjC compiler OCC [$cc_default]
360 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
361 --nvcc=NVCC use Nvidia CUDA compiler NVCC [$nvcc_default]
362 --ld=LD use linker LD [$ld_default]
363 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
364 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
365 --ranlib=RANLIB use ranlib RANLIB [$ranlib_default]
366 --doxygen=DOXYGEN use DOXYGEN to generate API doc [$doxygen_default]
367 --host-cc=HOSTCC use host C compiler HOSTCC
368 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
369 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
370 --host-ld=HOSTLD use host linker HOSTLD
371 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
372 --host-libs=HLIBS use libs HLIBS when linking for host
373 --host-os=OS compiler host OS [$target_os]
374 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
375 --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
376 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
377 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
378 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
379 --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
380 --extra-libs=ELIBS add ELIBS [$ELIBS]
381 --extra-version=STRING version string suffix []
382 --optflags=OPTFLAGS override optimization-related compiler flags
383 --nvccflags=NVCCFLAGS override nvcc flags [$nvccflags_default]
384 --build-suffix=SUFFIX library name suffix []
385 --enable-pic build position-independent code
386 --enable-thumb compile for Thumb instruction set
387 --enable-lto use link-time optimization
388 --env="ENV=override" override the environment variables
390 Advanced options (experts only):
391 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
392 --custom-allocator=NAME use a supported custom allocator
393 --disable-symver disable symbol versioning
394 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
395 --disable-safe-bitstream-reader
396 disable buffer boundary checking in bitreaders
397 (faster, but may crash)
398 --sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default]
400 Optimization options (experts only):
401 --disable-asm disable all assembly optimizations
402 --disable-altivec disable AltiVec optimizations
403 --disable-vsx disable VSX optimizations
404 --disable-power8 disable POWER8 optimizations
405 --disable-amd3dnow disable 3DNow! optimizations
406 --disable-amd3dnowext disable 3DNow! extended optimizations
407 --disable-mmx disable MMX optimizations
408 --disable-mmxext disable MMXEXT optimizations
409 --disable-sse disable SSE optimizations
410 --disable-sse2 disable SSE2 optimizations
411 --disable-sse3 disable SSE3 optimizations
412 --disable-ssse3 disable SSSE3 optimizations
413 --disable-sse4 disable SSE4 optimizations
414 --disable-sse42 disable SSE4.2 optimizations
415 --disable-avx disable AVX optimizations
416 --disable-xop disable XOP optimizations
417 --disable-fma3 disable FMA3 optimizations
418 --disable-fma4 disable FMA4 optimizations
419 --disable-avx2 disable AVX2 optimizations
420 --disable-avx512 disable AVX-512 optimizations
421 --disable-aesni disable AESNI optimizations
422 --disable-armv5te disable armv5te optimizations
423 --disable-armv6 disable armv6 optimizations
424 --disable-armv6t2 disable armv6t2 optimizations
425 --disable-vfp disable VFP optimizations
426 --disable-neon disable NEON optimizations
427 --disable-inline-asm disable use of inline assembly
428 --disable-x86asm disable use of standalone x86 assembly
429 --disable-mipsdsp disable MIPS DSP ASE R1 optimizations
430 --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
431 --disable-msa disable MSA optimizations
432 --disable-mipsfpu disable floating point MIPS optimizations
433 --disable-mmi disable Loongson SIMD optimizations
434 --disable-fast-unaligned consider unaligned accesses slow
436 Developer options (useful when working on FFmpeg itself):
437 --disable-debug disable debugging symbols
438 --enable-debug=LEVEL set the debug level [$debuglevel]
439 --disable-optimizations disable compiler optimizations
440 --enable-extra-warnings enable more compiler warnings
441 --disable-stripping disable stripping of executables and shared libraries
442 --assert-level=level 0(default), 1 or 2, amount of assertion testing,
443 2 causes a slowdown at runtime.
444 --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
445 --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
446 leaks and errors, using the specified valgrind binary.
447 Cannot be combined with --target-exec
448 --enable-ftrapv Trap arithmetic overflows
449 --samples=PATH location of test samples for FATE, if not set use
450 \$FATE_SAMPLES at make invocation time.
451 --enable-neon-clobber-test check NEON registers for clobbering (should be
452 used only for debugging purposes)
453 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
454 should be used only for debugging purposes)
455 --enable-random randomly enable/disable components
457 --enable-random=LIST randomly enable/disable specific components or
458 --disable-random=LIST component groups. LIST is a comma-separated list
459 of NAME[:PROB] entries where NAME is a component
460 (group) and PROB the probability associated with
462 --random-seed=VALUE seed value for --enable/disable-random
463 --disable-valgrind-backtrace do not print a backtrace under Valgrind
464 (only applies to --disable-optimizations builds)
465 --enable-osfuzz Enable building fuzzer tool
466 --libfuzzer=PATH path to libfuzzer
467 --ignore-tests=TESTS comma-separated list (without "fate-" prefix
468 in the name) of tests whose result is ignored
469 --enable-linux-perf enable Linux Performance Monitor API
471 NOTE: Object files are built at the place where configure is launched.
476 if test -t 1 && which tput >/dev/null 2>&1; then
477 ncolors=$(tput colors)
478 if test -n "$ncolors" && test $ncolors -ge 8; then
479 bold_color=$(tput bold)
480 warn_color=$(tput setaf 3)
481 error_color=$(tput setaf 1)
482 reset_color=$(tput sgr0)
484 # 72 used instead of 80 since that's the default of pr
490 echo "$@" >> $logfile
495 pr -n -t $1 >> $logfile
501 WARNINGS="${WARNINGS}WARNING: $*\n"
506 echo "$error_color$bold_color$@$reset_color"
509 If you think configure made a mistake, make sure you are using the latest
510 version from Git. If the latest version fails, report the problem to the
511 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
513 if disabled logging; then
515 Rerun configure with logging enabled (do not use --disable-logging), and
516 include the log this produces with your report.
520 Include the log file "$logfile" produced by configure as this will help
527 # Avoid locale weirdness, besides we really just want to translate ASCII.
529 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
533 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
537 echo "$*" | sed 's/["\\]/\\\0/g'
541 v=$(echo "$1" | sed "s/'/'\\\\''/g")
542 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
547 echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
554 eval "case '$v' in $pat) printf '%s ' '$v' ;; esac"
562 eval "case '$v' in $pat) ;; *) printf '%s ' '$v' ;; esac"
569 for v; do eval $m; done
575 for v; do echo ${v}${suffix}; done
581 for v; do echo ${v%$suffix}; done
596 eval : \${$var:=$value}
601 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
607 eval $(sanitize_var_name "$var")='$*'
611 eval echo \$$(sanitize_var_name "$1")
616 eval level=\${${pvar}_level:=0}
617 eval ${pvar}_${level}="\$$pvar"
618 eval ${pvar}_level=$(($level+1))
624 eval level=\${${pvar}_level:-0}
625 test $level = 0 && continue
626 eval level=$(($level-1))
627 eval $pvar="\${${pvar}_${level}}"
628 eval ${pvar}_level=$level
629 eval unset ${pvar}_${level}
635 eval ${var}_requested=yes
658 enable $(sanitize_var_name $var)
664 disable $(sanitize_var_name $var)
670 enabled $var && continue
671 eval sel="\$${var}_select"
672 eval sgs="\$${var}_suggest"
676 enable_deep_weak $sgs
688 disabled $var && continue
697 test "${1#!}" = "$1" && op="=" || op="!="
698 eval test "x\$${1#!}_requested" $op "xyes"
702 test "${1#!}" = "$1" && op="=" || op="!="
703 eval test "x\$${1#!}" $op "xyes"
707 test "${1#!}" = "$1" && op="=" || op="!="
708 eval test "x\$${1#!}" $op "xno"
713 enabled $opt || return 1
719 disabled $opt || return 1
725 enabled $opt && return 0
731 disabled $opt && return 0
738 eval : \${$opt:=\$${opt}_default}
746 [ $var = $value ] && return 0
753 enabled ${cfg}_checking && die "Circular dependency for $cfg."
754 disabled ${cfg}_checking && continue
755 enable ${cfg}_checking
757 eval dep_all="\$${cfg}_deps"
758 eval dep_any="\$${cfg}_deps_any"
759 eval dep_con="\$${cfg}_conflict"
760 eval dep_sel="\$${cfg}_select"
761 eval dep_sgs="\$${cfg}_suggest"
762 eval dep_ifa="\$${cfg}_if"
763 eval dep_ifn="\$${cfg}_if_any"
765 pushvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
766 check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
767 popvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
769 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
770 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
771 enabled_all $dep_all || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not all dependencies are satisfied: $dep_all"; }
772 enabled_any $dep_any || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not any dependency is satisfied: $dep_any"; }
773 disabled_all $dep_con || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some conflicting dependencies are unsatisfied: $dep_con"; }
774 disabled_any $dep_sel && { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some selected dependency is unsatisfied: $dep_sel"; }
776 enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
778 for dep in $dep_all $dep_any $dep_sel $dep_sgs; do
779 # filter out library deps, these do not belong in extralibs
780 is_in $dep $LIBRARY_LIST && continue
781 enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
784 disable ${cfg}_checking
792 map 'eval echo "$v \${$v:-no}"' "$@" |
793 awk "BEGIN { split(\"$files\", files) }
795 c = \"$pfx\" toupper(\$1);
801 if (file ~ /\\.h\$/) {
802 printf(\"#define %s %d\\n\", c, v) >>file;
803 } else if (file ~ /\\.asm\$/) {
804 printf(\"%%define %s %d\\n\", c, v) >>file;
805 } else if (file ~ /\\.mak\$/) {
806 n = -v ? \"\" : \"!\";
807 printf(\"%s%s=yes\\n\", n, c) >>file;
808 } else if (file ~ /\\.texi\$/) {
809 pre = -v ? \"\" : \"@c \";
812 gsub(/_/, \"-\", c2);
813 printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
823 enabled $v && printf "%s\n" ${v%$suf}
830 eval "$var=\"\$$var $*\""
836 eval "$var=\"$* \$$var\""
842 for tok in $(eval echo \$$var); do
843 uniq_list="$(filter_out $tok $uniq_list) $tok"
845 eval "$var=\"${uniq_list}\""
851 for entry in $(eval echo \$$var); do
852 tmpvar="$tmpvar $(eval echo \$${entry})"
854 eval "$var=\"${tmpvar}\""
862 append CFLAGS $($cflags_filter "$@")
865 add_cflags_headers(){
866 append CFLAGS_HEADERS $($cflags_filter "$@")
870 append CXXFLAGS $($cflags_filter "$@")
874 append ASFLAGS $($asflags_filter "$@")
878 append OBJCFLAGS $($objcflags_filter "$@")
882 append LDFLAGS $($ldflags_filter "$@")
886 append LDEXEFLAGS $($ldflags_filter "$@")
890 append LDSOFLAGS $($ldflags_filter "$@")
894 append ASMSTRIPFLAGS "$@"
898 prepend extralibs $($ldflags_filter "$@")
902 append host_cppflags "$@"
906 append host_cflags $($host_cflags_filter "$@")
910 append host_ldflags $($host_ldflags_filter "$@")
914 append compat_objs $1
916 map 'add_cppflags -D$v' "$@"
921 "$@" >> $logfile 2>&1
926 stat "$1" >> $logfile 2>&1
930 eval printf '%s\\n' $CC_O
934 eval printf '%s\\n' $CC_E
941 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
948 test_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
955 test_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
962 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
966 eval printf '%s\\n' $AS_O
973 test_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
977 eval printf '%s\\n' $X86ASM_O
985 test_cmd $x86asmexe $X86ASMFLAGS -Werror "$@" $(x86asm_o $TMPO) $TMPASM
991 disabled $cmd && return
993 test_cmd $@ && enable $cmd
1002 test_as $@ <<EOF && enable $name
1008 log check_inline_asm "$@"
1013 test_cc "$@" <<EOF && enable $name
1014 void foo(void){ __asm__ volatile($code); }
1018 check_inline_asm_flags(){
1019 log check_inline_asm_flags "$@"
1024 while [ "$1" != "" ]; do
1030 void foo(void){ __asm__ volatile($code); }
1033 test_cmd $cc $CPPFLAGS $CFLAGS $flags "$@" $CC_C $(cc_o $TMPO) $TMPC &&
1034 enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
1039 check_inline_asm ${1}_inline "$2"
1040 check_as ${1}_external "$2"
1044 log check_x86asm "$@"
1048 test_x86asm "$@" && enable $name
1052 eval printf '%s\\n' $LD_O
1059 flags=$(filter_out '-l*|*.so' $@)
1060 libs=$(filter '-l*|*.so' $@)
1061 test_$type $($cflags_filter $flags) || return
1062 flags=$($ldflags_filter $flags)
1063 libs=$($ldflags_filter $libs)
1064 test_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
1073 test_ld $type $@ && enable $name
1078 test "${hdr%.h}" = "${hdr}" &&
1079 echo "#include $hdr" ||
1080 echo "#include <$hdr>"
1090 for hdr in $headers; do
1093 echo "int main(void) { $code; return 0; }"
1094 } | test_$check "$@"
1098 log check_cppflags "$@"
1099 test_cpp "$@" <<EOF && append CPPFLAGS "$@"
1105 log test_cflags "$@"
1106 set -- $($cflags_filter "$@")
1113 log check_cflags "$@"
1114 test_cflags "$@" && add_cflags "$@"
1118 log check_cxxflags "$@"
1119 set -- $($cflags_filter "$@")
1120 test_cxx "$@" <<EOF && append CXXFLAGS "$@"
1126 log test_objcflags "$@"
1127 set -- $($objcflags_filter "$@")
1128 test_objcc "$@" <<EOF
1134 log check_objcflags "$@"
1135 test_objcflags "$@" && add_objcflags "$@"
1139 log test_ldflags "$@"
1140 set -- $($ldflags_filter "$@")
1141 test_ld "cc" "$@" <<EOF
1142 int main(void){ return 0; }
1147 log check_ldflags "$@"
1148 test_ldflags "$@" && add_ldflags "$@"
1152 log test_stripflags "$@"
1153 # call test_cc to get a fresh TMPO
1155 int main(void) { return 0; }
1157 test_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
1161 log check_stripflags "$@"
1162 test_stripflags "$@" && add_stripflags "$@"
1166 log check_header "$@"
1169 disable_sanitized $headers
1171 for hdr in $headers; do
1175 } | test_cpp "$@" && enable_sanitized $headers
1178 check_header_objcc(){
1179 log check_header_objcc "$@"
1183 disable_sanitized $header
1185 echo "#include <$header>"
1186 echo "int main(void) { return 0; }"
1187 } | test_objcc && test_stat "$TMPO" && enable_sanitized $header
1190 check_apple_framework(){
1191 log check_apple_framework "$@"
1193 name="$(tolower $framework)"
1194 header="${framework}/${framework}.h"
1196 check_header_objcc $header &&
1197 enable $name && eval ${name}_extralibs='"-framework $framework"'
1205 test_ld "cc" "$@" <<EOF && enable $func
1207 int main(void){ $func(); }
1211 check_complexfunc(){
1212 log check_complexfunc "$@"
1216 test $narg = 2 && args="f, g" || args="f * I"
1218 test_ld "cc" "$@" <<EOF && enable $func
1219 #include <complex.h>
1221 float foo(complex float f, complex float g) { return $func($args); }
1222 int main(void){ return (int) foo; }
1227 log check_mathfunc "$@"
1231 test $narg = 2 && args="f, g" || args="f"
1233 test_ld "cc" "$@" <<EOF && enable $func
1235 float foo(float f, float g) { return $func($args); }
1236 int main(void){ return (int) foo; }
1240 check_func_headers(){
1241 log check_func_headers "$@"
1246 for hdr in $headers; do
1249 echo "#include <stdint.h>"
1250 for func in $funcs; do
1251 echo "long check_$func(void) { return (long) $func; }"
1253 echo "int main(void) { int ret = 0;"
1254 # LTO could optimize out the test functions without this
1255 for func in $funcs; do
1256 echo " ret |= ((intptr_t)check_$func) & 0xFFFF;"
1258 echo "return ret; }"
1259 } | test_ld "cc" "$@" && enable $funcs && enable_sanitized $headers
1262 check_class_headers_cpp(){
1263 log check_class_headers_cpp "$@"
1268 for hdr in $headers; do
1269 echo "#include <$hdr>"
1271 echo "int main(void) { "
1273 for class in $classes; do
1274 echo "$class obj$i;"
1278 } | test_ld "cxx" "$@" && enable $funcs && enable_sanitized $headers
1281 test_cpp_condition(){
1282 log test_cpp_condition "$@"
1289 #error "unsatisfied condition: $condition"
1294 check_cpp_condition(){
1295 log check_cpp_condition "$@"
1299 test_cpp_condition "$@" && enable $name
1303 log test_cflags_cc "$@"
1308 set -- $($cflags_filter "$flags")
1312 #error "unsatisfied condition: $condition"
1324 check_func_headers "$headers" "$funcs" "$@" &&
1325 enable $name && eval ${name}_extralibs="\$@"
1329 log check_lib_cpp "$@"
1335 check_class_headers_cpp "$headers" "$classes" "$@" &&
1336 enable $name && eval ${name}_extralibs="\$@"
1340 log test_pkg_config "$@"
1348 test_cmd $pkg_config --exists --print-errors $pkg_version || return
1349 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1350 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1351 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1353 set_sanitized "${name}_cflags" $pkg_cflags &&
1354 set_sanitized "${name}_extralibs" $pkg_libs
1358 log check_pkg_config "$@"
1360 test_pkg_config "$@" &&
1361 eval add_cflags \$${name}_cflags
1365 test_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1369 log check_exec_crash "$@"
1372 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1373 # are safe but may not be available everywhere. Thus we use
1374 # raise(SIGTERM) instead. The check is run in a subshell so we
1375 # can redirect the "Terminated" message from the shell. SIGBUS
1376 # is not defined by standard C so it is used conditionally.
1378 (test_exec "$@") >> $logfile 2>&1 <<EOF
1380 static void sighandler(int sig){
1386 int (*func_ptr)(void) = foo;
1388 signal(SIGILL, sighandler);
1389 signal(SIGFPE, sighandler);
1390 signal(SIGSEGV, sighandler);
1392 signal(SIGBUS, sighandler);
1404 disable_sanitized "$type"
1405 test_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
1409 log check_struct "$@"
1414 disable_sanitized "${struct}_${member}"
1415 test_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1416 enable_sanitized "${struct}_${member}"
1420 log check_builtin "$@"
1426 test_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1429 check_compile_assert(){
1430 log check_compile_assert "$@"
1436 test_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1444 test_code cc "$@" && enable "$name"
1452 check_lib $name "$@" || die "ERROR: $name_version not found"
1459 test_code cc "$@" || die "ERROR: $name failed"
1467 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1471 log require_header "$@"
1473 check_header "$@" || die "ERROR: $headers not found"
1476 require_cpp_condition(){
1477 log require_cpp_condition "$@"
1479 test_cpp_condition "$@" || die "ERROR: $condition not satisfied"
1482 require_pkg_config(){
1483 log require_pkg_config "$@"
1485 check_pkg_config "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message"
1489 eval printf '%s\\n' $HOSTCC_E
1493 eval printf '%s\\n' $HOSTCC_O
1497 log test_host_cc "$@"
1500 test_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1504 log test_host_cpp "$@"
1507 test_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1510 check_host_cppflags(){
1511 log check_host_cppflags "$@"
1512 test_host_cpp "$@" <<EOF && append host_cppflags "$@"
1517 check_host_cflags(){
1518 log check_host_cflags "$@"
1519 set -- $($host_cflags_filter "$@")
1520 test_host_cc "$@" <<EOF && append host_cflags "$@"
1525 test_host_cpp_condition(){
1526 log test_host_cpp_condition "$@"
1530 test_host_cpp "$@" <<EOF
1533 #error "unsatisfied condition: $condition"
1538 check_host_cpp_condition(){
1539 log check_host_cpp_condition "$@"
1543 test_host_cpp_condition "$@" && enable $name
1547 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1548 mkdir -p "$(dirname $2)"
1552 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1553 # system-dependent things.
1555 AVCODEC_COMPONENTS="
1563 AVDEVICE_COMPONENTS="
1568 AVFILTER_COMPONENTS="
1572 AVFORMAT_COMPONENTS="
1580 $AVDEVICE_COMPONENTS
1581 $AVFILTER_COMPONENTS
1582 $AVFORMAT_COMPONENTS
1586 avio_dir_cmd_example
1587 avio_reading_example
1588 decode_audio_example
1589 decode_video_example
1590 demuxing_decoding_example
1591 encode_audio_example
1592 encode_video_example
1594 filter_audio_example
1595 filtering_audio_example
1596 filtering_video_example
1597 http_multiclient_example
1603 resampling_audio_example
1604 scaling_video_example
1605 transcode_aac_example
1607 vaapi_encode_example
1608 vaapi_transcode_example
1611 EXTERNAL_AUTODETECT_LIBRARY_LIST="
1631 EXTERNAL_LIBRARY_GPL_LIST="
1643 EXTERNAL_LIBRARY_NONFREE_LIST="
1651 EXTERNAL_LIBRARY_VERSION3_LIST="
1660 EXTERNAL_LIBRARY_GPLV3_LIST="
1664 EXTERNAL_LIBRARY_LIST="
1665 $EXTERNAL_LIBRARY_GPL_LIST
1666 $EXTERNAL_LIBRARY_NONFREE_LIST
1667 $EXTERNAL_LIBRARY_VERSION3_LIST
1668 $EXTERNAL_LIBRARY_GPLV3_LIST
1729 HWACCEL_AUTODETECT_LIBRARY_LIST="
1747 # catchall list of things that require external libs to link
1753 HWACCEL_LIBRARY_NONFREE_LIST="
1758 HWACCEL_LIBRARY_LIST="
1759 $HWACCEL_LIBRARY_NONFREE_LIST
1780 safe_bitstream_reader
1826 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1830 $EXTERNAL_LIBRARY_LIST
1831 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1832 $HWACCEL_LIBRARY_LIST
1833 $HWACCEL_AUTODETECT_LIBRARY_LIST
1865 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1866 $HWACCEL_AUTODETECT_LIBRARY_LIST
1908 ARCH_EXT_LIST_MIPS="
1920 ARCH_EXT_LIST_LOONGSON="
1926 ARCH_EXT_LIST_X86_SIMD="
1956 $ARCH_EXT_LIST_X86_SIMD
1966 $ARCH_EXT_LIST_LOONGSON
1987 sync_val_compare_and_swap
2004 cdio_paranoia_paranoia_h
2007 dev_bktr_ioctl_bt848_h
2008 dev_bktr_ioctl_meteor_h
2010 dev_video_bktr_ioctl_bt848_h
2011 dev_video_meteor_ioctl_meteor_h
2020 machine_ioctl_bt848_h
2021 machine_ioctl_meteor_h
2023 opencv2_core_core_c_h
2085 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
2103 GetProcessAffinityMask
2104 GetProcessMemoryInfo
2107 GetSystemTimeAsFileTime
2130 SetConsoleTextAttribute
2131 SetConsoleCtrlHandler
2139 UTGetOSTypeFromString
2151 TOOLCHAIN_FEATURES="
2164 inline_asm_direct_symbol_refs
2166 inline_asm_nonlocal_labels
2177 kCMVideoCodecType_HEVC
2180 struct_group_source_req
2181 struct_ip_mreq_source
2183 struct_msghdr_msg_flags
2185 struct_rusage_ru_maxrss
2186 struct_sctp_event_subscribe
2188 struct_sockaddr_sa_len
2189 struct_sockaddr_storage
2190 struct_stat_st_mtim_tv_nsec
2191 struct_v4l2_frmivalenum_discrete
2196 $(add_suffix _external $ARCH_EXT_LIST)
2197 $(add_suffix _inline $ARCH_EXT_LIST)
2218 opencl_vaapi_beignet
2219 opencl_vaapi_intel_media
2225 # options emitted with CONFIG_ prefix but not available on the command line
2248 frame_thread_encoder
2405 # code dependency declarations
2407 # architecture extensions
2412 armv8_deps="aarch64"
2413 neon_deps_any="aarch64 arm"
2414 intrinsics_neon_deps="neon"
2415 vfp_deps_any="aarch64 arm"
2419 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2428 loongson2_deps="mips"
2429 loongson3_deps="mips"
2430 mips32r2_deps="mips"
2431 mips32r5_deps="mips"
2432 mips32r6_deps="mips"
2433 mips64r2_deps="mips"
2434 mips64r6_deps="mips"
2437 mipsdspr2_deps="mips"
2442 x86_64_select="i686"
2443 x86_64_suggest="fast_cmov"
2446 amd3dnowext_deps="amd3dnow"
2464 mmx_external_deps="x86asm"
2465 mmx_inline_deps="inline_asm x86"
2466 mmx_suggest="mmx_external mmx_inline"
2468 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2469 eval dep=\$${ext}_deps
2470 eval ${ext}_external_deps='"${dep}_external"'
2471 eval ${ext}_inline_deps='"${dep}_inline"'
2472 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2475 aligned_stack_if_any="aarch64 ppc x86"
2476 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2477 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2478 fast_unaligned_if_any="aarch64 ppc x86"
2479 simd_align_16_if_any="altivec neon sse"
2480 simd_align_32_if_any="avx"
2481 simd_align_64_if_any="avx512"
2483 # system capabilities
2484 linux_perf_deps="linux_perf_event_h"
2485 symver_if_any="symver_asm_label symver_gnu_asm"
2486 valgrind_backtrace_conflict="optimizations"
2487 valgrind_backtrace_deps="valgrind_valgrind_h"
2490 atomics_gcc_if="sync_val_compare_and_swap"
2491 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2492 atomics_win32_if="MemoryBarrier"
2493 atomics_native_if_any="$ATOMICS_LIST"
2494 w32threads_deps="atomics_native"
2495 threads_if_any="$THREADS_LIST"
2498 cbs_h264_select="cbs golomb"
2499 cbs_h265_select="cbs golomb"
2500 cbs_mpeg2_select="cbs"
2501 cbs_vp9_select="cbs"
2503 dirac_parse_select="golomb"
2504 error_resilience_select="me_cmp"
2506 faandct_select="fdctdsp"
2507 faanidct_deps="faan"
2508 faanidct_select="idctdsp"
2509 h264dsp_select="startcode"
2510 hevcparse_select="golomb"
2511 frame_thread_encoder_deps="encoders threads"
2512 intrax8_select="blockdsp idctdsp"
2515 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2516 mpeg_er_select="error_resilience"
2517 mpegaudio_select="mpegaudiodsp mpegaudioheader"
2518 mpegaudiodsp_select="dct"
2519 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
2520 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2521 vc1dsp_select="h264chroma qpeldsp startcode"
2524 # decoders / encoders
2525 aac_decoder_select="adts_header mdct15 mdct sinewin"
2526 aac_fixed_decoder_select="adts_header mdct sinewin"
2527 aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
2528 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2529 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2530 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2531 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2532 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2533 adpcm_g722_decoder_select="g722dsp"
2534 adpcm_g722_encoder_select="g722dsp"
2535 aic_decoder_select="golomb idctdsp"
2536 alac_encoder_select="lpc"
2537 als_decoder_select="bswapdsp"
2538 amrnb_decoder_select="lsp"
2539 amrwb_decoder_select="lsp"
2540 amv_decoder_select="sp5x_decoder exif"
2541 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2542 ape_decoder_select="bswapdsp llauddsp"
2543 apng_decoder_deps="zlib"
2544 apng_encoder_deps="zlib"
2545 apng_encoder_select="llvidencdsp"
2546 aptx_decoder_select="audio_frame_queue"
2547 aptx_encoder_select="audio_frame_queue"
2548 aptx_hd_decoder_select="audio_frame_queue"
2549 aptx_hd_encoder_select="audio_frame_queue"
2550 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2551 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2552 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2553 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2554 atrac1_decoder_select="mdct sinewin"
2555 atrac3_decoder_select="mdct"
2556 atrac3p_decoder_select="mdct sinewin"
2557 avrn_decoder_select="exif jpegtables"
2558 bink_decoder_select="blockdsp hpeldsp"
2559 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2560 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2561 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2562 clearvideo_decoder_select="idctdsp"
2563 cllc_decoder_select="bswapdsp"
2564 comfortnoise_encoder_select="lpc"
2565 cook_decoder_select="audiodsp mdct sinewin"
2566 cscd_decoder_select="lzo"
2567 cscd_decoder_suggest="zlib"
2568 dca_decoder_select="mdct"
2569 dds_decoder_select="texturedsp"
2570 dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
2571 dnxhd_decoder_select="blockdsp idctdsp"
2572 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2573 dolby_e_decoder_select="mdct"
2574 dvvideo_decoder_select="dvprofile idctdsp"
2575 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2576 dxa_decoder_deps="zlib"
2577 dxv_decoder_select="lzf texturedsp"
2578 eac3_decoder_select="ac3_decoder"
2579 eac3_encoder_select="ac3_encoder"
2580 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2581 eatgq_decoder_select="aandcttables"
2582 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2583 exr_decoder_deps="zlib"
2584 ffv1_decoder_select="rangecoder"
2585 ffv1_encoder_select="rangecoder"
2586 ffvhuff_decoder_select="huffyuv_decoder"
2587 ffvhuff_encoder_select="huffyuv_encoder"
2588 fic_decoder_select="golomb"
2589 flac_decoder_select="flacdsp"
2590 flac_encoder_select="bswapdsp flacdsp lpc"
2591 flashsv2_decoder_deps="zlib"
2592 flashsv2_encoder_deps="zlib"
2593 flashsv_decoder_deps="zlib"
2594 flashsv_encoder_deps="zlib"
2595 flv_decoder_select="h263_decoder"
2596 flv_encoder_select="h263_encoder"
2597 fourxm_decoder_select="blockdsp bswapdsp"
2598 fraps_decoder_select="bswapdsp huffman"
2599 g2m_decoder_deps="zlib"
2600 g2m_decoder_select="blockdsp idctdsp jpegtables"
2601 g729_decoder_select="audiodsp"
2602 h261_decoder_select="mpegvideo"
2603 h261_encoder_select="aandcttables mpegvideoenc"
2604 h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
2605 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2606 h263i_decoder_select="h263_decoder"
2607 h263p_decoder_select="h263_decoder"
2608 h263p_encoder_select="h263_encoder"
2609 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2610 h264_decoder_suggest="error_resilience"
2611 hap_decoder_select="snappy texturedsp"
2612 hap_encoder_deps="libsnappy"
2613 hap_encoder_select="texturedspenc"
2614 hevc_decoder_select="bswapdsp cabac golomb hevcparse videodsp"
2615 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2616 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
2617 iac_decoder_select="imc_decoder"
2618 imc_decoder_select="bswapdsp fft mdct sinewin"
2619 indeo3_decoder_select="hpeldsp"
2620 indeo4_decoder_select="ividsp"
2621 indeo5_decoder_select="ividsp"
2622 interplay_video_decoder_select="hpeldsp"
2623 jpegls_decoder_select="mjpeg_decoder"
2624 jv_decoder_select="blockdsp"
2625 lagarith_decoder_select="llviddsp"
2626 ljpeg_encoder_select="aandcttables idctdsp jpegtables mpegvideoenc"
2627 magicyuv_decoder_select="llviddsp"
2628 magicyuv_encoder_select="llvidencdsp"
2629 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2630 metasound_decoder_select="lsp mdct sinewin"
2631 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2632 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2633 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2634 mjpegb_decoder_select="mjpeg_decoder"
2635 mlp_decoder_select="mlp_parser"
2636 mlp_encoder_select="lpc"
2637 motionpixels_decoder_select="bswapdsp"
2638 mp1_decoder_select="mpegaudio"
2639 mp1float_decoder_select="mpegaudio"
2640 mp2_decoder_select="mpegaudio"
2641 mp2float_decoder_select="mpegaudio"
2642 mp3_decoder_select="mpegaudio"
2643 mp3adu_decoder_select="mpegaudio"
2644 mp3adufloat_decoder_select="mpegaudio"
2645 mp3float_decoder_select="mpegaudio"
2646 mp3on4_decoder_select="mpegaudio"
2647 mp3on4float_decoder_select="mpegaudio"
2648 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2649 mpc8_decoder_select="mpegaudiodsp"
2650 mpegvideo_decoder_select="mpegvideo"
2651 mpeg1video_decoder_select="mpegvideo"
2652 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2653 mpeg2video_decoder_select="mpegvideo"
2654 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2655 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2656 mpeg4_encoder_select="h263_encoder"
2657 msa1_decoder_select="mss34dsp"
2658 mscc_decoder_deps="zlib"
2659 msmpeg4v1_decoder_select="h263_decoder"
2660 msmpeg4v2_decoder_select="h263_decoder"
2661 msmpeg4v2_encoder_select="h263_encoder"
2662 msmpeg4v3_decoder_select="h263_decoder"
2663 msmpeg4v3_encoder_select="h263_encoder"
2664 mss2_decoder_select="mpegvideo qpeldsp vc1_decoder"
2665 mts2_decoder_select="mss34dsp"
2666 mxpeg_decoder_select="mjpeg_decoder"
2667 nellymoser_decoder_select="mdct sinewin"
2668 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2669 nuv_decoder_select="idctdsp lzo"
2670 on2avc_decoder_select="mdct"
2671 opus_decoder_deps="swresample"
2672 opus_decoder_select="mdct15"
2673 opus_encoder_select="audio_frame_queue mdct15"
2674 png_decoder_deps="zlib"
2675 png_encoder_deps="zlib"
2676 png_encoder_select="llvidencdsp"
2677 prores_decoder_select="blockdsp idctdsp"
2678 prores_encoder_select="fdctdsp"
2679 qcelp_decoder_select="lsp"
2680 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2681 ra_144_decoder_select="audiodsp"
2682 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2683 ralf_decoder_select="golomb"
2684 rawvideo_decoder_select="bswapdsp"
2685 rscc_decoder_deps="zlib"
2686 rtjpeg_decoder_select="me_cmp"
2687 rv10_decoder_select="h263_decoder"
2688 rv10_encoder_select="h263_encoder"
2689 rv20_decoder_select="h263_decoder"
2690 rv20_encoder_select="h263_encoder"
2691 rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2692 rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2693 screenpresso_decoder_deps="zlib"
2694 shorten_decoder_select="bswapdsp"
2695 sipr_decoder_select="lsp"
2696 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2697 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2698 sonic_decoder_select="golomb rangecoder"
2699 sonic_encoder_select="golomb rangecoder"
2700 sonic_ls_encoder_select="golomb rangecoder"
2701 sp5x_decoder_select="mjpeg_decoder"
2702 srgc_decoder_deps="zlib"
2703 svq1_decoder_select="hpeldsp"
2704 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2705 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2706 svq3_decoder_suggest="zlib"
2707 tak_decoder_select="audiodsp"
2708 tdsc_decoder_deps="zlib"
2709 tdsc_decoder_select="mjpeg_decoder"
2710 theora_decoder_select="vp3_decoder"
2711 thp_decoder_select="mjpeg_decoder"
2712 tiff_decoder_suggest="zlib lzma"
2713 tiff_encoder_suggest="zlib"
2714 truehd_decoder_select="mlp_parser"
2715 truehd_encoder_select="lpc"
2716 truemotion2_decoder_select="bswapdsp"
2717 truespeech_decoder_select="bswapdsp"
2718 tscc_decoder_deps="zlib"
2719 twinvq_decoder_select="mdct lsp sinewin"
2720 txd_decoder_select="texturedsp"
2721 utvideo_decoder_select="bswapdsp llviddsp"
2722 utvideo_encoder_select="bswapdsp huffman llvidencdsp"
2723 vble_decoder_select="llviddsp"
2724 vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 mpegvideo vc1dsp"
2725 vc1image_decoder_select="vc1_decoder"
2726 vorbis_decoder_select="mdct"
2727 vorbis_encoder_select="audio_frame_queue mdct"
2728 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2729 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2730 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2731 vp6a_decoder_select="vp6_decoder"
2732 vp6f_decoder_select="vp6_decoder"
2733 vp7_decoder_select="h264pred videodsp vp8dsp"
2734 vp8_decoder_select="h264pred videodsp vp8dsp"
2735 vp9_decoder_select="videodsp vp9_parser vp9_superframe_split_bsf"
2736 webp_decoder_select="vp8_decoder exif"
2737 wmalossless_decoder_select="llauddsp"
2738 wmapro_decoder_select="mdct sinewin wma_freqs"
2739 wmav1_decoder_select="mdct sinewin wma_freqs"
2740 wmav1_encoder_select="mdct sinewin wma_freqs"
2741 wmav2_decoder_select="mdct sinewin wma_freqs"
2742 wmav2_encoder_select="mdct sinewin wma_freqs"
2743 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2744 wmv1_decoder_select="h263_decoder"
2745 wmv1_encoder_select="h263_encoder"
2746 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2747 wmv2_encoder_select="h263_encoder wmv2dsp"
2748 wmv3_decoder_select="vc1_decoder"
2749 wmv3image_decoder_select="wmv3_decoder"
2750 xma1_decoder_select="wmapro_decoder"
2751 xma2_decoder_select="wmapro_decoder"
2752 zerocodec_decoder_deps="zlib"
2753 zlib_decoder_deps="zlib"
2754 zlib_encoder_deps="zlib"
2755 zmbv_decoder_deps="zlib"
2756 zmbv_encoder_deps="zlib"
2758 # hardware accelerators
2759 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2760 cuda_deps="ffnvcodec"
2761 cuvid_deps="ffnvcodec"
2762 d3d11va_deps="dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2763 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32 user32"
2764 ffnvcodec_deps_any="libdl LoadLibrary"
2765 nvdec_deps="ffnvcodec"
2766 videotoolbox_hwaccel_deps="videotoolbox pthreads"
2767 videotoolbox_hwaccel_extralibs="-framework QuartzCore"
2768 xvmc_deps="X11_extensions_XvMClib_h"
2770 h263_vaapi_hwaccel_deps="vaapi"
2771 h263_vaapi_hwaccel_select="h263_decoder"
2772 h263_videotoolbox_hwaccel_deps="videotoolbox"
2773 h263_videotoolbox_hwaccel_select="h263_decoder"
2774 h264_d3d11va_hwaccel_deps="d3d11va"
2775 h264_d3d11va_hwaccel_select="h264_decoder"
2776 h264_d3d11va2_hwaccel_deps="d3d11va"
2777 h264_d3d11va2_hwaccel_select="h264_decoder"
2778 h264_dxva2_hwaccel_deps="dxva2"
2779 h264_dxva2_hwaccel_select="h264_decoder"
2780 h264_nvdec_hwaccel_deps="nvdec"
2781 h264_nvdec_hwaccel_select="h264_decoder"
2782 h264_vaapi_hwaccel_deps="vaapi"
2783 h264_vaapi_hwaccel_select="h264_decoder"
2784 h264_vdpau_hwaccel_deps="vdpau"
2785 h264_vdpau_hwaccel_select="h264_decoder"
2786 h264_videotoolbox_hwaccel_deps="videotoolbox"
2787 h264_videotoolbox_hwaccel_select="h264_decoder"
2788 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2789 hevc_d3d11va_hwaccel_select="hevc_decoder"
2790 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2791 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2792 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2793 hevc_dxva2_hwaccel_select="hevc_decoder"
2794 hevc_nvdec_hwaccel_deps="nvdec"
2795 hevc_nvdec_hwaccel_select="hevc_decoder"
2796 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2797 hevc_vaapi_hwaccel_select="hevc_decoder"
2798 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2799 hevc_vdpau_hwaccel_select="hevc_decoder"
2800 hevc_videotoolbox_hwaccel_deps="videotoolbox"
2801 hevc_videotoolbox_hwaccel_select="hevc_decoder"
2802 mjpeg_nvdec_hwaccel_deps="nvdec"
2803 mjpeg_nvdec_hwaccel_select="mjpeg_decoder"
2804 mjpeg_vaapi_hwaccel_deps="vaapi"
2805 mjpeg_vaapi_hwaccel_select="mjpeg_decoder"
2806 mpeg_xvmc_hwaccel_deps="xvmc"
2807 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2808 mpeg1_nvdec_hwaccel_deps="nvdec"
2809 mpeg1_nvdec_hwaccel_select="mpeg1video_decoder"
2810 mpeg1_vdpau_hwaccel_deps="vdpau"
2811 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2812 mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
2813 mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
2814 mpeg1_xvmc_hwaccel_deps="xvmc"
2815 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2816 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2817 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2818 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2819 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2820 mpeg2_dxva2_hwaccel_deps="dxva2"
2821 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2822 mpeg2_nvdec_hwaccel_deps="nvdec"
2823 mpeg2_nvdec_hwaccel_select="mpeg2video_decoder"
2824 mpeg2_vaapi_hwaccel_deps="vaapi"
2825 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2826 mpeg2_vdpau_hwaccel_deps="vdpau"
2827 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2828 mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
2829 mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
2830 mpeg2_xvmc_hwaccel_deps="xvmc"
2831 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2832 mpeg4_nvdec_hwaccel_deps="nvdec"
2833 mpeg4_nvdec_hwaccel_select="mpeg4_decoder"
2834 mpeg4_vaapi_hwaccel_deps="vaapi"
2835 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2836 mpeg4_vdpau_hwaccel_deps="vdpau"
2837 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2838 mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
2839 mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
2840 vc1_d3d11va_hwaccel_deps="d3d11va"
2841 vc1_d3d11va_hwaccel_select="vc1_decoder"
2842 vc1_d3d11va2_hwaccel_deps="d3d11va"
2843 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2844 vc1_dxva2_hwaccel_deps="dxva2"
2845 vc1_dxva2_hwaccel_select="vc1_decoder"
2846 vc1_nvdec_hwaccel_deps="nvdec"
2847 vc1_nvdec_hwaccel_select="vc1_decoder"
2848 vc1_vaapi_hwaccel_deps="vaapi"
2849 vc1_vaapi_hwaccel_select="vc1_decoder"
2850 vc1_vdpau_hwaccel_deps="vdpau"
2851 vc1_vdpau_hwaccel_select="vc1_decoder"
2852 vp8_nvdec_hwaccel_deps="nvdec"
2853 vp8_nvdec_hwaccel_select="vp8_decoder"
2854 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2855 vp8_vaapi_hwaccel_select="vp8_decoder"
2856 vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2857 vp9_d3d11va_hwaccel_select="vp9_decoder"
2858 vp9_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2859 vp9_d3d11va2_hwaccel_select="vp9_decoder"
2860 vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
2861 vp9_dxva2_hwaccel_select="vp9_decoder"
2862 vp9_nvdec_hwaccel_deps="nvdec"
2863 vp9_nvdec_hwaccel_select="vp9_decoder"
2864 vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth"
2865 vp9_vaapi_hwaccel_select="vp9_decoder"
2866 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2867 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2868 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2869 wmv3_nvdec_hwaccel_select="vc1_nvdec_hwaccel"
2870 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2871 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2873 # hardware-accelerated codecs
2874 omx_deps="libdl pthreads"
2875 omx_rpi_select="omx"
2880 vaapi_encode_deps="vaapi"
2881 v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
2883 hwupload_cuda_filter_deps="ffnvcodec"
2884 scale_npp_filter_deps="ffnvcodec libnpp"
2885 scale_cuda_filter_deps="cuda_sdk"
2886 thumbnail_cuda_filter_deps="cuda_sdk"
2888 amf_deps_any="libdl LoadLibrary"
2889 nvenc_deps="ffnvcodec"
2890 nvenc_deps_any="libdl LoadLibrary"
2891 nvenc_encoder_deps="nvenc"
2893 h263_v4l2m2m_decoder_deps="v4l2_m2m h263_v4l2_m2m"
2894 h263_v4l2m2m_encoder_deps="v4l2_m2m h263_v4l2_m2m"
2895 h264_amf_encoder_deps="amf"
2896 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2897 h264_cuvid_decoder_deps="cuvid"
2898 h264_cuvid_decoder_select="h264_mp4toannexb_bsf"
2899 h264_mediacodec_decoder_deps="mediacodec"
2900 h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
2901 h264_mmal_decoder_deps="mmal"
2902 h264_nvenc_encoder_deps="nvenc"
2903 h264_omx_encoder_deps="omx"
2904 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec"
2905 h264_qsv_encoder_select="qsvenc"
2906 h264_rkmpp_decoder_deps="rkmpp"
2907 h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
2908 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2909 h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
2910 h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
2911 h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
2912 hevc_amf_encoder_deps="amf"
2913 hevc_cuvid_decoder_deps="cuvid"
2914 hevc_cuvid_decoder_select="hevc_mp4toannexb_bsf"
2915 hevc_mediacodec_decoder_deps="mediacodec"
2916 hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
2917 hevc_nvenc_encoder_deps="nvenc"
2918 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec"
2919 hevc_qsv_encoder_select="hevcparse qsvenc"
2920 hevc_rkmpp_decoder_deps="rkmpp"
2921 hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
2922 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2923 hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
2924 hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
2925 hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
2926 mjpeg_cuvid_decoder_deps="cuvid"
2927 mjpeg_qsv_encoder_deps="libmfx"
2928 mjpeg_qsv_encoder_select="qsvenc"
2929 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2930 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2931 mpeg1_cuvid_decoder_deps="cuvid"
2932 mpeg1_v4l2m2m_decoder_deps="v4l2_m2m mpeg1_v4l2_m2m"
2933 mpeg2_crystalhd_decoder_select="crystalhd"
2934 mpeg2_cuvid_decoder_deps="cuvid"
2935 mpeg2_mmal_decoder_deps="mmal"
2936 mpeg2_mediacodec_decoder_deps="mediacodec"
2937 mpeg2_qsv_decoder_select="qsvdec mpegvideo_parser"
2938 mpeg2_qsv_encoder_select="qsvenc"
2939 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2940 mpeg2_vaapi_encoder_select="cbs_mpeg2 vaapi_encode"
2941 mpeg2_v4l2m2m_decoder_deps="v4l2_m2m mpeg2_v4l2_m2m"
2942 mpeg4_crystalhd_decoder_select="crystalhd"
2943 mpeg4_cuvid_decoder_deps="cuvid"
2944 mpeg4_mediacodec_decoder_deps="mediacodec"
2945 mpeg4_mmal_decoder_deps="mmal"
2946 mpeg4_omx_encoder_deps="omx"
2947 mpeg4_v4l2m2m_decoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
2948 mpeg4_v4l2m2m_encoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
2949 msmpeg4_crystalhd_decoder_select="crystalhd"
2950 nvenc_h264_encoder_select="h264_nvenc_encoder"
2951 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2952 vc1_crystalhd_decoder_select="crystalhd"
2953 vc1_cuvid_decoder_deps="cuvid"
2954 vc1_mmal_decoder_deps="mmal"
2955 vc1_qsv_decoder_select="qsvdec vc1_parser"
2956 vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m"
2957 vp8_cuvid_decoder_deps="cuvid"
2958 vp8_mediacodec_decoder_deps="mediacodec"
2959 vp8_qsv_decoder_select="qsvdec vp8_parser"
2960 vp8_rkmpp_decoder_deps="rkmpp"
2961 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2962 vp8_vaapi_encoder_select="vaapi_encode"
2963 vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m"
2964 vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"
2965 vp9_cuvid_decoder_deps="cuvid"
2966 vp9_mediacodec_decoder_deps="mediacodec"
2967 vp9_rkmpp_decoder_deps="rkmpp"
2968 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
2969 vp9_vaapi_encoder_select="vaapi_encode"
2970 vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m"
2971 wmv3_crystalhd_decoder_select="crystalhd"
2974 aac_parser_select="adts_header"
2975 h264_parser_select="golomb h264dsp h264parse"
2976 hevc_parser_select="hevcparse"
2977 mpegaudio_parser_select="mpegaudioheader"
2978 mpegvideo_parser_select="mpegvideo"
2979 mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
2980 vc1_parser_select="vc1dsp"
2983 aac_adtstoasc_bsf_select="adts_header"
2984 filter_units_bsf_select="cbs"
2985 h264_metadata_bsf_deps="const_nan"
2986 h264_metadata_bsf_select="cbs_h264"
2987 h264_redundant_pps_bsf_select="cbs_h264"
2988 hevc_metadata_bsf_select="cbs_h265"
2989 mjpeg2jpeg_bsf_select="jpegtables"
2990 mpeg2_metadata_bsf_select="cbs_mpeg2"
2991 trace_headers_bsf_select="cbs"
2992 vp9_metadata_bsf_select="cbs_vp9"
2994 # external libraries
2995 aac_at_decoder_deps="audiotoolbox"
2996 aac_at_decoder_select="aac_adtstoasc_bsf"
2997 ac3_at_decoder_deps="audiotoolbox"
2998 ac3_at_decoder_select="ac3_parser"
2999 adpcm_ima_qt_at_decoder_deps="audiotoolbox"
3000 alac_at_decoder_deps="audiotoolbox"
3001 amr_nb_at_decoder_deps="audiotoolbox"
3002 avisynth_deps_any="libdl LoadLibrary"
3003 avisynth_demuxer_deps="avisynth"
3004 avisynth_demuxer_select="riffdec"
3005 eac3_at_decoder_deps="audiotoolbox"
3006 eac3_at_decoder_select="ac3_parser"
3007 gsm_ms_at_decoder_deps="audiotoolbox"
3008 ilbc_at_decoder_deps="audiotoolbox"
3009 mp1_at_decoder_deps="audiotoolbox"
3010 mp2_at_decoder_deps="audiotoolbox"
3011 mp3_at_decoder_deps="audiotoolbox"
3012 mp1_at_decoder_select="mpegaudioheader"
3013 mp2_at_decoder_select="mpegaudioheader"
3014 mp3_at_decoder_select="mpegaudioheader"
3015 pcm_alaw_at_decoder_deps="audiotoolbox"
3016 pcm_mulaw_at_decoder_deps="audiotoolbox"
3017 qdmc_at_decoder_deps="audiotoolbox"
3018 qdm2_at_decoder_deps="audiotoolbox"
3019 aac_at_encoder_deps="audiotoolbox"
3020 aac_at_encoder_select="audio_frame_queue"
3021 alac_at_encoder_deps="audiotoolbox"
3022 alac_at_encoder_select="audio_frame_queue"
3023 ilbc_at_encoder_deps="audiotoolbox"
3024 ilbc_at_encoder_select="audio_frame_queue"
3025 pcm_alaw_at_encoder_deps="audiotoolbox"
3026 pcm_alaw_at_encoder_select="audio_frame_queue"
3027 pcm_mulaw_at_encoder_deps="audiotoolbox"
3028 pcm_mulaw_at_encoder_select="audio_frame_queue"
3029 chromaprint_muxer_deps="chromaprint"
3030 h264_videotoolbox_encoder_deps="pthreads"
3031 h264_videotoolbox_encoder_select="videotoolbox_encoder"
3032 hevc_videotoolbox_encoder_deps="pthreads"
3033 hevc_videotoolbox_encoder_select="videotoolbox_encoder"
3034 libaom_av1_decoder_deps="libaom"
3035 libaom_av1_encoder_deps="libaom"
3036 libcelt_decoder_deps="libcelt"
3037 libcodec2_decoder_deps="libcodec2"
3038 libcodec2_encoder_deps="libcodec2"
3039 libfdk_aac_decoder_deps="libfdk_aac"
3040 libfdk_aac_encoder_deps="libfdk_aac"
3041 libfdk_aac_encoder_select="audio_frame_queue"
3042 libgme_demuxer_deps="libgme"
3043 libgsm_decoder_deps="libgsm"
3044 libgsm_encoder_deps="libgsm"
3045 libgsm_ms_decoder_deps="libgsm"
3046 libgsm_ms_encoder_deps="libgsm"
3047 libilbc_decoder_deps="libilbc"
3048 libilbc_encoder_deps="libilbc"
3049 libkvazaar_encoder_deps="libkvazaar"
3050 libmodplug_demuxer_deps="libmodplug"
3051 libmp3lame_encoder_deps="libmp3lame"
3052 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
3053 libopencore_amrnb_decoder_deps="libopencore_amrnb"
3054 libopencore_amrnb_encoder_deps="libopencore_amrnb"
3055 libopencore_amrnb_encoder_select="audio_frame_queue"
3056 libopencore_amrwb_decoder_deps="libopencore_amrwb"
3057 libopenh264_decoder_deps="libopenh264"
3058 libopenh264_decoder_select="h264_mp4toannexb_bsf"
3059 libopenh264_encoder_deps="libopenh264"
3060 libopenjpeg_decoder_deps="libopenjpeg"
3061 libopenjpeg_encoder_deps="libopenjpeg"
3062 libopenmpt_demuxer_deps="libopenmpt"
3063 libopus_decoder_deps="libopus"
3064 libopus_encoder_deps="libopus"
3065 libopus_encoder_select="audio_frame_queue"
3066 librsvg_decoder_deps="librsvg"
3067 libshine_encoder_deps="libshine"
3068 libshine_encoder_select="audio_frame_queue"
3069 libspeex_decoder_deps="libspeex"
3070 libspeex_encoder_deps="libspeex"
3071 libspeex_encoder_select="audio_frame_queue"
3072 libtheora_encoder_deps="libtheora"
3073 libtwolame_encoder_deps="libtwolame"
3074 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
3075 libvorbis_decoder_deps="libvorbis"
3076 libvorbis_encoder_deps="libvorbis libvorbisenc"
3077 libvorbis_encoder_select="audio_frame_queue"
3078 libvpx_vp8_decoder_deps="libvpx"
3079 libvpx_vp8_encoder_deps="libvpx"
3080 libvpx_vp9_decoder_deps="libvpx"
3081 libvpx_vp9_encoder_deps="libvpx"
3082 libwavpack_encoder_deps="libwavpack"
3083 libwavpack_encoder_select="audio_frame_queue"
3084 libwebp_encoder_deps="libwebp"
3085 libwebp_anim_encoder_deps="libwebp"
3086 libx262_encoder_deps="libx262"
3087 libx264_encoder_deps="libx264"
3088 libx264rgb_encoder_deps="libx264 x264_csp_bgr"
3089 libx264rgb_encoder_select="libx264_encoder"
3090 libx265_encoder_deps="libx265"
3091 libxavs_encoder_deps="libxavs"
3092 libxvid_encoder_deps="libxvid"
3093 libzvbi_teletext_decoder_deps="libzvbi"
3094 videotoolbox_suggest="coreservices"
3095 videotoolbox_deps="corefoundation coremedia corevideo"
3096 videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
3099 ac3_demuxer_select="ac3_parser"
3100 aiff_muxer_select="iso_media"
3101 asf_demuxer_select="riffdec"
3102 asf_o_demuxer_select="riffdec"
3103 asf_muxer_select="riffenc"
3104 asf_stream_muxer_select="asf_muxer"
3105 avi_demuxer_select="iso_media riffdec exif"
3106 avi_muxer_select="riffenc"
3107 caf_demuxer_select="iso_media riffdec"
3108 caf_muxer_select="iso_media"
3109 dash_muxer_select="mp4_muxer"
3110 dash_demuxer_deps="libxml2"
3111 dirac_demuxer_select="dirac_parser"
3112 dts_demuxer_select="dca_parser"
3113 dtshd_demuxer_select="dca_parser"
3114 dv_demuxer_select="dvprofile"
3115 dv_muxer_select="dvprofile"
3116 dxa_demuxer_select="riffdec"
3117 eac3_demuxer_select="ac3_parser"
3118 f4v_muxer_select="mov_muxer"
3119 fifo_muxer_deps="threads"
3120 flac_demuxer_select="flac_parser"
3121 hds_muxer_select="flv_muxer"
3122 hls_muxer_select="mpegts_muxer"
3123 hls_muxer_suggest="gcrypt openssl"
3124 image2_alias_pix_demuxer_select="image2_demuxer"
3125 image2_brender_pix_demuxer_select="image2_demuxer"
3126 ipod_muxer_select="mov_muxer"
3127 ismv_muxer_select="mov_muxer"
3128 matroska_audio_muxer_select="matroska_muxer"
3129 matroska_demuxer_select="iso_media riffdec"
3130 matroska_demuxer_suggest="bzlib lzo zlib"
3131 matroska_muxer_select="iso_media riffenc"
3132 mmf_muxer_select="riffenc"
3133 mov_demuxer_select="iso_media riffdec"
3134 mov_demuxer_suggest="zlib"
3135 mov_muxer_select="iso_media riffenc rtpenc_chain"
3136 mp3_demuxer_select="mpegaudio_parser"
3137 mp3_muxer_select="mpegaudioheader"
3138 mp4_muxer_select="mov_muxer"
3139 mpegts_demuxer_select="iso_media"
3140 mpegts_muxer_select="adts_muxer latm_muxer"
3141 mpegtsraw_demuxer_select="mpegts_demuxer"
3142 mxf_d10_muxer_select="mxf_muxer"
3143 mxf_opatom_muxer_select="mxf_muxer"
3144 nut_muxer_select="riffenc"
3145 nuv_demuxer_select="riffdec"
3146 oga_muxer_select="ogg_muxer"
3147 ogg_demuxer_select="dirac_parse"
3148 ogv_muxer_select="ogg_muxer"
3149 opus_muxer_select="ogg_muxer"
3150 psp_muxer_select="mov_muxer"
3151 rtp_demuxer_select="sdp_demuxer"
3152 rtp_muxer_select="golomb"
3153 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
3154 rtsp_demuxer_select="http_protocol rtpdec"
3155 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
3156 sap_demuxer_select="sdp_demuxer"
3157 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
3158 sdp_demuxer_select="rtpdec"
3159 smoothstreaming_muxer_select="ismv_muxer"
3160 spdif_demuxer_select="adts_header"
3161 spdif_muxer_select="adts_header"
3162 spx_muxer_select="ogg_muxer"
3163 swf_demuxer_suggest="zlib"
3164 tak_demuxer_select="tak_parser"
3165 tg2_muxer_select="mov_muxer"
3166 tgp_muxer_select="mov_muxer"
3167 vobsub_demuxer_select="mpegps_demuxer"
3168 w64_demuxer_select="wav_demuxer"
3169 w64_muxer_select="wav_muxer"
3170 wav_demuxer_select="riffdec"
3171 wav_muxer_select="riffenc"
3172 webm_muxer_select="iso_media riffenc"
3173 webm_dash_manifest_demuxer_select="matroska_demuxer"
3174 wtv_demuxer_select="mpegts_demuxer riffdec"
3175 wtv_muxer_select="mpegts_muxer riffenc"
3176 xmv_demuxer_select="riffdec"
3177 xwma_demuxer_select="riffdec"
3180 android_camera_indev_deps="android camera2ndk mediandk pthreads"
3181 android_camera_indev_extralibs="-landroid -lcamera2ndk -lmediandk"
3182 alsa_indev_deps="alsa"
3183 alsa_outdev_deps="alsa"
3184 avfoundation_indev_deps="avfoundation corevideo coremedia pthreads"
3185 avfoundation_indev_suggest="coregraphics applicationservices"
3186 avfoundation_indev_extralibs="-framework Foundation"
3187 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
3188 caca_outdev_deps="libcaca"
3189 decklink_deps_any="libdl LoadLibrary"
3190 decklink_indev_deps="decklink threads"
3191 decklink_indev_extralibs="-lstdc++"
3192 decklink_outdev_deps="decklink threads"
3193 decklink_outdev_extralibs="-lstdc++"
3194 libndi_newtek_indev_deps="libndi_newtek"
3195 libndi_newtek_indev_extralibs="-lndi"
3196 libndi_newtek_outdev_deps="libndi_newtek"
3197 libndi_newtek_outdev_extralibs="-lndi"
3198 dshow_indev_deps="IBaseFilter"
3199 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
3200 fbdev_indev_deps="linux_fb_h"
3201 fbdev_outdev_deps="linux_fb_h"
3202 gdigrab_indev_deps="CreateDIBSection"
3203 gdigrab_indev_extralibs="-lgdi32"
3204 gdigrab_indev_select="bmp_decoder"
3205 iec61883_indev_deps="libiec61883"
3206 jack_indev_deps="libjack"
3207 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
3208 kmsgrab_indev_deps="libdrm"
3209 lavfi_indev_deps="avfilter"
3210 libcdio_indev_deps="libcdio"
3211 libdc1394_indev_deps="libdc1394"
3212 openal_indev_deps="openal"
3213 opengl_outdev_deps="opengl"
3214 oss_indev_deps_any="sys_soundcard_h"
3215 oss_outdev_deps_any="sys_soundcard_h"
3216 pulse_indev_deps="libpulse"
3217 pulse_outdev_deps="libpulse"
3218 sdl2_outdev_deps="sdl2"
3219 sndio_indev_deps="sndio"
3220 sndio_outdev_deps="sndio"
3221 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
3222 v4l2_indev_suggest="libv4l2"
3223 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
3224 v4l2_outdev_suggest="libv4l2"
3225 vfwcap_indev_deps="vfw32 vfwcap_defines"
3226 xcbgrab_indev_deps="libxcb"
3227 xcbgrab_indev_suggest="libxcb_shm libxcb_shape libxcb_xfixes"
3228 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
3229 xv_outdev_extralibs="-lXv -lX11 -lXext"
3232 async_protocol_deps="threads"
3233 bluray_protocol_deps="libbluray"
3234 ffrtmpcrypt_protocol_conflict="librtmp_protocol"
3235 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
3236 ffrtmpcrypt_protocol_select="tcp_protocol"
3237 ffrtmphttp_protocol_conflict="librtmp_protocol"
3238 ffrtmphttp_protocol_select="http_protocol"
3239 ftp_protocol_select="tcp_protocol"
3240 gopher_protocol_select="network"
3241 http_protocol_select="tcp_protocol"
3242 http_protocol_suggest="zlib"
3243 httpproxy_protocol_select="tcp_protocol"
3244 httpproxy_protocol_suggest="zlib"
3245 https_protocol_select="tls_protocol"
3246 https_protocol_suggest="zlib"
3247 icecast_protocol_select="http_protocol"
3248 librtmp_protocol_deps="librtmp"
3249 librtmpe_protocol_deps="librtmp"
3250 librtmps_protocol_deps="librtmp"
3251 librtmpt_protocol_deps="librtmp"
3252 librtmpte_protocol_deps="librtmp"
3253 libsmbclient_protocol_deps="libsmbclient gplv3"
3254 libssh_protocol_deps="libssh"
3255 libtls_conflict="openssl gnutls"
3256 mmsh_protocol_select="http_protocol"
3257 mmst_protocol_select="network"
3258 libsrt_protocol_deps="libsrt"
3259 libsrt_protocol_select="network"
3260 rtmp_protocol_conflict="librtmp_protocol"
3261 rtmp_protocol_select="tcp_protocol"
3262 rtmp_protocol_suggest="zlib"
3263 rtmpe_protocol_select="ffrtmpcrypt_protocol"
3264 rtmpe_protocol_suggest="zlib"
3265 rtmps_protocol_conflict="librtmp_protocol"
3266 rtmps_protocol_select="tls_protocol"
3267 rtmps_protocol_suggest="zlib"
3268 rtmpt_protocol_select="ffrtmphttp_protocol"
3269 rtmpt_protocol_suggest="zlib"
3270 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
3271 rtmpte_protocol_suggest="zlib"
3272 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
3273 rtmpts_protocol_suggest="zlib"
3274 rtp_protocol_select="udp_protocol"
3275 schannel_conflict="openssl gnutls libtls"
3276 sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
3277 sctp_protocol_select="network"
3278 securetransport_conflict="openssl gnutls libtls"
3279 srtp_protocol_select="rtp_protocol srtp"
3280 tcp_protocol_select="network"
3281 tls_protocol_deps_any="gnutls openssl schannel securetransport libtls"
3282 tls_protocol_select="tcp_protocol"
3283 udp_protocol_select="network"
3284 udplite_protocol_select="network"
3285 unix_protocol_deps="sys_un_h"
3286 unix_protocol_select="network"
3289 afftfilt_filter_deps="avcodec"
3290 afftfilt_filter_select="fft"
3291 afir_filter_deps="avcodec"
3292 afir_filter_select="fft"
3293 amovie_filter_deps="avcodec avformat"
3294 aresample_filter_deps="swresample"
3295 ass_filter_deps="libass"
3296 atempo_filter_deps="avcodec"
3297 atempo_filter_select="rdft"
3298 avgblur_opencl_filter_deps="opencl"
3299 azmq_filter_deps="libzmq"
3300 blackframe_filter_deps="gpl"
3301 boxblur_filter_deps="gpl"
3302 bs2b_filter_deps="libbs2b"
3303 colormatrix_filter_deps="gpl"
3304 convolution_opencl_filter_deps="opencl"
3305 convolve_filter_deps="avcodec"
3306 convolve_filter_select="fft"
3307 coreimage_filter_deps="coreimage appkit"
3308 coreimage_filter_extralibs="-framework OpenGL"
3309 coreimagesrc_filter_deps="coreimage appkit"
3310 coreimagesrc_filter_extralibs="-framework OpenGL"
3311 cover_rect_filter_deps="avcodec avformat gpl"
3312 cropdetect_filter_deps="gpl"
3313 deconvolve_filter_deps="avcodec"
3314 deconvolve_filter_select="fft"
3315 deinterlace_qsv_filter_deps="libmfx"
3316 deinterlace_vaapi_filter_deps="vaapi"
3317 delogo_filter_deps="gpl"
3318 denoise_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3319 deshake_filter_select="pixelutils"
3320 drawtext_filter_deps="libfreetype"
3321 drawtext_filter_suggest="libfontconfig libfribidi"
3322 elbg_filter_deps="avcodec"
3323 eq_filter_deps="gpl"
3324 fftfilt_filter_deps="avcodec"
3325 fftfilt_filter_select="rdft"
3326 find_rect_filter_deps="avcodec avformat gpl"
3327 firequalizer_filter_deps="avcodec"
3328 firequalizer_filter_select="rdft"
3329 flite_filter_deps="libflite"
3330 framerate_filter_select="pixelutils"
3331 frei0r_filter_deps="frei0r libdl"
3332 frei0r_src_filter_deps="frei0r libdl"
3333 fspp_filter_deps="gpl"
3334 geq_filter_deps="gpl"
3335 histeq_filter_deps="gpl"
3336 hqdn3d_filter_deps="gpl"
3337 interlace_filter_deps="gpl"
3338 kerndeint_filter_deps="gpl"
3339 ladspa_filter_deps="ladspa libdl"
3340 lv2_filter_deps="lv2"
3341 mcdeint_filter_deps="avcodec gpl"
3342 movie_filter_deps="avcodec avformat"
3343 mpdecimate_filter_deps="gpl"
3344 mpdecimate_filter_select="pixelutils"
3345 mptestsrc_filter_deps="gpl"
3346 negate_filter_deps="lut_filter"
3347 nnedi_filter_deps="gpl"
3348 ocr_filter_deps="libtesseract"
3349 ocv_filter_deps="libopencv"
3350 openclsrc_filter_deps="opencl"
3351 overlay_opencl_filter_deps="opencl"
3352 overlay_qsv_filter_deps="libmfx"
3353 overlay_qsv_filter_select="qsvvpp"
3354 owdenoise_filter_deps="gpl"
3355 pan_filter_deps="swresample"
3356 perspective_filter_deps="gpl"
3357 phase_filter_deps="gpl"
3358 pp7_filter_deps="gpl"
3359 pp_filter_deps="gpl postproc"
3360 procamp_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3361 program_opencl_filter_deps="opencl"
3362 pullup_filter_deps="gpl"
3363 removelogo_filter_deps="avcodec avformat swscale"
3364 repeatfields_filter_deps="gpl"
3365 resample_filter_deps="avresample"
3366 rubberband_filter_deps="librubberband"
3367 sab_filter_deps="gpl swscale"
3368 scale2ref_filter_deps="swscale"
3369 scale_filter_deps="swscale"
3370 scale_qsv_filter_deps="libmfx"
3371 select_filter_select="pixelutils"
3372 sharpness_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3373 showcqt_filter_deps="avcodec avformat swscale"
3374 showcqt_filter_suggest="libfontconfig libfreetype"
3375 showcqt_filter_select="fft"
3376 showfreqs_filter_deps="avcodec"
3377 showfreqs_filter_select="fft"
3378 showspectrum_filter_deps="avcodec"
3379 showspectrum_filter_select="fft"
3380 showspectrumpic_filter_deps="avcodec"
3381 showspectrumpic_filter_select="fft"
3382 signature_filter_deps="gpl avcodec avformat"
3383 smartblur_filter_deps="gpl swscale"
3384 sofalizer_filter_deps="libmysofa avcodec"
3385 sofalizer_filter_select="fft"
3386 spectrumsynth_filter_deps="avcodec"
3387 spectrumsynth_filter_select="fft"
3388 spp_filter_deps="gpl avcodec"
3389 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
3390 stereo3d_filter_deps="gpl"
3391 subtitles_filter_deps="avformat avcodec libass"
3392 super2xsai_filter_deps="gpl"
3393 pixfmts_super2xsai_test_deps="super2xsai_filter"
3394 tinterlace_filter_deps="gpl"
3395 tinterlace_merge_test_deps="tinterlace_filter"
3396 tinterlace_pad_test_deps="tinterlace_filter"
3397 tonemap_filter_deps="const_nan"
3398 unsharp_opencl_filter_deps="opencl"
3399 uspp_filter_deps="gpl avcodec"
3400 vaguedenoiser_filter_deps="gpl"
3401 vidstabdetect_filter_deps="libvidstab"
3402 vidstabtransform_filter_deps="libvidstab"
3403 libvmaf_filter_deps="libvmaf pthreads"
3404 zmq_filter_deps="libzmq"
3405 zoompan_filter_deps="swscale"
3406 zscale_filter_deps="libzimg const_nan"
3407 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3408 vpp_qsv_filter_deps="libmfx"
3409 vpp_qsv_filter_select="qsvvpp"
3412 avio_dir_cmd_deps="avformat avutil"
3413 avio_reading_deps="avformat avcodec avutil"
3414 decode_audio_example_deps="avcodec avutil"
3415 decode_video_example_deps="avcodec avutil"
3416 demuxing_decoding_example_deps="avcodec avformat avutil"
3417 encode_audio_example_deps="avcodec avutil"
3418 encode_video_example_deps="avcodec avutil"
3419 extract_mvs_example_deps="avcodec avformat avutil"
3420 filter_audio_example_deps="avfilter avutil"
3421 filtering_audio_example_deps="avfilter avcodec avformat avutil"
3422 filtering_video_example_deps="avfilter avcodec avformat avutil"
3423 http_multiclient_example_deps="avformat avutil fork"
3424 hw_decode_example_deps="avcodec avformat avutil"
3425 metadata_example_deps="avformat avutil"
3426 muxing_example_deps="avcodec avformat avutil swscale"
3427 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
3428 remuxing_example_deps="avcodec avformat avutil"
3429 resampling_audio_example_deps="avutil swresample"
3430 scaling_video_example_deps="avutil swscale"
3431 transcode_aac_example_deps="avcodec avformat swresample"
3432 transcoding_example_deps="avfilter avcodec avformat avutil"
3433 vaapi_encode_example_deps="avcodec avutil h264_vaapi_encoder"
3434 vaapi_transcode_example_deps="avcodec avformat avutil h264_vaapi_encoder"
3437 cpu_init_extralibs="pthreads_extralibs"
3438 cws2fws_extralibs="zlib_extralibs"
3440 # libraries, in linking order
3441 avcodec_deps="avutil"
3442 avcodec_suggest="libm"
3443 avcodec_select="null_bsf"
3444 avdevice_deps="avformat avcodec avutil"
3445 avdevice_suggest="libm"
3446 avfilter_deps="avutil"
3447 avfilter_suggest="libm"
3448 avformat_deps="avcodec avutil"
3449 avformat_suggest="libm network zlib"
3450 avresample_deps="avutil"
3451 avresample_suggest="libm"
3452 avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl user32 vaapi videotoolbox corefoundation corevideo coremedia bcrypt"
3453 postproc_deps="avutil gpl"
3454 postproc_suggest="libm"
3455 swresample_deps="avutil"
3456 swresample_suggest="libm libsoxr"
3457 swscale_deps="avutil"
3458 swscale_suggest="libm"
3460 avcodec_extralibs="pthreads_extralibs iconv_extralibs"
3461 avfilter_extralibs="pthreads_extralibs"
3462 avutil_extralibs="d3d11va_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs"
3465 ffmpeg_deps="avcodec avfilter avformat"
3466 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
3469 ffmpeg_suggest="ole32 psapi shell32"
3470 ffplay_deps="avcodec avformat swscale swresample sdl2"
3471 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
3472 ffplay_suggest="shell32"
3473 ffprobe_deps="avcodec avformat"
3474 ffprobe_suggest="shell32"
3477 podpages_deps="perl"
3478 manpages_deps="perl pod2man"
3479 htmlpages_deps="perl"
3480 htmlpages_deps_any="makeinfo_html texi2html"
3481 txtpages_deps="perl makeinfo"
3482 doc_deps_any="manpages htmlpages podpages txtpages"
3484 # default parameters
3486 logfile="ffbuild/config.log"
3488 # installation paths
3489 prefix_default="/usr/local"
3490 bindir_default='${prefix}/bin'
3491 datadir_default='${prefix}/share/ffmpeg'
3492 docdir_default='${prefix}/share/doc/ffmpeg'
3493 incdir_default='${prefix}/include'
3494 libdir_default='${prefix}/lib'
3495 mandir_default='${prefix}/share/man'
3501 host_cc_default="gcc"
3502 doxygen_default="doxygen"
3504 ln_s_default="ln -s -f"
3506 pkg_config_default=pkg-config
3507 ranlib_default="ranlib"
3508 strip_default="strip"
3509 version_script='--version-script'
3511 x86asmexe_default="nasm"
3512 windres_default="windres"
3514 nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
3518 target_os_default=$(tolower $(uname -s))
3519 host_os=$target_os_default
3522 if test "$target_os_default" = aix; then
3523 arch_default=$(uname -p)
3524 strip_default="strip -X32_64"
3526 arch_default=$(uname -m)
3531 # configurable options
3532 enable $PROGRAM_LIST
3533 enable $DOCUMENT_LIST
3534 enable $EXAMPLE_LIST
3535 enable $(filter_out avresample $LIBRARY_LIST)
3541 enable faan faandct faanidct
3542 enable optimizations
3543 enable runtime_cpudetect
3544 enable safe_bitstream_reader
3546 enable swscale_alpha
3547 enable valgrind_backtrace
3549 sws_max_filter_size_default=256
3550 set_default sws_max_filter_size
3552 # internal components are enabled by default
3553 enable $EXTRALIBS_LIST
3555 # Avoid external, non-system, libraries getting enabled by dependency resolution
3556 disable $EXTERNAL_LIBRARY_LIST $HWACCEL_LIBRARY_LIST
3559 SHFLAGS='-shared -Wl,-soname,$$(@F)'
3562 FULLNAME='$(NAME)$(BUILDSUF)'
3563 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
3566 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
3567 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
3568 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
3569 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
3570 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
3571 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
3572 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
3599 host_extralibs='-lm'
3600 host_cflags_filter=echo
3601 host_ldflags_filter=echo
3603 target_path='$(CURDIR)'
3605 # since the object filename is not given with the -MM flag, the compiler
3606 # is only able to print the basename, and we must add the path ourselves
3607 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
3613 if test -f configure; then
3616 source_path=$(cd $(dirname "$0"); pwd)
3617 case "$source_path" in
3618 *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
3620 test -e "$source_path/config.h" &&
3621 die "Out of tree builds are impossible with config.h in source dir."
3628 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3631 find_things_extern(){
3634 file=$source_path/$3
3636 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file"
3639 find_filters_extern(){
3640 file=$source_path/$1
3641 #sed -n "s/^extern AVFilter ff_\([avfsinkrc]\{2,5\}\)_\(\w\+\);/\2_filter/p" $file
3642 sed -E -n "s/^extern AVFilter ff_([avfsinkrc]{2,5})_([a-zA-Z0-9_]+);/\2_filter/p" $file
3645 FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c)
3646 OUTDEV_LIST=$(find_things_extern muxer AVOutputFormat libavdevice/alldevices.c outdev)
3647 INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev)
3648 MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c)
3649 DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c)
3650 ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c)
3651 DECODER_LIST=$(find_things_extern decoder AVCodec libavcodec/allcodecs.c)
3656 PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parser.c)
3657 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
3658 HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h)
3659 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
3661 AVCODEC_COMPONENTS_LIST="
3669 AVDEVICE_COMPONENTS_LIST="
3674 AVFILTER_COMPONENTS_LIST="
3678 AVFORMAT_COMPONENTS_LIST="
3685 $AVCODEC_COMPONENTS_LIST
3686 $AVDEVICE_COMPONENTS_LIST
3687 $AVFILTER_COMPONENTS_LIST
3688 $AVFORMAT_COMPONENTS_LIST
3691 for n in $COMPONENT_LIST; do
3692 v=$(toupper ${n%s})_LIST
3694 eval ${n}_if_any="\$$v"
3697 enable $ARCH_EXT_LIST
3700 echo "Unknown option \"$1\"."
3701 echo "See $0 --help for available options."
3705 print_in_columns() {
3706 cols=$(expr $ncols / 24)
3707 cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
3713 echo $* | sed s/$suffix//g | print_in_columns
3725 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3726 echo "prob ${prob:-0.5}"
3734 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3735 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3744 --extra-ldexeflags=*)
3745 add_ldexeflags $optval
3747 --extra-ldsoflags=*)
3748 add_ldsoflags $optval
3750 --extra-ldlibflags=*)
3751 warn "The --extra-ldlibflags option is only provided for compatibility and will be\n"\
3752 "removed in the future. Use --extra-ldsoflags instead."
3753 add_ldsoflags $optval
3756 add_extralibs $optval
3759 disable $INDEV_LIST $OUTDEV_LIST
3762 debuglevel="$optval"
3765 disable $PROGRAM_LIST
3767 --disable-everything)
3768 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3771 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3772 disable $LIBRARY_LIST $PROGRAM_LIST doc
3775 --enable-random|--disable-random)
3776 action=${opt%%-random}
3777 do_random ${action#--} $COMPONENT_LIST
3779 --enable-random=*|--disable-random=*)
3780 action=${opt%%-random=*}
3781 do_random ${action#--} $optval
3786 --enable-*=*|--disable-*=*)
3787 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3788 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3789 eval list=\$$(toupper $thing)_LIST
3790 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3791 list=$(filter "$name" $list)
3792 [ "$list" = "" ] && warn "Option $opt did not match anything"
3795 --enable-yasm|--disable-yasm)
3796 warn "The ${opt} option is only provided for compatibility and will be\n"\
3797 "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
3798 test $opt = --enable-yasm && x86asm=yes || x86asm=no
3801 warn "The --yasmexe option is only provided for compatibility and will be\n"\
3802 "removed in the future. Use --x86asmexe instead."
3805 --enable-?*|--disable-?*)
3806 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3807 if is_in $option $COMPONENT_LIST; then
3808 test $action = disable && action=unset
3809 eval $action \$$(toupper ${option%s})_LIST
3810 elif is_in $option $CMDLINE_SELECT; then
3817 NAME="${opt#--list-}"
3818 is_in $NAME $COMPONENT_LIST || die_unknown $opt
3820 eval show_list $NAME \$$(toupper $NAME)_LIST
3822 --help|-h) show_help
3824 --quiet|-q) quiet=yes
3826 --fatal-warnings) enable fatal_warnings
3829 libfuzzer_path="$optval"
3832 optname="${opt%%=*}"
3833 optname="${optname#--}"
3834 optname=$(echo "$optname" | sed 's/-/_/g')
3835 if is_in $optname $CMDLINE_SET; then
3836 eval $optname='$optval'
3837 elif is_in $optname $CMDLINE_APPEND; then
3838 append $optname "$optval"
3850 if disabled autodetect; then
3852 # Unless iconv is explicitely disabled by the user, we still want to probe
3853 # for the iconv from the libc.
3854 disabled iconv || enable libc_iconv
3856 disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3857 disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3859 # Mark specifically enabled, but normally autodetected libraries as requested.
3860 for lib in $AUTODETECT_LIBS; do
3861 enabled $lib && request $lib
3863 #TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
3864 enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3865 enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3867 disabled logging && logfile=/dev/null
3869 # command line configuration sanity checks
3871 # we need to build at least one lib type
3872 if ! enabled_any static shared; then
3874 At least one library type must be built.
3875 Specify --enable-static to build the static libraries or --enable-shared to
3876 build the shared libraries as well. To only build the shared libraries specify
3877 --disable-static in addition to --enable-shared.
3882 die_license_disabled() {
3883 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
3886 die_license_disabled_gpl() {
3887 enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
3890 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3891 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3893 enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
3894 map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
3896 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3898 if enabled nonfree; then
3899 license="nonfree and unredistributable"
3900 elif enabled gplv3; then
3901 license="GPL version 3 or later"
3902 elif enabled lgplv3; then
3903 license="LGPL version 3 or later"
3904 elif enabled gpl; then
3905 license="GPL version 2 or later"
3907 license="LGPL version 2.1 or later"
3910 enabled_all gnutls openssl &&
3911 die "GnuTLS and OpenSSL must not be enabled at the same time."
3913 # Disable all the library-specific components if the library itself
3914 # is disabled, see AVCODEC_LIST and following _LIST variables.
3916 disable_components(){
3917 disabled ${1} && disable $(
3918 eval components="\$$(toupper ${1})_COMPONENTS"
3919 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
3923 map 'disable_components $v' $LIBRARY_LIST
3925 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3928 test -n "$valgrind" && toolchain="valgrind-memcheck"
3930 enabled ossfuzz && {
3931 add_cflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
3932 add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
3935 case "$toolchain" in
3937 cc_default="${toolchain%-asan}"
3938 add_cflags -fsanitize=address
3939 add_ldflags -fsanitize=address
3942 cc_default="${toolchain%-msan}"
3943 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
3944 add_ldflags -fsanitize=memory
3947 cc_default="${toolchain%-tsan}"
3948 add_cflags -fsanitize=thread -fPIE
3949 add_ldflags -fsanitize=thread -pie
3950 case "$toolchain" in
3958 cc_default="${toolchain%-usan}"
3959 add_cflags -fsanitize=undefined
3960 add_ldflags -fsanitize=undefined
3963 target_exec_default="valgrind"
3964 case "$toolchain" in
3966 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"
3969 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"
3974 # Check whether the current MSVC version needs the C99 converter.
3975 # From MSVC 2013 (compiler major version 18) onwards, it does actually
3976 # support enough of C99 to build ffmpeg. Default to the new
3977 # behaviour if the regexp was unable to match anything, since this
3978 # successfully parses the version number of existing supported
3979 # versions that require the converter (MSVC 2010 and 2012).
3980 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3981 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3985 cc_default="c99wrap cl"
3986 cxx_default="c99wrap cl"
3988 ld_default="$source_path/compat/windows/mslink"
3989 nm_default="dumpbin -symbols"
3993 as_default="armasm64"
3999 target_os_default="win32"
4000 # Use a relative path for TMPDIR. This makes sure all the
4001 # ffconf temp files are written with a relative path, avoiding
4002 # issues with msys/win32 path conversion for MSVC parameters
4003 # such as -Fo<file> or -out:<file>.
4009 nm_default="dumpbin -symbols"
4011 target_os_default="win32"
4015 add_cflags -fprofile-arcs -ftest-coverage
4016 add_ldflags -fprofile-arcs -ftest-coverage
4019 add_cflags -fprofile-arcs -ftest-coverage
4020 add_ldflags --coverage
4023 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
4024 add_cflags -fno-strict-overflow -fstack-protector-all
4025 add_ldflags -Wl,-z,relro -Wl,-z,now
4027 add_ldexeflags -fPIE -pie
4030 die "Unknown toolchain $toolchain"
4034 if test -n "$cross_prefix"; then
4035 test -n "$arch" && test -n "$target_os" ||
4036 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
4037 enable cross_compile
4040 ar_default="${cross_prefix}${ar_default}"
4041 cc_default="${cross_prefix}${cc_default}"
4042 cxx_default="${cross_prefix}${cxx_default}"
4043 nm_default="${cross_prefix}${nm_default}"
4044 pkg_config_default="${cross_prefix}${pkg_config_default}"
4045 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
4046 ranlib_default="${cross_prefix}${ranlib_default} -D"
4048 ranlib_default="${cross_prefix}${ranlib_default}"
4050 strip_default="${cross_prefix}${strip_default}"
4051 windres_default="${cross_prefix}${windres_default}"
4053 sysinclude_default="${sysroot}/usr/include"
4055 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
4056 target_exec target_os x86asmexe nvcc
4057 enabled cross_compile || host_cc_default=$cc
4060 pkg_config_fail_message=""
4061 if ! $pkg_config --version >/dev/null 2>&1; then
4062 warn "$pkg_config not found, library detection may fail."
4064 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
4065 pkg_config_fail_message="
4066 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
4069 if test $doxygen != $doxygen_default && \
4070 ! $doxygen --version >/dev/null 2>&1; then
4071 warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
4076 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
4080 EXESUF=$(exesuf $target_os)
4081 HOSTEXESUF=$(exesuf $host_os)
4083 # set temporary file name
4084 : ${TMPDIR:=$TEMPDIR}
4088 if [ -n "$tempprefix" ] ; then
4090 tmpname="$tempprefix.${HOSTNAME}.${UID}"
4094 elif ! test_cmd mktemp -u XXXXXX; then
4095 # simple replacement for missing mktemp
4096 # NOT SAFE FOR GENERAL USE
4098 tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
4104 FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
4105 die "Unable to create temporary directory in $TMPDIR."
4108 tmp="${FFTMPDIR}/test"$2
4109 (set -C; exec > $tmp) 2> /dev/null ||
4110 die "Unable to create temporary file in $FFTMPDIR."
4114 trap 'rm -rf -- "$FFTMPDIR"' EXIT
4120 tmpfile TMPE $EXESUF
4132 # make sure we can execute files in $TMPDIR
4133 cat > $TMPSH 2>> $logfile <<EOF
4136 chmod +x $TMPSH >> $logfile 2>&1
4137 if ! $TMPSH >> $logfile 2>&1; then
4139 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
4140 variable to another directory and make sure that it is not mounted noexec.
4142 die "Sanity test failed."
4148 # Filter out MSVC cl.exe options from cflags that shouldn't
4149 # be passed to gas-preprocessor
4159 -Wno-switch) echo -Wno-switch-enum ;;
4160 -Wno-format-zero-length) ;;
4161 -Wdisabled-optimization) ;;
4162 -Wno-pointer-sign) echo -Wno-other ;;
4168 msvc_common_flags(){
4171 # In addition to specifying certain flags under the compiler
4172 # specific filters, they must be specified here as well or else the
4173 # generic catch all at the bottom will print the original flag.
4178 -fomit-frame-pointer) ;;
4182 -fno-signed-zeros) ;;
4186 -lz) echo zlib.lib ;;
4187 -lx264) echo libx264.lib ;;
4189 -l*) echo ${flag#-l}.lib ;;
4190 -LARGEADDRESSAWARE) echo $flag ;;
4191 -L*) echo -libpath:${flag#-L} ;;
4198 msvc_common_flags "$@"
4201 -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
4203 -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
4204 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
4205 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
4207 -wd4273 -wd4554 -wd4701 -wd4703 ;;
4213 msvc_common_flags "$@"
4216 # Despite what Intel's documentation says -Wall, which is supported
4217 # on Windows, does enable remarks so disable them here.
4218 -Wall) echo $flag -Qdiag-disable:remark ;;
4219 -std=c99) echo -Qstd=c99 ;;
4238 case "${flag#*=}" in
4239 native) echo -xtarget=native ;;
4240 v9|niagara) echo -xarch=sparc ;;
4241 ultrasparc) echo -xarch=sparcvis ;;
4242 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
4243 i586|pentium) echo -xchip=pentium ;;
4244 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
4245 pentium3*|c3-2) echo -xtarget=pentium3 ;;
4246 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
4247 pentium4*) echo -xtarget=pentium4 ;;
4248 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
4249 *-sse3) echo -xarch=sse3 ;;
4250 core2) echo -xarch=ssse3 -xchip=core2 ;;
4251 bonnell) echo -xarch=ssse3 ;;
4252 corei7|nehalem) echo -xtarget=nehalem ;;
4253 westmere) echo -xtarget=westmere ;;
4254 silvermont) echo -xarch=sse4_2 ;;
4255 corei7-avx|sandybridge) echo -xtarget=sandybridge ;;
4256 core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
4258 amdfam10|barcelona) echo -xtarget=barcelona ;;
4259 btver1) echo -xarch=amdsse4a ;;
4260 btver2|bdver*|znver*) echo -xarch=avx ;;
4261 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
4262 k8|opteron|athlon64|athlon-fx)
4263 echo -xarch=sse2a ;;
4264 athlon*) echo -xarch=pentium_proa ;;
4267 -std=c99) echo -xc99 ;;
4268 -fomit-frame-pointer) echo -xregs=frameptr ;;
4269 -fPIC) echo -KPIC -xcode=pic32 ;;
4270 -W*,*) echo $flag ;;
4271 -f*-*|-W*|-mimpure-text) ;;
4283 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
4284 unset _ld_o _ldflags _ld_lib _ld_path
4285 unset _depflags _DEPCMD _DEPFLAGS
4288 if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
4289 true # no-op to avoid reading stdin in following checks
4290 elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
4292 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
4293 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
4294 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4297 elif $_cc -v 2>&1 | grep -qi ^gcc; then
4299 gcc_version=$($_cc --version | head -n1)
4300 gcc_basever=$($_cc -dumpversion)
4301 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
4302 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
4303 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
4304 case $gcc_basever in
4307 *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
4309 if [ "$first" = true ]; then
4310 case $gcc_basever in
4312 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
4317 elif $_cc --version 2>/dev/null | grep -q ^icc; then
4319 _ident=$($_cc --version | head -n1)
4324 _flags_filter=icc_flags
4325 elif $_cc -v 2>&1 | grep -q xlc; then
4327 _ident=$($_cc -qversion 2>/dev/null | head -n1)
4329 _cflags_size='-O5 -qcompact'
4330 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
4331 test -d "$sysroot" || die "No valid sysroot specified."
4333 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
4334 armcc_conf="$PWD/armcc.conf"
4335 $_cc --arm_linux_configure \
4336 --arm_linux_config_file="$armcc_conf" \
4337 --configure_sysroot="$sysroot" \
4338 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
4339 die "Error creating armcc configuration file."
4340 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
4341 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
4342 as_default="${cross_prefix}gcc"
4346 elif $_cc -v 2>&1 | grep -q clang && ! $_cc -? > /dev/null 2>&1; then
4348 _ident=$($_cc --version 2>/dev/null | head -n1)
4349 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4352 elif $_cc -V 2>&1 | grep -q Sun; then
4354 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
4355 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
4356 _DEPFLAGS='-xM1 -xc99'
4359 _cflags_size='-O5 -xspace'
4360 _flags_filter=suncc_flags
4361 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
4363 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4364 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4367 _flags_filter='filter_out -Wdisabled-optimization'
4368 elif $_cc -v 2>&1 | grep -q Open64; then
4370 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4371 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4374 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
4375 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
4377 _ident=$($_cc | head -n1)
4378 # 4509: "This form of conditional instruction is deprecated"
4379 _flags="-nologo -ignore 4509"
4380 _flags_filter=armasm_flags
4381 elif $_cc 2>&1 | grep -q Intel; then
4383 _ident=$($_cc 2>&1 | head -n1)
4384 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
4385 # Not only is O3 broken on 13.x+ but it is slower on all previous
4386 # versions (tested) as well.
4388 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
4389 if $_cc 2>&1 | grep -q Linker; then
4396 _flags_filter=icl_flags
4398 _ld_path='-libpath:'
4399 # -Qdiag-error to make icl error when seeing certain unknown arguments
4400 _flags='-nologo -Qdiag-error:4044,10157'
4401 # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
4402 # with MSVC which enables it by default.
4403 _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
4405 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
4406 # lld can emulate multiple different linkers; in ms link.exe mode,
4407 # the -? parameter gives the help output which contains an identifyable
4408 # string, while it gives an error in other modes.
4410 # The link.exe mode doesn't have a switch for getting the version,
4411 # but we can force it back to gnu mode and get the version from there.
4412 _ident=$($_cc -flavor gnu --version 2>/dev/null)
4414 _flags_filter=msvc_flags
4416 _ld_path='-libpath:'
4417 elif $_cc -nologo- 2>&1 | grep -q Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then
4419 _ident=$($_cc 2>&1 | head -n1 | tr -d '\r')
4420 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
4421 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
4425 if $_cc -nologo- 2>&1 | grep -q Linker; then
4432 _flags_filter=msvc_flags
4434 _ld_path='-libpath:'
4437 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
4439 _ident=$($_cc --version | head -n1)
4443 _flags_filter=cparser_flags
4446 eval ${pfx}_type=\$_type
4447 eval ${pfx}_ident=\$_ident
4451 eval ${1}_C=\${_cc_c-\${${1}_C}}
4452 eval ${1}_E=\${_cc_e-\${${1}_E}}
4453 eval ${1}_O=\${_cc_o-\${${1}_O}}
4455 if [ -n "$_depflags" ]; then
4456 eval ${1}_DEPFLAGS=\$_depflags
4458 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
4459 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
4460 eval DEP${1}FLAGS=\$_flags
4464 probe_cc cc "$cc" "true"
4465 cflags_filter=$_flags_filter
4466 cflags_speed=$_cflags_speed
4467 cflags_size=$_cflags_size
4468 cflags_noopt=$_cflags_noopt
4469 add_cflags $_flags $_cflags
4470 cc_ldflags=$_ldflags
4474 probe_cc hostcc "$host_cc"
4475 host_cflags_filter=$_flags_filter
4476 host_cflags_speed=$_cflags_speed
4477 add_host_cflags $_flags $_cflags
4480 test -n "$cc_type" && enable $cc_type ||
4481 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
4483 : ${as_default:=$cc}
4484 : ${objcc_default:=$cc}
4485 : ${dep_cc_default:=$cc}
4486 : ${ld_default:=$cc}
4487 : ${host_ld_default:=$host_cc}
4488 set_default ar as objcc dep_cc ld ln_s host_ld windres
4491 asflags_filter=$_flags_filter
4492 add_asflags $_flags $_cflags
4495 probe_cc objcc "$objcc"
4496 objcflags_filter=$_flags_filter
4497 add_objcflags $_flags $_cflags
4501 ldflags_filter=$_flags_filter
4502 add_ldflags $_flags $_ldflags
4503 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
4505 LD_LIB=${_ld_lib-$LD_LIB}
4506 LD_PATH=${_ld_path-$LD_PATH}
4508 probe_cc hostld "$host_ld"
4509 host_ldflags_filter=$_flags_filter
4510 add_host_ldflags $_flags $_ldflags
4511 HOSTLD_O=${_ld_o-$HOSTLD_O}
4513 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
4514 probe_cc depcc "$dep_cc"
4515 CCDEP=${_DEPCMD:-$DEPCMD}
4516 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
4520 if $ar 2>&1 | grep -q Microsoft; then
4523 elif $ar 2>&1 | grep -q "\[D\] "; then
4531 add_cflags $extra_cflags
4532 add_cxxflags $extra_cxxflags
4533 add_objcflags $extra_objcflags
4534 add_asflags $extra_cflags
4536 if test -n "$sysroot"; then
4539 add_cppflags --sysroot="$sysroot"
4540 add_ldflags --sysroot="$sysroot"
4545 if test "$cpu" = host; then
4546 enabled cross_compile &&
4547 die "--cpu=host makes no sense when cross-compiling."
4552 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4554 s/.*$1=\\([^ ]*\\).*/\\1/
4559 cpu=$(check_native -march || check_native -mcpu)
4563 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4564 sed -n "/cc1.*-target-cpu /{
4565 s/.*-target-cpu \\([^ ]*\\).*/\\1/
4570 cpu=$(check_native -march)
4574 test "${cpu:-host}" = host &&
4575 die "--cpu=host not supported with compiler $cc"
4578 # Deal with common $arch aliases
4602 "Power Macintosh"|ppc*|powerpc*)
4617 i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
4622 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
4625 # Add processor-specific flags
4626 if enabled aarch64; then
4630 cpuflags="-march=$cpu"
4633 cpuflags="-mcpu=$cpu"
4637 elif enabled alpha; then
4639 cpuflags="-mcpu=$cpu"
4641 elif enabled arm; then
4644 test_cpp_condition stddef.h \
4645 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
4650 if check_arm_arch 4; then echo armv4
4651 elif check_arm_arch 4T; then echo armv4t
4652 elif check_arm_arch 5; then echo armv5
4653 elif check_arm_arch 5E; then echo armv5e
4654 elif check_arm_arch 5T; then echo armv5t
4655 elif check_arm_arch 5TE; then echo armv5te
4656 elif check_arm_arch 5TEJ; then echo armv5te
4657 elif check_arm_arch 6; then echo armv6
4658 elif check_arm_arch 6J; then echo armv6j
4659 elif check_arm_arch 6K; then echo armv6k
4660 elif check_arm_arch 6Z; then echo armv6z
4661 elif check_arm_arch 6KZ; then echo armv6zk
4662 elif check_arm_arch 6ZK; then echo armv6zk
4663 elif check_arm_arch 6T2; then echo armv6t2
4664 elif check_arm_arch 7; then echo armv7
4665 elif check_arm_arch 7A 7_A; then echo armv7-a
4666 elif check_arm_arch 7S; then echo armv7-a
4667 elif check_arm_arch 7R 7_R; then echo armv7-r
4668 elif check_arm_arch 7M 7_M; then echo armv7-m
4669 elif check_arm_arch 7EM 7E_M; then echo armv7-m
4670 elif check_arm_arch 8A 8_A; then echo armv8-a
4674 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
4678 cpuflags="-march=$cpu"
4679 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
4682 cpuflags="-mcpu=$cpu"
4684 cortex-a*) subarch=armv7a ;;
4685 cortex-r*) subarch=armv7r ;;
4686 cortex-m*) enable thumb; subarch=armv7m ;;
4687 arm11*) subarch=armv6 ;;
4688 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
4689 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
4690 *) subarch=$(probe_arm_arch) ;;
4696 armv5t*) enable fast_clz ;;
4699 disabled fast_unaligned || enable fast_unaligned
4703 elif enabled avr32; then
4708 cpuflags="-mpart=$cpu"
4712 cpuflags="-march=$cpu"
4716 cpuflags="-mcpu=$cpu"
4720 cpuflags="-march=$cpu"
4724 elif enabled bfin; then
4726 cpuflags="-mcpu=$cpu"
4728 elif enabled mips; then
4730 cpuflags="-march=$cpu"
4732 if [ "$cpu" != "generic" ]; then
4742 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
4753 enable local_aligned
4754 enable simd_align_16
4758 enable fast_unaligned
4759 disable aligned_stack
4765 cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4768 cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4771 cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4776 # Unknown CPU. Disable everything.
4777 warn "unknown CPU. Disabling all MIPS optimizations."
4800 24kef*|34kf*|1004kf*)
4808 check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
4812 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4816 check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4820 # We do not disable anything. Is up to the user to disable the unwanted features.
4821 warn 'generic cpu selected'
4824 elif enabled ppc; then
4828 case $(tolower $cpu) in
4829 601|ppc601|powerpc601)
4830 cpuflags="-mcpu=601"
4833 603*|ppc603*|powerpc603*)
4834 cpuflags="-mcpu=603"
4837 604*|ppc604*|powerpc604*)
4838 cpuflags="-mcpu=604"
4841 g3|75*|ppc75*|powerpc75*)
4842 cpuflags="-mcpu=750"
4845 g4|745*|ppc745*|powerpc745*)
4846 cpuflags="-mcpu=7450"
4849 74*|ppc74*|powerpc74*)
4850 cpuflags="-mcpu=7400"
4853 g5|970|ppc970|powerpc970)
4854 cpuflags="-mcpu=970"
4858 cpuflags="-mcpu=$cpu"
4862 cpuflags="-mcpu=$cpu"
4865 cpuflags="-mcpu=cell"
4870 cpuflags="-mcpu=e500mc"
4874 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4879 cpuflags="-mcpu=8540 -mhard-float"
4885 elif enabled sparc; then
4888 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4889 cpuflags="-mcpu=$cpu"
4891 ultrasparc*|niagara[234])
4892 cpuflags="-mcpu=$cpu"
4896 elif enabled x86; then
4900 cpuflags="-march=$cpu"
4904 # targets that do NOT support nopl and conditional mov (cmov)
4905 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4906 cpuflags="-march=$cpu"
4909 # targets that do support nopl and conditional mov (cmov)
4910 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4911 |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
4912 |amdfam10|barcelona|b[dt]ver*|znver*)
4913 cpuflags="-march=$cpu"
4917 # targets that do support conditional mov but on which it's slow
4918 pentium4|pentium4m|prescott|nocona)
4919 cpuflags="-march=$cpu"
4927 if [ "$cpu" != generic ]; then
4928 add_cflags $cpuflags
4929 add_asflags $cpuflags
4930 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
4933 # compiler sanity check
4935 int main(void){ return 0; }
4937 if test "$?" != 0; then
4938 echo "$cc is unable to create an executable file."
4939 if test -z "$cross_prefix" && ! enabled cross_compile ; then
4940 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4941 echo "Only do this if you know what cross compiling means."
4943 die "C compiler test failed."
4946 add_cppflags -D_ISOC99_SOURCE
4947 add_cxxflags -D__STDC_CONSTANT_MACROS
4948 check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
4950 # some compilers silently accept -std=c11, so we also need to check that the
4951 # version macro is defined properly
4952 test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" &&
4953 add_cflags -std=c11 ||
4954 check_cflags -std=c99
4956 check_cppflags -D_FILE_OFFSET_BITS=64
4957 check_cppflags -D_LARGEFILE_SOURCE
4959 add_host_cppflags -D_ISOC99_SOURCE
4960 check_host_cflags -std=c99
4961 check_host_cflags -Wall
4962 check_host_cflags $host_cflags_speed
4967 expr=${3:-'sizeof(void *) > 4'}
4968 test_code cc "" "int test[2*($expr) - 1]" &&
4969 subarch=$arch64 || subarch=$arch32
4975 enabled shared && enable_weak pic
4978 check_64bit mips mips64 '_MIPS_SIM > 1'
4979 enabled shared && enable_weak pic
4982 check_64bit parisc parisc64
4983 enabled shared && enable_weak pic
4986 check_64bit ppc ppc64
4987 enabled shared && enable_weak pic
4990 check_64bit s390 s390x
4991 enabled shared && enable_weak pic
4994 check_64bit sparc sparc64
4995 enabled shared && enable_weak pic
4998 check_64bit x86_32 x86_64
4999 # Treat x32 as x64 for now. Note it also needs pic if shared
5000 test "$subarch" = "x86_32" && test_cpp_condition stddef.h 'defined(__x86_64__)' &&
5001 subarch=x86_64 && enable x86_64 && disable x86_32
5002 if enabled x86_64; then
5003 enabled shared && enable_weak pic
5013 add_cppflags '-I\$(SRC_PATH)/compat/aix'
5014 enabled shared && add_ldflags -Wl,-brtl
5015 arflags='-Xany -r -c'
5020 enable section_data_rel_ro
5021 SLIB_INSTALL_NAME='$(SLIBNAME)'
5023 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
5026 prefix_default="/boot/common"
5027 network_extralibs="-lnetwork"
5031 SHFLAGS='-shared -Wl,-h,$$(@F)'
5032 enabled x86 && append SHFLAGS -mimpure-text
5033 network_extralibs="-lsocket -lnsl"
5034 add_cppflags -D__EXTENSIONS__
5035 # When using suncc to build, the Solaris linker will mark
5036 # an executable with each instruction set encountered by
5037 # the Solaris assembler. As our libraries contain their own
5038 # guards for processor-specific code, instead suppress
5039 # generation of the HWCAPS ELF section on Solaris x86 only.
5040 enabled_all suncc x86 &&
5041 echo "hwcap_1 = OVERRIDE;" > mapfile &&
5042 add_ldflags -Wl,-M,mapfile
5043 nm_default='nm -P -g'
5045 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
5049 oss_indev_extralibs="-lossaudio"
5050 oss_outdev_extralibs="-lossaudio"
5051 enabled gcc || check_ldflags -Wl,-zmuldefs
5057 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
5059 oss_indev_extralibs="-lossaudio"
5060 oss_outdev_extralibs="-lossaudio"
5068 add_extralibs -lpoll -lgnugetopt
5072 enabled ppc && add_asflags -force_cpusubtype_ALL
5073 install_name_dir_default='$(SHLIBDIR)'
5074 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
5075 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
5077 add_ldflags -Wl,-dynamic,-search_paths_first
5078 check_cflags -Werror=partial-availability
5080 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
5081 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
5082 enabled x86_64 && objformat="macho64" || objformat="macho32"
5083 enabled_any pic shared x86_64 ||
5084 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
5085 check_header dispatch/dispatch.h &&
5086 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
5087 if test -n "$sysroot"; then
5088 is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
5089 is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot
5091 version_script='-exported_symbols_list'
5092 VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
5095 die "Native MSYS builds are discouraged, please use the MINGW environment."
5100 if enabled x86_64; then
5101 LIBTARGET="i386:x86-64"
5102 elif enabled arm; then
5104 elif enabled aarch64; then
5107 if enabled shared; then
5108 # Cannot build both shared and static libs when using dllimport.
5111 enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres
5112 enabled x86_32 && check_ldflags -Wl,--large-address-aware
5113 shlibdir_default="$bindir_default"
5116 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5117 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5118 if test_cmd lib.exe -list; then
5119 SLIB_EXTRA_CMD=-'lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
5120 if enabled x86_64; then
5124 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
5126 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5128 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
5129 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
5130 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)'
5131 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-image-base $$(@:$(SLIBSUF)=.def)'
5132 enabled x86_64 && objformat="win64" || objformat="win32"
5133 dlltool="${cross_prefix}dlltool"
5136 check_ldflags -Wl,--nxcompat,--dynamicbase
5137 # Lets work around some stupidity in binutils.
5138 # ld will strip relocations from executables even though we need them
5139 # for dynamicbase (ASLR). Using -pie does retain the reloc section
5140 # however ld then forgets what the entry point should be (oops) so we
5141 # have to manually (re)set it.
5142 if enabled x86_32; then
5143 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
5144 elif enabled x86_64; then
5145 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
5146 check_ldflags -Wl,--high-entropy-va # binutils 2.25
5147 # Set image base >4GB for extra entropy with HEASLR
5148 add_ldexeflags -Wl,--image-base,0x140000000
5149 append SHFLAGS -Wl,--image-base,0x180000000
5154 if enabled shared; then
5155 # Link to the import library instead of the normal static library
5158 # Cannot build both shared and static libs with MSVC or icl.
5161 enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
5162 shlibdir_default="$bindir_default"
5165 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5166 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5167 SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
5168 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5170 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
5171 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
5172 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
5173 enabled x86_64 && objformat="win64" || objformat="win32"
5179 shlibdir_default="$bindir_default"
5182 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5183 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5184 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5186 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
5187 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
5188 enabled x86_64 && objformat="win64" || objformat="win32"
5190 enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres
5191 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5193 *-dos|freedos|opendos)
5194 network_extralibs="-lsocket"
5197 add_cppflags -U__STRICT_ANSI__
5200 enable section_data_rel_ro
5201 enabled_any arm aarch64 && enable_weak linux_perf
5205 ranlib="echo ignoring ranlib"
5211 add_cppflags -D_GNU_SOURCE
5212 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
5213 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
5217 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5218 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
5219 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \
5220 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \
5221 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \
5222 echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \
5223 emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def'
5224 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \
5225 emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;'
5226 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5228 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib'
5230 enable_weak os2threads
5233 add_cppflags -D_BSD_SOURCE
5238 add_cppflags -D_QNX_SOURCE
5239 network_extralibs="-lsocket"
5244 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
5245 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
5246 add_ldflags -Wl,--target1-abs,--no-undefined \
5247 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
5248 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
5249 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
5250 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
5251 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
5258 die "Unknown OS '$target_os'."
5262 # test if creating links works
5263 link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX)
5264 link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX)
5266 $ln_s "$link_dest" "$link_name"
5267 touch "$link_dest/test_file"
5268 if [ "$source_path" != "." ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then
5269 # create link to source path
5270 [ -e src ] && rm src
5271 $ln_s "$source_path" src
5274 # creating directory links doesn't work
5275 # fall back to using the full source path
5276 source_link="$source_path"
5282 # determine libc flavour
5287 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
5288 if test_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
5289 eval ${pfx}libc_type=uclibc
5290 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5291 elif test_${pfx}cpp_condition features.h "defined __GLIBC__"; then
5292 eval ${pfx}libc_type=glibc
5293 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5294 # MinGW headers can be installed on Cygwin, so check for newlib first.
5295 elif test_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
5296 eval ${pfx}libc_type=newlib
5297 add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
5298 # MinGW64 is backwards compatible with MinGW32, so check for it first.
5299 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
5300 eval ${pfx}libc_type=mingw64
5301 if test_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
5302 add_compat msvcrt/snprintf.o
5303 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
5305 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5306 eval test \$${pfx_no_}cc_type = "gcc" &&
5307 add_${pfx}cppflags -D__printf__=__gnu_printf__
5308 test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
5309 add_${pfx}cppflags -D_WIN32_WINNT=0x0600
5310 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
5311 test_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
5312 eval ${pfx}libc_type=mingw32
5313 test_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
5314 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
5315 die "ERROR: MinGW32 runtime version must be >= 3.15."
5316 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5317 test_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
5318 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
5319 test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
5320 add_${pfx}cppflags -D_WIN32_WINNT=0x0600
5321 eval test \$${pfx_no_}cc_type = "gcc" &&
5322 add_${pfx}cppflags -D__printf__=__gnu_printf__
5323 elif test_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
5324 eval ${pfx}libc_type=msvcrt
5325 if test_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
5326 if [ "$pfx" = host_ ]; then
5327 add_host_cppflags -Dsnprintf=_snprintf
5329 add_compat strtod.o strtod=avpriv_strtod
5330 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
5331 _snprintf=avpriv_snprintf \
5332 vsnprintf=avpriv_vsnprintf
5335 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
5336 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
5337 # 0x601 by default unless something else is set by the user.
5338 # This can easily lead to us detecting functions only present
5339 # in such new versions and producing binaries requiring windows 7.0.
5340 # Therefore explicitly set the default to Vista unless the user has
5341 # set something else on the command line.
5342 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
5343 # family. For these cases, configure is free to use any functions
5344 # found in the SDK headers by default. (Alternatively, we could force
5345 # _WIN32_WINNT to 0x0602 in that case.)
5346 test_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
5347 { test_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0600; }
5348 #ifdef WINAPI_FAMILY
5349 #include <winapifamily.h>
5350 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
5355 if [ "$pfx" = "" ]; then
5356 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
5357 check_func strtoull || add_cflags -Dstrtoull=_strtoui64
5359 elif test_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
5360 eval ${pfx}libc_type=klibc
5361 elif test_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
5362 eval ${pfx}libc_type=bionic
5363 elif test_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
5364 eval ${pfx}libc_type=solaris
5365 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
5369 void *v = localtime_r;
5371 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
5373 void *v = localtime_r;
5376 eval test -n "\${${pfx}libc_type}" && enable ${pfx}libc_${libc_type}
5382 # hacks for compiler/libc/os combinations
5386 add_compat strtod.o strtod=avpriv_strtod
5390 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
5391 add_cppflags '-I\$(SRC_PATH)/compat/float'
5393 test_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
5396 : ${shlibdir_default:="$libdir"}
5397 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
5399 set_default $PATHS_LIST
5402 disabled optimizations || enabled ossfuzz || check_cflags -fomit-frame-pointer
5405 disabled pic && return
5408 case "$target_os" in
5409 mingw*|cygwin*|win*)
5418 enabled pic && enable_weak_pic
5420 test_cc <<EOF || die "Symbol mangling check failed."
5423 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
5424 extern_prefix=${sym%%ff_extern*}
5426 ! disabled inline_asm && check_inline_asm inline_asm '"" ::'
5428 for restrict_keyword in restrict __restrict__ __restrict ""; do
5429 test_code cc "" "char * $restrict_keyword p" && break
5432 check_cc pragma_deprecated "" '_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")'
5434 # The global variable ensures the bits appear unchanged in the object file.
5435 test_cc <<EOF || die "endian test failed"
5436 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
5438 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
5440 check_cc const_nan math.h "struct { double d; } static const bar[] = { { NAN } }"
5442 if ! enabled ppc64 || enabled bigendian; then
5447 log "check_gas using '$as' as AS"
5448 # :vararg is used on aarch64, arm and ppc altivec
5450 .macro m n, y:vararg=0
5454 # .altmacro is only used in arm asm
5455 ! enabled arm || check_as gnu_as ".altmacro"
5458 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
5460 enabled_any arm aarch64 && nogas=die
5461 enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
5465 arm*) gaspp_as_type=armasm; as_noop=-h ;;
5466 gcc) gaspp_as_type=gas ;;
5467 *) gaspp_as_type=$as_type ;;
5470 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
5472 test "${as#*gas-preprocessor.pl}" != "$as" ||
5473 test_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
5474 gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
5476 if ! check_gas ; then
5479 $nogas "GNU assembler not found, install/update gas-preprocessor"
5482 check_as as_func ".func test
5486 check_inline_asm inline_asm_labels '"1:\n"'
5488 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
5490 if enabled aarch64; then
5491 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
5492 # internal assembler in clang 3.3 does not support this instruction
5493 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
5494 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
5496 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
5498 elif enabled alpha; then
5502 elif enabled arm; then
5504 enabled msvc && check_cpp_condition thumb stddef.h "defined _M_ARMT"
5505 test_cpp_condition stddef.h "defined __thumb__" && test_cc <<EOF && enable_weak thumb
5506 float func(float a, float b){ return a+b; }
5508 enabled thumb && check_cflags -mthumb || check_cflags -marm
5510 if check_cpp_condition vfp_args stddef.h "defined __ARM_PCS_VFP"; then
5512 elif check_cpp_condition vfp_args stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
5514 elif ! test_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
5515 case "${cross_prefix:-$cc}" in
5516 *hardfloat*) enable vfp_args; fpabi=vfp ;;
5517 *) check_ld "cc" vfp_args <<EOF && fpabi=vfp || fpabi=soft ;;
5518 __asm__ (".eabi_attribute 28, 1");
5519 int main(void) { return 0; }
5522 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
5525 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
5526 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
5527 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
5528 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
5529 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
5530 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
5531 enabled setend && check_insn setend 'setend be'
5533 [ $target_os = linux ] || [ $target_os = android ] ||
5534 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
5537 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
5539 check_as as_arch_directive ".arch armv7-a"
5540 check_as as_dn_directive "ra .dn d0.i16"
5541 check_as as_fpu_directive ".fpu neon"
5543 # llvm's integrated assembler supports .object_arch from llvm 3.5
5544 [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] &&
5545 check_as as_object_arch ".object_arch armv4"
5547 # MS armasm fails to assemble our PIC constructs
5548 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
5550 elif enabled mips; then
5552 enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
5553 enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
5554 enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
5556 # Enable minimum ISA based on selected options
5557 if enabled mips64; then
5558 enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6'
5559 enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2'
5560 disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64'
5562 enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6'
5563 enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5'
5564 enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2'
5565 disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32'
5568 enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float'
5569 enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
5570 enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_header msa.h || disable msa
5571 enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
5572 enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
5574 if enabled bigendian && enabled msa; then
5578 elif enabled parisc; then
5580 if enabled gcc; then
5581 case $($cc -dumpversion) in
5582 4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
5586 elif enabled ppc; then
5588 enable local_aligned
5590 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
5591 check_inline_asm ibm_asm '"add 0, 0, 0"'
5592 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
5593 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
5595 if enabled altivec; then
5596 check_cflags -maltivec -mabi=altivec
5598 # check if our compiler supports Motorola AltiVec C API
5599 check_cc altivec altivec.h "vector signed int v1 = (vector signed int) { 0 };
5600 vector signed int v2 = (vector signed int) { 1 };
5601 v1 = vec_add(v1, v2);"
5603 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
5606 if enabled vsx; then
5607 check_cflags -mvsx &&
5608 check_cc vsx altivec.h "int v[4] = { 0 };
5609 vector signed int v1 = vec_vsx_ld(0, v);"
5612 if enabled power8; then
5613 check_cpp_condition power8 "altivec.h" "defined(_ARCH_PWR8)"
5616 elif enabled x86; then
5618 check_builtin rdtsc intrin.h "__rdtsc()"
5619 check_builtin mm_empty mmintrin.h "_mm_empty()"
5621 enable local_aligned
5623 # check whether EBP is available on x86
5624 # As 'i' is stored on the stack, this program will crash
5625 # if the base pointer is used to access it because the
5626 # base pointer is cleared in the inline assembly code.
5627 check_exec_crash <<EOF && enable ebp_available
5629 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
5633 # check whether EBX is available on x86
5634 check_inline_asm ebx_available '""::"b"(0)' &&
5635 check_inline_asm ebx_available '"":::"%ebx"'
5637 # check whether xmm clobbers are supported
5638 check_inline_asm xmm_clobbers '"":::"%xmm0"'
5640 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
5641 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
5643 # check whether binutils is new enough to compile SSSE3/MMXEXT
5644 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
5645 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
5649 if test_cmd $x86asmexe_probe -v; then
5650 x86asmexe=$x86asmexe_probe
5652 x86asm_debug="-g -F dwarf"
5654 X86ASM_DEPFLAGS='-MD $(@:.o=.d)'
5655 elif test_cmd $x86asmexe_probe --version; then
5656 x86asmexe=$x86asmexe_probe
5658 x86asm_debug="-g dwarf2"
5659 X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)'
5662 check_x86asm x86asm "movbe ecx, [5]"
5665 if ! disabled_any asm mmx x86asm; then
5667 for program in $x86asmexe nasm yasm; do
5668 probe_x86asm $program && break
5670 disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build."
5671 X86ASMFLAGS="-f $objformat"
5672 enabled pic && append X86ASMFLAGS "-DPIC"
5673 test -n "$extern_prefix" && append X86ASMFLAGS "-DPREFIX"
5674 case "$objformat" in
5675 elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
5678 check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"
5679 check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0"
5680 check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3"
5681 check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3"
5682 check_x86asm cpunop "CPU amdnop"
5686 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
5693 check_cc intrinsics_neon arm_neon.h "int16x8_t test = vdupq_n_s16(0)"
5695 check_ldflags -Wl,--as-needed
5696 check_ldflags -Wl,-z,noexecstack
5698 if ! disabled network; then
5699 check_func getaddrinfo $network_extralibs
5700 check_func inet_aton $network_extralibs
5702 check_type netdb.h "struct addrinfo"
5703 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
5704 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
5705 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
5706 check_type poll.h "struct pollfd"
5707 check_type netinet/sctp.h "struct sctp_event_subscribe"
5708 check_struct "sys/socket.h" "struct msghdr" msg_flags
5709 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
5710 check_type netinet/in.h "struct sockaddr_in6"
5711 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
5712 check_type "sys/types.h sys/socket.h" socklen_t
5714 # Prefer arpa/inet.h over winsock2
5715 if check_header arpa/inet.h ; then
5716 check_func closesocket
5717 elif check_header winsock2.h ; then
5718 check_func_headers winsock2.h closesocket -lws2 &&
5719 network_extralibs="-lws2" ||
5720 { check_func_headers winsock2.h closesocket -lws2_32 &&
5721 network_extralibs="-lws2_32"; } || disable winsock2_h network
5722 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
5724 check_type ws2tcpip.h socklen_t
5725 check_type ws2tcpip.h "struct addrinfo"
5726 check_type ws2tcpip.h "struct group_source_req"
5727 check_type ws2tcpip.h "struct ip_mreq_source"
5728 check_type ws2tcpip.h "struct ipv6_mreq"
5729 check_type winsock2.h "struct pollfd"
5730 check_struct winsock2.h "struct sockaddr" sa_len
5731 check_type ws2tcpip.h "struct sockaddr_in6"
5732 check_type ws2tcpip.h "struct sockaddr_storage"
5738 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
5739 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
5740 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
5741 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
5742 check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
5743 check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
5744 check_builtin x264_csp_bgr "stdint.h x264.h" "X264_CSP_BGR"
5746 case "$custom_allocator" in
5748 # jemalloc by default does not use a prefix
5749 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
5752 require_pkg_config libtcmalloc libtcmalloc gperftools/tcmalloc.h tc_malloc
5757 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
5758 check_func ${malloc_prefix}memalign && enable memalign
5759 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
5762 check_func_headers stdlib.h arc4random
5763 check_lib clock_gettime time.h clock_gettime || check_lib clock_gettime time.h clock_gettime -lrt
5766 check_func gethrtime
5768 check_func getrusage
5769 check_func gettimeofday
5774 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
5775 check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt
5776 check_func sched_getaffinity
5777 check_func setrlimit
5778 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
5779 check_func strerror_r
5784 check_func_headers conio.h kbhit
5785 check_func_headers io.h setmode
5786 check_func_headers lzo/lzo1x.h lzo1x_999_compress
5787 check_func_headers mach/mach_time.h mach_absolute_time
5788 check_func_headers stdlib.h getenv
5789 check_func_headers sys/stat.h lstat
5791 check_func_headers windows.h GetProcessAffinityMask
5792 check_func_headers windows.h GetProcessTimes
5793 check_func_headers windows.h GetSystemTimeAsFileTime
5794 check_func_headers windows.h LoadLibrary
5795 check_func_headers windows.h MapViewOfFile
5796 check_func_headers windows.h PeekNamedPipe
5797 check_func_headers windows.h SetConsoleTextAttribute
5798 check_func_headers windows.h SetConsoleCtrlHandler
5799 check_func_headers windows.h Sleep
5800 check_func_headers windows.h VirtualAlloc
5801 check_func_headers glob.h glob
5803 check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
5805 check_header direct.h
5806 check_header dirent.h
5807 check_header dxgidebug.h
5809 check_header dxva2api.h -D_WIN32_WINNT=0x0600
5811 check_header linux/perf_event.h
5812 check_header libcrystalhd/libcrystalhd_if.h
5813 check_header malloc.h
5814 check_header net/udplite.h
5816 check_header sys/param.h
5817 check_header sys/resource.h
5818 check_header sys/select.h
5819 check_header sys/time.h
5820 check_header sys/un.h
5821 check_header termios.h
5822 check_header unistd.h
5823 check_header valgrind/valgrind.h
5824 check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
5825 check_header windows.h
5826 check_header X11/extensions/XvMClib.h
5827 check_header asm/types.h
5829 # it seems there are versions of clang in some distros that try to use the
5830 # gcc headers, which explodes for stdatomic
5831 # so we also check that atomics actually work here
5832 check_builtin stdatomic stdatomic.h "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0); foo += bar"
5834 check_lib advapi32 "windows.h" RegCloseKey -ladvapi32
5835 check_lib bcrypt "windows.h bcrypt.h" BCryptGenRandom -lbcrypt &&
5836 check_cpp_condition bcrypt bcrypt.h "defined BCRYPT_RNG_ALGORITHM"
5837 check_lib ole32 "windows.h" CoTaskMemFree -lole32
5838 check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32
5839 check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
5841 check_lib android android/native_window.h ANativeWindow_acquire -landroid
5842 check_lib mediandk "stdint.h media/NdkImage.h" AImage_delete -lmediandk
5843 check_lib camera2ndk "stdbool.h stdint.h camera/NdkCameraManager.h" ACameraManager_create -lcamera2ndk
5845 enabled appkit && check_apple_framework AppKit
5846 enabled audiotoolbox && check_apple_framework AudioToolbox
5847 enabled avfoundation && check_apple_framework AVFoundation
5848 enabled coreimage && check_apple_framework CoreImage
5849 enabled videotoolbox && check_apple_framework VideoToolbox
5851 check_apple_framework CoreFoundation
5852 check_apple_framework CoreMedia
5853 check_apple_framework CoreVideo
5855 enabled avfoundation && {
5856 disable coregraphics applicationservices
5857 check_lib coregraphics CoreGraphics/CoreGraphics.h CGGetActiveDisplayList "-framework CoreGraphics" ||
5858 check_lib applicationservices ApplicationServices/ApplicationServices.h CGGetActiveDisplayList "-framework ApplicationServices"; }
5860 enabled videotoolbox && {
5861 check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices"
5862 check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia"
5865 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
5867 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5868 check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5869 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
5870 check_type "windows.h d3d11.h" "ID3D11VideoContext"
5871 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
5873 check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
5874 check_type "va/va.h va/va_dec_vp8.h" "VAPictureParameterBufferVP8"
5875 check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
5876 check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
5877 check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
5878 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
5879 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
5880 check_type "va/va.h va/va_enc_mpeg2.h" "VAEncPictureParameterBufferMPEG2"
5881 check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
5882 check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9"
5884 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
5886 if ! disabled ffnvcodec; then
5887 check_pkg_config ffnvcodec "ffnvcodec >= 8.0.14.1" \
5888 "ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h" ""
5891 check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"
5893 if ! disabled w32threads && ! enabled pthreads; then
5894 check_func_headers "windows.h process.h" _beginthreadex &&
5895 check_type "windows.h" CONDITION_VARIABLE &&
5896 check_type "windows.h" INIT_ONCE &&
5897 enable w32threads || disable w32threads
5898 if ! enabled w32threads && enabled winrt; then
5899 check_func_headers "windows.h" CreateThread &&
5900 enable w32threads || disable w32threads
5904 # check for some common methods of building with pthread support
5905 # do this before the optional library checks as some of them require pthreads
5906 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5907 if check_lib pthreads pthread.h pthread_join -pthread &&
5908 check_lib pthreads pthread.h pthread_create -pthread; then
5910 elif check_lib pthreads pthread.h pthread_join -pthreads &&
5911 check_lib pthreads pthread.h pthread_create -pthreads; then
5912 add_cflags -pthreads
5913 elif check_lib pthreads pthread.h pthread_join -ldl -pthread &&
5914 check_lib pthreads pthread.h pthread_create -ldl -pthread; then
5915 add_cflags -ldl -pthread
5916 elif check_lib pthreads pthread.h pthread_join -lpthreadGC2 &&
5917 check_lib pthreads pthread.h pthread_create -lpthreadGC2; then
5919 elif check_lib pthreads pthread.h pthread_join -lpthread &&
5920 check_lib pthreads pthread.h pthread_create -lpthread; then
5922 elif check_func pthread_join && check_func pthread_create; then
5925 check_cc pthreads "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER"
5927 if enabled pthreads; then
5928 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" $pthreads_extralibs
5929 check_func pthread_cancel $pthreads_extralibs
5933 enabled zlib && check_lib zlib zlib.h zlibVersion -lz
5934 enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
5935 enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma
5937 # On some systems dynamic loading requires no extra linker flags
5938 check_lib libdl dlfcn.h "dlopen dlsym" || check_lib libdl dlfcn.h "dlopen dlsym" -ldl
5940 check_lib libm math.h sin -lm
5948 for func in $MATH_FUNCS; do
5949 eval check_mathfunc $func \${${func}_args:-1} $libm_extralibs
5952 for func in $COMPLEX_FUNCS; do
5953 eval check_complexfunc $func \${${func}_args:-1}
5956 # these are off by default, so fail if requested and not available
5957 enabled cuda_sdk && require cuda_sdk cuda.h cuCtxCreate -lcuda
5958 enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
5959 enabled decklink && { require_header DeckLinkAPI.h &&
5960 { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a060100" || die "ERROR: Decklink API version must be >= 10.6.1."; } }
5961 enabled libndi_newtek && require_header Processing.NDI.Lib.h
5962 enabled frei0r && require_header frei0r.h
5963 enabled gmp && require gmp gmp.h mpz_export -lgmp
5964 enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
5965 enabled jni && { [ $target_os = "android" ] && check_header jni.h && enabled pthreads || die "ERROR: jni not found"; }
5966 enabled ladspa && require_header ladspa.h
5967 enabled libaom && require_pkg_config libaom "aom >= 0.1.0" aom/aom_codec.h aom_codec_version
5968 enabled lv2 && require_pkg_config lv2 lilv-0 "lilv-0/lilv/lilv.h" lilv_world_new
5969 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5970 enabled libass && require_pkg_config libass libass ass/ass.h ass_library_init
5971 enabled libbluray && require_pkg_config libbluray libbluray libbluray/bluray.h bd_open
5972 enabled libbs2b && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open
5973 enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
5974 { check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 ||
5975 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5976 enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas
5977 enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2
5978 enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
5979 enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion
5980 enabled libfdk_aac && { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
5981 { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
5982 warn "using libfdk without pkg-config"; } }
5983 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"
5984 enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs
5985 enabled fontconfig && enable libfontconfig
5986 enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
5987 enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
5988 enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info
5989 enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu ||
5990 require libgme gme/gme.h gme_new_emu -lgme -lstdc++; }
5991 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5992 check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break;
5993 done || die "ERROR: libgsm not found"; }
5994 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc $pthreads_extralibs
5995 enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
5996 # While it may appear that require is being used as a pkg-config
5997 # fallback for libmfx, it is actually being used to detect a different
5998 # installation route altogether. If libmfx is installed via the Intel
5999 # Media SDK or Intel Media Server Studio, these don't come with
6000 # pkg-config support. Instead, users should make sure that the build
6001 # can find the libraries and headers through other means.
6002 enabled libmfx && { check_pkg_config libmfx libmfx "mfx/mfxvideo.h" MFXInit ||
6003 { require libmfx "mfx/mfxvideo.h" MFXInit "-llibmfx $advapi32_extralibs" && warn "using libmfx without pkg-config"; } }
6004 enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load
6005 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs
6006 enabled libmysofa && require libmysofa "mysofa.h" mysofa_load -lmysofa $zlib_extralibs
6007 enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc ||
6008 check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc ||
6009 die "ERROR: libnpp not found"; }
6010 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
6011 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
6012 enabled libopencv && { check_header opencv2/core/core_c.h &&
6013 { check_pkg_config libopencv opencv opencv2/core/core_c.h cvCreateImageHeader ||
6014 require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
6015 require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
6016 enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
6017 enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
6018 { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
6019 enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
6020 enabled libopus && {
6021 enabled libopus_decoder && {
6022 require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
6024 enabled libopus_encoder && {
6025 require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create
6028 enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new
6029 enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo
6030 enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
6031 enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++"
6032 enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer
6033 enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init ||
6034 require libsmbclient libsmbclient.h smbc_init -lsmbclient; }
6035 enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy -lstdc++
6036 enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
6037 enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init
6038 enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
6039 enabled libsrt && require_pkg_config libsrt "srt >= 1.2.0" srt/srt.h srt_socket
6040 enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate
6041 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
6042 enabled libtls && require_pkg_config libtls libtls tls.h tls_configure
6043 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
6044 { check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
6045 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
6046 enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
6047 enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
6048 enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 0.6.2" libvmaf.h compute_vmaf
6049 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
6050 enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init &&
6051 require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init
6054 enabled libvpx_vp8_decoder && {
6055 check_pkg_config libvpx_vp8_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
6056 check_lib libvpx_vp8_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver VPX_IMG_FMT_HIGHBITDEPTH" -lvpx ||
6057 die "ERROR: libvpx decoder version must be >=1.4.0";
6059 enabled libvpx_vp8_encoder && {
6060 check_pkg_config libvpx_vp8_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
6061 check_lib libvpx_vp8_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_IMG_FMT_HIGHBITDEPTH" -lvpx ||
6062 die "ERROR: libvpx encoder version must be >=1.4.0";
6064 enabled libvpx_vp9_decoder && {
6065 check_pkg_config libvpx_vp9_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
6066 check_lib libvpx_vp9_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs"
6068 enabled libvpx_vp9_encoder && {
6069 check_pkg_config libvpx_vp9_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
6070 check_lib libvpx_vp9_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs"
6072 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
6073 die "libvpx enabled but no supported decoders found"
6077 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
6078 enabled libwebp && {
6079 enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
6080 enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
6081 enabled libx264 && { check_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode ||
6082 { require libx264 "stdint.h x264.h" x264_encoder_encode "-lx264 $pthreads_extralibs $libm_extralibs" &&
6083 warn "using libx264 without pkg-config"; } } &&
6084 require_cpp_condition x264.h "X264_BUILD >= 118" &&
6085 check_cpp_condition libx262 x264.h "X264_MPEG2"
6086 enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
6087 require_cpp_condition x265.h "X265_BUILD >= 68"
6088 enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs"
6089 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
6090 enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version
6091 enabled libzmq && require_pkg_config libzmq libzmq zmq.h zmq_ctx_new
6092 enabled libzvbi && require_pkg_config libzvbi zvbi-0.2 libzvbi.h vbi_decoder_new &&
6093 { test_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
6094 enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
6095 enabled libxml2 && require_pkg_config libxml2 libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion
6096 enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; }
6097 enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
6098 { ! enabled cross_compile &&
6099 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
6100 add_ldflags -L/opt/vc/lib/ &&
6101 check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
6102 die "ERROR: mmal not found" &&
6103 check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
6104 enabled openal && { { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
6105 check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } ||
6106 die "ERROR: openal not found"; } &&
6107 { test_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
6108 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
6109 enabled opencl && { check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
6110 check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
6111 die "ERROR: opencl not found"; } &&
6112 { test_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
6113 test_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
6114 die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
6115 enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" ||
6116 check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
6117 check_lib opengl OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
6118 check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
6119 die "ERROR: opengl not found."
6121 enabled omx && require_header OMX_Core.h
6122 enabled omx_rpi && { check_header OMX_Core.h ||
6123 { ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_header OMX_Core.h ; } ||
6124 die "ERROR: OpenMAX IL headers not found"; } && enable omx
6125 enabled openssl && { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
6126 check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
6127 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
6128 check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
6129 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
6130 die "ERROR: openssl not found"; }
6131 enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/rk_mpi.h mpp_create &&
6132 require_pkg_config rockchip_mpp "rockchip_mpp >= 1.3.7" rockchip/rk_mpi.h mpp_create &&
6134 die "ERROR: rkmpp requires --enable-libdrm"; }
6137 if enabled gcrypt; then
6138 GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
6139 if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
6140 gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
6141 gcrypt_extralibs=$("${GCRYPT_CONFIG}" --libs)
6142 check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs ||
6143 die "ERROR: gcrypt not found"
6144 add_cflags $gcrypt_cflags
6146 require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
6150 if enabled sdl2; then
6151 SDL2_CONFIG="${cross_prefix}sdl2-config"
6152 test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 2.1.0" SDL_events.h SDL_PollEvent
6153 if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
6154 sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
6155 sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
6156 test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
6157 test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
6158 check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags &&
6161 if test $target_os = "mingw32"; then
6162 sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs)
6166 if enabled decklink; then
6168 mingw32*|mingw64*|win32|win64)
6169 decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
6170 decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
6175 enabled securetransport &&
6176 check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
6177 check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" ||
6178 disable securetransport
6180 enabled securetransport &&
6181 check_func SecItemImport "-Wl,-framework,CoreFoundation -Wl,-framework,Security"
6184 check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
6185 test_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" &&
6186 schannel_extralibs="-lsecur32" ||
6189 makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
6191 && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
6192 && enable makeinfo_html || disable makeinfo_html
6193 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
6194 perl -v > /dev/null 2>&1 && enable perl || disable perl
6195 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
6196 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
6198 # check V4L2 codecs available in the API
6199 check_header linux/fb.h
6200 check_header linux/videodev2.h
6201 test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
6202 check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;"
6203 check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;"
6204 check_cc mpeg1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG1;"
6205 check_cc mpeg2_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG2;"
6206 check_cc mpeg4_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG4;"
6207 check_cc hevc_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_HEVC;"
6208 check_cc h263_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H263;"
6209 check_cc h264_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H264;"
6210 check_cc vp8_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP8;"
6211 check_cc vp9_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP9;"
6213 check_header sys/videoio.h
6214 test_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
6216 check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
6217 check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
6218 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
6219 # w32api 3.12 had it defined wrong
6220 check_cpp_condition vfwcap_defines vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER"
6222 check_type "dshow.h" IBaseFilter
6224 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
6225 check_header "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h" ||
6226 check_header "machine/ioctl_meteor.h machine/ioctl_bt848.h" ||
6227 check_header "dev/video/meteor/ioctl_meteor.h dev/video/bktr/ioctl_bt848.h" ||
6228 check_header "dev/ic/bt8xx.h"
6230 if check_struct sys/soundcard.h audio_buf_info bytes; then
6231 enable_sanitized sys/soundcard.h
6233 test_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_sanitized sys/soundcard.h
6234 #include <sys/soundcard.h>
6239 enabled alsa && check_pkg_config alsa alsa "alsa/asoundlib.h" snd_pcm_htimestamp ||
6240 check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
6243 require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range
6245 enabled sndio && check_lib sndio sndio.h sio_open -lsndio
6247 if enabled libcdio; then
6248 check_pkg_config libcdio libcdio_paranoia "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open ||
6249 check_pkg_config libcdio libcdio_paranoia "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open ||
6250 check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6251 check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6252 die "ERROR: No usable libcdio/cdparanoia found"
6255 enabled libxcb && check_pkg_config libxcb "xcb >= 1.4" xcb/xcb.h xcb_connect ||
6256 disable libxcb_shm libxcb_shape libxcb_xfixes
6258 if enabled libxcb; then
6259 enabled libxcb_shm && check_pkg_config libxcb_shm xcb-shm xcb/shm.h xcb_shm_attach
6260 enabled libxcb_shape && check_pkg_config libxcb_shape xcb-shape xcb/shape.h xcb_shape_get_rectangles
6261 enabled libxcb_xfixes && check_pkg_config libxcb_xfixes xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image
6264 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
6266 # d3d11va requires linking directly to dxgi and d3d11 if not building for
6267 # the desktop api partition
6268 test_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11"
6269 #ifdef WINAPI_FAMILY
6270 #include <winapifamily.h>
6271 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
6272 #error desktop, not uwp
6274 // WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
6277 #error no family set
6282 check_lib vaapi va/va.h vaInitialize -lva
6285 check_cc vaapi "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)"
6287 if enabled vaapi; then
6288 check_lib vaapi_drm "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm
6289 check_lib vaapi_x11 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 -lX11
6293 check_cpp_condition vaapi_1 "va/va.h" "VA_CHECK_VERSION(1, 0, 0)"
6295 if enabled_all opencl libdrm ; then
6296 check_type "CL/cl_intel.h" "clCreateImageFromFdINTEL_fn" &&
6297 enable opencl_drm_beignet
6298 check_func_headers "CL/cl_ext.h" clImportMemoryARM &&
6299 enable opencl_drm_arm
6302 if enabled_all opencl vaapi ; then
6303 enabled opencl_drm_beignet && enable opencl_vaapi_beignet
6304 if enabled libmfx ; then
6305 check_type "CL/cl.h CL/va_ext.h" "clCreateFromVA_APIMediaSurfaceINTEL_fn" &&
6306 enable opencl_vaapi_intel_media
6310 if enabled_all opencl dxva2 ; then
6311 check_type "CL/cl_dx9_media_sharing.h" cl_dx9_surface_info_khr &&
6315 if enabled_all opencl d3d11va ; then
6316 check_type "CL/cl_d3d11.h" clGetDeviceIDsFromD3D11KHR_fn &&
6321 check_cpp_condition vdpau vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP"
6324 check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
6326 enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd
6328 if enabled x86; then
6330 mingw32*|mingw64*|win32|win64|linux|cygwin*)
6333 disable ffnvcodec cuvid nvdec nvenc
6337 disable ffnvcodec cuvid nvdec nvenc
6340 enabled ffnvcodec && enable cuda
6343 test_cc -I$source_path <<EOF || disable nvenc
6344 #include <ffnvcodec/nvEncodeAPI.h>
6345 NV_ENCODE_API_FUNCTION_LIST flist;
6346 void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; }
6347 int main(void) { return 0; }
6351 check_cpp_condition amf "AMF/core/Version.h" \
6352 "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400040001"
6354 # Funny iconv installations are not unusual, so check it after all flags have been set
6355 if enabled libc_iconv; then
6356 check_func_headers iconv.h iconv
6357 elif enabled iconv; then
6358 check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
6361 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
6363 # add some useful compiler flags if supported
6364 check_cflags -Wdeclaration-after-statement
6366 check_cflags -Wdisabled-optimization
6367 check_cflags -Wpointer-arith
6368 check_cflags -Wredundant-decls
6369 check_cflags -Wwrite-strings
6370 check_cflags -Wtype-limits
6371 check_cflags -Wundef
6372 check_cflags -Wmissing-prototypes
6373 check_cflags -Wno-pointer-to-int-cast
6374 check_cflags -Wstrict-prototypes
6375 check_cflags -Wempty-body
6377 if enabled extra_warnings; then
6378 check_cflags -Wcast-qual
6379 check_cflags -Wextra
6380 check_cflags -Wpedantic
6383 check_disable_warning(){
6384 warning_flag=-W${1#-Wno-}
6385 test_cflags $unknown_warning_flags $warning_flag && add_cflags $1
6388 test_cflags -Werror=unused-command-line-argument &&
6389 append unknown_warning_flags "-Werror=unused-command-line-argument"
6390 test_cflags -Werror=unknown-warning-option &&
6391 append unknown_warning_flags "-Werror=unknown-warning-option"
6393 check_disable_warning -Wno-parentheses
6394 check_disable_warning -Wno-switch
6395 check_disable_warning -Wno-format-zero-length
6396 check_disable_warning -Wno-pointer-sign
6397 check_disable_warning -Wno-unused-const-variable
6398 check_disable_warning -Wno-bool-operation
6400 check_disable_warning_headers(){
6401 warning_flag=-W${1#-Wno-}
6402 test_cflags $warning_flag && add_cflags_headers $1
6405 check_disable_warning_headers -Wno-deprecated-declarations
6406 check_disable_warning_headers -Wno-unused-variable
6408 test_cc <<EOF && enable blocks_extension
6409 void (^block)(void);
6412 # add some linker flags
6413 check_ldflags -Wl,--warn-common
6414 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
6415 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir && add_ldsoflags -Wl,-rpath,$libdir
6416 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
6418 # add some strip flags
6421 enabled neon_clobber_test &&
6422 check_ldflags -Wl,--wrap,avcodec_open2 \
6423 -Wl,--wrap,avcodec_decode_audio4 \
6424 -Wl,--wrap,avcodec_decode_video2 \
6425 -Wl,--wrap,avcodec_decode_subtitle2 \
6426 -Wl,--wrap,avcodec_encode_audio2 \
6427 -Wl,--wrap,avcodec_encode_video2 \
6428 -Wl,--wrap,avcodec_encode_subtitle \
6429 -Wl,--wrap,avcodec_send_packet \
6430 -Wl,--wrap,avcodec_receive_packet \
6431 -Wl,--wrap,avcodec_send_frame \
6432 -Wl,--wrap,avcodec_receive_frame \
6433 -Wl,--wrap,swr_convert \
6434 -Wl,--wrap,avresample_convert ||
6435 disable neon_clobber_test
6437 enabled xmm_clobber_test &&
6438 check_ldflags -Wl,--wrap,avcodec_open2 \
6439 -Wl,--wrap,avcodec_decode_audio4 \
6440 -Wl,--wrap,avcodec_decode_video2 \
6441 -Wl,--wrap,avcodec_decode_subtitle2 \
6442 -Wl,--wrap,avcodec_encode_audio2 \
6443 -Wl,--wrap,avcodec_encode_video2 \
6444 -Wl,--wrap,avcodec_encode_subtitle \
6445 -Wl,--wrap,avcodec_send_packet \
6446 -Wl,--wrap,avcodec_receive_packet \
6447 -Wl,--wrap,avcodec_send_frame \
6448 -Wl,--wrap,avcodec_receive_frame \
6449 -Wl,--wrap,swr_convert \
6450 -Wl,--wrap,avresample_convert \
6451 -Wl,--wrap,sws_scale ||
6452 disable xmm_clobber_test
6454 check_ld "cc" proper_dce <<EOF
6455 extern const int array[512];
6456 static inline int func(void) { return array[0]; }
6457 int main(void) { return 0; }
6460 if enabled proper_dce; then
6461 echo "X { local: *; };" > $TMPV
6462 if test_ldflags -Wl,${version_script},$TMPV; then
6463 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
6465 test_cc <<EOF && enable symver_asm_label
6466 void ff_foo(void) __asm__ ("av_foo@VERSION");
6467 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
6469 test_cc <<EOF && enable symver_gnu_asm
6470 __asm__(".symver ff_foo,av_foo@VERSION");
6471 void ff_foo(void) {}
6476 if [ -z "$optflags" ]; then
6477 if enabled small; then
6478 optflags=$cflags_size
6479 elif enabled optimizations; then
6480 optflags=$cflags_speed
6482 optflags=$cflags_noopt
6486 if [ -z "$nvccflags" ]; then
6487 nvccflags=$nvccflags_default
6490 if enabled x86_64 || enabled ppc64 || enabled aarch64; then
6491 nvccflags="$nvccflags -m64"
6493 nvccflags="$nvccflags -m32"
6498 enabled lto && check_ldflags "$@"
6501 check_optflags $optflags
6502 check_optflags -fno-math-errno
6503 check_optflags -fno-signed-zeros
6505 if enabled lto; then
6506 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
6508 check_ldflags -flto $cpuflags
6509 disable inline_asm_direct_symbol_refs
6512 enabled ftrapv && check_cflags -ftrapv
6514 test_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
6519 if enabled icc; then
6520 # Just warnings, no remarks
6522 # -wd: Disable following warnings
6523 # 144, 167, 556: -Wno-pointer-sign
6524 # 188: enumerated type mixed with another type
6525 # 1292: attribute "foo" ignored
6526 # 1419: external declaration in primary source file
6527 # 10006: ignoring unknown option -fno-signed-zeros
6528 # 10148: ignoring unknown option -Wno-parentheses
6529 # 10156: ignoring option '-W'; no argument required
6530 # 13200: No EMMS instruction before call to function
6531 # 13203: No EMMS instruction before return from function
6532 check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
6533 # 11030: Warning unknown option --as-needed
6534 # 10156: ignoring option '-export'; no argument required
6535 check_ldflags -wd10156,11030
6536 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
6537 enable ebp_available
6538 # The test above does not test linking
6539 enabled lto && disable symver_asm_label
6540 if enabled x86_32; then
6541 icc_version=$($cc -dumpversion)
6542 test ${icc_version%%.*} -ge 11 &&
6543 check_cflags -falign-stack=maintain-16-byte ||
6544 disable aligned_stack
6546 elif enabled gcc; then
6547 check_optflags -fno-tree-vectorize
6548 check_cflags -Werror=format-security
6549 check_cflags -Werror=implicit-function-declaration
6550 check_cflags -Werror=missing-prototypes
6551 check_cflags -Werror=return-type
6552 check_cflags -Werror=vla
6553 check_cflags -Wformat
6554 check_cflags -fdiagnostics-color=auto
6555 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
6556 if enabled x86_32; then
6559 # BSDs don't guarantee a 16 byte aligned stack, but we can
6560 # request GCC to try to maintain 16 byte alignment throughout
6561 # function calls. Library entry points that might call assembly
6562 # functions align the stack. (The parameter means 2^4 bytes.)
6563 check_cflags -mpreferred-stack-boundary=4
6567 elif enabled llvm_gcc; then
6568 check_cflags -mllvm -stack-alignment=16
6569 elif enabled clang; then
6570 if enabled x86_32; then
6571 # Clang doesn't support maintaining alignment without assuming the
6572 # same alignment in every function. If 16 byte alignment would be
6573 # enabled, one would also have to either add attribute_align_arg on
6574 # every single entry point into the libraries or enable -mstackrealign
6575 # (doing stack realignment in every single function).
6577 mingw32|win32|*bsd*)
6578 disable aligned_stack
6581 check_cflags -mllvm -stack-alignment=16
6582 check_cflags -mstack-alignment=16
6586 check_cflags -mllvm -stack-alignment=16
6587 check_cflags -mstack-alignment=16
6589 check_cflags -Qunused-arguments
6590 check_cflags -Werror=implicit-function-declaration
6591 check_cflags -Werror=missing-prototypes
6592 check_cflags -Werror=return-type
6593 elif enabled cparser; then
6594 add_cflags -Wno-missing-variable-declarations
6595 add_cflags -Wno-empty-statement
6596 elif enabled armcc; then
6597 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
6598 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
6599 # 2523: use of inline assembly is deprecated
6600 add_cflags -W${armcc_opt},--diag_suppress=2523
6601 add_cflags -W${armcc_opt},--diag_suppress=1207
6602 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
6603 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
6604 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
6605 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
6606 elif enabled pathscale; then
6607 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
6609 elif enabled_any msvc icl; then
6610 enabled x86_32 && disable aligned_stack
6611 enabled_all x86_32 debug && add_cflags -Oy-
6612 enabled debug && add_ldflags -debug
6613 enable pragma_deprecated
6614 if enabled icl; then
6615 # -Qansi-alias is basically -fstrict-aliasing, but does not work
6616 # (correctly) on icl 13.x.
6617 test_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
6618 add_cflags -Qansi-alias
6619 # Some inline asm is not compilable in debug
6620 if enabled debug; then
6621 disable ebp_available
6622 disable ebx_available
6625 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
6626 check_cpp_condition log2 crtversion.h "_VC_CRT_MAJOR_VERSION >= 12"
6627 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
6628 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
6629 # (as it ends up if the restrict redefine is done before including stdlib.h), while
6630 # MSVC 2013 and newer can handle it fine.
6631 # If this declspec fails, force including stdlib.h before the restrict redefinition
6632 # happens in config.h.
6633 if [ $restrict_keyword != restrict ]; then
6634 test_cc <<EOF || add_cflags -FIstdlib.h
6635 __declspec($restrict_keyword) void *foo(int);
6638 # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
6639 # Issue has been fixed in MSVC v19.00.24218.
6640 test_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
6641 check_cflags -d2SSAOptimizer-
6642 # enable utf-8 source processing on VS2015 U2 and newer
6643 test_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
6647 for pfx in "" host_; do
6648 varname=${pfx%_}cc_type
6649 eval "type=\$$varname"
6650 if [ "$type" = "msvc" ]; then
6651 test_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
6652 static inline int foo(int a) { return a; }
6659 add_asflags -Qunused-arguments
6665 check_ldflags -Qunused-arguments
6669 enable frame_thread_encoder
6671 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
6673 check_deps $CONFIG_LIST \
6678 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"
6679 enabled avresample && warn "Building with deprecated library libavresample"
6681 if test $target_os = "haiku"; then
6683 disable posix_memalign
6686 flatten_extralibs(){
6687 unset nested_entries
6690 for entry in $list; do
6693 append nested_entries $(filter '*_extralibs' $entry_copy)
6694 flat_entries=$(filter_out '*_extralibs' $entry_copy)
6695 eval $entry="\$flat_entries"
6697 append $list_name "$nested_entries"
6699 resolve nested_entries
6700 if test -n "$(filter '*_extralibs' $nested_entries)"; then
6701 flatten_extralibs $list_name
6705 flatten_extralibs_wrapper(){
6707 flatten_extralibs $list_name
6710 eval $list_name=\$\(\$ldflags_filter \$$list_name\)
6711 eval printf \''%s'\' \""\$$list_name"\"
6714 for linkunit in $LIBRARY_LIST; do
6715 unset current_extralibs
6716 eval components=\$$(toupper ${linkunit})_COMPONENTS_LIST
6717 for comp in ${components}; do
6718 enabled $comp || continue
6719 comp_extralibs="${comp}_extralibs"
6720 append current_extralibs $comp_extralibs
6722 eval prepend ${linkunit}_extralibs $current_extralibs
6725 for linkunit in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
6726 eval ${linkunit}_extralibs=\$\(flatten_extralibs_wrapper ${linkunit}_extralibs\)
6729 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
6731 for thread in $THREADS_LIST; do
6732 if enabled $thread; then
6733 test -n "$thread_type" &&
6734 die "ERROR: Only one thread type must be selected." ||
6735 thread_type="$thread"
6739 if disabled stdatomic; then
6740 if enabled atomics_gcc; then
6741 add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
6742 elif enabled atomics_win32; then
6743 add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
6744 elif enabled atomics_suncc; then
6745 add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
6746 elif enabled pthreads; then
6747 add_compat atomics/pthread/stdatomic.o
6748 add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
6750 enabled threads && die "Threading is enabled, but no atomics are available"
6751 add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
6755 # Check if requested libraries were found.
6756 for lib in $AUTODETECT_LIBS; do
6757 requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found";
6760 enabled zlib && add_cppflags -DZLIB_CONST
6762 # conditional library dependencies, in linking order
6763 enabled afftfilt_filter && prepend avfilter_deps "avcodec"
6764 enabled afir_filter && prepend avfilter_deps "avcodec"
6765 enabled amovie_filter && prepend avfilter_deps "avformat avcodec"
6766 enabled aresample_filter && prepend avfilter_deps "swresample"
6767 enabled atempo_filter && prepend avfilter_deps "avcodec"
6768 enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec"
6769 enabled convolve_filter && prepend avfilter_deps "avcodec"
6770 enabled deconvolve_filter && prepend avfilter_deps "avcodec"
6771 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
6772 enabled elbg_filter && prepend avfilter_deps "avcodec"
6773 enabled fftfilt_filter && prepend avfilter_deps "avcodec"
6774 enabled find_rect_filter && prepend avfilter_deps "avformat avcodec"
6775 enabled firequalizer_filter && prepend avfilter_deps "avcodec"
6776 enabled mcdeint_filter && prepend avfilter_deps "avcodec"
6777 enabled movie_filter && prepend avfilter_deps "avformat avcodec"
6778 enabled pan_filter && prepend avfilter_deps "swresample"
6779 enabled pp_filter && prepend avfilter_deps "postproc"
6780 enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
6781 enabled resample_filter && prepend avfilter_deps "avresample"
6782 enabled sab_filter && prepend avfilter_deps "swscale"
6783 enabled scale_filter && prepend avfilter_deps "swscale"
6784 enabled scale2ref_filter && prepend avfilter_deps "swscale"
6785 enabled sofalizer_filter && prepend avfilter_deps "avcodec"
6786 enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale"
6787 enabled showfreqs_filter && prepend avfilter_deps "avcodec"
6788 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
6789 enabled signature_filter && prepend avfilter_deps "avcodec avformat"
6790 enabled smartblur_filter && prepend avfilter_deps "swscale"
6791 enabled spectrumsynth_filter && prepend avfilter_deps "avcodec"
6792 enabled spp_filter && prepend avfilter_deps "avcodec"
6793 enabled subtitles_filter && prepend avfilter_deps "avformat avcodec"
6794 enabled uspp_filter && prepend avfilter_deps "avcodec"
6795 enabled zoompan_filter && prepend avfilter_deps "swscale"
6797 enabled lavfi_indev && prepend avdevice_deps "avfilter"
6800 enabled sdl2_outdev && add_cflags $(filter_out '-Dmain=SDL_main' $sdl2_cflags)
6802 enabled opus_decoder && prepend avcodec_deps "swresample"
6806 eval "deps=\$$lib_deps"
6807 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
6811 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
6812 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
6814 map 'expand_deps $v' $LIBRARY_LIST
6816 if test "$quiet" != "yes"; then
6818 echo "install prefix $prefix"
6819 echo "source path $source_path"
6820 echo "C compiler $cc"
6821 echo "C library $libc_type"
6822 if test "$host_cc" != "$cc"; then
6823 echo "host C compiler $host_cc"
6824 echo "host C library $host_libc_type"
6826 echo "ARCH $arch ($cpu)"
6827 if test "$build_suffix" != ""; then
6828 echo "build suffix $build_suffix"
6830 if test "$progs_suffix" != ""; then
6831 echo "progs suffix $progs_suffix"
6833 if test "$extra_version" != ""; then
6834 echo "version string suffix $extra_version"
6836 echo "big-endian ${bigendian-no}"
6837 echo "runtime cpu detection ${runtime_cpudetect-no}"
6838 if enabled x86; then
6839 echo "standalone assembly ${x86asm-no}"
6840 echo "x86 assembler ${x86asmexe}"
6841 echo "MMX enabled ${mmx-no}"
6842 echo "MMXEXT enabled ${mmxext-no}"
6843 echo "3DNow! enabled ${amd3dnow-no}"
6844 echo "3DNow! extended enabled ${amd3dnowext-no}"
6845 echo "SSE enabled ${sse-no}"
6846 echo "SSSE3 enabled ${ssse3-no}"
6847 echo "AESNI enabled ${aesni-no}"
6848 echo "AVX enabled ${avx-no}"
6849 echo "AVX2 enabled ${avx2-no}"
6850 echo "AVX-512 enabled ${avx512-no}"
6851 echo "XOP enabled ${xop-no}"
6852 echo "FMA3 enabled ${fma3-no}"
6853 echo "FMA4 enabled ${fma4-no}"
6854 echo "i686 features enabled ${i686-no}"
6855 echo "CMOV is fast ${fast_cmov-no}"
6856 echo "EBX available ${ebx_available-no}"
6857 echo "EBP available ${ebp_available-no}"
6859 if enabled aarch64; then
6860 echo "NEON enabled ${neon-no}"
6861 echo "VFP enabled ${vfp-no}"
6863 if enabled arm; then
6864 echo "ARMv5TE enabled ${armv5te-no}"
6865 echo "ARMv6 enabled ${armv6-no}"
6866 echo "ARMv6T2 enabled ${armv6t2-no}"
6867 echo "VFP enabled ${vfp-no}"
6868 echo "NEON enabled ${neon-no}"
6869 echo "THUMB enabled ${thumb-no}"
6871 if enabled mips; then
6872 echo "MIPS FPU enabled ${mipsfpu-no}"
6873 echo "MIPS DSP R1 enabled ${mipsdsp-no}"
6874 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
6875 echo "MIPS MSA enabled ${msa-no}"
6876 echo "LOONGSON MMI enabled ${mmi-no}"
6878 if enabled ppc; then
6879 echo "AltiVec enabled ${altivec-no}"
6880 echo "VSX enabled ${vsx-no}"
6881 echo "POWER8 enabled ${power8-no}"
6882 echo "PPC 4xx optimizations ${ppc4xx-no}"
6883 echo "dcbzl available ${dcbzl-no}"
6885 echo "debug symbols ${debug-no}"
6886 echo "strip symbols ${stripping-no}"
6887 echo "optimize for size ${small-no}"
6888 echo "optimizations ${optimizations-no}"
6889 echo "static ${static-no}"
6890 echo "shared ${shared-no}"
6891 echo "postprocessing support ${postproc-no}"
6892 echo "network support ${network-no}"
6893 echo "threading support ${thread_type-no}"
6894 echo "safe bitstream reader ${safe_bitstream_reader-no}"
6895 echo "texi2html enabled ${texi2html-no}"
6896 echo "perl enabled ${perl-no}"
6897 echo "pod2man enabled ${pod2man-no}"
6898 echo "makeinfo enabled ${makeinfo-no}"
6899 echo "makeinfo supports HTML ${makeinfo_html-no}"
6900 test -n "$random_seed" &&
6901 echo "random seed ${random_seed}"
6904 echo "External libraries:"
6905 print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | print_in_columns
6908 echo "External libraries providing hardware acceleration:"
6909 print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | print_in_columns
6913 print_enabled '' $LIBRARY_LIST | print_in_columns
6917 print_enabled '' $PROGRAM_LIST | print_in_columns
6920 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
6921 echo "Enabled ${type}s:"
6922 eval list=\$$(toupper $type)_LIST
6923 print_enabled '_*' $list | print_in_columns
6927 if test -n "$ignore_tests"; then
6928 ignore_tests=$(echo $ignore_tests | tr ',' ' ')
6929 echo "Ignored FATE tests:"
6930 echo $ignore_tests | print_in_columns
6934 echo "License: $license"
6936 fi # test "$quiet" != "yes"
6938 if test -n "$WARNINGS"; then
6939 printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color"
6940 enabled fatal_warnings && exit 1
6943 test -e Makefile || echo "include $source_path/Makefile" > Makefile
6946 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
6949 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" > ffbuild/config.fate
6951 enabled stripping || strip="echo skipping strip"
6952 enabled stripping || striptype=""
6954 config_files="$TMPH ffbuild/config.mak doc/config.texi"
6956 cat > ffbuild/config.mak <<EOF
6957 # Automatically generated by configure - do not modify!
6958 ifndef FFMPEG_CONFIG_MAK
6960 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
6962 LIBDIR=\$(DESTDIR)$libdir
6963 SHLIBDIR=\$(DESTDIR)$shlibdir
6964 INCDIR=\$(DESTDIR)$incdir
6965 BINDIR=\$(DESTDIR)$bindir
6966 DATADIR=\$(DESTDIR)$datadir
6967 DOCDIR=\$(DESTDIR)$docdir
6968 MANDIR=\$(DESTDIR)$mandir
6969 PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
6970 INSTALL_NAME_DIR=$install_name_dir
6971 SRC_PATH=$source_path
6972 SRC_LINK=$source_link
6973 ifndef MAIN_MAKEFILE
6974 SRC_PATH:=\$(SRC_PATH:.%=..%)
6978 INTRINSICS=$intrinsics
6979 EXTERN_PREFIX=$extern_prefix
6986 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
6988 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
6990 DEPX86ASM=$x86asmexe
6991 DEPX86ASMFLAGS=\$(X86ASMFLAGS)
6999 STRIPTYPE=$striptype
7006 OBJCFLAGS=$OBJCFLAGS
7008 NVCCFLAGS=$nvccflags
7030 LDEXEFLAGS=$LDEXEFLAGS
7031 LDSOFLAGS=$LDSOFLAGS
7032 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
7033 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
7034 X86ASMFLAGS=$X86ASMFLAGS
7035 BUILDSUF=$build_suffix
7036 PROGSSUF=$progs_suffix
7044 EXTRA_VERSION=$extra_version
7047 CCDEP_FLAGS=$CCDEP_FLAGS
7049 ASDEP_FLAGS=$ASDEP_FLAGS
7050 X86ASMDEP=$X86ASMDEP
7051 X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS
7052 CC_DEPFLAGS=$CC_DEPFLAGS
7053 AS_DEPFLAGS=$AS_DEPFLAGS
7054 X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS
7057 HOSTCFLAGS=$host_cflags
7058 HOSTCPPFLAGS=$host_cppflags
7059 HOSTEXESUF=$HOSTEXESUF
7060 HOSTLDFLAGS=$host_ldflags
7061 HOSTEXTRALIBS=$host_extralibs
7063 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
7064 HOSTCCDEP=$HOSTCCDEP
7065 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
7066 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
7070 TARGET_EXEC=$target_exec $target_exec_args
7071 TARGET_PATH=$target_path
7072 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
7073 CFLAGS-ffplay=${sdl2_cflags}
7074 CFLAGS_HEADERS=$CFLAGS_HEADERS
7075 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
7076 EXTRALIBS=$extralibs
7077 COMPAT_OBJS=$compat_objs
7079 LIBTARGET=${LIBTARGET}
7080 SLIBNAME=${SLIBNAME}
7081 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
7082 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
7083 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
7084 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
7085 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
7086 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
7087 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
7088 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
7089 VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
7090 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
7091 NOREDZONE_FLAGS=$noredzone_flags
7092 LIBFUZZER_PATH=$libfuzzer_path
7093 IGNORE_TESTS=$ignore_tests
7096 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST
7098 for entry in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
7099 eval echo "EXTRALIBS-${entry}=\$${entry}_extralibs" >> ffbuild/config.mak
7103 /* Automatically generated by configure - do not modify! */
7104 #ifndef FFMPEG_CONFIG_H
7105 #define FFMPEG_CONFIG_H
7106 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
7107 #define FFMPEG_LICENSE "$(c_escape $license)"
7108 #define CONFIG_THIS_YEAR 2018
7109 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
7110 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
7111 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
7112 #define av_restrict $restrict_keyword
7113 #define EXTERN_PREFIX "${extern_prefix}"
7114 #define EXTERN_ASM ${extern_prefix}
7115 #define BUILDSUF "$build_suffix"
7116 #define SLIBSUF "$SLIBSUF"
7117 #define HAVE_MMX2 HAVE_MMXEXT
7118 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
7121 test -n "$assert_level" &&
7122 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
7124 test -n "$malloc_prefix" &&
7125 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
7127 if enabled x86asm; then
7128 append config_files $TMPASM
7130 ; Automatically generated by configure - do not modify!
7134 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
7140 echo "@c auto-generated by configure - do not modify! " > doc/config.texi
7142 print_config ARCH_ "$config_files" $ARCH_LIST
7143 print_config HAVE_ "$config_files" $HAVE_LIST
7144 print_config CONFIG_ "$config_files" $CONFIG_LIST \
7148 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
7149 echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak
7151 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
7152 cp_if_changed $TMPH config.h
7153 touch ffbuild/.config
7155 enabled x86asm && cp_if_changed $TMPASM config.asm
7158 /* Generated by ffmpeg configure */
7159 #ifndef AVUTIL_AVCONFIG_H
7160 #define AVUTIL_AVCONFIG_H
7163 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
7165 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
7167 cp_if_changed $TMPH libavutil/avconfig.h
7170 sed -n "s/^extern AVFilter ff_\([avfsinkrc]\{2,5\}\)_$1;/\1_$1/p" $source_path/libavfilter/allfilters.c
7173 # generate the lists of enabled components
7174 print_enabled_components(){
7179 echo "static const $struct_name * const $name[] = {" > $TMPH
7184 c=$(full_filter_name $(remove_suffix _filter $c))
7187 c=$(add_suffix _demuxer $(remove_suffix _indev $c))
7190 c=$(add_suffix _muxer $(remove_suffix _outdev $c))
7193 printf " &ff_%s,\n" $c >> $TMPH
7196 if [ "$name" = "filter_list" ]; then
7197 for c in asrc_abuffer vsrc_buffer asink_abuffer vsink_buffer; do
7198 printf " &ff_%s,\n" $c >> $TMPH
7201 echo " NULL };" >> $TMPH
7202 cp_if_changed $TMPH $file
7205 print_enabled_components libavfilter/filter_list.c AVFilter filter_list $FILTER_LIST
7206 print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST
7207 print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST
7208 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
7209 print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST
7210 print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list $MUXER_LIST
7211 print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST
7212 print_enabled_components libavdevice/outdev_list.c AVOutputFormat outdev_list $OUTDEV_LIST
7213 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
7215 # Settings for pkg-config files
7218 # Automatically generated by configure - do not modify!
7220 build_suffix=$build_suffix
7224 rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}")
7225 source_path=${source_path}
7228 extralibs_avutil="$avutil_extralibs"
7229 extralibs_avcodec="$avcodec_extralibs"
7230 extralibs_avformat="$avformat_extralibs"
7231 extralibs_avdevice="$avdevice_extralibs"
7232 extralibs_avfilter="$avfilter_extralibs"
7233 extralibs_avresample="$avresample_extralibs"
7234 extralibs_postproc="$postproc_extralibs"
7235 extralibs_swscale="$swscale_extralibs"
7236 extralibs_swresample="$swresample_extralibs"
7239 for lib in $LIBRARY_LIST; do
7240 lib_deps="$(eval echo \$${lib}_deps)"
7241 echo ${lib}_deps=\"$lib_deps\" >> $TMPH
7244 cp_if_changed $TMPH ffbuild/config.sh