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