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
119 --disable-ffserver disable ffserver build
121 Documentation options:
122 --disable-doc do not build documentation
123 --disable-htmlpages do not build HTML documentation pages
124 --disable-manpages do not build man documentation pages
125 --disable-podpages do not build POD documentation pages
126 --disable-txtpages do not build text documentation pages
129 --disable-avdevice disable libavdevice build
130 --disable-avcodec disable libavcodec build
131 --disable-avformat disable libavformat build
132 --disable-swresample disable libswresample build
133 --disable-swscale disable libswscale build
134 --disable-postproc disable libpostproc build
135 --disable-avfilter disable libavfilter build
136 --enable-avresample enable libavresample build [no]
137 --disable-pthreads disable pthreads [autodetect]
138 --disable-w32threads disable Win32 threads [autodetect]
139 --disable-os2threads disable OS/2 threads [autodetect]
140 --disable-network disable network support [no]
141 --disable-dct disable DCT code
142 --disable-dwt disable DWT code
143 --disable-error-resilience disable error resilience code
144 --disable-lsp disable LSP code
145 --disable-lzo disable LZO decoder code
146 --disable-mdct disable MDCT code
147 --disable-rdft disable RDFT code
148 --disable-fft disable FFT code
149 --disable-faan disable floating point AAN (I)DCT code
150 --disable-pixelutils disable pixel utils in libavutil
152 Individual component options:
153 --disable-everything disable all components listed below
154 --disable-encoder=NAME disable encoder NAME
155 --enable-encoder=NAME enable encoder NAME
156 --disable-encoders disable all encoders
157 --disable-decoder=NAME disable decoder NAME
158 --enable-decoder=NAME enable decoder NAME
159 --disable-decoders disable all decoders
160 --disable-hwaccel=NAME disable hwaccel NAME
161 --enable-hwaccel=NAME enable hwaccel NAME
162 --disable-hwaccels disable all hwaccels
163 --disable-muxer=NAME disable muxer NAME
164 --enable-muxer=NAME enable muxer NAME
165 --disable-muxers disable all muxers
166 --disable-demuxer=NAME disable demuxer NAME
167 --enable-demuxer=NAME enable demuxer NAME
168 --disable-demuxers disable all demuxers
169 --enable-parser=NAME enable parser NAME
170 --disable-parser=NAME disable parser NAME
171 --disable-parsers disable all parsers
172 --enable-bsf=NAME enable bitstream filter NAME
173 --disable-bsf=NAME disable bitstream filter NAME
174 --disable-bsfs disable all bitstream filters
175 --enable-protocol=NAME enable protocol NAME
176 --disable-protocol=NAME disable protocol NAME
177 --disable-protocols disable all protocols
178 --enable-indev=NAME enable input device NAME
179 --disable-indev=NAME disable input device NAME
180 --disable-indevs disable input devices
181 --enable-outdev=NAME enable output device NAME
182 --disable-outdev=NAME disable output device NAME
183 --disable-outdevs disable output devices
184 --disable-devices disable all devices
185 --enable-filter=NAME enable filter NAME
186 --disable-filter=NAME disable filter NAME
187 --disable-filters disable all filters
189 External library support:
191 Using any of the following switches will allow FFmpeg to link to the
192 corresponding external library. All the components depending on that library
193 will become enabled, if all their other dependencies are met and they are not
194 explicitly disabled. E.g. --enable-libwavpack will enable linking to
195 libwavpack and allow the libwavpack encoder to be built, unless it is
196 specifically disabled with --disable-encoder=libwavpack.
198 Note that only the system libraries are auto-detected. All the other external
199 libraries must be explicitly enabled.
201 Also note that the following help text describes the purpose of the libraries
202 themselves, not all their features will necessarily be usable by FFmpeg.
204 --disable-alsa disable ALSA support [autodetect]
205 --disable-appkit disable Apple AppKit framework [autodetect]
206 --disable-avfoundation disable Apple AVFoundation framework [autodetect]
207 --enable-avisynth enable reading of AviSynth script files [no]
208 --disable-bzlib disable bzlib [autodetect]
209 --disable-coreimage disable Apple CoreImage framework [autodetect]
210 --enable-chromaprint enable audio fingerprinting with chromaprint [no]
211 --enable-frei0r enable frei0r video filtering [no]
212 --enable-gcrypt enable gcrypt, needed for rtmp(t)e support
213 if openssl, librtmp or gmp is not used [no]
214 --enable-gmp enable gmp, needed for rtmp(t)e support
215 if openssl or librtmp is not used [no]
216 --enable-gnutls enable gnutls, needed for https support
217 if openssl is not used [no]
218 --disable-iconv disable iconv [autodetect]
219 --disable-jack disable libjack support [autodetect]
220 --enable-jni enable JNI support [no]
221 --enable-ladspa enable LADSPA audio filtering [no]
222 --enable-libass enable libass subtitles rendering,
223 needed for subtitles and ass filter [no]
224 --enable-libbluray enable BluRay reading using libbluray [no]
225 --enable-libbs2b enable bs2b DSP library [no]
226 --enable-libcaca enable textual display using libcaca [no]
227 --enable-libcelt enable CELT decoding via libcelt [no]
228 --enable-libcdio enable audio CD grabbing with libcdio [no]
229 --enable-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-libkvazaar enable HEVC encoding via libkvazaar [no]
241 --enable-libmodplug enable ModPlug via libmodplug [no]
242 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
243 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
244 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
245 --enable-libopencv enable video filtering via libopencv [no]
246 --enable-libopenh264 enable H.264 encoding via OpenH264 [no]
247 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
248 --enable-libopenmpt enable decoding tracked files via libopenmpt [no]
249 --enable-libopus enable Opus de/encoding via libopus [no]
250 --enable-libpulse enable Pulseaudio input via libpulse [no]
251 --enable-librsvg enable SVG rasterization via librsvg [no]
252 --enable-librubberband enable rubberband needed for rubberband filter [no]
253 --enable-librtmp enable RTMP[E] support via librtmp [no]
254 --enable-libshine enable fixed-point MP3 encoding via libshine [no]
255 --enable-libsmbclient enable Samba protocol via libsmbclient [no]
256 --enable-libsnappy enable Snappy compression, needed for hap encoding [no]
257 --enable-libsoxr enable Include libsoxr resampling [no]
258 --enable-libspeex enable Speex de/encoding via libspeex [no]
259 --enable-libssh enable SFTP protocol via libssh [no]
260 --enable-libtesseract enable Tesseract, needed for ocr filter [no]
261 --enable-libtheora enable Theora encoding via libtheora [no]
262 --enable-libtwolame enable MP2 encoding via libtwolame [no]
263 --enable-libv4l2 enable libv4l2/v4l-utils [no]
264 --enable-libvidstab enable video stabilization using vid.stab [no]
265 --enable-libvmaf enable vmaf filter via libvmaf [no]
266 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
267 --enable-libvorbis enable Vorbis en/decoding via libvorbis,
268 native implementation exists [no]
269 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
270 --enable-libwavpack enable wavpack encoding via libwavpack [no]
271 --enable-libwebp enable WebP encoding via libwebp [no]
272 --enable-libx264 enable H.264 encoding via x264 [no]
273 --enable-libx265 enable HEVC encoding via x265 [no]
274 --enable-libxavs enable AVS encoding via xavs [no]
275 --enable-libxcb enable X11 grabbing using XCB [autodetect]
276 --enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
277 --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
278 --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
279 --enable-libxvid enable Xvid encoding via xvidcore,
280 native MPEG-4/Xvid encoder exists [no]
281 --enable-libxml2 enable XML parsing using the C library libxml2 [no]
282 --enable-libzimg enable z.lib, needed for zscale filter [no]
283 --enable-libzmq enable message passing via libzmq [no]
284 --enable-libzvbi enable teletext support via libzvbi [no]
285 --disable-lzma disable lzma [autodetect]
286 --enable-decklink enable Blackmagic DeckLink I/O support [no]
287 --enable-libndi_newtek enable Newteck NDI I/O support [no]
288 --enable-mediacodec enable Android MediaCodec support [no]
289 --enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
290 --enable-openal enable OpenAL 1.1 capture support [no]
291 --enable-opencl enable OpenCL code
292 --enable-opengl enable OpenGL rendering [no]
293 --enable-openssl enable openssl, needed for https support
294 if gnutls is not used [no]
295 --disable-sndio disable sndio support [autodetect]
296 --disable-schannel disable SChannel SSP, needed for TLS support on
297 Windows if openssl and gnutls are not used [autodetect]
298 --disable-sdl2 disable sdl2 [autodetect]
299 --disable-securetransport disable Secure Transport, needed for TLS support
300 on OSX if openssl and gnutls are not used [autodetect]
301 --disable-xlib disable xlib [autodetect]
302 --disable-zlib disable zlib [autodetect]
304 The following libraries provide various hardware acceleration features:
305 --disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
306 --disable-cuda disable dynamically linked Nvidia CUDA code [autodetect]
307 --enable-cuda-sdk enable CUDA features that require the CUDA SDK [no]
308 --disable-cuvid disable Nvidia CUVID support [autodetect]
309 --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
310 --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
311 --enable-libdrm enable DRM code (Linux) [no]
312 --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
313 --enable-libnpp enable Nvidia Performance Primitives-based code [no]
314 --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
315 --disable-nvenc disable Nvidia video encoding code [autodetect]
316 --enable-omx enable OpenMAX IL code [no]
317 --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
318 --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
319 --disable-vda disable Apple Video Decode Acceleration code [autodetect]
320 --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
321 --disable-videotoolbox disable VideoToolbox code [autodetect]
324 --arch=ARCH select architecture [$arch]
325 --cpu=CPU select the minimum required CPU (affects
326 instruction selection, may crash on older CPUs)
327 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
328 --progs-suffix=SUFFIX program name suffix []
329 --enable-cross-compile assume a cross-compiler is used
330 --sysroot=PATH root of cross-build tree
331 --sysinclude=PATH location of cross-build system headers
332 --target-os=OS compiler targets OS [$target_os]
333 --target-exec=CMD command to run executables on target
334 --target-path=DIR path to view of build directory on target
335 --target-samples=DIR path to samples directory on target
336 --tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
337 --toolchain=NAME set tool defaults according to NAME
338 --nm=NM use nm tool NM [$nm_default]
339 --ar=AR use archive tool AR [$ar_default]
340 --as=AS use assembler AS [$as_default]
341 --ln_s=LN_S use symbolic link tool LN_S [$ln_s_default]
342 --strip=STRIP use strip tool STRIP [$strip_default]
343 --windres=WINDRES use windows resource compiler WINDRES [$windres_default]
344 --x86asmexe=EXE use nasm-compatible assembler EXE [$x86asmexe_default]
345 --cc=CC use C compiler CC [$cc_default]
346 --cxx=CXX use C compiler CXX [$cxx_default]
347 --objcc=OCC use ObjC compiler OCC [$cc_default]
348 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
349 --nvcc=NVCC use Nvidia CUDA compiler NVCC [$nvcc_default]
350 --ld=LD use linker LD [$ld_default]
351 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
352 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
353 --ranlib=RANLIB use ranlib RANLIB [$ranlib_default]
354 --doxygen=DOXYGEN use DOXYGEN to generate API doc [$doxygen_default]
355 --host-cc=HOSTCC use host C compiler HOSTCC
356 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
357 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
358 --host-ld=HOSTLD use host linker HOSTLD
359 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
360 --host-libs=HLIBS use libs HLIBS when linking for host
361 --host-os=OS compiler host OS [$target_os]
362 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
363 --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
364 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
365 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
366 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
367 --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS]
368 --extra-libs=ELIBS add ELIBS [$ELIBS]
369 --extra-version=STRING version string suffix []
370 --optflags=OPTFLAGS override optimization-related compiler flags
371 --nvccflags=NVCCFLAGS override nvcc flags [$nvccflags_default]
372 --build-suffix=SUFFIX library name suffix []
373 --enable-pic build position-independent code
374 --enable-thumb compile for Thumb instruction set
375 --enable-lto use link-time optimization
376 --env="ENV=override" override the environment variables
378 Advanced options (experts only):
379 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
380 --custom-allocator=NAME use a supported custom allocator
381 --disable-symver disable symbol versioning
382 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
383 --disable-safe-bitstream-reader
384 disable buffer boundary checking in bitreaders
385 (faster, but may crash)
386 --sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default]
388 Optimization options (experts only):
389 --disable-asm disable all assembly optimizations
390 --disable-altivec disable AltiVec optimizations
391 --disable-vsx disable VSX optimizations
392 --disable-power8 disable POWER8 optimizations
393 --disable-amd3dnow disable 3DNow! optimizations
394 --disable-amd3dnowext disable 3DNow! extended optimizations
395 --disable-mmx disable MMX optimizations
396 --disable-mmxext disable MMXEXT optimizations
397 --disable-sse disable SSE optimizations
398 --disable-sse2 disable SSE2 optimizations
399 --disable-sse3 disable SSE3 optimizations
400 --disable-ssse3 disable SSSE3 optimizations
401 --disable-sse4 disable SSE4 optimizations
402 --disable-sse42 disable SSE4.2 optimizations
403 --disable-avx disable AVX optimizations
404 --disable-xop disable XOP optimizations
405 --disable-fma3 disable FMA3 optimizations
406 --disable-fma4 disable FMA4 optimizations
407 --disable-avx2 disable AVX2 optimizations
408 --disable-aesni disable AESNI optimizations
409 --disable-armv5te disable armv5te optimizations
410 --disable-armv6 disable armv6 optimizations
411 --disable-armv6t2 disable armv6t2 optimizations
412 --disable-vfp disable VFP optimizations
413 --disable-neon disable NEON optimizations
414 --disable-inline-asm disable use of inline assembly
415 --disable-x86asm disable use of standalone x86 assembly
416 --disable-mipsdsp disable MIPS DSP ASE R1 optimizations
417 --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
418 --disable-msa disable MSA optimizations
419 --disable-mipsfpu disable floating point MIPS optimizations
420 --disable-mmi disable Loongson SIMD optimizations
421 --disable-fast-unaligned consider unaligned accesses slow
423 Developer options (useful when working on FFmpeg itself):
424 --disable-debug disable debugging symbols
425 --enable-debug=LEVEL set the debug level [$debuglevel]
426 --disable-optimizations disable compiler optimizations
427 --enable-extra-warnings enable more compiler warnings
428 --disable-stripping disable stripping of executables and shared libraries
429 --assert-level=level 0(default), 1 or 2, amount of assertion testing,
430 2 causes a slowdown at runtime.
431 --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
432 --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
433 leaks and errors, using the specified valgrind binary.
434 Cannot be combined with --target-exec
435 --enable-ftrapv Trap arithmetic overflows
436 --samples=PATH location of test samples for FATE, if not set use
437 \$FATE_SAMPLES at make invocation time.
438 --enable-neon-clobber-test check NEON registers for clobbering (should be
439 used only for debugging purposes)
440 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
441 should be used only for debugging purposes)
442 --enable-random randomly enable/disable components
444 --enable-random=LIST randomly enable/disable specific components or
445 --disable-random=LIST component groups. LIST is a comma-separated list
446 of NAME[:PROB] entries where NAME is a component
447 (group) and PROB the probability associated with
449 --random-seed=VALUE seed value for --enable/disable-random
450 --disable-valgrind-backtrace do not print a backtrace under Valgrind
451 (only applies to --disable-optimizations builds)
452 --enable-osfuzz Enable building fuzzer tool
453 --libfuzzer=PATH path to libfuzzer
454 --ignore-tests=TESTS comma-separated list (without "fate-" prefix
455 in the name) of tests whose result is ignored
456 --enable-linux-perf enable Linux Performance Monitor API
458 NOTE: Object files are built at the place where configure is launched.
464 if test -t 1 && which tput >/dev/null 2>&1; then
465 ncolors=$(tput colors)
466 if test -n "$ncolors" && test $ncolors -ge 8; then
467 bold_color=$(tput bold)
468 warn_color=$(tput setaf 3)
469 error_color=$(tput setaf 1)
470 reset_color=$(tput sgr0)
472 # 72 used instead of 80 since that's the default of pr
478 echo "$@" >> $logfile
483 pr -n -t $1 >> $logfile
489 WARNINGS="${WARNINGS}WARNING: $*\n"
494 echo "$error_color$bold_color$@$reset_color"
497 If you think configure made a mistake, make sure you are using the latest
498 version from Git. If the latest version fails, report the problem to the
499 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
501 if disabled logging; then
503 Rerun configure with logging enabled (do not use --disable-logging), and
504 include the log this produces with your report.
508 Include the log file "$logfile" produced by configure as this will help
515 # Avoid locale weirdness, besides we really just want to translate ASCII.
517 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
521 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
525 echo "$*" | sed 's/["\\]/\\\0/g'
529 v=$(echo "$1" | sed "s/'/'\\\\''/g")
530 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
535 echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
542 eval "case $v in $pat) printf '%s ' $v ;; esac"
550 eval "case $v in $pat) ;; *) printf '%s ' $v ;; esac"
557 for v; do eval $m; done
563 for v; do echo ${v}${suffix}; done
578 eval : \${$var:=$value}
583 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
589 eval $(sanitize_var_name "$var")='$*'
593 eval echo \$$(sanitize_var_name "$1")
598 eval level=\${${pvar}_level:=0}
599 eval ${pvar}_${level}="\$$pvar"
600 eval ${pvar}_level=$(($level+1))
606 eval level=\${${pvar}_level:-0}
607 test $level = 0 && continue
608 eval level=$(($level-1))
609 eval $pvar="\${${pvar}_${level}}"
610 eval ${pvar}_level=$level
611 eval unset ${pvar}_${level}
617 eval ${var}_requested=yes
640 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
646 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
652 enabled $var && continue
653 eval sel="\$${var}_select"
654 eval sgs="\$${var}_suggest"
658 enable_deep_weak $sgs
670 disabled $var && continue
679 test "${1#!}" = "$1" && op='=' || op=!=
680 eval test "x\$${1#!}_requested" $op "xyes"
684 test "${1#!}" = "$1" && op='=' || op=!=
685 eval test "x\$${1#!}" $op "xyes"
689 test "${1#!}" = "$1" && op='=' || op=!=
690 eval test "x\$${1#!}" $op "xno"
695 enabled $opt || return 1
701 disabled $opt || return 1
707 enabled $opt && return 0
713 disabled $opt && return 0
720 eval : \${$opt:=\$${opt}_default}
728 [ $var = $value ] && return 0
736 enabled ${cfg}_checking && die "Circular dependency for $cfg."
737 disabled ${cfg}_checking && continue
738 enable ${cfg}_checking
741 eval dep_all="\$${cfg}_deps"
742 eval dep_any="\$${cfg}_deps_any"
743 eval dep_sel="\$${cfg}_select"
744 eval dep_sgs="\$${cfg}_suggest"
745 eval dep_ifa="\$${cfg}_if"
746 eval dep_ifn="\$${cfg}_if_any"
748 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
749 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
750 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
752 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
753 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
754 enabled_all $dep_all || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not all dependencies are satisfied: $dep_all"; }
755 enabled_any $dep_any || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not any dependency is satisfied: $dep_any"; }
756 disabled_any $dep_sel && { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some selected dependency is unsatisfied: $dep_sel"; }
758 if enabled $cfg; then
760 enable_deep_weak $dep_sgs
763 disable ${cfg}_checking
772 for cfg in $allopts; do
773 enabled $cfg || continue
774 eval dep_extralibs="\$${cfg}_extralibs"
775 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
783 map 'eval echo "$v \${$v:-no}"' "$@" |
784 awk "BEGIN { split(\"$files\", files) }
786 c = \"$pfx\" toupper(\$1);
792 if (file ~ /\\.h\$/) {
793 printf(\"#define %s %d\\n\", c, v) >>file;
794 } else if (file ~ /\\.asm\$/) {
795 printf(\"%%define %s %d\\n\", c, v) >>file;
796 } else if (file ~ /\\.mak\$/) {
797 n = -v ? \"\" : \"!\";
798 printf(\"%s%s=yes\\n\", n, c) >>file;
799 } else if (file ~ /\\.texi\$/) {
800 pre = -v ? \"\" : \"@c \";
803 gsub(/_/, \"-\", c2);
804 printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
814 enabled $v && printf "%s\n" ${v%$suf}
821 eval "$var=\"\$$var $*\""
827 eval "$var=\"$* \$$var\""
833 for tok in $(eval echo \$$var); do
834 uniq_list="$(filter_out $tok $uniq_list) $tok"
836 eval "$var=\"${uniq_list}\""
844 append CFLAGS $($cflags_filter "$@")
847 add_cflags_headers(){
848 append CFLAGS_HEADERS $($cflags_filter "$@")
852 append CXXFLAGS $($cflags_filter "$@")
856 append ASFLAGS $($asflags_filter "$@")
860 append OBJCFLAGS $($objcflags_filter "$@")
864 append LDFLAGS $($ldflags_filter "$@")
868 append LDEXEFLAGS $($ldflags_filter "$@")
872 append LDLIBFLAGS $($ldflags_filter "$@")
876 append ASMSTRIPFLAGS "$@"
880 prepend extralibs $($ldflags_filter "$@")
884 append host_cppflags "$@"
888 append host_cflags $($host_cflags_filter "$@")
892 append host_ldflags $($host_ldflags_filter "$@")
896 append compat_objs $1
898 map 'add_cppflags -D$v' "$@"
903 "$@" >> $logfile 2>&1
908 stat "$1" >> $logfile 2>&1
912 eval printf '%s\\n' $CC_O
916 eval printf '%s\\n' $CC_E
923 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
930 check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
937 check_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
944 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
948 eval printf '%s\\n' $AS_O
955 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
959 log check_inline_asm "$@"
964 check_cc "$@" <<EOF && enable $name
965 void foo(void){ __asm__ volatile($code); }
969 check_inline_asm_flags(){
970 log check_inline_asm_flags "$@"
975 while [ "$1" != "" ]; do
981 void foo(void){ __asm__ volatile($code); }
984 check_cmd $cc $CPPFLAGS $CFLAGS $flags "$@" $CC_C $(cc_o $TMPO) $TMPC &&
985 enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
990 check_inline_asm ${1}_inline "\"$2\""
991 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
995 log check_x86asm "$@"
999 check_cmd $x86asmexe $X86ASMFLAGS -Werror "$@" -o $TMPO $TMPS
1003 eval printf '%s\\n' $LD_O
1010 flags=$(filter_out '-l*|*.so' $@)
1011 libs=$(filter '-l*|*.so' $@)
1012 check_$type $($cflags_filter $flags) || return
1013 flags=$($ldflags_filter $flags)
1014 libs=$($ldflags_filter $libs)
1015 check_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
1020 test "${hdr%.h}" = "${hdr}" &&
1021 echo "#include $hdr" ||
1022 echo "#include <$hdr>"
1032 for hdr in $headers; do
1035 echo "int main(void) { $code; return 0; }"
1036 } | check_$check "$@"
1040 log check_cppflags "$@"
1041 check_cpp "$@" <<EOF && append CPPFLAGS "$@"
1047 log test_cflags "$@"
1048 set -- $($cflags_filter "$@")
1055 log check_cflags "$@"
1056 test_cflags "$@" && add_cflags "$@"
1060 log check_cxxflags "$@"
1061 set -- $($cflags_filter "$@")
1062 check_cxx "$@" <<EOF && append CXXFLAGS "$@"
1068 log test_objcflags "$@"
1069 set -- $($objcflags_filter "$@")
1070 check_objcc "$@" <<EOF
1076 log check_objcflags "$@"
1077 test_objcflags "$@" && add_objcflags "$@"
1081 log test_ldflags "$@"
1082 check_ld "cc" "$@" <<EOF
1083 int main(void){ return 0; }
1088 log check_ldflags "$@"
1089 test_ldflags "$@" && add_ldflags "$@"
1093 log test_stripflags "$@"
1094 # call check_cc to get a fresh TMPO
1096 int main(void) { return 0; }
1098 check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
1102 log check_stripflags "$@"
1103 test_stripflags "$@" && add_stripflags "$@"
1107 log check_header "$@"
1110 disable_safe $header
1111 check_cpp "$@" <<EOF && enable_safe $header
1117 check_header_objcc(){
1118 log check_header_objcc "$@"
1122 disable_safe $header
1124 echo "#include <$header>"
1125 echo "int main(void) { return 0; }"
1126 } | check_objcc && check_stat "$TMPO" && enable_safe $header
1129 check_apple_framework(){
1130 log check_apple_framework "$@"
1132 name="$(tolower $framework)"
1133 header="${framework}/${framework}.h"
1135 check_header_objcc $header && enable $name && add_extralibs "-framework $framework"
1143 check_ld "cc" "$@" <<EOF && enable $func
1145 int main(void){ $func(); }
1149 check_complexfunc(){
1150 log check_complexfunc "$@"
1154 test $narg = 2 && args="f, g" || args="f * I"
1156 check_ld "cc" "$@" <<EOF && enable $func
1157 #include <complex.h>
1159 float foo(complex float f, complex float g) { return $func($args); }
1160 int main(void){ return (int) foo; }
1165 log check_mathfunc "$@"
1169 test $narg = 2 && args="f, g" || args="f"
1171 check_ld "cc" "$@" <<EOF && enable $func
1173 float foo(float f, float g) { return $func($args); }
1174 int main(void){ return (int) foo; }
1178 check_func_headers(){
1179 log check_func_headers "$@"
1184 for hdr in $headers; do
1187 echo "#include <stdint.h>"
1188 for func in $funcs; do
1189 echo "long check_$func(void) { return (long) $func; }"
1191 echo "int main(void) { int ret = 0;"
1192 # LTO could optimize out the test functions without this
1193 for func in $funcs; do
1194 echo " ret |= ((intptr_t)check_$func) & 0xFFFF;"
1196 echo "return ret; }"
1197 } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1200 check_class_headers_cpp(){
1201 log check_class_headers_cpp "$@"
1206 for hdr in $headers; do
1207 echo "#include <$hdr>"
1209 echo "int main(void) { "
1211 for class in $classes; do
1212 echo "$class obj$i;"
1216 } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1219 check_cpp_condition(){
1220 log check_cpp_condition "$@"
1224 check_cpp "$@" <<EOF
1227 #error "unsatisfied condition: $condition"
1233 log test_cflags_cc "$@"
1238 set -- $($cflags_filter "$flags")
1242 #error "unsatisfied condition: $condition"
1254 check_func_headers "$headers" "$funcs" "$@" &&
1255 enable $name && add_extralibs "$@"
1259 log check_lib_cpp "$@"
1263 check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1267 log check_pkg_config "$@"
1273 check_cmd $pkg_config --exists --print-errors $pkg_version || return
1274 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1275 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1276 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1277 set_safe "${pkg}_cflags" $pkg_cflags &&
1278 set_safe "${pkg}_extralibs" $pkg_libs
1282 check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1286 log check_exec_crash "$@"
1289 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1290 # are safe but may not be available everywhere. Thus we use
1291 # raise(SIGTERM) instead. The check is run in a subshell so we
1292 # can redirect the "Terminated" message from the shell. SIGBUS
1293 # is not defined by standard C so it is used conditionally.
1295 (check_exec "$@") >> $logfile 2>&1 <<EOF
1297 static void sighandler(int sig){
1303 int (*func_ptr)(void) = foo;
1305 signal(SIGILL, sighandler);
1306 signal(SIGFPE, sighandler);
1307 signal(SIGSEGV, sighandler);
1309 signal(SIGBUS, sighandler);
1321 disable_safe "$type"
1322 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1326 log check_struct "$@"
1331 disable_safe "${struct}_${member}"
1332 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1333 enable_safe "${struct}_${member}"
1337 log check_builtin "$@"
1343 check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1346 check_compile_assert(){
1347 log check_compile_assert "$@"
1353 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1363 check_lib $name "$headers" $func "$@" || die "ERROR: $name_version not found"
1371 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1375 log use_pkg_config "$@"
1377 check_pkg_config "$@" || return 1
1378 add_cflags $(get_safe "${pkg}_cflags")
1379 add_extralibs $(get_safe "${pkg}_extralibs")
1382 require_pkg_config(){
1383 use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
1387 eval printf '%s\\n' $HOSTCC_E
1391 eval printf '%s\\n' $HOSTCC_O
1395 log check_host_cc "$@"
1398 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1402 log check_host_cpp "$@"
1405 check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1408 check_host_cppflags(){
1409 log check_host_cppflags "$@"
1410 check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1415 check_host_cflags(){
1416 log check_host_cflags "$@"
1417 set -- $($host_cflags_filter "$@")
1418 check_host_cc "$@" <<EOF && append host_cflags "$@"
1423 check_host_cpp_condition(){
1424 log check_host_cpp_condition "$@"
1428 check_host_cpp "$@" <<EOF
1431 #error "unsatisfied condition: $condition"
1437 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1438 mkdir -p "$(dirname $2)"
1442 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1443 # system-dependent things.
1445 AVCODEC_COMPONENTS="
1453 AVDEVICE_COMPONENTS="
1458 AVFILTER_COMPONENTS="
1462 AVFORMAT_COMPONENTS="
1468 AVRESAMPLE_COMPONENTS=""
1470 AVUTIL_COMPONENTS=""
1474 $AVDEVICE_COMPONENTS
1475 $AVFILTER_COMPONENTS
1476 $AVFORMAT_COMPONENTS
1477 $AVRESAMPLE_COMPONENTS
1482 avio_dir_cmd_example
1483 avio_reading_example
1484 decode_audio_example
1485 decode_video_example
1486 demuxing_decoding_example
1487 encode_audio_example
1488 encode_video_example
1490 filter_audio_example
1491 filtering_audio_example
1492 filtering_video_example
1493 http_multiclient_example
1499 resampling_audio_example
1500 scaling_video_example
1501 transcode_aac_example
1505 EXTERNAL_AUTODETECT_LIBRARY_LIST="
1526 EXTERNAL_LIBRARY_GPL_LIST="
1538 EXTERNAL_LIBRARY_NONFREE_LIST="
1545 EXTERNAL_LIBRARY_VERSION3_LIST="
1552 EXTERNAL_LIBRARY_GPLV3_LIST="
1556 EXTERNAL_LIBRARY_LIST="
1557 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1558 $EXTERNAL_LIBRARY_GPL_LIST
1559 $EXTERNAL_LIBRARY_NONFREE_LIST
1560 $EXTERNAL_LIBRARY_VERSION3_LIST
1561 $EXTERNAL_LIBRARY_GPLV3_LIST
1619 HWACCEL_AUTODETECT_LIBRARY_LIST="
1634 HWACCEL_LIBRARY_NONFREE_LIST="
1639 HWACCEL_LIBRARY_LIST="
1640 $HWACCEL_AUTODETECT_LIBRARY_LIST
1641 $HWACCEL_LIBRARY_NONFREE_LIST
1661 safe_bitstream_reader
1708 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1712 $EXTERNAL_LIBRARY_LIST
1713 $HWACCEL_LIBRARY_LIST
1745 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1746 $HWACCEL_AUTODETECT_LIBRARY_LIST
1788 ARCH_EXT_LIST_MIPS="
1800 ARCH_EXT_LIST_LOONGSON="
1806 ARCH_EXT_LIST_X86_SIMD="
1835 $ARCH_EXT_LIST_X86_SIMD
1845 $ARCH_EXT_LIST_LOONGSON
1868 sync_val_compare_and_swap
1886 cdio_paranoia_paranoia_h
1890 dev_bktr_ioctl_bt848_h
1891 dev_bktr_ioctl_meteor_h
1893 dev_video_bktr_ioctl_bt848_h
1894 dev_video_meteor_ioctl_meteor_h
1904 machine_ioctl_bt848_h
1905 machine_ioctl_meteor_h
1907 opencv2_core_core_c_h
1908 openjpeg_2_2_openjpeg_h
1909 openjpeg_2_1_openjpeg_h
1910 openjpeg_2_0_openjpeg_h
1911 openjpeg_1_5_openjpeg_h
1989 GetProcessAffinityMask
1990 GetProcessMemoryInfo
1993 GetSystemTimeAsFileTime
2000 jack_port_get_latency_range
2017 SetConsoleTextAttribute
2018 SetConsoleCtrlHandler
2026 UTGetOSTypeFromString
2031 TOOLCHAIN_FEATURES="
2045 inline_asm_direct_symbol_refs
2047 inline_asm_nonlocal_labels
2058 CONDITION_VARIABLE_Ptr
2061 struct_group_source_req
2062 struct_ip_mreq_source
2064 struct_msghdr_msg_flags
2066 struct_rusage_ru_maxrss
2067 struct_sctp_event_subscribe
2069 struct_sockaddr_sa_len
2070 struct_sockaddr_storage
2071 struct_stat_st_mtim_tv_nsec
2072 struct_v4l2_frmivalenum_discrete
2077 $(add_suffix _external $ARCH_EXT_LIST)
2078 $(add_suffix _inline $ARCH_EXT_LIST)
2097 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
2110 # options emitted with CONFIG_ prefix but not available on the command line
2127 frame_thread_encoder
2281 # code dependency declarations
2283 # architecture extensions
2288 armv8_deps="aarch64"
2289 neon_deps_any="aarch64 arm"
2290 intrinsics_neon_deps="neon"
2291 vfp_deps_any="aarch64 arm"
2295 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2297 loongson2_deps="mips"
2298 loongson3_deps="mips"
2301 mipsdspr2_deps="mips"
2302 mips32r2_deps="mips"
2303 mips32r5_deps="mips"
2304 mips32r6_deps="mips"
2305 mips64r2_deps="mips"
2306 mips64r6_deps="mips"
2318 x86_64_select="i686"
2319 x86_64_suggest="fast_cmov"
2322 amd3dnowext_deps="amd3dnow"
2339 mmx_external_deps="x86asm"
2340 mmx_inline_deps="inline_asm"
2341 mmx_suggest="mmx_external mmx_inline"
2343 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2344 eval dep=\$${ext}_deps
2345 eval ${ext}_external_deps='"${dep}_external"'
2346 eval ${ext}_inline_deps='"${dep}_inline"'
2347 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2350 aligned_stack_if_any="aarch64 ppc x86"
2351 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2352 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2353 fast_unaligned_if_any="aarch64 ppc x86"
2354 simd_align_16_if_any="altivec neon sse"
2355 simd_align_32_if_any="avx"
2357 # system capabilities
2358 symver_if_any="symver_asm_label symver_gnu_asm"
2359 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2362 atomics_gcc_if="sync_val_compare_and_swap"
2363 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2364 atomics_win32_if="MemoryBarrier"
2365 atomics_native_if_any="$ATOMICS_LIST"
2366 w32threads_deps="atomics_native"
2367 threads_if_any="$THREADS_LIST"
2371 dirac_parse_select="golomb"
2372 error_resilience_select="me_cmp"
2373 faandct_deps="faan fdctdsp"
2374 faanidct_deps="faan idctdsp"
2375 h264dsp_select="startcode"
2376 hevcparse_select="golomb"
2377 frame_thread_encoder_deps="encoders threads"
2378 intrax8_select="blockdsp idctdsp"
2381 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2382 mpeg_er_select="error_resilience"
2383 mpegaudio_select="mpegaudiodsp mpegaudioheader"
2384 mpegaudiodsp_select="dct"
2385 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
2386 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2387 vc1dsp_select="h264chroma qpeldsp startcode"
2390 # decoders / encoders
2391 aac_decoder_select="mdct15 mdct sinewin"
2392 aac_fixed_decoder_select="mdct sinewin"
2393 aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
2394 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2395 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2396 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2397 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2398 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2399 adpcm_g722_decoder_select="g722dsp"
2400 adpcm_g722_encoder_select="g722dsp"
2401 aic_decoder_select="golomb idctdsp"
2402 alac_encoder_select="lpc"
2403 als_decoder_select="bswapdsp"
2404 amrnb_decoder_select="lsp"
2405 amrwb_decoder_select="lsp"
2406 amv_decoder_select="sp5x_decoder exif"
2407 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2408 ape_decoder_select="bswapdsp llauddsp"
2409 apng_decoder_select="zlib"
2410 apng_encoder_select="llvidencdsp zlib"
2411 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2412 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2413 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2414 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2415 atrac1_decoder_select="mdct sinewin"
2416 atrac3_decoder_select="mdct"
2417 atrac3p_decoder_select="mdct sinewin"
2418 avrn_decoder_select="exif jpegtables"
2419 bink_decoder_select="blockdsp hpeldsp"
2420 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2421 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2422 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2423 clearvideo_decoder_select="idctdsp"
2424 cllc_decoder_select="bswapdsp"
2425 comfortnoise_encoder_select="lpc"
2426 cook_decoder_select="audiodsp mdct sinewin"
2427 cscd_decoder_select="lzo"
2428 cscd_decoder_suggest="zlib"
2429 dca_decoder_select="mdct"
2430 dds_decoder_select="texturedsp"
2431 dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
2432 dnxhd_decoder_select="blockdsp idctdsp"
2433 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2434 dolby_e_decoder_select="mdct"
2435 dvvideo_decoder_select="dvprofile idctdsp"
2436 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2437 dxa_decoder_select="zlib"
2438 dxv_decoder_select="lzf texturedsp"
2439 eac3_decoder_select="ac3_decoder"
2440 eac3_encoder_select="ac3_encoder"
2441 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2442 eatgq_decoder_select="aandcttables"
2443 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2444 exr_decoder_select="zlib"
2445 ffv1_decoder_select="rangecoder"
2446 ffv1_encoder_select="rangecoder"
2447 ffvhuff_decoder_select="huffyuv_decoder"
2448 ffvhuff_encoder_select="huffyuv_encoder"
2449 fic_decoder_select="golomb"
2450 flac_decoder_select="flacdsp"
2451 flac_encoder_select="bswapdsp flacdsp lpc"
2452 flashsv2_decoder_select="zlib"
2453 flashsv2_encoder_select="zlib"
2454 flashsv_decoder_select="zlib"
2455 flashsv_encoder_select="zlib"
2456 flv_decoder_select="h263_decoder"
2457 flv_encoder_select="h263_encoder"
2458 fourxm_decoder_select="blockdsp bswapdsp"
2459 fraps_decoder_select="bswapdsp huffman"
2460 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2461 g729_decoder_select="audiodsp"
2462 h261_decoder_select="mpegvideo"
2463 h261_encoder_select="aandcttables mpegvideoenc"
2464 h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
2465 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2466 h263i_decoder_select="h263_decoder"
2467 h263p_decoder_select="h263_decoder"
2468 h263p_encoder_select="h263_encoder"
2469 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2470 h264_decoder_suggest="error_resilience"
2471 hap_decoder_select="snappy texturedsp"
2472 hap_encoder_deps="libsnappy"
2473 hap_encoder_select="texturedspenc"
2474 hevc_decoder_select="bswapdsp cabac golomb hevcparse videodsp"
2475 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2476 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
2477 iac_decoder_select="imc_decoder"
2478 imc_decoder_select="bswapdsp fft mdct sinewin"
2479 indeo3_decoder_select="hpeldsp"
2480 indeo4_decoder_select="ividsp"
2481 indeo5_decoder_select="ividsp"
2482 interplay_video_decoder_select="hpeldsp"
2483 jpegls_decoder_select="mjpeg_decoder"
2484 jv_decoder_select="blockdsp"
2485 lagarith_decoder_select="llviddsp"
2486 ljpeg_encoder_select="aandcttables idctdsp jpegtables mpegvideoenc"
2487 magicyuv_decoder_select="llviddsp"
2488 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2489 metasound_decoder_select="lsp mdct sinewin"
2490 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2491 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2492 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2493 mjpegb_decoder_select="mjpeg_decoder"
2494 mlp_decoder_select="mlp_parser"
2495 mlp_encoder_select="lpc"
2496 motionpixels_decoder_select="bswapdsp"
2497 mp1_decoder_select="mpegaudio"
2498 mp1float_decoder_select="mpegaudio"
2499 mp2_decoder_select="mpegaudio"
2500 mp2float_decoder_select="mpegaudio"
2501 mp3_decoder_select="mpegaudio"
2502 mp3adu_decoder_select="mpegaudio"
2503 mp3adufloat_decoder_select="mpegaudio"
2504 mp3float_decoder_select="mpegaudio"
2505 mp3on4_decoder_select="mpegaudio"
2506 mp3on4float_decoder_select="mpegaudio"
2507 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2508 mpc8_decoder_select="mpegaudiodsp"
2509 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2510 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2511 mpegvideo_decoder_select="mpegvideo"
2512 mpeg1video_decoder_select="mpegvideo"
2513 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2514 mpeg2video_decoder_select="mpegvideo"
2515 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2516 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2517 mpeg4_encoder_select="h263_encoder"
2518 msa1_decoder_select="mss34dsp"
2519 mscc_decoder_select="zlib"
2520 msmpeg4v1_decoder_select="h263_decoder"
2521 msmpeg4v2_decoder_select="h263_decoder"
2522 msmpeg4v2_encoder_select="h263_encoder"
2523 msmpeg4v3_decoder_select="h263_decoder"
2524 msmpeg4v3_encoder_select="h263_encoder"
2525 mss2_decoder_select="mpegvideo qpeldsp vc1_decoder"
2526 mts2_decoder_select="mss34dsp"
2527 mxpeg_decoder_select="mjpeg_decoder"
2528 nellymoser_decoder_select="mdct sinewin"
2529 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2530 nuv_decoder_select="idctdsp lzo"
2531 on2avc_decoder_select="mdct"
2532 opus_decoder_deps="swresample"
2533 opus_decoder_select="mdct15"
2534 opus_encoder_select="audio_frame_queue mdct15"
2535 png_decoder_select="zlib"
2536 png_encoder_select="llvidencdsp zlib"
2537 prores_decoder_select="blockdsp idctdsp"
2538 prores_encoder_select="fdctdsp"
2539 qcelp_decoder_select="lsp"
2540 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2541 ra_144_decoder_select="audiodsp"
2542 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2543 ralf_decoder_select="golomb"
2544 rawvideo_decoder_select="bswapdsp"
2545 rscc_decoder_select="zlib"
2546 rtjpeg_decoder_select="me_cmp"
2547 rv10_decoder_select="h263_decoder"
2548 rv10_encoder_select="h263_encoder"
2549 rv20_decoder_select="h263_decoder"
2550 rv20_encoder_select="h263_encoder"
2551 rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2552 rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2553 screenpresso_decoder_select="zlib"
2554 shorten_decoder_select="bswapdsp"
2555 sipr_decoder_select="lsp"
2556 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2557 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2558 sonic_decoder_select="golomb rangecoder"
2559 sonic_encoder_select="golomb rangecoder"
2560 sonic_ls_encoder_select="golomb rangecoder"
2561 sp5x_decoder_select="mjpeg_decoder"
2562 srgc_decoder_select="zlib"
2563 svq1_decoder_select="hpeldsp"
2564 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2565 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2566 svq3_decoder_suggest="zlib"
2567 tak_decoder_select="audiodsp"
2568 tdsc_decoder_select="zlib mjpeg_decoder"
2569 theora_decoder_select="vp3_decoder"
2570 thp_decoder_select="mjpeg_decoder"
2571 tiff_decoder_suggest="zlib lzma"
2572 tiff_encoder_suggest="zlib"
2573 truehd_decoder_select="mlp_parser"
2574 truehd_encoder_select="lpc"
2575 truemotion2_decoder_select="bswapdsp"
2576 truespeech_decoder_select="bswapdsp"
2577 tscc_decoder_select="zlib"
2578 twinvq_decoder_select="mdct lsp sinewin"
2579 txd_decoder_select="texturedsp"
2580 utvideo_decoder_select="bswapdsp llviddsp"
2581 utvideo_encoder_select="bswapdsp huffman llvidencdsp"
2582 vble_decoder_select="llviddsp"
2583 vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 mpegvideo vc1dsp"
2584 vc1_qsv_decoder_deps="libmfx"
2585 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2586 vc1image_decoder_select="vc1_decoder"
2587 vorbis_decoder_select="mdct"
2588 vorbis_encoder_select="mdct"
2589 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2590 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2591 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2592 vp6a_decoder_select="vp6_decoder"
2593 vp6f_decoder_select="vp6_decoder"
2594 vp7_decoder_select="h264pred videodsp vp8dsp"
2595 vp8_decoder_select="h264pred videodsp vp8dsp"
2596 vp9_decoder_select="videodsp vp9_parser"
2597 webp_decoder_select="vp8_decoder exif"
2598 wmalossless_decoder_select="llauddsp"
2599 wmapro_decoder_select="mdct sinewin wma_freqs"
2600 wmav1_decoder_select="mdct sinewin wma_freqs"
2601 wmav1_encoder_select="mdct sinewin wma_freqs"
2602 wmav2_decoder_select="mdct sinewin wma_freqs"
2603 wmav2_encoder_select="mdct sinewin wma_freqs"
2604 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2605 wmv1_decoder_select="h263_decoder"
2606 wmv1_encoder_select="h263_encoder"
2607 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2608 wmv2_encoder_select="h263_encoder wmv2dsp"
2609 wmv3_decoder_select="vc1_decoder"
2610 wmv3image_decoder_select="wmv3_decoder"
2611 xma1_decoder_select="wmapro_decoder"
2612 xma2_decoder_select="wmapro_decoder"
2613 zerocodec_decoder_select="zlib"
2614 zlib_decoder_select="zlib"
2615 zlib_encoder_select="zlib"
2616 zmbv_decoder_select="zlib"
2617 zmbv_encoder_select="zlib"
2619 # hardware accelerators
2620 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2621 cuda_deps_any="dlopen LoadLibrary"
2623 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2624 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32"
2625 dxva2_extralibs="-luser32"
2626 vda_framework_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension"
2627 vda_framework_extralibs="-framework VideoDecodeAcceleration"
2628 vda_deps="vda_framework pthreads"
2629 vda_extralibs="-framework CoreFoundation -framework QuartzCore"
2630 videotoolbox_hwaccel_deps="videotoolbox pthreads"
2631 videotoolbox_hwaccel_extralibs="-framework QuartzCore"
2632 xvmc_deps="X11_extensions_XvMClib_h"
2634 h263_vaapi_hwaccel_deps="vaapi"
2635 h263_vaapi_hwaccel_select="h263_decoder"
2636 h263_videotoolbox_hwaccel_deps="videotoolbox"
2637 h263_videotoolbox_hwaccel_select="h263_decoder"
2638 h264_cuvid_hwaccel_deps="cuda cuvid"
2639 h264_cuvid_hwaccel_select="h264_cuvid_decoder"
2640 h264_d3d11va_hwaccel_deps="d3d11va"
2641 h264_d3d11va_hwaccel_select="h264_decoder"
2642 h264_d3d11va2_hwaccel_deps="d3d11va"
2643 h264_d3d11va2_hwaccel_select="h264_decoder"
2644 h264_dxva2_hwaccel_deps="dxva2"
2645 h264_dxva2_hwaccel_select="h264_decoder"
2646 h264_mediacodec_hwaccel_deps="mediacodec"
2647 h264_mmal_hwaccel_deps="mmal"
2648 h264_qsv_hwaccel_deps="libmfx"
2649 h264_vaapi_hwaccel_deps="vaapi"
2650 h264_vaapi_hwaccel_select="h264_decoder"
2651 h264_vda_hwaccel_deps="vda"
2652 h264_vda_hwaccel_select="h264_decoder"
2653 h264_vda_old_hwaccel_deps="vda"
2654 h264_vda_old_hwaccel_select="h264_decoder"
2655 h264_vdpau_hwaccel_deps="vdpau"
2656 h264_vdpau_hwaccel_select="h264_decoder"
2657 h264_videotoolbox_hwaccel_deps="videotoolbox"
2658 h264_videotoolbox_hwaccel_select="h264_decoder"
2659 hevc_cuvid_hwaccel_deps="cuda cuvid"
2660 hevc_cuvid_hwaccel_select="hevc_cuvid_decoder"
2661 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2662 hevc_d3d11va_hwaccel_select="hevc_decoder"
2663 hevc_mediacodec_hwaccel_deps="mediacodec"
2664 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2665 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2666 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2667 hevc_dxva2_hwaccel_select="hevc_decoder"
2668 hevc_qsv_hwaccel_deps="libmfx"
2669 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2670 hevc_vaapi_hwaccel_select="hevc_decoder"
2671 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2672 hevc_vdpau_hwaccel_select="hevc_decoder"
2673 mjpeg_cuvid_hwaccel_deps="cuda cuvid"
2674 mjpeg_cuvid_hwaccel_select="mjpeg_cuvid_decoder"
2675 mpeg_xvmc_hwaccel_deps="xvmc"
2676 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2677 mpeg1_cuvid_hwaccel_deps="cuda cuvid"
2678 mpeg1_cuvid_hwaccel_select="mpeg1_cuvid_decoder"
2679 mpeg1_vdpau_hwaccel_deps="vdpau"
2680 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2681 mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
2682 mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
2683 mpeg1_xvmc_hwaccel_deps="xvmc"
2684 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2685 mpeg2_cuvid_hwaccel_deps="cuda cuvid"
2686 mpeg2_cuvid_hwaccel_select="mpeg2_cuvid_decoder"
2687 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2688 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2689 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2690 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2691 mpeg2_dxva2_hwaccel_deps="dxva2"
2692 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2693 mpeg2_mediacodec_hwaccel_deps="mediacodec"
2694 mpeg2_mmal_hwaccel_deps="mmal"
2695 mpeg2_qsv_hwaccel_deps="libmfx"
2696 mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
2697 mpeg2_vaapi_hwaccel_deps="vaapi"
2698 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2699 mpeg2_vdpau_hwaccel_deps="vdpau"
2700 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2701 mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
2702 mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
2703 mpeg2_xvmc_hwaccel_deps="xvmc"
2704 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2705 mpeg4_cuvid_hwaccel_deps="cuda cuvid"
2706 mpeg4_cuvid_hwaccel_select="mpeg4_cuvid_decoder"
2707 mpeg4_mediacodec_hwaccel_deps="mediacodec"
2708 mpeg4_mmal_hwaccel_deps="mmal"
2709 mpeg4_vaapi_hwaccel_deps="vaapi"
2710 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2711 mpeg4_vdpau_hwaccel_deps="vdpau"
2712 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2713 mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
2714 mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
2715 vc1_cuvid_hwaccel_deps="cuda cuvid"
2716 vc1_cuvid_hwaccel_select="vc1_cuvid_decoder"
2717 vc1_d3d11va_hwaccel_deps="d3d11va"
2718 vc1_d3d11va_hwaccel_select="vc1_decoder"
2719 vc1_d3d11va2_hwaccel_deps="d3d11va"
2720 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2721 vc1_dxva2_hwaccel_deps="dxva2"
2722 vc1_dxva2_hwaccel_select="vc1_decoder"
2723 vc1_mmal_hwaccel_deps="mmal"
2724 vc1_qsv_hwaccel_deps="libmfx"
2725 vc1_qsv_hwaccel_select="qsvdec_vc1"
2726 vc1_vaapi_hwaccel_deps="vaapi"
2727 vc1_vaapi_hwaccel_select="vc1_decoder"
2728 vc1_vdpau_hwaccel_deps="vdpau"
2729 vc1_vdpau_hwaccel_select="vc1_decoder"
2730 vp8_cuvid_hwaccel_deps="cuda cuvid"
2731 vp8_cuvid_hwaccel_select="vp8_cuvid_decoder"
2732 vp9_cuvid_hwaccel_deps="cuda cuvid"
2733 vp9_cuvid_hwaccel_select="vp9_cuvid_decoder"
2734 vp8_mediacodec_hwaccel_deps="mediacodec"
2735 vp8_qsv_hwaccel_deps="libmfx"
2736 vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2737 vp9_d3d11va_hwaccel_select="vp9_decoder"
2738 vp9_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2739 vp9_d3d11va2_hwaccel_select="vp9_decoder"
2740 vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
2741 vp9_dxva2_hwaccel_select="vp9_decoder"
2742 vp9_mediacodec_hwaccel_deps="mediacodec"
2743 vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth"
2744 vp9_vaapi_hwaccel_select="vp9_decoder"
2745 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2746 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2747 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2748 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2749 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2751 # hardware-accelerated codecs
2752 omx_deps="dlopen pthreads"
2753 omx_extralibs='$ldl'
2754 omx_rpi_select="omx"
2757 vaapi_encode_deps="vaapi"
2759 hwupload_cuda_filter_deps="cuda"
2760 scale_npp_filter_deps="cuda libnpp"
2761 scale_cuda_filter_deps="cuda_sdk"
2764 nvenc_deps_any="dlopen LoadLibrary"
2765 nvenc_encoder_deps="nvenc"
2767 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2768 h264_cuvid_decoder_deps="cuda cuvid"
2769 h264_cuvid_decoder_select="h264_mp4toannexb_bsf"
2770 h264_mediacodec_decoder_deps="mediacodec"
2771 h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
2772 h264_mmal_decoder_deps="mmal"
2773 h264_nvenc_encoder_deps="nvenc"
2774 h264_omx_encoder_deps="omx"
2775 h264_qsv_decoder_deps="libmfx"
2776 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2777 h264_qsv_encoder_deps="libmfx"
2778 h264_qsv_encoder_select="qsvenc"
2779 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2780 h264_vaapi_encoder_select="vaapi_encode golomb"
2781 h264_vda_decoder_deps="vda"
2782 h264_vda_decoder_select="h264_decoder"
2783 h264_vdpau_decoder_deps="vdpau"
2784 h264_vdpau_decoder_select="h264_decoder"
2785 hevc_cuvid_decoder_deps="cuda cuvid"
2786 hevc_cuvid_decoder_select="hevc_mp4toannexb_bsf"
2787 hevc_mediacodec_decoder_deps="mediacodec"
2788 hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
2789 hevc_nvenc_encoder_deps="nvenc"
2790 hevc_qsv_decoder_deps="libmfx"
2791 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
2792 hevc_qsv_encoder_deps="libmfx"
2793 hevc_qsv_encoder_select="hevcparse qsvenc"
2794 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2795 hevc_vaapi_encoder_select="vaapi_encode golomb"
2796 mjpeg_cuvid_decoder_deps="cuda cuvid"
2797 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2798 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2799 mpeg1_cuvid_decoder_deps="cuda cuvid"
2800 mpeg1_vdpau_decoder_deps="vdpau"
2801 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2802 mpeg2_crystalhd_decoder_select="crystalhd"
2803 mpeg2_cuvid_decoder_deps="cuda cuvid"
2804 mpeg2_mmal_decoder_deps="mmal"
2805 mpeg2_mediacodec_decoder_deps="mediacodec"
2806 mpeg2_qsv_decoder_deps="libmfx"
2807 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel"
2808 mpeg2_qsv_encoder_deps="libmfx"
2809 mpeg2_qsv_encoder_select="qsvenc"
2810 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2811 mpeg2_vaapi_encoder_select="vaapi_encode"
2812 mpeg4_crystalhd_decoder_select="crystalhd"
2813 mpeg4_cuvid_decoder_deps="cuda cuvid"
2814 mpeg4_mediacodec_decoder_deps="mediacodec"
2815 mpeg4_mmal_decoder_deps="mmal"
2816 mpeg4_omx_encoder_deps="omx"
2817 mpeg4_vdpau_decoder_deps="vdpau"
2818 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2819 mpeg_vdpau_decoder_deps="vdpau"
2820 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2821 msmpeg4_crystalhd_decoder_select="crystalhd"
2822 nvenc_h264_encoder_select="h264_nvenc_encoder"
2823 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2824 vc1_crystalhd_decoder_select="crystalhd"
2825 vc1_cuvid_decoder_deps="cuda cuvid"
2826 vc1_mmal_decoder_deps="mmal"
2827 vc1_vdpau_decoder_deps="vdpau"
2828 vc1_vdpau_decoder_select="vc1_decoder"
2829 vp8_cuvid_decoder_deps="cuda cuvid"
2830 vp8_mediacodec_decoder_deps="mediacodec"
2831 vp8_qsv_decoder_deps="libmfx"
2832 vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2833 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2834 vp8_vaapi_encoder_select="vaapi_encode"
2835 vp9_cuvid_decoder_deps="cuda cuvid"
2836 vp9_mediacodec_decoder_deps="mediacodec"
2837 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
2838 vp9_vaapi_encoder_select="vaapi_encode"
2839 wmv3_crystalhd_decoder_select="crystalhd"
2840 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2843 h264_parser_select="golomb h264dsp h264parse"
2844 hevc_parser_select="hevcparse"
2845 mpegaudio_parser_select="mpegaudioheader"
2846 mpegvideo_parser_select="mpegvideo"
2847 mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
2848 vc1_parser_select="vc1dsp"
2851 mjpeg2jpeg_bsf_select="jpegtables"
2853 # external libraries
2854 aac_at_decoder_deps="audiotoolbox"
2855 ac3_at_decoder_deps="audiotoolbox"
2856 ac3_at_decoder_select="ac3_parser"
2857 adpcm_ima_qt_at_decoder_deps="audiotoolbox"
2858 alac_at_decoder_deps="audiotoolbox"
2859 amr_nb_at_decoder_deps="audiotoolbox"
2860 avisynth_deps_any="dlopen LoadLibrary"
2861 avisynth_demuxer_deps="avisynth"
2862 avisynth_demuxer_select="riffdec"
2863 eac3_at_decoder_deps="audiotoolbox"
2864 eac3_at_decoder_select="ac3_parser"
2865 gsm_ms_at_decoder_deps="audiotoolbox"
2866 ilbc_at_decoder_deps="audiotoolbox"
2867 mp1_at_decoder_deps="audiotoolbox"
2868 mp2_at_decoder_deps="audiotoolbox"
2869 mp3_at_decoder_deps="audiotoolbox"
2870 mp1_at_decoder_select="mpegaudioheader"
2871 mp2_at_decoder_select="mpegaudioheader"
2872 mp3_at_decoder_select="mpegaudioheader"
2873 pcm_alaw_at_decoder_deps="audiotoolbox"
2874 pcm_mulaw_at_decoder_deps="audiotoolbox"
2875 qdmc_at_decoder_deps="audiotoolbox"
2876 qdm2_at_decoder_deps="audiotoolbox"
2877 aac_at_encoder_deps="audiotoolbox"
2878 aac_at_encoder_select="audio_frame_queue"
2879 alac_at_encoder_deps="audiotoolbox"
2880 alac_at_encoder_select="audio_frame_queue"
2881 ilbc_at_encoder_deps="audiotoolbox"
2882 ilbc_at_encoder_select="audio_frame_queue"
2883 pcm_alaw_at_encoder_deps="audiotoolbox"
2884 pcm_alaw_at_encoder_select="audio_frame_queue"
2885 pcm_mulaw_at_encoder_deps="audiotoolbox"
2886 pcm_mulaw_at_encoder_select="audio_frame_queue"
2887 chromaprint_muxer_deps="chromaprint"
2888 h264_videotoolbox_encoder_deps="videotoolbox_encoder pthreads"
2889 libcelt_decoder_deps="libcelt"
2890 libfdk_aac_decoder_deps="libfdk_aac"
2891 libfdk_aac_encoder_deps="libfdk_aac"
2892 libfdk_aac_encoder_select="audio_frame_queue"
2893 libgme_demuxer_deps="libgme"
2894 libgsm_decoder_deps="libgsm"
2895 libgsm_encoder_deps="libgsm"
2896 libgsm_ms_decoder_deps="libgsm"
2897 libgsm_ms_encoder_deps="libgsm"
2898 libilbc_decoder_deps="libilbc"
2899 libilbc_encoder_deps="libilbc"
2900 libkvazaar_encoder_deps="libkvazaar"
2901 libmodplug_demuxer_deps="libmodplug"
2902 libmp3lame_encoder_deps="libmp3lame"
2903 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2904 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2905 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2906 libopencore_amrnb_encoder_select="audio_frame_queue"
2907 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2908 libopenh264_decoder_deps="libopenh264"
2909 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2910 libopenh264_encoder_deps="libopenh264"
2911 libopenjpeg_decoder_deps="libopenjpeg"
2912 libopenjpeg_encoder_deps="libopenjpeg"
2913 libopenmpt_demuxer_deps="libopenmpt"
2914 libopus_decoder_deps="libopus"
2915 libopus_encoder_deps="libopus"
2916 libopus_encoder_select="audio_frame_queue"
2917 librsvg_decoder_deps="librsvg"
2918 libshine_encoder_deps="libshine"
2919 libshine_encoder_select="audio_frame_queue"
2920 libspeex_decoder_deps="libspeex"
2921 libspeex_encoder_deps="libspeex"
2922 libspeex_encoder_select="audio_frame_queue"
2923 libtheora_encoder_deps="libtheora"
2924 libtwolame_encoder_deps="libtwolame"
2925 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2926 libvorbis_decoder_deps="libvorbis"
2927 libvorbis_encoder_deps="libvorbis"
2928 libvorbis_encoder_select="audio_frame_queue"
2929 libvpx_vp8_decoder_deps="libvpx"
2930 libvpx_vp8_encoder_deps="libvpx"
2931 libvpx_vp9_decoder_deps="libvpx"
2932 libvpx_vp9_encoder_deps="libvpx"
2933 libwavpack_encoder_deps="libwavpack"
2934 libwavpack_encoder_select="audio_frame_queue"
2935 libwebp_encoder_deps="libwebp"
2936 libwebp_anim_encoder_deps="libwebp"
2937 libx262_encoder_deps="libx262"
2938 libx264_encoder_deps="libx264"
2939 libx264rgb_encoder_deps="libx264 x264_csp_bgr"
2940 libx264rgb_encoder_select="libx264_encoder"
2941 libx265_encoder_deps="libx265"
2942 libxavs_encoder_deps="libxavs"
2943 libxvid_encoder_deps="libxvid"
2944 libzvbi_teletext_decoder_deps="libzvbi"
2945 videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo"
2946 videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
2947 videotoolbox_encoder_suggest="vda_framework"
2950 ac3_demuxer_select="ac3_parser"
2951 aiff_muxer_select="iso_media"
2952 asf_demuxer_select="riffdec"
2953 asf_o_demuxer_select="riffdec"
2954 asf_muxer_select="riffenc"
2955 asf_stream_muxer_select="asf_muxer"
2956 avi_demuxer_select="iso_media riffdec exif"
2957 avi_muxer_select="riffenc"
2958 caf_demuxer_select="iso_media riffdec"
2959 caf_muxer_select="iso_media"
2960 dash_muxer_select="mp4_muxer"
2961 dash_demuxer_deps="libxml2"
2962 dirac_demuxer_select="dirac_parser"
2963 dts_demuxer_select="dca_parser"
2964 dtshd_demuxer_select="dca_parser"
2965 dv_demuxer_select="dvprofile"
2966 dv_muxer_select="dvprofile"
2967 dxa_demuxer_select="riffdec"
2968 eac3_demuxer_select="ac3_parser"
2969 f4v_muxer_select="mov_muxer"
2970 fifo_muxer_deps="threads"
2971 flac_demuxer_select="flac_parser"
2972 hds_muxer_select="flv_muxer"
2973 hls_muxer_select="mpegts_muxer"
2974 image2_alias_pix_demuxer_select="image2_demuxer"
2975 image2_brender_pix_demuxer_select="image2_demuxer"
2976 ipod_muxer_select="mov_muxer"
2977 ismv_muxer_select="mov_muxer"
2978 matroska_audio_muxer_select="matroska_muxer"
2979 matroska_demuxer_select="iso_media riffdec"
2980 matroska_demuxer_suggest="bzlib lzo zlib"
2981 matroska_muxer_select="iso_media riffenc"
2982 mmf_muxer_select="riffenc"
2983 mov_demuxer_select="iso_media riffdec"
2984 mov_demuxer_suggest="zlib"
2985 mov_muxer_select="iso_media riffenc rtpenc_chain"
2986 mp3_demuxer_select="mpegaudio_parser"
2987 mp3_muxer_select="mpegaudioheader"
2988 mp4_muxer_select="mov_muxer"
2989 mpegts_demuxer_select="iso_media"
2990 mpegts_muxer_select="adts_muxer latm_muxer"
2991 mpegtsraw_demuxer_select="mpegts_demuxer"
2992 mxf_d10_muxer_select="mxf_muxer"
2993 mxf_opatom_muxer_select="mxf_muxer"
2994 nut_muxer_select="riffenc"
2995 nuv_demuxer_select="riffdec"
2996 oga_muxer_select="ogg_muxer"
2997 ogg_demuxer_select="dirac_parse"
2998 ogv_muxer_select="ogg_muxer"
2999 opus_muxer_select="ogg_muxer"
3000 psp_muxer_select="mov_muxer"
3001 rtp_demuxer_select="sdp_demuxer"
3002 rtp_muxer_select="golomb"
3003 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
3004 rtsp_demuxer_select="http_protocol rtpdec"
3005 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
3006 sap_demuxer_select="sdp_demuxer"
3007 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
3008 sdp_demuxer_select="rtpdec"
3009 smoothstreaming_muxer_select="ismv_muxer"
3010 spdif_muxer_select="aac_parser"
3011 spx_muxer_select="ogg_muxer"
3012 swf_demuxer_suggest="zlib"
3013 tak_demuxer_select="tak_parser"
3014 tg2_muxer_select="mov_muxer"
3015 tgp_muxer_select="mov_muxer"
3016 vobsub_demuxer_select="mpegps_demuxer"
3017 w64_demuxer_select="wav_demuxer"
3018 w64_muxer_select="wav_muxer"
3019 wav_demuxer_select="riffdec"
3020 wav_muxer_select="riffenc"
3021 webm_muxer_select="iso_media riffenc"
3022 webm_dash_manifest_demuxer_select="matroska_demuxer"
3023 wtv_demuxer_select="mpegts_demuxer riffdec"
3024 wtv_muxer_select="mpegts_muxer riffenc"
3025 xmv_demuxer_select="riffdec"
3026 xwma_demuxer_select="riffdec"
3029 alsa_indev_deps="alsa"
3030 alsa_outdev_deps="alsa"
3031 avfoundation_indev_deps="avfoundation pthreads"
3032 avfoundation_indev_extralibs="-framework Foundation -framework CoreVideo -framework CoreMedia"
3033 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
3034 caca_outdev_deps="libcaca"
3035 decklink_indev_deps="decklink threads"
3036 decklink_indev_extralibs="-lstdc++"
3037 decklink_outdev_deps="decklink threads"
3038 decklink_outdev_extralibs="-lstdc++"
3039 libndi_newtek_indev_deps="libndi_newtek"
3040 libndi_newtek_indev_extralibs="-lndi"
3041 libndi_newtek_outdev_deps="libndi_newtek"
3042 libndi_newtek_outdev_extralibs="-lndi"
3043 dshow_indev_deps="IBaseFilter"
3044 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
3045 dv1394_indev_deps="dv1394"
3046 dv1394_indev_select="dv_demuxer"
3047 fbdev_indev_deps="linux_fb_h"
3048 fbdev_outdev_deps="linux_fb_h"
3049 gdigrab_indev_deps="CreateDIBSection"
3050 gdigrab_indev_extralibs="-lgdi32"
3051 gdigrab_indev_select="bmp_decoder"
3052 iec61883_indev_deps="libiec61883"
3053 jack_indev_deps="jack"
3054 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
3055 kmsgrab_indev_deps="libdrm"
3056 lavfi_indev_deps="avfilter"
3057 libcdio_indev_deps="libcdio"
3058 libdc1394_indev_deps="libdc1394"
3059 libv4l2_indev_deps="libv4l2"
3060 openal_indev_deps="openal"
3061 opengl_outdev_deps="opengl"
3062 oss_indev_deps_any="soundcard_h sys_soundcard_h"
3063 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
3064 pulse_indev_deps="libpulse"
3065 pulse_outdev_deps="libpulse"
3066 sdl2_outdev_deps="sdl2"
3067 sndio_indev_deps="sndio"
3068 sndio_outdev_deps="sndio"
3069 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
3070 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
3071 vfwcap_indev_deps="vfw32 vfwcap_defines"
3072 xcbgrab_indev_deps="libxcb"
3073 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
3074 xv_outdev_extralibs="-lXv -lX11 -lXext"
3077 async_protocol_deps="threads"
3078 bluray_protocol_deps="libbluray"
3079 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
3080 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
3081 ffrtmpcrypt_protocol_select="tcp_protocol"
3082 ffrtmphttp_protocol_deps="!librtmp_protocol"
3083 ffrtmphttp_protocol_select="http_protocol"
3084 ftp_protocol_select="tcp_protocol"
3085 gopher_protocol_select="network"
3086 http_protocol_select="tcp_protocol"
3087 httpproxy_protocol_select="tcp_protocol"
3088 https_protocol_select="tls_protocol"
3089 icecast_protocol_select="http_protocol"
3090 librtmp_protocol_deps="librtmp"
3091 librtmpe_protocol_deps="librtmp"
3092 librtmps_protocol_deps="librtmp"
3093 librtmpt_protocol_deps="librtmp"
3094 librtmpte_protocol_deps="librtmp"
3095 libsmbclient_protocol_deps="libsmbclient gplv3"
3096 libssh_protocol_deps="libssh"
3097 mmsh_protocol_select="http_protocol"
3098 mmst_protocol_select="network"
3099 rtmp_protocol_deps="!librtmp_protocol"
3100 rtmp_protocol_select="tcp_protocol"
3101 rtmpe_protocol_select="ffrtmpcrypt_protocol"
3102 rtmps_protocol_deps="!librtmp_protocol"
3103 rtmps_protocol_select="tls_protocol"
3104 rtmpt_protocol_select="ffrtmphttp_protocol"
3105 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
3106 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
3107 rtp_protocol_select="udp_protocol"
3108 sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
3109 sctp_protocol_select="network"
3110 srtp_protocol_select="rtp_protocol srtp"
3111 tcp_protocol_select="network"
3112 tls_gnutls_protocol_deps="gnutls !tls_schannel_protocol !tls_securetransport_protocol"
3113 tls_gnutls_protocol_select="tcp_protocol"
3114 tls_openssl_protocol_deps="openssl !tls_schannel_protocol !tls_securetransport_protocol !tls_gnutls_protocol"
3115 tls_openssl_protocol_select="tcp_protocol"
3116 tls_schannel_protocol_deps="schannel"
3117 tls_schannel_protocol_select="tcp_protocol"
3118 tls_securetransport_protocol_deps="securetransport"
3119 tls_securetransport_protocol_select="tcp_protocol"
3120 tls_protocol_deps_any="tls_schannel_protocol tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
3121 udp_protocol_select="network"
3122 udplite_protocol_select="network"
3123 unix_protocol_deps="sys_un_h"
3124 unix_protocol_select="network"
3127 afftfilt_filter_deps="avcodec"
3128 afftfilt_filter_select="fft"
3129 afir_filter_deps="avcodec"
3130 afir_filter_select="fft"
3131 amovie_filter_deps="avcodec avformat"
3132 aresample_filter_deps="swresample"
3133 ass_filter_deps="libass"
3134 atempo_filter_deps="avcodec"
3135 atempo_filter_select="rdft"
3136 azmq_filter_deps="libzmq"
3137 blackframe_filter_deps="gpl"
3138 boxblur_filter_deps="gpl"
3139 bs2b_filter_deps="libbs2b"
3140 colormatrix_filter_deps="gpl"
3141 coreimage_filter_deps="coreimage appkit"
3142 coreimage_filter_extralibs="-framework OpenGL"
3143 coreimagesrc_filter_deps="coreimage appkit"
3144 coreimagesrc_filter_extralibs="-framework OpenGL"
3145 cover_rect_filter_deps="avcodec avformat gpl"
3146 cropdetect_filter_deps="gpl"
3147 deinterlace_qsv_filter_deps="libmfx"
3148 deinterlace_vaapi_filter_deps="vaapi"
3149 delogo_filter_deps="gpl"
3150 deshake_filter_select="pixelutils"
3151 drawtext_filter_deps="libfreetype"
3152 elbg_filter_deps="avcodec"
3153 eq_filter_deps="gpl"
3154 fftfilt_filter_deps="avcodec"
3155 fftfilt_filter_select="rdft"
3156 find_rect_filter_deps="avcodec avformat gpl"
3157 firequalizer_filter_deps="avcodec"
3158 firequalizer_filter_select="rdft"
3159 flite_filter_deps="libflite"
3160 framerate_filter_select="pixelutils"
3161 frei0r_filter_deps="frei0r dlopen"
3162 frei0r_src_filter_deps="frei0r dlopen"
3163 fspp_filter_deps="gpl"
3164 geq_filter_deps="gpl"
3165 histeq_filter_deps="gpl"
3166 hqdn3d_filter_deps="gpl"
3167 interlace_filter_deps="gpl"
3168 kerndeint_filter_deps="gpl"
3169 ladspa_filter_deps="ladspa dlopen"
3170 mcdeint_filter_deps="avcodec gpl"
3171 movie_filter_deps="avcodec avformat"
3172 mpdecimate_filter_deps="gpl"
3173 mpdecimate_filter_select="pixelutils"
3174 mptestsrc_filter_deps="gpl"
3175 negate_filter_deps="lut_filter"
3176 nnedi_filter_deps="gpl"
3177 ocr_filter_deps="libtesseract"
3178 ocv_filter_deps="libopencv"
3179 owdenoise_filter_deps="gpl"
3180 pan_filter_deps="swresample"
3181 perspective_filter_deps="gpl"
3182 phase_filter_deps="gpl"
3183 pp7_filter_deps="gpl"
3184 pp_filter_deps="gpl postproc"
3185 pullup_filter_deps="gpl"
3186 removelogo_filter_deps="avcodec avformat swscale"
3187 repeatfields_filter_deps="gpl"
3188 resample_filter_deps="avresample"
3189 rubberband_filter_deps="librubberband"
3190 sab_filter_deps="gpl swscale"
3191 scale2ref_filter_deps="swscale"
3192 scale_filter_deps="swscale"
3193 scale_qsv_filter_deps="libmfx"
3194 select_filter_select="pixelutils"
3195 showcqt_filter_deps="avcodec avformat swscale"
3196 showcqt_filter_select="fft"
3197 showfreqs_filter_deps="avcodec"
3198 showfreqs_filter_select="fft"
3199 showspectrum_filter_deps="avcodec"
3200 showspectrum_filter_select="fft"
3201 showspectrumpic_filter_deps="avcodec"
3202 showspectrumpic_filter_select="fft"
3203 signature_filter_deps="gpl avcodec avformat"
3204 smartblur_filter_deps="gpl swscale"
3205 sofalizer_filter_deps="libmysofa avcodec"
3206 sofalizer_filter_select="fft"
3207 spectrumsynth_filter_deps="avcodec"
3208 spectrumsynth_filter_select="fft"
3209 spp_filter_deps="gpl avcodec"
3210 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
3211 stereo3d_filter_deps="gpl"
3212 subtitles_filter_deps="avformat avcodec libass"
3213 super2xsai_filter_deps="gpl"
3214 pixfmts_super2xsai_test_deps="super2xsai_filter"
3215 tinterlace_filter_deps="gpl"
3216 tinterlace_merge_test_deps="tinterlace_filter"
3217 tinterlace_pad_test_deps="tinterlace_filter"
3218 tonemap_filter_deps="const_nan"
3219 uspp_filter_deps="gpl avcodec"
3220 vaguedenoiser_filter_deps="gpl"
3221 vidstabdetect_filter_deps="libvidstab"
3222 vidstabtransform_filter_deps="libvidstab"
3223 libvmaf_filter_deps="libvmaf"
3224 zmq_filter_deps="libzmq"
3225 zoompan_filter_deps="swscale"
3226 zscale_filter_deps="libzimg const_nan"
3227 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3230 avio_dir_cmd_deps="avformat avutil"
3231 avio_reading_deps="avformat avcodec avutil"
3232 decode_audio_example_deps="avcodec avutil"
3233 decode_video_example_deps="avcodec avutil"
3234 demuxing_decoding_example_deps="avcodec avformat avutil"
3235 encode_audio_example_deps="avcodec avutil"
3236 encode_video_example_deps="avcodec avutil"
3237 extract_mvs_example_deps="avcodec avformat avutil"
3238 filter_audio_example_deps="avfilter avutil"
3239 filtering_audio_example_deps="avfilter avcodec avformat avutil"
3240 filtering_video_example_deps="avfilter avcodec avformat avutil"
3241 http_multiclient_example_deps="avformat avutil fork"
3242 hw_decode_example_deps="avcodec avformat avutil"
3243 metadata_example_deps="avformat avutil"
3244 muxing_example_deps="avcodec avformat avutil swscale"
3245 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
3246 remuxing_example_deps="avcodec avformat avutil"
3247 resampling_audio_example_deps="avutil swresample"
3248 scaling_video_example_deps="avutil swscale"
3249 transcode_aac_example_deps="avcodec avformat swresample"
3250 transcoding_example_deps="avfilter avcodec avformat avutil"
3252 # libraries, in linking order
3253 avcodec_deps="avutil"
3254 avcodec_select="null_bsf"
3255 avdevice_deps="avformat avcodec avutil"
3256 avfilter_deps="avutil"
3257 avformat_deps="avcodec avutil"
3258 avresample_deps="avutil"
3259 postproc_deps="avutil gpl"
3260 swresample_deps="avutil"
3261 swscale_deps="avutil"
3264 ffmpeg_deps="avcodec avfilter avformat swresample"
3265 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
3268 ffplay_deps="avcodec avformat swscale swresample sdl2"
3269 ffplay_extralibs='$sdl2_extralibs'
3270 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
3271 ffprobe_deps="avcodec avformat"
3272 ffserver_deps="avformat fork sarestart"
3273 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
3276 podpages_deps="perl"
3277 manpages_deps="perl pod2man"
3278 htmlpages_deps="perl"
3279 htmlpages_deps_any="makeinfo_html texi2html"
3280 txtpages_deps="perl makeinfo"
3281 doc_deps_any="manpages htmlpages podpages txtpages"
3283 # default parameters
3285 logfile="ffbuild/config.log"
3287 # installation paths
3288 prefix_default="/usr/local"
3289 bindir_default='${prefix}/bin'
3290 datadir_default='${prefix}/share/ffmpeg'
3291 docdir_default='${prefix}/share/doc/ffmpeg'
3292 incdir_default='${prefix}/include'
3293 libdir_default='${prefix}/lib'
3294 mandir_default='${prefix}/share/man'
3300 host_cc_default="gcc"
3301 doxygen_default="doxygen"
3303 ln_s_default="ln -s -f"
3305 pkg_config_default=pkg-config
3306 ranlib_default="ranlib"
3307 strip_default="strip"
3308 version_script='--version-script'
3309 x86asmexe_default="nasm"
3310 windres_default="windres"
3312 nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
3315 target_os_default=$(tolower $(uname -s))
3316 host_os=$target_os_default
3319 if test "$target_os_default" = aix; then
3320 arch_default=$(uname -p)
3321 strip_default="strip -X32_64"
3323 arch_default=$(uname -m)
3328 # configurable options
3329 enable $PROGRAM_LIST
3330 enable $DOCUMENT_LIST
3331 enable $EXAMPLE_LIST
3332 enable $(filter_out avresample $LIBRARY_LIST)
3338 enable faan faandct faanidct
3339 enable optimizations
3340 enable runtime_cpudetect
3341 enable safe_bitstream_reader
3343 enable swscale_alpha
3344 enable valgrind_backtrace
3346 sws_max_filter_size_default=256
3347 set_default sws_max_filter_size
3350 SHFLAGS='-shared -Wl,-soname,$$(@F)'
3353 FULLNAME='$(NAME)$(BUILDSUF)'
3354 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
3357 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
3358 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
3359 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
3360 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
3361 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
3362 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
3363 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
3390 host_extralibs='-lm'
3391 host_cflags_filter=echo
3392 host_ldflags_filter=echo
3394 target_path='$(CURDIR)'
3396 # since the object filename is not given with the -MM flag, the compiler
3397 # is only able to print the basename, and we must add the path ourselves
3398 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
3404 if test -f configure; then
3407 source_path=$(cd $(dirname "$0"); pwd)
3408 case "$source_path" in
3409 *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
3411 test -e "$source_path/config.h" &&
3412 die "Out of tree builds are impossible with config.h in source dir."
3419 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3425 file=$source_path/$3
3426 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
3429 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
3430 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
3431 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
3432 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
3433 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
3434 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
3435 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
3436 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
3437 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
3439 find_things_extern(){
3442 file=$source_path/$3
3443 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
3446 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
3447 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
3463 for n in $COMPONENT_LIST; do
3464 v=$(toupper ${n%s})_LIST
3466 eval ${n}_if_any="\$$v"
3469 enable $ARCH_EXT_LIST
3472 echo "Unknown option \"$1\"."
3473 echo "See $0 --help for available options."
3477 print_in_columns() {
3478 cols=$(expr $ncols / 24)
3479 cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
3485 echo $* | sed s/$suffix//g | print_in_columns
3497 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3498 echo "prob ${prob:-0.5}"
3506 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3507 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3516 --extra-ldexeflags=*)
3517 add_ldexeflags $optval
3519 --extra-ldlibflags=*)
3520 add_ldlibflags $optval
3523 add_extralibs $optval
3526 disable $INDEV_LIST $OUTDEV_LIST
3529 debuglevel="$optval"
3532 disable $PROGRAM_LIST
3534 --disable-everything)
3535 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3538 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3539 disable $LIBRARY_LIST $PROGRAM_LIST doc
3542 --enable-random|--disable-random)
3543 action=${opt%%-random}
3544 do_random ${action#--} $COMPONENT_LIST
3546 --enable-random=*|--disable-random=*)
3547 action=${opt%%-random=*}
3548 do_random ${action#--} $optval
3553 --enable-*=*|--disable-*=*)
3554 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3555 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3556 eval list=\$$(toupper $thing)_LIST
3557 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3558 list=$(filter "$name" $list)
3559 [ "$list" = "" ] && warn "Option $opt did not match anything"
3562 --enable-yasm|--disable-yasm)
3563 warn "The ${opt} option is only provided for compatibility and will be\n"\
3564 "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
3565 test $opt = --enable-yasm && x86asm=yes || x86asm=no
3568 warn "The --yasmexe option is only provided for compatibility and will be\n"\
3569 "removed in the future. Use --x86asmexe instead."
3572 --enable-?*|--disable-?*)
3573 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3574 if is_in $option $COMPONENT_LIST; then
3575 test $action = disable && action=unset
3576 eval $action \$$(toupper ${option%s})_LIST
3577 elif is_in $option $CMDLINE_SELECT; then
3584 NAME="${opt#--list-}"
3585 is_in $NAME $COMPONENT_LIST || die_unknown $opt
3587 eval show_list $NAME \$$(toupper $NAME)_LIST
3589 --help|-h) show_help
3591 --quiet|-q) quiet=yes
3593 --fatal-warnings) enable fatal_warnings
3596 libfuzzer_path="$optval"
3599 optname="${opt%%=*}"
3600 optname="${optname#--}"
3601 optname=$(echo "$optname" | sed 's/-/_/g')
3602 if is_in $optname $CMDLINE_SET; then
3603 eval $optname='$optval'
3604 elif is_in $optname $CMDLINE_APPEND; then
3605 append $optname "$optval"
3617 if disabled autodetect; then
3619 # Unless iconv is explicitely disabled by the user, we still want to probe
3620 # for the iconv from the libc.
3621 disabled iconv || enable libc_iconv
3623 disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3624 disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3626 # Mark specifically enabled, but normally autodetected libraries as requested.
3627 for lib in $AUTODETECT_LIBS; do
3628 enabled $lib && request $lib
3630 #TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
3631 enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3632 enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3634 disabled logging && logfile=/dev/null
3636 die_license_disabled() {
3637 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
3640 die_license_disabled_gpl() {
3641 enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
3644 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3645 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3647 enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
3648 map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
3650 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3652 # Disable all the library-specific components if the library itself
3653 # is disabled, see AVCODEC_LIST and following _LIST variables.
3655 disable_components(){
3656 disabled ${1} && disable $(
3657 eval components="\$$(toupper ${1})_COMPONENTS"
3658 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
3662 map 'disable_components $v' $LIBRARY_LIST
3664 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3667 test -n "$valgrind" && toolchain="valgrind-memcheck"
3669 enabled ossfuzz && {
3670 add_cflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
3671 add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
3674 case "$toolchain" in
3676 cc_default="${toolchain%-asan}"
3677 add_cflags -fsanitize=address
3678 add_ldflags -fsanitize=address
3681 cc_default="${toolchain%-msan}"
3682 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
3683 add_ldflags -fsanitize=memory
3686 cc_default="${toolchain%-tsan}"
3687 add_cflags -fsanitize=thread -fPIE
3688 add_ldflags -fsanitize=thread -pie
3689 case "$toolchain" in
3697 cc_default="${toolchain%-usan}"
3698 add_cflags -fsanitize=undefined
3699 add_ldflags -fsanitize=undefined
3702 target_exec_default="valgrind"
3703 case "$toolchain" in
3705 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"
3708 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"
3713 # Check whether the current MSVC version needs the C99 converter.
3714 # From MSVC 2013 (compiler major version 18) onwards, it does actually
3715 # support enough of C99 to build ffmpeg. Default to the new
3716 # behaviour if the regexp was unable to match anything, since this
3717 # successfully parses the version number of existing supported
3718 # versions that require the converter (MSVC 2010 and 2012).
3719 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3720 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3724 cc_default="c99wrap cl"
3725 cxx_default="c99wrap cl"
3727 ld_default="$source_path/compat/windows/mslink"
3728 nm_default="dumpbin -symbols"
3735 target_os_default="win32"
3736 # Use a relative path for TMPDIR. This makes sure all the
3737 # ffconf temp files are written with a relative path, avoiding
3738 # issues with msys/win32 path conversion for MSVC parameters
3739 # such as -Fo<file> or -out:<file>.
3745 nm_default="dumpbin -symbols"
3747 target_os_default="win32"
3751 add_cflags -fprofile-arcs -ftest-coverage
3752 add_ldflags -fprofile-arcs -ftest-coverage
3755 add_cflags -fprofile-arcs -ftest-coverage
3756 add_ldflags --coverage
3759 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3760 add_cflags -fno-strict-overflow -fstack-protector-all
3761 add_ldflags -Wl,-z,relro -Wl,-z,now
3763 add_ldexeflags -fPIE -pie
3766 die "Unknown toolchain $toolchain"
3770 test -n "$cross_prefix" && enable cross_compile
3772 if enabled cross_compile; then
3773 test -n "$arch" && test -n "$target_os" ||
3774 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
3777 ar_default="${cross_prefix}${ar_default}"
3778 cc_default="${cross_prefix}${cc_default}"
3779 cxx_default="${cross_prefix}${cxx_default}"
3780 nm_default="${cross_prefix}${nm_default}"
3781 pkg_config_default="${cross_prefix}${pkg_config_default}"
3782 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3783 ranlib_default="${cross_prefix}${ranlib_default} -D"
3785 ranlib_default="${cross_prefix}${ranlib_default}"
3787 strip_default="${cross_prefix}${strip_default}"
3788 windres_default="${cross_prefix}${windres_default}"
3790 sysinclude_default="${sysroot}/usr/include"
3792 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3793 target_exec target_os x86asmexe nvcc
3794 enabled cross_compile || host_cc_default=$cc
3797 pkg_config_fail_message=""
3798 if ! $pkg_config --version >/dev/null 2>&1; then
3799 warn "$pkg_config not found, library detection may fail."
3801 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3802 pkg_config_fail_message="
3803 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3806 if test $doxygen != $doxygen_default && \
3807 ! $doxygen --version >/dev/null 2>&1; then
3808 warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3813 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3817 EXESUF=$(exesuf $target_os)
3818 HOSTEXESUF=$(exesuf $host_os)
3820 # set temporary file name
3821 : ${TMPDIR:=$TEMPDIR}
3825 if [ -n "$tempprefix" ] ; then
3827 tmpname="$tempprefix.${HOSTNAME}.${UID}"
3831 elif ! check_cmd mktemp -u XXXXXX; then
3832 # simple replacement for missing mktemp
3833 # NOT SAFE FOR GENERAL USE
3835 tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3841 FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
3842 die "Unable to create temporary directory in $TMPDIR."
3845 tmp="${FFTMPDIR}/test"$2
3846 (set -C; exec > $tmp) 2> /dev/null ||
3847 die "Unable to create temporary file in $FFTMPDIR."
3851 trap 'rm -rf -- "$FFTMPDIR"' EXIT
3857 tmpfile TMPE $EXESUF
3869 # make sure we can execute files in $TMPDIR
3870 cat > $TMPSH 2>> $logfile <<EOF
3873 chmod +x $TMPSH >> $logfile 2>&1
3874 if ! $TMPSH >> $logfile 2>&1; then
3876 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
3877 variable to another directory and make sure that it is not mounted noexec.
3879 die "Sanity test failed."
3885 # Filter out MSVC cl.exe options from cflags that shouldn't
3886 # be passed to gas-preprocessor
3896 -std=c99) echo -c99 ;;
3897 -mcpu=*) echo -arch ${flag#*=} ;;
3898 -mieee) echo -ieee ;;
3899 -O*|-fast) echo $flag ;;
3900 -fno-math-errno) echo -assume nomath_errno ;;
3902 -Wall) echo -msg_enable level2 ;;
3903 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
3904 -Wl,*) echo $flag ;;
3914 -Wno-switch) echo -Wno-switch-enum ;;
3915 -Wno-format-zero-length) ;;
3916 -Wdisabled-optimization) ;;
3917 -Wno-pointer-sign) echo -Wno-other ;;
3923 msvc_common_flags(){
3926 # In addition to specifying certain flags under the compiler
3927 # specific filters, they must be specified here as well or else the
3928 # generic catch all at the bottom will print the original flag.
3933 -fomit-frame-pointer) ;;
3937 -fno-signed-zeros) ;;
3941 -lz) echo zlib.lib ;;
3942 -lx264) echo libx264.lib ;;
3944 -l*) echo ${flag#-l}.lib ;;
3945 -LARGEADDRESSAWARE) echo $flag ;;
3946 -L*) echo -libpath:${flag#-L} ;;
3953 msvc_common_flags "$@"
3956 -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
3958 -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3959 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3960 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3962 -wd4273 -wd4554 -wd4701 -wd4703 ;;
3968 msvc_common_flags "$@"
3971 # Despite what Intel's documentation says -Wall, which is supported
3972 # on Windows, does enable remarks so disable them here.
3973 -Wall) echo $flag -Qdiag-disable:remark ;;
3974 -std=c99) echo -Qstd=c99 ;;
3992 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3993 -fomit-frame-pointer) echo -Mnoframe ;;
4004 case "${flag#*=}" in
4005 native) echo -xtarget=native ;;
4006 v9|niagara) echo -xarch=sparc ;;
4007 ultrasparc) echo -xarch=sparcvis ;;
4008 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
4009 i586|pentium) echo -xchip=pentium ;;
4010 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
4011 pentium3*|c3-2) echo -xtarget=pentium3 ;;
4012 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
4013 pentium4*) echo -xtarget=pentium4 ;;
4014 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
4015 *-sse3) echo -xarch=sse3 ;;
4016 core2) echo -xarch=ssse3 -xchip=core2 ;;
4017 bonnell) echo -xarch=ssse3 ;;
4018 corei7|nehalem) echo -xtarget=nehalem ;;
4019 westmere) echo -xtarget=westmere ;;
4020 silvermont) echo -xarch=sse4_2 ;;
4021 corei7-avx|sandybridge) echo -xtarget=sandybridge ;;
4022 core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
4024 amdfam10|barcelona) echo -xtarget=barcelona ;;
4025 btver1) echo -xarch=amdsse4a ;;
4026 btver2|bdver*|znver*) echo -xarch=avx ;;
4027 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
4028 k8|opteron|athlon64|athlon-fx)
4029 echo -xarch=sse2a ;;
4030 athlon*) echo -xarch=pentium_proa ;;
4033 -std=c99) echo -xc99 ;;
4034 -fomit-frame-pointer) echo -xregs=frameptr ;;
4035 -fPIC) echo -KPIC -xcode=pic32 ;;
4036 -W*,*) echo $flag ;;
4037 -f*-*|-W*|-mimpure-text) ;;
4048 case "${flag#*=}" in
4049 armv7-a|cortex-a*) echo -mv=7a8 ;;
4050 armv7-r|cortex-r*) echo -mv=7r4 ;;
4051 armv7-m|cortex-m*) echo -mv=7m3 ;;
4052 armv6*|arm11*) echo -mv=6 ;;
4053 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
4055 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
4058 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
4059 -mfpu=vfp) echo --float_support=vfpv2 ;;
4060 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
4061 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
4062 -msoft-float) echo --float_support=vfplib ;;
4063 -O[0-3]|-mf=*) echo $flag ;;
4065 -pds=*) echo $flag ;;
4066 -D*|-I*) echo $flag ;;
4067 --gcc|--abi=*) echo $flag ;;
4078 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
4079 unset _ld_o _ldflags _ld_lib _ld_path
4080 unset _depflags _DEPCMD _DEPFLAGS
4083 if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
4084 true # no-op to avoid reading stdin in following checks
4085 elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
4087 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
4088 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
4089 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4092 elif $_cc -v 2>&1 | grep -qi ^gcc; then
4094 gcc_version=$($_cc --version | head -n1)
4095 gcc_basever=$($_cc -dumpversion)
4096 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
4097 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
4098 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
4099 case $gcc_basever in
4102 *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
4104 if [ "$first" = true ]; then
4105 case $gcc_basever in
4107 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
4112 elif $_cc --version 2>/dev/null | grep -q ^icc; then
4114 _ident=$($_cc --version | head -n1)
4119 _flags_filter=icc_flags
4120 elif $_cc -v 2>&1 | grep -q xlc; then
4122 _ident=$($_cc -qversion 2>/dev/null | head -n1)
4124 _cflags_size='-O5 -qcompact'
4125 elif $_cc -V 2>/dev/null | grep -q Compaq; then
4127 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
4129 _cflags_speed='-fast'
4131 _flags_filter=ccc_flags
4132 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
4133 test -d "$sysroot" || die "No valid sysroot specified."
4135 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
4136 armcc_conf="$PWD/armcc.conf"
4137 $_cc --arm_linux_configure \
4138 --arm_linux_config_file="$armcc_conf" \
4139 --configure_sysroot="$sysroot" \
4140 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
4141 die "Error creating armcc configuration file."
4142 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
4143 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
4144 as_default="${cross_prefix}gcc"
4148 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
4150 _ident=$($_cc -version | head -n1 | tr -s ' ')
4151 _flags='--gcc --abi=eabi -me'
4154 _depflags='-ppa -ppd=$(@:.o=.d)'
4155 _cflags_speed='-O3 -mf=5'
4156 _cflags_size='-O3 -mf=2'
4157 _flags_filter=tms470_flags
4158 elif $_cc -v 2>&1 | grep -q clang; then
4160 _ident=$($_cc --version 2>/dev/null | head -n1)
4161 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4164 elif $_cc -V 2>&1 | grep -q Sun; then
4166 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
4167 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
4168 _DEPFLAGS='-xM1 -xc99'
4171 _cflags_size='-O5 -xspace'
4172 _flags_filter=suncc_flags
4173 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
4175 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4176 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4179 _flags_filter='filter_out -Wdisabled-optimization'
4180 elif $_cc -v 2>&1 | grep -q Open64; then
4182 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4183 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4186 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
4187 elif $_cc -V 2>&1 | grep -q Portland; then
4189 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
4190 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
4191 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
4192 _cflags_size="-O2 -Munroll=c:1 $opt_common"
4194 _flags_filter=pgi_flags
4195 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
4197 _ident=$($_cc | head -n1)
4198 # 4509: "This form of conditional instruction is deprecated"
4199 _flags="-nologo -ignore 4509"
4200 _flags_filter=armasm_flags
4201 elif $_cc 2>&1 | grep -q Intel; then
4203 _ident=$($_cc 2>&1 | head -n1)
4204 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
4205 # Not only is O3 broken on 13.x+ but it is slower on all previous
4206 # versions (tested) as well.
4208 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
4209 if $_cc 2>&1 | grep -q Linker; then
4216 _flags_filter=icl_flags
4218 _ld_path='-libpath:'
4219 # -Qdiag-error to make icl error when seeing certain unknown arguments
4220 _flags='-nologo -Qdiag-error:4044,10157'
4221 # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
4222 # with MSVC which enables it by default.
4223 _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
4225 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
4226 # lld can emulate multiple different linkers; in ms link.exe mode,
4227 # the -? parameter gives the help output which contains an identifyable
4228 # string, while it gives an error in other modes.
4230 # The link.exe mode doesn't have a switch for getting the version,
4231 # but we can force it back to gnu mode and get the version from there.
4232 _ident=$($_cc -flavor gnu --version 2>/dev/null)
4234 _flags_filter=msvc_flags
4236 _ld_path='-libpath:'
4237 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
4239 _ident=$($_cc 2>&1 | head -n1)
4240 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
4241 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
4245 if $_cc -nologo- 2>&1 | grep -q Linker; then
4252 _flags_filter=msvc_flags
4254 _ld_path='-libpath:'
4257 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
4259 _ident=$($_cc --version | head -n1)
4263 _flags_filter=cparser_flags
4266 eval ${pfx}_type=\$_type
4267 eval ${pfx}_ident=\$_ident
4271 eval ${1}_C=\${_cc_c-\${${1}_C}}
4272 eval ${1}_E=\${_cc_e-\${${1}_E}}
4273 eval ${1}_O=\${_cc_o-\${${1}_O}}
4275 if [ -n "$_depflags" ]; then
4276 eval ${1}_DEPFLAGS=\$_depflags
4278 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
4279 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
4280 eval DEP${1}FLAGS=\$_flags
4284 probe_cc cc "$cc" "true"
4285 cflags_filter=$_flags_filter
4286 cflags_speed=$_cflags_speed
4287 cflags_size=$_cflags_size
4288 cflags_noopt=$_cflags_noopt
4289 add_cflags $_flags $_cflags
4290 cc_ldflags=$_ldflags
4294 probe_cc hostcc "$host_cc"
4295 host_cflags_filter=$_flags_filter
4296 host_cflags_speed=$_cflags_speed
4297 add_host_cflags $_flags $_cflags
4300 test -n "$cc_type" && enable $cc_type ||
4301 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
4303 : ${as_default:=$cc}
4304 : ${objcc_default:=$cc}
4305 : ${dep_cc_default:=$cc}
4306 : ${ld_default:=$cc}
4307 : ${host_ld_default:=$host_cc}
4308 set_default ar as objcc dep_cc ld ln_s host_ld windres
4311 asflags_filter=$_flags_filter
4312 add_asflags $_flags $_cflags
4315 probe_cc objcc "$objcc"
4316 objcflags_filter=$_flags_filter
4317 add_objcflags $_flags $_cflags
4321 ldflags_filter=$_flags_filter
4322 add_ldflags $_flags $_ldflags
4323 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
4325 LD_LIB=${_ld_lib-$LD_LIB}
4326 LD_PATH=${_ld_path-$LD_PATH}
4328 probe_cc hostld "$host_ld"
4329 host_ldflags_filter=$_flags_filter
4330 add_host_ldflags $_flags $_ldflags
4331 HOSTLD_O=${_ld_o-$HOSTLD_O}
4333 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
4334 probe_cc depcc "$dep_cc"
4335 CCDEP=${_DEPCMD:-$DEPCMD}
4336 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
4340 if $ar 2>&1 | grep -q Microsoft; then
4343 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
4346 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
4347 arflags='-Xany -r -c'
4349 elif $ar 2>&1 | grep -q "\[D\] "; then
4357 add_cflags $extra_cflags
4358 add_cxxflags $extra_cxxflags
4359 add_objcflags $extra_objcflags
4360 add_asflags $extra_cflags
4362 if test -n "$sysroot"; then
4365 add_cppflags --sysroot="$sysroot"
4366 add_ldflags --sysroot="$sysroot"
4367 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
4368 add_cppflags -isysroot "$sysroot"
4369 add_ldflags -isysroot "$sysroot"
4372 add_cppflags -I"$sysinclude"
4373 add_ldflags --sysroot="$sysroot"
4378 if test "$cpu" = host; then
4379 enabled cross_compile &&
4380 die "--cpu=host makes no sense when cross-compiling."
4385 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4387 s/.*$1=\\([^ ]*\\).*/\\1/
4392 cpu=$(check_native -march || check_native -mcpu)
4396 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4397 sed -n "/cc1.*-target-cpu /{
4398 s/.*-target-cpu \\([^ ]*\\).*/\\1/
4403 cpu=$(check_native -march)
4407 test "${cpu:-host}" = host &&
4408 die "--cpu=host not supported with compiler $cc"
4411 # Deal with common $arch aliases
4435 "Power Macintosh"|ppc*|powerpc*)
4450 i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
4455 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
4458 # Add processor-specific flags
4459 if enabled aarch64; then
4463 cpuflags="-march=$cpu"
4466 cpuflags="-mcpu=$cpu"
4470 elif enabled alpha; then
4472 cpuflags="-mcpu=$cpu"
4474 elif enabled arm; then
4477 check_cpp_condition stddef.h \
4478 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
4483 if check_arm_arch 4; then echo armv4
4484 elif check_arm_arch 4T; then echo armv4t
4485 elif check_arm_arch 5; then echo armv5
4486 elif check_arm_arch 5E; then echo armv5e
4487 elif check_arm_arch 5T; then echo armv5t
4488 elif check_arm_arch 5TE; then echo armv5te
4489 elif check_arm_arch 5TEJ; then echo armv5te
4490 elif check_arm_arch 6; then echo armv6
4491 elif check_arm_arch 6J; then echo armv6j
4492 elif check_arm_arch 6K; then echo armv6k
4493 elif check_arm_arch 6Z; then echo armv6z
4494 elif check_arm_arch 6ZK; then echo armv6zk
4495 elif check_arm_arch 6T2; then echo armv6t2
4496 elif check_arm_arch 7; then echo armv7
4497 elif check_arm_arch 7A 7_A; then echo armv7-a
4498 elif check_arm_arch 7S; then echo armv7-a
4499 elif check_arm_arch 7R 7_R; then echo armv7-r
4500 elif check_arm_arch 7M 7_M; then echo armv7-m
4501 elif check_arm_arch 7EM 7E_M; then echo armv7-m
4502 elif check_arm_arch 8A 8_A; then echo armv8-a
4506 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
4510 cpuflags="-march=$cpu"
4511 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
4514 cpuflags="-mcpu=$cpu"
4516 cortex-a*) subarch=armv7a ;;
4517 cortex-r*) subarch=armv7r ;;
4518 cortex-m*) enable thumb; subarch=armv7m ;;
4519 arm11*) subarch=armv6 ;;
4520 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
4521 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
4522 *) subarch=$(probe_arm_arch) ;;
4528 armv5t*) enable fast_clz ;;
4531 disabled fast_unaligned || enable fast_unaligned
4535 elif enabled avr32; then
4540 cpuflags="-mpart=$cpu"
4544 cpuflags="-march=$cpu"
4548 cpuflags="-mcpu=$cpu"
4552 cpuflags="-march=$cpu"
4556 elif enabled bfin; then
4558 cpuflags="-mcpu=$cpu"
4560 elif enabled mips; then
4562 cpuflags="-march=$cpu"
4564 if [ "$cpu" != "generic" ]; then
4574 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
4585 enable local_aligned_8 local_aligned_16 local_aligned_32
4586 enable simd_align_16
4590 enable fast_unaligned
4591 disable aligned_stack
4597 cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4600 cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4603 cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4608 # Unknown CPU. Disable everything.
4609 warn "unknown CPU. Disabling all MIPS optimizations."
4632 24kef*|34kf*|1004kf*)
4640 check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
4644 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4648 check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4652 # We do not disable anything. Is up to the user to disable the unwanted features.
4653 warn 'generic cpu selected'
4656 elif enabled ppc; then
4660 case $(tolower $cpu) in
4661 601|ppc601|powerpc601)
4662 cpuflags="-mcpu=601"
4665 603*|ppc603*|powerpc603*)
4666 cpuflags="-mcpu=603"
4669 604*|ppc604*|powerpc604*)
4670 cpuflags="-mcpu=604"
4673 g3|75*|ppc75*|powerpc75*)
4674 cpuflags="-mcpu=750"
4677 g4|745*|ppc745*|powerpc745*)
4678 cpuflags="-mcpu=7450"
4681 74*|ppc74*|powerpc74*)
4682 cpuflags="-mcpu=7400"
4685 g5|970|ppc970|powerpc970)
4686 cpuflags="-mcpu=970"
4690 cpuflags="-mcpu=$cpu"
4694 cpuflags="-mcpu=$cpu"
4697 cpuflags="-mcpu=cell"
4702 cpuflags="-mcpu=e500mc"
4706 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4711 cpuflags="-mcpu=8540 -mhard-float"
4717 elif enabled sparc; then
4720 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4721 cpuflags="-mcpu=$cpu"
4723 ultrasparc*|niagara[234])
4724 cpuflags="-mcpu=$cpu"
4728 elif enabled x86; then
4732 cpuflags="-march=$cpu"
4736 # targets that do NOT support nopl and conditional mov (cmov)
4737 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4738 cpuflags="-march=$cpu"
4741 # targets that do support nopl and conditional mov (cmov)
4742 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4743 |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
4744 |amdfam10|barcelona|b[dt]ver*|znver*)
4745 cpuflags="-march=$cpu"
4749 # targets that do support conditional mov but on which it's slow
4750 pentium4|pentium4m|prescott|nocona)
4751 cpuflags="-march=$cpu"
4759 if [ "$cpu" != generic ]; then
4760 add_cflags $cpuflags
4761 add_asflags $cpuflags
4762 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
4765 # compiler sanity check
4767 int main(void){ return 0; }
4769 if test "$?" != 0; then
4770 echo "$cc is unable to create an executable file."
4771 if test -z "$cross_prefix" && ! enabled cross_compile ; then
4772 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4773 echo "Only do this if you know what cross compiling means."
4775 die "C compiler test failed."
4778 add_cppflags -D_ISOC99_SOURCE
4779 add_cxxflags -D__STDC_CONSTANT_MACROS
4780 check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
4782 # some compilers silently accept -std=c11, so we also need to check that the
4783 # version macro is defined properly
4784 if test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L"; then
4787 check_cflags -std=c99
4790 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4793 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4797 add_host_cppflags -D_ISOC99_SOURCE
4798 check_host_cflags -std=c99
4799 check_host_cflags -Wall
4800 check_host_cflags $host_cflags_speed
4806 check_code cc "" "int test[2*($expr) - 1]" &&
4807 subarch=$arch64 || subarch=$arch32
4815 check_64bit mips mips64 '_MIPS_SIM > 1'
4819 check_64bit parisc parisc64 'sizeof(void *) > 4'
4823 check_64bit ppc ppc64 'sizeof(void *) > 4'
4827 check_64bit s390 s390x 'sizeof(void *) > 4'
4831 check_64bit sparc sparc64 'sizeof(void *) > 4'
4835 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4836 # Treat x32 as x64 for now. Note it also needs spic=$shared
4837 test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4839 if test "$subarch" = "x86_64"; then
4844 check_cc <<EOF && subarch="ppc64"
4845 int test[(int)sizeof(char*) - 7];
4851 enabled spic && enable_weak pic
4853 enabled x86_64 && objformat=elf64 || objformat="elf32"
4859 add_cppflags '-I\$(SRC_PATH)/compat/aix'
4860 enabled shared && add_ldflags -Wl,-brtl
4864 enable section_data_rel_ro
4865 SLIB_INSTALL_NAME='$(SLIBNAME)'
4867 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
4870 prefix_default="/boot/common"
4871 network_extralibs="-lnetwork"
4875 SHFLAGS='-shared -Wl,-h,$$(@F)'
4876 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4877 network_extralibs="-lsocket -lnsl"
4878 add_cppflags -D__EXTENSIONS__
4879 # When using suncc to build, the Solaris linker will mark
4880 # an executable with each instruction set encountered by
4881 # the Solaris assembler. As our libraries contain their own
4882 # guards for processor-specific code, instead suppress
4883 # generation of the HWCAPS ELF section on Solaris x86 only.
4884 enabled_all suncc x86 &&
4885 echo "hwcap_1 = OVERRIDE;" > mapfile &&
4886 add_ldflags -Wl,-M,mapfile
4887 nm_default='nm -P -g'
4889 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
4893 oss_indev_extralibs="-lossaudio"
4894 oss_outdev_extralibs="-lossaudio"
4895 enabled gcc || check_ldflags -Wl,-zmuldefs
4900 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4902 oss_indev_extralibs="-lossaudio"
4903 oss_outdev_extralibs="-lossaudio"
4911 add_extralibs -lpoll -lgnugetopt
4915 enabled ppc && add_asflags -force_cpusubtype_ALL
4916 install_name_dir_default='$(SHLIBDIR)'
4917 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4918 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4920 add_ldflags -Wl,-dynamic,-search_paths_first
4922 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4923 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4925 enabled x86_64 && objformat="macho64" || objformat="macho32"
4926 enabled_any pic shared x86_64 ||
4927 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4928 check_header dispatch/dispatch.h &&
4929 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
4930 version_script='-exported_symbols_list'
4931 VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
4934 die "Native MSYS builds are discouraged, please use the MINGW environment."
4937 if test $target_os = "mingw32ce"; then
4943 if enabled x86_64; then
4944 LIBTARGET="i386:x86-64"
4945 elif enabled arm; then
4948 enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4949 enabled x86_32 && check_ldflags -Wl,--large-address-aware
4950 shlibdir_default="$bindir_default"
4953 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4954 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4955 dlltool="${cross_prefix}dlltool"
4956 if check_cmd lib.exe -list; then
4957 SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4958 if enabled x86_64; then
4961 elif check_cmd $dlltool --version; then
4962 SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
4964 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4966 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4967 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4968 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--disable-auto-image-base'
4969 enabled x86_64 && objformat="win64" || objformat="win32"
4972 check_ldflags -Wl,--nxcompat,--dynamicbase
4973 # Lets work around some stupidity in binutils.
4974 # ld will strip relocations from executables even though we need them
4975 # for dynamicbase (ASLR). Using -pie does retain the reloc section
4976 # however ld then forgets what the entry point should be (oops) so we
4977 # have to manually (re)set it.
4978 if enabled x86_32; then
4979 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
4980 elif enabled x86_64; then
4981 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
4982 check_ldflags -Wl,--high-entropy-va # binutils 2.25
4983 # Set image base >4GB for extra entropy with HEASLR
4984 add_ldexeflags -Wl,--image-base,0x140000000
4985 append SHFLAGS -Wl,--image-base,0x180000000
4990 if enabled shared; then
4991 # Link to the import library instead of the normal static library
4994 # Cannot build both shared and static libs with MSVC or icl.
4997 enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4998 shlibdir_default="$bindir_default"
5001 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5002 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5003 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
5004 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5006 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
5007 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
5008 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
5009 enabled x86_64 && objformat="win64" || objformat="win32"
5015 shlibdir_default="$bindir_default"
5018 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5019 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
5020 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5022 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
5023 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
5024 enabled x86_64 && objformat="win64" || objformat="win32"
5026 enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
5027 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5029 *-dos|freedos|opendos)
5030 network_extralibs="-lsocket"
5033 add_cppflags -U__STRICT_ANSI__
5037 enable section_data_rel_ro
5038 enabled_any arm aarch64 && enable_weak linux_perf
5042 ranlib="echo ignoring ranlib"
5047 add_cppflags -D_GNU_SOURCE
5048 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
5049 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
5053 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
5054 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
5055 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \
5056 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \
5057 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \
5058 echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \
5059 emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def'
5060 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \
5061 emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;'
5062 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
5064 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib'
5066 enable_weak os2threads
5069 add_cppflags -D_BSD_SOURCE
5074 add_cppflags -D_QNX_SOURCE
5075 network_extralibs="-lsocket"
5080 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
5081 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
5082 add_ldflags -Wl,--target1-abs,--no-undefined \
5083 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
5084 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
5085 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
5086 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
5087 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
5090 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
5097 die "Unknown OS '$target_os'."
5101 # test if creating links works
5102 link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX)
5103 link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX)
5105 $ln_s "$link_dest" "$link_name"
5106 touch "$link_dest/test_file"
5107 if [ "$source_path" != "." ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then
5108 # create link to source path
5109 [ -e src ] && rm src
5110 $ln_s "$source_path" src
5113 # creating directory links doesn't work
5114 # fall back to using the full source path
5115 source_link="$source_path"
5121 # determine libc flavour
5126 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
5127 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
5128 eval ${pfx}libc_type=uclibc
5129 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5130 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
5131 eval ${pfx}libc_type=glibc
5132 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5133 # MinGW headers can be installed on Cygwin, so check for newlib first.
5134 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
5135 eval ${pfx}libc_type=newlib
5136 add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
5137 # MinGW64 is backwards compatible with MinGW32, so check for it first.
5138 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
5139 eval ${pfx}libc_type=mingw64
5140 if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
5141 add_compat msvcrt/snprintf.o
5142 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
5144 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5145 eval test \$${pfx_no_}cc_type = "gcc" &&
5146 add_${pfx}cppflags -D__printf__=__gnu_printf__
5147 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
5148 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
5149 eval ${pfx}libc_type=mingw32
5150 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
5151 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
5152 die "ERROR: MinGW32 runtime version must be >= 3.15."
5153 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5154 check_${pfx}cpp_condition _mingw.h "defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0502" ||
5155 add_${pfx}cppflags -D_WIN32_WINNT=0x0502
5156 check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
5157 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
5158 eval test \$${pfx_no_}cc_type = "gcc" &&
5159 add_${pfx}cppflags -D__printf__=__gnu_printf__
5160 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
5161 eval ${pfx}libc_type=msvcrt
5162 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
5163 if [ "$pfx" = host_ ]; then
5164 add_host_cppflags -Dsnprintf=_snprintf
5166 add_compat strtod.o strtod=avpriv_strtod
5167 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
5168 _snprintf=avpriv_snprintf \
5169 vsnprintf=avpriv_vsnprintf
5172 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
5173 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
5174 # 0x601 by default unless something else is set by the user.
5175 # This can easily lead to us detecting functions only present
5176 # in such new versions and producing binaries requiring windows 7.0.
5177 # Therefore explicitly set the default to XP unless the user has
5178 # set something else on the command line.
5179 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
5180 # family. For these cases, configure is free to use any functions
5181 # found in the SDK headers by default. (Alternatively, we could force
5182 # _WIN32_WINNT to 0x0602 in that case.)
5183 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
5184 { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
5185 #ifdef WINAPI_FAMILY
5186 #include <winapifamily.h>
5187 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
5192 if [ "$pfx" = "" ]; then
5193 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
5194 check_func strtoull || add_cflags -Dstrtoull=_strtoui64
5196 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
5197 eval ${pfx}libc_type=klibc
5198 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
5199 eval ${pfx}libc_type=bionic
5200 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
5201 eval ${pfx}libc_type=solaris
5202 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
5204 check_${pfx}cc <<EOF
5206 void *v = localtime_r;
5208 test "$?" != 0 && check_${pfx}cc -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 <<EOF && add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5210 void *v = localtime_r;
5216 test -n "$libc_type" && enable libc_$libc_type
5218 test -n "$host_libc_type" && enable host_libc_$host_libc_type
5222 add_compat strtod.o strtod=avpriv_strtod
5226 # hacks for compiler/libc/os combinations
5228 if enabled_all tms470 libc_glibc; then
5229 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
5230 add_cppflags -D__USER_LABEL_PREFIX__=
5231 add_cppflags -D__builtin_memset=memset
5232 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
5233 add_cflags -pds=48 # incompatible redefinition of macro
5236 if enabled_all ccc libc_glibc; then
5237 add_ldflags -Wl,-z,now # calls to libots crash without this
5240 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
5241 add_cppflags '-I\$(SRC_PATH)/compat/float'
5244 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
5247 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" > ffbuild/config.fate
5249 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
5252 : ${shlibdir_default:="$libdir"}
5253 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
5255 set_default $PATHS_LIST
5258 # we need to build at least one lib type
5259 if ! enabled_any static shared; then
5261 At least one library type must be built.
5262 Specify --enable-static to build the static libraries or --enable-shared to
5263 build the shared libraries as well. To only build the shared libraries specify
5264 --disable-static in addition to --enable-shared.
5269 disabled optimizations || enabled ossfuzz || check_cflags -fomit-frame-pointer
5272 disabled pic && return
5275 case "$target_os" in
5285 enabled pic && enable_weak_pic
5287 check_cc <<EOF || die "Symbol mangling check failed."
5290 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
5291 extern_prefix=${sym%%ff_extern*}
5293 check_cc <<EOF && enable_weak inline_asm
5294 void foo(void) { __asm__ volatile ("" ::); }
5298 for restrict_keyword in restrict __restrict__ __restrict; do
5299 check_cc <<EOF && _restrict=$restrict_keyword && break
5300 void foo(char * $restrict_keyword p);
5304 check_cc <<EOF && enable pragma_deprecated
5305 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
5308 check_cc <<EOF && enable attribute_packed
5309 struct { int x; } __attribute__((packed)) x;
5312 check_cc <<EOF && enable attribute_may_alias
5313 union { int x; } __attribute__((may_alias)) x;
5316 check_cc <<EOF || die "endian test failed"
5317 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
5319 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
5321 check_cc <<EOF && enable const_nan
5323 void foo(void) { struct { double d; } static const bar[] = { { NAN } }; }
5326 if ! enabled ppc64 || enabled bigendian; then
5331 log "check_gas using '$as' as AS"
5332 # :vararg is used on aarch64, arm and ppc altivec
5333 check_as <<EOF || return 1
5334 .macro m n, y:vararg=0
5339 # .altmacro is only used in arm asm
5340 ! enabled arm || check_as <<EOF || return 1
5347 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
5349 enabled_any arm aarch64 && nogas=die
5350 enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
5354 arm*) gaspp_as_type=armasm; as_noop=-h ;;
5355 gcc) gaspp_as_type=gas ;;
5356 *) gaspp_as_type=$as_type ;;
5359 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
5361 test "${as#*gas-preprocessor.pl}" != "$as" ||
5362 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
5363 gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
5365 if ! check_gas ; then
5368 $nogas "GNU assembler not found, install/update gas-preprocessor"
5371 check_as <<EOF && enable as_func
5377 check_inline_asm inline_asm_labels '"1:\n"'
5379 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
5381 if enabled aarch64; then
5382 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
5383 # internal assembler in clang 3.3 does not support this instruction
5384 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
5385 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
5387 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
5389 elif enabled alpha; then
5393 elif enabled arm; then
5395 enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
5397 check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
5398 float func(float a, float b){ return a+b; }
5401 enabled thumb && check_cflags -mthumb || check_cflags -marm
5403 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
5405 elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
5407 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
5408 case "${cross_prefix:-$cc}" in
5409 *hardfloat*) enable vfp_args; fpabi=vfp ;;
5410 *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
5411 __asm__ (".eabi_attribute 28, 1");
5412 int main(void) { return 0; }
5415 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
5418 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
5419 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
5420 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
5421 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
5422 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
5423 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
5424 enabled setend && check_insn setend 'setend be'
5426 [ $target_os = linux ] || [ $target_os = android ] ||
5427 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
5430 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
5432 check_as <<EOF && enable as_dn_directive
5436 check_as <<EOF && enable as_fpu_directive
5440 # llvm's integrated assembler supports .object_arch from llvm 3.5
5441 [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] &&
5442 check_as <<EOF && enable as_object_arch
5446 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
5448 elif enabled mips; then
5450 enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
5451 enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
5452 enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
5454 # Enable minimum ISA based on selected options
5455 if enabled mips64; then
5456 enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6'
5457 enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2'
5458 disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64'
5460 enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6'
5461 enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5'
5462 enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2'
5463 disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32'
5466 enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float'
5467 enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
5468 enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_header msa.h || disable msa
5469 enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
5470 enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
5472 if enabled bigendian && enabled msa; then
5476 elif enabled parisc; then
5478 if enabled gcc; then
5479 case $($cc -dumpversion) in
5480 4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
5484 elif enabled ppc; then
5486 enable local_aligned_8 local_aligned_16 local_aligned_32
5488 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
5489 check_inline_asm ibm_asm '"add 0, 0, 0"'
5490 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
5491 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
5493 # AltiVec flags: The FSF version of GCC differs from the Apple version
5494 if enabled altivec; then
5495 check_cflags -maltivec -mabi=altivec &&
5496 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
5497 check_cflags -faltivec
5499 # check if our compiler supports Motorola AltiVec C API
5500 check_cc <<EOF || disable altivec
5503 vector signed int v1 = (vector signed int) { 0 };
5504 vector signed int v2 = (vector signed int) { 1 };
5505 v1 = vec_add(v1, v2);
5510 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
5513 if enabled vsx; then
5514 check_cflags -mvsx &&
5515 check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
5518 if enabled power8; then
5519 check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
5522 elif enabled x86; then
5524 check_builtin rdtsc intrin.h "__rdtsc()"
5525 check_builtin mm_empty mmintrin.h "_mm_empty()"
5527 enable local_aligned_8 local_aligned_16 local_aligned_32
5529 # check whether EBP is available on x86
5530 # As 'i' is stored on the stack, this program will crash
5531 # if the base pointer is used to access it because the
5532 # base pointer is cleared in the inline assembly code.
5533 check_exec_crash <<EOF && enable ebp_available
5535 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
5539 # check whether EBX is available on x86
5540 check_inline_asm ebx_available '""::"b"(0)' &&
5541 check_inline_asm ebx_available '"":::"%ebx"'
5543 # check whether xmm clobbers are supported
5544 check_inline_asm xmm_clobbers '"":::"%xmm0"'
5546 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
5547 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
5549 # check whether binutils is new enough to compile SSSE3/MMXEXT
5550 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
5551 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
5555 if check_cmd $x86asmexe_probe -v; then
5556 x86asmexe=$x86asmexe_probe
5558 x86asm_debug="-g -F dwarf"
5559 elif check_cmd $x86asmexe_probe --version; then
5560 x86asmexe=$x86asmexe_probe
5562 x86asm_debug="-g dwarf2"
5564 check_x86asm "movbe ecx, [5]" && enable x86asm
5567 if ! disabled_any asm mmx x86asm; then
5569 for program in $x86asmexe nasm yasm; do
5570 probe_x86asm $program && break
5572 disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build."
5573 test $x86asm_type = 'nasm' && X86ASM_DEPFLAGS='-MD $(@:.o=.d)'
5574 test $x86asm_type = 'yasm' && X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)'
5575 X86ASMFLAGS="-f $objformat"
5576 enabled pic && append X86ASMFLAGS "-DPIC"
5577 test -n "$extern_prefix" && append X86ASMFLAGS "-DPREFIX"
5578 case "$objformat" in
5579 elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
5582 check_x86asm "vextracti128 xmm0, ymm0, 0" || disable avx2_external
5583 check_x86asm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
5584 check_x86asm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
5585 check_x86asm "CPU amdnop" || disable cpunop
5589 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
5596 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
5598 check_ldflags -Wl,--as-needed
5599 check_ldflags -Wl,-z,noexecstack
5601 if check_func dlopen && check_func dlsym; then
5603 elif check_func dlopen -ldl && check_func dlsym -ldl; then
5607 avisynth_demuxer_extralibs='$ldl'
5608 cuda_extralibs='$ldl'
5609 decklink_outdev_extralibs="$decklink_outdev_extralibs $ldl"
5610 decklink_indev_extralibs="$decklink_indev_extralibs $ldl"
5611 libndi_newtek_outdev_extralibs="$libndi_newtek_outdev_extralibs $ldl"
5612 libndi_newtek_indev_extralibs="$libndi_newtek_indev_extralibs $ldl"
5613 frei0r_filter_extralibs='$ldl'
5614 frei0r_src_filter_extralibs='$ldl'
5615 ladspa_filter_extralibs='$ldl'
5616 nvenc_extralibs='$ldl'
5618 if ! disabled network; then
5619 check_func getaddrinfo $network_extralibs
5620 check_func inet_aton $network_extralibs
5622 check_type netdb.h "struct addrinfo"
5623 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
5624 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
5625 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
5626 check_type poll.h "struct pollfd"
5627 check_type netinet/sctp.h "struct sctp_event_subscribe"
5628 check_struct "sys/socket.h" "struct msghdr" msg_flags
5629 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
5630 check_type netinet/in.h "struct sockaddr_in6"
5631 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
5632 check_type "sys/types.h sys/socket.h" socklen_t
5634 # Prefer arpa/inet.h over winsock2
5635 if check_header arpa/inet.h ; then
5636 check_func closesocket
5637 elif check_header winsock2.h ; then
5638 check_func_headers winsock2.h closesocket -lws2 &&
5639 network_extralibs="-lws2" ||
5640 { check_func_headers winsock2.h closesocket -lws2_32 &&
5641 network_extralibs="-lws2_32"; } || disable winsock2_h network
5642 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
5644 check_type ws2tcpip.h socklen_t
5645 check_type ws2tcpip.h "struct addrinfo"
5646 check_type ws2tcpip.h "struct group_source_req"
5647 check_type ws2tcpip.h "struct ip_mreq_source"
5648 check_type ws2tcpip.h "struct ipv6_mreq"
5649 check_type winsock2.h "struct pollfd"
5650 check_struct winsock2.h "struct sockaddr" sa_len
5651 check_type ws2tcpip.h "struct sockaddr_in6"
5652 check_type ws2tcpip.h "struct sockaddr_storage"
5658 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
5659 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
5660 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
5661 check_builtin sarestart signal.h "SA_RESTART"
5662 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" -lpthread
5663 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
5664 check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
5665 check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
5666 check_builtin x264_csp_bgr "stdint.h x264.h" "X264_CSP_BGR"
5668 case "$custom_allocator" in
5670 # jemalloc by default does not use a prefix
5671 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
5674 require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc
5679 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
5680 check_func ${malloc_prefix}memalign && enable memalign
5681 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
5684 check_func_headers stdlib.h arc4random
5685 check_func_headers time.h clock_gettime ||
5686 { check_lib clock_gettime time.h clock_gettime -lrt && LIBRT="-lrt"; }
5689 check_func gethrtime
5691 check_func getrusage
5692 check_func gettimeofday
5694 check_func mach_absolute_time
5698 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
5699 check_func_headers time.h nanosleep ||
5700 { check_lib nanosleep time.h nanosleep -lrt && LIBRT="-lrt"; }
5701 check_func sched_getaffinity
5702 check_func setrlimit
5703 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
5704 check_func strerror_r
5709 check_func_headers conio.h kbhit
5710 check_func_headers io.h setmode
5711 check_func_headers lzo/lzo1x.h lzo1x_999_compress
5712 check_func_headers stdlib.h getenv
5713 check_func_headers sys/stat.h lstat
5715 check_func_headers windows.h GetProcessAffinityMask
5716 check_func_headers windows.h GetProcessTimes
5717 check_func_headers windows.h GetSystemTimeAsFileTime
5718 check_func_headers windows.h LoadLibrary
5719 check_func_headers windows.h MapViewOfFile
5720 check_func_headers windows.h PeekNamedPipe
5721 check_func_headers windows.h SetConsoleTextAttribute
5722 check_func_headers windows.h SetConsoleCtrlHandler
5723 check_func_headers windows.h Sleep
5724 check_func_headers windows.h VirtualAlloc
5725 check_struct windows.h "CONDITION_VARIABLE" Ptr
5726 check_func_headers glob.h glob
5728 check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
5730 check_header d3d11.h
5731 check_header direct.h
5732 check_header dirent.h
5733 check_header dlfcn.h
5734 check_header dxgidebug.h
5736 check_header dxva2api.h -D_WIN32_WINNT=0x0600
5738 check_header libcrystalhd/libcrystalhd_if.h
5739 check_header mach/mach_time.h
5740 check_header malloc.h
5741 check_header net/udplite.h
5743 check_header sys/mman.h
5744 check_header sys/param.h
5745 check_header sys/resource.h
5746 check_header sys/select.h
5747 check_header sys/time.h
5748 check_header sys/un.h
5749 check_header termios.h
5750 check_header unistd.h
5751 check_header valgrind/valgrind.h
5752 check_header VideoDecodeAcceleration/VDADecoder.h
5753 check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
5754 check_header windows.h
5755 check_header X11/extensions/XvMClib.h
5756 check_header asm/types.h
5758 # it seems there are versions of clang in some distros that try to use the
5759 # gcc headers, which explodes for stdatomic
5760 # so we also check that atomics actually work here
5761 check_builtin stdatomic_h stdatomic.h "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0)"
5763 check_lib ole32 "windows.h" CoTaskMemFree -lole32
5764 check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32
5765 check_lib wincrypt "windows.h wincrypt.h" CryptGenRandom -ladvapi32
5766 check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
5768 enabled appkit && check_apple_framework AppKit
5769 enabled audiotoolbox && check_apple_framework AudioToolbox
5770 enabled avfoundation && check_apple_framework AVFoundation
5771 enabled coreimage && check_apple_framework CoreImage
5772 enabled videotoolbox && check_apple_framework VideoToolbox
5774 enabled avfoundation && {
5775 check_lib avfoundation CoreGraphics/CoreGraphics.h CGGetActiveDisplayList "-framework CoreGraphics" ||
5776 check_lib avfoundation ApplicationServices/ApplicationServices.h CGGetActiveDisplayList "-framework ApplicationServices"; }
5778 enabled videotoolbox &&
5779 check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices"
5781 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
5783 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5784 check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5785 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
5786 check_type "windows.h d3d11.h" "ID3D11VideoContext"
5787 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
5789 check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
5790 check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
5791 check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
5792 check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
5793 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
5794 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
5795 check_type "va/va.h va/va_enc_mpeg2.h" "VAEncPictureParameterBufferMPEG2"
5796 check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
5797 check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9"
5799 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
5801 check_cpp_condition windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" && enable winrt || disable winrt
5803 if ! disabled w32threads && ! enabled pthreads; then
5804 check_func_headers "windows.h process.h" _beginthreadex &&
5805 enable w32threads || disable w32threads
5806 if ! enabled w32threads && enabled winrt; then
5807 check_func_headers "windows.h" CreateThread &&
5808 enable w32threads || disable w32threads
5812 # check for some common methods of building with pthread support
5813 # do this before the optional library checks as some of them require pthreads
5814 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5815 if check_lib pthreads pthread.h pthread_join -pthread &&
5816 check_lib pthreads pthread.h pthread_create -pthread; then
5818 elif check_lib pthreads pthread.h pthread_join -pthreads &&
5819 check_lib pthreads pthread.h pthread_create -pthreads; then
5820 add_cflags -pthreads
5821 elif check_lib pthreads pthread.h pthread_join -ldl -pthread &&
5822 check_lib pthreads pthread.h pthread_create -ldl -pthread; then
5823 add_cflags -ldl -pthread
5824 elif check_lib pthreads pthread.h pthread_join -lpthreadGC2 &&
5825 check_lib pthreads pthread.h pthread_create -lpthreadGC2; then
5827 elif check_lib pthreads pthread.h pthread_join -lpthread &&
5828 check_lib pthreads pthread.h pthread_create -lpthread; then
5830 elif check_func pthread_join && check_func pthread_create; then
5833 check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
5837 if enabled pthreads; then
5838 check_func pthread_cancel
5842 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
5844 enabled zlib && check_lib zlib zlib.h zlibVersion -lz
5845 enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
5846 enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma
5848 check_lib libm math.h sin -lm && LIBM="-lm"
5856 for func in $MATH_FUNCS; do
5857 eval check_mathfunc $func \${${func}_args:-1} $LIBM
5860 for func in $COMPLEX_FUNCS; do
5861 eval check_complexfunc $func \${${func}_args:-1}
5864 # these are off by default, so fail if requested and not available
5865 enabled cuda_sdk && require cuda_sdk cuda.h cuCtxCreate -lcuda
5866 enabled cuvid && { enabled cuda ||
5867 die "ERROR: CUVID requires CUDA"; }
5868 enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
5869 enabled decklink && { { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; } &&
5870 { check_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a060100" || die "ERROR: Decklink API version must be >= 10.6.1."; } }
5871 enabled libndi_newtek && { check_header Processing.NDI.Lib.h || die "ERROR: Processing.NDI.Lib.h header not found"; }
5872 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
5873 enabled gmp && require gmp gmp.h mpz_export -lgmp
5874 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
5875 enabled jni && { [ $target_os = "android" ] && check_header jni.h && enabled pthreads || die "ERROR: jni not found"; }
5876 enabled ladspa && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
5877 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5878 enabled libass && require_pkg_config libass ass/ass.h ass_library_init
5879 enabled libbluray && require_pkg_config libbluray libbluray/bluray.h bd_open
5880 enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
5881 enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
5882 { check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 ||
5883 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5884 enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
5885 enabled libdc1394 && require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new
5886 enabled libdrm && require_pkg_config libdrm xf86drm.h drmGetVersion
5887 enabled libfdk_aac && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
5888 { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
5889 warn "using libfdk without pkg-config"; } }
5890 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"
5891 enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs
5892 enabled fontconfig && enable libfontconfig
5893 enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
5894 enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
5895 enabled libfribidi && require_pkg_config fribidi fribidi.h fribidi_version_info
5896 enabled libgme && { use_pkg_config libgme gme/gme.h gme_new_emu ||
5897 require libgme gme/gme.h gme_new_emu -lgme -lstdc++; }
5898 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5899 check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break;
5900 done || die "ERROR: libgsm not found"; }
5901 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5902 enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
5903 # While it may appear that require is being used as a pkg-config
5904 # fallback for libmfx, it is actually being used to detect a different
5905 # installation route altogether. If libmfx is installed via the Intel
5906 # Media SDK or Intel Media Server Studio, these don't come with
5907 # pkg-config support. Instead, users should make sure that the build
5908 # can find the libraries and headers through other means.
5909 enabled libmfx && { use_pkg_config libmfx "mfx/mfxvideo.h" MFXInit ||
5910 { require libmfx "mfx/mfxvideo.h" MFXInit -llibmfx && warn "using libmfx without pkg-config"; } }
5911 enabled libmodplug && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5912 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5913 enabled libmysofa && require libmysofa "mysofa.h" mysofa_load -lmysofa
5914 enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc ||
5915 check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc ||
5916 die "ERROR: libnpp not found"; }
5917 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5918 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
5919 enabled libopencv && { check_header opencv2/core/core_c.h &&
5920 { use_pkg_config opencv opencv2/core/core_c.h cvCreateImageHeader ||
5921 require opencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
5922 require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader; }
5923 enabled libopenh264 && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
5924 enabled libopenjpeg && { { check_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5925 check_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 ||
5926 { check_lib libopenjpeg openjpeg-2.1/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5927 check_lib libopenjpeg openjpeg-2.1/openjpeg.h opj_version -lopenjp2 ||
5928 { check_lib libopenjpeg openjpeg-2.0/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5929 { check_lib libopenjpeg openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5930 { check_lib libopenjpeg openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5931 die "ERROR: libopenjpeg not found"; }
5932 enabled libopenmpt && require_pkg_config "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create
5933 enabled libopus && {
5934 enabled libopus_decoder && {
5935 require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
5937 enabled libopus_encoder && {
5938 require_pkg_config opus opus_multistream.h opus_multistream_surround_encoder_create
5941 enabled libpulse && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
5942 enabled librsvg && require_pkg_config librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo
5943 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
5944 enabled librubberband && require_pkg_config "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new
5945 enabled libshine && require_pkg_config shine shine/layer3.h shine_encode_buffer
5946 enabled libsmbclient && { use_pkg_config smbclient libsmbclient.h smbc_init ||
5947 require smbclient libsmbclient.h smbc_init -lsmbclient; }
5948 enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy
5949 enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr && LIBSOXR="-lsoxr"
5950 enabled libssh && require_pkg_config libssh libssh/sftp.h sftp_init
5951 enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
5952 enabled libtesseract && require_pkg_config tesseract tesseract/capi.h TessBaseAPICreate
5953 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
5954 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
5955 { check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
5956 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
5957 enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
5958 enabled libvidstab && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
5959 enabled libvmaf && require_pkg_config libvmaf libvmaf.h compute_vmaf
5960 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
5961 enabled libvorbis && require_pkg_config vorbis vorbis/codec.h vorbis_info_init &&
5962 require_pkg_config vorbisenc vorbis/vorbisenc.h vorbis_encode_init
5965 enabled libvpx_vp8_decoder && {
5966 use_pkg_config "vpx >= 0.9.1" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
5967 check_lib libvpx_vp8_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5968 die "ERROR: libvpx decoder version must be >=0.9.1";
5970 enabled libvpx_vp8_encoder && {
5971 use_pkg_config "vpx >= 0.9.7" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
5972 check_lib libvpx_vp8_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
5973 die "ERROR: libvpx encoder version must be >=0.9.7";
5975 enabled libvpx_vp9_decoder && {
5976 use_pkg_config "vpx >= 1.3.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
5977 check_lib libvpx_vp9_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx
5979 enabled libvpx_vp9_encoder && {
5980 use_pkg_config "vpx >= 1.3.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
5981 check_lib libvpx_vp9_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx
5983 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
5984 die "libvpx enabled but no supported decoders found"
5988 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
5989 enabled libwebp && {
5990 enabled libwebp_encoder && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5991 enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
5992 enabled libx264 && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5993 { require libx264 "stdint.h x264.h" x264_encoder_encode -lx264 &&
5994 warn "using libx264 without pkg-config"; } } &&
5995 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5996 die "ERROR: libx264 must be installed and version must be >= 0.118."; } &&
5997 { check_cpp_condition x264.h "X264_MPEG2" &&
5999 enabled libx265 && require_pkg_config x265 x265.h x265_api_get &&
6000 { check_cpp_condition x265.h "X265_BUILD >= 68" ||
6001 die "ERROR: libx265 version must be >= 68."; }
6002 enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs
6003 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
6004 enabled libzimg && require_pkg_config "zimg >= 2.3.0" zimg.h zimg_get_api_version
6005 enabled libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new
6006 enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi &&
6007 { check_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
6008 enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
6009 enabled libxml2 && require_pkg_config libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion
6010 enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; }
6011 enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
6012 { ! enabled cross_compile &&
6013 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
6014 add_ldflags -L/opt/vc/lib/ &&
6015 check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
6016 die "ERROR: mmal not found" &&
6017 check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
6018 enabled openal && { { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
6019 check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } ||
6020 die "ERROR: openal not found"; } &&
6021 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
6022 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
6023 enabled opencl && { check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
6024 check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
6025 die "ERROR: opencl not found"; } &&
6026 { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
6027 check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
6028 die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
6029 enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" ||
6030 check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
6031 check_lib opengl OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
6032 check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
6033 die "ERROR: opengl not found."
6035 enabled omx_rpi && { check_header OMX_Core.h ||
6036 { ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_header OMX_Core.h ; } ||
6037 die "ERROR: OpenMAX IL headers not found"; }
6038 enabled omx && { check_header OMX_Core.h || die "ERROR: OpenMAX IL headers not found"; }
6039 enabled openssl && { use_pkg_config openssl openssl/ssl.h OPENSSL_init_ssl ||
6040 use_pkg_config openssl openssl/ssl.h SSL_library_init ||
6041 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
6042 check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
6043 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
6044 die "ERROR: openssl not found"; }
6046 if enabled gcrypt; then
6047 GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
6048 if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
6049 gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
6050 gcrypt_extralibs=$("${GCRYPT_CONFIG}" --libs)
6051 check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs ||
6052 die "ERROR: gcrypt not found"
6053 add_cflags $gcrypt_cflags && add_extralibs $gcrypt_extralibs
6055 require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
6059 if enabled sdl2; then
6060 SDL2_CONFIG="${cross_prefix}sdl2-config"
6061 if check_pkg_config sdl2 SDL_events.h SDL_PollEvent; then
6062 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
6063 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
6064 check_func SDL_Init $sdl2_extralibs $sdl2_cflags ||
6066 elif "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
6067 sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
6068 sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
6069 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
6070 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
6071 check_func SDL_Init $sdl2_extralibs $sdl2_cflags ||
6076 if test $target_os = "mingw32"; then
6077 sdl2_extralibs="$sdl2_extralibs -mconsole"
6080 enabled sdl2 && add_cflags $sdl2_cflags && add_extralibs $sdl2_extralibs
6082 if enabled decklink; then
6084 mingw32*|mingw64*|win32|win64)
6085 decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
6086 decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
6091 enabled securetransport &&
6092 check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
6093 check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" ||
6094 disable securetransport
6097 check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
6098 check_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" &&
6099 add_extralibs -lsecur32 ||
6102 makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
6104 && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
6105 && enable makeinfo_html || disable makeinfo_html
6106 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
6107 perl -v > /dev/null 2>&1 && enable perl || disable perl
6108 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
6109 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
6111 check_header linux/fb.h
6112 check_header linux/videodev2.h
6113 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
6115 check_header sys/videoio.h
6116 check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
6118 check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
6119 check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
6120 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
6121 # w32api 3.12 had it defined wrong
6122 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
6124 check_type "dshow.h" IBaseFilter
6126 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
6127 { check_header dev/bktr/ioctl_meteor.h &&
6128 check_header dev/bktr/ioctl_bt848.h; } ||
6129 { check_header machine/ioctl_meteor.h &&
6130 check_header machine/ioctl_bt848.h; } ||
6131 { check_header dev/video/meteor/ioctl_meteor.h &&
6132 check_header dev/video/bktr/ioctl_bt848.h; } ||
6133 check_header dev/ic/bt8xx.h
6135 if check_struct sys/soundcard.h audio_buf_info bytes; then
6136 enable_safe sys/soundcard.h
6138 check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
6139 #include <sys/soundcard.h>
6143 check_header soundcard.h
6145 enabled alsa && check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
6147 enabled jack && check_lib jack jack/jack.h jack_client_open -ljack &&
6148 check_func jack_port_get_latency_range -ljack
6150 enabled sndio && check_lib sndio sndio.h sio_open -lsndio
6152 if enabled libcdio; then
6153 check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6154 check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6155 die "ERROR: No usable libcdio/cdparanoia found"
6158 enabled libxcb && check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || disable libxcb
6160 if enabled libxcb; then
6162 enabled libxcb_shm && check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || disable libxcb_shm
6163 enabled libxcb_shape && check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || disable libxcb_shape
6164 enabled libxcb_xfixes && check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || disable libxcb_xfixes
6166 add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
6167 add_extralibs $xcb_extralibs $xcb_shm_extralibs $xcb_xfixes_extralibs $xcb_shape_extralibs
6170 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
6172 # d3d11va requires linking directly to dxgi and d3d11 if not building for
6173 # the desktop api partition
6174 check_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11"
6175 #ifdef WINAPI_FAMILY
6176 #include <winapifamily.h>
6177 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
6178 #error desktop, not uwp
6180 // WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
6183 #error no family set
6188 check_lib vaapi va/va.h vaInitialize -lva
6191 check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
6195 check_lib vaapi_drm "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm
6198 check_lib vaapi_x11 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 -lX11
6201 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
6205 check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
6207 enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd
6209 if enabled x86; then
6211 mingw32*|mingw64*|win32|win64|linux|cygwin*)
6214 disable cuda cuvid nvenc
6218 disable cuda cuvid nvenc
6222 check_cc -I$source_path <<EOF || disable nvenc
6223 #include "compat/nvenc/nvEncodeAPI.h"
6224 NV_ENCODE_API_FUNCTION_LIST flist;
6225 void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; }
6226 int main(void) { return 0; }
6229 # Funny iconv installations are not unusual, so check it after all flags have been set
6230 if enabled libc_iconv; then
6231 check_func_headers iconv.h iconv
6232 elif enabled iconv; then
6233 check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
6236 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
6238 # add some useful compiler flags if supported
6239 check_cflags -Wdeclaration-after-statement
6241 check_cflags -Wdisabled-optimization
6242 check_cflags -Wpointer-arith
6243 check_cflags -Wredundant-decls
6244 check_cflags -Wwrite-strings
6245 check_cflags -Wtype-limits
6246 check_cflags -Wundef
6247 check_cflags -Wmissing-prototypes
6248 check_cflags -Wno-pointer-to-int-cast
6249 check_cflags -Wstrict-prototypes
6250 check_cflags -Wempty-body
6252 if enabled extra_warnings; then
6253 check_cflags -Wcast-qual
6254 check_cflags -Wextra
6255 check_cflags -Wpedantic
6258 check_disable_warning(){
6259 warning_flag=-W${1#-Wno-}
6260 test_cflags $warning_flag && add_cflags $1
6263 check_disable_warning -Wno-parentheses
6264 check_disable_warning -Wno-switch
6265 check_disable_warning -Wno-format-zero-length
6266 check_disable_warning -Wno-pointer-sign
6267 check_disable_warning -Wno-unused-const-variable
6269 check_disable_warning_headers(){
6270 warning_flag=-W${1#-Wno-}
6271 test_cflags $warning_flag && add_cflags_headers $1
6274 check_disable_warning_headers -Wno-deprecated-declarations
6275 check_disable_warning_headers -Wno-unused-variable
6277 check_cc <<EOF && enable blocks_extension
6278 void (^block)(void);
6281 # add some linker flags
6282 check_ldflags -Wl,--warn-common
6283 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
6284 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
6285 enabled rpath && add_ldlibflags -Wl,-rpath,$libdir
6286 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
6288 # add some strip flags
6291 enabled neon_clobber_test &&
6292 check_ldflags -Wl,--wrap,avcodec_open2 \
6293 -Wl,--wrap,avcodec_decode_audio4 \
6294 -Wl,--wrap,avcodec_decode_video2 \
6295 -Wl,--wrap,avcodec_decode_subtitle2 \
6296 -Wl,--wrap,avcodec_encode_audio2 \
6297 -Wl,--wrap,avcodec_encode_video2 \
6298 -Wl,--wrap,avcodec_encode_subtitle \
6299 -Wl,--wrap,avcodec_send_packet \
6300 -Wl,--wrap,avcodec_receive_packet \
6301 -Wl,--wrap,avcodec_send_frame \
6302 -Wl,--wrap,avcodec_receive_frame \
6303 -Wl,--wrap,swr_convert \
6304 -Wl,--wrap,avresample_convert ||
6305 disable neon_clobber_test
6307 enabled xmm_clobber_test &&
6308 check_ldflags -Wl,--wrap,avcodec_open2 \
6309 -Wl,--wrap,avcodec_decode_audio4 \
6310 -Wl,--wrap,avcodec_decode_video2 \
6311 -Wl,--wrap,avcodec_decode_subtitle2 \
6312 -Wl,--wrap,avcodec_encode_audio2 \
6313 -Wl,--wrap,avcodec_encode_video2 \
6314 -Wl,--wrap,avcodec_encode_subtitle \
6315 -Wl,--wrap,avcodec_send_packet \
6316 -Wl,--wrap,avcodec_receive_packet \
6317 -Wl,--wrap,avcodec_send_frame \
6318 -Wl,--wrap,avcodec_receive_frame \
6319 -Wl,--wrap,swr_convert \
6320 -Wl,--wrap,avresample_convert \
6321 -Wl,--wrap,sws_scale ||
6322 disable xmm_clobber_test
6324 check_ld "cc" <<EOF && enable proper_dce
6325 extern const int array[512];
6326 static inline int func(void) { return array[0]; }
6327 int main(void) { return 0; }
6330 if enabled proper_dce; then
6331 echo "X { local: *; };" > $TMPV
6332 if test_ldflags -Wl,${version_script},$TMPV; then
6333 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
6334 check_cc <<EOF && enable symver_asm_label
6335 void ff_foo(void) __asm__ ("av_foo@VERSION");
6336 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
6338 check_cc <<EOF && enable symver_gnu_asm
6339 __asm__(".symver ff_foo,av_foo@VERSION");
6340 void ff_foo(void) {}
6345 if [ -z "$optflags" ]; then
6346 if enabled small; then
6347 optflags=$cflags_size
6348 elif enabled optimizations; then
6349 optflags=$cflags_speed
6351 optflags=$cflags_noopt
6355 if [ -z "$nvccflags" ]; then
6356 nvccflags=$nvccflags_default
6359 if enabled x86_64 || enabled ppc64 || enabled aarch64; then
6360 nvccflags="$nvccflags -m64"
6362 nvccflags="$nvccflags -m32"
6367 enabled lto && check_ldflags "$@"
6370 check_optflags $optflags
6371 check_optflags -fno-math-errno
6372 check_optflags -fno-signed-zeros
6374 if enabled lto; then
6375 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
6377 check_ldflags -flto $cpuflags
6378 disable inline_asm_direct_symbol_refs
6381 enabled ftrapv && check_cflags -ftrapv
6383 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
6388 if enabled icc; then
6389 # Just warnings, no remarks
6391 # -wd: Disable following warnings
6392 # 144, 167, 556: -Wno-pointer-sign
6393 # 188: enumerated type mixed with another type
6394 # 1292: attribute "foo" ignored
6395 # 1419: external declaration in primary source file
6396 # 10006: ignoring unknown option -fno-signed-zeros
6397 # 10148: ignoring unknown option -Wno-parentheses
6398 # 10156: ignoring option '-W'; no argument required
6399 # 13200: No EMMS instruction before call to function
6400 # 13203: No EMMS instruction before return from function
6401 check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
6402 # 11030: Warning unknown option --as-needed
6403 # 10156: ignoring option '-export'; no argument required
6404 check_ldflags -wd10156,11030
6405 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
6406 enable ebp_available
6407 # The test above does not test linking
6408 enabled lto && disable symver_asm_label
6409 if enabled x86_32; then
6410 icc_version=$($cc -dumpversion)
6411 test ${icc_version%%.*} -ge 11 &&
6412 check_cflags -falign-stack=maintain-16-byte ||
6413 disable aligned_stack
6415 elif enabled ccc; then
6416 # disable some annoying warnings
6417 add_cflags -msg_disable bitnotint
6418 add_cflags -msg_disable mixfuncvoid
6419 add_cflags -msg_disable nonstandcast
6420 add_cflags -msg_disable unsupieee
6421 elif enabled gcc; then
6422 check_optflags -fno-tree-vectorize
6423 check_cflags -Werror=format-security
6424 check_cflags -Werror=implicit-function-declaration
6425 check_cflags -Werror=missing-prototypes
6426 check_cflags -Werror=return-type
6427 check_cflags -Werror=vla
6428 check_cflags -Wformat
6429 check_cflags -fdiagnostics-color=auto
6430 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
6431 elif enabled llvm_gcc; then
6432 check_cflags -mllvm -stack-alignment=16
6433 elif enabled clang; then
6434 check_cflags -mllvm -stack-alignment=16
6435 check_cflags -mstack-alignment=16
6436 check_cflags -Qunused-arguments
6437 check_cflags -Werror=implicit-function-declaration
6438 check_cflags -Werror=missing-prototypes
6439 check_cflags -Werror=return-type
6440 elif enabled cparser; then
6441 add_cflags -Wno-missing-variable-declarations
6442 add_cflags -Wno-empty-statement
6443 elif enabled armcc; then
6444 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
6445 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
6446 # 2523: use of inline assembly is deprecated
6447 add_cflags -W${armcc_opt},--diag_suppress=2523
6448 add_cflags -W${armcc_opt},--diag_suppress=1207
6449 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
6450 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
6451 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
6452 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
6453 elif enabled tms470; then
6454 add_cflags -pds=824 -pds=837
6456 elif enabled pathscale; then
6457 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
6458 elif enabled_any msvc icl; then
6459 enabled x86_32 && disable aligned_stack
6460 enabled_all x86_32 debug && add_cflags -Oy-
6461 enabled debug && add_ldflags -debug
6462 enable pragma_deprecated
6463 if enabled icl; then
6464 # -Qansi-alias is basically -fstrict-aliasing, but does not work
6465 # (correctly) on icl 13.x.
6466 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
6467 add_cflags -Qansi-alias
6468 # Some inline asm is not compilable in debug
6469 if enabled debug; then
6470 disable ebp_available
6471 disable ebx_available
6474 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
6475 check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
6476 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
6477 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
6478 # (as it ends up if the restrict redefine is done before including stdlib.h), while
6479 # MSVC 2013 and newer can handle it fine.
6480 # If this declspec fails, force including stdlib.h before the restrict redefinition
6481 # happens in config.h.
6482 if [ $_restrict != restrict ]; then
6483 check_cc <<EOF || add_cflags -FIstdlib.h
6484 __declspec($_restrict) void* foo(int);
6487 # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
6488 # Issue has been fixed in MSVC v19.00.24218.
6489 check_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
6490 check_cflags -d2SSAOptimizer-
6491 # enable utf-8 source processing on VS2015 U2 and newer
6492 check_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
6496 for pfx in "" host_; do
6497 varname=${pfx%_}cc_type
6498 eval "type=\$$varname"
6499 if [ "$type" = "msvc" ]; then
6500 check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
6501 static inline int foo(int a) { return a; }
6508 add_asflags -Qunused-arguments
6514 check_ldflags -Qunused-arguments
6520 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
6524 enable frame_thread_encoder
6526 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
6528 check_deps $CONFIG_LIST \
6533 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"
6536 if test $target_os = "haiku"; then
6538 disable posix_memalign
6542 # -> enable ${lib}_deps_${dep}
6543 # -> add $dep to ${lib}_deps only once
6547 enabled "${lib}_deps_${dep}" && return 0
6548 enable "${lib}_deps_${dep}"
6549 prepend "${lib}_deps" $dep
6552 # merge deps lib components
6553 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
6558 enabled $comp || continue
6559 eval "dep=\"\$${comp}_deps\""
6566 merge_deps libavfilter $FILTER_LIST
6568 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
6570 for thread in $THREADS_LIST; do
6571 if enabled $thread; then
6572 test -n "$thread_type" &&
6573 die "ERROR: Only one thread type must be selected." ||
6574 thread_type="$thread"
6578 if disabled stdatomic_h; then
6579 if enabled atomics_gcc; then
6580 add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
6581 elif enabled atomics_win32; then
6582 add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
6583 elif enabled atomics_suncc; then
6584 add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
6585 elif enabled pthreads; then
6586 add_compat atomics/pthread/stdatomic.o
6587 add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
6589 enabled threads && die "Threading is enabled, but no atomics are available"
6590 add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
6594 # Check if requested libraries were found.
6595 for lib in $AUTODETECT_LIBS; do
6596 requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found";
6599 enabled zlib && add_cppflags -DZLIB_CONST
6601 # conditional library dependencies, in linking order
6602 enabled afftfilt_filter && prepend avfilter_deps "avcodec"
6603 enabled afir_filter && prepend avfilter_deps "avcodec"
6604 enabled amovie_filter && prepend avfilter_deps "avformat avcodec"
6605 enabled aresample_filter && prepend avfilter_deps "swresample"
6606 enabled atempo_filter && prepend avfilter_deps "avcodec"
6607 enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec"
6608 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
6609 enabled elbg_filter && prepend avfilter_deps "avcodec"
6610 enabled fftfilt_filter && prepend avfilter_deps "avcodec"
6611 enabled find_rect_filter && prepend avfilter_deps "avformat avcodec"
6612 enabled firequalizer_filter && prepend avfilter_deps "avcodec"
6613 enabled mcdeint_filter && prepend avfilter_deps "avcodec"
6614 enabled movie_filter && prepend avfilter_deps "avformat avcodec"
6615 enabled pan_filter && prepend avfilter_deps "swresample"
6616 enabled pp_filter && prepend avfilter_deps "postproc"
6617 enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
6618 enabled resample_filter && prepend avfilter_deps "avresample"
6619 enabled sab_filter && prepend avfilter_deps "swscale"
6620 enabled scale_filter && prepend avfilter_deps "swscale"
6621 enabled scale2ref_filter && prepend avfilter_deps "swscale"
6622 enabled sofalizer_filter && prepend avfilter_deps "avcodec"
6623 enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale"
6624 enabled showfreqs_filter && prepend avfilter_deps "avcodec"
6625 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
6626 enabled signature_filter && prepend avfilter_deps "avcodec avformat"
6627 enabled smartblur_filter && prepend avfilter_deps "swscale"
6628 enabled spectrumsynth_filter && prepend avfilter_deps "avcodec"
6629 enabled spp_filter && prepend avfilter_deps "avcodec"
6630 enabled subtitles_filter && prepend avfilter_deps "avformat avcodec"
6631 enabled uspp_filter && prepend avfilter_deps "avcodec"
6632 enabled zoompan_filter && prepend avfilter_deps "swscale"
6634 enabled lavfi_indev && prepend avdevice_deps "avfilter"
6636 enabled opus_decoder && prepend avcodec_deps "swresample"
6640 eval "deps=\$$lib_deps"
6641 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
6645 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
6646 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
6648 map 'expand_deps $v' $LIBRARY_LIST
6650 license="LGPL version 2.1 or later"
6651 if enabled nonfree; then
6652 license="nonfree and unredistributable"
6653 elif enabled gplv3; then
6654 license="GPL version 3 or later"
6655 elif enabled lgplv3; then
6656 license="LGPL version 3 or later"
6657 elif enabled gpl; then
6658 license="GPL version 2 or later"
6661 if test "$quiet" != "yes"; then
6663 echo "install prefix $prefix"
6664 echo "source path $source_path"
6665 echo "C compiler $cc"
6666 echo "C library $libc_type"
6667 if test "$host_cc" != "$cc"; then
6668 echo "host C compiler $host_cc"
6669 echo "host C library $host_libc_type"
6671 echo "ARCH $arch ($cpu)"
6672 if test "$build_suffix" != ""; then
6673 echo "build suffix $build_suffix"
6675 if test "$progs_suffix" != ""; then
6676 echo "progs suffix $progs_suffix"
6678 if test "$extra_version" != ""; then
6679 echo "version string suffix $extra_version"
6681 echo "big-endian ${bigendian-no}"
6682 echo "runtime cpu detection ${runtime_cpudetect-no}"
6683 if enabled x86; then
6684 echo "standalone assembly ${x86asm-no}"
6685 echo "x86 assembler ${x86asmexe}"
6686 echo "MMX enabled ${mmx-no}"
6687 echo "MMXEXT enabled ${mmxext-no}"
6688 echo "3DNow! enabled ${amd3dnow-no}"
6689 echo "3DNow! extended enabled ${amd3dnowext-no}"
6690 echo "SSE enabled ${sse-no}"
6691 echo "SSSE3 enabled ${ssse3-no}"
6692 echo "AESNI enabled ${aesni-no}"
6693 echo "AVX enabled ${avx-no}"
6694 echo "AVX2 enabled ${avx2-no}"
6695 echo "XOP enabled ${xop-no}"
6696 echo "FMA3 enabled ${fma3-no}"
6697 echo "FMA4 enabled ${fma4-no}"
6698 echo "i686 features enabled ${i686-no}"
6699 echo "CMOV is fast ${fast_cmov-no}"
6700 echo "EBX available ${ebx_available-no}"
6701 echo "EBP available ${ebp_available-no}"
6703 if enabled aarch64; then
6704 echo "NEON enabled ${neon-no}"
6705 echo "VFP enabled ${vfp-no}"
6707 if enabled arm; then
6708 echo "ARMv5TE enabled ${armv5te-no}"
6709 echo "ARMv6 enabled ${armv6-no}"
6710 echo "ARMv6T2 enabled ${armv6t2-no}"
6711 echo "VFP enabled ${vfp-no}"
6712 echo "NEON enabled ${neon-no}"
6713 echo "THUMB enabled ${thumb-no}"
6715 if enabled mips; then
6716 echo "MIPS FPU enabled ${mipsfpu-no}"
6717 echo "MIPS DSP R1 enabled ${mipsdsp-no}"
6718 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
6719 echo "MIPS MSA enabled ${msa-no}"
6720 echo "LOONGSON MMI enabled ${mmi-no}"
6722 if enabled ppc; then
6723 echo "AltiVec enabled ${altivec-no}"
6724 echo "VSX enabled ${vsx-no}"
6725 echo "POWER8 enabled ${power8-no}"
6726 echo "PPC 4xx optimizations ${ppc4xx-no}"
6727 echo "dcbzl available ${dcbzl-no}"
6729 echo "debug symbols ${debug-no}"
6730 echo "strip symbols ${stripping-no}"
6731 echo "optimize for size ${small-no}"
6732 echo "optimizations ${optimizations-no}"
6733 echo "static ${static-no}"
6734 echo "shared ${shared-no}"
6735 echo "postprocessing support ${postproc-no}"
6736 echo "network support ${network-no}"
6737 echo "threading support ${thread_type-no}"
6738 echo "safe bitstream reader ${safe_bitstream_reader-no}"
6739 echo "texi2html enabled ${texi2html-no}"
6740 echo "perl enabled ${perl-no}"
6741 echo "pod2man enabled ${pod2man-no}"
6742 echo "makeinfo enabled ${makeinfo-no}"
6743 echo "makeinfo supports HTML ${makeinfo_html-no}"
6744 test -n "$random_seed" &&
6745 echo "random seed ${random_seed}"
6748 echo "External libraries:"
6749 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_in_columns
6752 echo "External libraries providing hardware acceleration:"
6753 print_enabled '' $HWACCEL_LIBRARY_LIST | print_in_columns
6757 print_enabled '' $LIBRARY_LIST | print_in_columns
6761 print_enabled '' $PROGRAM_LIST | print_in_columns
6764 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
6765 echo "Enabled ${type}s:"
6766 eval list=\$$(toupper $type)_LIST
6767 print_enabled '_*' $list | print_in_columns
6771 if test -n "$ignore_tests"; then
6772 ignore_tests=$(echo $ignore_tests | tr ',' ' ')
6773 echo "Ignored FATE tests:"
6774 echo $ignore_tests | print_in_columns
6778 echo "License: $license"
6780 echo "Creating configuration files ..."
6782 fi # test "$quiet" != "yes"
6784 test -e Makefile || echo "include $source_path/Makefile" > Makefile
6786 enabled stripping || strip="echo skipping strip"
6788 config_files="$TMPH ffbuild/config.mak doc/config.texi"
6790 cat > ffbuild/config.mak <<EOF
6791 # Automatically generated by configure - do not modify!
6792 ifndef FFMPEG_CONFIG_MAK
6794 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
6796 LIBDIR=\$(DESTDIR)$libdir
6797 SHLIBDIR=\$(DESTDIR)$shlibdir
6798 INCDIR=\$(DESTDIR)$incdir
6799 BINDIR=\$(DESTDIR)$bindir
6800 DATADIR=\$(DESTDIR)$datadir
6801 DOCDIR=\$(DESTDIR)$docdir
6802 MANDIR=\$(DESTDIR)$mandir
6803 PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
6804 INSTALL_NAME_DIR=$install_name_dir
6805 SRC_PATH=$source_path
6806 SRC_LINK=$source_link
6807 ifndef MAIN_MAKEFILE
6808 SRC_PATH:=\$(SRC_PATH:.%=..%)
6812 INTRINSICS=$intrinsics
6819 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
6821 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
6823 DEPX86ASM=$x86asmexe
6824 DEPX86ASMFLAGS=\$(X86ASMFLAGS)
6836 OBJCFLAGS=$OBJCFLAGS
6838 NVCCFLAGS=$nvccflags
6860 LDEXEFLAGS=$LDEXEFLAGS
6861 LDLIBFLAGS=$LDLIBFLAGS
6862 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
6863 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
6864 X86ASMFLAGS=$X86ASMFLAGS
6865 BUILDSUF=$build_suffix
6866 PROGSSUF=$progs_suffix
6874 EXTRA_VERSION=$extra_version
6877 CCDEP_FLAGS=$CCDEP_FLAGS
6879 ASDEP_FLAGS=$ASDEP_FLAGS
6880 X86ASMDEP=$X86ASMDEP
6881 X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS
6882 CC_DEPFLAGS=$CC_DEPFLAGS
6883 AS_DEPFLAGS=$AS_DEPFLAGS
6884 X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS
6887 HOSTCFLAGS=$host_cflags
6888 HOSTCPPFLAGS=$host_cppflags
6889 HOSTEXESUF=$HOSTEXESUF
6890 HOSTLDFLAGS=$host_ldflags
6891 HOSTEXTRALIBS=$host_extralibs
6893 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
6894 HOSTCCDEP=$HOSTCCDEP
6895 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
6896 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
6900 TARGET_EXEC=$target_exec $target_exec_args
6901 TARGET_PATH=$target_path
6902 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
6903 CFLAGS-ffplay=${sdl2_cflags}
6904 CFLAGS_HEADERS=$CFLAGS_HEADERS
6905 ZLIB=$($ldflags_filter -lz)
6906 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
6907 EXTRALIBS=$extralibs
6908 COMPAT_OBJS=$compat_objs
6910 LIBTARGET=${LIBTARGET}
6911 SLIBNAME=${SLIBNAME}
6912 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
6913 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
6914 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
6915 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
6916 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
6917 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
6918 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
6919 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
6920 VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
6921 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
6922 NOREDZONE_FLAGS=$noredzone_flags
6923 LIBFUZZER_PATH=$libfuzzer_path
6924 IGNORE_TESTS=$ignore_tests
6927 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST
6929 print_program_extralibs(){
6930 eval "program_extralibs=\$${1}_extralibs"
6931 eval echo "EXTRALIBS-${1}=${program_extralibs}" >> ffbuild/config.mak
6934 map 'print_program_extralibs $v' $PROGRAM_LIST
6937 /* Automatically generated by configure - do not modify! */
6938 #ifndef FFMPEG_CONFIG_H
6939 #define FFMPEG_CONFIG_H
6940 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
6941 #define FFMPEG_LICENSE "$(c_escape $license)"
6942 #define CONFIG_THIS_YEAR 2017
6943 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
6944 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
6945 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
6946 #define av_restrict $_restrict
6947 #define EXTERN_PREFIX "${extern_prefix}"
6948 #define EXTERN_ASM ${extern_prefix}
6949 #define BUILDSUF "$build_suffix"
6950 #define SLIBSUF "$SLIBSUF"
6951 #define HAVE_MMX2 HAVE_MMXEXT
6952 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
6955 test -n "$assert_level" &&
6956 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
6958 test -n "$malloc_prefix" &&
6959 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
6961 if enabled x86asm; then
6962 append config_files $TMPASM
6966 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
6972 echo "@c auto-generated by configure - do not modify! " > doc/config.texi
6974 print_config ARCH_ "$config_files" $ARCH_LIST
6975 print_config HAVE_ "$config_files" $HAVE_LIST
6976 print_config CONFIG_ "$config_files" $CONFIG_LIST \
6980 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
6981 echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak
6983 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
6984 cp_if_changed $TMPH config.h
6985 touch ffbuild/.config
6987 enabled x86asm && cp_if_changed $TMPASM config.asm
6990 /* Generated by ffconf */
6991 #ifndef AVUTIL_AVCONFIG_H
6992 #define AVUTIL_AVCONFIG_H
6995 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
6997 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
6999 cp_if_changed $TMPH libavutil/avconfig.h
7001 # generate the lists of enabled components
7002 print_enabled_components(){
7007 echo "static const $struct_name *$name[] = {" > $TMPH
7009 enabled $c && printf " &ff_%s,\n" $c >> $TMPH
7011 echo " NULL };" >> $TMPH
7012 cp_if_changed $TMPH $file
7015 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
7016 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
7018 if test -n "$WARNINGS"; then
7019 printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color"
7020 enabled fatal_warnings && exit 1
7023 # Settings for pkg-config files
7025 cat > ffbuild/config.sh <<EOF
7026 # Automatically generated by configure - do not modify!
7028 build_suffix=$build_suffix
7032 rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}")
7033 source_path=${source_path}
7037 extralibs_avutil="$LIBRT $LIBM"
7038 extralibs_avcodec="$extralibs"
7039 extralibs_avformat="$extralibs"
7040 extralibs_avdevice="$extralibs"
7041 extralibs_avfilter="$extralibs"
7042 extralibs_avresample="$LIBM"
7043 extralibs_postproc=""
7044 extralibs_swscale="$LIBM"
7045 extralibs_swresample="$LIBM $LIBSOXR"
7048 for lib in $LIBRARY_LIST; do
7049 lib_deps="$(eval echo \$${lib}_deps)"
7050 echo ${lib}_deps=\"$lib_deps\" >> ffbuild/config.sh