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