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)' 3795SLIBNAME_WITH_MAJOR='$(SLIBNAME)' 3796LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' 3797SLIB_INSTALL_NAME='$(SLIBNAME)' 3798VERSION_SCRIPT_POSTPROCESS_CMD="cat" 3799 3800asflags_filter=echo 3801cflags_filter=echo 3802ldflags_filter=echo 3803 3804AS_C='-c' 3805AS_O='-o $@' 3806CC_C='-c' 3807CC_E='-E -o $@' 3808CC_O='-o $@' 3809CXX_C='-c' 3810CXX_O='-o $@' 3811OBJCC_C='-c' 3812OBJCC_E='-E -o $@' 3813OBJCC_O='-o $@' 3814X86ASM_O='-o $@' 3815LD_O='-o $@' 3816LD_LIB='-l%' 3817LD_PATH='-L' 3818HOSTCC_C='-c' 3819HOSTCC_E='-E -o $@' 3820HOSTCC_O='-o $@' 3821HOSTLD_O='-o $@' 3822NVCC_C='-c' 3823NVCC_O='-o $@' 3824 3825host_extralibs='-lm' 3826host_cflags_filter=echo 3827host_ldflags_filter=echo 3828 3829target_path='$(CURDIR)' 3830 3831# since the object filename is not given with the -MM flag, the compiler 3832# is only able to print the basename, and we must add the path ourselves 3833DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)' 3834DEPFLAGS='-MM' 3835 3836mkdir -p ffbuild 3837 3838# find source path 3839if test -f configure; then 3840 source_path=. 3841elif test -f src/configure; then 3842 source_path=src 3843else 3844 source_path=$(cd $(dirname "$0"); pwd) 3845 case "$source_path" in 3846 *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;; 3847 esac 3848 test -e "$source_path/config.h" && 3849 die "Out of tree builds are impossible with config.h in source dir." 3850fi 3851 3852for v in "$@"; do 3853 r=${v#*=} 3854 l=${v%"$r"} 3855 r=$(sh_quote "$r") 3856 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}" 3857done 3858 3859find_things_extern(){ 3860 thing=$1 3861 pattern=$2 3862 file=$source_path/$3 3863 out=${4:-$thing} 3864 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file" 3865} 3866 3867find_filters_extern(){ 3868 file=$source_path/$1 3869 sed -n 's/^extern AVFilter ff_[avfsinkrc]\{2,5\}_\([[:alnum:]_]\{1,\}\);/\1_filter/p' $file 3870} 3871 3872FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c) 3873OUTDEV_LIST=$(find_things_extern muxer AVOutputFormat libavdevice/alldevices.c outdev) 3874INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev) 3875MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c) 3876DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c) 3877ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c) 3878DECODER_LIST=$(find_things_extern decoder AVCodec libavcodec/allcodecs.c) 3879CODEC_LIST=" 3880 $ENCODER_LIST 3881 $DECODER_LIST 3882" 3883PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parsers.c) 3884BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c) 3885HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h) 3886PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c) 3887 3888AVCODEC_COMPONENTS_LIST=" 3889 $BSF_LIST 3890 $DECODER_LIST 3891 $ENCODER_LIST 3892 $HWACCEL_LIST 3893 $PARSER_LIST 3894" 3895 3896AVDEVICE_COMPONENTS_LIST=" 3897 $INDEV_LIST 3898 $OUTDEV_LIST 3899" 3900 3901AVFILTER_COMPONENTS_LIST=" 3902 $FILTER_LIST 3903" 3904 3905AVFORMAT_COMPONENTS_LIST=" 3906 $DEMUXER_LIST 3907 $MUXER_LIST 3908 $PROTOCOL_LIST 3909" 3910 3911ALL_COMPONENTS=" 3912 $AVCODEC_COMPONENTS_LIST 3913 $AVDEVICE_COMPONENTS_LIST 3914 $AVFILTER_COMPONENTS_LIST 3915 $AVFORMAT_COMPONENTS_LIST 3916" 3917 3918for n in $COMPONENT_LIST; do 3919 v=$(toupper ${n%s})_LIST 3920 eval enable \$$v 3921 eval ${n}_if_any="\$$v" 3922done 3923 3924enable $ARCH_EXT_LIST 3925 3926die_unknown(){ 3927 echo "Unknown option \"$1\"." 3928 echo "See $0 --help for available options." 3929 exit 1 3930} 3931 3932print_in_columns() { 3933 tr ' ' '\n' | sort | tr '\r\n' ' ' | awk -v col_width=24 -v width="$ncols" ' 3934 { 3935 num_cols = width > col_width ? int(width / col_width) : 1; 3936 num_rows = int((NF + num_cols-1) / num_cols); 3937 y = x = 1; 3938 for (y = 1; y <= num_rows; y++) { 3939 i = y; 3940 for (x = 1; x <= num_cols; x++) { 3941 if (i <= NF) { 3942 line = sprintf("%s%-" col_width "s", line, $i); 3943 } 3944 i = i + num_rows; 3945 } 3946 print line; line = ""; 3947 } 3948 }' | sed 's/ *$//' 3949} 3950 3951show_list() { 3952 suffix=_$1 3953 shift 3954 echo $* | sed s/$suffix//g | print_in_columns 3955 exit 0 3956} 3957 3958rand_list(){ 3959 IFS=', ' 3960 set -- $* 3961 unset IFS 3962 for thing; do 3963 comp=${thing%:*} 3964 prob=${thing#$comp} 3965 prob=${prob#:} 3966 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST 3967 echo "prob ${prob:-0.5}" 3968 printf '%s\n' $comp 3969 done 3970} 3971 3972do_random(){ 3973 action=$1 3974 shift 3975 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }") 3976 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }") 3977} 3978 3979for opt do 3980 optval="${opt#*=}" 3981 case "$opt" in 3982 --extra-ldflags=*) 3983 add_ldflags $optval 3984 ;; 3985 --extra-ldexeflags=*) 3986 add_ldexeflags $optval 3987 ;; 3988 --extra-ldsoflags=*) 3989 add_ldsoflags $optval 3990 ;; 3991 --extra-ldlibflags=*) 3992 warn "The --extra-ldlibflags option is only provided for compatibility and will be\n"\ 3993 "removed in the future. Use --extra-ldsoflags instead." 3994 add_ldsoflags $optval 3995 ;; 3996 --extra-libs=*) 3997 add_extralibs $optval 3998 ;; 3999 --disable-devices) 4000 disable $INDEV_LIST $OUTDEV_LIST 4001 ;; 4002 --enable-debug=*) 4003 debuglevel="$optval" 4004 ;; 4005 --disable-programs) 4006 disable $PROGRAM_LIST 4007 ;; 4008 --disable-everything) 4009 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST 4010 ;; 4011 --disable-all) 4012 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST 4013 disable $LIBRARY_LIST $PROGRAM_LIST doc 4014 enable avutil 4015 ;; 4016 --enable-random|--disable-random) 4017 action=${opt%%-random} 4018 do_random ${action#--} $COMPONENT_LIST 4019 ;; 4020 --enable-random=*|--disable-random=*) 4021 action=${opt%%-random=*} 4022 do_random ${action#--} $optval 4023 ;; 4024 --enable-sdl) 4025 enable sdl2 4026 ;; 4027 --enable-*=*|--disable-*=*) 4028 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') 4029 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" 4030 eval list=\$$(toupper $thing)_LIST 4031 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing} 4032 list=$(filter "$name" $list) 4033 [ "$list" = "" ] && warn "Option $opt did not match anything" 4034 test $action = enable && warn_if_gets_disabled $list 4035 $action $list 4036 ;; 4037 --enable-yasm|--disable-yasm) 4038 warn "The ${opt} option is only provided for compatibility and will be\n"\ 4039 "removed in the future. Use --enable-x86asm / --disable-x86asm instead." 4040 test $opt = --enable-yasm && x86asm=yes || x86asm=no 4041 ;; 4042 --yasmexe=*) 4043 warn "The --yasmexe option is only provided for compatibility and will be\n"\ 4044 "removed in the future. Use --x86asmexe instead." 4045 x86asmexe="$optval" 4046 ;; 4047 --enable-?*|--disable-?*) 4048 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g') 4049 if is_in $option $COMPONENT_LIST; then 4050 test $action = disable && action=unset 4051 eval $action \$$(toupper ${option%s})_LIST 4052 elif is_in $option $CMDLINE_SELECT; then 4053 $action $option 4054 else 4055 die_unknown $opt 4056 fi 4057 ;; 4058 --list-*) 4059 NAME="${opt#--list-}" 4060 is_in $NAME $COMPONENT_LIST || die_unknown $opt 4061 NAME=${NAME%s} 4062 eval show_list $NAME \$$(toupper $NAME)_LIST 4063 ;; 4064 --help|-h) show_help 4065 ;; 4066 --quiet|-q) quiet=yes 4067 ;; 4068 --fatal-warnings) enable fatal_warnings 4069 ;; 4070 --libfuzzer=*) 4071 libfuzzer_path="$optval" 4072 ;; 4073 *) 4074 optname="${opt%%=*}" 4075 optname="${optname#--}" 4076 optname=$(echo "$optname" | sed 's/-/_/g') 4077 if is_in $optname $CMDLINE_SET; then 4078 eval $optname='$optval' 4079 elif is_in $optname $CMDLINE_APPEND; then 4080 append $optname "$optval" 4081 else 4082 die_unknown $opt 4083 fi 4084 ;; 4085 esac 4086done 4087 4088for e in $env; do 4089 eval "export $e" 4090done 4091 4092if disabled autodetect; then 4093 4094 # Unless iconv is explicitely disabled by the user, we still want to probe 4095 # for the iconv from the libc. 4096 disabled iconv || enable libc_iconv 4097 4098 disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST 4099 disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST 4100fi 4101# Mark specifically enabled, but normally autodetected libraries as requested. 4102for lib in $AUTODETECT_LIBS; do 4103 enabled $lib && request $lib 4104done 4105#TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way 4106enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST 4107enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST 4108 4109disabled logging && logfile=/dev/null 4110 4111# command line configuration sanity checks 4112 4113# we need to build at least one lib type 4114if ! enabled_any static shared; then 4115 cat <<EOF 4116At least one library type must be built. 4117Specify --enable-static to build the static libraries or --enable-shared to 4118build the shared libraries as well. To only build the shared libraries specify 4119--disable-static in addition to --enable-shared. 4120EOF 4121 exit 1 4122fi 4123 4124die_license_disabled() { 4125 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; } 4126} 4127 4128die_license_disabled_gpl() { 4129 enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; } 4130} 4131 4132map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST 4133map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST 4134 4135enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST 4136map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST 4137 4138enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; } 4139 4140if enabled nonfree; then 4141 license="nonfree and unredistributable" 4142elif enabled gplv3; then 4143 license="GPL version 3 or later" 4144elif enabled lgplv3; then 4145 license="LGPL version 3 or later" 4146elif enabled gpl; then 4147 license="GPL version 2 or later" 4148else 4149 license="LGPL version 2.1 or later" 4150fi 4151 4152enabled_all gnutls openssl && 4153 die "GnuTLS and OpenSSL must not be enabled at the same time." 4154 4155enabled_all gnutls mbedtls && 4156 die "GnuTLS and mbedTLS must not be enabled at the same time." 4157 4158enabled_all openssl mbedtls && 4159 die "OpenSSL and mbedTLS must not be enabled at the same time." 4160 4161# Disable all the library-specific components if the library itself 4162# is disabled, see AVCODEC_LIST and following _LIST variables. 4163 4164disable_components(){ 4165 disabled ${1} && disable $( 4166 eval components="\$$(toupper ${1})_COMPONENTS" 4167 map 'eval echo \${$(toupper ${v%s})_LIST}' $components 4168 ) 4169} 4170 4171map 'disable_components $v' $LIBRARY_LIST 4172 4173echo "# $0 $FFMPEG_CONFIGURATION" > $logfile 4174set >> $logfile 4175 4176test -n "$valgrind" && toolchain="valgrind-memcheck" 4177 4178enabled ossfuzz && ! echo $CFLAGS | grep -q -- "-fsanitize=" && ! echo $CFLAGS | grep -q -- "-fcoverage-mapping" &&{ 4179 add_cflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer 4180 add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp 4181} 4182 4183case "$toolchain" in 4184 *-asan) 4185 cc_default="${toolchain%-asan}" 4186 add_cflags -fsanitize=address 4187 add_ldflags -fsanitize=address 4188 ;; 4189 *-msan) 4190 cc_default="${toolchain%-msan}" 4191 add_cflags -fsanitize=memory -fsanitize-memory-track-origins 4192 add_ldflags -fsanitize=memory 4193 ;; 4194 *-tsan) 4195 cc_default="${toolchain%-tsan}" 4196 add_cflags -fsanitize=thread 4197 add_ldflags -fsanitize=thread 4198 case "$toolchain" in 4199 gcc-tsan) 4200 add_cflags -fPIC 4201 add_ldflags -fPIC 4202 ;; 4203 esac 4204 ;; 4205 *-usan) 4206 cc_default="${toolchain%-usan}" 4207 add_cflags -fsanitize=undefined 4208 add_ldflags -fsanitize=undefined 4209 ;; 4210 valgrind-*) 4211 target_exec_default="valgrind" 4212 case "$toolchain" in 4213 valgrind-massif) 4214 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" 4215 ;; 4216 valgrind-memcheck) 4217 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" 4218 ;; 4219 esac 4220 ;; 4221 msvc) 4222 # Check whether the current MSVC version needs the C99 converter. 4223 # From MSVC 2013 (compiler major version 18) onwards, it does actually 4224 # support enough of C99 to build ffmpeg. Default to the new 4225 # behaviour if the regexp was unable to match anything, since this 4226 # successfully parses the version number of existing supported 4227 # versions that require the converter (MSVC 2010 and 2012). 4228 cl_major_ver=$(cl.exe 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p') 4229 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then 4230 cc_default="cl.exe" 4231 cxx_default="cl.exe" 4232 else 4233 die "Unsupported MSVC version (2013 or newer required)" 4234 fi 4235 ld_default="$source_path/compat/windows/mslink" 4236 nm_default="dumpbin.exe -symbols" 4237 ar_default="lib.exe" 4238 case "$arch" in 4239 aarch64|arm64) 4240 as_default="armasm64.exe" 4241 ;; 4242 arm*) 4243 as_default="armasm.exe" 4244 ;; 4245 esac 4246 target_os_default="win32" 4247 # Use a relative path for TMPDIR. This makes sure all the 4248 # ffconf temp files are written with a relative path, avoiding 4249 # issues with msys/win32 path conversion for MSVC parameters 4250 # such as -Fo<file> or -out:<file>. 4251 TMPDIR=. 4252 ;; 4253 icl) 4254 cc_default="icl" 4255 ld_default="xilink" 4256 nm_default="dumpbin -symbols" 4257 ar_default="xilib" 4258 target_os_default="win32" 4259 TMPDIR=. 4260 ;; 4261 gcov) 4262 add_cflags -fprofile-arcs -ftest-coverage 4263 add_ldflags -fprofile-arcs -ftest-coverage 4264 ;; 4265 llvm-cov) 4266 add_cflags -fprofile-arcs -ftest-coverage 4267 add_ldflags --coverage 4268 ;; 4269 hardened) 4270 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 4271 add_cflags -fno-strict-overflow -fstack-protector-all 4272 add_ldflags -Wl,-z,relro -Wl,-z,now 4273 add_cflags -fPIE 4274 add_ldexeflags -fPIE -pie 4275 ;; 4276 ?*) 4277 die "Unknown toolchain $toolchain" 4278 ;; 4279esac 4280 4281if test -n "$cross_prefix"; then 4282 test -n "$arch" && test -n "$target_os" || 4283 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling" 4284 enable cross_compile 4285fi 4286 4287set_default target_os 4288if test "$target_os" = android; then 4289 cc_default="clang" 4290fi 4291 4292ar_default="${cross_prefix}${ar_default}" 4293cc_default="${cross_prefix}${cc_default}" 4294cxx_default="${cross_prefix}${cxx_default}" 4295nm_default="${cross_prefix}${nm_default}" 4296pkg_config_default="${cross_prefix}${pkg_config_default}" 4297if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then 4298 ranlib_default="${cross_prefix}${ranlib_default} -D" 4299else 4300 ranlib_default="${cross_prefix}${ranlib_default}" 4301fi 4302strip_default="${cross_prefix}${strip_default}" 4303windres_default="${cross_prefix}${windres_default}" 4304 4305sysinclude_default="${sysroot}/usr/include" 4306 4307if enabled cuda_sdk; then 4308 warn "Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead." 4309 enable cuda_nvcc 4310fi 4311 4312if enabled cuda_nvcc; then 4313 nvcc_default="nvcc" 4314 nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2" 4315else 4316 nvcc_default="clang" 4317 nvccflags_default="--cuda-gpu-arch=sm_30 -O2" 4318 NVCC_C="" 4319fi 4320 4321set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \ 4322 target_exec x86asmexe nvcc 4323enabled cross_compile || host_cc_default=$cc 4324set_default host_cc 4325 4326pkg_config_fail_message="" 4327if ! $pkg_config --version >/dev/null 2>&1; then 4328 warn "$pkg_config not found, library detection may fail." 4329 pkg_config=false 4330elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then 4331 pkg_config_fail_message=" 4332Note: When building a static binary, add --pkg-config-flags=\"--static\"." 4333fi 4334 4335if test $doxygen != $doxygen_default && \ 4336 ! $doxygen --version >/dev/null 2>&1; then 4337 warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build." 4338fi 4339 4340exesuf() { 4341 case $1 in 4342 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;; 4343 esac 4344} 4345 4346EXESUF=$(exesuf $target_os) 4347HOSTEXESUF=$(exesuf $host_os) 4348 4349# set temporary file name 4350: ${TMPDIR:=$TEMPDIR} 4351: ${TMPDIR:=$TMP} 4352: ${TMPDIR:=/tmp} 4353 4354if [ -n "$tempprefix" ] ; then 4355 mktemp(){ 4356 tmpname="$tempprefix.${HOSTNAME}.${UID}" 4357 echo "$tmpname" 4358 mkdir "$tmpname" 4359 } 4360elif ! test_cmd mktemp -u XXXXXX; then 4361 # simple replacement for missing mktemp 4362 # NOT SAFE FOR GENERAL USE 4363 mktemp(){ 4364 tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$" 4365 echo "$tmpname" 4366 mkdir "$tmpname" 4367 } 4368fi 4369 4370FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) || 4371 die "Unable to create temporary directory in $TMPDIR." 4372 4373tmpfile(){ 4374 tmp="${FFTMPDIR}/test"$2 4375 (set -C; exec > $tmp) 2> /dev/null || 4376 die "Unable to create temporary file in $FFTMPDIR." 4377 eval $1=$tmp 4378} 4379 4380trap 'rm -rf -- "$FFTMPDIR"' EXIT 4381trap 'exit 2' INT 4382 4383tmpfile TMPASM .asm 4384tmpfile TMPC .c 4385tmpfile TMPCPP .cpp 4386tmpfile TMPE $EXESUF 4387tmpfile TMPH .h 4388tmpfile TMPM .m 4389tmpfile TMPCU .cu 4390tmpfile TMPO .o 4391tmpfile TMPS .S 4392tmpfile TMPSH .sh 4393tmpfile TMPV .ver 4394 4395unset -f mktemp 4396 4397chmod +x $TMPE 4398 4399# make sure we can execute files in $TMPDIR 4400cat > $TMPSH 2>> $logfile <<EOF 4401#! /bin/sh 4402EOF 4403chmod +x $TMPSH >> $logfile 2>&1 4404if ! $TMPSH >> $logfile 2>&1; then 4405 cat <<EOF 4406Unable to create and execute files in $TMPDIR. Set the TMPDIR environment 4407variable to another directory and make sure that it is not mounted noexec. 4408EOF 4409 die "Sanity test failed." 4410fi 4411 4412armasm_flags(){ 4413 for flag; do 4414 case $flag in 4415 # Filter out MSVC cl.exe options from cflags that shouldn't 4416 # be passed to gas-preprocessor 4417 -M[TD]*) ;; 4418 *) echo $flag ;; 4419 esac 4420 done 4421} 4422 4423cparser_flags(){ 4424 for flag; do 4425 case $flag in 4426 -Wno-switch) echo -Wno-switch-enum ;; 4427 -Wno-format-zero-length) ;; 4428 -Wdisabled-optimization) ;; 4429 -Wno-pointer-sign) echo -Wno-other ;; 4430 *) echo $flag ;; 4431 esac 4432 done 4433} 4434 4435msvc_common_flags(){ 4436 for flag; do 4437 case $flag in 4438 # In addition to specifying certain flags under the compiler 4439 # specific filters, they must be specified here as well or else the 4440 # generic catch all at the bottom will print the original flag. 4441 -Wall) ;; 4442 -Wextra) ;; 4443 -std=c*) ;; 4444 # Common flags 4445 -fomit-frame-pointer) ;; 4446 -g) echo -Z7 ;; 4447 -fno-math-errno) ;; 4448 -fno-common) ;; 4449 -fno-signed-zeros) ;; 4450 -fPIC) ;; 4451 -mthumb) ;; 4452 -march=*) ;; 4453 -lz) echo zlib.lib ;; 4454 -lx264) echo libx264.lib ;; 4455 -lstdc++) ;; 4456 -l*) echo ${flag#-l}.lib ;; 4457 -LARGEADDRESSAWARE) echo $flag ;; 4458 -L*) echo -libpath:${flag#-L} ;; 4459 -Wl,*) ;; 4460 *) echo $flag ;; 4461 esac 4462 done 4463} 4464 4465msvc_flags(){ 4466 msvc_common_flags "$@" 4467 for flag; do 4468 case $flag in 4469 -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \ 4470 -wd4554 ;; 4471 -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \ 4472 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \ 4473 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \ 4474 -wd4307 \ 4475 -wd4273 -wd4554 -wd4701 -wd4703 ;; 4476 esac 4477 done 4478} 4479 4480icl_flags(){ 4481 msvc_common_flags "$@" 4482 for flag; do 4483 case $flag in 4484 # Despite what Intel's documentation says -Wall, which is supported 4485 # on Windows, does enable remarks so disable them here. 4486 -Wall) echo $flag -Qdiag-disable:remark ;; 4487 -std=c99) echo -Qstd=c99 ;; 4488 -flto) echo -ipo ;; 4489 esac 4490 done 4491} 4492 4493icc_flags(){ 4494 for flag; do 4495 case $flag in 4496 -flto) echo -ipo ;; 4497 *) echo $flag ;; 4498 esac 4499 done 4500} 4501 4502suncc_flags(){ 4503 for flag; do 4504 case $flag in 4505 -march=*|-mcpu=*) 4506 case "${flag#*=}" in 4507 native) echo -xtarget=native ;; 4508 v9|niagara) echo -xarch=sparc ;; 4509 ultrasparc) echo -xarch=sparcvis ;; 4510 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;; 4511 i586|pentium) echo -xchip=pentium ;; 4512 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;; 4513 pentium3*|c3-2) echo -xtarget=pentium3 ;; 4514 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;; 4515 pentium4*) echo -xtarget=pentium4 ;; 4516 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;; 4517 *-sse3) echo -xarch=sse3 ;; 4518 core2) echo -xarch=ssse3 -xchip=core2 ;; 4519 bonnell) echo -xarch=ssse3 ;; 4520 corei7|nehalem) echo -xtarget=nehalem ;; 4521 westmere) echo -xtarget=westmere ;; 4522 silvermont) echo -xarch=sse4_2 ;; 4523 corei7-avx|sandybridge) echo -xtarget=sandybridge ;; 4524 core-avx*|ivybridge|haswell|broadwell|skylake*|knl) 4525 echo -xarch=avx ;; 4526 amdfam10|barcelona) echo -xtarget=barcelona ;; 4527 btver1) echo -xarch=amdsse4a ;; 4528 btver2|bdver*|znver*) echo -xarch=avx ;; 4529 athlon-4|athlon-[mx]p) echo -xarch=ssea ;; 4530 k8|opteron|athlon64|athlon-fx) 4531 echo -xarch=sse2a ;; 4532 athlon*) echo -xarch=pentium_proa ;; 4533 esac 4534 ;; 4535 -std=c99) echo -xc99 ;; 4536 -fomit-frame-pointer) echo -xregs=frameptr ;; 4537 -fPIC) echo -KPIC -xcode=pic32 ;; 4538 -W*,*) echo $flag ;; 4539 -f*-*|-W*|-mimpure-text) ;; 4540 -shared) echo -G ;; 4541 *) echo $flag ;; 4542 esac 4543 done 4544} 4545 4546probe_cc(){ 4547 pfx=$1 4548 _cc=$2 4549 first=$3 4550 4551 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags 4552 unset _ld_o _ldflags _ld_lib _ld_path 4553 unset _depflags _DEPCMD _DEPFLAGS 4554 _flags_filter=echo 4555 4556 if $_cc --version 2>&1 | grep -q '^GNU assembler'; then 4557 true # no-op to avoid reading stdin in following checks 4558 elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then 4559 _type=llvm_gcc 4560 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)') 4561 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver" 4562 _depflags='-MMD -MF $(@:.o=.d) -MT $@' 4563 _cflags_speed='-O3' 4564 _cflags_size='-Os' 4565 elif $_cc -v 2>&1 | grep -qi ^gcc; then 4566 _type=gcc 4567 gcc_version=$($_cc --version | head -n1) 4568 gcc_basever=$($_cc -dumpversion) 4569 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)') 4570 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)") 4571 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver") 4572 case $gcc_basever in 4573 2) ;; 4574 2.*) ;; 4575 *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;; 4576 esac 4577 if [ "$first" = true ]; then 4578 case $gcc_basever in 4579 4.2*) 4580 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;; 4581 esac 4582 fi 4583 _cflags_speed='-O3' 4584 _cflags_size='-Os' 4585 elif $_cc --version 2>/dev/null | grep -q ^icc; then 4586 _type=icc 4587 _ident=$($_cc --version | head -n1) 4588 _depflags='-MMD' 4589 _cflags_speed='-O3' 4590 _cflags_size='-Os' 4591 _cflags_noopt='-O1' 4592 _flags_filter=icc_flags 4593 elif $_cc -v 2>&1 | grep -q xlc; then 4594 _type=xlc 4595 _ident=$($_cc -qversion 2>/dev/null | head -n1) 4596 _cflags_speed='-O5' 4597 _cflags_size='-O5 -qcompact' 4598 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then 4599 test -d "$sysroot" || die "No valid sysroot specified." 4600 _type=armcc 4601 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //') 4602 armcc_conf="$PWD/armcc.conf" 4603 $_cc --arm_linux_configure \ 4604 --arm_linux_config_file="$armcc_conf" \ 4605 --configure_sysroot="$sysroot" \ 4606 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 || 4607 die "Error creating armcc configuration file." 4608 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc 4609 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc" 4610 as_default="${cross_prefix}gcc" 4611 _depflags='-MMD' 4612 _cflags_speed='-O3' 4613 _cflags_size='-Os' 4614 elif $_cc -v 2>&1 | grep -q clang && ! $_cc -? > /dev/null 2>&1; then 4615 _type=clang 4616 _ident=$($_cc --version 2>/dev/null | head -n1) 4617 _depflags='-MMD -MF $(@:.o=.d) -MT $@' 4618 _cflags_speed='-O3' 4619 _cflags_size='-Oz' 4620 elif $_cc -V 2>&1 | grep -q Sun; then 4621 _type=suncc 4622 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-) 4623 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)' 4624 _DEPFLAGS='-xM1 -xc99' 4625 _ldflags='-std=c99' 4626 _cflags_speed='-O5' 4627 _cflags_size='-O5 -xspace' 4628 _flags_filter=suncc_flags 4629 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then 4630 _type=pathscale 4631 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :) 4632 _depflags='-MMD -MF $(@:.o=.d) -MT $@' 4633 _cflags_speed='-O2' 4634 _cflags_size='-Os' 4635 _flags_filter='filter_out -Wdisabled-optimization' 4636 elif $_cc -v 2>&1 | grep -q Open64; then 4637 _type=open64 4638 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :) 4639 _depflags='-MMD -MF $(@:.o=.d) -MT $@' 4640 _cflags_speed='-O2' 4641 _cflags_size='-Os' 4642 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros' 4643 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then 4644 _type=armasm 4645 _ident=$($_cc | head -n1) 4646 # 4509: "This form of conditional instruction is deprecated" 4647 _flags="-nologo -ignore 4509" 4648 _flags_filter=armasm_flags 4649 elif $_cc 2>&1 | grep -q Intel; then 4650 _type=icl 4651 _ident=$($_cc 2>&1 | head -n1) 4652 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@' 4653 # Not only is O3 broken on 13.x+ but it is slower on all previous 4654 # versions (tested) as well. 4655 _cflags_speed="-O2" 4656 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff 4657 if $_cc 2>&1 | grep -q Linker; then 4658 _ld_o='-out:$@' 4659 else 4660 _ld_o='-Fe$@' 4661 fi 4662 _cc_o='-Fo$@' 4663 _cc_e='-P' 4664 _flags_filter=icl_flags 4665 _ld_lib='lib%.a' 4666 _ld_path='-libpath:' 4667 # -Qdiag-error to make icl error when seeing certain unknown arguments 4668 _flags='-nologo -Qdiag-error:4044,10157' 4669 # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency 4670 # with MSVC which enables it by default. 4671 _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise' 4672 disable stripping 4673 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then 4674 # lld can emulate multiple different linkers; in ms link.exe mode, 4675 # the -? parameter gives the help output which contains an identifyable 4676 # string, while it gives an error in other modes. 4677 _type=lld-link 4678 # The link.exe mode doesn't have a switch for getting the version, 4679 # but we can force it back to gnu mode and get the version from there. 4680 _ident=$($_cc -flavor gnu --version 2>/dev/null) 4681 _ld_o='-out:$@' 4682 _flags_filter=msvc_flags 4683 _ld_lib='lib%.a' 4684 _ld_path='-libpath:' 4685 elif $_cc -nologo- 2>&1 | grep -q Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then 4686 _type=msvc 4687 if $_cc -nologo- 2>&1 | grep -q Microsoft; then 4688 _ident=$($_cc 2>&1 | head -n1 | tr -d '\r') 4689 else 4690 _ident=$($_cc --version 2>/dev/null | head -n1 | tr -d '\r') 4691 fi 4692 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)' 4693 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs' 4694 _cflags_speed="-O2" 4695 _cflags_size="-O1" 4696 _cflags_noopt="-O1" 4697 if $_cc -nologo- 2>&1 | grep -q Linker; then 4698 _ld_o='-out:$@' 4699 else 4700 _ld_o='-Fe$@' 4701 fi 4702 _cc_o='-Fo$@' 4703 _cc_e='-P -Fi$@' 4704 _flags_filter=msvc_flags 4705 _ld_lib='lib%.a' 4706 _ld_path='-libpath:' 4707 _flags='-nologo' 4708 disable stripping 4709 elif $_cc --version 2>/dev/null | grep -q ^cparser; then 4710 _type=cparser 4711 _ident=$($_cc --version | head -n1) 4712 _depflags='-MMD' 4713 _cflags_speed='-O4' 4714 _cflags_size='-O2' 4715 _flags_filter=cparser_flags 4716 fi 4717 4718 eval ${pfx}_type=\$_type 4719 eval ${pfx}_ident=\$_ident 4720} 4721 4722set_ccvars(){ 4723 eval ${1}_C=\${_cc_c-\${${1}_C}} 4724 eval ${1}_E=\${_cc_e-\${${1}_E}} 4725 eval ${1}_O=\${_cc_o-\${${1}_O}} 4726 4727 if [ -n "$_depflags" ]; then 4728 eval ${1}_DEPFLAGS=\$_depflags 4729 else 4730 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD} 4731 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS} 4732 eval DEP${1}FLAGS=\$_flags 4733 fi 4734} 4735 4736probe_cc cc "$cc" "true" 4737cflags_filter=$_flags_filter 4738cflags_speed=$_cflags_speed 4739cflags_size=$_cflags_size 4740cflags_noopt=$_cflags_noopt 4741add_cflags $_flags $_cflags 4742cc_ldflags=$_ldflags 4743set_ccvars CC 4744set_ccvars CXX 4745 4746probe_cc hostcc "$host_cc" 4747host_cflags_filter=$_flags_filter 4748host_cflags_speed=$_cflags_speed 4749add_host_cflags $_flags $_cflags 4750set_ccvars HOSTCC 4751 4752test -n "$cc_type" && enable $cc_type || 4753 warn "Unknown C compiler $cc, unable to select optimal CFLAGS" 4754 4755: ${as_default:=$cc} 4756: ${objcc_default:=$cc} 4757: ${dep_cc_default:=$cc} 4758: ${ld_default:=$cc} 4759: ${host_ld_default:=$host_cc} 4760set_default ar as objcc dep_cc ld ln_s host_ld windres 4761 4762probe_cc as "$as" 4763asflags_filter=$_flags_filter 4764add_asflags $_flags $_cflags 4765set_ccvars AS 4766 4767probe_cc objcc "$objcc" 4768objcflags_filter=$_flags_filter 4769add_objcflags $_flags $_cflags 4770set_ccvars OBJC 4771 4772probe_cc ld "$ld" 4773ldflags_filter=$_flags_filter 4774add_ldflags $_flags $_ldflags 4775test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags 4776LD_O=${_ld_o-$LD_O} 4777LD_LIB=${_ld_lib-$LD_LIB} 4778LD_PATH=${_ld_path-$LD_PATH} 4779 4780probe_cc hostld "$host_ld" 4781host_ldflags_filter=$_flags_filter 4782add_host_ldflags $_flags $_ldflags 4783HOSTLD_O=${_ld_o-$HOSTLD_O} 4784 4785if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then 4786 probe_cc depcc "$dep_cc" 4787 CCDEP=${_DEPCMD:-$DEPCMD} 4788 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS} 4789 DEPCCFLAGS=$_flags 4790fi 4791 4792if $ar 2>&1 | grep -q Microsoft; then 4793 arflags="-nologo" 4794 ar_o='-out:$@' 4795elif $ar 2>&1 | grep -q "\[D\] "; then 4796 arflags="rcD" 4797 ar_o='$@' 4798else 4799 arflags="rc" 4800 ar_o='$@' 4801fi 4802 4803add_cflags $extra_cflags 4804add_cxxflags $extra_cxxflags 4805add_objcflags $extra_objcflags 4806add_asflags $extra_cflags 4807 4808if test -n "$sysroot"; then 4809 case "$cc_type" in 4810 gcc|llvm_gcc|clang) 4811 add_cppflags --sysroot="$sysroot" 4812 add_ldflags --sysroot="$sysroot" 4813 ;; 4814 esac 4815fi 4816 4817if test "$cpu" = host; then 4818 enabled cross_compile && 4819 warn "--cpu=host makes no sense when cross-compiling." 4820 4821 case "$cc_type" in 4822 gcc|llvm_gcc) 4823 check_native(){ 4824 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return 4825 sed -n "/cc1.*$1=/{ 4826 s/.*$1=\\([^ ]*\\).*/\\1/ 4827 p 4828 q 4829 }" $TMPE 4830 } 4831 cpu=$(check_native -march || check_native -mcpu) 4832 ;; 4833 clang) 4834 check_native(){ 4835 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return 4836 sed -n "/cc1.*-target-cpu /{ 4837 s/.*-target-cpu \\([^ ]*\\).*/\\1/ 4838 p 4839 q 4840 }" $TMPE 4841 } 4842 cpu=$(check_native -march) 4843 ;; 4844 esac 4845 4846 test "${cpu:-host}" = host && 4847 die "--cpu=host not supported with compiler $cc" 4848fi 4849 4850# Deal with common $arch aliases 4851case "$arch" in 4852 aarch64|arm64) 4853 arch="aarch64" 4854 ;; 4855 arm*|iPad*|iPhone*) 4856 arch="arm" 4857 ;; 4858 mips*|IP*) 4859 case "$arch" in 4860 *el) 4861 add_cppflags -EL 4862 add_ldflags -EL 4863 ;; 4864 *eb) 4865 add_cppflags -EB 4866 add_ldflags -EB 4867 ;; 4868 esac 4869 arch="mips" 4870 ;; 4871 parisc*|hppa*) 4872 arch="parisc" 4873 ;; 4874 "Power Macintosh"|ppc*|powerpc*) 4875 arch="ppc" 4876 ;; 4877 s390|s390x) 4878 arch="s390" 4879 ;; 4880 sh4|sh) 4881 arch="sh4" 4882 ;; 4883 sun4*|sparc*) 4884 arch="sparc" 4885 ;; 4886 tilegx|tile-gx) 4887 arch="tilegx" 4888 ;; 4889 i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64) 4890 arch="x86" 4891 ;; 4892esac 4893 4894is_in $arch $ARCH_LIST || warn "unknown architecture $arch" 4895enable $arch 4896 4897# Add processor-specific flags 4898if enabled aarch64; then 4899 4900 case $cpu in 4901 armv*) 4902 cpuflags="-march=$cpu" 4903 ;; 4904 *) 4905 cpuflags="-mcpu=$cpu" 4906 ;; 4907 esac 4908 4909elif enabled alpha; then 4910 4911 cpuflags="-mcpu=$cpu" 4912 4913elif enabled arm; then 4914 4915 check_arm_arch() { 4916 test_cpp_condition stddef.h \ 4917 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \ 4918 $cpuflags 4919 } 4920 4921 probe_arm_arch() { 4922 if check_arm_arch 4; then echo armv4 4923 elif check_arm_arch 4T; then echo armv4t 4924 elif check_arm_arch 5; then echo armv5 4925 elif check_arm_arch 5E; then echo armv5e 4926 elif check_arm_arch 5T; then echo armv5t 4927 elif check_arm_arch 5TE; then echo armv5te 4928 elif check_arm_arch 5TEJ; then echo armv5te 4929 elif check_arm_arch 6; then echo armv6 4930 elif check_arm_arch 6J; then echo armv6j 4931 elif check_arm_arch 6K; then echo armv6k 4932 elif check_arm_arch 6Z; then echo armv6z 4933 elif check_arm_arch 6KZ; then echo armv6zk 4934 elif check_arm_arch 6ZK; then echo armv6zk 4935 elif check_arm_arch 6T2; then echo armv6t2 4936 elif check_arm_arch 7; then echo armv7 4937 elif check_arm_arch 7A 7_A; then echo armv7-a 4938 elif check_arm_arch 7S; then echo armv7-a 4939 elif check_arm_arch 7R 7_R; then echo armv7-r 4940 elif check_arm_arch 7M 7_M; then echo armv7-m 4941 elif check_arm_arch 7EM 7E_M; then echo armv7-m 4942 elif check_arm_arch 8A 8_A; then echo armv8-a 4943 fi 4944 } 4945 4946 [ "$cpu" = generic ] && cpu=$(probe_arm_arch) 4947 4948 case $cpu in 4949 armv*) 4950 cpuflags="-march=$cpu" 4951 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g') 4952 ;; 4953 *) 4954 cpuflags="-mcpu=$cpu" 4955 case $cpu in 4956 cortex-a*) subarch=armv7a ;; 4957 cortex-r*) subarch=armv7r ;; 4958 cortex-m*) enable thumb; subarch=armv7m ;; 4959 arm11*) subarch=armv6 ;; 4960 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;; 4961 armv4*|arm7*|arm9[24]*) subarch=armv4 ;; 4962 *) subarch=$(probe_arm_arch) ;; 4963 esac 4964 ;; 4965 esac 4966 4967 case "$subarch" in 4968 armv5t*) enable fast_clz ;; 4969 armv[6-8]*) 4970 enable fast_clz 4971 disabled fast_unaligned || enable fast_unaligned 4972 ;; 4973 esac 4974 4975elif enabled avr32; then 4976 4977 case $cpu in 4978 ap7[02]0[0-2]) 4979 subarch="avr32_ap" 4980 cpuflags="-mpart=$cpu" 4981 ;; 4982 ap) 4983 subarch="avr32_ap" 4984 cpuflags="-march=$cpu" 4985 ;; 4986 uc3[ab]*) 4987 subarch="avr32_uc" 4988 cpuflags="-mcpu=$cpu" 4989 ;; 4990 uc) 4991 subarch="avr32_uc" 4992 cpuflags="-march=$cpu" 4993 ;; 4994 esac 4995 4996elif enabled bfin; then 4997 4998 cpuflags="-mcpu=$cpu" 4999 5000elif enabled mips; then 5001 5002 cpuflags="-march=$cpu" 5003 5004 if [ "$cpu" != "generic" ]; then 5005 disable mips32r2 5006 disable mips32r5 5007 disable mips64r2 5008 disable mips32r6 5009 disable mips64r6 5010 disable loongson2 5011 disable loongson3 5012 5013 case $cpu in 5014 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf) 5015 enable mips32r2 5016 disable msa 5017 ;; 5018 p5600|i6400|p6600) 5019 disable mipsdsp 5020 disable mipsdspr2 5021 ;; 5022 loongson*) 5023 enable loongson2 5024 enable loongson3 5025 enable local_aligned 5026 enable simd_align_16 5027 enable fast_64bit 5028 enable fast_clz 5029 enable fast_cmov 5030 enable fast_unaligned 5031 disable aligned_stack 5032 disable mipsdsp 5033 disable mipsdspr2 5034 # When gcc version less than 5.3.0, add -fno-expensive-optimizations flag. 5035 if [ $cc == gcc ]; then 5036 gcc_version=$(gcc -dumpversion) 5037 if [ "$(echo "$gcc_version 5.3.0" | tr " " "\n" | sort -rV | head -n 1)" == "$gcc_version" ]; then 5038 expensive_optimization_flag="" 5039 else 5040 expensive_optimization_flag="-fno-expensive-optimizations" 5041 fi 5042 fi 5043 case $cpu in 5044 loongson3*) 5045 cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag" 5046 ;; 5047 loongson2e) 5048 cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag" 5049 ;; 5050 loongson2f) 5051 cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag" 5052 ;; 5053 esac 5054 ;; 5055 *) 5056 # Unknown CPU. Disable everything. 5057 warn "unknown CPU. Disabling all MIPS optimizations." 5058 disable mipsfpu 5059 disable mipsdsp 5060 disable mipsdspr2 5061 disable msa 5062 disable mmi 5063 ;; 5064 esac 5065 5066 case $cpu in 5067 24kc) 5068 disable mipsfpu 5069 disable mipsdsp 5070 disable mipsdspr2 5071 ;; 5072 24kf*) 5073 disable mipsdsp 5074 disable mipsdspr2 5075 ;; 5076 24kec|34kc|1004kc) 5077 disable mipsfpu 5078 disable mipsdspr2 5079 ;; 5080 24kef*|34kf*|1004kf*) 5081 disable mipsdspr2 5082 ;; 5083 74kc) 5084 disable mipsfpu 5085 ;; 5086 p5600) 5087 enable mips32r5 5088 check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" 5089 ;; 5090 i6400) 5091 enable mips64r6 5092 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" 5093 ;; 5094 p6600) 5095 enable mips64r6 5096 check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" 5097 ;; 5098 esac 5099 else 5100 # We do not disable anything. Is up to the user to disable the unwanted features. 5101 warn 'generic cpu selected' 5102 fi 5103 5104elif enabled ppc; then 5105 5106 disable ldbrx 5107 5108 case $(tolower $cpu) in 5109 601|ppc601|powerpc601) 5110 cpuflags="-mcpu=601" 5111 disable altivec 5112 ;; 5113 603*|ppc603*|powerpc603*) 5114 cpuflags="-mcpu=603" 5115 disable altivec 5116 ;; 5117 604*|ppc604*|powerpc604*) 5118 cpuflags="-mcpu=604" 5119 disable altivec 5120 ;; 5121 g3|75*|ppc75*|powerpc75*) 5122 cpuflags="-mcpu=750" 5123 disable altivec 5124 ;; 5125 g4|745*|ppc745*|powerpc745*) 5126 cpuflags="-mcpu=7450" 5127 disable vsx 5128 ;; 5129 74*|ppc74*|powerpc74*) 5130 cpuflags="-mcpu=7400" 5131 disable vsx 5132 ;; 5133 g5|970|ppc970|powerpc970) 5134 cpuflags="-mcpu=970" 5135 disable vsx 5136 ;; 5137 power[3-6]*) 5138 cpuflags="-mcpu=$cpu" 5139 disable vsx 5140 ;; 5141 power[7-8]*) 5142 cpuflags="-mcpu=$cpu" 5143 ;; 5144 cell) 5145 cpuflags="-mcpu=cell" 5146 enable ldbrx 5147 disable vsx 5148 ;; 5149 e500mc) 5150 cpuflags="-mcpu=e500mc" 5151 disable altivec 5152 ;; 5153 e500v2) 5154 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double" 5155 disable altivec 5156 disable dcbzl 5157 ;; 5158 e500) 5159 cpuflags="-mcpu=8540 -mhard-float" 5160 disable altivec 5161 disable dcbzl 5162 ;; 5163 esac 5164 5165elif enabled sparc; then 5166 5167 case $cpu in 5168 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789]) 5169 cpuflags="-mcpu=$cpu" 5170 ;; 5171 ultrasparc*|niagara[234]) 5172 cpuflags="-mcpu=$cpu" 5173 ;; 5174 esac 5175 5176elif enabled x86; then 5177 5178 case $cpu in 5179 i[345]86|pentium) 5180 cpuflags="-march=$cpu" 5181 disable i686 5182 disable mmx 5183 ;; 5184 # targets that do NOT support nopl and conditional mov (cmov) 5185 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3) 5186 cpuflags="-march=$cpu" 5187 disable i686 5188 ;; 5189 # targets that do support nopl and conditional mov (cmov) 5190 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\ 5191 |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\ 5192 |amdfam10|barcelona|b[dt]ver*|znver*) 5193 cpuflags="-march=$cpu" 5194 enable i686 5195 enable fast_cmov 5196 ;; 5197 # targets that do support conditional mov but on which it's slow 5198 pentium4|pentium4m|prescott|nocona) 5199 cpuflags="-march=$cpu" 5200 enable i686 5201 disable fast_cmov 5202 ;; 5203 esac 5204 5205fi 5206 5207if [ "$cpu" != generic ]; then 5208 add_cflags $cpuflags 5209 add_asflags $cpuflags 5210 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags 5211fi 5212 5213# compiler sanity check 5214test_exec <<EOF 5215int main(void){ return 0; } 5216EOF 5217if test "$?" != 0; then 5218 echo "$cc is unable to create an executable file." 5219 if test -z "$cross_prefix" && ! enabled cross_compile ; then 5220 echo "If $cc is a cross-compiler, use the --enable-cross-compile option." 5221 echo "Only do this if you know what cross compiling means." 5222 fi 5223 die "C compiler test failed." 5224fi 5225 5226add_cppflags -D_ISOC99_SOURCE 5227add_cxxflags -D__STDC_CONSTANT_MACROS 5228check_cxxflags -std=c++11 || check_cxxflags -std=c++0x 5229 5230# some compilers silently accept -std=c11, so we also need to check that the 5231# version macro is defined properly 5232test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" && 5233 add_cflags -std=c11 || 5234 check_cflags -std=c99 5235 5236check_cppflags -D_FILE_OFFSET_BITS=64 5237check_cppflags -D_LARGEFILE_SOURCE 5238 5239add_host_cppflags -D_ISOC99_SOURCE 5240check_host_cflags -std=c99 5241check_host_cflags -Wall 5242check_host_cflags $host_cflags_speed 5243 5244check_64bit(){ 5245 arch32=$1 5246 arch64=$2 5247 expr=${3:-'sizeof(void *) > 4'} 5248 test_code cc "" "int test[2*($expr) - 1]" && 5249 subarch=$arch64 || subarch=$arch32 5250 enable $subarch 5251} 5252 5253case "$arch" in 5254 aarch64|alpha|ia64) 5255 enabled shared && enable_weak pic 5256 ;; 5257 mips) 5258 check_64bit mips mips64 '_MIPS_SIM > 1' 5259 enabled shared && enable_weak pic 5260 ;; 5261 parisc) 5262 check_64bit parisc parisc64 5263 enabled shared && enable_weak pic 5264 ;; 5265 ppc) 5266 check_64bit ppc ppc64 5267 enabled shared && enable_weak pic 5268 ;; 5269 s390) 5270 check_64bit s390 s390x 5271 enabled shared && enable_weak pic 5272 ;; 5273 sparc) 5274 check_64bit sparc sparc64 5275 enabled shared && enable_weak pic 5276 ;; 5277 x86) 5278 check_64bit x86_32 x86_64 5279 # Treat x32 as x64 for now. Note it also needs pic if shared 5280 test "$subarch" = "x86_32" && test_cpp_condition stddef.h 'defined(__x86_64__)' && 5281 subarch=x86_64 && enable x86_64 && disable x86_32 5282 if enabled x86_64; then 5283 enabled shared && enable_weak pic 5284 objformat=elf64 5285 fi 5286 ;; 5287esac 5288 5289# OS specific 5290case $target_os in 5291 aix) 5292 SHFLAGS=-shared 5293 add_cppflags '-I\$(SRC_PATH)/compat/aix' 5294 enabled shared && add_ldflags -Wl,-brtl 5295 arflags='-Xany -r -c' 5296 striptype="" 5297 ;; 5298 android) 5299 disable symver 5300 enable section_data_rel_ro 5301 add_cflags -fPIE 5302 add_ldexeflags -fPIE -pie 5303 SLIB_INSTALL_NAME='$(SLIBNAME)' 5304 SLIB_INSTALL_LINKS= 5305 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)' 5306 ;; 5307 haiku) 5308 prefix_default="/boot/common" 5309 network_extralibs="-lnetwork" 5310 host_extralibs= 5311 ;; 5312 sunos) 5313 SHFLAGS='-shared -Wl,-h,$$(@F)' 5314 enabled x86 && append SHFLAGS -mimpure-text 5315 network_extralibs="-lsocket -lnsl" 5316 add_cppflags -D__EXTENSIONS__ 5317 # When using suncc to build, the Solaris linker will mark 5318 # an executable with each instruction set encountered by 5319 # the Solaris assembler. As our libraries contain their own 5320 # guards for processor-specific code, instead suppress 5321 # generation of the HWCAPS ELF section on Solaris x86 only. 5322 enabled_all suncc x86 && 5323 echo "hwcap_1 = OVERRIDE;" > mapfile && 5324 add_ldflags -Wl,-M,mapfile 5325 nm_default='nm -P -g' 5326 striptype="" 5327 version_script='-M' 5328 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)' 5329 ;; 5330 netbsd) 5331 disable symver 5332 oss_indev_extralibs="-lossaudio" 5333 oss_outdev_extralibs="-lossaudio" 5334 enabled gcc || check_ldflags -Wl,-zmuldefs 5335 ;; 5336 openbsd|bitrig) 5337 disable symver 5338 enable section_data_rel_ro 5339 striptype="" 5340 SHFLAGS='-shared' 5341 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)' 5342 SLIB_INSTALL_LINKS= 5343 oss_indev_extralibs="-lossaudio" 5344 oss_outdev_extralibs="-lossaudio" 5345 ;; 5346 dragonfly) 5347 disable symver 5348 ;; 5349 freebsd) 5350 ;; 5351 bsd/os) 5352 add_extralibs -lpoll -lgnugetopt 5353 strip="strip -d" 5354 ;; 5355 darwin) 5356 enabled ppc && add_asflags -force_cpusubtype_ALL 5357 install_name_dir_default='$(SHLIBDIR)' 5358 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)' 5359 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress 5360 strip="${strip} -x" 5361 add_ldflags -Wl,-dynamic,-search_paths_first 5362 check_cflags -Werror=partial-availability 5363 SLIBSUF=".dylib" 5364 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)' 5365 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)' 5366 enabled x86_64 && objformat="macho64" || objformat="macho32" 5367 enabled_any pic shared x86_64 || 5368 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; } 5369 check_headers dispatch/dispatch.h && 5370 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore' 5371 if test -n "$sysroot"; then 5372 is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot 5373 is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot 5374 fi 5375 version_script='-exported_symbols_list' 5376 VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"' 5377 # Workaround for Xcode 11 -fstack-check bug 5378 if enabled clang; then 5379 clang_version=$($cc -dumpversion) 5380 test ${clang_version%%.*} -eq 11 && add_cflags -fno-stack-check 5381 fi 5382 ;; 5383 msys*) 5384 die "Native MSYS builds are discouraged, please use the MINGW environment." 5385 ;; 5386 mingw32*|mingw64*) 5387 target_os=mingw32 5388 LIBTARGET=i386 5389 if enabled x86_64; then 5390 LIBTARGET="i386:x86-64" 5391 elif enabled arm; then 5392 LIBTARGET="arm" 5393 elif enabled aarch64; then 5394 LIBTARGET="arm64" 5395 fi 5396 if enabled shared; then 5397 # Cannot build both shared and static libs when using dllimport. 5398 disable static 5399 fi 5400 enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres 5401 enabled x86_32 && check_ldflags -Wl,--large-address-aware 5402 shlibdir_default="$bindir_default" 5403 SLIBPREF="" 5404 SLIBSUF=".dll" 5405 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' 5406 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' 5407 if test_cmd lib.exe -list; then 5408 SLIB_EXTRA_CMD=-'lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)' 5409 if enabled x86_64; then 5410 LIBTARGET=x64 5411 fi 5412 else 5413 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)' 5414 fi 5415 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' 5416 SLIB_INSTALL_LINKS= 5417 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' 5418 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)' 5419 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)' 5420 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-image-base $$(@:$(SLIBSUF)=.def)' 5421 enabled x86_64 && objformat="win64" || objformat="win32" 5422 dlltool="${cross_prefix}dlltool" 5423 ranlib=: 5424 enable dos_paths 5425 check_ldflags -Wl,--nxcompat,--dynamicbase 5426 # Lets work around some stupidity in binutils. 5427 # ld will strip relocations from executables even though we need them 5428 # for dynamicbase (ASLR). Using -pie does retain the reloc section 5429 # however ld then forgets what the entry point should be (oops) so we 5430 # have to manually (re)set it. 5431 if enabled x86_32; then 5432 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup 5433 elif enabled x86_64; then 5434 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup 5435 check_ldflags -Wl,--high-entropy-va # binutils 2.25 5436 # Set image base >4GB for extra entropy with HEASLR 5437 add_ldexeflags -Wl,--image-base,0x140000000 5438 append SHFLAGS -Wl,--image-base,0x180000000 5439 fi 5440 ;; 5441 win32|win64) 5442 disable symver 5443 if enabled shared; then 5444 # Link to the import library instead of the normal static library 5445 # for shared libs. 5446 LD_LIB='%.lib' 5447 # Cannot build both shared and static libs with MSVC or icl. 5448 disable static 5449 fi 5450 enabled x86_32 && check_ldflags -LARGEADDRESSAWARE 5451 shlibdir_default="$bindir_default" 5452 SLIBPREF="" 5453 SLIBSUF=".dll" 5454 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' 5455 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' 5456 SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)' 5457 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' 5458 SLIB_INSTALL_LINKS= 5459 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' 5460 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)' 5461 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)' 5462 enabled x86_64 && objformat="win64" || objformat="win32" 5463 ranlib=: 5464 enable dos_paths 5465 ;; 5466 cygwin*) 5467 target_os=cygwin 5468 shlibdir_default="$bindir_default" 5469 SLIBPREF="cyg" 5470 SLIBSUF=".dll" 5471 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' 5472 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' 5473 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' 5474 SLIB_INSTALL_LINKS= 5475 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a' 5476 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a' 5477 enabled x86_64 && objformat="win64" || objformat="win32" 5478 enable dos_paths 5479 enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres 5480 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 5481 ;; 5482 *-dos|freedos|opendos) 5483 network_extralibs="-lsocket" 5484 objformat="coff" 5485 enable dos_paths 5486 ;; 5487 linux) 5488 enable section_data_rel_ro 5489 enabled_any arm aarch64 && enable_weak linux_perf 5490 ;; 5491 irix*) 5492 target_os=irix 5493 ranlib="echo ignoring ranlib" 5494 ;; 5495 os/2*) 5496 strip="lxlite -CS" 5497 striptype="" 5498 objformat="aout" 5499 add_cppflags -D_GNU_SOURCE 5500 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap 5501 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' 5502 LIBSUF="_s.a" 5503 SLIBPREF="" 5504 SLIBSUF=".dll" 5505 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' 5506 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)' 5507 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \ 5508 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \ 5509 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \ 5510 echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \ 5511 emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def' 5512 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \ 5513 emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;' 5514 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' 5515 SLIB_INSTALL_LINKS= 5516 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib' 5517 enable dos_paths 5518 enable_weak os2threads 5519 ;; 5520 gnu/kfreebsd) 5521 add_cppflags -D_BSD_SOURCE 5522 ;; 5523 gnu) 5524 ;; 5525 qnx) 5526 add_cppflags -D_QNX_SOURCE 5527 network_extralibs="-lsocket" 5528 ;; 5529 symbian) 5530 SLIBSUF=".dll" 5531 enable dos_paths 5532 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default 5533 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS 5534 add_ldflags -Wl,--target1-abs,--no-undefined \ 5535 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \ 5536 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup 5537 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \ 5538 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \ 5539 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib 5540 ;; 5541 minix) 5542 ;; 5543 none) 5544 ;; 5545 *) 5546 die "Unknown OS '$target_os'." 5547 ;; 5548esac 5549 5550# test if creating links works 5551link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX) 5552link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX) 5553mkdir "$link_dest" 5554$ln_s "$link_dest" "$link_name" 5555touch "$link_dest/test_file" 5556if [ "$source_path" != "." ] && [ "$source_path" != "src" ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then 5557 # create link to source path 5558 [ -e src ] && rm src 5559 $ln_s "$source_path" src 5560 source_link=src 5561else 5562 # creating directory links doesn't work 5563 # fall back to using the full source path 5564 source_link="$source_path" 5565fi 5566# cleanup 5567rm -r "$link_dest" 5568rm -r "$link_name" 5569 5570# determine libc flavour 5571 5572probe_libc(){ 5573 pfx=$1 5574 pfx_no_=${pfx%_} 5575 # uclibc defines __GLIBC__, so it needs to be checked before glibc. 5576 if test_${pfx}cpp_condition features.h "defined __UCLIBC__"; then 5577 eval ${pfx}libc_type=uclibc 5578 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 5579 elif test_${pfx}cpp_condition features.h "defined __GLIBC__"; then 5580 eval ${pfx}libc_type=glibc 5581 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 5582 # MinGW headers can be installed on Cygwin, so check for newlib first. 5583 elif test_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then 5584 eval ${pfx}libc_type=newlib 5585 add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600 5586 # MinGW64 is backwards compatible with MinGW32, so check for it first. 5587 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then 5588 eval ${pfx}libc_type=mingw64 5589 if test_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then 5590 add_compat msvcrt/snprintf.o 5591 add_cflags "-include $source_path/compat/msvcrt/snprintf.h" 5592 fi 5593 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 5594 eval test \$${pfx_no_}cc_type = "gcc" && 5595 add_${pfx}cppflags -D__printf__=__gnu_printf__ 5596 test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" && 5597 add_${pfx}cppflags -D_WIN32_WINNT=0x0600 5598 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 5599 elif test_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" || 5600 test_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then 5601 eval ${pfx}libc_type=mingw32 5602 test_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \ 5603 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || 5604 die "ERROR: MinGW32 runtime version must be >= 3.15." 5605 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 5606 test_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" && 5607 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700 5608 test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" && 5609 add_${pfx}cppflags -D_WIN32_WINNT=0x0600 5610 eval test \$${pfx_no_}cc_type = "gcc" && 5611 add_${pfx}cppflags -D__printf__=__gnu_printf__ 5612 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 5613 elif test_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then 5614 eval ${pfx}libc_type=msvcrt 5615 if test_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then 5616 if [ "$pfx" = host_ ]; then 5617 add_host_cppflags -Dsnprintf=_snprintf 5618 else 5619 add_compat strtod.o strtod=avpriv_strtod 5620 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \ 5621 _snprintf=avpriv_snprintf \ 5622 vsnprintf=avpriv_vsnprintf 5623 fi 5624 fi 5625 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS 5626 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to 5627 # 0x601 by default unless something else is set by the user. 5628 # This can easily lead to us detecting functions only present 5629 # in such new versions and producing binaries requiring windows 7.0. 5630 # Therefore explicitly set the default to Vista unless the user has 5631 # set something else on the command line. 5632 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop 5633 # family. For these cases, configure is free to use any functions 5634 # found in the SDK headers by default. (Alternatively, we could force 5635 # _WIN32_WINNT to 0x0602 in that case.) 5636 test_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" || 5637 { test_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0600; } 5638#ifdef WINAPI_FAMILY 5639#include <winapifamily.h> 5640#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 5641#error not desktop 5642#endif 5643#endif 5644EOF 5645 if [ "$pfx" = "" ]; then 5646 check_func strtoll || add_cflags -Dstrtoll=_strtoi64 5647 check_func strtoull || add_cflags -Dstrtoull=_strtoui64 5648 fi 5649 elif test_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then 5650 eval ${pfx}libc_type=klibc 5651 elif test_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then 5652 eval ${pfx}libc_type=bionic 5653 elif test_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then 5654 eval ${pfx}libc_type=solaris 5655 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 5656 elif test_${pfx}cpp_condition sys/version.h "defined __DJGPP__"; then 5657 eval ${pfx}libc_type=djgpp 5658 add_cppflags -U__STRICT_ANSI__ 5659 add_cflags "-include $source_path/compat/djgpp/math.h" 5660 add_compat djgpp/math.o 5661 fi 5662 test_${pfx}cc <<EOF 5663#include <time.h> 5664void *v = localtime_r; 5665EOF 5666test "$?" != 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 5667#include <time.h> 5668void *v = localtime_r; 5669EOF 5670 5671 eval test -n "\${${pfx}libc_type}" && enable ${pfx}libc_${libc_type} 5672} 5673 5674probe_libc 5675probe_libc host_ 5676 5677# hacks for compiler/libc/os combinations 5678 5679case $libc_type in 5680 bionic) 5681 add_compat strtod.o strtod=avpriv_strtod 5682 ;; 5683esac 5684 5685check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" || 5686 add_cppflags '-I\$(SRC_PATH)/compat/float' 5687 5688test_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic 5689 5690set_default libdir 5691: ${shlibdir_default:="$libdir"} 5692: ${pkgconfigdir_default:="$libdir/pkgconfig"} 5693 5694set_default $PATHS_LIST 5695set_default nm 5696 5697disabled optimizations || enabled ossfuzz || check_cflags -fomit-frame-pointer 5698 5699enable_weak_pic() { 5700 disabled pic && return 5701 enable pic 5702 add_cppflags -DPIC 5703 case "$target_os" in 5704 mingw*|cygwin*|win*) 5705 ;; 5706 *) 5707 add_cflags -fPIC 5708 add_asflags -fPIC 5709 ;; 5710 esac 5711} 5712 5713enabled pic && enable_weak_pic 5714 5715test_cc <<EOF || die "Symbol mangling check failed." 5716int ff_extern; 5717EOF 5718sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }') 5719extern_prefix=${sym%%ff_extern*} 5720 5721! disabled inline_asm && check_inline_asm inline_asm '"" ::' 5722 5723for restrict_keyword in restrict __restrict__ __restrict ""; do 5724 test_code cc "" "char * $restrict_keyword p" && break 5725done 5726 5727check_cc pragma_deprecated "" '_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")' 5728 5729# The global variable ensures the bits appear unchanged in the object file. 5730test_cc <<EOF || die "endian test failed" 5731unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E'; 5732EOF 5733od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian 5734 5735check_cc const_nan math.h "struct { double d; } static const bar[] = { { NAN } }" 5736 5737if ! enabled ppc64 || enabled bigendian; then 5738 disable vsx 5739fi 5740 5741check_gas() { 5742 log "check_gas using '$as' as AS" 5743 # :vararg is used on aarch64, arm and ppc altivec 5744 check_as vararg " 5745.macro m n, y:vararg=0 5746\n: .int \y 5747.endm 5748m x" || return 1 5749 # .altmacro is only used in arm asm 5750 ! enabled arm || check_as gnu_as ".altmacro" 5751} 5752 5753if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then 5754 nogas=: 5755 enabled_any arm aarch64 && nogas=die 5756 enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn 5757 as_noop=-v 5758 5759 case $as_type in 5760 arm*) gaspp_as_type=armasm; as_noop=-h ;; 5761 gcc) gaspp_as_type=gas ;; 5762 *) gaspp_as_type=$as_type ;; 5763 esac 5764 5765 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type" 5766 5767 test "${as#*gas-preprocessor.pl}" != "$as" || 5768 test_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop && 5769 gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}" 5770 5771 if ! check_gas ; then 5772 as=${gas:=$as} 5773 check_gas || \ 5774 $nogas "GNU assembler not found, install/update gas-preprocessor" 5775 fi 5776 5777 check_as as_func ".func test 5778 .endfunc" 5779fi 5780 5781check_inline_asm inline_asm_labels '"1:\n"' 5782 5783check_inline_asm inline_asm_nonlocal_labels '"Label:\n"' 5784 5785if enabled aarch64; then 5786 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]' 5787 # internal assembler in clang 3.3 does not support this instruction 5788 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1' 5789 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2' 5790 5791 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM 5792 5793elif enabled alpha; then 5794 5795 check_cflags -mieee 5796 5797elif enabled arm; then 5798 5799 enabled msvc && check_cpp_condition thumb stddef.h "defined _M_ARMT" 5800 test_cpp_condition stddef.h "defined __thumb__" && test_cc <<EOF && enable_weak thumb 5801float func(float a, float b){ return a+b; } 5802EOF 5803 enabled thumb && check_cflags -mthumb || check_cflags -marm 5804 5805 if check_cpp_condition vfp_args stddef.h "defined __ARM_PCS_VFP"; then 5806 : 5807 elif check_cpp_condition vfp_args stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then 5808 : 5809 elif ! test_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then 5810 case "${cross_prefix:-$cc}" in 5811 *hardfloat*) enable vfp_args; fpabi=vfp ;; 5812 *) check_ld "cc" vfp_args <<EOF && fpabi=vfp || fpabi=soft ;; 5813__asm__ (".eabi_attribute 28, 1"); 5814int main(void) { return 0; } 5815EOF 5816 esac 5817 warn "Compiler does not indicate floating-point ABI, guessing $fpabi." 5818 fi 5819 5820 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0' 5821 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0' 5822 enabled armv6t2 && check_insn armv6t2 'movt r0, #0' 5823 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0' 5824 enabled vfp && check_insn vfp 'fadds s0, s0, s0' 5825 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0' 5826 enabled setend && check_insn setend 'setend be' 5827 5828 [ $target_os = linux ] || [ $target_os = android ] || 5829 map 'enabled_any ${v}_external ${v}_inline || disable $v' \ 5830 $ARCH_EXT_LIST_ARM 5831 5832 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)' 5833 5834 check_as as_arch_directive ".arch armv7-a" 5835 check_as as_dn_directive "ra .dn d0.i16" 5836 check_as as_fpu_directive ".fpu neon" 5837 5838 # llvm's integrated assembler supports .object_arch from llvm 3.5 5839 [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] && 5840 check_as as_object_arch ".object_arch armv4" 5841 5842 # MS armasm fails to assemble our PIC constructs 5843 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic 5844 5845elif enabled mips; then 5846 5847 enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' 5848 enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"' 5849 enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"' 5850 5851 # Enable minimum ISA based on selected options 5852 if enabled mips64; then 5853 enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6' 5854 enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2' 5855 disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64' 5856 else 5857 enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6' 5858 enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5' 5859 enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2' 5860 disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32' 5861 fi 5862 5863 enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float' 5864 enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64' 5865 enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_headers msa.h || disable msa 5866 enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp' 5867 enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2' 5868 enabled msa && enabled msa2 && check_inline_asm_flags msa2 '"nxbits.any.b $w0, $w0"' '-mmsa2' && check_headers msa2.h || disable msa2 5869 5870 if enabled bigendian && enabled msa; then 5871 disable msa 5872 fi 5873 5874elif enabled parisc; then 5875 5876 if enabled gcc; then 5877 case $($cc -dumpversion) in 5878 4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;; 5879 esac 5880 fi 5881 5882elif enabled ppc; then 5883 5884 enable local_aligned 5885 5886 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)' 5887 check_inline_asm ibm_asm '"add 0, 0, 0"' 5888 check_inline_asm ppc4xx '"maclhw r10, r11, r12"' 5889 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)' 5890 5891 if enabled altivec; then 5892 check_cflags -maltivec -mabi=altivec 5893 5894 # check if our compiler supports Motorola AltiVec C API 5895 check_cc altivec altivec.h "vector signed int v1 = (vector signed int) { 0 }; 5896 vector signed int v2 = (vector signed int) { 1 }; 5897 v1 = vec_add(v1, v2);" 5898 5899 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag" 5900 fi 5901 5902 if enabled vsx; then 5903 check_cflags -mvsx && 5904 check_cc vsx altivec.h "int v[4] = { 0 }; 5905 vector signed int v1 = vec_vsx_ld(0, v);" 5906 fi 5907 5908 if enabled power8; then 5909 check_cpp_condition power8 "altivec.h" "defined(_ARCH_PWR8)" 5910 fi 5911 5912elif enabled x86; then 5913 5914 check_builtin rdtsc intrin.h "__rdtsc()" 5915 check_builtin mm_empty mmintrin.h "_mm_empty()" 5916 5917 enable local_aligned 5918 5919 # check whether EBP is available on x86 5920 # As 'i' is stored on the stack, this program will crash 5921 # if the base pointer is used to access it because the 5922 # base pointer is cleared in the inline assembly code. 5923 check_exec_crash <<EOF && enable ebp_available 5924volatile int i=0; 5925__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp"); 5926return i; 5927EOF 5928 5929 # check whether EBX is available on x86 5930 check_inline_asm ebx_available '""::"b"(0)' && 5931 check_inline_asm ebx_available '"":::"%ebx"' 5932 5933 # check whether xmm clobbers are supported 5934 check_inline_asm xmm_clobbers '"":::"%xmm0"' 5935 5936 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' || 5937 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"' 5938 5939 # check whether binutils is new enough to compile SSSE3/MMXEXT 5940 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"' 5941 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"' 5942 5943 probe_x86asm(){ 5944 x86asmexe_probe=$1 5945 if test_cmd $x86asmexe_probe -v; then 5946 x86asmexe=$x86asmexe_probe 5947 x86asm_type=nasm 5948 x86asm_debug="-g -F dwarf" 5949 X86ASMDEP= 5950 X86ASM_DEPFLAGS='-MD $(@:.o=.d)' 5951 elif test_cmd $x86asmexe_probe --version; then 5952 x86asmexe=$x86asmexe_probe 5953 x86asm_type=yasm 5954 x86asm_debug="-g dwarf2" 5955 X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)' 5956 X86ASM_DEPFLAGS= 5957 fi 5958 check_x86asm x86asm "movbe ecx, [5]" 5959 } 5960 5961 if ! disabled_any asm mmx x86asm; then 5962 disable x86asm 5963 for program in $x86asmexe nasm yasm; do 5964 probe_x86asm $program && break 5965 done 5966 disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build." 5967 X86ASMFLAGS="-f $objformat" 5968 enabled pic && append X86ASMFLAGS "-DPIC" 5969 test -n "$extern_prefix" && append X86ASMFLAGS "-DPREFIX" 5970 case "$objformat" in 5971 elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;; 5972 esac 5973 5974 enabled avx512 && check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0" 5975 enabled avx2 && check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0" 5976 enabled xop && check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3" 5977 enabled fma4 && check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3" 5978 check_x86asm cpunop "CPU amdnop" 5979 fi 5980 5981 case "$cpu" in 5982 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode) 5983 disable fast_clz 5984 ;; 5985 esac 5986 5987fi 5988 5989check_cc intrinsics_neon arm_neon.h "int16x8_t test = vdupq_n_s16(0)" 5990 5991check_ldflags -Wl,--as-needed 5992check_ldflags -Wl,-z,noexecstack 5993 5994if ! disabled network; then 5995 check_func getaddrinfo $network_extralibs 5996 check_func inet_aton $network_extralibs 5997 5998 check_type netdb.h "struct addrinfo" 5999 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE 6000 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE 6001 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE 6002 check_type poll.h "struct pollfd" 6003 check_type netinet/sctp.h "struct sctp_event_subscribe" 6004 check_struct "sys/socket.h" "struct msghdr" msg_flags 6005 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len 6006 check_type netinet/in.h "struct sockaddr_in6" 6007 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage" 6008 check_type "sys/types.h sys/socket.h" socklen_t 6009 6010 # Prefer arpa/inet.h over winsock2 6011 if check_headers arpa/inet.h ; then 6012 check_func closesocket 6013 elif check_headers winsock2.h ; then 6014 check_func_headers winsock2.h closesocket -lws2 && 6015 network_extralibs="-lws2" || 6016 { check_func_headers winsock2.h closesocket -lws2_32 && 6017 network_extralibs="-lws2_32"; } || disable winsock2_h network 6018 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs 6019 6020 check_type ws2tcpip.h socklen_t 6021 check_type ws2tcpip.h "struct addrinfo" 6022 check_type ws2tcpip.h "struct group_source_req" 6023 check_type ws2tcpip.h "struct ip_mreq_source" 6024 check_type ws2tcpip.h "struct ipv6_mreq" 6025 check_type winsock2.h "struct pollfd" 6026 check_struct winsock2.h "struct sockaddr" sa_len 6027 check_type ws2tcpip.h "struct sockaddr_in6" 6028 check_type ws2tcpip.h "struct sockaddr_storage" 6029 else 6030 disable network 6031 fi 6032fi 6033 6034check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)" 6035check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()" 6036check_builtin MemoryBarrier windows.h "MemoryBarrier()" 6037check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)" 6038check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)" 6039check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)" 6040check_builtin x264_csp_bgr "stdint.h x264.h" "X264_CSP_BGR" 6041 6042case "$custom_allocator" in 6043 jemalloc) 6044 # jemalloc by default does not use a prefix 6045 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc 6046 ;; 6047 tcmalloc) 6048 require_pkg_config libtcmalloc libtcmalloc gperftools/tcmalloc.h tc_malloc 6049 malloc_prefix=tc_ 6050 ;; 6051esac 6052 6053check_func_headers malloc.h _aligned_malloc && enable aligned_malloc 6054check_func ${malloc_prefix}memalign && enable memalign 6055check_func ${malloc_prefix}posix_memalign && enable posix_memalign 6056 6057check_func access 6058check_func_headers stdlib.h arc4random 6059check_lib clock_gettime time.h clock_gettime || check_lib clock_gettime time.h clock_gettime -lrt 6060check_func fcntl 6061check_func fork 6062check_func gethrtime 6063check_func getopt 6064check_func getrusage 6065check_func gettimeofday 6066check_func isatty 6067check_func mkstemp 6068check_func mmap 6069check_func mprotect 6070# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that 6071check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt 6072check_func sched_getaffinity 6073check_func setrlimit 6074check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE 6075check_func strerror_r 6076check_func sysconf 6077check_func sysctl 6078check_func usleep 6079 6080check_func_headers conio.h kbhit 6081check_func_headers io.h setmode 6082check_func_headers lzo/lzo1x.h lzo1x_999_compress 6083check_func_headers mach/mach_time.h mach_absolute_time 6084check_func_headers stdlib.h getenv 6085check_func_headers sys/stat.h lstat 6086 6087check_func_headers windows.h GetModuleHandle 6088check_func_headers windows.h GetProcessAffinityMask 6089check_func_headers windows.h GetProcessTimes 6090check_func_headers windows.h GetStdHandle 6091check_func_headers windows.h GetSystemTimeAsFileTime 6092check_func_headers windows.h LoadLibrary 6093check_func_headers windows.h MapViewOfFile 6094check_func_headers windows.h PeekNamedPipe 6095check_func_headers windows.h SetConsoleTextAttribute 6096check_func_headers windows.h SetConsoleCtrlHandler 6097check_func_headers windows.h SetDllDirectory 6098check_func_headers windows.h Sleep 6099check_func_headers windows.h VirtualAlloc 6100check_func_headers glob.h glob 6101enabled xlib && 6102 check_lib xlib "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext 6103 6104check_headers direct.h 6105check_headers dirent.h 6106check_headers dxgidebug.h 6107check_headers dxva.h 6108check_headers dxva2api.h -D_WIN32_WINNT=0x0600 6109check_headers io.h 6110check_headers linux/perf_event.h 6111check_headers libcrystalhd/libcrystalhd_if.h 6112check_headers malloc.h 6113check_headers mftransform.h 6114check_headers net/udplite.h 6115check_headers poll.h 6116check_headers sys/param.h 6117check_headers sys/resource.h 6118check_headers sys/select.h 6119check_headers sys/time.h 6120check_headers sys/un.h 6121check_headers termios.h 6122check_headers unistd.h 6123check_headers valgrind/valgrind.h 6124check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox 6125check_headers windows.h 6126check_headers X11/extensions/XvMClib.h 6127check_headers asm/types.h 6128 6129# it seems there are versions of clang in some distros that try to use the 6130# gcc headers, which explodes for stdatomic 6131# so we also check that atomics actually work here 6132check_builtin stdatomic stdatomic.h "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0); foo += bar" 6133 6134check_lib advapi32 "windows.h" RegCloseKey -ladvapi32 6135check_lib bcrypt "windows.h bcrypt.h" BCryptGenRandom -lbcrypt && 6136 check_cpp_condition bcrypt bcrypt.h "defined BCRYPT_RNG_ALGORITHM" 6137check_lib ole32 "windows.h" CoTaskMemFree -lole32 6138check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32 6139check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi 6140 6141check_lib android android/native_window.h ANativeWindow_acquire -landroid 6142check_lib mediandk "stdint.h media/NdkImage.h" AImage_delete -lmediandk 6143check_lib camera2ndk "stdbool.h stdint.h camera/NdkCameraManager.h" ACameraManager_create -lcamera2ndk 6144 6145enabled appkit && check_apple_framework AppKit 6146enabled audiotoolbox && check_apple_framework AudioToolbox 6147enabled avfoundation && check_apple_framework AVFoundation 6148enabled coreimage && check_apple_framework CoreImage 6149enabled videotoolbox && check_apple_framework VideoToolbox 6150 6151check_apple_framework CoreFoundation 6152check_apple_framework CoreMedia 6153check_apple_framework CoreVideo 6154 6155enabled avfoundation && { 6156 disable coregraphics applicationservices 6157 check_lib coregraphics CoreGraphics/CoreGraphics.h CGGetActiveDisplayList "-framework CoreGraphics" || 6158 check_lib applicationservices ApplicationServices/ApplicationServices.h CGGetActiveDisplayList "-framework ApplicationServices"; } 6159 6160enabled videotoolbox && { 6161 check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices" 6162 check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia" 6163 check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo" 6164 check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework CoreVideo" 6165 check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework CoreVideo" 6166 check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_Linear "-framework CoreVideo" 6167} 6168 6169check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss 6170 6171check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 6172check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 6173check_type "windows.h d3d11.h" "ID3D11VideoDecoder" 6174check_type "windows.h d3d11.h" "ID3D11VideoContext" 6175check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602 6176check_func_headers mfapi.h MFCreateAlignedMemoryBuffer -lmfplat 6177 6178check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC" 6179check_type "vdpau/vdpau.h" "VdpPictureInfoVP9" 6180 6181if [ -z "$nvccflags" ]; then 6182 nvccflags=$nvccflags_default 6183fi 6184 6185if enabled x86_64 || enabled ppc64 || enabled aarch64; then 6186 nvccflags="$nvccflags -m64" 6187else 6188 nvccflags="$nvccflags -m32" 6189fi 6190 6191if enabled cuda_nvcc; then 6192 nvccflags="$nvccflags -ptx" 6193else 6194 nvccflags="$nvccflags -S -nocudalib -nocudainc --cuda-device-only -include ${source_link}/compat/cuda/cuda_runtime.h" 6195 check_nvcc cuda_llvm 6196fi 6197 6198if ! disabled ffnvcodec; then 6199 ffnv_hdr_list="ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h" 6200 check_pkg_config ffnvcodec "ffnvcodec >= 9.1.23.1" "$ffnv_hdr_list" "" || \ 6201 check_pkg_config ffnvcodec "ffnvcodec >= 9.0.18.3 ffnvcodec < 9.1" "$ffnv_hdr_list" "" || \ 6202 check_pkg_config ffnvcodec "ffnvcodec >= 8.2.15.10 ffnvcodec < 8.3" "$ffnv_hdr_list" "" || \ 6203 check_pkg_config ffnvcodec "ffnvcodec >= 8.1.24.11 ffnvcodec < 8.2" "$ffnv_hdr_list" "" 6204fi 6205 6206check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" 6207 6208if ! disabled w32threads && ! enabled pthreads; then 6209 check_func_headers "windows.h process.h" _beginthreadex && 6210 check_type "windows.h" CONDITION_VARIABLE && 6211 check_type "windows.h" INIT_ONCE && 6212 enable w32threads || disable w32threads 6213 if ! enabled w32threads && enabled winrt; then 6214 check_func_headers "windows.h" CreateThread && 6215 enable w32threads || disable w32threads 6216 fi 6217fi 6218 6219# check for some common methods of building with pthread support 6220# do this before the optional library checks as some of them require pthreads 6221if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then 6222 if check_lib pthreads pthread.h pthread_join -pthread && 6223 check_lib pthreads pthread.h pthread_create -pthread; then 6224 add_cflags -pthread 6225 elif check_lib pthreads pthread.h pthread_join -pthreads && 6226 check_lib pthreads pthread.h pthread_create -pthreads; then 6227 add_cflags -pthreads 6228 elif check_lib pthreads pthread.h pthread_join -ldl -pthread && 6229 check_lib pthreads pthread.h pthread_create -ldl -pthread; then 6230 add_cflags -ldl -pthread 6231 elif check_lib pthreads pthread.h pthread_join -lpthreadGC2 && 6232 check_lib pthreads pthread.h pthread_create -lpthreadGC2; then 6233 : 6234 elif check_lib pthreads pthread.h pthread_join -lpthread && 6235 check_lib pthreads pthread.h pthread_create -lpthread; then 6236 : 6237 elif check_func pthread_join && check_func pthread_create; then 6238 enable pthreads 6239 fi 6240 check_cc pthreads "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" 6241 6242 if enabled pthreads; then 6243 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" $pthreads_extralibs 6244 check_func pthread_cancel $pthreads_extralibs 6245 fi 6246fi 6247 6248enabled zlib && { check_pkg_config zlib zlib "zlib.h" zlibVersion || 6249 check_lib zlib zlib.h zlibVersion -lz; } 6250enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2 6251enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma 6252 6253# On some systems dynamic loading requires no extra linker flags 6254check_lib libdl dlfcn.h "dlopen dlsym" || check_lib libdl dlfcn.h "dlopen dlsym" -ldl 6255 6256check_lib libm math.h sin -lm 6257 6258atan2f_args=2 6259copysign_args=2 6260hypot_args=2 6261ldexpf_args=2 6262powf_args=2 6263 6264for func in $MATH_FUNCS; do 6265 eval check_mathfunc $func \${${func}_args:-1} $libm_extralibs 6266done 6267 6268for func in $COMPLEX_FUNCS; do 6269 eval check_complexfunc $func \${${func}_args:-1} 6270done 6271 6272# these are off by default, so fail if requested and not available 6273enabled avisynth && require_headers "avisynth/avisynth_c.h" 6274enabled cuda_nvcc && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc."; } 6275enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint 6276enabled decklink && { require_headers DeckLinkAPI.h && 6277 { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink API version must be >= 10.9.5."; } } 6278enabled frei0r && require_headers "frei0r.h dlfcn.h" 6279enabled gmp && require gmp gmp.h mpz_export -lgmp 6280enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init 6281enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; } 6282enabled ladspa && require_headers "ladspa.h dlfcn.h" 6283enabled libaom && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version 6284enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new || 6285 { enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } || 6286 die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; } 6287enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new 6288enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883 6289enabled libass && require_pkg_config libass libass ass/ass.h ass_library_init 6290enabled libbluray && require_pkg_config libbluray libbluray libbluray/bluray.h bd_open 6291enabled libbs2b && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open 6292enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 && 6293 { check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 || 6294 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } 6295enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas 6296enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2 6297enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.4.0" "dav1d/dav1d.h" dav1d_version 6298enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open 6299enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new 6300enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion 6301enabled libfdk_aac && { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen || 6302 { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac && 6303 warn "using libfdk without pkg-config"; } } 6304flite_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" 6305enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs 6306enabled fontconfig && enable libfontconfig 6307enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit 6308enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType 6309enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info 6310enabled libglslang && require_cpp libglslang glslang/SPIRV/GlslangToSpv.h "glslang::TIntermediate*" -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ 6311enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu || 6312 require libgme gme/gme.h gme_new_emu -lgme -lstdc++; } 6313enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do 6314 check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break; 6315 done || die "ERROR: libgsm not found"; } 6316enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc $pthreads_extralibs 6317enabled libklvanc && require libklvanc libklvanc/vanc.h klvanc_context_create -lklvanc 6318enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get 6319enabled liblensfun && require_pkg_config liblensfun lensfun lensfun.h lf_db_new 6320# While it may appear that require is being used as a pkg-config 6321# fallback for libmfx, it is actually being used to detect a different 6322# installation route altogether. If libmfx is installed via the Intel 6323# Media SDK or Intel Media Server Studio, these don't come with 6324# pkg-config support. Instead, users should make sure that the build 6325# can find the libraries and headers through other means. 6326enabled libmfx && { check_pkg_config libmfx libmfx "mfx/mfxvideo.h" MFXInit || 6327 { require libmfx "mfx/mfxvideo.h" MFXInit "-llibmfx $advapi32_extralibs" && warn "using libmfx without pkg-config"; } } 6328if enabled libmfx; then 6329 check_cc MFX_CODEC_VP9 "mfx/mfxvp9.h mfx/mfxstructures.h" "MFX_CODEC_VP9" 6330fi 6331 6332enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load 6333enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs 6334enabled libmysofa && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine || 6335 require libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine -lmysofa $zlib_extralibs; } 6336enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc -lnppidei || 6337 check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc -lnppidei || 6338 die "ERROR: libnpp not found"; } 6339enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb 6340enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb 6341enabled libopencv && { check_headers opencv2/core/core_c.h && 6342 { check_pkg_config libopencv opencv opencv2/core/core_c.h cvCreateImageHeader || 6343 require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } || 6344 require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; } 6345enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion 6346enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version || 6347 { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } } 6348enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++" 6349enabled libopus && { 6350 enabled libopus_decoder && { 6351 require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create 6352 } 6353 enabled libopus_encoder && { 6354 require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create 6355 } 6356} 6357enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new 6358enabled librabbitmq && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection 6359enabled librav1e && require_pkg_config librav1e "rav1e >= 0.1.0" rav1e.h rav1e_context_new 6360enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo 6361enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket 6362enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++" 6363enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer 6364enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init || 6365 require libsmbclient libsmbclient.h smbc_init -lsmbclient; } 6366enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy -lstdc++ 6367enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr 6368enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init 6369enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init 6370enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket 6371enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow 6372enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate 6373enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg 6374enabled libtls && require_pkg_config libtls libtls tls.h tls_configure 6375enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame && 6376 { check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame || 6377 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; } 6378enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl 6379enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit 6380enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.3.9" libvmaf.h compute_vmaf 6381enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc 6382enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init && 6383 require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init 6384 6385enabled libvpx && { 6386 enabled libvpx_vp8_decoder && { 6387 check_pkg_config libvpx_vp8_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx || 6388 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" 6389 } 6390 enabled libvpx_vp8_encoder && { 6391 check_pkg_config libvpx_vp8_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx || 6392 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" 6393 } 6394 enabled libvpx_vp9_decoder && { 6395 check_pkg_config libvpx_vp9_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx || 6396 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" 6397 } 6398 enabled libvpx_vp9_encoder && { 6399 check_pkg_config libvpx_vp9_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx || 6400 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" 6401 } 6402 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then 6403 die "libvpx enabled but no supported decoders found" 6404 fi 6405} 6406 6407enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack 6408enabled libwebp && { 6409 enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion 6410 enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; } 6411enabled libx264 && { check_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode || 6412 { require libx264 "stdint.h x264.h" x264_encoder_encode "-lx264 $pthreads_extralibs $libm_extralibs" && 6413 warn "using libx264 without pkg-config"; } } && 6414 require_cpp_condition libx264 x264.h "X264_BUILD >= 118" && 6415 check_cpp_condition libx262 x264.h "X264_MPEG2" 6416enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get && 6417 require_cpp_condition libx265 x265.h "X265_BUILD >= 70" 6418enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs" 6419enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.3.0" "stdint.h xavs2.h" xavs2_api_get 6420enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore 6421enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version 6422enabled libzmq && require_pkg_config libzmq "libzmq >= 4.2.1" zmq.h zmq_ctx_new 6423enabled libzvbi && require_pkg_config libzvbi zvbi-0.2 libzvbi.h vbi_decoder_new && 6424 { test_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" || 6425 enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; } 6426enabled libxml2 && require_pkg_config libxml2 libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion 6427enabled mbedtls && { check_pkg_config mbedtls mbedtls mbedtls/x509_crt.h mbedtls_x509_crt_init || 6428 check_pkg_config mbedtls mbedtls mbedtls/ssl.h mbedtls_ssl_init || 6429 check_lib mbedtls mbedtls/ssl.h mbedtls_ssl_init -lmbedtls -lmbedx509 -lmbedcrypto || 6430 die "ERROR: mbedTLS not found"; } 6431enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; } 6432enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host || 6433 { ! enabled cross_compile && 6434 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline && 6435 add_ldflags -L/opt/vc/lib/ && 6436 check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } || 6437 die "ERROR: mmal not found" && 6438 check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; } 6439enabled openal && { { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do 6440 check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } || 6441 die "ERROR: openal not found"; } && 6442 { test_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" || 6443 die "ERROR: openal must be installed and version must be 1.1 or compatible"; } 6444enabled opencl && { check_pkg_config opencl OpenCL CL/cl.h clEnqueueNDRangeKernel || 6445 check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL || 6446 check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL || 6447 die "ERROR: opencl not found"; } && 6448 { test_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" || 6449 test_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" || 6450 die "ERROR: opencl must be installed and version must be 1.2 or compatible"; } 6451enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" || 6452 check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" || 6453 check_lib opengl OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" || 6454 check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" || 6455 die "ERROR: opengl not found." 6456 } 6457enabled omx_rpi && { test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame || 6458 { ! enabled cross_compile && 6459 add_cflags -isystem/opt/vc/include/IL && 6460 test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame; } || 6461 die "ERROR: OpenMAX IL headers from raspberrypi/firmware not found"; } && 6462 enable omx 6463enabled omx && require_headers OMX_Core.h 6464enabled openssl && { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl || 6465 check_pkg_config openssl openssl openssl/ssl.h SSL_library_init || 6466 check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto || 6467 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto || 6468 check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 || 6469 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 || 6470 die "ERROR: openssl not found"; } 6471enabled pocketsphinx && require_pkg_config pocketsphinx pocketsphinx pocketsphinx/pocketsphinx.h ps_init 6472enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/rk_mpi.h mpp_create && 6473 require_pkg_config rockchip_mpp "rockchip_mpp >= 1.3.7" rockchip/rk_mpi.h mpp_create && 6474 { enabled libdrm || 6475 die "ERROR: rkmpp requires --enable-libdrm"; } 6476 } 6477enabled vapoursynth && require_pkg_config vapoursynth "vapoursynth-script >= 42" VSScript.h vsscript_init 6478 6479 6480if enabled gcrypt; then 6481 GCRYPT_CONFIG="${cross_prefix}libgcrypt-config" 6482 if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then 6483 gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags) 6484 gcrypt_extralibs=$("${GCRYPT_CONFIG}" --libs) 6485 check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs || 6486 die "ERROR: gcrypt not found" 6487 add_cflags $gcrypt_cflags 6488 else 6489 require gcrypt gcrypt.h gcry_mpi_new -lgcrypt 6490 fi 6491fi 6492 6493if enabled sdl2; then 6494 SDL2_CONFIG="${cross_prefix}sdl2-config" 6495 test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 2.1.0" SDL_events.h SDL_PollEvent 6496 if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then 6497 sdl2_cflags=$("${SDL2_CONFIG}" --cflags) 6498 sdl2_extralibs=$("${SDL2_CONFIG}" --libs) 6499 test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags && 6500 test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags && 6501 check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags && 6502 enable sdl2 6503 fi 6504 if test $target_os = "mingw32"; then 6505 sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs) 6506 fi 6507fi 6508 6509if enabled decklink; then 6510 case $target_os in 6511 mingw32*|mingw64*|win32|win64) 6512 decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32" 6513 decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32" 6514 ;; 6515 esac 6516fi 6517 6518enabled securetransport && 6519 check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && 6520 check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" || 6521 disable securetransport 6522 6523enabled securetransport && 6524 check_func SecItemImport "-Wl,-framework,CoreFoundation -Wl,-framework,Security" 6525 6526enabled schannel && 6527 check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 && 6528 test_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" && 6529 schannel_extralibs="-lsecur32" || 6530 disable schannel 6531 6532makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo 6533enabled makeinfo \ 6534 && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \ 6535 && enable makeinfo_html || disable makeinfo_html 6536disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html 6537perl -v > /dev/null 2>&1 && enable perl || disable perl 6538pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man 6539rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout 6540 6541# check V4L2 codecs available in the API 6542if enabled v4l2_m2m; then 6543 check_headers linux/fb.h 6544 check_headers linux/videodev2.h 6545 test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete 6546 check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;" 6547 check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;" 6548 check_cc mpeg1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG1;" 6549 check_cc mpeg2_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG2;" 6550 check_cc mpeg4_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG4;" 6551 check_cc hevc_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_HEVC;" 6552 check_cc h263_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H263;" 6553 check_cc h264_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H264;" 6554 check_cc vp8_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP8;" 6555 check_cc vp9_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP9;" 6556fi 6557 6558check_headers sys/videoio.h 6559test_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete 6560 6561check_lib user32 "windows.h winuser.h" GetShellWindow -luser32 6562check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32 6563# check that WM_CAP_DRIVER_CONNECT is defined to the proper value 6564# w32api 3.12 had it defined wrong 6565check_cpp_condition vfwcap_defines vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" 6566 6567check_type "dshow.h" IBaseFilter 6568 6569# check for ioctl_meteor.h, ioctl_bt848.h and alternatives 6570check_headers "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h" || 6571 check_headers "machine/ioctl_meteor.h machine/ioctl_bt848.h" || 6572 check_headers "dev/video/meteor/ioctl_meteor.h dev/video/bktr/ioctl_bt848.h" || 6573 check_headers "dev/ic/bt8xx.h" 6574 6575if check_struct sys/soundcard.h audio_buf_info bytes; then 6576 enable_sanitized sys/soundcard.h 6577else 6578 test_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_sanitized sys/soundcard.h 6579 #include <sys/soundcard.h> 6580 audio_buf_info abc; 6581EOF 6582fi 6583 6584enabled alsa && { check_pkg_config alsa alsa "alsa/asoundlib.h" snd_pcm_htimestamp || 6585 check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound; } 6586 6587enabled libjack && 6588 require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range 6589 6590enabled sndio && check_lib sndio sndio.h sio_open -lsndio 6591 6592if enabled libcdio; then 6593 check_pkg_config libcdio libcdio_paranoia "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open || 6594 check_pkg_config libcdio libcdio_paranoia "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open || 6595 check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || 6596 check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || 6597 die "ERROR: No usable libcdio/cdparanoia found" 6598fi 6599 6600enabled libxcb && check_pkg_config libxcb "xcb >= 1.4" xcb/xcb.h xcb_connect || 6601 disable libxcb_shm libxcb_shape libxcb_xfixes 6602 6603if enabled libxcb; then 6604 enabled libxcb_shm && check_pkg_config libxcb_shm xcb-shm xcb/shm.h xcb_shm_attach 6605 enabled libxcb_shape && check_pkg_config libxcb_shape xcb-shape xcb/shape.h xcb_shape_get_rectangles 6606 enabled libxcb_xfixes && check_pkg_config libxcb_xfixes xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image 6607fi 6608 6609check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs" 6610 6611# d3d11va requires linking directly to dxgi and d3d11 if not building for 6612# the desktop api partition 6613test_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11" 6614#ifdef WINAPI_FAMILY 6615#include <winapifamily.h> 6616#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 6617#error desktop, not uwp 6618#else 6619// WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP 6620#endif 6621#else 6622#error no family set 6623#endif 6624EOF 6625 6626enabled vaapi && 6627 check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize 6628 6629if enabled vaapi; then 6630 check_pkg_config vaapi_drm "libva-drm" "va/va_drm.h" vaGetDisplayDRM 6631 6632 if enabled xlib; then 6633 check_pkg_config vaapi_x11 "libva-x11" "va/va_x11.h" vaGetDisplay 6634 fi 6635 6636 check_cpp_condition vaapi_1 "va/va.h" "VA_CHECK_VERSION(1, 0, 0)" 6637 6638 check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC" 6639 check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth 6640 check_type "va/va.h va/va_vpp.h" "VAProcFilterParameterBufferHDRToneMapping" 6641 check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" rotation_flags 6642 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC" 6643 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG" 6644 check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8" 6645 check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9" 6646fi 6647 6648if enabled_all opencl libdrm ; then 6649 check_type "CL/cl_intel.h" "clCreateImageFromFdINTEL_fn" && 6650 enable opencl_drm_beignet 6651 check_func_headers "CL/cl_ext.h" clImportMemoryARM && 6652 enable opencl_drm_arm 6653fi 6654 6655if enabled_all opencl vaapi ; then 6656 if enabled opencl_drm_beignet ; then 6657 enable opencl_vaapi_beignet 6658 else 6659 check_type "CL/cl.h CL/cl_va_api_media_sharing_intel.h" "clCreateFromVA_APIMediaSurfaceINTEL_fn" && 6660 enable opencl_vaapi_intel_media 6661 fi 6662fi 6663 6664if enabled_all opencl dxva2 ; then 6665 check_type "CL/cl_dx9_media_sharing.h" cl_dx9_surface_info_khr && 6666 enable opencl_dxva2 6667fi 6668 6669if enabled_all opencl d3d11va ; then 6670 check_type "CL/cl_d3d11.h" clGetDeviceIDsFromD3D11KHR_fn && 6671 enable opencl_d3d11 6672fi 6673 6674enabled vdpau && 6675 check_cpp_condition vdpau vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" 6676 6677enabled vdpau && 6678 check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11 6679 6680enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd 6681 6682enabled vulkan && 6683 require_pkg_config vulkan "vulkan >= 1.1.97" "vulkan/vulkan.h" vkCreateInstance 6684 6685if enabled x86; then 6686 case $target_os in 6687 mingw32*|mingw64*|win32|win64|linux|cygwin*) 6688 ;; 6689 *) 6690 disable ffnvcodec cuvid nvdec nvenc 6691 ;; 6692 esac 6693elif enabled_any aarch64 ppc64 && ! enabled bigendian; then 6694 case $target_os in 6695 linux) 6696 ;; 6697 *) 6698 disable ffnvcodec cuvid nvdec nvenc 6699 ;; 6700 esac 6701else 6702 disable ffnvcodec cuvid nvdec nvenc 6703fi 6704 6705enabled ffnvcodec && enable cuda 6706 6707enabled nvenc && 6708 test_cc -I$source_path <<EOF || disable nvenc 6709#include <ffnvcodec/nvEncodeAPI.h> 6710NV_ENCODE_API_FUNCTION_LIST flist; 6711void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; } 6712int main(void) { return 0; } 6713EOF 6714 6715enabled amf && 6716 check_cpp_condition amf "AMF/core/Version.h" \ 6717 "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400090000" 6718 6719# Funny iconv installations are not unusual, so check it after all flags have been set 6720if enabled libc_iconv; then 6721 check_func_headers iconv.h iconv 6722elif enabled iconv; then 6723 check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv 6724fi 6725 6726enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" 6727 6728# add some useful compiler flags if supported 6729check_cflags -Wdeclaration-after-statement 6730check_cflags -Wall 6731check_cflags -Wdisabled-optimization 6732check_cflags -Wpointer-arith 6733check_cflags -Wredundant-decls 6734check_cflags -Wwrite-strings 6735check_cflags -Wtype-limits 6736check_cflags -Wundef 6737check_cflags -Wmissing-prototypes 6738check_cflags -Wno-pointer-to-int-cast 6739check_cflags -Wstrict-prototypes 6740check_cflags -Wempty-body 6741 6742if enabled extra_warnings; then 6743 check_cflags -Wcast-qual 6744 check_cflags -Wextra 6745 check_cflags -Wpedantic 6746fi 6747 6748check_disable_warning(){ 6749 warning_flag=-W${1#-Wno-} 6750 test_cflags $unknown_warning_flags $warning_flag && add_cflags $1 6751} 6752 6753test_cflags -Werror=unused-command-line-argument && 6754 append unknown_warning_flags "-Werror=unused-command-line-argument" 6755test_cflags -Werror=unknown-warning-option && 6756 append unknown_warning_flags "-Werror=unknown-warning-option" 6757 6758check_disable_warning -Wno-parentheses 6759check_disable_warning -Wno-switch 6760check_disable_warning -Wno-format-zero-length 6761check_disable_warning -Wno-pointer-sign 6762check_disable_warning -Wno-unused-const-variable 6763check_disable_warning -Wno-bool-operation 6764check_disable_warning -Wno-char-subscripts 6765 6766check_disable_warning_headers(){ 6767 warning_flag=-W${1#-Wno-} 6768 test_cflags $warning_flag && add_cflags_headers $1 6769} 6770 6771check_disable_warning_headers -Wno-deprecated-declarations 6772check_disable_warning_headers -Wno-unused-variable 6773 6774test_cc <<EOF && enable blocks_extension 6775void (^block)(void); 6776EOF 6777 6778# add some linker flags 6779check_ldflags -Wl,--warn-common 6780check_ldflags -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample 6781enabled rpath && add_ldexeflags -Wl,-rpath,$libdir && add_ldsoflags -Wl,-rpath,$libdir 6782test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic 6783 6784# add some strip flags 6785check_stripflags -x 6786 6787enabled neon_clobber_test && 6788 check_ldflags -Wl,--wrap,avcodec_open2 \ 6789 -Wl,--wrap,avcodec_decode_audio4 \ 6790 -Wl,--wrap,avcodec_decode_video2 \ 6791 -Wl,--wrap,avcodec_decode_subtitle2 \ 6792 -Wl,--wrap,avcodec_encode_audio2 \ 6793 -Wl,--wrap,avcodec_encode_video2 \ 6794 -Wl,--wrap,avcodec_encode_subtitle \ 6795 -Wl,--wrap,avcodec_send_packet \ 6796 -Wl,--wrap,avcodec_receive_packet \ 6797 -Wl,--wrap,avcodec_send_frame \ 6798 -Wl,--wrap,avcodec_receive_frame \ 6799 -Wl,--wrap,swr_convert \ 6800 -Wl,--wrap,avresample_convert || 6801 disable neon_clobber_test 6802 6803enabled xmm_clobber_test && 6804 check_ldflags -Wl,--wrap,avcodec_open2 \ 6805 -Wl,--wrap,avcodec_decode_audio4 \ 6806 -Wl,--wrap,avcodec_decode_video2 \ 6807 -Wl,--wrap,avcodec_decode_subtitle2 \ 6808 -Wl,--wrap,avcodec_encode_audio2 \ 6809 -Wl,--wrap,avcodec_encode_video2 \ 6810 -Wl,--wrap,avcodec_encode_subtitle \ 6811 -Wl,--wrap,avcodec_send_packet \ 6812 -Wl,--wrap,avcodec_receive_packet \ 6813 -Wl,--wrap,avcodec_send_frame \ 6814 -Wl,--wrap,avcodec_receive_frame \ 6815 -Wl,--wrap,swr_convert \ 6816 -Wl,--wrap,avresample_convert \ 6817 -Wl,--wrap,sws_scale || 6818 disable xmm_clobber_test 6819 6820check_ld "cc" proper_dce <<EOF 6821extern const int array[512]; 6822static inline int func(void) { return array[0]; } 6823int main(void) { return 0; } 6824EOF 6825 6826if enabled proper_dce; then 6827 echo "X { local: *; };" > $TMPV 6828 if test_ldflags -Wl,${version_script},$TMPV; then 6829 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver' 6830 quotes='""' 6831 test_cc <<EOF && enable symver_asm_label 6832void ff_foo(void) __asm__ ("av_foo@VERSION"); 6833void ff_foo(void) { ${inline_asm+__asm__($quotes);} } 6834EOF 6835 test_cc <<EOF && enable symver_gnu_asm 6836__asm__(".symver ff_foo,av_foo@VERSION"); 6837void ff_foo(void) {} 6838EOF 6839 fi 6840fi 6841 6842if [ -z "$optflags" ]; then 6843 if enabled small; then 6844 optflags=$cflags_size 6845 elif enabled optimizations; then 6846 optflags=$cflags_speed 6847 else 6848 optflags=$cflags_noopt 6849 fi 6850fi 6851 6852check_optflags(){ 6853 check_cflags "$@" 6854 enabled lto && check_ldflags "$@" 6855} 6856 6857check_optflags $optflags 6858check_optflags -fno-math-errno 6859check_optflags -fno-signed-zeros 6860 6861if enabled lto; then 6862 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker" 6863 check_cflags -flto 6864 check_ldflags -flto $cpuflags 6865 disable inline_asm_direct_symbol_refs 6866fi 6867 6868enabled ftrapv && check_cflags -ftrapv 6869 6870test_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone" 6871int x; 6872EOF 6873 6874 6875if enabled icc; then 6876 # Just warnings, no remarks 6877 check_cflags -w1 6878 # -wd: Disable following warnings 6879 # 144, 167, 556: -Wno-pointer-sign 6880 # 188: enumerated type mixed with another type 6881 # 1292: attribute "foo" ignored 6882 # 1419: external declaration in primary source file 6883 # 10006: ignoring unknown option -fno-signed-zeros 6884 # 10148: ignoring unknown option -Wno-parentheses 6885 # 10156: ignoring option '-W'; no argument required 6886 # 13200: No EMMS instruction before call to function 6887 # 13203: No EMMS instruction before return from function 6888 check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203 6889 # 11030: Warning unknown option --as-needed 6890 # 10156: ignoring option '-export'; no argument required 6891 check_ldflags -wd10156,11030 6892 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test 6893 enable ebp_available 6894 # The test above does not test linking 6895 enabled lto && disable symver_asm_label 6896 if enabled x86_32; then 6897 icc_version=$($cc -dumpversion) 6898 test ${icc_version%%.*} -ge 11 && 6899 check_cflags -falign-stack=maintain-16-byte || 6900 disable aligned_stack 6901 fi 6902elif enabled gcc; then 6903 check_optflags -fno-tree-vectorize 6904 check_cflags -Werror=format-security 6905 check_cflags -Werror=implicit-function-declaration 6906 check_cflags -Werror=missing-prototypes 6907 check_cflags -Werror=return-type 6908 check_cflags -Werror=vla 6909 check_cflags -Wformat 6910 check_cflags -fdiagnostics-color=auto 6911 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized 6912 if enabled x86_32; then 6913 case $target_os in 6914 *bsd*) 6915 # BSDs don't guarantee a 16 byte aligned stack, but we can 6916 # request GCC to try to maintain 16 byte alignment throughout 6917 # function calls. Library entry points that might call assembly 6918 # functions align the stack. (The parameter means 2^4 bytes.) 6919 check_cflags -mpreferred-stack-boundary=4 6920 ;; 6921 esac 6922 fi 6923elif enabled llvm_gcc; then 6924 check_cflags -mllvm -stack-alignment=16 6925elif enabled clang; then 6926 if enabled x86_32; then 6927 # Clang doesn't support maintaining alignment without assuming the 6928 # same alignment in every function. If 16 byte alignment would be 6929 # enabled, one would also have to either add attribute_align_arg on 6930 # every single entry point into the libraries or enable -mstackrealign 6931 # (doing stack realignment in every single function). 6932 case $target_os in 6933 mingw32|win32|*bsd*) 6934 disable aligned_stack 6935 ;; 6936 *) 6937 check_cflags -mllvm -stack-alignment=16 6938 check_cflags -mstack-alignment=16 6939 ;; 6940 esac 6941 else 6942 check_cflags -mllvm -stack-alignment=16 6943 check_cflags -mstack-alignment=16 6944 fi 6945 check_cflags -Qunused-arguments 6946 check_cflags -Werror=implicit-function-declaration 6947 check_cflags -Werror=missing-prototypes 6948 check_cflags -Werror=return-type 6949elif enabled cparser; then 6950 add_cflags -Wno-missing-variable-declarations 6951 add_cflags -Wno-empty-statement 6952elif enabled armcc; then 6953 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat 6954 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir 6955 # 2523: use of inline assembly is deprecated 6956 add_cflags -W${armcc_opt},--diag_suppress=2523 6957 add_cflags -W${armcc_opt},--diag_suppress=1207 6958 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition 6959 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat 6960 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign 6961 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign 6962elif enabled pathscale; then 6963 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF 6964 disable inline_asm 6965elif enabled_any msvc icl; then 6966 enabled x86_32 && disable aligned_stack 6967 enabled_all x86_32 debug && add_cflags -Oy- 6968 enabled debug && add_ldflags -debug 6969 enable pragma_deprecated 6970 if enabled icl; then 6971 # -Qansi-alias is basically -fstrict-aliasing, but does not work 6972 # (correctly) on icl 13.x. 6973 test_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" && 6974 add_cflags -Qansi-alias 6975 # Some inline asm is not compilable in debug 6976 if enabled debug; then 6977 disable ebp_available 6978 disable ebx_available 6979 fi 6980 fi 6981 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2. 6982 check_cpp_condition log2 crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" 6983 # The CRT headers contain __declspec(restrict) in a few places, but if redefining 6984 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict) 6985 # (as it ends up if the restrict redefine is done before including stdlib.h), while 6986 # MSVC 2013 and newer can handle it fine. 6987 # If this declspec fails, force including stdlib.h before the restrict redefinition 6988 # happens in config.h. 6989 if [ $restrict_keyword != restrict ]; then 6990 test_cc <<EOF || add_cflags -FIstdlib.h 6991__declspec($restrict_keyword) void *foo(int); 6992EOF 6993 fi 6994 # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code 6995 # Issue has been fixed in MSVC v19.00.24218. 6996 test_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" || 6997 check_cflags -d2SSAOptimizer- 6998 # enable utf-8 source processing on VS2015 U2 and newer 6999 test_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" && 7000 add_cflags -utf-8 7001fi 7002 7003for pfx in "" host_; do 7004 varname=${pfx%_}cc_type 7005 eval "type=\$$varname" 7006 if [ "$type" = "msvc" ]; then 7007 test_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline 7008static inline int foo(int a) { return a; } 7009EOF 7010 fi 7011done 7012 7013case $as_type in 7014 clang) 7015 add_asflags -Qunused-arguments 7016 ;; 7017esac 7018 7019case $ld_type in 7020 clang) 7021 check_ldflags -Qunused-arguments 7022 ;; 7023esac 7024 7025enable frame_thread_encoder 7026 7027enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; } 7028 7029check_deps $CONFIG_LIST \ 7030 $CONFIG_EXTRA \ 7031 $HAVE_LIST \ 7032 $ALL_COMPONENTS \ 7033 7034enabled 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" 7035enabled avresample && warn "Building with deprecated library libavresample" 7036 7037case $target_os in 7038haiku) 7039 disable memalign 7040 disable posix_memalign 7041 ;; 7042*-dos|freedos|opendos) 7043 if test_cpp_condition sys/version.h "defined(__DJGPP__) && __DJGPP__ == 2 && __DJGPP_MINOR__ == 5"; then 7044 disable memalign 7045 fi 7046 ;; 7047esac 7048 7049flatten_extralibs(){ 7050 nested_entries= 7051 list_name=$1 7052 eval list=\$${1} 7053 for entry in $list; do 7054 entry_copy=$entry 7055 resolve entry_copy 7056 flat_entries= 7057 for e in $entry_copy; do 7058 case $e in 7059 *_extralibs) nested_entries="$nested_entries$e ";; 7060 *) flat_entries="$flat_entries$e ";; 7061 esac 7062 done 7063 eval $entry="\$flat_entries" 7064 done 7065 append $list_name "$nested_entries" 7066 7067 resolve nested_entries 7068 if test -n "$(filter '*_extralibs' $nested_entries)"; then 7069 flatten_extralibs $list_name 7070 fi 7071} 7072 7073flatten_extralibs_wrapper(){ 7074 list_name=$1 7075 flatten_extralibs $list_name 7076 unique $list_name 7077 resolve $list_name 7078 eval $list_name=\$\(\$ldflags_filter \$$list_name\) 7079 eval printf \''%s'\' \""\$$list_name"\" 7080} 7081 7082for linkunit in $LIBRARY_LIST; do 7083 unset current_extralibs 7084 eval components=\$$(toupper ${linkunit})_COMPONENTS_LIST 7085 for comp in ${components}; do 7086 enabled $comp || continue 7087 comp_extralibs="${comp}_extralibs" 7088 append current_extralibs $comp_extralibs 7089 done 7090 eval prepend ${linkunit}_extralibs $current_extralibs 7091done 7092 7093for linkunit in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do 7094 eval ${linkunit}_extralibs=\$\(flatten_extralibs_wrapper ${linkunit}_extralibs\) 7095done 7096 7097map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST 7098 7099for thread in $THREADS_LIST; do 7100 if enabled $thread; then 7101 test -n "$thread_type" && 7102 die "ERROR: Only one thread type must be selected." || 7103 thread_type="$thread" 7104 fi 7105done 7106 7107if disabled stdatomic; then 7108 if enabled atomics_gcc; then 7109 add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc' 7110 elif enabled atomics_win32; then 7111 add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32' 7112 elif enabled atomics_suncc; then 7113 add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc' 7114 elif enabled pthreads; then 7115 add_compat atomics/pthread/stdatomic.o 7116 add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread' 7117 else 7118 enabled threads && die "Threading is enabled, but no atomics are available" 7119 add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy' 7120 fi 7121fi 7122 7123# Check if requested libraries were found. 7124for lib in $AUTODETECT_LIBS; do 7125 requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found"; 7126done 7127 7128enabled zlib && add_cppflags -DZLIB_CONST 7129 7130# conditional library dependencies, in any order 7131enabled afftdn_filter && prepend avfilter_deps "avcodec" 7132enabled afftfilt_filter && prepend avfilter_deps "avcodec" 7133enabled afir_filter && prepend avfilter_deps "avcodec" 7134enabled amovie_filter && prepend avfilter_deps "avformat avcodec" 7135enabled aresample_filter && prepend avfilter_deps "swresample" 7136enabled atempo_filter && prepend avfilter_deps "avcodec" 7137enabled bm3d_filter && prepend avfilter_deps "avcodec" 7138enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec" 7139enabled convolve_filter && prepend avfilter_deps "avcodec" 7140enabled deconvolve_filter && prepend avfilter_deps "avcodec" 7141enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample" 7142enabled elbg_filter && prepend avfilter_deps "avcodec" 7143enabled fftfilt_filter && prepend avfilter_deps "avcodec" 7144enabled find_rect_filter && prepend avfilter_deps "avformat avcodec" 7145enabled firequalizer_filter && prepend avfilter_deps "avcodec" 7146enabled mcdeint_filter && prepend avfilter_deps "avcodec" 7147enabled movie_filter && prepend avfilter_deps "avformat avcodec" 7148enabled pan_filter && prepend avfilter_deps "swresample" 7149enabled pp_filter && prepend avfilter_deps "postproc" 7150enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale" 7151enabled resample_filter && prepend avfilter_deps "avresample" 7152enabled sab_filter && prepend avfilter_deps "swscale" 7153enabled scale_filter && prepend avfilter_deps "swscale" 7154enabled scale2ref_filter && prepend avfilter_deps "swscale" 7155enabled sofalizer_filter && prepend avfilter_deps "avcodec" 7156enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale" 7157enabled showfreqs_filter && prepend avfilter_deps "avcodec" 7158enabled showspectrum_filter && prepend avfilter_deps "avcodec" 7159enabled signature_filter && prepend avfilter_deps "avcodec avformat" 7160enabled smartblur_filter && prepend avfilter_deps "swscale" 7161enabled spectrumsynth_filter && prepend avfilter_deps "avcodec" 7162enabled spp_filter && prepend avfilter_deps "avcodec" 7163enabled sr_filter && prepend avfilter_deps "avformat swscale" 7164enabled subtitles_filter && prepend avfilter_deps "avformat avcodec" 7165enabled uspp_filter && prepend avfilter_deps "avcodec" 7166enabled zoompan_filter && prepend avfilter_deps "swscale" 7167 7168enabled lavfi_indev && prepend avdevice_deps "avfilter" 7169 7170#FIXME 7171enabled_any sdl2_outdev opengl_outdev && enabled sdl2 && 7172 add_cflags $(filter_out '-Dmain=SDL_main' $sdl2_cflags) 7173 7174enabled opus_decoder && prepend avcodec_deps "swresample" 7175 7176# reorder the items at var $1 to align with the items order at var $2 . 7177# die if an item at $1 is not at $2 . 7178reorder_by(){ 7179 eval rb_in=\$$1 7180 eval rb_ordered=\$$2 7181 7182 for rb in $rb_in; do 7183 is_in $rb $rb_ordered || die "$rb at \$$1 is not at \$$2" 7184 done 7185 7186 rb_out= 7187 for rb in $rb_ordered; do 7188 is_in $rb $rb_in && rb_out="$rb_out$rb " 7189 done 7190 eval $1=\$rb_out 7191} 7192 7193# deps-expand fflib $1: N x {append all expanded deps; unique} 7194# within a set of N items, N expansions are enough to expose a cycle. 7195expand_deps(){ 7196 unique ${1}_deps # required for the early break test. 7197 for dummy in $LIBRARY_LIST; do # N iteratios 7198 eval deps=\$${1}_deps 7199 append ${1}_deps $(map 'eval echo \$${v}_deps' $deps) 7200 unique ${1}_deps 7201 eval '[ ${#deps} = ${#'${1}_deps'} ]' && break # doesn't expand anymore 7202 done 7203 7204 eval is_in $1 \$${1}_deps && die "Dependency cycle at ${1}_deps" 7205 reorder_by ${1}_deps LIBRARY_LIST # linking order is expected later 7206} 7207 7208#we have to remove gpl from the deps here as some code assumes all lib deps are libs 7209postproc_deps="$(filter_out 'gpl' $postproc_deps)" 7210 7211map 'expand_deps $v' $LIBRARY_LIST 7212 7213if test "$quiet" != "yes"; then 7214 7215echo "install prefix $prefix" 7216echo "source path $source_path" 7217echo "C compiler $cc" 7218echo "C library $libc_type" 7219if test "$host_cc" != "$cc"; then 7220 echo "host C compiler $host_cc" 7221 echo "host C library $host_libc_type" 7222fi 7223echo "ARCH $arch ($cpu)" 7224if test "$build_suffix" != ""; then 7225 echo "build suffix $build_suffix" 7226fi 7227if test "$progs_suffix" != ""; then 7228 echo "progs suffix $progs_suffix" 7229fi 7230if test "$extra_version" != ""; then 7231 echo "version string suffix $extra_version" 7232fi 7233echo "big-endian ${bigendian-no}" 7234echo "runtime cpu detection ${runtime_cpudetect-no}" 7235if enabled x86; then 7236 echo "standalone assembly ${x86asm-no}" 7237 echo "x86 assembler ${x86asmexe}" 7238 echo "MMX enabled ${mmx-no}" 7239 echo "MMXEXT enabled ${mmxext-no}" 7240 echo "3DNow! enabled ${amd3dnow-no}" 7241 echo "3DNow! extended enabled ${amd3dnowext-no}" 7242 echo "SSE enabled ${sse-no}" 7243 echo "SSSE3 enabled ${ssse3-no}" 7244 echo "AESNI enabled ${aesni-no}" 7245 echo "AVX enabled ${avx-no}" 7246 echo "AVX2 enabled ${avx2-no}" 7247 echo "AVX-512 enabled ${avx512-no}" 7248 echo "XOP enabled ${xop-no}" 7249 echo "FMA3 enabled ${fma3-no}" 7250 echo "FMA4 enabled ${fma4-no}" 7251 echo "i686 features enabled ${i686-no}" 7252 echo "CMOV is fast ${fast_cmov-no}" 7253 echo "EBX available ${ebx_available-no}" 7254 echo "EBP available ${ebp_available-no}" 7255fi 7256if enabled aarch64; then 7257 echo "NEON enabled ${neon-no}" 7258 echo "VFP enabled ${vfp-no}" 7259fi 7260if enabled arm; then 7261 echo "ARMv5TE enabled ${armv5te-no}" 7262 echo "ARMv6 enabled ${armv6-no}" 7263 echo "ARMv6T2 enabled ${armv6t2-no}" 7264 echo "VFP enabled ${vfp-no}" 7265 echo "NEON enabled ${neon-no}" 7266 echo "THUMB enabled ${thumb-no}" 7267fi 7268if enabled mips; then 7269 echo "MIPS FPU enabled ${mipsfpu-no}" 7270 echo "MIPS DSP R1 enabled ${mipsdsp-no}" 7271 echo "MIPS DSP R2 enabled ${mipsdspr2-no}" 7272 echo "MIPS MSA enabled ${msa-no}" 7273 echo "MIPS MSA2 enabled ${msa2-no}" 7274 echo "LOONGSON MMI enabled ${mmi-no}" 7275fi 7276if enabled ppc; then 7277 echo "AltiVec enabled ${altivec-no}" 7278 echo "VSX enabled ${vsx-no}" 7279 echo "POWER8 enabled ${power8-no}" 7280 echo "PPC 4xx optimizations ${ppc4xx-no}" 7281 echo "dcbzl available ${dcbzl-no}" 7282fi 7283echo "debug symbols ${debug-no}" 7284echo "strip symbols ${stripping-no}" 7285echo "optimize for size ${small-no}" 7286echo "optimizations ${optimizations-no}" 7287echo "static ${static-no}" 7288echo "shared ${shared-no}" 7289echo "postprocessing support ${postproc-no}" 7290echo "network support ${network-no}" 7291echo "threading support ${thread_type-no}" 7292echo "safe bitstream reader ${safe_bitstream_reader-no}" 7293echo "texi2html enabled ${texi2html-no}" 7294echo "perl enabled ${perl-no}" 7295echo "pod2man enabled ${pod2man-no}" 7296echo "makeinfo enabled ${makeinfo-no}" 7297echo "makeinfo supports HTML ${makeinfo_html-no}" 7298test -n "$random_seed" && 7299 echo "random seed ${random_seed}" 7300echo 7301 7302echo "External libraries:" 7303print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | print_in_columns 7304echo 7305 7306echo "External libraries providing hardware acceleration:" 7307print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | print_in_columns 7308echo 7309 7310echo "Libraries:" 7311print_enabled '' $LIBRARY_LIST | print_in_columns 7312echo 7313 7314echo "Programs:" 7315print_enabled '' $PROGRAM_LIST | print_in_columns 7316echo 7317 7318for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do 7319 echo "Enabled ${type}s:" 7320 eval list=\$$(toupper $type)_LIST 7321 print_enabled '_*' $list | print_in_columns 7322 echo 7323done 7324 7325if test -n "$ignore_tests"; then 7326 ignore_tests=$(echo $ignore_tests | tr ',' ' ') 7327 echo "Ignored FATE tests:" 7328 echo $ignore_tests | print_in_columns 7329 echo 7330fi 7331 7332echo "License: $license" 7333 7334fi # test "$quiet" != "yes" 7335 7336if test -n "$WARN_IF_GETS_DISABLED_LIST"; then 7337 for cfg in $WARN_IF_GETS_DISABLED_LIST; do 7338 if disabled $cfg; then 7339 varname=${cfg}_disable_reason 7340 eval "warn \"Disabled $cfg because \$$varname\"" 7341 fi 7342 done 7343fi 7344 7345if test -n "$WARNINGS"; then 7346 printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color" 7347 enabled fatal_warnings && exit 1 7348fi 7349 7350test -e Makefile || echo "include $source_path/Makefile" > Makefile 7351 7352esc(){ 7353 echo "$*" | sed 's/%/%25/g;s/:/%3a/g' 7354} 7355 7356echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" > ffbuild/config.fate 7357 7358enabled stripping || strip="echo skipping strip" 7359enabled stripping || striptype="" 7360 7361config_files="$TMPH ffbuild/config.mak doc/config.texi" 7362 7363cat > ffbuild/config.mak <<EOF 7364# Automatically generated by configure - do not modify! 7365ifndef FFMPEG_CONFIG_MAK 7366FFMPEG_CONFIG_MAK=1 7367FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION 7368prefix=$prefix 7369LIBDIR=\$(DESTDIR)$libdir 7370SHLIBDIR=\$(DESTDIR)$shlibdir 7371INCDIR=\$(DESTDIR)$incdir 7372BINDIR=\$(DESTDIR)$bindir 7373DATADIR=\$(DESTDIR)$datadir 7374DOCDIR=\$(DESTDIR)$docdir 7375MANDIR=\$(DESTDIR)$mandir 7376PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir 7377INSTALL_NAME_DIR=$install_name_dir 7378SRC_PATH=$source_path 7379SRC_LINK=$source_link 7380ifndef MAIN_MAKEFILE 7381SRC_PATH:=\$(SRC_PATH:.%=..%) 7382endif 7383CC_IDENT=$cc_ident 7384ARCH=$arch 7385INTRINSICS=$intrinsics 7386EXTERN_PREFIX=$extern_prefix 7387CC=$cc 7388CXX=$cxx 7389AS=$as 7390OBJCC=$objcc 7391LD=$ld 7392DEPCC=$dep_cc 7393DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS) 7394DEPAS=$as 7395DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS) 7396X86ASM=$x86asmexe 7397DEPX86ASM=$x86asmexe 7398DEPX86ASMFLAGS=\$(X86ASMFLAGS) 7399AR=$ar 7400ARFLAGS=$arflags 7401AR_O=$ar_o 7402AR_CMD=$ar 7403NM_CMD=$nm 7404RANLIB=$ranlib 7405STRIP=$strip 7406STRIPTYPE=$striptype 7407NVCC=$nvcc 7408CP=cp -p 7409LN_S=$ln_s 7410CPPFLAGS=$CPPFLAGS 7411CFLAGS=$CFLAGS 7412CXXFLAGS=$CXXFLAGS 7413OBJCFLAGS=$OBJCFLAGS 7414ASFLAGS=$ASFLAGS 7415NVCCFLAGS=$nvccflags 7416AS_C=$AS_C 7417AS_O=$AS_O 7418OBJCC_C=$OBJCC_C 7419OBJCC_E=$OBJCC_E 7420OBJCC_O=$OBJCC_O 7421CC_C=$CC_C 7422CC_E=$CC_E 7423CC_O=$CC_O 7424CXX_C=$CXX_C 7425CXX_O=$CXX_O 7426NVCC_C=$NVCC_C 7427NVCC_O=$NVCC_O 7428LD_O=$LD_O 7429X86ASM_O=$X86ASM_O 7430LD_LIB=$LD_LIB 7431LD_PATH=$LD_PATH 7432DLLTOOL=$dlltool 7433WINDRES=$windres 7434DEPWINDRES=$dep_cc 7435DOXYGEN=$doxygen 7436LDFLAGS=$LDFLAGS 7437LDEXEFLAGS=$LDEXEFLAGS 7438LDSOFLAGS=$LDSOFLAGS 7439SHFLAGS=$(echo $($ldflags_filter $SHFLAGS)) 7440ASMSTRIPFLAGS=$ASMSTRIPFLAGS 7441X86ASMFLAGS=$X86ASMFLAGS 7442BUILDSUF=$build_suffix 7443PROGSSUF=$progs_suffix 7444FULLNAME=$FULLNAME 7445LIBPREF=$LIBPREF 7446LIBSUF=$LIBSUF 7447LIBNAME=$LIBNAME 7448SLIBPREF=$SLIBPREF 7449SLIBSUF=$SLIBSUF 7450EXESUF=$EXESUF 7451EXTRA_VERSION=$extra_version 7452CCDEP=$CCDEP 7453CXXDEP=$CXXDEP 7454CCDEP_FLAGS=$CCDEP_FLAGS 7455ASDEP=$ASDEP 7456ASDEP_FLAGS=$ASDEP_FLAGS 7457X86ASMDEP=$X86ASMDEP 7458X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS 7459CC_DEPFLAGS=$CC_DEPFLAGS 7460AS_DEPFLAGS=$AS_DEPFLAGS 7461X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS 7462HOSTCC=$host_cc 7463HOSTLD=$host_ld 7464HOSTCFLAGS=$host_cflags 7465HOSTCPPFLAGS=$host_cppflags 7466HOSTEXESUF=$HOSTEXESUF 7467HOSTLDFLAGS=$host_ldflags 7468HOSTEXTRALIBS=$host_extralibs 7469DEPHOSTCC=$host_cc 7470DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS) 7471HOSTCCDEP=$HOSTCCDEP 7472HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS 7473HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS 7474HOSTCC_C=$HOSTCC_C 7475HOSTCC_O=$HOSTCC_O 7476HOSTLD_O=$HOSTLD_O 7477TARGET_EXEC=$target_exec $target_exec_args 7478TARGET_PATH=$target_path 7479TARGET_SAMPLES=${target_samples:-\$(SAMPLES)} 7480CFLAGS-ffplay=${sdl2_cflags} 7481CFLAGS_HEADERS=$CFLAGS_HEADERS 7482LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD 7483EXTRALIBS=$extralibs 7484COMPAT_OBJS=$compat_objs 7485INSTALL=$install 7486LIBTARGET=${LIBTARGET} 7487SLIBNAME=${SLIBNAME} 7488SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION} 7489SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR} 7490SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD} 7491SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD} 7492SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME} 7493SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS} 7494SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB} 7495SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB} 7496VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD} 7497SAMPLES:=${samples:-\$(FATE_SAMPLES)} 7498NOREDZONE_FLAGS=$noredzone_flags 7499LIBFUZZER_PATH=$libfuzzer_path 7500IGNORE_TESTS=$ignore_tests 7501EOF 7502 7503map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST 7504 7505for entry in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do 7506 eval echo "EXTRALIBS-${entry}=\$${entry}_extralibs" >> ffbuild/config.mak 7507done 7508 7509cat > $TMPH <<EOF 7510/* Automatically generated by configure - do not modify! */ 7511#ifndef FFMPEG_CONFIG_H 7512#define FFMPEG_CONFIG_H 7513#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)" 7514#define FFMPEG_LICENSE "$(c_escape $license)" 7515#define CONFIG_THIS_YEAR 2020 7516#define FFMPEG_DATADIR "$(eval c_escape $datadir)" 7517#define AVCONV_DATADIR "$(eval c_escape $datadir)" 7518#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})" 7519#define av_restrict $restrict_keyword 7520#define EXTERN_PREFIX "${extern_prefix}" 7521#define EXTERN_ASM ${extern_prefix} 7522#define BUILDSUF "$build_suffix" 7523#define SLIBSUF "$SLIBSUF" 7524#define HAVE_MMX2 HAVE_MMXEXT 7525#define SWS_MAX_FILTER_SIZE $sws_max_filter_size 7526EOF 7527 7528test -n "$assert_level" && 7529 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH 7530 7531test -n "$malloc_prefix" && 7532 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH 7533 7534if enabled x86asm; then 7535 append config_files $TMPASM 7536 cat > $TMPASM <<EOF 7537; Automatically generated by configure - do not modify! 7538EOF 7539fi 7540 7541enabled getenv || echo "#define getenv(x) NULL" >> $TMPH 7542 7543 7544mkdir -p doc 7545mkdir -p tests 7546mkdir -p tests/api 7547echo "@c auto-generated by configure - do not modify! " > doc/config.texi 7548 7549print_config ARCH_ "$config_files" $ARCH_LIST 7550print_config HAVE_ "$config_files" $HAVE_LIST 7551print_config CONFIG_ "$config_files" $CONFIG_LIST \ 7552 $CONFIG_EXTRA \ 7553 $ALL_COMPONENTS \ 7554 7555echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH 7556echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak 7557 7558# Do not overwrite an unchanged config.h to avoid superfluous rebuilds. 7559cp_if_changed $TMPH config.h 7560touch ffbuild/.config 7561 7562enabled x86asm && cp_if_changed $TMPASM config.asm 7563 7564cat > $TMPH <<EOF 7565/* Generated by ffmpeg configure */ 7566#ifndef AVUTIL_AVCONFIG_H 7567#define AVUTIL_AVCONFIG_H 7568EOF 7569 7570print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB 7571 7572echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH 7573 7574cp_if_changed $TMPH libavutil/avconfig.h 7575 7576# full_filter_name_foo=vf_foo 7577# full_filter_name_bar=asrc_bar 7578# ... 7579eval "$(sed -n "s/^extern AVFilter ff_\([avfsinkrc]\{2,5\}\)_\(.*\);/full_filter_name_\2=\1_\2/p" $source_path/libavfilter/allfilters.c)" 7580 7581# generate the lists of enabled components 7582print_enabled_components(){ 7583 file=$1 7584 struct_name=$2 7585 name=$3 7586 shift 3 7587 echo "static const $struct_name * const $name[] = {" > $TMPH 7588 for c in $*; do 7589 if enabled $c; then 7590 case $name in 7591 filter_list) 7592 eval c=\$full_filter_name_${c%_filter} 7593 ;; 7594 indev_list) 7595 c=${c%_indev}_demuxer 7596 ;; 7597 outdev_list) 7598 c=${c%_outdev}_muxer 7599 ;; 7600 esac 7601 printf " &ff_%s,\n" $c >> $TMPH 7602 fi 7603 done 7604 if [ "$name" = "filter_list" ]; then 7605 for c in asrc_abuffer vsrc_buffer asink_abuffer vsink_buffer; do 7606 printf " &ff_%s,\n" $c >> $TMPH 7607 done 7608 fi 7609 echo " NULL };" >> $TMPH 7610 cp_if_changed $TMPH $file 7611} 7612 7613print_enabled_components libavfilter/filter_list.c AVFilter filter_list $FILTER_LIST 7614print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST 7615print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST 7616print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST 7617print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST 7618print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list $MUXER_LIST 7619print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST 7620print_enabled_components libavdevice/outdev_list.c AVOutputFormat outdev_list $OUTDEV_LIST 7621print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST 7622 7623# Settings for pkg-config files 7624 7625cat > $TMPH <<EOF 7626# Automatically generated by configure - do not modify! 7627shared=$shared 7628build_suffix=$build_suffix 7629prefix=$prefix 7630libdir=$libdir 7631incdir=$incdir 7632rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}") 7633source_path=${source_path} 7634LIBPREF=${LIBPREF} 7635LIBSUF=${LIBSUF} 7636extralibs_avutil="$avutil_extralibs" 7637extralibs_avcodec="$avcodec_extralibs" 7638extralibs_avformat="$avformat_extralibs" 7639extralibs_avdevice="$avdevice_extralibs" 7640extralibs_avfilter="$avfilter_extralibs" 7641extralibs_avresample="$avresample_extralibs" 7642extralibs_postproc="$postproc_extralibs" 7643extralibs_swscale="$swscale_extralibs" 7644extralibs_swresample="$swresample_extralibs" 7645EOF 7646 7647for lib in $LIBRARY_LIST; do 7648 lib_deps="$(eval echo \$${lib}_deps)" 7649 echo ${lib}_deps=\"$lib_deps\" >> $TMPH 7650done 7651 7652cp_if_changed $TMPH ffbuild/config.sh 7653