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