377 kx #!/bin/sh
377 kx #
377 kx # FFmpeg configure script
377 kx #
377 kx # Copyright (c) 2000-2002 Fabrice Bellard
377 kx # Copyright (c) 2005-2008 Diego Biurrun
377 kx # Copyright (c) 2005-2008 Mans Rullgard
377 kx #
377 kx
377 kx # Prevent locale nonsense from breaking basic text processing.
377 kx LC_ALL=C
377 kx export LC_ALL
377 kx
377 kx # make sure we are running under a compatible shell
377 kx # try to make this part work with most shells
377 kx
377 kx try_exec(){
377 kx echo "Trying shell $1"
377 kx type "$1" > /dev/null 2>&1 && exec "$@"
377 kx }
377 kx
377 kx unset foo
377 kx (: ${foo%%bar}) 2> /dev/null
377 kx E1="$?"
377 kx
377 kx (: ${foo?}) 2> /dev/null
377 kx E2="$?"
377 kx
377 kx if test "$E1" != 0 || test "$E2" = 0; then
377 kx echo "Broken shell detected. Trying alternatives."
377 kx export FF_CONF_EXEC
377 kx if test "0$FF_CONF_EXEC" -lt 1; then
377 kx FF_CONF_EXEC=1
377 kx try_exec bash "$0" "$@"
377 kx fi
377 kx if test "0$FF_CONF_EXEC" -lt 2; then
377 kx FF_CONF_EXEC=2
377 kx try_exec ksh "$0" "$@"
377 kx fi
377 kx if test "0$FF_CONF_EXEC" -lt 3; then
377 kx FF_CONF_EXEC=3
377 kx try_exec /usr/xpg4/bin/sh "$0" "$@"
377 kx fi
377 kx echo "No compatible shell script interpreter found."
377 kx echo "This configure script requires a POSIX-compatible shell"
377 kx echo "such as bash or ksh."
377 kx echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
377 kx echo "Instead, install a working POSIX-compatible shell."
377 kx echo "Disabling this configure test will create a broken FFmpeg."
377 kx if test "$BASH_VERSION" = '2.04.0(1)-release'; then
377 kx echo "This bash version ($BASH_VERSION) is broken on your platform."
377 kx echo "Upgrade to a later version if available."
377 kx fi
377 kx exit 1
377 kx fi
377 kx
377 kx test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
377 kx
377 kx show_help(){
377 kx cat <<EOF
377 kx Usage: configure [options]
377 kx Options: [defaults in brackets after descriptions]
377 kx
377 kx Help options:
377 kx --help print this message
377 kx --quiet Suppress showing informative output
377 kx --list-decoders show all available decoders
377 kx --list-encoders show all available encoders
377 kx --list-hwaccels show all available hardware accelerators
377 kx --list-demuxers show all available demuxers
377 kx --list-muxers show all available muxers
377 kx --list-parsers show all available parsers
377 kx --list-protocols show all available protocols
377 kx --list-bsfs show all available bitstream filters
377 kx --list-indevs show all available input devices
377 kx --list-outdevs show all available output devices
377 kx --list-filters show all available filters
377 kx
377 kx Standard options:
377 kx --logfile=FILE log tests and output to FILE [ffbuild/config.log]
377 kx --disable-logging do not log configure debug information
377 kx --fatal-warnings fail if any configure warning is generated
377 kx --prefix=PREFIX install in PREFIX [$prefix_default]
377 kx --bindir=DIR install binaries in DIR [PREFIX/bin]
377 kx --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
377 kx --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg]
377 kx --libdir=DIR install libs in DIR [PREFIX/lib]
377 kx --shlibdir=DIR install shared libs in DIR [LIBDIR]
377 kx --incdir=DIR install includes in DIR [PREFIX/include]
377 kx --mandir=DIR install man page in DIR [PREFIX/share/man]
377 kx --pkgconfigdir=DIR install pkg-config files in DIR [LIBDIR/pkgconfig]
377 kx --enable-rpath use rpath to allow installing libraries in paths
377 kx not part of the dynamic linker search path
377 kx use rpath when linking programs (USE WITH CARE)
377 kx --install-name-dir=DIR Darwin directory name for installed targets
377 kx
377 kx Licensing options:
377 kx --enable-gpl allow use of GPL code, the resulting libs
377 kx and binaries will be under GPL [no]
377 kx --enable-version3 upgrade (L)GPL to version 3 [no]
377 kx --enable-nonfree allow use of nonfree code, the resulting libs
377 kx and binaries will be unredistributable [no]
377 kx
377 kx Configuration options:
377 kx --disable-static do not build static libraries [no]
377 kx --enable-shared build shared libraries [no]
377 kx --enable-small optimize for size instead of speed
377 kx --disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
377 kx --enable-gray enable full grayscale support (slower color)
377 kx --disable-swscale-alpha disable alpha channel support in swscale
377 kx --disable-all disable building components, libraries and programs
377 kx --disable-autodetect disable automatically detected external libraries [no]
377 kx
377 kx Program options:
377 kx --disable-programs do not build command line programs
377 kx --disable-ffmpeg disable ffmpeg build
377 kx --disable-ffplay disable ffplay build
377 kx --disable-ffprobe disable ffprobe build
377 kx
377 kx Documentation options:
377 kx --disable-doc do not build documentation
377 kx --disable-htmlpages do not build HTML documentation pages
377 kx --disable-manpages do not build man documentation pages
377 kx --disable-podpages do not build POD documentation pages
377 kx --disable-txtpages do not build text documentation pages
377 kx
377 kx Component options:
377 kx --disable-avdevice disable libavdevice build
377 kx --disable-avcodec disable libavcodec build
377 kx --disable-avformat disable libavformat build
377 kx --disable-swresample disable libswresample build
377 kx --disable-swscale disable libswscale build
377 kx --disable-postproc disable libpostproc build
377 kx --disable-avfilter disable libavfilter build
377 kx --enable-avresample enable libavresample build (deprecated) [no]
377 kx --disable-pthreads disable pthreads [autodetect]
377 kx --disable-w32threads disable Win32 threads [autodetect]
377 kx --disable-os2threads disable OS/2 threads [autodetect]
377 kx --disable-network disable network support [no]
377 kx --disable-dct disable DCT code
377 kx --disable-dwt disable DWT code
377 kx --disable-error-resilience disable error resilience code
377 kx --disable-lsp disable LSP code
377 kx --disable-lzo disable LZO decoder code
377 kx --disable-mdct disable MDCT code
377 kx --disable-rdft disable RDFT code
377 kx --disable-fft disable FFT code
377 kx --disable-faan disable floating point AAN (I)DCT code
377 kx --disable-pixelutils disable pixel utils in libavutil
377 kx
377 kx Individual component options:
377 kx --disable-everything disable all components listed below
377 kx --disable-encoder=NAME disable encoder NAME
377 kx --enable-encoder=NAME enable encoder NAME
377 kx --disable-encoders disable all encoders
377 kx --disable-decoder=NAME disable decoder NAME
377 kx --enable-decoder=NAME enable decoder NAME
377 kx --disable-decoders disable all decoders
377 kx --disable-hwaccel=NAME disable hwaccel NAME
377 kx --enable-hwaccel=NAME enable hwaccel NAME
377 kx --disable-hwaccels disable all hwaccels
377 kx --disable-muxer=NAME disable muxer NAME
377 kx --enable-muxer=NAME enable muxer NAME
377 kx --disable-muxers disable all muxers
377 kx --disable-demuxer=NAME disable demuxer NAME
377 kx --enable-demuxer=NAME enable demuxer NAME
377 kx --disable-demuxers disable all demuxers
377 kx --enable-parser=NAME enable parser NAME
377 kx --disable-parser=NAME disable parser NAME
377 kx --disable-parsers disable all parsers
377 kx --enable-bsf=NAME enable bitstream filter NAME
377 kx --disable-bsf=NAME disable bitstream filter NAME
377 kx --disable-bsfs disable all bitstream filters
377 kx --enable-protocol=NAME enable protocol NAME
377 kx --disable-protocol=NAME disable protocol NAME
377 kx --disable-protocols disable all protocols
377 kx --enable-indev=NAME enable input device NAME
377 kx --disable-indev=NAME disable input device NAME
377 kx --disable-indevs disable input devices
377 kx --enable-outdev=NAME enable output device NAME
377 kx --disable-outdev=NAME disable output device NAME
377 kx --disable-outdevs disable output devices
377 kx --disable-devices disable all devices
377 kx --enable-filter=NAME enable filter NAME
377 kx --disable-filter=NAME disable filter NAME
377 kx --disable-filters disable all filters
377 kx
377 kx External library support:
377 kx
377 kx Using any of the following switches will allow FFmpeg to link to the
377 kx corresponding external library. All the components depending on that library
377 kx will become enabled, if all their other dependencies are met and they are not
377 kx explicitly disabled. E.g. --enable-libopus will enable linking to
377 kx libopus and allow the libopus encoder to be built, unless it is
377 kx specifically disabled with --disable-encoder=libopus.
377 kx
377 kx Note that only the system libraries are auto-detected. All the other external
377 kx libraries must be explicitly enabled.
377 kx
377 kx Also note that the following help text describes the purpose of the libraries
377 kx themselves, not all their features will necessarily be usable by FFmpeg.
377 kx
377 kx --disable-alsa disable ALSA support [autodetect]
377 kx --disable-appkit disable Apple AppKit framework [autodetect]
377 kx --disable-avfoundation disable Apple AVFoundation framework [autodetect]
377 kx --enable-avisynth enable reading of AviSynth script files [no]
377 kx --disable-bzlib disable bzlib [autodetect]
377 kx --disable-coreimage disable Apple CoreImage framework [autodetect]
377 kx --enable-chromaprint enable audio fingerprinting with chromaprint [no]
377 kx --enable-frei0r enable frei0r video filtering [no]
377 kx --enable-gcrypt enable gcrypt, needed for rtmp(t)e support
377 kx if openssl, librtmp or gmp is not used [no]
377 kx --enable-gmp enable gmp, needed for rtmp(t)e support
377 kx if openssl or librtmp is not used [no]
377 kx --enable-gnutls enable gnutls, needed for https support
377 kx if openssl, libtls or mbedtls is not used [no]
377 kx --disable-iconv disable iconv [autodetect]
377 kx --enable-jni enable JNI support [no]
377 kx --enable-ladspa enable LADSPA audio filtering [no]
377 kx --enable-libaom enable AV1 video encoding/decoding via libaom [no]
377 kx --enable-libaribb24 enable ARIB text and caption decoding via libaribb24 [no]
377 kx --enable-libass enable libass subtitles rendering,
377 kx needed for subtitles and ass filter [no]
377 kx --enable-libbluray enable BluRay reading using libbluray [no]
377 kx --enable-libbs2b enable bs2b DSP library [no]
377 kx --enable-libcaca enable textual display using libcaca [no]
377 kx --enable-libcelt enable CELT decoding via libcelt [no]
377 kx --enable-libcdio enable audio CD grabbing with libcdio [no]
377 kx --enable-libcodec2 enable codec2 en/decoding using libcodec2 [no]
377 kx --enable-libdav1d enable AV1 decoding via libdav1d [no]
377 kx --enable-libdavs2 enable AVS2 decoding via libdavs2 [no]
377 kx --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
377 kx and libraw1394 [no]
377 kx --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
377 kx --enable-libflite enable flite (voice synthesis) support via libflite [no]
377 kx --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
377 kx --enable-libfreetype enable libfreetype, needed for drawtext filter [no]
377 kx --enable-libfribidi enable libfribidi, improves drawtext filter [no]
377 kx --enable-libglslang enable GLSL->SPIRV compilation via libglslang [no]
377 kx --enable-libgme enable Game Music Emu via libgme [no]
377 kx --enable-libgsm enable GSM de/encoding via libgsm [no]
377 kx --enable-libiec61883 enable iec61883 via libiec61883 [no]
377 kx --enable-libilbc enable iLBC de/encoding via libilbc [no]
377 kx --enable-libjack enable JACK audio sound server [no]
377 kx --enable-libklvanc enable Kernel Labs VANC processing [no]
377 kx --enable-libkvazaar enable HEVC encoding via libkvazaar [no]
377 kx --enable-liblensfun enable lensfun lens correction [no]
377 kx --enable-libmodplug enable ModPlug via libmodplug [no]
377 kx --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
377 kx --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
377 kx --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
377 kx --enable-libopencv enable video filtering via libopencv [no]
377 kx --enable-libopenh264 enable H.264 encoding via OpenH264 [no]
377 kx --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
377 kx --enable-libopenmpt enable decoding tracked files via libopenmpt [no]
377 kx --enable-libopenvino enable OpenVINO as a DNN module backend
377 kx for DNN based filters like dnn_processing [no]
377 kx --enable-libopus enable Opus de/encoding via libopus [no]
377 kx --enable-libpulse enable Pulseaudio input via libpulse [no]
377 kx --enable-librabbitmq enable RabbitMQ library [no]
377 kx --enable-librav1e enable AV1 encoding via rav1e [no]
377 kx --enable-librist enable RIST via librist [no]
377 kx --enable-librsvg enable SVG rasterization via librsvg [no]
377 kx --enable-librubberband enable rubberband needed for rubberband filter [no]
377 kx --enable-librtmp enable RTMP[E] support via librtmp [no]
377 kx --enable-libshine enable fixed-point MP3 encoding via libshine [no]
377 kx --enable-libsmbclient enable Samba protocol via libsmbclient [no]
377 kx --enable-libsnappy enable Snappy compression, needed for hap encoding [no]
377 kx --enable-libsoxr enable Include libsoxr resampling [no]
377 kx --enable-libspeex enable Speex de/encoding via libspeex [no]
377 kx --enable-libsrt enable Haivision SRT protocol via libsrt [no]
377 kx --enable-libssh enable SFTP protocol via libssh [no]
377 kx --enable-libsvtav1 enable AV1 encoding via SVT [no]
377 kx --enable-libtensorflow enable TensorFlow as a DNN module backend
377 kx for DNN based filters like sr [no]
377 kx --enable-libtesseract enable Tesseract, needed for ocr filter [no]
377 kx --enable-libtheora enable Theora encoding via libtheora [no]
377 kx --enable-libtls enable LibreSSL (via libtls), needed for https support
377 kx if openssl, gnutls or mbedtls is not used [no]
377 kx --enable-libtwolame enable MP2 encoding via libtwolame [no]
377 kx --enable-libuavs3d enable AVS3 decoding via libuavs3d [no]
377 kx --enable-libv4l2 enable libv4l2/v4l-utils [no]
377 kx --enable-libvidstab enable video stabilization using vid.stab [no]
377 kx --enable-libvmaf enable vmaf filter via libvmaf [no]
377 kx --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
377 kx --enable-libvorbis enable Vorbis en/decoding via libvorbis,
377 kx native implementation exists [no]
377 kx --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
377 kx --enable-libwebp enable WebP encoding via libwebp [no]
377 kx --enable-libx264 enable H.264 encoding via x264 [no]
377 kx --enable-libx265 enable HEVC encoding via x265 [no]
377 kx --enable-libxavs enable AVS encoding via xavs [no]
377 kx --enable-libxavs2 enable AVS2 encoding via xavs2 [no]
377 kx --enable-libxcb enable X11 grabbing using XCB [autodetect]
377 kx --enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
377 kx --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
377 kx --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
377 kx --enable-libxvid enable Xvid encoding via xvidcore,
377 kx native MPEG-4/Xvid encoder exists [no]
377 kx --enable-libxml2 enable XML parsing using the C library libxml2, needed
377 kx for dash demuxing support [no]
377 kx --enable-libzimg enable z.lib, needed for zscale filter [no]
377 kx --enable-libzmq enable message passing via libzmq [no]
377 kx --enable-libzvbi enable teletext support via libzvbi [no]
377 kx --enable-lv2 enable LV2 audio filtering [no]
377 kx --disable-lzma disable lzma [autodetect]
377 kx --enable-decklink enable Blackmagic DeckLink I/O support [no]
377 kx --enable-mbedtls enable mbedTLS, needed for https support
377 kx if openssl, gnutls or libtls is not used [no]
377 kx --enable-mediacodec enable Android MediaCodec support [no]
377 kx --enable-mediafoundation enable encoding via MediaFoundation [auto]
377 kx --enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
377 kx --enable-openal enable OpenAL 1.1 capture support [no]
377 kx --enable-opencl enable OpenCL processing [no]
377 kx --enable-opengl enable OpenGL rendering [no]
377 kx --enable-openssl enable openssl, needed for https support
377 kx if gnutls, libtls or mbedtls is not used [no]
377 kx --enable-pocketsphinx enable PocketSphinx, needed for asr filter [no]
377 kx --disable-sndio disable sndio support [autodetect]
377 kx --disable-schannel disable SChannel SSP, needed for TLS support on
377 kx Windows if openssl and gnutls are not used [autodetect]
377 kx --disable-sdl2 disable sdl2 [autodetect]
377 kx --disable-securetransport disable Secure Transport, needed for TLS support
377 kx on OSX if openssl and gnutls are not used [autodetect]
377 kx --enable-vapoursynth enable VapourSynth demuxer [no]
377 kx --enable-vulkan enable Vulkan code [no]
377 kx --disable-xlib disable xlib [autodetect]
377 kx --disable-zlib disable zlib [autodetect]
377 kx
377 kx The following libraries provide various hardware acceleration features:
377 kx --disable-amf disable AMF video encoding code [autodetect]
377 kx --disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
377 kx --enable-cuda-nvcc enable Nvidia CUDA compiler [no]
377 kx --disable-cuda-llvm disable CUDA compilation using clang [autodetect]
377 kx --disable-cuvid disable Nvidia CUVID support [autodetect]
377 kx --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
377 kx --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
377 kx --disable-ffnvcodec disable dynamically linked Nvidia code [autodetect]
377 kx --enable-libdrm enable DRM code (Linux) [no]
377 kx --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
377 kx --enable-libnpp enable Nvidia Performance Primitives-based code [no]
377 kx --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
377 kx --disable-nvdec disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
377 kx --disable-nvenc disable Nvidia video encoding code [autodetect]
377 kx --enable-omx enable OpenMAX IL code [no]
377 kx --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
377 kx --enable-omx-img enable OpenMAX IL code for Imagination PowerVR D5500 video decoder [no]
377 kx --enable-rkmpp enable Rockchip Media Process Platform code [no]
377 kx --disable-v4l2-m2m disable V4L2 mem2mem code [autodetect]
377 kx --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
377 kx --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
377 kx --disable-videotoolbox disable VideoToolbox code [autodetect]
377 kx
377 kx Toolchain options:
377 kx --arch=ARCH select architecture [$arch]
377 kx --cpu=CPU select the minimum required CPU (affects
377 kx instruction selection, may crash on older CPUs)
377 kx --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
377 kx --progs-suffix=SUFFIX program name suffix []
377 kx --enable-cross-compile assume a cross-compiler is used
377 kx --sysroot=PATH root of cross-build tree
377 kx --sysinclude=PATH location of cross-build system headers
377 kx --target-os=OS compiler targets OS [$target_os]
377 kx --target-exec=CMD command to run executables on target
377 kx --target-path=DIR path to view of build directory on target
377 kx --target-samples=DIR path to samples directory on target
377 kx --tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
377 kx --toolchain=NAME set tool defaults according to NAME
377 kx (gcc-asan, clang-asan, gcc-msan, clang-msan,
377 kx gcc-tsan, clang-tsan, gcc-usan, clang-usan,
377 kx valgrind-massif, valgrind-memcheck,
377 kx msvc, icl, gcov, llvm-cov, hardened)
377 kx --nm=NM use nm tool NM [$nm_default]
377 kx --ar=AR use archive tool AR [$ar_default]
377 kx --as=AS use assembler AS [$as_default]
377 kx --ln_s=LN_S use symbolic link tool LN_S [$ln_s_default]
377 kx --strip=STRIP use strip tool STRIP [$strip_default]
377 kx --windres=WINDRES use windows resource compiler WINDRES [$windres_default]
377 kx --x86asmexe=EXE use nasm-compatible assembler EXE [$x86asmexe_default]
377 kx --cc=CC use C compiler CC [$cc_default]
377 kx --cxx=CXX use C compiler CXX [$cxx_default]
377 kx --objcc=OCC use ObjC compiler OCC [$cc_default]
377 kx --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
377 kx --nvcc=NVCC use Nvidia CUDA compiler NVCC or clang [$nvcc_default]
377 kx --ld=LD use linker LD [$ld_default]
377 kx --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
377 kx --pkg-config-flags=FLAGS pass additional flags to pkgconf []
377 kx --ranlib=RANLIB use ranlib RANLIB [$ranlib_default]
377 kx --doxygen=DOXYGEN use DOXYGEN to generate API doc [$doxygen_default]
377 kx --host-cc=HOSTCC use host C compiler HOSTCC
377 kx --host-cflags=HCFLAGS use HCFLAGS when compiling for host
377 kx --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
377 kx --host-ld=HOSTLD use host linker HOSTLD
377 kx --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
377 kx --host-extralibs=HLIBS use libs HLIBS when linking for host
377 kx --host-os=OS compiler host OS [$target_os]
377 kx --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
377 kx --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
377 kx --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
377 kx --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
377 kx --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
377 kx --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
377 kx --extra-libs=ELIBS add ELIBS [$ELIBS]
377 kx --extra-version=STRING version string suffix []
377 kx --optflags=OPTFLAGS override optimization-related compiler flags
377 kx --nvccflags=NVCCFLAGS override nvcc flags [$nvccflags_default]
377 kx --build-suffix=SUFFIX library name suffix []
377 kx --enable-pic build position-independent code
377 kx --enable-thumb compile for Thumb instruction set
377 kx --enable-lto use link-time optimization
377 kx --env="ENV=override" override the environment variables
377 kx
377 kx Advanced options (experts only):
377 kx --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
377 kx --custom-allocator=NAME use a supported custom allocator
377 kx --disable-symver disable symbol versioning
377 kx --enable-hardcoded-tables use hardcoded tables instead of runtime generation
377 kx --disable-safe-bitstream-reader
377 kx disable buffer boundary checking in bitreaders
377 kx (faster, but may crash)
377 kx --sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default]
377 kx
377 kx Optimization options (experts only):
377 kx --disable-asm disable all assembly optimizations
377 kx --disable-altivec disable AltiVec optimizations
377 kx --disable-vsx disable VSX optimizations
377 kx --disable-power8 disable POWER8 optimizations
377 kx --disable-amd3dnow disable 3DNow! optimizations
377 kx --disable-amd3dnowext disable 3DNow! extended optimizations
377 kx --disable-mmx disable MMX optimizations
377 kx --disable-mmxext disable MMXEXT optimizations
377 kx --disable-sse disable SSE optimizations
377 kx --disable-sse2 disable SSE2 optimizations
377 kx --disable-sse3 disable SSE3 optimizations
377 kx --disable-ssse3 disable SSSE3 optimizations
377 kx --disable-sse4 disable SSE4 optimizations
377 kx --disable-sse42 disable SSE4.2 optimizations
377 kx --disable-avx disable AVX optimizations
377 kx --disable-xop disable XOP optimizations
377 kx --disable-fma3 disable FMA3 optimizations
377 kx --disable-fma4 disable FMA4 optimizations
377 kx --disable-avx2 disable AVX2 optimizations
377 kx --disable-avx512 disable AVX-512 optimizations
377 kx --disable-aesni disable AESNI optimizations
377 kx --disable-armv5te disable armv5te optimizations
377 kx --disable-armv6 disable armv6 optimizations
377 kx --disable-armv6t2 disable armv6t2 optimizations
377 kx --disable-vfp disable VFP optimizations
377 kx --disable-neon disable NEON optimizations
377 kx --disable-inline-asm disable use of inline assembly
377 kx --disable-x86asm disable use of standalone x86 assembly
377 kx --disable-mipsdsp disable MIPS DSP ASE R1 optimizations
377 kx --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
377 kx --disable-msa disable MSA optimizations
377 kx --disable-msa2 disable MSA2 optimizations
377 kx --disable-mipsfpu disable floating point MIPS optimizations
377 kx --disable-mmi disable Loongson SIMD optimizations
377 kx --disable-fast-unaligned consider unaligned accesses slow
377 kx
377 kx Developer options (useful when working on FFmpeg itself):
377 kx --disable-debug disable debugging symbols
377 kx --enable-debug=LEVEL set the debug level [$debuglevel]
377 kx --disable-optimizations disable compiler optimizations
377 kx --enable-extra-warnings enable more compiler warnings
377 kx --disable-stripping disable stripping of executables and shared libraries
377 kx --assert-level=level 0(default), 1 or 2, amount of assertion testing,
377 kx 2 causes a slowdown at runtime.
377 kx --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
377 kx --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
377 kx leaks and errors, using the specified valgrind binary.
377 kx Cannot be combined with --target-exec
377 kx --enable-ftrapv Trap arithmetic overflows
377 kx --samples=PATH location of test samples for FATE, if not set use
377 kx \$FATE_SAMPLES at make invocation time.
377 kx --enable-neon-clobber-test check NEON registers for clobbering (should be
377 kx used only for debugging purposes)
377 kx --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
377 kx should be used only for debugging purposes)
377 kx --enable-random randomly enable/disable components
377 kx --disable-random
377 kx --enable-random=LIST randomly enable/disable specific components or
377 kx --disable-random=LIST component groups. LIST is a comma-separated list
377 kx of NAME[:PROB] entries where NAME is a component
377 kx (group) and PROB the probability associated with
377 kx NAME (default 0.5).
377 kx --random-seed=VALUE seed value for --enable/disable-random
377 kx --disable-valgrind-backtrace do not print a backtrace under Valgrind
377 kx (only applies to --disable-optimizations builds)
377 kx --enable-ossfuzz Enable building fuzzer tool
377 kx --libfuzzer=PATH path to libfuzzer
377 kx --ignore-tests=TESTS comma-separated list (without "fate-" prefix
377 kx in the name) of tests whose result is ignored
377 kx --enable-linux-perf enable Linux Performance Monitor API
377 kx --disable-large-tests disable tests that use a large amount of memory
377 kx
377 kx NOTE: Object files are built at the place where configure is launched.
377 kx EOF
377 kx exit 0
377 kx }
377 kx
377 kx if test -t 1 && which tput >/dev/null 2>&1; then
377 kx ncolors=$(tput colors)
377 kx if test -n "$ncolors" && test $ncolors -ge 8; then
377 kx bold_color=$(tput bold)
377 kx warn_color=$(tput setaf 3)
377 kx error_color=$(tput setaf 1)
377 kx reset_color=$(tput sgr0)
377 kx fi
377 kx # 72 used instead of 80 since that's the default of pr
377 kx ncols=$(tput cols)
377 kx fi
377 kx : ${ncols:=72}
377 kx
377 kx log(){
377 kx echo "$@" >> $logfile
377 kx }
377 kx
377 kx log_file(){
377 kx log BEGIN "$1"
377 kx log_file_i=1
377 kx while IFS= read -r log_file_line; do
377 kx printf '%5d\t%s\n' "$log_file_i" "$log_file_line"
377 kx log_file_i=$(($log_file_i+1))
377 kx done < "$1" >> "$logfile"
377 kx log END "$1"
377 kx }
377 kx
377 kx warn(){
377 kx log "WARNING: $*"
377 kx WARNINGS="${WARNINGS}WARNING: $*\n"
377 kx }
377 kx
377 kx die(){
377 kx log "$@"
377 kx echo "$error_color$bold_color$@$reset_color"
377 kx cat <<EOF
377 kx
377 kx If you think configure made a mistake, make sure you are using the latest
377 kx version from Git. If the latest version fails, report the problem to the
377 kx ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
377 kx EOF
377 kx if disabled logging; then
377 kx cat <<EOF
377 kx Rerun configure with logging enabled (do not use --disable-logging), and
377 kx include the log this produces with your report.
377 kx EOF
377 kx else
377 kx cat <<EOF
377 kx Include the log file "$logfile" produced by configure as this will help
377 kx solve the problem.
377 kx EOF
377 kx fi
377 kx exit 1
377 kx }
377 kx
377 kx # Avoid locale weirdness, besides we really just want to translate ASCII.
377 kx toupper(){
377 kx echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
377 kx }
377 kx
377 kx tolower(){
377 kx echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
377 kx }
377 kx
377 kx c_escape(){
377 kx echo "$*" | sed 's/["\\]/\\\0/g'
377 kx }
377 kx
377 kx sh_quote(){
377 kx v=$(echo "$1" | sed "s/'/'\\\\''/g")
377 kx test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
377 kx echo "$v"
377 kx }
377 kx
377 kx cleanws(){
377 kx echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
377 kx }
377 kx
377 kx filter(){
377 kx pat=$1
377 kx shift
377 kx for v; do
377 kx eval "case '$v' in $pat) printf '%s ' '$v' ;; esac"
377 kx done
377 kx }
377 kx
377 kx filter_out(){
377 kx pat=$1
377 kx shift
377 kx for v; do
377 kx eval "case '$v' in $pat) ;; *) printf '%s ' '$v' ;; esac"
377 kx done
377 kx }
377 kx
377 kx map(){
377 kx m=$1
377 kx shift
377 kx for v; do eval $m; done
377 kx }
377 kx
377 kx add_suffix(){
377 kx suffix=$1
377 kx shift
377 kx for v; do echo ${v}${suffix}; done
377 kx }
377 kx
377 kx remove_suffix(){
377 kx suffix=$1
377 kx shift
377 kx for v; do echo ${v%$suffix}; done
377 kx }
377 kx
377 kx set_all(){
377 kx value=$1
377 kx shift
377 kx for var in $*; do
377 kx eval $var=$value
377 kx done
377 kx }
377 kx
377 kx set_weak(){
377 kx value=$1
377 kx shift
377 kx for var; do
377 kx eval : \${$var:=$value}
377 kx done
377 kx }
377 kx
377 kx sanitize_var_name(){
377 kx echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
377 kx }
377 kx
377 kx set_sanitized(){
377 kx var=$1
377 kx shift
377 kx eval $(sanitize_var_name "$var")='$*'
377 kx }
377 kx
377 kx get_sanitized(){
377 kx eval echo \$$(sanitize_var_name "$1")
377 kx }
377 kx
377 kx pushvar(){
377 kx for pvar in $*; do
377 kx eval level=\${${pvar}_level:=0}
377 kx eval ${pvar}_${level}="\$$pvar"
377 kx eval ${pvar}_level=$(($level+1))
377 kx done
377 kx }
377 kx
377 kx popvar(){
377 kx for pvar in $*; do
377 kx eval level=\${${pvar}_level:-0}
377 kx test $level = 0 && continue
377 kx eval level=$(($level-1))
377 kx eval $pvar="\${${pvar}_${level}}"
377 kx eval ${pvar}_level=$level
377 kx eval unset ${pvar}_${level}
377 kx done
377 kx }
377 kx
377 kx request(){
377 kx for var in $*; do
377 kx eval ${var}_requested=yes
377 kx eval $var=
377 kx done
377 kx }
377 kx
377 kx warn_if_gets_disabled(){
377 kx for var in $*; do
377 kx WARN_IF_GETS_DISABLED_LIST="$WARN_IF_GETS_DISABLED_LIST $var"
377 kx done
377 kx }
377 kx
377 kx enable(){
377 kx set_all yes $*
377 kx }
377 kx
377 kx disable(){
377 kx set_all no $*
377 kx }
377 kx
377 kx disable_with_reason(){
377 kx disable $1
377 kx eval "${1}_disable_reason=\"$2\""
377 kx if requested $1; then
377 kx die "ERROR: $1 requested, but $2"
377 kx fi
377 kx }
377 kx
377 kx enable_weak(){
377 kx set_weak yes $*
377 kx }
377 kx
377 kx disable_weak(){
377 kx set_weak no $*
377 kx }
377 kx
377 kx enable_sanitized(){
377 kx for var; do
377 kx enable $(sanitize_var_name $var)
377 kx done
377 kx }
377 kx
377 kx disable_sanitized(){
377 kx for var; do
377 kx disable $(sanitize_var_name $var)
377 kx done
377 kx }
377 kx
377 kx do_enable_deep(){
377 kx for var; do
377 kx enabled $var && continue
377 kx set -- $var
377 kx eval enable_deep \$${var}_select
377 kx var=$1
377 kx eval enable_deep_weak \$${var}_suggest
377 kx done
377 kx }
377 kx
377 kx enable_deep(){
377 kx do_enable_deep $*
377 kx enable $*
377 kx }
377 kx
377 kx enable_deep_weak(){
377 kx for var; do
377 kx disabled $var && continue
377 kx set -- $var
377 kx do_enable_deep $var
377 kx var=$1
377 kx enable_weak $var
377 kx done
377 kx }
377 kx
377 kx requested(){
377 kx test "${1#!}" = "$1" && op="=" || op="!="
377 kx eval test "x\$${1#!}_requested" $op "xyes"
377 kx }
377 kx
377 kx enabled(){
377 kx test "${1#!}" = "$1" && op="=" || op="!="
377 kx eval test "x\$${1#!}" $op "xyes"
377 kx }
377 kx
377 kx disabled(){
377 kx test "${1#!}" = "$1" && op="=" || op="!="
377 kx eval test "x\$${1#!}" $op "xno"
377 kx }
377 kx
377 kx enabled_all(){
377 kx for opt; do
377 kx enabled $opt || return 1
377 kx done
377 kx }
377 kx
377 kx disabled_all(){
377 kx for opt; do
377 kx disabled $opt || return 1
377 kx done
377 kx }
377 kx
377 kx enabled_any(){
377 kx for opt; do
377 kx enabled $opt && return 0
377 kx done
377 kx }
377 kx
377 kx disabled_any(){
377 kx for opt; do
377 kx disabled $opt && return 0
377 kx done
377 kx return 1
377 kx }
377 kx
377 kx set_default(){
377 kx for opt; do
377 kx eval : \${$opt:=\$${opt}_default}
377 kx done
377 kx }
377 kx
377 kx is_in(){
377 kx value=$1
377 kx shift
377 kx for var in $*; do
377 kx [ $var = $value ] && return 0
377 kx done
377 kx return 1
377 kx }
377 kx
377 kx # The cfg loop is very hot (several thousands iterations), and in bash also
377 kx # potentialy quite slow. Try to abort the iterations early, preferably without
377 kx # calling functions. 70%+ of the time cfg is already done or without deps.
377 kx check_deps(){
377 kx for cfg; do
377 kx eval [ x\$${cfg}_checking = xdone ] && continue
377 kx eval [ x\$${cfg}_checking = xinprogress ] && die "Circular dependency for $cfg."
377 kx
377 kx eval "
377 kx dep_all=\$${cfg}_deps
377 kx dep_any=\$${cfg}_deps_any
377 kx dep_con=\$${cfg}_conflict
377 kx dep_sel=\$${cfg}_select
377 kx dep_sgs=\$${cfg}_suggest
377 kx dep_ifa=\$${cfg}_if
377 kx dep_ifn=\$${cfg}_if_any
377 kx "
377 kx
377 kx # most of the time here $cfg has no deps - avoid costly no-op work
377 kx if [ "$dep_all$dep_any$dep_con$dep_sel$dep_sgs$dep_ifa$dep_ifn" ]; then
377 kx eval ${cfg}_checking=inprogress
377 kx
377 kx set -- $cfg "$dep_all" "$dep_any" "$dep_con" "$dep_sel" "$dep_sgs" "$dep_ifa" "$dep_ifn"
377 kx check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
377 kx cfg=$1; dep_all=$2; dep_any=$3; dep_con=$4; dep_sel=$5 dep_sgs=$6; dep_ifa=$7; dep_ifn=$8
377 kx
377 kx [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
377 kx [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
377 kx enabled_all $dep_all || { disable_with_reason $cfg "not all dependencies are satisfied: $dep_all"; }
377 kx enabled_any $dep_any || { disable_with_reason $cfg "not any dependency is satisfied: $dep_any"; }
377 kx disabled_all $dep_con || { disable_with_reason $cfg "some conflicting dependencies are unsatisfied: $dep_con"; }
377 kx disabled_any $dep_sel && { disable_with_reason $cfg "some selected dependency is unsatisfied: $dep_sel"; }
377 kx
377 kx enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
377 kx
377 kx for dep in $dep_all $dep_any $dep_sel $dep_sgs; do
377 kx # filter out library deps, these do not belong in extralibs
377 kx is_in $dep $LIBRARY_LIST && continue
377 kx enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
377 kx done
377 kx fi
377 kx
377 kx eval ${cfg}_checking=done
377 kx done
377 kx }
377 kx
377 kx print_config(){
377 kx pfx=$1
377 kx files=$2
377 kx shift 2
377 kx map 'eval echo "$v \${$v:-no}"' "$@" |
377 kx awk "BEGIN { split(\"$files\", files) }
377 kx {
377 kx c = \"$pfx\" toupper(\$1);
377 kx v = \$2;
377 kx sub(/yes/, 1, v);
377 kx sub(/no/, 0, v);
377 kx for (f in files) {
377 kx file = files[f];
377 kx if (file ~ /\\.h\$/) {
377 kx printf(\"#define %s %d\\n\", c, v) >>file;
377 kx } else if (file ~ /\\.asm\$/) {
377 kx printf(\"%%define %s %d\\n\", c, v) >>file;
377 kx } else if (file ~ /\\.mak\$/) {
377 kx n = -v ? \"\" : \"!\";
377 kx printf(\"%s%s=yes\\n\", n, c) >>file;
377 kx } else if (file ~ /\\.texi\$/) {
377 kx pre = -v ? \"\" : \"@c \";
377 kx yesno = \$2;
377 kx c2 = tolower(c);
377 kx gsub(/_/, \"-\", c2);
377 kx printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
377 kx }
377 kx }
377 kx }"
377 kx }
377 kx
377 kx print_enabled(){
377 kx suf=$1
377 kx shift
377 kx for v; do
377 kx enabled $v && printf "%s\n" ${v%$suf}
377 kx done
377 kx }
377 kx
377 kx append(){
377 kx var=$1
377 kx shift
377 kx eval "$var=\"\$$var $*\""
377 kx }
377 kx
377 kx prepend(){
377 kx var=$1
377 kx shift
377 kx eval "$var=\"$* \$$var\""
377 kx }
377 kx
377 kx reverse () {
377 kx eval '
377 kx reverse_out=
377 kx for v in $'$1'; do
377 kx reverse_out="$v $reverse_out"
377 kx done
377 kx '$1'=$reverse_out
377 kx '
377 kx }
377 kx
377 kx # keeps the last occurence of each non-unique item
377 kx unique(){
377 kx unique_out=
377 kx eval unique_in=\$$1
377 kx reverse unique_in
377 kx for v in $unique_in; do
377 kx # " $unique_out" +space such that every item is surrounded with spaces
377 kx case " $unique_out" in *" $v "*) continue; esac # already in list
377 kx unique_out="$unique_out$v "
377 kx done
377 kx reverse unique_out
377 kx eval $1=\$unique_out
377 kx }
377 kx
377 kx resolve(){
377 kx resolve_out=
377 kx eval resolve_in=\$$1
377 kx for v in $resolve_in; do
377 kx eval 'resolve_out="$resolve_out$'$v' "'
377 kx done
377 kx eval $1=\$resolve_out
377 kx }
377 kx
377 kx add_cppflags(){
377 kx append CPPFLAGS "$@"
377 kx }
377 kx
377 kx add_cflags(){
377 kx append CFLAGS $($cflags_filter "$@")
377 kx }
377 kx
377 kx add_cflags_headers(){
377 kx append CFLAGS_HEADERS $($cflags_filter "$@")
377 kx }
377 kx
377 kx add_cxxflags(){
377 kx append CXXFLAGS $($cflags_filter "$@")
377 kx }
377 kx
377 kx add_objcflags(){
377 kx append OBJCFLAGS $($objcflags_filter "$@")
377 kx }
377 kx
377 kx add_asflags(){
377 kx append ASFLAGS $($asflags_filter "$@")
377 kx }
377 kx
377 kx add_ldflags(){
377 kx append LDFLAGS $($ldflags_filter "$@")
377 kx }
377 kx
377 kx add_ldexeflags(){
377 kx append LDEXEFLAGS $($ldflags_filter "$@")
377 kx }
377 kx
377 kx add_ldsoflags(){
377 kx append LDSOFLAGS $($ldflags_filter "$@")
377 kx }
377 kx
377 kx add_extralibs(){
377 kx prepend extralibs $($ldflags_filter "$@")
377 kx }
377 kx
377 kx add_stripflags(){
377 kx append ASMSTRIPFLAGS "$@"
377 kx }
377 kx
377 kx add_host_cppflags(){
377 kx append host_cppflags "$@"
377 kx }
377 kx
377 kx add_host_cflags(){
377 kx append host_cflags $($host_cflags_filter "$@")
377 kx }
377 kx
377 kx add_host_ldflags(){
377 kx append host_ldflags $($host_ldflags_filter "$@")
377 kx }
377 kx
377 kx add_compat(){
377 kx append compat_objs $1
377 kx shift
377 kx map 'add_cppflags -D$v' "$@"
377 kx }
377 kx
377 kx test_cmd(){
377 kx log "$@"
377 kx "$@" >> $logfile 2>&1
377 kx }
377 kx
377 kx test_stat(){
377 kx log test_stat "$@"
377 kx stat "$1" >> $logfile 2>&1
377 kx }
377 kx
377 kx cc_e(){
377 kx eval printf '%s\\n' $CC_E
377 kx }
377 kx
377 kx cc_o(){
377 kx eval printf '%s\\n' $CC_O
377 kx }
377 kx
377 kx as_o(){
377 kx eval printf '%s\\n' $AS_O
377 kx }
377 kx
377 kx x86asm_o(){
377 kx eval printf '%s\\n' $X86ASM_O
377 kx }
377 kx
377 kx ld_o(){
377 kx eval printf '%s\\n' $LD_O
377 kx }
377 kx
377 kx hostcc_e(){
377 kx eval printf '%s\\n' $HOSTCC_E
377 kx }
377 kx
377 kx hostcc_o(){
377 kx eval printf '%s\\n' $HOSTCC_O
377 kx }
377 kx
377 kx nvcc_o(){
377 kx eval printf '%s\\n' $NVCC_O
377 kx }
377 kx
377 kx test_cc(){
377 kx log test_cc "$@"
377 kx cat > $TMPC
377 kx log_file $TMPC
377 kx test_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
377 kx }
377 kx
377 kx test_cxx(){
377 kx log test_cxx "$@"
377 kx cat > $TMPCPP
377 kx log_file $TMPCPP
377 kx test_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
377 kx }
377 kx
377 kx test_objcc(){
377 kx log test_objcc "$@"
377 kx cat > $TMPM
377 kx log_file $TMPM
377 kx test_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
377 kx }
377 kx
377 kx test_nvcc(){
377 kx log test_nvcc "$@"
377 kx cat > $TMPCU
377 kx log_file $TMPCU
377 kx tmpcu_=$TMPCU
377 kx tmpo_=$TMPO
377 kx [ -x "$(command -v cygpath)" ] && tmpcu_=$(cygpath -m $tmpcu_) && tmpo_=$(cygpath -m $tmpo_)
377 kx test_cmd $nvcc $nvccflags "$@" $NVCC_C $(nvcc_o $tmpo_) $tmpcu_
377 kx }
377 kx
377 kx check_nvcc() {
377 kx log check_nvcc "$@"
377 kx name=$1
377 kx shift 1
377 kx disabled $name && return
377 kx disable $name
377 kx test_nvcc "$@" <<EOF && enable $name
377 kx extern "C" {
377 kx __global__ void hello(unsigned char *data) {}
377 kx }
377 kx EOF
377 kx }
377 kx
377 kx test_cpp(){
377 kx log test_cpp "$@"
377 kx cat > $TMPC
377 kx log_file $TMPC
377 kx test_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
377 kx }
377 kx
377 kx test_as(){
377 kx log test_as "$@"
377 kx cat > $TMPS
377 kx log_file $TMPS
377 kx test_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
377 kx }
377 kx
377 kx test_x86asm(){
377 kx log test_x86asm "$@"
377 kx echo "$1" > $TMPASM
377 kx log_file $TMPASM
377 kx shift
377 kx test_cmd $x86asmexe $X86ASMFLAGS -Werror "$@" $(x86asm_o $TMPO) $TMPASM
377 kx }
377 kx
377 kx check_cmd(){
377 kx log check_cmd "$@"
377 kx cmd=$1
377 kx disabled $cmd && return
377 kx disable $cmd
377 kx test_cmd $@ && enable $cmd
377 kx }
377 kx
377 kx check_as(){
377 kx log check_as "$@"
377 kx name=$1
377 kx code=$2
377 kx shift 2
377 kx disable $name
377 kx test_as $@ <<EOF && enable $name
377 kx $code
377 kx EOF
377 kx }
377 kx
377 kx check_inline_asm(){
377 kx log check_inline_asm "$@"
377 kx name="$1"
377 kx code="$2"
377 kx shift 2
377 kx disable $name
377 kx test_cc "$@" <<EOF && enable $name
377 kx void foo(void){ __asm__ volatile($code); }
377 kx EOF
377 kx }
377 kx
377 kx check_inline_asm_flags(){
377 kx log check_inline_asm_flags "$@"
377 kx name="$1"
377 kx code="$2"
377 kx flags=''
377 kx shift 2
377 kx while [ "$1" != "" ]; do
377 kx append flags $1
377 kx shift
377 kx done;
377 kx disable $name
377 kx cat > $TMPC <<EOF
377 kx void foo(void){ __asm__ volatile($code); }
377 kx EOF
377 kx log_file $TMPC
377 kx test_cmd $cc $CPPFLAGS $CFLAGS $flags "$@" $CC_C $(cc_o $TMPO) $TMPC &&
377 kx enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
377 kx }
377 kx
377 kx check_insn(){
377 kx log check_insn "$@"
377 kx check_inline_asm ${1}_inline "\"$2\""
377 kx check_as ${1}_external "$2"
377 kx }
377 kx
377 kx check_x86asm(){
377 kx log check_x86asm "$@"
377 kx name=$1
377 kx shift
377 kx disable $name
377 kx test_x86asm "$@" && enable $name
377 kx }
377 kx
377 kx test_ld(){
377 kx log test_ld "$@"
377 kx type=$1
377 kx shift 1
377 kx flags=$(filter_out '-l*|*.so' $@)
377 kx libs=$(filter '-l*|*.so' $@)
377 kx test_$type $($cflags_filter $flags) || return
377 kx flags=$($ldflags_filter $flags)
377 kx libs=$($ldflags_filter $libs)
377 kx test_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
377 kx }
377 kx
377 kx check_ld(){
377 kx log check_ld "$@"
377 kx type=$1
377 kx name=$2
377 kx shift 2
377 kx disable $name
377 kx test_ld $type $@ && enable $name
377 kx }
377 kx
377 kx print_include(){
377 kx hdr=$1
377 kx test "${hdr%.h}" = "${hdr}" &&
377 kx echo "#include $hdr" ||
377 kx echo "#include <$hdr>"
377 kx }
377 kx
377 kx test_code(){
377 kx log test_code "$@"
377 kx check=$1
377 kx headers=$2
377 kx code=$3
377 kx shift 3
377 kx {
377 kx for hdr in $headers; do
377 kx print_include $hdr
377 kx done
377 kx echo "int main(void) { $code; return 0; }"
377 kx } | test_$check "$@"
377 kx }
377 kx
377 kx check_cppflags(){
377 kx log check_cppflags "$@"
377 kx test_cpp "$@" <<EOF && append CPPFLAGS "$@"
377 kx #include <stdlib.h>
377 kx EOF
377 kx }
377 kx
377 kx test_cflags(){
377 kx log test_cflags "$@"
377 kx set -- $($cflags_filter "$@")
377 kx test_cc "$@" <<EOF
377 kx int x;
377 kx EOF
377 kx }
377 kx
377 kx check_cflags(){
377 kx log check_cflags "$@"
377 kx test_cflags "$@" && add_cflags "$@"
377 kx }
377 kx
377 kx check_cxxflags(){
377 kx log check_cxxflags "$@"
377 kx set -- $($cflags_filter "$@")
377 kx test_cxx "$@" <<EOF && append CXXFLAGS "$@"
377 kx int x;
377 kx EOF
377 kx }
377 kx
377 kx test_objcflags(){
377 kx log test_objcflags "$@"
377 kx set -- $($objcflags_filter "$@")
377 kx test_objcc "$@" <<EOF
377 kx int x;
377 kx EOF
377 kx }
377 kx
377 kx check_objcflags(){
377 kx log check_objcflags "$@"
377 kx test_objcflags "$@" && add_objcflags "$@"
377 kx }
377 kx
377 kx test_ldflags(){
377 kx log test_ldflags "$@"
377 kx set -- $($ldflags_filter "$@")
377 kx test_ld "cc" "$@" <<EOF
377 kx int main(void){ return 0; }
377 kx EOF
377 kx }
377 kx
377 kx check_ldflags(){
377 kx log check_ldflags "$@"
377 kx test_ldflags "$@" && add_ldflags "$@"
377 kx }
377 kx
377 kx test_stripflags(){
377 kx log test_stripflags "$@"
377 kx # call test_cc to get a fresh TMPO
377 kx test_cc <<EOF
377 kx int main(void) { return 0; }
377 kx EOF
377 kx test_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
377 kx }
377 kx
377 kx check_stripflags(){
377 kx log check_stripflags "$@"
377 kx test_stripflags "$@" && add_stripflags "$@"
377 kx }
377 kx
377 kx check_headers(){
377 kx log check_headers "$@"
377 kx headers=$1
377 kx shift
377 kx disable_sanitized $headers
377 kx {
377 kx for hdr in $headers; do
377 kx print_include $hdr
377 kx done
377 kx echo "int x;"
377 kx } | test_cpp "$@" && enable_sanitized $headers
377 kx }
377 kx
377 kx check_header_objcc(){
377 kx log check_header_objcc "$@"
377 kx rm -f -- "$TMPO"
377 kx header=$1
377 kx shift
377 kx disable_sanitized $header
377 kx {
377 kx echo "#include <$header>"
377 kx echo "int main(void) { return 0; }"
377 kx } | test_objcc && test_stat "$TMPO" && enable_sanitized $header
377 kx }
377 kx
377 kx check_apple_framework(){
377 kx log check_apple_framework "$@"
377 kx framework="$1"
377 kx name="$(tolower $framework)"
377 kx header="${framework}/${framework}.h"
377 kx disable $name
377 kx check_header_objcc $header &&
377 kx enable $name && eval ${name}_extralibs='"-framework $framework"'
377 kx }
377 kx
377 kx check_func(){
377 kx log check_func "$@"
377 kx func=$1
377 kx shift
377 kx disable $func
377 kx test_ld "cc" "$@" <<EOF && enable $func
377 kx extern int $func();
377 kx int main(void){ $func(); }
377 kx EOF
377 kx }
377 kx
377 kx check_complexfunc(){
377 kx log check_complexfunc "$@"
377 kx func=$1
377 kx narg=$2
377 kx shift 2
377 kx test $narg = 2 && args="f, g" || args="f * I"
377 kx disable $func
377 kx test_ld "cc" "$@" <<EOF && enable $func
377 kx #include <complex.h>
377 kx #include <math.h>
377 kx float foo(complex float f, complex float g) { return $func($args); }
377 kx int main(void){ return (int) foo; }
377 kx EOF
377 kx }
377 kx
377 kx check_mathfunc(){
377 kx log check_mathfunc "$@"
377 kx func=$1
377 kx narg=$2
377 kx shift 2
377 kx test $narg = 2 && args="f, g" || args="f"
377 kx disable $func
377 kx test_ld "cc" "$@" <<EOF && enable $func
377 kx #include <math.h>
377 kx float foo(float f, float g) { return $func($args); }
377 kx int main(void){ return (int) foo; }
377 kx EOF
377 kx }
377 kx
377 kx check_func_headers(){
377 kx log check_func_headers "$@"
377 kx headers=$1
377 kx funcs=$2
377 kx shift 2
377 kx {
377 kx for hdr in $headers; do
377 kx print_include $hdr
377 kx done
377 kx echo "#include <stdint.h>"
377 kx for func in $funcs; do
377 kx echo "long check_$func(void) { return (long) $func; }"
377 kx done
377 kx echo "int main(void) { int ret = 0;"
377 kx # LTO could optimize out the test functions without this
377 kx for func in $funcs; do
377 kx echo " ret |= ((intptr_t)check_$func) & 0xFFFF;"
377 kx done
377 kx echo "return ret; }"
377 kx } | test_ld "cc" "$@" && enable $funcs && enable_sanitized $headers
377 kx }
377 kx
377 kx check_class_headers_cpp(){
377 kx log check_class_headers_cpp "$@"
377 kx headers=$1
377 kx classes=$2
377 kx shift 2
377 kx {
377 kx for hdr in $headers; do
377 kx echo "#include <$hdr>"
377 kx done
377 kx echo "int main(void) { "
377 kx i=1
377 kx for class in $classes; do
377 kx echo "$class obj$i;"
377 kx i=$(expr $i + 1)
377 kx done
377 kx echo "return 0; }"
377 kx } | test_ld "cxx" "$@" && enable $funcs && enable_sanitized $headers
377 kx }
377 kx
377 kx test_cpp_condition(){
377 kx log test_cpp_condition "$@"
377 kx header=$1
377 kx condition=$2
377 kx shift 2
377 kx test_cpp "$@" <<EOF
377 kx #include <$header>
377 kx #if !($condition)
377 kx #error "unsatisfied condition: $condition"
377 kx #endif
377 kx EOF
377 kx }
377 kx
377 kx check_cpp_condition(){
377 kx log check_cpp_condition "$@"
377 kx name=$1
377 kx shift 1
377 kx disable $name
377 kx test_cpp_condition "$@" && enable $name
377 kx }
377 kx
377 kx test_cflags_cc(){
377 kx log test_cflags_cc "$@"
377 kx flags=$1
377 kx header=$2
377 kx condition=$3
377 kx shift 3
377 kx set -- $($cflags_filter "$flags")
377 kx test_cc "$@" <<EOF
377 kx #include <$header>
377 kx #if !($condition)
377 kx #error "unsatisfied condition: $condition"
377 kx #endif
377 kx EOF
377 kx }
377 kx
377 kx check_lib(){
377 kx log check_lib "$@"
377 kx name="$1"
377 kx headers="$2"
377 kx funcs="$3"
377 kx shift 3
377 kx disable $name
377 kx check_func_headers "$headers" "$funcs" "$@" &&
377 kx enable $name && eval ${name}_extralibs="\$@"
377 kx }
377 kx
377 kx check_lib_cpp(){
377 kx log check_lib_cpp "$@"
377 kx name="$1"
377 kx headers="$2"
377 kx classes="$3"
377 kx shift 3
377 kx disable $name
377 kx check_class_headers_cpp "$headers" "$classes" "$@" &&
377 kx enable $name && eval ${name}_extralibs="\$@"
377 kx }
377 kx
377 kx test_pkg_config(){
377 kx log test_pkg_config "$@"
377 kx name="$1"
377 kx pkg_version="$2"
377 kx pkg="${2%% *}"
377 kx headers="$3"
377 kx funcs="$4"
377 kx shift 4
377 kx disable $name
377 kx test_cmd $pkg_config --exists --print-errors $pkg_version || return
377 kx pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
377 kx pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
377 kx check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
377 kx enable $name &&
377 kx set_sanitized "${name}_cflags" $pkg_cflags &&
377 kx set_sanitized "${name}_extralibs" $pkg_libs
377 kx }
377 kx
377 kx check_pkg_config(){
377 kx log check_pkg_config "$@"
377 kx name="$1"
377 kx test_pkg_config "$@" &&
377 kx eval add_cflags \$${name}_cflags
377 kx }
377 kx
377 kx test_exec(){
377 kx test_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
377 kx }
377 kx
377 kx check_exec_crash(){
377 kx log check_exec_crash "$@"
377 kx code=$(cat)
377 kx
377 kx # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
377 kx # are safe but may not be available everywhere. Thus we use
377 kx # raise(SIGTERM) instead. The check is run in a subshell so we
377 kx # can redirect the "Terminated" message from the shell. SIGBUS
377 kx # is not defined by standard C so it is used conditionally.
377 kx
377 kx (test_exec "$@") >> $logfile 2>&1 <<EOF
377 kx #include <signal.h>
377 kx static void sighandler(int sig){
377 kx raise(SIGTERM);
377 kx }
377 kx int foo(void){
377 kx $code
377 kx }
377 kx int (*func_ptr)(void) = foo;
377 kx int main(void){
377 kx signal(SIGILL, sighandler);
377 kx signal(SIGFPE, sighandler);
377 kx signal(SIGSEGV, sighandler);
377 kx #ifdef SIGBUS
377 kx signal(SIGBUS, sighandler);
377 kx #endif
377 kx return func_ptr();
377 kx }
377 kx EOF
377 kx }
377 kx
377 kx check_type(){
377 kx log check_type "$@"
377 kx headers=$1
377 kx type=$2
377 kx shift 2
377 kx disable_sanitized "$type"
377 kx test_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
377 kx }
377 kx
377 kx check_struct(){
377 kx log check_struct "$@"
377 kx headers=$1
377 kx struct=$2
377 kx member=$3
377 kx shift 3
377 kx disable_sanitized "${struct}_${member}"
377 kx test_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
377 kx enable_sanitized "${struct}_${member}"
377 kx }
377 kx
377 kx check_builtin(){
377 kx log check_builtin "$@"
377 kx name=$1
377 kx headers=$2
377 kx builtin=$3
377 kx shift 3
377 kx disable "$name"
377 kx test_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
377 kx }
377 kx
377 kx check_compile_assert(){
377 kx log check_compile_assert "$@"
377 kx name=$1
377 kx headers=$2
377 kx condition=$3
377 kx shift 3
377 kx disable "$name"
377 kx test_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
377 kx }
377 kx
377 kx check_cc(){
377 kx log check_cc "$@"
377 kx name=$1
377 kx shift
377 kx disable "$name"
377 kx test_code cc "$@" && enable "$name"
377 kx }
377 kx
377 kx require(){
377 kx log require "$@"
377 kx name_version="$1"
377 kx name="${1%% *}"
377 kx shift
377 kx check_lib $name "$@" || die "ERROR: $name_version not found"
377 kx }
377 kx
377 kx require_cc(){
377 kx log require_cc "$@"
377 kx name="$1"
377 kx check_cc "$@" || die "ERROR: $name failed"
377 kx }
377 kx
377 kx require_cpp(){
377 kx log require_cpp "$@"
377 kx name_version="$1"
377 kx name="${1%% *}"
377 kx shift
377 kx check_lib_cpp "$name" "$@" || die "ERROR: $name_version not found"
377 kx }
377 kx
377 kx require_headers(){
377 kx log require_headers "$@"
377 kx headers="$1"
377 kx check_headers "$@" || die "ERROR: $headers not found"
377 kx }
377 kx
377 kx require_cpp_condition(){
377 kx log require_cpp_condition "$@"
377 kx condition="$3"
377 kx check_cpp_condition "$@" || die "ERROR: $condition not satisfied"
377 kx }
377 kx
377 kx require_pkg_config(){
377 kx log require_pkg_config "$@"
377 kx pkg_version="$2"
377 kx check_pkg_config "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message"
377 kx }
377 kx
377 kx test_host_cc(){
377 kx log test_host_cc "$@"
377 kx cat > $TMPC
377 kx log_file $TMPC
377 kx test_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
377 kx }
377 kx
377 kx test_host_cpp(){
377 kx log test_host_cpp "$@"
377 kx cat > $TMPC
377 kx log_file $TMPC
377 kx test_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
377 kx }
377 kx
377 kx check_host_cppflags(){
377 kx log check_host_cppflags "$@"
377 kx test_host_cpp "$@" <<EOF && append host_cppflags "$@"
377 kx #include <stdlib.h>
377 kx EOF
377 kx }
377 kx
377 kx check_host_cflags(){
377 kx log check_host_cflags "$@"
377 kx set -- $($host_cflags_filter "$@")
377 kx test_host_cc "$@" <<EOF && append host_cflags "$@"
377 kx int x;
377 kx EOF
377 kx }
377 kx
377 kx test_host_cpp_condition(){
377 kx log test_host_cpp_condition "$@"
377 kx header=$1
377 kx condition=$2
377 kx shift 2
377 kx test_host_cpp "$@" <<EOF
377 kx #include <$header>
377 kx #if !($condition)
377 kx #error "unsatisfied condition: $condition"
377 kx #endif
377 kx EOF
377 kx }
377 kx
377 kx check_host_cpp_condition(){
377 kx log check_host_cpp_condition "$@"
377 kx name=$1
377 kx shift 1
377 kx disable $name
377 kx test_host_cpp_condition "$@" && enable $name
377 kx }
377 kx
377 kx cp_if_changed(){
377 kx cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
377 kx mkdir -p "$(dirname $2)"
377 kx cp -f "$1" "$2"
377 kx }
377 kx
377 kx # CONFIG_LIST contains configurable options, while HAVE_LIST is for
377 kx # system-dependent things.
377 kx
377 kx AVCODEC_COMPONENTS="
377 kx bsfs
377 kx decoders
377 kx encoders
377 kx hwaccels
377 kx parsers
377 kx "
377 kx
377 kx AVDEVICE_COMPONENTS="
377 kx indevs
377 kx outdevs
377 kx "
377 kx
377 kx AVFILTER_COMPONENTS="
377 kx filters
377 kx "
377 kx
377 kx AVFORMAT_COMPONENTS="
377 kx demuxers
377 kx muxers
377 kx protocols
377 kx "
377 kx
377 kx COMPONENT_LIST="
377 kx $AVCODEC_COMPONENTS
377 kx $AVDEVICE_COMPONENTS
377 kx $AVFILTER_COMPONENTS
377 kx $AVFORMAT_COMPONENTS
377 kx "
377 kx
377 kx EXAMPLE_LIST="
377 kx avio_list_dir_example
377 kx avio_reading_example
377 kx decode_audio_example
377 kx decode_video_example
377 kx demuxing_decoding_example
377 kx encode_audio_example
377 kx encode_video_example
377 kx extract_mvs_example
377 kx filter_audio_example
377 kx filtering_audio_example
377 kx filtering_video_example
377 kx http_multiclient_example
377 kx hw_decode_example
377 kx metadata_example
377 kx muxing_example
377 kx qsvdec_example
377 kx remuxing_example
377 kx resampling_audio_example
377 kx scaling_video_example
377 kx transcode_aac_example
377 kx transcoding_example
377 kx vaapi_encode_example
377 kx vaapi_transcode_example
377 kx "
377 kx
377 kx EXTERNAL_AUTODETECT_LIBRARY_LIST="
377 kx alsa
377 kx appkit
377 kx avfoundation
377 kx bzlib
377 kx coreimage
377 kx iconv
377 kx libxcb
377 kx libxcb_shm
377 kx libxcb_shape
377 kx libxcb_xfixes
377 kx lzma
377 kx mediafoundation
377 kx schannel
377 kx sdl2
377 kx securetransport
377 kx sndio
377 kx xlib
377 kx zlib
377 kx "
377 kx
377 kx EXTERNAL_LIBRARY_GPL_LIST="
377 kx avisynth
377 kx frei0r
377 kx libcdio
377 kx libdavs2
377 kx librubberband
377 kx libvidstab
377 kx libx264
377 kx libx265
377 kx libxavs
377 kx libxavs2
377 kx libxvid
377 kx "
377 kx
377 kx EXTERNAL_LIBRARY_NONFREE_LIST="
377 kx decklink
377 kx libfdk_aac
377 kx openssl
377 kx libtls
377 kx "
377 kx
377 kx EXTERNAL_LIBRARY_VERSION3_LIST="
377 kx gmp
377 kx libaribb24
377 kx liblensfun
377 kx libopencore_amrnb
377 kx libopencore_amrwb
377 kx libvo_amrwbenc
377 kx mbedtls
377 kx rkmpp
377 kx "
377 kx
377 kx EXTERNAL_LIBRARY_GPLV3_LIST="
377 kx libsmbclient
377 kx "
377 kx
377 kx EXTERNAL_LIBRARY_LIST="
377 kx $EXTERNAL_LIBRARY_GPL_LIST
377 kx $EXTERNAL_LIBRARY_NONFREE_LIST
377 kx $EXTERNAL_LIBRARY_VERSION3_LIST
377 kx $EXTERNAL_LIBRARY_GPLV3_LIST
377 kx chromaprint
377 kx gcrypt
377 kx gnutls
377 kx jni
377 kx ladspa
377 kx libaom
377 kx libass
377 kx libbluray
377 kx libbs2b
377 kx libcaca
377 kx libcelt
377 kx libcodec2
377 kx libdav1d
377 kx libdc1394
377 kx libdrm
377 kx libflite
377 kx libfontconfig
377 kx libfreetype
377 kx libfribidi
377 kx libglslang
377 kx libgme
377 kx libgsm
377 kx libiec61883
377 kx libilbc
377 kx libjack
377 kx libklvanc
377 kx libkvazaar
377 kx libmodplug
377 kx libmp3lame
377 kx libmysofa
377 kx libopencv
377 kx libopenh264
377 kx libopenjpeg
377 kx libopenmpt
377 kx libopenvino
377 kx libopus
377 kx libpulse
377 kx librabbitmq
377 kx librav1e
377 kx librist
377 kx librsvg
377 kx librtmp
377 kx libshine
377 kx libsmbclient
377 kx libsnappy
377 kx libsoxr
377 kx libspeex
377 kx libsrt
377 kx libssh
377 kx libsvtav1
377 kx libtensorflow
377 kx libtesseract
377 kx libtheora
377 kx libtwolame
377 kx libuavs3d
377 kx libv4l2
377 kx libvmaf
377 kx libvorbis
377 kx libvpx
377 kx libwebp
377 kx libxml2
377 kx libzimg
377 kx libzmq
377 kx libzvbi
377 kx lv2
377 kx mediacodec
377 kx openal
377 kx opengl
377 kx pocketsphinx
377 kx vapoursynth
377 kx "
377 kx
377 kx HWACCEL_AUTODETECT_LIBRARY_LIST="
377 kx amf
377 kx audiotoolbox
377 kx crystalhd
377 kx cuda
377 kx cuda_llvm
377 kx cuvid
377 kx d3d11va
377 kx dxva2
377 kx ffnvcodec
377 kx nvdec
377 kx nvenc
377 kx vaapi
377 kx vdpau
377 kx videotoolbox
377 kx v4l2_m2m
377 kx xvmc
377 kx "
377 kx
377 kx # catchall list of things that require external libs to link
377 kx EXTRALIBS_LIST="
377 kx cpu_init
377 kx cws2fws
377 kx "
377 kx
377 kx HWACCEL_LIBRARY_NONFREE_LIST="
377 kx cuda_nvcc
377 kx cuda_sdk
377 kx libnpp
377 kx "
377 kx
377 kx HWACCEL_LIBRARY_LIST="
377 kx $HWACCEL_LIBRARY_NONFREE_LIST
377 kx libmfx
377 kx mmal
377 kx omx
377 kx opencl
377 kx vulkan
377 kx "
377 kx
377 kx DOCUMENT_LIST="
377 kx doc
377 kx htmlpages
377 kx manpages
377 kx podpages
377 kx txtpages
377 kx "
377 kx
377 kx FEATURE_LIST="
377 kx ftrapv
377 kx gray
377 kx hardcoded_tables
377 kx omx_rpi
377 kx omx_img
377 kx runtime_cpudetect
377 kx safe_bitstream_reader
377 kx shared
377 kx small
377 kx static
377 kx swscale_alpha
377 kx "
377 kx
377 kx # this list should be kept in linking order
377 kx LIBRARY_LIST="
377 kx avdevice
377 kx avfilter
377 kx swscale
377 kx postproc
377 kx avformat
377 kx avcodec
377 kx swresample
377 kx avresample
377 kx avutil
377 kx "
377 kx
377 kx LICENSE_LIST="
377 kx gpl
377 kx nonfree
377 kx version3
377 kx "
377 kx
377 kx PROGRAM_LIST="
377 kx ffplay
377 kx ffprobe
377 kx ffmpeg
377 kx "
377 kx
377 kx SUBSYSTEM_LIST="
377 kx dct
377 kx dwt
377 kx error_resilience
377 kx faan
377 kx fast_unaligned
377 kx fft
377 kx lsp
377 kx lzo
377 kx mdct
377 kx pixelutils
377 kx network
377 kx rdft
377 kx "
377 kx
377 kx # COMPONENT_LIST needs to come last to ensure correct dependency checking
377 kx CONFIG_LIST="
377 kx $DOCUMENT_LIST
377 kx $EXAMPLE_LIST
377 kx $EXTERNAL_LIBRARY_LIST
377 kx $EXTERNAL_AUTODETECT_LIBRARY_LIST
377 kx $HWACCEL_LIBRARY_LIST
377 kx $HWACCEL_AUTODETECT_LIBRARY_LIST
377 kx $FEATURE_LIST
377 kx $LICENSE_LIST
377 kx $LIBRARY_LIST
377 kx $PROGRAM_LIST
377 kx $SUBSYSTEM_LIST
377 kx autodetect
377 kx fontconfig
377 kx large_tests
377 kx linux_perf
377 kx memory_poisoning
377 kx neon_clobber_test
377 kx ossfuzz
377 kx pic
377 kx thumb
377 kx valgrind_backtrace
377 kx xmm_clobber_test
377 kx $COMPONENT_LIST
377 kx "
377 kx
377 kx THREADS_LIST="
377 kx pthreads
377 kx os2threads
377 kx w32threads
377 kx "
377 kx
377 kx ATOMICS_LIST="
377 kx atomics_gcc
377 kx atomics_suncc
377 kx atomics_win32
377 kx "
377 kx
377 kx AUTODETECT_LIBS="
377 kx $EXTERNAL_AUTODETECT_LIBRARY_LIST
377 kx $HWACCEL_AUTODETECT_LIBRARY_LIST
377 kx $THREADS_LIST
377 kx "
377 kx
377 kx ARCH_LIST="
377 kx aarch64
377 kx alpha
377 kx arm
377 kx avr32
377 kx avr32_ap
377 kx avr32_uc
377 kx bfin
377 kx ia64
377 kx m68k
377 kx mips
377 kx mips64
377 kx parisc
377 kx ppc
377 kx ppc64
377 kx s390
377 kx sh4
377 kx sparc
377 kx sparc64
377 kx tilegx
377 kx tilepro
377 kx tomi
377 kx x86
377 kx x86_32
377 kx x86_64
377 kx "
377 kx
377 kx ARCH_EXT_LIST_ARM="
377 kx armv5te
377 kx armv6
377 kx armv6t2
377 kx armv8
377 kx neon
377 kx vfp
377 kx vfpv3
377 kx setend
377 kx "
377 kx
377 kx ARCH_EXT_LIST_MIPS="
377 kx mipsfpu
377 kx mips32r2
377 kx mips32r5
377 kx mips64r2
377 kx mips32r6
377 kx mips64r6
377 kx mipsdsp
377 kx mipsdspr2
377 kx msa
377 kx msa2
377 kx "
377 kx
377 kx ARCH_EXT_LIST_LOONGSON="
377 kx loongson2
377 kx loongson3
377 kx mmi
377 kx "
377 kx
377 kx ARCH_EXT_LIST_X86_SIMD="
377 kx aesni
377 kx amd3dnow
377 kx amd3dnowext
377 kx avx
377 kx avx2
377 kx avx512
377 kx fma3
377 kx fma4
377 kx mmx
377 kx mmxext
377 kx sse
377 kx sse2
377 kx sse3
377 kx sse4
377 kx sse42
377 kx ssse3
377 kx xop
377 kx "
377 kx
377 kx ARCH_EXT_LIST_PPC="
377 kx altivec
377 kx dcbzl
377 kx ldbrx
377 kx power8
377 kx ppc4xx
377 kx vsx
377 kx "
377 kx
377 kx ARCH_EXT_LIST_X86="
377 kx $ARCH_EXT_LIST_X86_SIMD
377 kx cpunop
377 kx i686
377 kx "
377 kx
377 kx ARCH_EXT_LIST="
377 kx $ARCH_EXT_LIST_ARM
377 kx $ARCH_EXT_LIST_PPC
377 kx $ARCH_EXT_LIST_X86
377 kx $ARCH_EXT_LIST_MIPS
377 kx $ARCH_EXT_LIST_LOONGSON
377 kx "
377 kx
377 kx ARCH_FEATURES="
377 kx aligned_stack
377 kx fast_64bit
377 kx fast_clz
377 kx fast_cmov
377 kx local_aligned
377 kx simd_align_16
377 kx simd_align_32
377 kx simd_align_64
377 kx "
377 kx
377 kx BUILTIN_LIST="
377 kx atomic_cas_ptr
377 kx machine_rw_barrier
377 kx MemoryBarrier
377 kx mm_empty
377 kx rdtsc
377 kx sem_timedwait
377 kx sync_val_compare_and_swap
377 kx "
377 kx HAVE_LIST_CMDLINE="
377 kx inline_asm
377 kx symver
377 kx x86asm
377 kx "
377 kx
377 kx HAVE_LIST_PUB="
377 kx bigendian
377 kx fast_unaligned
377 kx "
377 kx
377 kx HEADERS_LIST="
377 kx arpa_inet_h
377 kx asm_types_h
377 kx cdio_paranoia_h
377 kx cdio_paranoia_paranoia_h
377 kx cuda_h
377 kx dispatch_dispatch_h
377 kx dev_bktr_ioctl_bt848_h
377 kx dev_bktr_ioctl_meteor_h
377 kx dev_ic_bt8xx_h
377 kx dev_video_bktr_ioctl_bt848_h
377 kx dev_video_meteor_ioctl_meteor_h
377 kx direct_h
377 kx dirent_h
377 kx dxgidebug_h
377 kx dxva_h
377 kx ES2_gl_h
377 kx gsm_h
377 kx io_h
377 kx linux_dma_buf_h
377 kx linux_perf_event_h
377 kx machine_ioctl_bt848_h
377 kx machine_ioctl_meteor_h
377 kx malloc_h
377 kx opencv2_core_core_c_h
377 kx OpenGL_gl3_h
377 kx poll_h
377 kx sys_param_h
377 kx sys_resource_h
377 kx sys_select_h
377 kx sys_soundcard_h
377 kx sys_time_h
377 kx sys_un_h
377 kx sys_videoio_h
377 kx termios_h
377 kx udplite_h
377 kx unistd_h
377 kx valgrind_valgrind_h
377 kx windows_h
377 kx winsock2_h
377 kx "
377 kx
377 kx INTRINSICS_LIST="
377 kx intrinsics_neon
377 kx "
377 kx
377 kx COMPLEX_FUNCS="
377 kx cabs
377 kx cexp
377 kx "
377 kx
377 kx MATH_FUNCS="
377 kx atanf
377 kx atan2f
377 kx cbrt
377 kx cbrtf
377 kx copysign
377 kx cosf
377 kx erf
377 kx exp2
377 kx exp2f
377 kx expf
377 kx hypot
377 kx isfinite
377 kx isinf
377 kx isnan
377 kx ldexpf
377 kx llrint
377 kx llrintf
377 kx log2
377 kx log2f
377 kx log10f
377 kx lrint
377 kx lrintf
377 kx powf
377 kx rint
377 kx round
377 kx roundf
377 kx sinf
377 kx trunc
377 kx truncf
377 kx "
377 kx
377 kx SYSTEM_FEATURES="
377 kx dos_paths
377 kx libc_msvcrt
377 kx MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
377 kx section_data_rel_ro
377 kx threads
377 kx uwp
377 kx winrt
377 kx "
377 kx
377 kx SYSTEM_FUNCS="
377 kx access
377 kx aligned_malloc
377 kx arc4random
377 kx clock_gettime
377 kx closesocket
377 kx CommandLineToArgvW
377 kx fcntl
377 kx getaddrinfo
377 kx gethrtime
377 kx getopt
377 kx GetModuleHandle
377 kx GetProcessAffinityMask
377 kx GetProcessMemoryInfo
377 kx GetProcessTimes
377 kx getrusage
377 kx GetStdHandle
377 kx GetSystemTimeAsFileTime
377 kx gettimeofday
377 kx glob
377 kx glXGetProcAddress
377 kx gmtime_r
377 kx inet_aton
377 kx isatty
377 kx kbhit
377 kx localtime_r
377 kx lstat
377 kx lzo1x_999_compress
377 kx mach_absolute_time
377 kx MapViewOfFile
377 kx memalign
377 kx mkstemp
377 kx mmap
377 kx mprotect
377 kx nanosleep
377 kx PeekNamedPipe
377 kx posix_memalign
377 kx pthread_cancel
377 kx sched_getaffinity
377 kx SecItemImport
377 kx SetConsoleTextAttribute
377 kx SetConsoleCtrlHandler
377 kx SetDllDirectory
377 kx setmode
377 kx setrlimit
377 kx Sleep
377 kx strerror_r
377 kx sysconf
377 kx sysctl
377 kx usleep
377 kx UTGetOSTypeFromString
377 kx VirtualAlloc
377 kx wglGetProcAddress
377 kx "
377 kx
377 kx SYSTEM_LIBRARIES="
377 kx bcrypt
377 kx vaapi_drm
377 kx vaapi_x11
377 kx vdpau_x11
377 kx "
377 kx
377 kx TOOLCHAIN_FEATURES="
377 kx as_arch_directive
377 kx as_dn_directive
377 kx as_fpu_directive
377 kx as_func
377 kx as_object_arch
377 kx asm_mod_q
377 kx blocks_extension
377 kx ebp_available
377 kx ebx_available
377 kx gnu_as
377 kx gnu_windres
377 kx ibm_asm
377 kx inline_asm_direct_symbol_refs
377 kx inline_asm_labels
377 kx inline_asm_nonlocal_labels
377 kx pragma_deprecated
377 kx rsync_contimeout
377 kx symver_asm_label
377 kx symver_gnu_asm
377 kx vfp_args
377 kx xform_asm
377 kx xmm_clobbers
377 kx "
377 kx
377 kx TYPES_LIST="
377 kx kCMVideoCodecType_HEVC
377 kx kCMVideoCodecType_HEVCWithAlpha
377 kx kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange
377 kx kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ
377 kx kCVImageBufferTransferFunction_ITU_R_2100_HLG
377 kx kCVImageBufferTransferFunction_Linear
377 kx socklen_t
377 kx struct_addrinfo
377 kx struct_group_source_req
377 kx struct_ip_mreq_source
377 kx struct_ipv6_mreq
377 kx struct_msghdr_msg_flags
377 kx struct_pollfd
377 kx struct_rusage_ru_maxrss
377 kx struct_sctp_event_subscribe
377 kx struct_sockaddr_in6
377 kx struct_sockaddr_sa_len
377 kx struct_sockaddr_storage
377 kx struct_stat_st_mtim_tv_nsec
377 kx struct_v4l2_frmivalenum_discrete
377 kx "
377 kx
377 kx HAVE_LIST="
377 kx $ARCH_EXT_LIST
377 kx $(add_suffix _external $ARCH_EXT_LIST)
377 kx $(add_suffix _inline $ARCH_EXT_LIST)
377 kx $ARCH_FEATURES
377 kx $BUILTIN_LIST
377 kx $COMPLEX_FUNCS
377 kx $HAVE_LIST_CMDLINE
377 kx $HAVE_LIST_PUB
377 kx $HEADERS_LIST
377 kx $INTRINSICS_LIST
377 kx $MATH_FUNCS
377 kx $SYSTEM_FEATURES
377 kx $SYSTEM_FUNCS
377 kx $SYSTEM_LIBRARIES
377 kx $THREADS_LIST
377 kx $TOOLCHAIN_FEATURES
377 kx $TYPES_LIST
377 kx libdrm_getfb2
377 kx makeinfo
377 kx makeinfo_html
377 kx opencl_d3d11
377 kx opencl_drm_arm
377 kx opencl_drm_beignet
377 kx opencl_dxva2
377 kx opencl_vaapi_beignet
377 kx opencl_vaapi_intel_media
377 kx perl
377 kx pod2man
377 kx texi2html
377 kx "
377 kx
377 kx # options emitted with CONFIG_ prefix but not available on the command line
377 kx CONFIG_EXTRA="
377 kx aandcttables
377 kx ac3dsp
377 kx adts_header
377 kx atsc_a53
377 kx audio_frame_queue
377 kx audiodsp
377 kx blockdsp
377 kx bswapdsp
377 kx cabac
377 kx cbs
377 kx cbs_av1
377 kx cbs_h264
377 kx cbs_h265
377 kx cbs_jpeg
377 kx cbs_mpeg2
377 kx cbs_vp9
377 kx dirac_parse
377 kx dnn
377 kx dvprofile
377 kx exif
377 kx faandct
377 kx faanidct
377 kx fdctdsp
377 kx flacdsp
377 kx fmtconvert
377 kx frame_thread_encoder
377 kx g722dsp
377 kx golomb
377 kx gplv3
377 kx h263dsp
377 kx h264chroma
377 kx h264dsp
377 kx h264parse
377 kx h264pred
377 kx h264qpel
377 kx hevcparse
377 kx hpeldsp
377 kx huffman
377 kx huffyuvdsp
377 kx huffyuvencdsp
377 kx idctdsp
377 kx iirfilter
377 kx mdct15
377 kx intrax8
377 kx iso_media
377 kx ividsp
377 kx jpegtables
377 kx lgplv3
377 kx libx262
377 kx llauddsp
377 kx llviddsp
377 kx llvidencdsp
377 kx lpc
377 kx lzf
377 kx me_cmp
377 kx mpeg_er
377 kx mpegaudio
377 kx mpegaudiodsp
377 kx mpegaudioheader
377 kx mpegvideo
377 kx mpegvideoenc
377 kx mss34dsp
377 kx pixblockdsp
377 kx qpeldsp
377 kx qsv
377 kx qsvdec
377 kx qsvenc
377 kx qsvvpp
377 kx rangecoder
377 kx riffdec
377 kx riffenc
377 kx rtpdec
377 kx rtpenc_chain
377 kx rv34dsp
377 kx scene_sad
377 kx sinewin
377 kx snappy
377 kx srtp
377 kx startcode
377 kx texturedsp
377 kx texturedspenc
377 kx tpeldsp
377 kx vaapi_1
377 kx vaapi_encode
377 kx vc1dsp
377 kx videodsp
377 kx vp3dsp
377 kx vp56dsp
377 kx vp8dsp
377 kx wma_freqs
377 kx wmv2dsp
377 kx "
377 kx
377 kx CMDLINE_SELECT="
377 kx $ARCH_EXT_LIST
377 kx $CONFIG_LIST
377 kx $HAVE_LIST_CMDLINE
377 kx $THREADS_LIST
377 kx asm
377 kx cross_compile
377 kx debug
377 kx extra_warnings
377 kx logging
377 kx lto
377 kx optimizations
377 kx rpath
377 kx stripping
377 kx "
377 kx
377 kx PATHS_LIST="
377 kx bindir
377 kx datadir
377 kx docdir
377 kx incdir
377 kx libdir
377 kx mandir
377 kx pkgconfigdir
377 kx prefix
377 kx shlibdir
377 kx install_name_dir
377 kx "
377 kx
377 kx CMDLINE_SET="
377 kx $PATHS_LIST
377 kx ar
377 kx arch
377 kx as
377 kx assert_level
377 kx build_suffix
377 kx cc
377 kx objcc
377 kx cpu
377 kx cross_prefix
377 kx custom_allocator
377 kx cxx
377 kx dep_cc
377 kx doxygen
377 kx env
377 kx extra_version
377 kx gas
377 kx host_cc
377 kx host_cflags
377 kx host_extralibs
377 kx host_ld
377 kx host_ldflags
377 kx host_os
377 kx ignore_tests
377 kx install
377 kx ld
377 kx ln_s
377 kx logfile
377 kx malloc_prefix
377 kx nm
377 kx optflags
377 kx nvcc
377 kx nvccflags
377 kx pkg_config
377 kx pkg_config_flags
377 kx progs_suffix
377 kx random_seed
377 kx ranlib
377 kx samples
377 kx strip
377 kx sws_max_filter_size
377 kx sysinclude
377 kx sysroot
377 kx target_exec
377 kx target_os
377 kx target_path
377 kx target_samples
377 kx tempprefix
377 kx toolchain
377 kx valgrind
377 kx windres
377 kx x86asmexe
377 kx "
377 kx
377 kx CMDLINE_APPEND="
377 kx extra_cflags
377 kx extra_cxxflags
377 kx extra_objcflags
377 kx host_cppflags
377 kx "
377 kx
377 kx # code dependency declarations
377 kx
377 kx # architecture extensions
377 kx
377 kx armv5te_deps="arm"
377 kx armv6_deps="arm"
377 kx armv6t2_deps="arm"
377 kx armv8_deps="aarch64"
377 kx neon_deps_any="aarch64 arm"
377 kx intrinsics_neon_deps="neon"
377 kx vfp_deps_any="aarch64 arm"
377 kx vfpv3_deps="vfp"
377 kx setend_deps="arm"
377 kx
377 kx map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
377 kx
377 kx altivec_deps="ppc"
377 kx dcbzl_deps="ppc"
377 kx ldbrx_deps="ppc"
377 kx ppc4xx_deps="ppc"
377 kx vsx_deps="altivec"
377 kx power8_deps="vsx"
377 kx
377 kx loongson2_deps="mips"
377 kx loongson3_deps="mips"
377 kx mips32r2_deps="mips"
377 kx mips32r5_deps="mips"
377 kx mips32r6_deps="mips"
377 kx mips64r2_deps="mips"
377 kx mips64r6_deps="mips"
377 kx mipsfpu_deps="mips"
377 kx mipsdsp_deps="mips"
377 kx mipsdspr2_deps="mips"
377 kx mmi_deps_any="loongson2 loongson3"
377 kx msa_deps="mipsfpu"
377 kx msa2_deps="msa"
377 kx
377 kx cpunop_deps="i686"
377 kx x86_64_select="i686"
377 kx x86_64_suggest="fast_cmov"
377 kx
377 kx amd3dnow_deps="mmx"
377 kx amd3dnowext_deps="amd3dnow"
377 kx i686_deps="x86"
377 kx mmx_deps="x86"
377 kx mmxext_deps="mmx"
377 kx sse_deps="mmxext"
377 kx sse2_deps="sse"
377 kx sse3_deps="sse2"
377 kx ssse3_deps="sse3"
377 kx sse4_deps="ssse3"
377 kx sse42_deps="sse4"
377 kx aesni_deps="sse42"
377 kx avx_deps="sse42"
377 kx xop_deps="avx"
377 kx fma3_deps="avx"
377 kx fma4_deps="avx"
377 kx avx2_deps="avx"
377 kx avx512_deps="avx2"
377 kx
377 kx mmx_external_deps="x86asm"
377 kx mmx_inline_deps="inline_asm x86"
377 kx mmx_suggest="mmx_external mmx_inline"
377 kx
377 kx for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
377 kx eval dep=\$${ext}_deps
377 kx eval ${ext}_external_deps='"${dep}_external"'
377 kx eval ${ext}_inline_deps='"${dep}_inline"'
377 kx eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
377 kx done
377 kx
377 kx aligned_stack_if_any="aarch64 ppc x86"
377 kx fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
377 kx fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
377 kx fast_unaligned_if_any="aarch64 ppc x86"
377 kx simd_align_16_if_any="altivec neon sse"
377 kx simd_align_32_if_any="avx"
377 kx simd_align_64_if_any="avx512"
377 kx
377 kx # system capabilities
377 kx linux_perf_deps="linux_perf_event_h"
377 kx symver_if_any="symver_asm_label symver_gnu_asm"
377 kx valgrind_backtrace_conflict="optimizations"
377 kx valgrind_backtrace_deps="valgrind_valgrind_h"
377 kx
377 kx # threading support
377 kx atomics_gcc_if="sync_val_compare_and_swap"
377 kx atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
377 kx atomics_win32_if="MemoryBarrier"
377 kx atomics_native_if_any="$ATOMICS_LIST"
377 kx w32threads_deps="atomics_native"
377 kx threads_if_any="$THREADS_LIST"
377 kx
377 kx # subsystems
377 kx cbs_av1_select="cbs"
377 kx cbs_h264_select="cbs"
377 kx cbs_h265_select="cbs"
377 kx cbs_jpeg_select="cbs"
377 kx cbs_mpeg2_select="cbs"
377 kx cbs_vp9_select="cbs"
377 kx dct_select="rdft"
377 kx dirac_parse_select="golomb"
377 kx dnn_suggest="libtensorflow libopenvino"
377 kx dnn_deps="swscale"
377 kx error_resilience_select="me_cmp"
377 kx faandct_deps="faan"
377 kx faandct_select="fdctdsp"
377 kx faanidct_deps="faan"
377 kx faanidct_select="idctdsp"
377 kx h264dsp_select="startcode"
377 kx hevcparse_select="atsc_a53 golomb"
377 kx frame_thread_encoder_deps="encoders threads"
377 kx intrax8_select="blockdsp idctdsp"
377 kx mdct_select="fft"
377 kx mdct15_select="fft"
377 kx me_cmp_select="fdctdsp idctdsp pixblockdsp"
377 kx mpeg_er_select="error_resilience"
377 kx mpegaudio_select="mpegaudiodsp mpegaudioheader"
377 kx mpegaudiodsp_select="dct"
377 kx mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
377 kx mpegvideoenc_select="aandcttables me_cmp mpegvideo pixblockdsp qpeldsp"
377 kx vc1dsp_select="h264chroma qpeldsp startcode"
377 kx rdft_select="fft"
377 kx
377 kx # decoders / encoders
377 kx aac_decoder_select="adts_header mdct15 mdct sinewin"
377 kx aac_fixed_decoder_select="adts_header mdct"
377 kx aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
377 kx aac_latm_decoder_select="aac_decoder aac_latm_parser"
377 kx ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
377 kx ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
377 kx ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
377 kx ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
377 kx acelp_kelvin_decoder_select="audiodsp"
377 kx adpcm_g722_decoder_select="g722dsp"
377 kx adpcm_g722_encoder_select="g722dsp"
377 kx aic_decoder_select="golomb idctdsp"
377 kx alac_encoder_select="lpc"
377 kx als_decoder_select="bswapdsp"
377 kx amrnb_decoder_select="lsp"
377 kx amrwb_decoder_select="lsp"
377 kx amv_decoder_select="sp5x_decoder exif"
377 kx amv_encoder_select="jpegtables mpegvideoenc"
377 kx ape_decoder_select="bswapdsp llauddsp"
377 kx apng_decoder_deps="zlib"
377 kx apng_encoder_deps="zlib"
377 kx apng_encoder_select="llvidencdsp"
377 kx aptx_decoder_select="audio_frame_queue"
377 kx aptx_encoder_select="audio_frame_queue"
377 kx aptx_hd_decoder_select="audio_frame_queue"
377 kx aptx_hd_encoder_select="audio_frame_queue"
377 kx asv1_decoder_select="blockdsp bswapdsp idctdsp"
377 kx asv1_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
377 kx asv2_decoder_select="blockdsp bswapdsp idctdsp"
377 kx asv2_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
377 kx atrac1_decoder_select="mdct sinewin"
377 kx atrac3_decoder_select="mdct"
377 kx atrac3al_decoder_select="mdct"
377 kx atrac3p_decoder_select="mdct sinewin"
377 kx atrac3pal_decoder_select="mdct sinewin"
377 kx atrac9_decoder_select="mdct"
377 kx av1_decoder_select="cbs_av1"
377 kx bink_decoder_select="blockdsp hpeldsp"
377 kx binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
377 kx binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
377 kx cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
377 kx clearvideo_decoder_select="idctdsp"
377 kx cllc_decoder_select="bswapdsp"
377 kx comfortnoise_encoder_select="lpc"
377 kx cook_decoder_select="audiodsp mdct sinewin"
377 kx cscd_decoder_select="lzo"
377 kx cscd_decoder_suggest="zlib"
377 kx dca_decoder_select="mdct"
377 kx dca_encoder_select="mdct"
377 kx dds_decoder_select="texturedsp"
377 kx dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
377 kx dnxhd_decoder_select="blockdsp idctdsp"
377 kx dnxhd_encoder_select="blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
377 kx dolby_e_decoder_select="mdct"
377 kx dvvideo_decoder_select="dvprofile idctdsp"
377 kx dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
377 kx dxa_decoder_deps="zlib"
377 kx dxv_decoder_select="lzf texturedsp"
377 kx eac3_decoder_select="ac3_decoder"
377 kx eac3_encoder_select="ac3_encoder"
377 kx eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
377 kx eatgq_decoder_select="aandcttables"
377 kx eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
377 kx exr_decoder_deps="zlib"
377 kx exr_encoder_deps="zlib"
377 kx ffv1_decoder_select="rangecoder"
377 kx ffv1_encoder_select="rangecoder"
377 kx ffvhuff_decoder_select="huffyuv_decoder"
377 kx ffvhuff_encoder_select="huffyuv_encoder"
377 kx fic_decoder_select="golomb"
377 kx flac_decoder_select="flacdsp"
377 kx flac_encoder_select="bswapdsp flacdsp lpc"
377 kx flashsv2_decoder_deps="zlib"
377 kx flashsv2_encoder_deps="zlib"
377 kx flashsv_decoder_deps="zlib"
377 kx flashsv_encoder_deps="zlib"
377 kx flv_decoder_select="h263_decoder"
377 kx flv_encoder_select="h263_encoder"
377 kx fourxm_decoder_select="blockdsp bswapdsp"
377 kx fraps_decoder_select="bswapdsp huffman"
377 kx g2m_decoder_deps="zlib"
377 kx g2m_decoder_select="blockdsp idctdsp jpegtables"
377 kx g729_decoder_select="audiodsp"
377 kx h261_decoder_select="mpegvideo"
377 kx h261_encoder_select="mpegvideoenc"
377 kx h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
377 kx h263_encoder_select="h263dsp mpegvideoenc"
377 kx h263i_decoder_select="h263_decoder"
377 kx h263p_decoder_select="h263_decoder"
377 kx h263p_encoder_select="h263_encoder"
377 kx h264_decoder_select="atsc_a53 cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
377 kx h264_decoder_suggest="error_resilience"
377 kx hap_decoder_select="snappy texturedsp"
377 kx hap_encoder_deps="libsnappy"
377 kx hap_encoder_select="texturedspenc"
377 kx hevc_decoder_select="atsc_a53 bswapdsp cabac golomb hevcparse videodsp"
377 kx huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
377 kx huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
377 kx hymt_decoder_select="huffyuv_decoder"
377 kx iac_decoder_select="imc_decoder"
377 kx imc_decoder_select="bswapdsp fft mdct sinewin"
377 kx imm4_decoder_select="bswapdsp"
377 kx imm5_decoder_select="h264_decoder hevc_decoder"
377 kx indeo3_decoder_select="hpeldsp"
377 kx indeo4_decoder_select="ividsp"
377 kx indeo5_decoder_select="ividsp"
377 kx interplay_video_decoder_select="hpeldsp"
377 kx ipu_decoder_select="mpegvideo"
377 kx jpegls_decoder_select="mjpeg_decoder"
377 kx jv_decoder_select="blockdsp"
377 kx lagarith_decoder_select="llviddsp"
377 kx ljpeg_encoder_select="idctdsp jpegtables"
377 kx lscr_decoder_deps="zlib"
377 kx magicyuv_decoder_select="llviddsp"
377 kx magicyuv_encoder_select="llvidencdsp"
377 kx mdec_decoder_select="blockdsp bswapdsp idctdsp mpegvideo"
377 kx metasound_decoder_select="lsp mdct sinewin"
377 kx mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
377 kx mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
377 kx mjpeg_encoder_select="jpegtables mpegvideoenc"
377 kx mjpegb_decoder_select="mjpeg_decoder"
377 kx mlp_decoder_select="mlp_parser"
377 kx mlp_encoder_select="lpc audio_frame_queue"
377 kx mobiclip_decoder_select="bswapdsp golomb"
377 kx motionpixels_decoder_select="bswapdsp"
377 kx mp1_decoder_select="mpegaudio"
377 kx mp1float_decoder_select="mpegaudio"
377 kx mp2_decoder_select="mpegaudio"
377 kx mp2float_decoder_select="mpegaudio"
377 kx mp3_decoder_select="mpegaudio"
377 kx mp3adu_decoder_select="mpegaudio"
377 kx mp3adufloat_decoder_select="mpegaudio"
377 kx mp3float_decoder_select="mpegaudio"
377 kx mp3on4_decoder_select="mpegaudio"
377 kx mp3on4float_decoder_select="mpegaudio"
377 kx mpc7_decoder_select="bswapdsp mpegaudiodsp"
377 kx mpc8_decoder_select="mpegaudiodsp"
377 kx mpegvideo_decoder_select="mpegvideo"
377 kx mpeg1video_decoder_select="mpegvideo"
377 kx mpeg1video_encoder_select="mpegvideoenc h263dsp"
377 kx mpeg2video_decoder_select="mpegvideo"
377 kx mpeg2video_encoder_select="mpegvideoenc h263dsp"
377 kx mpeg4_decoder_select="h263_decoder mpeg4video_parser"
377 kx mpeg4_encoder_select="h263_encoder"
377 kx msa1_decoder_select="mss34dsp"
377 kx mscc_decoder_deps="zlib"
377 kx msmpeg4v1_decoder_select="h263_decoder"
377 kx msmpeg4v2_decoder_select="h263_decoder"
377 kx msmpeg4v2_encoder_select="h263_encoder"
377 kx msmpeg4v3_decoder_select="h263_decoder"
377 kx msmpeg4v3_encoder_select="h263_encoder"
377 kx mss2_decoder_select="mpegvideo qpeldsp vc1_decoder"
377 kx mts2_decoder_select="jpegtables mss34dsp"
377 kx mv30_decoder_select="aandcttables blockdsp"
377 kx mvha_decoder_deps="zlib"
377 kx mvha_decoder_select="llviddsp"
377 kx mwsc_decoder_deps="zlib"
377 kx mxpeg_decoder_select="mjpeg_decoder"
377 kx nellymoser_decoder_select="mdct sinewin"
377 kx nellymoser_encoder_select="audio_frame_queue mdct sinewin"
377 kx notchlc_decoder_select="lzf"
377 kx nuv_decoder_select="idctdsp lzo"
377 kx on2avc_decoder_select="mdct"
377 kx opus_decoder_deps="swresample"
377 kx opus_decoder_select="mdct15"
377 kx opus_encoder_select="audio_frame_queue mdct15"
377 kx png_decoder_deps="zlib"
377 kx png_encoder_deps="zlib"
377 kx png_encoder_select="llvidencdsp"
377 kx prores_decoder_select="blockdsp idctdsp"
377 kx prores_encoder_select="fdctdsp"
377 kx qcelp_decoder_select="lsp"
377 kx qdm2_decoder_select="mdct rdft mpegaudiodsp"
377 kx ra_144_decoder_select="audiodsp"
377 kx ra_144_encoder_select="audio_frame_queue lpc audiodsp"
377 kx ralf_decoder_select="golomb"
377 kx rasc_decoder_deps="zlib"
377 kx rawvideo_decoder_select="bswapdsp"
377 kx rscc_decoder_deps="zlib"
377 kx rtjpeg_decoder_select="me_cmp"
377 kx rv10_decoder_select="h263_decoder"
377 kx rv10_encoder_select="h263_encoder"
377 kx rv20_decoder_select="h263_decoder"
377 kx rv20_encoder_select="h263_encoder"
377 kx rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
377 kx rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
377 kx screenpresso_decoder_deps="zlib"
377 kx shorten_decoder_select="bswapdsp"
377 kx sipr_decoder_select="lsp"
377 kx smvjpeg_decoder_select="mjpeg_decoder"
377 kx snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
377 kx snow_encoder_select="dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
377 kx sonic_decoder_select="golomb rangecoder"
377 kx sonic_encoder_select="golomb rangecoder"
377 kx sonic_ls_encoder_select="golomb rangecoder"
377 kx sp5x_decoder_select="mjpeg_decoder"
377 kx speedhq_decoder_select="mpegvideo"
377 kx speedhq_encoder_select="mpegvideoenc"
377 kx srgc_decoder_deps="zlib"
377 kx svq1_decoder_select="hpeldsp"
377 kx svq1_encoder_select="hpeldsp me_cmp mpegvideoenc"
377 kx svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
377 kx svq3_decoder_suggest="zlib"
377 kx tak_decoder_select="audiodsp"
377 kx tdsc_decoder_deps="zlib"
377 kx tdsc_decoder_select="mjpeg_decoder"
377 kx theora_decoder_select="vp3_decoder"
377 kx thp_decoder_select="mjpeg_decoder"
377 kx tiff_decoder_select="mjpeg_decoder"
377 kx tiff_decoder_suggest="zlib lzma"
377 kx tiff_encoder_suggest="zlib"
377 kx truehd_decoder_select="mlp_parser"
377 kx truehd_encoder_select="lpc audio_frame_queue"
377 kx truemotion2_decoder_select="bswapdsp"
377 kx truespeech_decoder_select="bswapdsp"
377 kx tscc_decoder_deps="zlib"
377 kx twinvq_decoder_select="mdct lsp sinewin"
377 kx txd_decoder_select="texturedsp"
377 kx utvideo_decoder_select="bswapdsp llviddsp"
377 kx utvideo_encoder_select="bswapdsp huffman llvidencdsp"
377 kx vble_decoder_select="llviddsp"
377 kx vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 mpegvideo vc1dsp"
377 kx vc1image_decoder_select="vc1_decoder"
377 kx vorbis_decoder_select="mdct"
377 kx vorbis_encoder_select="audio_frame_queue mdct"
377 kx vp3_decoder_select="hpeldsp vp3dsp videodsp"
377 kx vp4_decoder_select="vp3_decoder"
377 kx vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
377 kx vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
377 kx vp6a_decoder_select="vp6_decoder"
377 kx vp6f_decoder_select="vp6_decoder"
377 kx vp7_decoder_select="h264pred videodsp vp8dsp"
377 kx vp8_decoder_select="h264pred videodsp vp8dsp"
377 kx vp9_decoder_select="videodsp vp9_parser vp9_superframe_split_bsf"
377 kx wcmv_decoder_deps="zlib"
377 kx webp_decoder_select="vp8_decoder exif"
377 kx wmalossless_decoder_select="llauddsp"
377 kx wmapro_decoder_select="mdct sinewin wma_freqs"
377 kx wmav1_decoder_select="mdct sinewin wma_freqs"
377 kx wmav1_encoder_select="mdct sinewin wma_freqs"
377 kx wmav2_decoder_select="mdct sinewin wma_freqs"
377 kx wmav2_encoder_select="mdct sinewin wma_freqs"
377 kx wmavoice_decoder_select="lsp rdft dct mdct sinewin"
377 kx wmv1_decoder_select="h263_decoder"
377 kx wmv1_encoder_select="h263_encoder"
377 kx wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
377 kx wmv2_encoder_select="h263_encoder wmv2dsp"
377 kx wmv3_decoder_select="vc1_decoder"
377 kx wmv3image_decoder_select="wmv3_decoder"
377 kx xma1_decoder_select="wmapro_decoder"
377 kx xma2_decoder_select="wmapro_decoder"
377 kx ylc_decoder_select="bswapdsp"
377 kx zerocodec_decoder_deps="zlib"
377 kx zlib_decoder_deps="zlib"
377 kx zlib_encoder_deps="zlib"
377 kx zmbv_decoder_deps="zlib"
377 kx zmbv_encoder_deps="zlib"
377 kx
377 kx # hardware accelerators
377 kx crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
377 kx cuda_deps="ffnvcodec"
377 kx cuvid_deps="ffnvcodec"
377 kx d3d11va_deps="dxva_h ID3D11VideoDecoder ID3D11VideoContext"
377 kx dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32 user32"
377 kx ffnvcodec_deps_any="libdl LoadLibrary"
377 kx nvdec_deps="ffnvcodec"
377 kx vaapi_x11_deps="xlib"
377 kx videotoolbox_hwaccel_deps="videotoolbox pthreads"
377 kx videotoolbox_hwaccel_extralibs="-framework QuartzCore"
377 kx xvmc_deps="X11_extensions_XvMClib_h"
377 kx
377 kx av1_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_AV1"
377 kx av1_d3d11va_hwaccel_select="av1_decoder"
377 kx av1_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_AV1"
377 kx av1_d3d11va2_hwaccel_select="av1_decoder"
377 kx av1_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_AV1"
377 kx av1_dxva2_hwaccel_select="av1_decoder"
377 kx av1_nvdec_hwaccel_deps="nvdec CUVIDAV1PICPARAMS"
377 kx av1_nvdec_hwaccel_select="av1_decoder"
377 kx av1_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferAV1_bit_depth_idx"
377 kx av1_vaapi_hwaccel_select="av1_decoder"
377 kx h263_vaapi_hwaccel_deps="vaapi"
377 kx h263_vaapi_hwaccel_select="h263_decoder"
377 kx h263_videotoolbox_hwaccel_deps="videotoolbox"
377 kx h263_videotoolbox_hwaccel_select="h263_decoder"
377 kx h264_d3d11va_hwaccel_deps="d3d11va"
377 kx h264_d3d11va_hwaccel_select="h264_decoder"
377 kx h264_d3d11va2_hwaccel_deps="d3d11va"
377 kx h264_d3d11va2_hwaccel_select="h264_decoder"
377 kx h264_dxva2_hwaccel_deps="dxva2"
377 kx h264_dxva2_hwaccel_select="h264_decoder"
377 kx h264_nvdec_hwaccel_deps="nvdec"
377 kx h264_nvdec_hwaccel_select="h264_decoder"
377 kx h264_vaapi_hwaccel_deps="vaapi"
377 kx h264_vaapi_hwaccel_select="h264_decoder"
377 kx h264_vdpau_hwaccel_deps="vdpau"
377 kx h264_vdpau_hwaccel_select="h264_decoder"
377 kx h264_videotoolbox_hwaccel_deps="videotoolbox"
377 kx h264_videotoolbox_hwaccel_select="h264_decoder"
377 kx hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
377 kx hevc_d3d11va_hwaccel_select="hevc_decoder"
377 kx hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
377 kx hevc_d3d11va2_hwaccel_select="hevc_decoder"
377 kx hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
377 kx hevc_dxva2_hwaccel_select="hevc_decoder"
377 kx hevc_nvdec_hwaccel_deps="nvdec"
377 kx hevc_nvdec_hwaccel_select="hevc_decoder"
377 kx hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
377 kx hevc_vaapi_hwaccel_select="hevc_decoder"
377 kx hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
377 kx hevc_vdpau_hwaccel_select="hevc_decoder"
377 kx hevc_videotoolbox_hwaccel_deps="videotoolbox"
377 kx hevc_videotoolbox_hwaccel_select="hevc_decoder"
377 kx mjpeg_nvdec_hwaccel_deps="nvdec"
377 kx mjpeg_nvdec_hwaccel_select="mjpeg_decoder"
377 kx mjpeg_vaapi_hwaccel_deps="vaapi"
377 kx mjpeg_vaapi_hwaccel_select="mjpeg_decoder"
377 kx mpeg_xvmc_hwaccel_deps="xvmc"
377 kx mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
377 kx mpeg1_nvdec_hwaccel_deps="nvdec"
377 kx mpeg1_nvdec_hwaccel_select="mpeg1video_decoder"
377 kx mpeg1_vdpau_hwaccel_deps="vdpau"
377 kx mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
377 kx mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
377 kx mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
377 kx mpeg1_xvmc_hwaccel_deps="xvmc"
377 kx mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
377 kx mpeg2_d3d11va_hwaccel_deps="d3d11va"
377 kx mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
377 kx mpeg2_d3d11va2_hwaccel_deps="d3d11va"
377 kx mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
377 kx mpeg2_dxva2_hwaccel_deps="dxva2"
377 kx mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
377 kx mpeg2_nvdec_hwaccel_deps="nvdec"
377 kx mpeg2_nvdec_hwaccel_select="mpeg2video_decoder"
377 kx mpeg2_vaapi_hwaccel_deps="vaapi"
377 kx mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
377 kx mpeg2_vdpau_hwaccel_deps="vdpau"
377 kx mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
377 kx mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
377 kx mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
377 kx mpeg2_xvmc_hwaccel_deps="xvmc"
377 kx mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
377 kx mpeg4_nvdec_hwaccel_deps="nvdec"
377 kx mpeg4_nvdec_hwaccel_select="mpeg4_decoder"
377 kx mpeg4_vaapi_hwaccel_deps="vaapi"
377 kx mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
377 kx mpeg4_vdpau_hwaccel_deps="vdpau"
377 kx mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
377 kx mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
377 kx mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
377 kx vc1_d3d11va_hwaccel_deps="d3d11va"
377 kx vc1_d3d11va_hwaccel_select="vc1_decoder"
377 kx vc1_d3d11va2_hwaccel_deps="d3d11va"
377 kx vc1_d3d11va2_hwaccel_select="vc1_decoder"
377 kx vc1_dxva2_hwaccel_deps="dxva2"
377 kx vc1_dxva2_hwaccel_select="vc1_decoder"
377 kx vc1_nvdec_hwaccel_deps="nvdec"
377 kx vc1_nvdec_hwaccel_select="vc1_decoder"
377 kx vc1_vaapi_hwaccel_deps="vaapi"
377 kx vc1_vaapi_hwaccel_select="vc1_decoder"
377 kx vc1_vdpau_hwaccel_deps="vdpau"
377 kx vc1_vdpau_hwaccel_select="vc1_decoder"
377 kx vp8_nvdec_hwaccel_deps="nvdec"
377 kx vp8_nvdec_hwaccel_select="vp8_decoder"
377 kx vp8_vaapi_hwaccel_deps="vaapi"
377 kx vp8_vaapi_hwaccel_select="vp8_decoder"
377 kx vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
377 kx vp9_d3d11va_hwaccel_select="vp9_decoder"
377 kx vp9_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
377 kx vp9_d3d11va2_hwaccel_select="vp9_decoder"
377 kx vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
377 kx vp9_dxva2_hwaccel_select="vp9_decoder"
377 kx vp9_nvdec_hwaccel_deps="nvdec"
377 kx vp9_nvdec_hwaccel_select="vp9_decoder"
377 kx vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth"
377 kx vp9_vaapi_hwaccel_select="vp9_decoder"
377 kx vp9_vdpau_hwaccel_deps="vdpau VdpPictureInfoVP9"
377 kx vp9_vdpau_hwaccel_select="vp9_decoder"
377 kx wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
377 kx wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
377 kx wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
377 kx wmv3_nvdec_hwaccel_select="vc1_nvdec_hwaccel"
377 kx wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
377 kx wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
377 kx
377 kx # hardware-accelerated codecs
377 kx mediafoundation_deps="mftransform_h MFCreateAlignedMemoryBuffer"
377 kx mediafoundation_extralibs="-lmfplat -lmfuuid -lole32 -lstrmiids"
377 kx omx_deps="libdl pthreads"
377 kx omx_rpi_select="omx"
377 kx omx_img_deps="swscale"
377 kx omx_img_select="omx"
377 kx qsv_deps="libmfx"
377 kx qsvdec_select="qsv"
377 kx qsvenc_select="qsv"
377 kx qsvvpp_select="qsv"
377 kx vaapi_encode_deps="vaapi"
377 kx v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
377 kx
377 kx hwupload_cuda_filter_deps="ffnvcodec"
377 kx scale_npp_filter_deps="ffnvcodec libnpp"
377 kx scale_cuda_filter_deps="ffnvcodec"
377 kx scale_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
377 kx thumbnail_cuda_filter_deps="ffnvcodec"
377 kx thumbnail_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
377 kx transpose_npp_filter_deps="ffnvcodec libnpp"
377 kx overlay_cuda_filter_deps="ffnvcodec"
377 kx overlay_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
377 kx
377 kx amf_deps_any="libdl LoadLibrary"
377 kx nvenc_deps="ffnvcodec"
377 kx nvenc_deps_any="libdl LoadLibrary"
377 kx nvenc_encoder_deps="nvenc"
377 kx
377 kx aac_mf_encoder_deps="mediafoundation"
377 kx ac3_mf_encoder_deps="mediafoundation"
377 kx av1_cuvid_decoder_deps="cuvid CUVIDAV1PICPARAMS"
377 kx avs_omx_decoder_deps="omx_img"
377 kx h263_omx_decoder_deps="omx"
377 kx h263_v4l2m2m_decoder_deps="v4l2_m2m h263_v4l2_m2m"
377 kx h263_v4l2m2m_encoder_deps="v4l2_m2m h263_v4l2_m2m"
377 kx h264_amf_encoder_deps="amf"
377 kx h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
377 kx h264_cuvid_decoder_deps="cuvid"
377 kx h264_cuvid_decoder_select="h264_mp4toannexb_bsf"
377 kx h264_mediacodec_decoder_deps="mediacodec"
377 kx h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
377 kx h264_mf_encoder_deps="mediafoundation"
377 kx h264_mmal_decoder_deps="mmal"
377 kx h264_nvenc_encoder_deps="nvenc"
377 kx h264_nvenc_encoder_select="atsc_a53"
377 kx h264_omx_decoder_deps="omx"
377 kx h264_omx_encoder_deps="omx"
377 kx h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec"
377 kx h264_qsv_encoder_select="atsc_a53 qsvenc"
377 kx h264_rkmpp_decoder_deps="rkmpp"
377 kx h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
377 kx h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
377 kx h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
377 kx h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
377 kx h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
377 kx hevc_amf_encoder_deps="amf"
377 kx hevc_cuvid_decoder_deps="cuvid"
377 kx hevc_cuvid_decoder_select="hevc_mp4toannexb_bsf"
377 kx hevc_mediacodec_decoder_deps="mediacodec"
377 kx hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
377 kx hevc_mf_encoder_deps="mediafoundation"
377 kx hevc_nvenc_encoder_deps="nvenc"
377 kx hevc_nvenc_encoder_select="atsc_a53"
377 kx hevc_omx_decoder_deps="omx"
377 kx hevc_qsv_decoder_select="hevc_mp4toannexb_bsf qsvdec"
377 kx hevc_qsv_encoder_select="hevcparse qsvenc"
377 kx hevc_rkmpp_decoder_deps="rkmpp"
377 kx hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
377 kx hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
377 kx hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
377 kx hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
377 kx hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
377 kx hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
377 kx mjpeg_cuvid_decoder_deps="cuvid"
377 kx mjpeg_omx_decoder_deps="omx"
377 kx mjpeg_qsv_decoder_select="qsvdec"
377 kx mjpeg_qsv_encoder_deps="libmfx"
377 kx mjpeg_qsv_encoder_select="qsvenc"
377 kx mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
377 kx mjpeg_vaapi_encoder_select="cbs_jpeg jpegtables vaapi_encode"
377 kx mp3_mf_encoder_deps="mediafoundation"
377 kx mpeg1_cuvid_decoder_deps="cuvid"
377 kx mpeg1_v4l2m2m_decoder_deps="v4l2_m2m mpeg1_v4l2_m2m"
377 kx mpeg2_crystalhd_decoder_select="crystalhd"
377 kx mpeg2_cuvid_decoder_deps="cuvid"
377 kx mpeg2_mmal_decoder_deps="mmal"
377 kx mpeg2_mediacodec_decoder_deps="mediacodec"
377 kx mpeg2_omx_decoder_deps="omx"
377 kx mpeg2_qsv_decoder_select="qsvdec"
377 kx mpeg2_qsv_encoder_select="qsvenc"
377 kx mpeg2_vaapi_encoder_select="cbs_mpeg2 vaapi_encode"
377 kx mpeg2_v4l2m2m_decoder_deps="v4l2_m2m mpeg2_v4l2_m2m"
377 kx mpeg4_crystalhd_decoder_select="crystalhd"
377 kx mpeg4_cuvid_decoder_deps="cuvid"
377 kx mpeg4_mediacodec_decoder_deps="mediacodec"
377 kx mpeg4_mmal_decoder_deps="mmal"
377 kx mpeg4_omx_decoder_deps="omx"
377 kx mpeg4_omx_encoder_deps="omx"
377 kx mpeg4_v4l2m2m_decoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
377 kx mpeg4_v4l2m2m_encoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
377 kx msmpeg4_crystalhd_decoder_select="crystalhd"
377 kx rv30_omx_decoder_deps="omx"
377 kx rv40_omx_decoder_deps="omx"
377 kx sorenson_omx_decoder_deps="omx_img"
377 kx nvenc_h264_encoder_select="h264_nvenc_encoder"
377 kx nvenc_hevc_encoder_select="hevc_nvenc_encoder"
377 kx vc1_crystalhd_decoder_select="crystalhd"
377 kx vc1_cuvid_decoder_deps="cuvid"
377 kx vc1_mmal_decoder_deps="mmal"
377 kx vc1_omx_decoder_deps="omx_img"
377 kx vc1_qsv_decoder_select="qsvdec"
377 kx vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m"
377 kx vp6_omx_decoder_deps="omx_img"
377 kx vp8_cuvid_decoder_deps="cuvid"
377 kx vp8_mediacodec_decoder_deps="mediacodec"
377 kx vp8_omx_decoder_deps="omx"
377 kx vp8_qsv_decoder_select="qsvdec"
377 kx vp8_rkmpp_decoder_deps="rkmpp"
377 kx vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
377 kx vp8_vaapi_encoder_select="vaapi_encode"
377 kx vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m"
377 kx vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"
377 kx vp9_cuvid_decoder_deps="cuvid"
377 kx vp9_mediacodec_decoder_deps="mediacodec"
377 kx vp9_qsv_decoder_select="qsvdec"
377 kx vp9_rkmpp_decoder_deps="rkmpp"
377 kx vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
377 kx vp9_vaapi_encoder_select="vaapi_encode"
377 kx vp9_qsv_encoder_deps="libmfx MFX_CODEC_VP9"
377 kx vp9_qsv_encoder_select="qsvenc"
377 kx vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m"
377 kx wmv3_crystalhd_decoder_select="crystalhd"
377 kx wmv3_omx_decoder_deps="omx"
377 kx av1_qsv_decoder_select="qsvdec"
377 kx
377 kx # parsers
377 kx aac_parser_select="adts_header"
377 kx av1_parser_select="cbs_av1"
377 kx h264_parser_select="atsc_a53 golomb h264dsp h264parse"
377 kx hevc_parser_select="hevcparse"
377 kx mpegaudio_parser_select="mpegaudioheader"
377 kx mpegvideo_parser_select="mpegvideo"
377 kx mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
377 kx vc1_parser_select="vc1dsp"
377 kx
377 kx # bitstream_filters
377 kx aac_adtstoasc_bsf_select="adts_header"
377 kx av1_frame_merge_bsf_select="cbs_av1"
377 kx av1_frame_split_bsf_select="cbs_av1"
377 kx av1_metadata_bsf_select="cbs_av1"
377 kx eac3_core_bsf_select="ac3_parser"
377 kx filter_units_bsf_select="cbs"
377 kx h264_metadata_bsf_deps="const_nan"
377 kx h264_metadata_bsf_select="cbs_h264"
377 kx h264_redundant_pps_bsf_select="cbs_h264"
377 kx hevc_metadata_bsf_select="cbs_h265"
377 kx mjpeg2jpeg_bsf_select="jpegtables"
377 kx mpeg2_metadata_bsf_select="cbs_mpeg2"
377 kx trace_headers_bsf_select="cbs"
377 kx vp9_metadata_bsf_select="cbs_vp9"
377 kx
377 kx # external libraries
377 kx aac_at_decoder_deps="audiotoolbox"
377 kx aac_at_decoder_select="aac_adtstoasc_bsf"
377 kx ac3_at_decoder_deps="audiotoolbox"
377 kx ac3_at_decoder_select="ac3_parser"
377 kx adpcm_ima_qt_at_decoder_deps="audiotoolbox"
377 kx alac_at_decoder_deps="audiotoolbox"
377 kx amr_nb_at_decoder_deps="audiotoolbox"
377 kx avisynth_deps_any="libdl LoadLibrary"
377 kx avisynth_demuxer_deps="avisynth"
377 kx avisynth_demuxer_select="riffdec"
377 kx eac3_at_decoder_deps="audiotoolbox"
377 kx eac3_at_decoder_select="ac3_parser"
377 kx gsm_ms_at_decoder_deps="audiotoolbox"
377 kx ilbc_at_decoder_deps="audiotoolbox"
377 kx mp1_at_decoder_deps="audiotoolbox"
377 kx mp2_at_decoder_deps="audiotoolbox"
377 kx mp3_at_decoder_deps="audiotoolbox"
377 kx mp1_at_decoder_select="mpegaudioheader"
377 kx mp2_at_decoder_select="mpegaudioheader"
377 kx mp3_at_decoder_select="mpegaudioheader"
377 kx pcm_alaw_at_decoder_deps="audiotoolbox"
377 kx pcm_mulaw_at_decoder_deps="audiotoolbox"
377 kx qdmc_decoder_select="fft"
377 kx qdmc_at_decoder_deps="audiotoolbox"
377 kx qdm2_at_decoder_deps="audiotoolbox"
377 kx aac_at_encoder_deps="audiotoolbox"
377 kx aac_at_encoder_select="audio_frame_queue"
377 kx alac_at_encoder_deps="audiotoolbox"
377 kx alac_at_encoder_select="audio_frame_queue"
377 kx ilbc_at_encoder_deps="audiotoolbox"
377 kx ilbc_at_encoder_select="audio_frame_queue"
377 kx pcm_alaw_at_encoder_deps="audiotoolbox"
377 kx pcm_alaw_at_encoder_select="audio_frame_queue"
377 kx pcm_mulaw_at_encoder_deps="audiotoolbox"
377 kx pcm_mulaw_at_encoder_select="audio_frame_queue"
377 kx chromaprint_muxer_deps="chromaprint"
377 kx h264_videotoolbox_encoder_deps="pthreads"
377 kx h264_videotoolbox_encoder_select="atsc_a53 videotoolbox_encoder"
377 kx hevc_videotoolbox_encoder_deps="pthreads"
377 kx hevc_videotoolbox_encoder_select="atsc_a53 videotoolbox_encoder"
377 kx libaom_av1_decoder_deps="libaom"
377 kx libaom_av1_encoder_deps="libaom"
377 kx libaom_av1_encoder_select="extract_extradata_bsf"
377 kx libaribb24_decoder_deps="libaribb24"
377 kx libcelt_decoder_deps="libcelt"
377 kx libcodec2_decoder_deps="libcodec2"
377 kx libcodec2_encoder_deps="libcodec2"
377 kx libdav1d_decoder_deps="libdav1d"
377 kx libdav1d_decoder_select="atsc_a53"
377 kx libdavs2_decoder_deps="libdavs2"
377 kx libfdk_aac_decoder_deps="libfdk_aac"
377 kx libfdk_aac_encoder_deps="libfdk_aac"
377 kx libfdk_aac_encoder_select="audio_frame_queue"
377 kx libgme_demuxer_deps="libgme"
377 kx libgsm_decoder_deps="libgsm"
377 kx libgsm_encoder_deps="libgsm"
377 kx libgsm_ms_decoder_deps="libgsm"
377 kx libgsm_ms_encoder_deps="libgsm"
377 kx libilbc_decoder_deps="libilbc"
377 kx libilbc_encoder_deps="libilbc"
377 kx libkvazaar_encoder_deps="libkvazaar"
377 kx libmodplug_demuxer_deps="libmodplug"
377 kx libmp3lame_encoder_deps="libmp3lame"
377 kx libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
377 kx libopencore_amrnb_decoder_deps="libopencore_amrnb"
377 kx libopencore_amrnb_encoder_deps="libopencore_amrnb"
377 kx libopencore_amrnb_encoder_select="audio_frame_queue"
377 kx libopencore_amrwb_decoder_deps="libopencore_amrwb"
377 kx libopenh264_decoder_deps="libopenh264"
377 kx libopenh264_decoder_select="h264_mp4toannexb_bsf"
377 kx libopenh264_encoder_deps="libopenh264"
377 kx libopenjpeg_decoder_deps="libopenjpeg"
377 kx libopenjpeg_encoder_deps="libopenjpeg"
377 kx libopenmpt_demuxer_deps="libopenmpt"
377 kx libopus_decoder_deps="libopus"
377 kx libopus_encoder_deps="libopus"
377 kx libopus_encoder_select="audio_frame_queue"
377 kx librav1e_encoder_deps="librav1e"
377 kx librav1e_encoder_select="extract_extradata_bsf"
377 kx librsvg_decoder_deps="librsvg"
377 kx libshine_encoder_deps="libshine"
377 kx libshine_encoder_select="audio_frame_queue mpegaudioheader"
377 kx libspeex_decoder_deps="libspeex"
377 kx libspeex_encoder_deps="libspeex"
377 kx libspeex_encoder_select="audio_frame_queue"
377 kx libsvtav1_encoder_deps="libsvtav1"
377 kx libtheora_encoder_deps="libtheora"
377 kx libtwolame_encoder_deps="libtwolame"
377 kx libuavs3d_decoder_deps="libuavs3d"
377 kx libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
377 kx libvorbis_decoder_deps="libvorbis"
377 kx libvorbis_encoder_deps="libvorbis libvorbisenc"
377 kx libvorbis_encoder_select="audio_frame_queue"
377 kx libvpx_vp8_decoder_deps="libvpx"
377 kx libvpx_vp8_encoder_deps="libvpx"
377 kx libvpx_vp9_decoder_deps="libvpx"
377 kx libvpx_vp9_encoder_deps="libvpx"
377 kx libwebp_encoder_deps="libwebp"
377 kx libwebp_anim_encoder_deps="libwebp"
377 kx libx262_encoder_deps="libx262"
377 kx libx264_encoder_deps="libx264"
377 kx libx264_encoder_select="atsc_a53"
377 kx libx264rgb_encoder_deps="libx264 x264_csp_bgr"
377 kx libx264rgb_encoder_select="libx264_encoder"
377 kx libx265_encoder_deps="libx265"
377 kx libxavs_encoder_deps="libxavs"
377 kx libxavs2_encoder_deps="libxavs2"
377 kx libxvid_encoder_deps="libxvid"
377 kx libzvbi_teletext_decoder_deps="libzvbi"
377 kx vapoursynth_demuxer_deps="vapoursynth"
377 kx videotoolbox_suggest="coreservices"
377 kx videotoolbox_deps="corefoundation coremedia corevideo"
377 kx videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
377 kx
377 kx # demuxers / muxers
377 kx ac3_demuxer_select="ac3_parser"
377 kx act_demuxer_select="riffdec"
377 kx aiff_muxer_select="iso_media"
377 kx asf_demuxer_select="riffdec"
377 kx asf_o_demuxer_select="riffdec"
377 kx asf_muxer_select="riffenc"
377 kx asf_stream_muxer_select="asf_muxer"
377 kx av1_demuxer_select="av1_frame_merge_bsf av1_parser"
377 kx avi_demuxer_select="riffdec exif"
377 kx avi_muxer_select="riffenc"
377 kx caf_demuxer_select="iso_media"
377 kx caf_muxer_select="iso_media"
377 kx dash_muxer_select="mp4_muxer"
377 kx dash_demuxer_deps="libxml2"
377 kx dirac_demuxer_select="dirac_parser"
377 kx dts_demuxer_select="dca_parser"
377 kx dtshd_demuxer_select="dca_parser"
377 kx dv_demuxer_select="dvprofile"
377 kx dv_muxer_select="dvprofile"
377 kx dxa_demuxer_select="riffdec"
377 kx eac3_demuxer_select="ac3_parser"
377 kx f4v_muxer_select="mov_muxer"
377 kx fifo_muxer_deps="threads"
377 kx flac_demuxer_select="flac_parser"
377 kx flv_muxer_select="aac_adtstoasc_bsf"
377 kx gxf_muxer_select="pcm_rechunk_bsf"
377 kx hds_muxer_select="flv_muxer"
377 kx hls_muxer_select="mpegts_muxer"
377 kx hls_muxer_suggest="gcrypt openssl"
377 kx image2_alias_pix_demuxer_select="image2_demuxer"
377 kx image2_brender_pix_demuxer_select="image2_demuxer"
377 kx ipod_muxer_select="mov_muxer"
377 kx ismv_muxer_select="mov_muxer"
377 kx ivf_muxer_select="av1_metadata_bsf vp9_superframe_bsf"
377 kx latm_muxer_select="aac_adtstoasc_bsf"
377 kx matroska_audio_muxer_select="matroska_muxer"
377 kx matroska_demuxer_select="riffdec"
377 kx matroska_demuxer_suggest="bzlib lzo zlib"
377 kx matroska_muxer_select="riffenc vp9_superframe_bsf aac_adtstoasc_bsf"
377 kx mlp_demuxer_select="mlp_parser"
377 kx mmf_muxer_select="riffenc"
377 kx mov_demuxer_select="iso_media riffdec"
377 kx mov_demuxer_suggest="zlib"
377 kx mov_muxer_select="iso_media riffenc rtpenc_chain vp9_superframe_bsf aac_adtstoasc_bsf"
377 kx mp3_demuxer_select="mpegaudio_parser"
377 kx mp3_muxer_select="mpegaudioheader"
377 kx mp4_muxer_select="mov_muxer"
377 kx mpegts_demuxer_select="iso_media"
377 kx mpegts_muxer_select="ac3_parser adts_muxer latm_muxer h264_mp4toannexb_bsf hevc_mp4toannexb_bsf"
377 kx mpegtsraw_demuxer_select="mpegts_demuxer"
377 kx mxf_muxer_select="golomb pcm_rechunk_bsf"
377 kx mxf_d10_muxer_select="mxf_muxer"
377 kx mxf_opatom_muxer_select="mxf_muxer"
377 kx nut_muxer_select="riffenc"
377 kx nuv_demuxer_select="riffdec"
377 kx obu_demuxer_select="av1_frame_merge_bsf av1_parser"
377 kx oga_muxer_select="ogg_muxer"
377 kx ogg_demuxer_select="dirac_parse"
377 kx ogv_muxer_select="ogg_muxer"
377 kx opus_muxer_select="ogg_muxer"
377 kx psp_muxer_select="mov_muxer"
377 kx rtp_demuxer_select="sdp_demuxer"
377 kx rtp_muxer_select="golomb jpegtables"
377 kx rtp_mpegts_muxer_select="mpegts_muxer rtp_muxer"
377 kx rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
377 kx rtsp_demuxer_select="http_protocol rtpdec"
377 kx rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
377 kx sap_demuxer_select="sdp_demuxer"
377 kx sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
377 kx sdp_demuxer_select="rtpdec"
377 kx smoothstreaming_muxer_select="ismv_muxer"
377 kx spdif_demuxer_select="adts_header"
377 kx spdif_muxer_select="adts_header"
377 kx spx_muxer_select="ogg_muxer"
377 kx swf_demuxer_suggest="zlib"
377 kx tak_demuxer_select="tak_parser"
377 kx truehd_demuxer_select="mlp_parser"
377 kx tg2_muxer_select="mov_muxer"
377 kx tgp_muxer_select="mov_muxer"
377 kx vobsub_demuxer_select="mpegps_demuxer"
377 kx w64_demuxer_select="wav_demuxer"
377 kx w64_muxer_select="wav_muxer"
377 kx wav_demuxer_select="riffdec"
377 kx wav_muxer_select="riffenc"
377 kx webm_chunk_muxer_select="webm_muxer"
377 kx webm_muxer_select="riffenc"
377 kx webm_dash_manifest_demuxer_select="matroska_demuxer"
377 kx wtv_demuxer_select="mpegts_demuxer riffdec"
377 kx wtv_muxer_select="mpegts_muxer riffenc"
377 kx xmv_demuxer_select="riffdec"
377 kx xwma_demuxer_select="riffdec"
377 kx
377 kx # indevs / outdevs
377 kx android_camera_indev_deps="android camera2ndk mediandk pthreads"
377 kx android_camera_indev_extralibs="-landroid -lcamera2ndk -lmediandk"
377 kx alsa_indev_deps="alsa"
377 kx alsa_outdev_deps="alsa"
377 kx avfoundation_indev_deps="avfoundation corevideo coremedia pthreads"
377 kx avfoundation_indev_suggest="coregraphics applicationservices"
377 kx avfoundation_indev_extralibs="-framework Foundation"
377 kx audiotoolbox_outdev_deps="audiotoolbox pthreads"
377 kx audiotoolbox_outdev_extralibs="-framework AudioToolbox -framework CoreAudio"
377 kx bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
377 kx caca_outdev_deps="libcaca"
377 kx decklink_deps_any="libdl LoadLibrary"
377 kx decklink_indev_deps="decklink threads"
377 kx decklink_indev_extralibs="-lstdc++"
377 kx decklink_outdev_deps="decklink threads"
377 kx decklink_outdev_suggest="libklvanc"
377 kx decklink_outdev_extralibs="-lstdc++"
377 kx dshow_indev_deps="IBaseFilter"
377 kx dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
377 kx fbdev_indev_deps="linux_fb_h"
377 kx fbdev_outdev_deps="linux_fb_h"
377 kx gdigrab_indev_deps="CreateDIBSection"
377 kx gdigrab_indev_extralibs="-lgdi32"
377 kx gdigrab_indev_select="bmp_decoder"
377 kx iec61883_indev_deps="libiec61883"
377 kx jack_indev_deps="libjack"
377 kx jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
377 kx kmsgrab_indev_deps="libdrm"
377 kx lavfi_indev_deps="avfilter"
377 kx libcdio_indev_deps="libcdio"
377 kx libdc1394_indev_deps="libdc1394"
377 kx openal_indev_deps="openal"
377 kx opengl_outdev_deps="opengl"
377 kx opengl_outdev_suggest="sdl2"
377 kx oss_indev_deps_any="sys_soundcard_h"
377 kx oss_outdev_deps_any="sys_soundcard_h"
377 kx pulse_indev_deps="libpulse"
377 kx pulse_outdev_deps="libpulse"
377 kx sdl2_outdev_deps="sdl2"
377 kx sndio_indev_deps="sndio"
377 kx sndio_outdev_deps="sndio"
377 kx v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
377 kx v4l2_indev_suggest="libv4l2"
377 kx v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
377 kx v4l2_outdev_suggest="libv4l2"
377 kx vfwcap_indev_deps="vfw32 vfwcap_defines"
377 kx xcbgrab_indev_deps="libxcb"
377 kx xcbgrab_indev_suggest="libxcb_shm libxcb_shape libxcb_xfixes"
377 kx xv_outdev_deps="xlib"
377 kx
377 kx # protocols
377 kx async_protocol_deps="threads"
377 kx bluray_protocol_deps="libbluray"
377 kx ffrtmpcrypt_protocol_conflict="librtmp_protocol"
377 kx ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl mbedtls"
377 kx ffrtmpcrypt_protocol_select="tcp_protocol"
377 kx ffrtmphttp_protocol_conflict="librtmp_protocol"
377 kx ffrtmphttp_protocol_select="http_protocol"
377 kx ftp_protocol_select="tcp_protocol"
377 kx gopher_protocol_select="tcp_protocol"
377 kx gophers_protocol_select="tls_protocol"
377 kx http_protocol_select="tcp_protocol"
377 kx http_protocol_suggest="zlib"
377 kx httpproxy_protocol_select="tcp_protocol"
377 kx httpproxy_protocol_suggest="zlib"
377 kx https_protocol_select="tls_protocol"
377 kx https_protocol_suggest="zlib"
377 kx icecast_protocol_select="http_protocol"
377 kx mmsh_protocol_select="http_protocol"
377 kx mmst_protocol_select="network"
377 kx rtmp_protocol_conflict="librtmp_protocol"
377 kx rtmp_protocol_select="tcp_protocol"
377 kx rtmp_protocol_suggest="zlib"
377 kx rtmpe_protocol_select="ffrtmpcrypt_protocol"
377 kx rtmpe_protocol_suggest="zlib"
377 kx rtmps_protocol_conflict="librtmp_protocol"
377 kx rtmps_protocol_select="tls_protocol"
377 kx rtmps_protocol_suggest="zlib"
377 kx rtmpt_protocol_select="ffrtmphttp_protocol"
377 kx rtmpt_protocol_suggest="zlib"
377 kx rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
377 kx rtmpte_protocol_suggest="zlib"
377 kx rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
377 kx rtmpts_protocol_suggest="zlib"
377 kx rtp_protocol_select="udp_protocol"
377 kx schannel_conflict="openssl gnutls libtls mbedtls"
377 kx sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
377 kx sctp_protocol_select="network"
377 kx securetransport_conflict="openssl gnutls libtls mbedtls"
377 kx srtp_protocol_select="rtp_protocol srtp"
377 kx tcp_protocol_select="network"
377 kx tls_protocol_deps_any="gnutls openssl schannel securetransport libtls mbedtls"
377 kx tls_protocol_select="tcp_protocol"
377 kx udp_protocol_select="network"
377 kx udplite_protocol_select="network"
377 kx unix_protocol_deps="sys_un_h"
377 kx unix_protocol_select="network"
377 kx
377 kx # external library protocols
377 kx libamqp_protocol_deps="librabbitmq"
377 kx libamqp_protocol_select="network"
377 kx librist_protocol_deps="librist"
377 kx librist_protocol_select="network"
377 kx librtmp_protocol_deps="librtmp"
377 kx librtmpe_protocol_deps="librtmp"
377 kx librtmps_protocol_deps="librtmp"
377 kx librtmpt_protocol_deps="librtmp"
377 kx librtmpte_protocol_deps="librtmp"
377 kx libsmbclient_protocol_deps="libsmbclient gplv3"
377 kx libsrt_protocol_deps="libsrt"
377 kx libsrt_protocol_select="network"
377 kx libssh_protocol_deps="libssh"
377 kx libtls_conflict="openssl gnutls mbedtls"
377 kx libzmq_protocol_deps="libzmq"
377 kx libzmq_protocol_select="network"
377 kx
377 kx # filters
377 kx afftdn_filter_deps="avcodec"
377 kx afftdn_filter_select="fft"
377 kx afftfilt_filter_deps="avcodec"
377 kx afftfilt_filter_select="fft"
377 kx afir_filter_deps="avcodec"
377 kx afir_filter_select="rdft"
377 kx amovie_filter_deps="avcodec avformat"
377 kx aresample_filter_deps="swresample"
377 kx asoftclip_filter_deps="swresample"
377 kx asr_filter_deps="pocketsphinx"
377 kx ass_filter_deps="libass"
377 kx atempo_filter_deps="avcodec"
377 kx atempo_filter_select="rdft"
377 kx avgblur_opencl_filter_deps="opencl"
377 kx avgblur_vulkan_filter_deps="vulkan libglslang"
377 kx azmq_filter_deps="libzmq"
377 kx blackframe_filter_deps="gpl"
377 kx bm3d_filter_deps="avcodec"
377 kx bm3d_filter_select="dct"
377 kx boxblur_filter_deps="gpl"
377 kx boxblur_opencl_filter_deps="opencl gpl"
377 kx bs2b_filter_deps="libbs2b"
377 kx chromaber_vulkan_filter_deps="vulkan libglslang"
377 kx colorkey_opencl_filter_deps="opencl"
377 kx colormatrix_filter_deps="gpl"
377 kx convolution_opencl_filter_deps="opencl"
377 kx convolve_filter_deps="avcodec"
377 kx convolve_filter_select="fft"
377 kx coreimage_filter_deps="coreimage appkit"
377 kx coreimage_filter_extralibs="-framework OpenGL"
377 kx coreimagesrc_filter_deps="coreimage appkit"
377 kx coreimagesrc_filter_extralibs="-framework OpenGL"
377 kx cover_rect_filter_deps="avcodec avformat gpl"
377 kx cropdetect_filter_deps="gpl"
377 kx deconvolve_filter_deps="avcodec"
377 kx deconvolve_filter_select="fft"
377 kx deinterlace_qsv_filter_deps="libmfx"
377 kx deinterlace_vaapi_filter_deps="vaapi"
377 kx delogo_filter_deps="gpl"
377 kx denoise_vaapi_filter_deps="vaapi"
377 kx derain_filter_select="dnn"
377 kx deshake_filter_select="pixelutils"
377 kx deshake_opencl_filter_deps="opencl"
377 kx dilation_opencl_filter_deps="opencl"
377 kx dnn_processing_filter_select="dnn"
377 kx drawtext_filter_deps="libfreetype"
377 kx drawtext_filter_suggest="libfontconfig libfribidi"
377 kx elbg_filter_deps="avcodec"
377 kx eq_filter_deps="gpl"
377 kx erosion_opencl_filter_deps="opencl"
377 kx fftfilt_filter_deps="avcodec"
377 kx fftfilt_filter_select="rdft"
377 kx fftdnoiz_filter_deps="avcodec"
377 kx fftdnoiz_filter_select="fft"
377 kx find_rect_filter_deps="avcodec avformat gpl"
377 kx firequalizer_filter_deps="avcodec"
377 kx firequalizer_filter_select="rdft"
377 kx flite_filter_deps="libflite"
377 kx framerate_filter_select="scene_sad"
377 kx freezedetect_filter_select="scene_sad"
377 kx frei0r_filter_deps="frei0r libdl"
377 kx frei0r_src_filter_deps="frei0r libdl"
377 kx fspp_filter_deps="gpl"
377 kx headphone_filter_select="fft"
377 kx histeq_filter_deps="gpl"
377 kx hqdn3d_filter_deps="gpl"
377 kx interlace_filter_deps="gpl"
377 kx kerndeint_filter_deps="gpl"
377 kx ladspa_filter_deps="ladspa libdl"
377 kx lensfun_filter_deps="liblensfun version3"
377 kx lv2_filter_deps="lv2"
377 kx mcdeint_filter_deps="avcodec gpl"
377 kx movie_filter_deps="avcodec avformat"
377 kx mpdecimate_filter_deps="gpl"
377 kx mpdecimate_filter_select="pixelutils"
377 kx minterpolate_filter_select="scene_sad"
377 kx mptestsrc_filter_deps="gpl"
377 kx negate_filter_deps="lut_filter"
377 kx nlmeans_opencl_filter_deps="opencl"
377 kx nnedi_filter_deps="gpl"
377 kx ocr_filter_deps="libtesseract"
377 kx ocv_filter_deps="libopencv"
377 kx openclsrc_filter_deps="opencl"
377 kx overlay_opencl_filter_deps="opencl"
377 kx overlay_qsv_filter_deps="libmfx"
377 kx overlay_qsv_filter_select="qsvvpp"
377 kx overlay_vulkan_filter_deps="vulkan libglslang"
377 kx owdenoise_filter_deps="gpl"
377 kx pad_opencl_filter_deps="opencl"
377 kx pan_filter_deps="swresample"
377 kx perspective_filter_deps="gpl"
377 kx phase_filter_deps="gpl"
377 kx pp7_filter_deps="gpl"
377 kx pp_filter_deps="gpl postproc"
377 kx prewitt_opencl_filter_deps="opencl"
377 kx procamp_vaapi_filter_deps="vaapi"
377 kx program_opencl_filter_deps="opencl"
377 kx pullup_filter_deps="gpl"
377 kx removelogo_filter_deps="avcodec avformat swscale"
377 kx repeatfields_filter_deps="gpl"
377 kx resample_filter_deps="avresample"
377 kx roberts_opencl_filter_deps="opencl"
377 kx rubberband_filter_deps="librubberband"
377 kx sab_filter_deps="gpl swscale"
377 kx scale2ref_filter_deps="swscale"
377 kx scale_filter_deps="swscale"
377 kx scale_qsv_filter_deps="libmfx"
377 kx scdet_filter_select="scene_sad"
377 kx select_filter_select="scene_sad"
377 kx sharpness_vaapi_filter_deps="vaapi"
377 kx showcqt_filter_deps="avcodec avformat swscale"
377 kx showcqt_filter_suggest="libfontconfig libfreetype"
377 kx showcqt_filter_select="fft"
377 kx showfreqs_filter_deps="avcodec"
377 kx showfreqs_filter_select="fft"
377 kx showspatial_filter_select="fft"
377 kx showspectrum_filter_deps="avcodec"
377 kx showspectrum_filter_select="fft"
377 kx showspectrumpic_filter_deps="avcodec"
377 kx showspectrumpic_filter_select="fft"
377 kx signature_filter_deps="gpl avcodec avformat"
377 kx sinc_filter_select="rdft"
377 kx smartblur_filter_deps="gpl swscale"
377 kx sobel_opencl_filter_deps="opencl"
377 kx sofalizer_filter_deps="libmysofa avcodec"
377 kx sofalizer_filter_select="fft"
377 kx spectrumsynth_filter_deps="avcodec"
377 kx spectrumsynth_filter_select="fft"
377 kx spp_filter_deps="gpl avcodec"
377 kx spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
377 kx sr_filter_deps="avformat swscale"
377 kx sr_filter_select="dnn"
377 kx stereo3d_filter_deps="gpl"
377 kx subtitles_filter_deps="avformat avcodec libass"
377 kx super2xsai_filter_deps="gpl"
377 kx pixfmts_super2xsai_test_deps="super2xsai_filter"
377 kx superequalizer_filter_select="rdft"
377 kx surround_filter_select="rdft"
377 kx tinterlace_filter_deps="gpl"
377 kx tinterlace_merge_test_deps="tinterlace_filter"
377 kx tinterlace_pad_test_deps="tinterlace_filter"
377 kx tonemap_filter_deps="const_nan"
377 kx tonemap_vaapi_filter_deps="vaapi VAProcFilterParameterBufferHDRToneMapping"
377 kx tonemap_opencl_filter_deps="opencl const_nan"
377 kx transpose_opencl_filter_deps="opencl"
377 kx transpose_vaapi_filter_deps="vaapi VAProcPipelineCaps_rotation_flags"
377 kx unsharp_opencl_filter_deps="opencl"
377 kx uspp_filter_deps="gpl avcodec"
377 kx vaguedenoiser_filter_deps="gpl"
377 kx vidstabdetect_filter_deps="libvidstab"
377 kx vidstabtransform_filter_deps="libvidstab"
377 kx libvmaf_filter_deps="libvmaf pthreads"
377 kx zmq_filter_deps="libzmq"
377 kx zoompan_filter_deps="swscale"
377 kx zscale_filter_deps="libzimg const_nan"
377 kx scale_vaapi_filter_deps="vaapi"
377 kx scale_vulkan_filter_deps="vulkan libglslang"
377 kx vpp_qsv_filter_deps="libmfx"
377 kx vpp_qsv_filter_select="qsvvpp"
377 kx xfade_opencl_filter_deps="opencl"
377 kx yadif_cuda_filter_deps="ffnvcodec"
377 kx yadif_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
377 kx
377 kx # examples
377 kx avio_list_dir_deps="avformat avutil"
377 kx avio_reading_deps="avformat avcodec avutil"
377 kx decode_audio_example_deps="avcodec avutil"
377 kx decode_video_example_deps="avcodec avutil"
377 kx demuxing_decoding_example_deps="avcodec avformat avutil"
377 kx encode_audio_example_deps="avcodec avutil"
377 kx encode_video_example_deps="avcodec avutil"
377 kx extract_mvs_example_deps="avcodec avformat avutil"
377 kx filter_audio_example_deps="avfilter avutil"
377 kx filtering_audio_example_deps="avfilter avcodec avformat avutil"
377 kx filtering_video_example_deps="avfilter avcodec avformat avutil"
377 kx http_multiclient_example_deps="avformat avutil fork"
377 kx hw_decode_example_deps="avcodec avformat avutil"
377 kx metadata_example_deps="avformat avutil"
377 kx muxing_example_deps="avcodec avformat avutil swscale"
377 kx qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
377 kx remuxing_example_deps="avcodec avformat avutil"
377 kx resampling_audio_example_deps="avutil swresample"
377 kx scaling_video_example_deps="avutil swscale"
377 kx transcode_aac_example_deps="avcodec avformat swresample"
377 kx transcoding_example_deps="avfilter avcodec avformat avutil"
377 kx vaapi_encode_example_deps="avcodec avutil h264_vaapi_encoder"
377 kx vaapi_transcode_example_deps="avcodec avformat avutil h264_vaapi_encoder"
377 kx
377 kx # EXTRALIBS_LIST
377 kx cpu_init_extralibs="pthreads_extralibs"
377 kx cws2fws_extralibs="zlib_extralibs"
377 kx
377 kx # libraries, in any order
377 kx avcodec_deps="avutil"
377 kx avcodec_suggest="libm stdatomic"
377 kx avcodec_select="null_bsf"
377 kx avdevice_deps="avformat avcodec avutil"
377 kx avdevice_suggest="libm stdatomic"
377 kx avfilter_deps="avutil"
377 kx avfilter_suggest="libm stdatomic"
377 kx avformat_deps="avcodec avutil"
377 kx avformat_suggest="libm network zlib stdatomic"
377 kx avresample_deps="avutil"
377 kx avresample_suggest="libm"
377 kx avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic"
377 kx postproc_deps="avutil gpl"
377 kx postproc_suggest="libm stdatomic"
377 kx swresample_deps="avutil"
377 kx swresample_suggest="libm libsoxr stdatomic"
377 kx swscale_deps="avutil"
377 kx swscale_suggest="libm stdatomic"
377 kx
377 kx avcodec_extralibs="pthreads_extralibs iconv_extralibs dxva2_extralibs"
377 kx avfilter_extralibs="pthreads_extralibs"
377 kx avutil_extralibs="d3d11va_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs"
377 kx
377 kx # programs
377 kx ffmpeg_deps="avcodec avfilter avformat"
377 kx ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
377 kx hflip_filter null_filter
377 kx transpose_filter trim_filter vflip_filter"
377 kx ffmpeg_suggest="ole32 psapi shell32"
377 kx ffplay_deps="avcodec avformat swscale swresample sdl2"
377 kx ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
377 kx ffplay_suggest="shell32"
377 kx ffprobe_deps="avcodec avformat"
377 kx ffprobe_suggest="shell32"
377 kx
377 kx # documentation
377 kx podpages_deps="perl"
377 kx manpages_deps="perl pod2man"
377 kx htmlpages_deps="perl"
377 kx htmlpages_deps_any="makeinfo_html texi2html"
377 kx txtpages_deps="perl makeinfo"
377 kx doc_deps_any="manpages htmlpages podpages txtpages"
377 kx
377 kx # default parameters
377 kx
377 kx logfile="ffbuild/config.log"
377 kx
377 kx # installation paths
377 kx prefix_default="/usr/local"
377 kx bindir_default='${prefix}/bin'
377 kx datadir_default='${prefix}/share/ffmpeg'
377 kx docdir_default='${prefix}/share/doc/ffmpeg'
377 kx incdir_default='${prefix}/include'
377 kx libdir_default='${prefix}/lib'
377 kx mandir_default='${prefix}/share/man'
377 kx
377 kx # toolchain
377 kx ar_default="ar"
377 kx cc_default="gcc"
377 kx cxx_default="g++"
377 kx host_cc_default="gcc"
377 kx doxygen_default="doxygen"
377 kx install="install"
377 kx ln_s_default="ln -s -f"
377 kx nm_default="nm -g"
377 kx pkg_config_default=pkg-config
377 kx ranlib_default="ranlib"
377 kx strip_default="strip"
377 kx version_script='--version-script'
377 kx objformat="elf32"
377 kx x86asmexe_default="nasm"
377 kx windres_default="windres"
377 kx striptype="direct"
377 kx
377 kx # OS
377 kx target_os_default=$(tolower $(uname -s))
377 kx host_os=$target_os_default
377 kx
377 kx # machine
377 kx if test "$target_os_default" = aix; then
377 kx arch_default=$(uname -p)
377 kx strip_default="strip -X32_64"
377 kx nm_default="nm -g -X32_64"
377 kx else
377 kx arch_default=$(uname -m)
377 kx fi
377 kx cpu="generic"
377 kx intrinsics="none"
377 kx
377 kx # configurable options
377 kx enable $PROGRAM_LIST
377 kx enable $DOCUMENT_LIST
377 kx enable $EXAMPLE_LIST
377 kx enable $(filter_out avresample $LIBRARY_LIST)
377 kx enable stripping
377 kx
377 kx enable asm
377 kx enable debug
377 kx enable doc
377 kx enable faan faandct faanidct
377 kx enable large_tests
377 kx enable optimizations
377 kx enable runtime_cpudetect
377 kx enable safe_bitstream_reader
377 kx enable static
377 kx enable swscale_alpha
377 kx enable valgrind_backtrace
377 kx
377 kx sws_max_filter_size_default=256
377 kx set_default sws_max_filter_size
377 kx
377 kx # internal components are enabled by default
377 kx enable $EXTRALIBS_LIST
377 kx
377 kx # Avoid external, non-system, libraries getting enabled by dependency resolution
377 kx disable $EXTERNAL_LIBRARY_LIST $HWACCEL_LIBRARY_LIST
377 kx
377 kx # build settings
377 kx SHFLAGS='-shared -Wl,-soname,$$(@F)'
377 kx LIBPREF="lib"
377 kx LIBSUF=".a"
377 kx FULLNAME='$(NAME)$(BUILDSUF)'
377 kx LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
377 kx SLIBPREF="lib"
377 kx SLIBSUF=".so"
377 kx SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
377 kx SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
377 kx SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
377 kx LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
377 kx SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
377 kx SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
377 kx VERSION_SCRIPT_POSTPROCESS_CMD="cat"
377 kx
377 kx asflags_filter=echo
377 kx cflags_filter=echo
377 kx ldflags_filter=echo
377 kx
377 kx AS_C='-c'
377 kx AS_O='-o $@'
377 kx CC_C='-c'
377 kx CC_E='-E -o $@'
377 kx CC_O='-o $@'
377 kx CXX_C='-c'
377 kx CXX_O='-o $@'
377 kx OBJCC_C='-c'
377 kx OBJCC_E='-E -o $@'
377 kx OBJCC_O='-o $@'
377 kx X86ASM_O='-o $@'
377 kx LD_O='-o $@'
377 kx LD_LIB='-l%'
377 kx LD_PATH='-L'
377 kx HOSTCC_C='-c'
377 kx HOSTCC_E='-E -o $@'
377 kx HOSTCC_O='-o $@'
377 kx HOSTLD_O='-o $@'
377 kx NVCC_C='-c'
377 kx NVCC_O='-o $@'
377 kx
377 kx host_extralibs='-lm'
377 kx host_cflags_filter=echo
377 kx host_ldflags_filter=echo
377 kx
377 kx target_path='$(CURDIR)'
377 kx
377 kx # since the object filename is not given with the -MM flag, the compiler
377 kx # is only able to print the basename, and we must add the path ourselves
377 kx DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
377 kx DEPFLAGS='-MM'
377 kx
377 kx mkdir -p ffbuild
377 kx
377 kx # find source path
377 kx if test -f configure; then
377 kx source_path=.
377 kx elif test -f src/configure; then
377 kx source_path=src
377 kx else
377 kx source_path=$(cd $(dirname "$0"); pwd)
377 kx case "$source_path" in
377 kx *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
377 kx esac
377 kx test -e "$source_path/config.h" &&
377 kx die "Out of tree builds are impossible with config.h in source dir."
377 kx fi
377 kx
377 kx for v in "$@"; do
377 kx r=${v#*=}
377 kx l=${v%"$r"}
377 kx r=$(sh_quote "$r")
377 kx FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
377 kx done
377 kx
377 kx find_things_extern(){
377 kx thing=$1
377 kx pattern=$2
377 kx file=$source_path/$3
377 kx out=${4:-$thing}
377 kx sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file"
377 kx }
377 kx
377 kx find_filters_extern(){
377 kx file=$source_path/$1
377 kx sed -n 's/^extern AVFilter ff_[avfsinkrc]\{2,5\}_\([[:alnum:]_]\{1,\}\);/\1_filter/p' $file
377 kx }
377 kx
377 kx FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c)
377 kx OUTDEV_LIST=$(find_things_extern muxer AVOutputFormat libavdevice/alldevices.c outdev)
377 kx INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev)
377 kx MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c)
377 kx DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c)
377 kx ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c)
377 kx DECODER_LIST=$(find_things_extern decoder AVCodec libavcodec/allcodecs.c)
377 kx CODEC_LIST="
377 kx $ENCODER_LIST
377 kx $DECODER_LIST
377 kx "
377 kx PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parsers.c)
377 kx BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
377 kx HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h)
377 kx PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
377 kx
377 kx AVCODEC_COMPONENTS_LIST="
377 kx $BSF_LIST
377 kx $DECODER_LIST
377 kx $ENCODER_LIST
377 kx $HWACCEL_LIST
377 kx $PARSER_LIST
377 kx "
377 kx
377 kx AVDEVICE_COMPONENTS_LIST="
377 kx $INDEV_LIST
377 kx $OUTDEV_LIST
377 kx "
377 kx
377 kx AVFILTER_COMPONENTS_LIST="
377 kx $FILTER_LIST
377 kx "
377 kx
377 kx AVFORMAT_COMPONENTS_LIST="
377 kx $DEMUXER_LIST
377 kx $MUXER_LIST
377 kx $PROTOCOL_LIST
377 kx "
377 kx
377 kx ALL_COMPONENTS="
377 kx $AVCODEC_COMPONENTS_LIST
377 kx $AVDEVICE_COMPONENTS_LIST
377 kx $AVFILTER_COMPONENTS_LIST
377 kx $AVFORMAT_COMPONENTS_LIST
377 kx "
377 kx
377 kx for n in $COMPONENT_LIST; do
377 kx v=$(toupper ${n%s})_LIST
377 kx eval enable \$$v
377 kx eval ${n}_if_any="\$$v"
377 kx done
377 kx
377 kx enable $ARCH_EXT_LIST
377 kx
377 kx die_unknown(){
377 kx echo "Unknown option \"$1\"."
377 kx echo "See $0 --help for available options."
377 kx exit 1
377 kx }
377 kx
377 kx print_in_columns() {
377 kx tr ' ' '\n' | sort | tr '\r\n' ' ' | awk -v col_width=24 -v width="$ncols" '
377 kx {
377 kx num_cols = width > col_width ? int(width / col_width) : 1;
377 kx num_rows = int((NF + num_cols-1) / num_cols);
377 kx y = x = 1;
377 kx for (y = 1; y <= num_rows; y++) {
377 kx i = y;
377 kx for (x = 1; x <= num_cols; x++) {
377 kx if (i <= NF) {
377 kx line = sprintf("%s%-" col_width "s", line, $i);
377 kx }
377 kx i = i + num_rows;
377 kx }
377 kx print line; line = "";
377 kx }
377 kx }' | sed 's/ *$//'
377 kx }
377 kx
377 kx show_list() {
377 kx suffix=_$1
377 kx shift
377 kx echo $* | sed s/$suffix//g | print_in_columns
377 kx exit 0
377 kx }
377 kx
377 kx rand_list(){
377 kx IFS=', '
377 kx set -- $*
377 kx unset IFS
377 kx for thing; do
377 kx comp=${thing%:*}
377 kx prob=${thing#$comp}
377 kx prob=${prob#:}
377 kx is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
377 kx echo "prob ${prob:-0.5}"
377 kx printf '%s\n' $comp
377 kx done
377 kx }
377 kx
377 kx do_random(){
377 kx action=$1
377 kx shift
377 kx random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
377 kx $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
377 kx }
377 kx
377 kx for opt do
377 kx optval="${opt#*=}"
377 kx case "$opt" in
377 kx --extra-ldflags=*)
377 kx add_ldflags $optval
377 kx ;;
377 kx --extra-ldexeflags=*)
377 kx add_ldexeflags $optval
377 kx ;;
377 kx --extra-ldsoflags=*)
377 kx add_ldsoflags $optval
377 kx ;;
377 kx --extra-ldlibflags=*)
377 kx warn "The --extra-ldlibflags option is only provided for compatibility and will be\n"\
377 kx "removed in the future. Use --extra-ldsoflags instead."
377 kx add_ldsoflags $optval
377 kx ;;
377 kx --extra-libs=*)
377 kx add_extralibs $optval
377 kx ;;
377 kx --disable-devices)
377 kx disable $INDEV_LIST $OUTDEV_LIST
377 kx ;;
377 kx --enable-debug=*)
377 kx debuglevel="$optval"
377 kx ;;
377 kx --disable-programs)
377 kx disable $PROGRAM_LIST
377 kx ;;
377 kx --disable-everything)
377 kx map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
377 kx ;;
377 kx --disable-all)
377 kx map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
377 kx disable $LIBRARY_LIST $PROGRAM_LIST doc
377 kx enable avutil
377 kx ;;
377 kx --enable-random|--disable-random)
377 kx action=${opt%%-random}
377 kx do_random ${action#--} $COMPONENT_LIST
377 kx ;;
377 kx --enable-random=*|--disable-random=*)
377 kx action=${opt%%-random=*}
377 kx do_random ${action#--} $optval
377 kx ;;
377 kx --enable-sdl)
377 kx enable sdl2
377 kx ;;
377 kx --enable-*=*|--disable-*=*)
377 kx eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
377 kx is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
377 kx eval list=\$$(toupper $thing)_LIST
377 kx name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
377 kx list=$(filter "$name" $list)
377 kx [ "$list" = "" ] && warn "Option $opt did not match anything"
377 kx test $action = enable && warn_if_gets_disabled $list
377 kx $action $list
377 kx ;;
377 kx --enable-yasm|--disable-yasm)
377 kx warn "The ${opt} option is only provided for compatibility and will be\n"\
377 kx "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
377 kx test $opt = --enable-yasm && x86asm=yes || x86asm=no
377 kx ;;
377 kx --yasmexe=*)
377 kx warn "The --yasmexe option is only provided for compatibility and will be\n"\
377 kx "removed in the future. Use --x86asmexe instead."
377 kx x86asmexe="$optval"
377 kx ;;
377 kx --enable-?*|--disable-?*)
377 kx eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
377 kx if is_in $option $COMPONENT_LIST; then
377 kx test $action = disable && action=unset
377 kx eval $action \$$(toupper ${option%s})_LIST
377 kx elif is_in $option $CMDLINE_SELECT; then
377 kx $action $option
377 kx else
377 kx die_unknown $opt
377 kx fi
377 kx ;;
377 kx --list-*)
377 kx NAME="${opt#--list-}"
377 kx is_in $NAME $COMPONENT_LIST || die_unknown $opt
377 kx NAME=${NAME%s}
377 kx eval show_list $NAME \$$(toupper $NAME)_LIST
377 kx ;;
377 kx --help|-h) show_help
377 kx ;;
377 kx --quiet|-q) quiet=yes
377 kx ;;
377 kx --fatal-warnings) enable fatal_warnings
377 kx ;;
377 kx --libfuzzer=*)
377 kx libfuzzer_path="$optval"
377 kx ;;
377 kx *)
377 kx optname="${opt%%=*}"
377 kx optname="${optname#--}"
377 kx optname=$(echo "$optname" | sed 's/-/_/g')
377 kx if is_in $optname $CMDLINE_SET; then
377 kx eval $optname='$optval'
377 kx elif is_in $optname $CMDLINE_APPEND; then
377 kx append $optname "$optval"
377 kx else
377 kx die_unknown $opt
377 kx fi
377 kx ;;
377 kx esac
377 kx done
377 kx
377 kx for e in $env; do
377 kx eval "export $e"
377 kx done
377 kx
377 kx if disabled autodetect; then
377 kx
377 kx # Unless iconv is explicitely disabled by the user, we still want to probe
377 kx # for the iconv from the libc.
377 kx disabled iconv || enable libc_iconv
377 kx
377 kx disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
377 kx disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
377 kx fi
377 kx # Mark specifically enabled, but normally autodetected libraries as requested.
377 kx for lib in $AUTODETECT_LIBS; do
377 kx enabled $lib && request $lib
377 kx done
377 kx #TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
377 kx enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
377 kx enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
377 kx
377 kx disabled logging && logfile=/dev/null
377 kx
377 kx # command line configuration sanity checks
377 kx
377 kx # we need to build at least one lib type
377 kx if ! enabled_any static shared; then
377 kx cat <<EOF
377 kx At least one library type must be built.
377 kx Specify --enable-static to build the static libraries or --enable-shared to
377 kx build the shared libraries as well. To only build the shared libraries specify
377 kx --disable-static in addition to --enable-shared.
377 kx EOF
377 kx exit 1
377 kx fi
377 kx
377 kx die_license_disabled() {
377 kx enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
377 kx }
377 kx
377 kx die_license_disabled_gpl() {
377 kx enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
377 kx }
377 kx
377 kx map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
377 kx map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
377 kx
377 kx enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
377 kx map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
377 kx
377 kx enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
377 kx
377 kx if enabled nonfree; then
377 kx license="nonfree and unredistributable"
377 kx elif enabled gplv3; then
377 kx license="GPL version 3 or later"
377 kx elif enabled lgplv3; then
377 kx license="LGPL version 3 or later"
377 kx elif enabled gpl; then
377 kx license="GPL version 2 or later"
377 kx else
377 kx license="LGPL version 2.1 or later"
377 kx fi
377 kx
377 kx enabled_all gnutls openssl &&
377 kx die "GnuTLS and OpenSSL must not be enabled at the same time."
377 kx
377 kx enabled_all gnutls mbedtls &&
377 kx die "GnuTLS and mbedTLS must not be enabled at the same time."
377 kx
377 kx enabled_all openssl mbedtls &&
377 kx die "OpenSSL and mbedTLS must not be enabled at the same time."
377 kx
377 kx # Disable all the library-specific components if the library itself
377 kx # is disabled, see AVCODEC_LIST and following _LIST variables.
377 kx
377 kx disable_components(){
377 kx disabled ${1} && disable $(
377 kx eval components="\$$(toupper ${1})_COMPONENTS"
377 kx map 'eval echo \${$(toupper ${v%s})_LIST}' $components
377 kx )
377 kx }
377 kx
377 kx map 'disable_components $v' $LIBRARY_LIST
377 kx
377 kx echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
377 kx set >> $logfile
377 kx
377 kx test -n "$valgrind" && toolchain="valgrind-memcheck"
377 kx
377 kx enabled ossfuzz && ! echo $CFLAGS | grep -q -- "-fsanitize=" && ! echo $CFLAGS | grep -q -- "-fcoverage-mapping" &&{
377 kx add_cflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
377 kx add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
377 kx }
377 kx
377 kx case "$toolchain" in
377 kx *-asan)
377 kx cc_default="${toolchain%-asan}"
377 kx add_cflags -fsanitize=address
377 kx add_ldflags -fsanitize=address
377 kx ;;
377 kx *-msan)
377 kx cc_default="${toolchain%-msan}"
377 kx add_cflags -fsanitize=memory -fsanitize-memory-track-origins
377 kx add_ldflags -fsanitize=memory
377 kx ;;
377 kx *-tsan)
377 kx cc_default="${toolchain%-tsan}"
377 kx add_cflags -fsanitize=thread
377 kx add_ldflags -fsanitize=thread
377 kx case "$toolchain" in
377 kx gcc-tsan)
377 kx add_cflags -fPIC
377 kx add_ldflags -fPIC
377 kx ;;
377 kx esac
377 kx ;;
377 kx *-usan)
377 kx cc_default="${toolchain%-usan}"
377 kx add_cflags -fsanitize=undefined
377 kx add_ldflags -fsanitize=undefined
377 kx ;;
377 kx valgrind-*)
377 kx target_exec_default="valgrind"
377 kx case "$toolchain" in
377 kx valgrind-massif)
377 kx 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"
377 kx ;;
377 kx valgrind-memcheck)
377 kx 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"
377 kx ;;
377 kx esac
377 kx ;;
377 kx msvc)
377 kx # Check whether the current MSVC version needs the C99 converter.
377 kx # From MSVC 2013 (compiler major version 18) onwards, it does actually
377 kx # support enough of C99 to build ffmpeg. Default to the new
377 kx # behaviour if the regexp was unable to match anything, since this
377 kx # successfully parses the version number of existing supported
377 kx # versions that require the converter (MSVC 2010 and 2012).
377 kx cl_major_ver=$(cl.exe 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
377 kx if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
377 kx cc_default="cl.exe"
377 kx cxx_default="cl.exe"
377 kx else
377 kx die "Unsupported MSVC version (2013 or newer required)"
377 kx fi
377 kx ld_default="$source_path/compat/windows/mslink"
377 kx nm_default="dumpbin.exe -symbols"
377 kx ar_default="lib.exe"
377 kx case "${arch:-$arch_default}" in
377 kx aarch64|arm64)
377 kx as_default="armasm64.exe"
377 kx ;;
377 kx arm*)
377 kx as_default="armasm.exe"
377 kx ;;
377 kx esac
377 kx target_os_default="win32"
377 kx # Use a relative path for TMPDIR. This makes sure all the
377 kx # ffconf temp files are written with a relative path, avoiding
377 kx # issues with msys/win32 path conversion for MSVC parameters
377 kx # such as -Fo<file> or -out:<file>.
377 kx TMPDIR=.
377 kx ;;
377 kx icl)
377 kx cc_default="icl"
377 kx ld_default="xilink"
377 kx nm_default="dumpbin -symbols"
377 kx ar_default="xilib"
377 kx target_os_default="win32"
377 kx TMPDIR=.
377 kx ;;
377 kx gcov)
377 kx add_cflags -fprofile-arcs -ftest-coverage
377 kx add_ldflags -fprofile-arcs -ftest-coverage
377 kx ;;
377 kx llvm-cov)
377 kx add_cflags -fprofile-arcs -ftest-coverage
377 kx add_ldflags --coverage
377 kx ;;
377 kx hardened)
377 kx add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
377 kx add_cflags -fno-strict-overflow -fstack-protector-all
377 kx add_ldflags -Wl,-z,relro -Wl,-z,now
377 kx add_cflags -fPIE
377 kx add_ldexeflags -fPIE -pie
377 kx ;;
377 kx ?*)
377 kx die "Unknown toolchain $toolchain"
377 kx ;;
377 kx esac
377 kx
377 kx if test -n "$cross_prefix"; then
377 kx test -n "$arch" && test -n "$target_os" ||
377 kx die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
377 kx enable cross_compile
377 kx fi
377 kx
377 kx set_default target_os
377 kx if test "$target_os" = android; then
377 kx cc_default="clang"
377 kx fi
377 kx
377 kx ar_default="${cross_prefix}${ar_default}"
377 kx cc_default="${cross_prefix}${cc_default}"
377 kx cxx_default="${cross_prefix}${cxx_default}"
377 kx nm_default="${cross_prefix}${nm_default}"
377 kx pkg_config_default="${cross_prefix}${pkg_config_default}"
377 kx if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
377 kx ranlib_default="${cross_prefix}${ranlib_default} -D"
377 kx else
377 kx ranlib_default="${cross_prefix}${ranlib_default}"
377 kx fi
377 kx strip_default="${cross_prefix}${strip_default}"
377 kx windres_default="${cross_prefix}${windres_default}"
377 kx
377 kx sysinclude_default="${sysroot}/usr/include"
377 kx
377 kx if enabled cuda_sdk; then
377 kx warn "Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead."
377 kx enable cuda_nvcc
377 kx fi
377 kx
377 kx if enabled cuda_nvcc; then
377 kx nvcc_default="nvcc"
377 kx nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
377 kx else
377 kx nvcc_default="clang"
377 kx nvccflags_default="--cuda-gpu-arch=sm_30 -O2"
377 kx NVCC_C=""
377 kx fi
377 kx
377 kx set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
377 kx target_exec x86asmexe nvcc
377 kx enabled cross_compile || host_cc_default=$cc
377 kx set_default host_cc
377 kx
377 kx pkg_config_fail_message=""
377 kx if ! $pkg_config --version >/dev/null 2>&1; then
377 kx warn "$pkg_config not found, library detection may fail."
377 kx pkg_config=false
377 kx elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
377 kx pkg_config_fail_message="
377 kx Note: When building a static binary, add --pkg-config-flags=\"--static\"."
377 kx fi
377 kx
377 kx if test $doxygen != $doxygen_default && \
377 kx ! $doxygen --version >/dev/null 2>&1; then
377 kx warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
377 kx fi
377 kx
377 kx exesuf() {
377 kx case $1 in
377 kx mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
377 kx esac
377 kx }
377 kx
377 kx EXESUF=$(exesuf $target_os)
377 kx HOSTEXESUF=$(exesuf $host_os)
377 kx
377 kx # set temporary file name
377 kx : ${TMPDIR:=$TEMPDIR}
377 kx : ${TMPDIR:=$TMP}
377 kx : ${TMPDIR:=/tmp}
377 kx
377 kx if [ -n "$tempprefix" ] ; then
377 kx mktemp(){
377 kx tmpname="$tempprefix.${HOSTNAME}.${UID}"
377 kx echo "$tmpname"
377 kx mkdir "$tmpname"
377 kx }
377 kx elif ! test_cmd mktemp -u XXXXXX; then
377 kx # simple replacement for missing mktemp
377 kx # NOT SAFE FOR GENERAL USE
377 kx mktemp(){
377 kx tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
377 kx echo "$tmpname"
377 kx mkdir "$tmpname"
377 kx }
377 kx fi
377 kx
377 kx FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
377 kx die "Unable to create temporary directory in $TMPDIR."
377 kx
377 kx tmpfile(){
377 kx tmp="${FFTMPDIR}/test"$2
377 kx (set -C; exec > $tmp) 2> /dev/null ||
377 kx die "Unable to create temporary file in $FFTMPDIR."
377 kx eval $1=$tmp
377 kx }
377 kx
377 kx trap 'rm -rf -- "$FFTMPDIR"' EXIT
377 kx trap 'exit 2' INT
377 kx
377 kx tmpfile TMPASM .asm
377 kx tmpfile TMPC .c
377 kx tmpfile TMPCPP .cpp
377 kx tmpfile TMPE $EXESUF
377 kx tmpfile TMPH .h
377 kx tmpfile TMPM .m
377 kx tmpfile TMPCU .cu
377 kx tmpfile TMPO .o
377 kx tmpfile TMPS .S
377 kx tmpfile TMPSH .sh
377 kx tmpfile TMPV .ver
377 kx
377 kx unset -f mktemp
377 kx
377 kx chmod +x $TMPE
377 kx
377 kx # make sure we can execute files in $TMPDIR
377 kx cat > $TMPSH 2>> $logfile <<EOF
377 kx #! /bin/sh
377 kx EOF
377 kx chmod +x $TMPSH >> $logfile 2>&1
377 kx if ! $TMPSH >> $logfile 2>&1; then
377 kx cat <<EOF
377 kx Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
377 kx variable to another directory and make sure that it is not mounted noexec.
377 kx EOF
377 kx die "Sanity test failed."
377 kx fi
377 kx
377 kx armasm_flags(){
377 kx for flag; do
377 kx case $flag in
377 kx # Filter out MSVC cl.exe options from cflags that shouldn't
377 kx # be passed to gas-preprocessor
377 kx -M[TD]*) ;;
377 kx *) echo $flag ;;
377 kx esac
377 kx done
377 kx }
377 kx
377 kx cparser_flags(){
377 kx for flag; do
377 kx case $flag in
377 kx -Wno-switch) echo -Wno-switch-enum ;;
377 kx -Wno-format-zero-length) ;;
377 kx -Wdisabled-optimization) ;;
377 kx -Wno-pointer-sign) echo -Wno-other ;;
377 kx *) echo $flag ;;
377 kx esac
377 kx done
377 kx }
377 kx
377 kx msvc_common_flags(){
377 kx for flag; do
377 kx case $flag in
377 kx # In addition to specifying certain flags under the compiler
377 kx # specific filters, they must be specified here as well or else the
377 kx # generic catch all at the bottom will print the original flag.
377 kx -Wall) ;;
377 kx -Wextra) ;;
377 kx -std=c*) ;;
377 kx # Common flags
377 kx -fomit-frame-pointer) ;;
377 kx -g) echo -Z7 ;;
377 kx -fno-math-errno) ;;
377 kx -fno-common) ;;
377 kx -fno-signed-zeros) ;;
377 kx -fPIC) ;;
377 kx -mthumb) ;;
377 kx -march=*) ;;
377 kx -lz) echo zlib.lib ;;
377 kx -lx264) echo libx264.lib ;;
377 kx -lstdc++) ;;
377 kx -l*) echo ${flag#-l}.lib ;;
377 kx -LARGEADDRESSAWARE) echo $flag ;;
377 kx -L*) echo -libpath:${flag#-L} ;;
377 kx -Wl,*) ;;
377 kx *) echo $flag ;;
377 kx esac
377 kx done
377 kx }
377 kx
377 kx msvc_flags(){
377 kx msvc_common_flags "$@"
377 kx for flag; do
377 kx case $flag in
377 kx -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
377 kx -wd4554 ;;
377 kx -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
377 kx -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
377 kx -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
377 kx -wd4307 \
377 kx -wd4273 -wd4554 -wd4701 -wd4703 ;;
377 kx esac
377 kx done
377 kx }
377 kx
377 kx icl_flags(){
377 kx msvc_common_flags "$@"
377 kx for flag; do
377 kx case $flag in
377 kx # Despite what Intel's documentation says -Wall, which is supported
377 kx # on Windows, does enable remarks so disable them here.
377 kx -Wall) echo $flag -Qdiag-disable:remark ;;
377 kx -std=c99) echo -Qstd=c99 ;;
377 kx -flto) echo -ipo ;;
377 kx esac
377 kx done
377 kx }
377 kx
377 kx icc_flags(){
377 kx for flag; do
377 kx case $flag in
377 kx -flto) echo -ipo ;;
377 kx *) echo $flag ;;
377 kx esac
377 kx done
377 kx }
377 kx
377 kx suncc_flags(){
377 kx for flag; do
377 kx case $flag in
377 kx -march=*|-mcpu=*)
377 kx case "${flag#*=}" in
377 kx native) echo -xtarget=native ;;
377 kx v9|niagara) echo -xarch=sparc ;;
377 kx ultrasparc) echo -xarch=sparcvis ;;
377 kx ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
377 kx i586|pentium) echo -xchip=pentium ;;
377 kx i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
377 kx pentium3*|c3-2) echo -xtarget=pentium3 ;;
377 kx pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
377 kx pentium4*) echo -xtarget=pentium4 ;;
377 kx prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
377 kx *-sse3) echo -xarch=sse3 ;;
377 kx core2) echo -xarch=ssse3 -xchip=core2 ;;
377 kx bonnell) echo -xarch=ssse3 ;;
377 kx corei7|nehalem) echo -xtarget=nehalem ;;
377 kx westmere) echo -xtarget=westmere ;;
377 kx silvermont) echo -xarch=sse4_2 ;;
377 kx corei7-avx|sandybridge) echo -xtarget=sandybridge ;;
377 kx core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
377 kx echo -xarch=avx ;;
377 kx amdfam10|barcelona) echo -xtarget=barcelona ;;
377 kx btver1) echo -xarch=amdsse4a ;;
377 kx btver2|bdver*|znver*) echo -xarch=avx ;;
377 kx athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
377 kx k8|opteron|athlon64|athlon-fx)
377 kx echo -xarch=sse2a ;;
377 kx athlon*) echo -xarch=pentium_proa ;;
377 kx esac
377 kx ;;
377 kx -std=c99) echo -xc99 ;;
377 kx -fomit-frame-pointer) echo -xregs=frameptr ;;
377 kx -fPIC) echo -KPIC -xcode=pic32 ;;
377 kx -W*,*) echo $flag ;;
377 kx -f*-*|-W*|-mimpure-text) ;;
377 kx -shared) echo -G ;;
377 kx *) echo $flag ;;
377 kx esac
377 kx done
377 kx }
377 kx
377 kx probe_cc(){
377 kx pfx=$1
377 kx _cc=$2
377 kx first=$3
377 kx
377 kx unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
377 kx unset _ld_o _ldflags _ld_lib _ld_path
377 kx unset _depflags _DEPCMD _DEPFLAGS
377 kx _flags_filter=echo
377 kx
377 kx if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
377 kx true # no-op to avoid reading stdin in following checks
377 kx elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
377 kx _type=llvm_gcc
377 kx gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
377 kx _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
377 kx _depflags='-MMD -MF $(@:.o=.d) -MT $@'
377 kx _cflags_speed='-O3'
377 kx _cflags_size='-Os'
377 kx elif $_cc -v 2>&1 | grep -qi ^gcc; then
377 kx _type=gcc
377 kx gcc_version=$($_cc --version | head -n1)
377 kx gcc_basever=$($_cc -dumpversion)
377 kx gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
377 kx gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
377 kx _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
377 kx case $gcc_basever in
377 kx 2) ;;
377 kx 2.*) ;;
377 kx *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
377 kx esac
377 kx if [ "$first" = true ]; then
377 kx case $gcc_basever in
377 kx 4.2*)
377 kx warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
377 kx esac
377 kx fi
377 kx _cflags_speed='-O3'
377 kx _cflags_size='-Os'
377 kx elif $_cc --version 2>/dev/null | grep -q ^icc; then
377 kx _type=icc
377 kx _ident=$($_cc --version | head -n1)
377 kx _depflags='-MMD'
377 kx _cflags_speed='-O3'
377 kx _cflags_size='-Os'
377 kx _cflags_noopt='-O1'
377 kx _flags_filter=icc_flags
377 kx elif $_cc -v 2>&1 | grep -q xlc; then
377 kx _type=xlc
377 kx _ident=$($_cc -qversion 2>/dev/null | head -n1)
377 kx _cflags_speed='-O5'
377 kx _cflags_size='-O5 -qcompact'
377 kx elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
377 kx test -d "$sysroot" || die "No valid sysroot specified."
377 kx _type=armcc
377 kx _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
377 kx armcc_conf="$PWD/armcc.conf"
377 kx $_cc --arm_linux_configure \
377 kx --arm_linux_config_file="$armcc_conf" \
377 kx --configure_sysroot="$sysroot" \
377 kx --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
377 kx die "Error creating armcc configuration file."
377 kx $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
377 kx _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
377 kx as_default="${cross_prefix}gcc"
377 kx _depflags='-MMD'
377 kx _cflags_speed='-O3'
377 kx _cflags_size='-Os'
377 kx elif $_cc -v 2>&1 | grep -q clang && ! $_cc -? > /dev/null 2>&1; then
377 kx _type=clang
377 kx _ident=$($_cc --version 2>/dev/null | head -n1)
377 kx _depflags='-MMD -MF $(@:.o=.d) -MT $@'
377 kx _cflags_speed='-O3'
377 kx _cflags_size='-Oz'
377 kx elif $_cc -V 2>&1 | grep -q Sun; then
377 kx _type=suncc
377 kx _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
377 kx _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
377 kx _DEPFLAGS='-xM1 -xc99'
377 kx _ldflags='-std=c99'
377 kx _cflags_speed='-O5'
377 kx _cflags_size='-O5 -xspace'
377 kx _flags_filter=suncc_flags
377 kx elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
377 kx _type=pathscale
377 kx _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
377 kx _depflags='-MMD -MF $(@:.o=.d) -MT $@'
377 kx _cflags_speed='-O2'
377 kx _cflags_size='-Os'
377 kx _flags_filter='filter_out -Wdisabled-optimization'
377 kx elif $_cc -v 2>&1 | grep -q Open64; then
377 kx _type=open64
377 kx _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
377 kx _depflags='-MMD -MF $(@:.o=.d) -MT $@'
377 kx _cflags_speed='-O2'
377 kx _cflags_size='-Os'
377 kx _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
377 kx elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
377 kx _type=armasm
377 kx _ident=$($_cc | head -n1)
377 kx # 4509: "This form of conditional instruction is deprecated"
377 kx _flags="-nologo -ignore 4509"
377 kx _flags_filter=armasm_flags
377 kx elif $_cc 2>&1 | grep -q Intel; then
377 kx _type=icl
377 kx _ident=$($_cc 2>&1 | head -n1)
377 kx _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
377 kx # Not only is O3 broken on 13.x+ but it is slower on all previous
377 kx # versions (tested) as well.
377 kx _cflags_speed="-O2"
377 kx _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
377 kx if $_cc 2>&1 | grep -q Linker; then
377 kx _ld_o='-out:$@'
377 kx else
377 kx _ld_o='-Fe$@'
377 kx fi
377 kx _cc_o='-Fo$@'
377 kx _cc_e='-P'
377 kx _flags_filter=icl_flags
377 kx _ld_lib='lib%.a'
377 kx _ld_path='-libpath:'
377 kx # -Qdiag-error to make icl error when seeing certain unknown arguments
377 kx _flags='-nologo -Qdiag-error:4044,10157'
377 kx # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
377 kx # with MSVC which enables it by default.
377 kx _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
377 kx disable stripping
377 kx elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
377 kx # lld can emulate multiple different linkers; in ms link.exe mode,
377 kx # the -? parameter gives the help output which contains an identifyable
377 kx # string, while it gives an error in other modes.
377 kx _type=lld-link
377 kx # The link.exe mode doesn't have a switch for getting the version,
377 kx # but we can force it back to gnu mode and get the version from there.
377 kx _ident=$($_cc -flavor gnu --version 2>/dev/null)
377 kx _ld_o='-out:$@'
377 kx _flags_filter=msvc_flags
377 kx _ld_lib='lib%.a'
377 kx _ld_path='-libpath:'
377 kx elif $_cc -nologo- 2>&1 | grep -q Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then
377 kx _type=msvc
377 kx if $_cc -nologo- 2>&1 | grep -q Microsoft; then
377 kx _ident=$($_cc 2>&1 | head -n1 | tr -d '\r')
377 kx else
377 kx _ident=$($_cc --version 2>/dev/null | head -n1 | tr -d '\r')
377 kx fi
377 kx _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
377 kx _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
377 kx _cflags_speed="-O2"
377 kx _cflags_size="-O1"
377 kx _cflags_noopt="-O1"
377 kx if $_cc -nologo- 2>&1 | grep -q Linker; then
377 kx _ld_o='-out:$@'
377 kx else
377 kx _ld_o='-Fe$@'
377 kx fi
377 kx _cc_o='-Fo$@'
377 kx _cc_e='-P -Fi$@'
377 kx _flags_filter=msvc_flags
377 kx _ld_lib='lib%.a'
377 kx _ld_path='-libpath:'
377 kx _flags='-nologo'
377 kx disable stripping
377 kx elif $_cc --version 2>/dev/null | grep -q ^cparser; then
377 kx _type=cparser
377 kx _ident=$($_cc --version | head -n1)
377 kx _depflags='-MMD'
377 kx _cflags_speed='-O4'
377 kx _cflags_size='-O2'
377 kx _flags_filter=cparser_flags
377 kx fi
377 kx
377 kx eval ${pfx}_type=\$_type
377 kx eval ${pfx}_ident=\$_ident
377 kx }
377 kx
377 kx set_ccvars(){
377 kx eval ${1}_C=\${_cc_c-\${${1}_C}}
377 kx eval ${1}_E=\${_cc_e-\${${1}_E}}
377 kx eval ${1}_O=\${_cc_o-\${${1}_O}}
377 kx
377 kx if [ -n "$_depflags" ]; then
377 kx eval ${1}_DEPFLAGS=\$_depflags
377 kx else
377 kx eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
377 kx eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
377 kx eval DEP${1}FLAGS=\$_flags
377 kx fi
377 kx }
377 kx
377 kx probe_cc cc "$cc" "true"
377 kx cflags_filter=$_flags_filter
377 kx cflags_speed=$_cflags_speed
377 kx cflags_size=$_cflags_size
377 kx cflags_noopt=$_cflags_noopt
377 kx add_cflags $_flags $_cflags
377 kx cc_ldflags=$_ldflags
377 kx set_ccvars CC
377 kx set_ccvars CXX
377 kx
377 kx probe_cc hostcc "$host_cc"
377 kx host_cflags_filter=$_flags_filter
377 kx host_cflags_speed=$_cflags_speed
377 kx add_host_cflags $_flags $_cflags
377 kx set_ccvars HOSTCC
377 kx
377 kx test -n "$cc_type" && enable $cc_type ||
377 kx warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
377 kx
377 kx : ${as_default:=$cc}
377 kx : ${objcc_default:=$cc}
377 kx : ${dep_cc_default:=$cc}
377 kx : ${ld_default:=$cc}
377 kx : ${host_ld_default:=$host_cc}
377 kx set_default ar as objcc dep_cc ld ln_s host_ld windres
377 kx
377 kx probe_cc as "$as"
377 kx asflags_filter=$_flags_filter
377 kx add_asflags $_flags $_cflags
377 kx set_ccvars AS
377 kx
377 kx probe_cc objcc "$objcc"
377 kx objcflags_filter=$_flags_filter
377 kx add_objcflags $_flags $_cflags
377 kx set_ccvars OBJC
377 kx
377 kx probe_cc ld "$ld"
377 kx ldflags_filter=$_flags_filter
377 kx add_ldflags $_flags $_ldflags
377 kx test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
377 kx LD_O=${_ld_o-$LD_O}
377 kx LD_LIB=${_ld_lib-$LD_LIB}
377 kx LD_PATH=${_ld_path-$LD_PATH}
377 kx
377 kx probe_cc hostld "$host_ld"
377 kx host_ldflags_filter=$_flags_filter
377 kx add_host_ldflags $_flags $_ldflags
377 kx HOSTLD_O=${_ld_o-$HOSTLD_O}
377 kx
377 kx if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
377 kx probe_cc depcc "$dep_cc"
377 kx CCDEP=${_DEPCMD:-$DEPCMD}
377 kx CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
377 kx DEPCCFLAGS=$_flags
377 kx fi
377 kx
377 kx if $ar 2>&1 | grep -q Microsoft; then
377 kx arflags="-nologo"
377 kx ar_o='-out:$@'
377 kx elif $ar 2>&1 | grep -q "\[D\] "; then
377 kx arflags="rcD"
377 kx ar_o='$@'
377 kx else
377 kx arflags="rc"
377 kx ar_o='$@'
377 kx fi
377 kx
377 kx add_cflags $extra_cflags
377 kx add_cxxflags $extra_cxxflags
377 kx add_objcflags $extra_objcflags
377 kx add_asflags $extra_cflags
377 kx
377 kx if test -n "$sysroot"; then
377 kx case "$cc_type" in
377 kx gcc|llvm_gcc|clang)
377 kx add_cppflags --sysroot="$sysroot"
377 kx add_ldflags --sysroot="$sysroot"
377 kx ;;
377 kx esac
377 kx fi
377 kx
377 kx if test "$cpu" = host; then
377 kx enabled cross_compile &&
377 kx warn "--cpu=host makes no sense when cross-compiling."
377 kx
377 kx case "$cc_type" in
377 kx gcc|llvm_gcc)
377 kx check_native(){
377 kx $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
377 kx sed -n "/cc1.*$1=/{
377 kx s/.*$1=\\([^ ]*\\).*/\\1/
377 kx p
377 kx q
377 kx }" $TMPE
377 kx }
377 kx cpu=$(check_native -march || check_native -mcpu)
377 kx ;;
377 kx clang)
377 kx check_native(){
377 kx $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
377 kx sed -n "/cc1.*-target-cpu /{
377 kx s/.*-target-cpu \\([^ ]*\\).*/\\1/
377 kx p
377 kx q
377 kx }" $TMPE
377 kx }
377 kx cpu=$(check_native -march)
377 kx ;;
377 kx esac
377 kx
377 kx test "${cpu:-host}" = host &&
377 kx die "--cpu=host not supported with compiler $cc"
377 kx fi
377 kx
377 kx # Deal with common $arch aliases
377 kx case "$arch" in
377 kx aarch64|arm64)
377 kx arch="aarch64"
377 kx ;;
377 kx arm*|iPad*|iPhone*)
377 kx arch="arm"
377 kx ;;
377 kx mips*|IP*)
377 kx case "$arch" in
377 kx *el)
377 kx add_cppflags -EL
377 kx add_ldflags -EL
377 kx ;;
377 kx *eb)
377 kx add_cppflags -EB
377 kx add_ldflags -EB
377 kx ;;
377 kx esac
377 kx arch="mips"
377 kx ;;
377 kx parisc*|hppa*)
377 kx arch="parisc"
377 kx ;;
377 kx "Power Macintosh"|ppc*|powerpc*)
377 kx arch="ppc"
377 kx ;;
377 kx s390|s390x)
377 kx arch="s390"
377 kx ;;
377 kx sh4|sh)
377 kx arch="sh4"
377 kx ;;
377 kx sun4*|sparc*)
377 kx arch="sparc"
377 kx ;;
377 kx tilegx|tile-gx)
377 kx arch="tilegx"
377 kx ;;
377 kx i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
377 kx arch="x86"
377 kx ;;
377 kx esac
377 kx
377 kx is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
377 kx enable $arch
377 kx
377 kx # Add processor-specific flags
377 kx if enabled aarch64; then
377 kx
377 kx case $cpu in
377 kx armv*)
377 kx cpuflags="-march=$cpu"
377 kx ;;
377 kx *)
377 kx cpuflags="-mcpu=$cpu"
377 kx ;;
377 kx esac
377 kx
377 kx elif enabled alpha; then
377 kx
377 kx cpuflags="-mcpu=$cpu"
377 kx
377 kx elif enabled arm; then
377 kx
377 kx check_arm_arch() {
377 kx test_cpp_condition stddef.h \
377 kx "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
377 kx $cpuflags
377 kx }
377 kx
377 kx probe_arm_arch() {
377 kx if check_arm_arch 4; then echo armv4
377 kx elif check_arm_arch 4T; then echo armv4t
377 kx elif check_arm_arch 5; then echo armv5
377 kx elif check_arm_arch 5E; then echo armv5e
377 kx elif check_arm_arch 5T; then echo armv5t
377 kx elif check_arm_arch 5TE; then echo armv5te
377 kx elif check_arm_arch 5TEJ; then echo armv5te
377 kx elif check_arm_arch 6; then echo armv6
377 kx elif check_arm_arch 6J; then echo armv6j
377 kx elif check_arm_arch 6K; then echo armv6k
377 kx elif check_arm_arch 6Z; then echo armv6z
377 kx elif check_arm_arch 6KZ; then echo armv6zk
377 kx elif check_arm_arch 6ZK; then echo armv6zk
377 kx elif check_arm_arch 6T2; then echo armv6t2
377 kx elif check_arm_arch 7; then echo armv7
377 kx elif check_arm_arch 7A 7_A; then echo armv7-a
377 kx elif check_arm_arch 7S; then echo armv7-a
377 kx elif check_arm_arch 7R 7_R; then echo armv7-r
377 kx elif check_arm_arch 7M 7_M; then echo armv7-m
377 kx elif check_arm_arch 7EM 7E_M; then echo armv7-m
377 kx elif check_arm_arch 8A 8_A; then echo armv8-a
377 kx fi
377 kx }
377 kx
377 kx [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
377 kx
377 kx case $cpu in
377 kx armv*)
377 kx cpuflags="-march=$cpu"
377 kx subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
377 kx ;;
377 kx *)
377 kx cpuflags="-mcpu=$cpu"
377 kx case $cpu in
377 kx cortex-a*) subarch=armv7a ;;
377 kx cortex-r*) subarch=armv7r ;;
377 kx cortex-m*) enable thumb; subarch=armv7m ;;
377 kx arm11*) subarch=armv6 ;;
377 kx arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
377 kx armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
377 kx *) subarch=$(probe_arm_arch) ;;
377 kx esac
377 kx ;;
377 kx esac
377 kx
377 kx case "$subarch" in
377 kx armv5t*) enable fast_clz ;;
377 kx armv[6-8]*)
377 kx enable fast_clz
377 kx disabled fast_unaligned || enable fast_unaligned
377 kx ;;
377 kx esac
377 kx
377 kx elif enabled avr32; then
377 kx
377 kx case $cpu in
377 kx ap7[02]0[0-2])
377 kx subarch="avr32_ap"
377 kx cpuflags="-mpart=$cpu"
377 kx ;;
377 kx ap)
377 kx subarch="avr32_ap"
377 kx cpuflags="-march=$cpu"
377 kx ;;
377 kx uc3[ab]*)
377 kx subarch="avr32_uc"
377 kx cpuflags="-mcpu=$cpu"
377 kx ;;
377 kx uc)
377 kx subarch="avr32_uc"
377 kx cpuflags="-march=$cpu"
377 kx ;;
377 kx esac
377 kx
377 kx elif enabled bfin; then
377 kx
377 kx cpuflags="-mcpu=$cpu"
377 kx
377 kx elif enabled mips; then
377 kx
377 kx if [ "$cpu" != "generic" ]; then
377 kx disable mips32r2
377 kx disable mips32r5
377 kx disable mips64r2
377 kx disable mips32r6
377 kx disable mips64r6
377 kx disable loongson2
377 kx disable loongson3
377 kx disable mipsdsp
377 kx disable mipsdspr2
377 kx
377 kx cpuflags="-march=$cpu"
377 kx
377 kx case $cpu in
377 kx # General ISA levels
377 kx mips1|mips3)
377 kx ;;
377 kx mips32r2)
377 kx enable mips32r2
377 kx ;;
377 kx mips32r5)
377 kx enable mips32r2
377 kx enable mips32r5
377 kx ;;
377 kx mips64r2|mips64r5)
377 kx enable mips64r2
377 kx enable loongson3
377 kx ;;
377 kx # Cores from MIPS(MTI)
377 kx 24kc)
377 kx disable mipsfpu
377 kx enable mips32r2
377 kx ;;
377 kx 24kf*|24kec|34kc|74Kc|1004kc)
377 kx enable mips32r2
377 kx ;;
377 kx 24kef*|34kf*|1004kf*)
377 kx enable mipsdsp
377 kx enable mips32r2
377 kx ;;
377 kx p5600)
377 kx enable mips32r2
377 kx enable mips32r5
377 kx check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
377 kx ;;
377 kx i6400)
377 kx enable mips64r6
377 kx check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
377 kx ;;
377 kx p6600)
377 kx enable mips64r6
377 kx check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
377 kx ;;
377 kx # Cores from Loongson
377 kx loongson2e|loongson2f|loongson3*)
377 kx enable local_aligned
377 kx enable simd_align_16
377 kx enable fast_64bit
377 kx enable fast_clz
377 kx enable fast_cmov
377 kx enable fast_unaligned
377 kx disable aligned_stack
377 kx # When gcc version less than 5.3.0, add -fno-expensive-optimizations flag.
377 kx if test "$cc_type" = "gcc"; then
377 kx case $gcc_basever in
377 kx 2|2.*|3.*|4.*|5.0|5.1|5.2)
377 kx expensive_optimization_flag="-fno-expensive-optimizations"
377 kx ;;
377 kx *)
377 kx expensive_optimization_flag=""
377 kx ;;
377 kx esac
377 kx fi
377 kx
377 kx case $cpu in
377 kx loongson3*)
377 kx enable loongson3
377 kx cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag"
377 kx ;;
377 kx loongson2e)
377 kx enable loongson2
377 kx cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag"
377 kx ;;
377 kx loongson2f)
377 kx enable loongson2
377 kx cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag"
377 kx ;;
377 kx esac
377 kx ;;
377 kx *)
377 kx warn "unknown MIPS CPU"
377 kx ;;
377 kx esac
377 kx
377 kx else
377 kx disable mipsdsp
377 kx disable mipsdspr2
377 kx # Disable DSP stuff for generic CPU, it can't be detected at runtime.
377 kx warn 'generic cpu selected'
377 kx fi
377 kx
377 kx elif enabled ppc; then
377 kx
377 kx disable ldbrx
377 kx
377 kx case $(tolower $cpu) in
377 kx 601|ppc601|powerpc601)
377 kx cpuflags="-mcpu=601"
377 kx disable altivec
377 kx ;;
377 kx 603*|ppc603*|powerpc603*)
377 kx cpuflags="-mcpu=603"
377 kx disable altivec
377 kx ;;
377 kx 604*|ppc604*|powerpc604*)
377 kx cpuflags="-mcpu=604"
377 kx disable altivec
377 kx ;;
377 kx g3|75*|ppc75*|powerpc75*)
377 kx cpuflags="-mcpu=750"
377 kx disable altivec
377 kx ;;
377 kx g4|745*|ppc745*|powerpc745*)
377 kx cpuflags="-mcpu=7450"
377 kx disable vsx
377 kx ;;
377 kx 74*|ppc74*|powerpc74*)
377 kx cpuflags="-mcpu=7400"
377 kx disable vsx
377 kx ;;
377 kx g5|970|ppc970|powerpc970)
377 kx cpuflags="-mcpu=970"
377 kx disable vsx
377 kx ;;
377 kx power[3-6]*)
377 kx cpuflags="-mcpu=$cpu"
377 kx disable vsx
377 kx ;;
377 kx power[7-8]*)
377 kx cpuflags="-mcpu=$cpu"
377 kx ;;
377 kx cell)
377 kx cpuflags="-mcpu=cell"
377 kx enable ldbrx
377 kx disable vsx
377 kx ;;
377 kx e500mc)
377 kx cpuflags="-mcpu=e500mc"
377 kx disable altivec
377 kx ;;
377 kx e500v2)
377 kx cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
377 kx disable altivec
377 kx disable dcbzl
377 kx ;;
377 kx e500)
377 kx cpuflags="-mcpu=8540 -mhard-float"
377 kx disable altivec
377 kx disable dcbzl
377 kx ;;
377 kx esac
377 kx
377 kx elif enabled sparc; then
377 kx
377 kx case $cpu in
377 kx cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
377 kx cpuflags="-mcpu=$cpu"
377 kx ;;
377 kx ultrasparc*|niagara[234])
377 kx cpuflags="-mcpu=$cpu"
377 kx ;;
377 kx esac
377 kx
377 kx elif enabled x86; then
377 kx
377 kx case $cpu in
377 kx i[345]86|pentium)
377 kx cpuflags="-march=$cpu"
377 kx disable i686
377 kx disable mmx
377 kx ;;
377 kx # targets that do NOT support nopl and conditional mov (cmov)
377 kx pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
377 kx cpuflags="-march=$cpu"
377 kx disable i686
377 kx ;;
377 kx # targets that do support nopl and conditional mov (cmov)
377 kx i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
377 kx |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
377 kx |amdfam10|barcelona|b[dt]ver*|znver*)
377 kx cpuflags="-march=$cpu"
377 kx enable i686
377 kx enable fast_cmov
377 kx ;;
377 kx # targets that do support conditional mov but on which it's slow
377 kx pentium4|pentium4m|prescott|nocona)
377 kx cpuflags="-march=$cpu"
377 kx enable i686
377 kx disable fast_cmov
377 kx ;;
377 kx esac
377 kx
377 kx fi
377 kx
377 kx if [ "$cpu" != generic ]; then
377 kx add_cflags $cpuflags
377 kx add_asflags $cpuflags
377 kx test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
377 kx fi
377 kx
377 kx # compiler sanity check
377 kx test_exec <<EOF
377 kx int main(void){ return 0; }
377 kx EOF
377 kx if test "$?" != 0; then
377 kx echo "$cc is unable to create an executable file."
377 kx if test -z "$cross_prefix" && ! enabled cross_compile ; then
377 kx echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
377 kx echo "Only do this if you know what cross compiling means."
377 kx fi
377 kx die "C compiler test failed."
377 kx fi
377 kx
377 kx add_cppflags -D_ISOC99_SOURCE
377 kx add_cxxflags -D__STDC_CONSTANT_MACROS
377 kx check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
377 kx
377 kx # some compilers silently accept -std=c11, so we also need to check that the
377 kx # version macro is defined properly
377 kx test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" &&
377 kx add_cflags -std=c11 ||
377 kx check_cflags -std=c99
377 kx
377 kx check_cppflags -D_FILE_OFFSET_BITS=64
377 kx check_cppflags -D_LARGEFILE_SOURCE
377 kx
377 kx add_host_cppflags -D_ISOC99_SOURCE
377 kx check_host_cflags -std=c99
377 kx check_host_cflags -Wall
377 kx check_host_cflags $host_cflags_speed
377 kx
377 kx check_64bit(){
377 kx arch32=$1
377 kx arch64=$2
377 kx expr=${3:-'sizeof(void *) > 4'}
377 kx test_code cc "" "int test[2*($expr) - 1]" &&
377 kx subarch=$arch64 || subarch=$arch32
377 kx enable $subarch
377 kx }
377 kx
377 kx case "$arch" in
377 kx aarch64|alpha|ia64)
377 kx enabled shared && enable_weak pic
377 kx ;;
377 kx mips)
377 kx check_64bit mips mips64 '_MIPS_SIM > 1'
377 kx enabled shared && enable_weak pic
377 kx ;;
377 kx parisc)
377 kx check_64bit parisc parisc64
377 kx enabled shared && enable_weak pic
377 kx ;;
377 kx ppc)
377 kx check_64bit ppc ppc64
377 kx enabled shared && enable_weak pic
377 kx ;;
377 kx s390)
377 kx check_64bit s390 s390x
377 kx enabled shared && enable_weak pic
377 kx ;;
377 kx sparc)
377 kx check_64bit sparc sparc64
377 kx enabled shared && enable_weak pic
377 kx ;;
377 kx x86)
377 kx check_64bit x86_32 x86_64
377 kx # Treat x32 as x64 for now. Note it also needs pic if shared
377 kx test "$subarch" = "x86_32" && test_cpp_condition stddef.h 'defined(__x86_64__)' &&
377 kx subarch=x86_64 && enable x86_64 && disable x86_32
377 kx if enabled x86_64; then
377 kx enabled shared && enable_weak pic
377 kx objformat=elf64
377 kx fi
377 kx ;;
377 kx esac
377 kx
377 kx # OS specific
377 kx case $target_os in
377 kx aix)
377 kx SHFLAGS=-shared
377 kx add_cppflags '-I\$(SRC_PATH)/compat/aix'
377 kx enabled shared && add_ldflags -Wl,-brtl
377 kx arflags='-Xany -r -c'
377 kx striptype=""
377 kx ;;
377 kx android)
377 kx disable symver
377 kx enable section_data_rel_ro
377 kx add_cflags -fPIE
377 kx add_ldexeflags -fPIE -pie
377 kx SLIB_INSTALL_NAME='$(SLIBNAME)'
377 kx SLIB_INSTALL_LINKS=
377 kx SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
377 kx ;;
377 kx haiku)
377 kx prefix_default="/boot/common"
377 kx network_extralibs="-lnetwork"
377 kx host_extralibs=
377 kx ;;
377 kx sunos)
377 kx SHFLAGS='-shared -Wl,-h,$$(@F)'
377 kx enabled x86 && append SHFLAGS -mimpure-text
377 kx network_extralibs="-lsocket -lnsl"
377 kx add_cppflags -D__EXTENSIONS__
377 kx # When using suncc to build, the Solaris linker will mark
377 kx # an executable with each instruction set encountered by
377 kx # the Solaris assembler. As our libraries contain their own
377 kx # guards for processor-specific code, instead suppress
377 kx # generation of the HWCAPS ELF section on Solaris x86 only.
377 kx enabled_all suncc x86 &&
377 kx echo "hwcap_1 = OVERRIDE;" > mapfile &&
377 kx add_ldflags -Wl,-M,mapfile
377 kx nm_default='nm -P -g'
377 kx striptype=""
377 kx version_script='-M'
377 kx VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
377 kx ;;
377 kx netbsd)
377 kx disable symver
377 kx oss_indev_extralibs="-lossaudio"
377 kx oss_outdev_extralibs="-lossaudio"
377 kx enabled gcc || check_ldflags -Wl,-zmuldefs
377 kx ;;
377 kx openbsd|bitrig)
377 kx disable symver
377 kx enable section_data_rel_ro
377 kx striptype=""
377 kx SHFLAGS='-shared'
377 kx SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
377 kx SLIB_INSTALL_LINKS=
377 kx oss_indev_extralibs="-lossaudio"
377 kx oss_outdev_extralibs="-lossaudio"
377 kx ;;
377 kx dragonfly)
377 kx disable symver
377 kx ;;
377 kx freebsd)
377 kx ;;
377 kx bsd/os)
377 kx add_extralibs -lpoll -lgnugetopt
377 kx strip="strip -d"
377 kx ;;
377 kx darwin)
377 kx enabled ppc && add_asflags -force_cpusubtype_ALL
377 kx install_name_dir_default='$(SHLIBDIR)'
377 kx SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
377 kx enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
377 kx strip="${strip} -x"
377 kx add_ldflags -Wl,-dynamic,-search_paths_first
377 kx check_cflags -Werror=partial-availability
377 kx SLIBSUF=".dylib"
377 kx SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
377 kx SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
377 kx enabled x86_64 && objformat="macho64" || objformat="macho32"
377 kx enabled_any pic shared x86_64 ||
377 kx { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
377 kx check_headers dispatch/dispatch.h &&
377 kx add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
377 kx if test -n "$sysroot"; then
377 kx is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
377 kx is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot
377 kx fi
377 kx version_script='-exported_symbols_list'
377 kx VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
377 kx # Workaround for Xcode 11 -fstack-check bug
377 kx if enabled clang; then
377 kx clang_version=$($cc -dumpversion)
377 kx test ${clang_version%%.*} -eq 11 && add_cflags -fno-stack-check
377 kx fi
377 kx ;;
377 kx msys*)
377 kx die "Native MSYS builds are discouraged, please use the MINGW environment."
377 kx ;;
377 kx mingw32*|mingw64*)
377 kx target_os=mingw32
377 kx LIBTARGET=i386
377 kx if enabled x86_64; then
377 kx LIBTARGET="i386:x86-64"
377 kx elif enabled arm; then
377 kx LIBTARGET="arm"
377 kx elif enabled aarch64; then
377 kx LIBTARGET="arm64"
377 kx fi
377 kx if enabled shared; then
377 kx # Cannot build both shared and static libs when using dllimport.
377 kx disable static
377 kx fi
377 kx enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres
377 kx enabled x86_32 && check_ldflags -Wl,--large-address-aware
377 kx shlibdir_default="$bindir_default"
377 kx SLIBPREF=""
377 kx SLIBSUF=".dll"
377 kx SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
377 kx SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
377 kx if test_cmd lib.exe -list; then
377 kx SLIB_EXTRA_CMD=-'lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
377 kx if enabled x86_64; then
377 kx LIBTARGET=x64
377 kx fi
377 kx else
377 kx SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
377 kx fi
377 kx SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
377 kx SLIB_INSTALL_LINKS=
377 kx SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
377 kx SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
377 kx 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)'
377 kx SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-image-base $$(@:$(SLIBSUF)=.def)'
377 kx enabled x86_64 && objformat="win64" || objformat="win32"
377 kx dlltool="${cross_prefix}dlltool"
377 kx ranlib=:
377 kx enable dos_paths
377 kx check_ldflags -Wl,--nxcompat,--dynamicbase
377 kx # Lets work around some stupidity in binutils.
377 kx # ld will strip relocations from executables even though we need them
377 kx # for dynamicbase (ASLR). Using -pie does retain the reloc section
377 kx # however ld then forgets what the entry point should be (oops) so we
377 kx # have to manually (re)set it.
377 kx if enabled x86_32; then
377 kx disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
377 kx elif enabled x86_64; then
377 kx disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
377 kx check_ldflags -Wl,--high-entropy-va # binutils 2.25
377 kx # Set image base >4GB for extra entropy with HEASLR
377 kx add_ldexeflags -Wl,--image-base,0x140000000
377 kx append SHFLAGS -Wl,--image-base,0x180000000
377 kx fi
377 kx ;;
377 kx win32|win64)
377 kx disable symver
377 kx if enabled shared; then
377 kx # Link to the import library instead of the normal static library
377 kx # for shared libs.
377 kx LD_LIB='%.lib'
377 kx # Cannot build both shared and static libs with MSVC or icl.
377 kx disable static
377 kx fi
377 kx enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
377 kx shlibdir_default="$bindir_default"
377 kx SLIBPREF=""
377 kx SLIBSUF=".dll"
377 kx SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
377 kx SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
377 kx SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
377 kx SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
377 kx SLIB_INSTALL_LINKS=
377 kx SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
377 kx SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
377 kx SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
377 kx enabled x86_64 && objformat="win64" || objformat="win32"
377 kx ranlib=:
377 kx enable dos_paths
377 kx ;;
377 kx cygwin*)
377 kx target_os=cygwin
377 kx shlibdir_default="$bindir_default"
377 kx SLIBPREF="cyg"
377 kx SLIBSUF=".dll"
377 kx SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
377 kx SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
377 kx SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
377 kx SLIB_INSTALL_LINKS=
377 kx SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
377 kx SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
377 kx enabled x86_64 && objformat="win64" || objformat="win32"
377 kx enable dos_paths
377 kx enabled shared && ! enabled small && test_cmd $windres --version && enable gnu_windres
377 kx add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
377 kx ;;
377 kx *-dos|freedos|opendos)
377 kx network_extralibs="-lsocket"
377 kx objformat="coff"
377 kx enable dos_paths
377 kx ;;
377 kx linux)
377 kx enable section_data_rel_ro
377 kx enabled_any arm aarch64 && enable_weak linux_perf
377 kx ;;
377 kx irix*)
377 kx target_os=irix
377 kx ranlib="echo ignoring ranlib"
377 kx ;;
377 kx os/2*)
377 kx strip="lxlite -CS"
377 kx striptype=""
377 kx objformat="aout"
377 kx add_cppflags -D_GNU_SOURCE
377 kx add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
377 kx SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
377 kx LIBSUF="_s.a"
377 kx SLIBPREF=""
377 kx SLIBSUF=".dll"
377 kx SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
377 kx SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
377 kx SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \
377 kx echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \
377 kx echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \
377 kx echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \
377 kx emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def'
377 kx SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \
377 kx emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;'
377 kx SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
377 kx SLIB_INSTALL_LINKS=
377 kx SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib'
377 kx enable dos_paths
377 kx enable_weak os2threads
377 kx ;;
377 kx gnu/kfreebsd)
377 kx add_cppflags -D_BSD_SOURCE
377 kx ;;
377 kx gnu)
377 kx ;;
377 kx qnx)
377 kx add_cppflags -D_QNX_SOURCE
377 kx network_extralibs="-lsocket"
377 kx ;;
377 kx symbian)
377 kx SLIBSUF=".dll"
377 kx enable dos_paths
377 kx add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
377 kx add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
377 kx add_ldflags -Wl,--target1-abs,--no-undefined \
377 kx -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
377 kx -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
377 kx add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
377 kx -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
377 kx -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
377 kx ;;
377 kx minix)
377 kx ;;
377 kx none)
377 kx ;;
377 kx *)
377 kx die "Unknown OS '$target_os'."
377 kx ;;
377 kx esac
377 kx
377 kx # test if creating links works
377 kx link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX)
377 kx link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX)
377 kx mkdir "$link_dest"
377 kx $ln_s "$link_dest" "$link_name"
377 kx touch "$link_dest/test_file"
377 kx if [ "$source_path" != "." ] && [ "$source_path" != "src" ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then
377 kx # create link to source path
377 kx [ -e src ] && rm src
377 kx $ln_s "$source_path" src
377 kx source_link=src
377 kx else
377 kx # creating directory links doesn't work
377 kx # fall back to using the full source path
377 kx source_link="$source_path"
377 kx fi
377 kx # cleanup
377 kx rm -r "$link_dest"
377 kx rm -r "$link_name"
377 kx
377 kx # determine libc flavour
377 kx
377 kx probe_libc(){
377 kx pfx=$1
377 kx pfx_no_=${pfx%_}
377 kx # uclibc defines __GLIBC__, so it needs to be checked before glibc.
377 kx if test_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
377 kx eval ${pfx}libc_type=uclibc
377 kx add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
377 kx elif test_${pfx}cpp_condition features.h "defined __GLIBC__"; then
377 kx eval ${pfx}libc_type=glibc
377 kx add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
377 kx # MinGW headers can be installed on Cygwin, so check for newlib first.
377 kx elif test_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
377 kx eval ${pfx}libc_type=newlib
377 kx add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
377 kx # MinGW64 is backwards compatible with MinGW32, so check for it first.
377 kx elif test_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
377 kx eval ${pfx}libc_type=mingw64
377 kx if test_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
377 kx add_compat msvcrt/snprintf.o
377 kx add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
377 kx fi
377 kx add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
377 kx eval test \$${pfx_no_}cc_type = "gcc" &&
377 kx add_${pfx}cppflags -D__printf__=__gnu_printf__
377 kx test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
377 kx add_${pfx}cppflags -D_WIN32_WINNT=0x0600
377 kx add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
377 kx elif test_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
377 kx test_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
377 kx eval ${pfx}libc_type=mingw32
377 kx test_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
377 kx (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
377 kx die "ERROR: MinGW32 runtime version must be >= 3.15."
377 kx add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
377 kx test_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
377 kx add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
377 kx test_${pfx}cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" &&
377 kx add_${pfx}cppflags -D_WIN32_WINNT=0x0600
377 kx eval test \$${pfx_no_}cc_type = "gcc" &&
377 kx add_${pfx}cppflags -D__printf__=__gnu_printf__
377 kx add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
377 kx elif test_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
377 kx eval ${pfx}libc_type=msvcrt
377 kx if test_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
377 kx if [ "$pfx" = host_ ]; then
377 kx add_host_cppflags -Dsnprintf=_snprintf
377 kx else
377 kx add_compat strtod.o strtod=avpriv_strtod
377 kx add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
377 kx _snprintf=avpriv_snprintf \
377 kx vsnprintf=avpriv_vsnprintf
377 kx fi
377 kx fi
377 kx add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
377 kx # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
377 kx # 0x601 by default unless something else is set by the user.
377 kx # This can easily lead to us detecting functions only present
377 kx # in such new versions and producing binaries requiring windows 7.0.
377 kx # Therefore explicitly set the default to Vista unless the user has
377 kx # set something else on the command line.
377 kx # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
377 kx # family. For these cases, configure is free to use any functions
377 kx # found in the SDK headers by default. (Alternatively, we could force
377 kx # _WIN32_WINNT to 0x0602 in that case.)
377 kx test_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
377 kx { test_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0600; }
377 kx #ifdef WINAPI_FAMILY
377 kx #include <winapifamily.h>
377 kx #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
377 kx #error not desktop
377 kx #endif
377 kx #endif
377 kx EOF
377 kx if [ "$pfx" = "" ]; then
377 kx check_func strtoll || add_cflags -Dstrtoll=_strtoi64
377 kx check_func strtoull || add_cflags -Dstrtoull=_strtoui64
377 kx fi
377 kx elif test_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
377 kx eval ${pfx}libc_type=klibc
377 kx elif test_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
377 kx eval ${pfx}libc_type=bionic
377 kx elif test_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
377 kx eval ${pfx}libc_type=solaris
377 kx add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
377 kx elif test_${pfx}cpp_condition sys/version.h "defined __DJGPP__"; then
377 kx eval ${pfx}libc_type=djgpp
377 kx add_cppflags -U__STRICT_ANSI__
377 kx add_cflags "-include $source_path/compat/djgpp/math.h"
377 kx add_compat djgpp/math.o
377 kx fi
377 kx test_${pfx}cc <<EOF
377 kx #include <time.h>
377 kx void *v = localtime_r;
377 kx EOF
377 kx test "$?" != 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
377 kx #include <time.h>
377 kx void *v = localtime_r;
377 kx EOF
377 kx
377 kx eval test -n "\${${pfx}libc_type}" && enable ${pfx}libc_${libc_type}
377 kx }
377 kx
377 kx probe_libc
377 kx probe_libc host_
377 kx
377 kx # hacks for compiler/libc/os combinations
377 kx
377 kx case $libc_type in
377 kx bionic)
377 kx add_compat strtod.o strtod=avpriv_strtod
377 kx ;;
377 kx esac
377 kx
377 kx check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
377 kx add_cppflags '-I\$(SRC_PATH)/compat/float'
377 kx
377 kx test_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
377 kx
377 kx set_default libdir
377 kx : ${shlibdir_default:="$libdir"}
377 kx : ${pkgconfigdir_default:="$libdir/pkgconfig"}
377 kx
377 kx set_default $PATHS_LIST
377 kx set_default nm
377 kx
377 kx disabled optimizations || enabled ossfuzz || check_cflags -fomit-frame-pointer
377 kx
377 kx enable_weak_pic() {
377 kx disabled pic && return
377 kx enable pic
377 kx add_cppflags -DPIC
377 kx case "$target_os" in
377 kx mingw*|cygwin*|win*)
377 kx ;;
377 kx *)
377 kx add_cflags -fPIC
377 kx add_asflags -fPIC
377 kx ;;
377 kx esac
377 kx }
377 kx
377 kx enabled pic && enable_weak_pic
377 kx
377 kx test_cc <<EOF || die "Symbol mangling check failed."
377 kx int ff_extern;
377 kx EOF
377 kx sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
377 kx extern_prefix=${sym%%ff_extern*}
377 kx
377 kx ! disabled inline_asm && check_inline_asm inline_asm '"" ::'
377 kx
377 kx for restrict_keyword in restrict __restrict__ __restrict ""; do
377 kx test_code cc "" "char * $restrict_keyword p" && break
377 kx done
377 kx
377 kx check_cc pragma_deprecated "" '_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")'
377 kx
377 kx # The global variable ensures the bits appear unchanged in the object file.
377 kx test_cc <<EOF || die "endian test failed"
377 kx unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
377 kx EOF
377 kx od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
377 kx
377 kx check_cc const_nan math.h "struct { double d; } static const bar[] = { { NAN } }"
377 kx
377 kx if ! enabled ppc64 || enabled bigendian; then
377 kx disable vsx
377 kx fi
377 kx
377 kx check_gas() {
377 kx log "check_gas using '$as' as AS"
377 kx # :vararg is used on aarch64, arm and ppc altivec
377 kx check_as vararg "
377 kx .macro m n, y:vararg=0
377 kx \n: .int \y
377 kx .endm
377 kx m x" || return 1
377 kx # .altmacro is only used in arm asm
377 kx ! enabled arm || check_as gnu_as ".altmacro"
377 kx }
377 kx
377 kx if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
377 kx nogas=:
377 kx enabled_any arm aarch64 && nogas=die
377 kx enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
377 kx as_noop=-v
377 kx
377 kx case $as_type in
377 kx arm*) gaspp_as_type=armasm; as_noop=-h ;;
377 kx gcc) gaspp_as_type=gas ;;
377 kx *) gaspp_as_type=$as_type ;;
377 kx esac
377 kx
377 kx [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
377 kx
377 kx test "${as#*gas-preprocessor.pl}" != "$as" ||
377 kx test_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
377 kx gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
377 kx
377 kx if ! check_gas ; then
377 kx as=${gas:=$as}
377 kx check_gas || \
377 kx $nogas "GNU assembler not found, install/update gas-preprocessor"
377 kx fi
377 kx
377 kx check_as as_func ".func test
377 kx .endfunc"
377 kx fi
377 kx
377 kx check_inline_asm inline_asm_labels '"1:\n"'
377 kx
377 kx check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
377 kx
377 kx if enabled aarch64; then
377 kx enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
377 kx # internal assembler in clang 3.3 does not support this instruction
377 kx enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
377 kx enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
377 kx
377 kx map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
377 kx
377 kx elif enabled alpha; then
377 kx
377 kx check_cflags -mieee
377 kx
377 kx elif enabled arm; then
377 kx
377 kx enabled msvc && check_cpp_condition thumb stddef.h "defined _M_ARMT"
377 kx test_cpp_condition stddef.h "defined __thumb__" && test_cc <<EOF && enable_weak thumb
377 kx float func(float a, float b){ return a+b; }
377 kx EOF
377 kx enabled thumb && check_cflags -mthumb || check_cflags -marm
377 kx
377 kx if check_cpp_condition vfp_args stddef.h "defined __ARM_PCS_VFP"; then
377 kx :
377 kx elif check_cpp_condition vfp_args stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
377 kx :
377 kx elif ! test_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
377 kx case "${cross_prefix:-$cc}" in
377 kx *hardfloat*) enable vfp_args; fpabi=vfp ;;
377 kx *) check_ld "cc" vfp_args <<EOF && fpabi=vfp || fpabi=soft ;;
377 kx __asm__ (".eabi_attribute 28, 1");
377 kx int main(void) { return 0; }
377 kx EOF
377 kx esac
377 kx warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
377 kx fi
377 kx
377 kx enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
377 kx enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
377 kx enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
377 kx enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
377 kx enabled vfp && check_insn vfp 'fadds s0, s0, s0'
377 kx enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
377 kx enabled setend && check_insn setend 'setend be'
377 kx
377 kx [ $target_os = linux ] || [ $target_os = android ] ||
377 kx map 'enabled_any ${v}_external ${v}_inline || disable $v' \
377 kx $ARCH_EXT_LIST_ARM
377 kx
377 kx check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
377 kx
377 kx check_as as_arch_directive ".arch armv7-a"
377 kx check_as as_dn_directive "ra .dn d0.i16"
377 kx check_as as_fpu_directive ".fpu neon"
377 kx
377 kx # llvm's integrated assembler supports .object_arch from llvm 3.5
377 kx [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] &&
377 kx check_as as_object_arch ".object_arch armv4"
377 kx
377 kx # MS armasm fails to assemble our PIC constructs
377 kx [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
377 kx
377 kx elif enabled mips; then
377 kx
377 kx # Check toolchain ISA level
377 kx if enabled mips64; then
377 kx enabled mips64r6 && check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' &&
377 kx disable mips64r2
377 kx
377 kx enabled mips64r2 && check_inline_asm mips64r2 '"dext $0, $0, 0, 1"'
377 kx
377 kx disable mips32r6 && disable mips32r5 && disable mips32r2
377 kx else
377 kx enabled mips32r6 && check_inline_asm mips32r6 '"aui $0, $0, 0"' &&
377 kx disable mips32r5 && disable mips32r2
377 kx
377 kx enabled mips32r5 && check_inline_asm mips32r5 '"eretnc"'
377 kx enabled mips32r2 && check_inline_asm mips32r2 '"ext $0, $0, 0, 1"'
377 kx
377 kx disable mips64r6 && disable mips64r5 && disable mips64r2
377 kx fi
377 kx
377 kx enabled mipsfpu && check_inline_asm mipsfpu '"cvt.d.l $f0, $f2"'
377 kx enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
377 kx
377 kx enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
377 kx enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
377 kx
377 kx # MSA and MSA2 can be detected at runtime so we supply extra flags here
377 kx enabled mipsfpu && enabled msa && check_inline_asm msa '"addvi.b $w0, $w1, 1"' '-mmsa' && append MSAFLAGS '-mmsa'
377 kx enabled msa && enabled msa2 && check_inline_asm msa2 '"nxbits.any.b $w0, $w0"' '-mmsa2' && append MSAFLAGS '-mmsa2'
377 kx
377 kx # loongson2 have no switch cflag so we can only probe toolchain ability
377 kx enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' && disable loongson3
377 kx
377 kx # loongson3 is paired with MMI
377 kx enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"' '-mloongson-ext' && append MMIFLAGS '-mloongson-ext'
377 kx
377 kx # MMI can be detected at runtime too
377 kx enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"' '-mloongson-mmi' && append MMIFLAGS '-mloongson-mmi'
377 kx
377 kx if enabled bigendian && enabled msa; then
377 kx disable msa
377 kx fi
377 kx
377 kx elif enabled parisc; then
377 kx
377 kx if enabled gcc; then
377 kx case $($cc -dumpversion) in
377 kx 4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
377 kx esac
377 kx fi
377 kx
377 kx elif enabled ppc; then
377 kx
377 kx enable local_aligned
377 kx
377 kx check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
377 kx check_inline_asm ibm_asm '"add 0, 0, 0"'
377 kx check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
377 kx check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
377 kx
377 kx if enabled altivec; then
377 kx check_cflags -maltivec -mabi=altivec
377 kx
377 kx # check if our compiler supports Motorola AltiVec C API
377 kx check_cc altivec altivec.h "vector signed int v1 = (vector signed int) { 0 };
377 kx vector signed int v2 = (vector signed int) { 1 };
377 kx v1 = vec_add(v1, v2);"
377 kx
377 kx enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
377 kx fi
377 kx
377 kx if enabled vsx; then
377 kx check_cflags -mvsx &&
377 kx check_cc vsx altivec.h "int v[4] = { 0 };
377 kx vector signed int v1 = vec_vsx_ld(0, v);"
377 kx fi
377 kx
377 kx if enabled power8; then
377 kx check_cpp_condition power8 "altivec.h" "defined(_ARCH_PWR8)"
377 kx fi
377 kx
377 kx elif enabled x86; then
377 kx
377 kx check_builtin rdtsc intrin.h "__rdtsc()"
377 kx check_builtin mm_empty mmintrin.h "_mm_empty()"
377 kx
377 kx enable local_aligned
377 kx
377 kx # check whether EBP is available on x86
377 kx # As 'i' is stored on the stack, this program will crash
377 kx # if the base pointer is used to access it because the
377 kx # base pointer is cleared in the inline assembly code.
377 kx check_exec_crash <<EOF && enable ebp_available
377 kx volatile int i=0;
377 kx __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
377 kx return i;
377 kx EOF
377 kx
377 kx # check whether EBX is available on x86
377 kx check_inline_asm ebx_available '""::"b"(0)' &&
377 kx check_inline_asm ebx_available '"":::"%ebx"'
377 kx
377 kx # check whether xmm clobbers are supported
377 kx check_inline_asm xmm_clobbers '"":::"%xmm0"'
377 kx
377 kx check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
377 kx check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
377 kx
377 kx # check whether binutils is new enough to compile SSSE3/MMXEXT
377 kx enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
377 kx enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
377 kx
377 kx probe_x86asm(){
377 kx x86asmexe_probe=$1
377 kx if test_cmd $x86asmexe_probe -v; then
377 kx x86asmexe=$x86asmexe_probe
377 kx x86asm_type=nasm
377 kx x86asm_debug="-g -F dwarf"
377 kx X86ASMDEP=
377 kx X86ASM_DEPFLAGS='-MD $(@:.o=.d)'
377 kx elif test_cmd $x86asmexe_probe --version; then
377 kx x86asmexe=$x86asmexe_probe
377 kx x86asm_type=yasm
377 kx x86asm_debug="-g dwarf2"
377 kx X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)'
377 kx X86ASM_DEPFLAGS=
377 kx fi
377 kx check_x86asm x86asm "movbe ecx, [5]"
377 kx }
377 kx
377 kx if ! disabled_any asm mmx x86asm; then
377 kx disable x86asm
377 kx for program in $x86asmexe nasm yasm; do
377 kx probe_x86asm $program && break
377 kx done
377 kx disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build."
377 kx X86ASMFLAGS="-f $objformat"
377 kx enabled pic && append X86ASMFLAGS "-DPIC"
377 kx test -n "$extern_prefix" && append X86ASMFLAGS "-DPREFIX"
377 kx case "$objformat" in
377 kx elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
377 kx esac
377 kx
377 kx enabled avx512 && check_x86asm avx512_external "vmovdqa32 [eax]{k1}{z}, zmm0"
377 kx enabled avx2 && check_x86asm avx2_external "vextracti128 xmm0, ymm0, 0"
377 kx enabled xop && check_x86asm xop_external "vpmacsdd xmm0, xmm1, xmm2, xmm3"
377 kx enabled fma4 && check_x86asm fma4_external "vfmaddps ymm0, ymm1, ymm2, ymm3"
377 kx check_x86asm cpunop "CPU amdnop"
377 kx fi
377 kx
377 kx case "$cpu" in
377 kx athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
377 kx disable fast_clz
377 kx ;;
377 kx esac
377 kx
377 kx fi
377 kx
377 kx check_cc intrinsics_neon arm_neon.h "int16x8_t test = vdupq_n_s16(0)"
377 kx
377 kx check_ldflags -Wl,--as-needed
377 kx check_ldflags -Wl,-z,noexecstack
377 kx
377 kx if ! disabled network; then
377 kx check_func getaddrinfo $network_extralibs
377 kx check_func inet_aton $network_extralibs
377 kx
377 kx check_type netdb.h "struct addrinfo"
377 kx check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
377 kx check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
377 kx check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
377 kx check_type poll.h "struct pollfd"
377 kx check_type netinet/sctp.h "struct sctp_event_subscribe"
377 kx check_struct "sys/socket.h" "struct msghdr" msg_flags
377 kx check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
377 kx check_type netinet/in.h "struct sockaddr_in6"
377 kx check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
377 kx check_type "sys/types.h sys/socket.h" socklen_t
377 kx
377 kx # Prefer arpa/inet.h over winsock2
377 kx if check_headers arpa/inet.h ; then
377 kx check_func closesocket
377 kx elif check_headers winsock2.h ; then
377 kx check_func_headers winsock2.h closesocket -lws2 &&
377 kx network_extralibs="-lws2" ||
377 kx { check_func_headers winsock2.h closesocket -lws2_32 &&
377 kx network_extralibs="-lws2_32"; } || disable winsock2_h network
377 kx check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
377 kx
377 kx check_type ws2tcpip.h socklen_t
377 kx check_type ws2tcpip.h "struct addrinfo"
377 kx check_type ws2tcpip.h "struct group_source_req"
377 kx check_type ws2tcpip.h "struct ip_mreq_source"
377 kx check_type ws2tcpip.h "struct ipv6_mreq"
377 kx check_type winsock2.h "struct pollfd"
377 kx check_struct winsock2.h "struct sockaddr" sa_len
377 kx check_type ws2tcpip.h "struct sockaddr_in6"
377 kx check_type ws2tcpip.h "struct sockaddr_storage"
377 kx else
377 kx disable network
377 kx fi
377 kx fi
377 kx
377 kx check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
377 kx check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
377 kx check_builtin MemoryBarrier windows.h "MemoryBarrier()"
377 kx check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
377 kx check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
377 kx check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
377 kx check_builtin x264_csp_bgr "stdint.h x264.h" "X264_CSP_BGR"
377 kx
377 kx case "$custom_allocator" in
377 kx jemalloc)
377 kx # jemalloc by default does not use a prefix
377 kx require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
377 kx ;;
377 kx tcmalloc)
377 kx require_pkg_config libtcmalloc libtcmalloc gperftools/tcmalloc.h tc_malloc
377 kx malloc_prefix=tc_
377 kx ;;
377 kx esac
377 kx
377 kx check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
377 kx check_func ${malloc_prefix}memalign && enable memalign
377 kx check_func ${malloc_prefix}posix_memalign && enable posix_memalign
377 kx
377 kx check_func access
377 kx check_func_headers stdlib.h arc4random
377 kx check_lib clock_gettime time.h clock_gettime || check_lib clock_gettime time.h clock_gettime -lrt
377 kx check_func fcntl
377 kx check_func fork
377 kx check_func gethrtime
377 kx check_func getopt
377 kx check_func getrusage
377 kx check_func gettimeofday
377 kx check_func isatty
377 kx check_func mkstemp
377 kx check_func mmap
377 kx check_func mprotect
377 kx # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
377 kx check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt
377 kx check_func sched_getaffinity
377 kx check_func setrlimit
377 kx check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
377 kx check_func strerror_r
377 kx check_func sysconf
377 kx check_func sysctl
377 kx check_func usleep
377 kx
377 kx check_func_headers conio.h kbhit
377 kx check_func_headers io.h setmode
377 kx check_func_headers lzo/lzo1x.h lzo1x_999_compress
377 kx check_func_headers mach/mach_time.h mach_absolute_time
377 kx check_func_headers stdlib.h getenv
377 kx check_func_headers sys/stat.h lstat
377 kx
377 kx check_func_headers windows.h GetModuleHandle
377 kx check_func_headers windows.h GetProcessAffinityMask
377 kx check_func_headers windows.h GetProcessTimes
377 kx check_func_headers windows.h GetStdHandle
377 kx check_func_headers windows.h GetSystemTimeAsFileTime
377 kx check_func_headers windows.h LoadLibrary
377 kx check_func_headers windows.h MapViewOfFile
377 kx check_func_headers windows.h PeekNamedPipe
377 kx check_func_headers windows.h SetConsoleTextAttribute
377 kx check_func_headers windows.h SetConsoleCtrlHandler
377 kx check_func_headers windows.h SetDllDirectory
377 kx check_func_headers windows.h Sleep
377 kx check_func_headers windows.h VirtualAlloc
377 kx check_func_headers glob.h glob
377 kx enabled xlib &&
377 kx check_lib xlib "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
377 kx
377 kx check_headers direct.h
377 kx check_headers dirent.h
377 kx check_headers dxgidebug.h
377 kx check_headers dxva.h
377 kx check_headers dxva2api.h -D_WIN32_WINNT=0x0600
377 kx check_headers io.h
377 kx enabled libdrm &&
377 kx check_headers linux/dma-buf.h
377 kx
377 kx check_headers linux/perf_event.h
377 kx check_headers libcrystalhd/libcrystalhd_if.h
377 kx check_headers malloc.h
377 kx check_headers mftransform.h
377 kx check_headers net/udplite.h
377 kx check_headers poll.h
377 kx check_headers sys/param.h
377 kx check_headers sys/resource.h
377 kx check_headers sys/select.h
377 kx check_headers sys/time.h
377 kx check_headers sys/un.h
377 kx check_headers termios.h
377 kx check_headers unistd.h
377 kx check_headers valgrind/valgrind.h
377 kx check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
377 kx check_headers windows.h
377 kx check_headers X11/extensions/XvMClib.h
377 kx check_headers asm/types.h
377 kx
377 kx # it seems there are versions of clang in some distros that try to use the
377 kx # gcc headers, which explodes for stdatomic
377 kx # so we also check that atomics actually work here
377 kx #
377 kx # some configurations also require linking to libatomic, so try
377 kx # both with -latomic and without
377 kx for LATOMIC in "-latomic" ""; do
377 kx check_builtin stdatomic stdatomic.h \
377 kx "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0); foo += bar" \
377 kx $LATOMIC && eval stdatomic_extralibs="\$LATOMIC" && break
377 kx done
377 kx
377 kx check_lib advapi32 "windows.h" RegCloseKey -ladvapi32
377 kx check_lib bcrypt "windows.h bcrypt.h" BCryptGenRandom -lbcrypt &&
377 kx check_cpp_condition bcrypt bcrypt.h "defined BCRYPT_RNG_ALGORITHM"
377 kx check_lib ole32 "windows.h" CoTaskMemFree -lole32
377 kx check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32
377 kx check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
377 kx
377 kx check_lib android android/native_window.h ANativeWindow_acquire -landroid
377 kx check_lib mediandk "stdint.h media/NdkImage.h" AImage_delete -lmediandk
377 kx check_lib camera2ndk "stdbool.h stdint.h camera/NdkCameraManager.h" ACameraManager_create -lcamera2ndk
377 kx
377 kx enabled appkit && check_apple_framework AppKit
377 kx enabled audiotoolbox && check_apple_framework AudioToolbox
377 kx enabled avfoundation && check_apple_framework AVFoundation
377 kx enabled coreimage && check_apple_framework CoreImage
377 kx enabled videotoolbox && check_apple_framework VideoToolbox
377 kx
377 kx check_apple_framework CoreFoundation
377 kx check_apple_framework CoreMedia
377 kx check_apple_framework CoreVideo
377 kx check_apple_framework CoreAudio
377 kx
377 kx enabled avfoundation && {
377 kx disable coregraphics applicationservices
377 kx check_lib coregraphics CoreGraphics/CoreGraphics.h CGGetActiveDisplayList "-framework CoreGraphics" ||
377 kx check_lib applicationservices ApplicationServices/ApplicationServices.h CGGetActiveDisplayList "-framework ApplicationServices"; }
377 kx
377 kx enabled videotoolbox && {
377 kx check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices"
377 kx check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia"
377 kx check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVCWithAlpha "-framework CoreMedia"
377 kx check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
377 kx check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework CoreVideo"
377 kx check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework CoreVideo"
377 kx check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_Linear "-framework CoreVideo"
377 kx }
377 kx
377 kx check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
377 kx
377 kx check_type "windows.h dxva.h" "DXVA_PicParams_AV1" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
377 kx check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
377 kx check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
377 kx check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
377 kx check_type "windows.h d3d11.h" "ID3D11VideoContext"
377 kx check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
377 kx check_func_headers mfapi.h MFCreateAlignedMemoryBuffer -lmfplat
377 kx
377 kx check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
377 kx check_type "vdpau/vdpau.h" "VdpPictureInfoVP9"
377 kx
377 kx if [ -z "$nvccflags" ]; then
377 kx nvccflags=$nvccflags_default
377 kx fi
377 kx
377 kx if enabled x86_64 || enabled ppc64 || enabled aarch64; then
377 kx nvccflags="$nvccflags -m64"
377 kx else
377 kx nvccflags="$nvccflags -m32"
377 kx fi
377 kx
377 kx if enabled cuda_nvcc; then
377 kx nvccflags="$nvccflags -ptx"
377 kx else
377 kx nvccflags="$nvccflags -S -nocudalib -nocudainc --cuda-device-only -Wno-c++11-narrowing -include ${source_link}/compat/cuda/cuda_runtime.h"
377 kx check_nvcc cuda_llvm
377 kx fi
377 kx
377 kx if ! disabled ffnvcodec; then
377 kx ffnv_hdr_list="ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h"
377 kx check_pkg_config ffnvcodec "ffnvcodec >= 9.1.23.1" "$ffnv_hdr_list" "" || \
377 kx check_pkg_config ffnvcodec "ffnvcodec >= 9.0.18.3 ffnvcodec < 9.1" "$ffnv_hdr_list" "" || \
377 kx check_pkg_config ffnvcodec "ffnvcodec >= 8.2.15.10 ffnvcodec < 8.3" "$ffnv_hdr_list" "" || \
377 kx check_pkg_config ffnvcodec "ffnvcodec >= 8.1.24.11 ffnvcodec < 8.2" "$ffnv_hdr_list" ""
377 kx fi
377 kx
377 kx check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"
377 kx
377 kx if ! disabled w32threads && ! enabled pthreads; then
377 kx check_func_headers "windows.h process.h" _beginthreadex &&
377 kx check_type "windows.h" CONDITION_VARIABLE &&
377 kx check_type "windows.h" INIT_ONCE &&
377 kx enable w32threads || disable w32threads
377 kx if ! enabled w32threads && enabled winrt; then
377 kx check_func_headers "windows.h" CreateThread &&
377 kx enable w32threads || disable w32threads
377 kx fi
377 kx fi
377 kx
377 kx # check for some common methods of building with pthread support
377 kx # do this before the optional library checks as some of them require pthreads
377 kx if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
377 kx if check_lib pthreads pthread.h pthread_join -pthread &&
377 kx check_lib pthreads pthread.h pthread_create -pthread; then
377 kx add_cflags -pthread
377 kx elif check_lib pthreads pthread.h pthread_join -pthreads &&
377 kx check_lib pthreads pthread.h pthread_create -pthreads; then
377 kx add_cflags -pthreads
377 kx elif check_lib pthreads pthread.h pthread_join -ldl -pthread &&
377 kx check_lib pthreads pthread.h pthread_create -ldl -pthread; then
377 kx add_cflags -ldl -pthread
377 kx elif check_lib pthreads pthread.h pthread_join -lpthreadGC2 &&
377 kx check_lib pthreads pthread.h pthread_create -lpthreadGC2; then
377 kx :
377 kx elif check_lib pthreads pthread.h pthread_join -lpthread &&
377 kx check_lib pthreads pthread.h pthread_create -lpthread; then
377 kx :
377 kx elif check_func pthread_join && check_func pthread_create; then
377 kx enable pthreads
377 kx fi
377 kx check_cc pthreads "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER"
377 kx
377 kx if enabled pthreads; then
377 kx check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" $pthreads_extralibs
377 kx check_func pthread_cancel $pthreads_extralibs
377 kx fi
377 kx fi
377 kx
377 kx enabled zlib && { check_pkg_config zlib zlib "zlib.h" zlibVersion ||
377 kx check_lib zlib zlib.h zlibVersion -lz; }
377 kx enabled bzlib && check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
377 kx enabled lzma && check_lib lzma lzma.h lzma_version_number -llzma
377 kx
377 kx # On some systems dynamic loading requires no extra linker flags
377 kx check_lib libdl dlfcn.h "dlopen dlsym" || check_lib libdl dlfcn.h "dlopen dlsym" -ldl
377 kx
377 kx check_lib libm math.h sin -lm
377 kx
377 kx atan2f_args=2
377 kx copysign_args=2
377 kx hypot_args=2
377 kx ldexpf_args=2
377 kx powf_args=2
377 kx
377 kx for func in $MATH_FUNCS; do
377 kx eval check_mathfunc $func \${${func}_args:-1} $libm_extralibs
377 kx done
377 kx
377 kx for func in $COMPLEX_FUNCS; do
377 kx eval check_complexfunc $func \${${func}_args:-1}
377 kx done
377 kx
377 kx # these are off by default, so fail if requested and not available
377 kx enabled avisynth && require_headers "avisynth/avisynth_c.h"
377 kx enabled cuda_nvcc && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc."; }
377 kx enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
377 kx enabled decklink && { require_headers DeckLinkAPI.h &&
377 kx { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a0a0000" || die "ERROR: Decklink API version must be >= 10.10"; } }
377 kx enabled frei0r && require_headers "frei0r.h dlfcn.h"
377 kx enabled gmp && require gmp gmp.h mpz_export -lgmp
377 kx enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
377 kx enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
377 kx enabled ladspa && require_headers "ladspa.h dlfcn.h"
377 kx enabled libaom && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version
377 kx enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new ||
377 kx { enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } ||
377 kx die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; }
377 kx enabled lv2 && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
377 kx enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
377 kx enabled libass && require_pkg_config libass libass ass/ass.h ass_library_init
377 kx enabled libbluray && require_pkg_config libbluray libbluray libbluray/bluray.h bd_open
377 kx enabled libbs2b && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open
377 kx enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
377 kx { check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 ||
377 kx die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
377 kx enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas
377 kx enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2
377 kx enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.5.0" "dav1d/dav1d.h" dav1d_version
377 kx enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open
377 kx enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
377 kx enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion
377 kx enabled libfdk_aac && { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
377 kx { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
377 kx warn "using libfdk without pkg-config"; } }
377 kx flite_extralibs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
377 kx enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs
377 kx enabled fontconfig && enable libfontconfig
377 kx enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
377 kx enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
377 kx enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info
377 kx enabled libglslang && require_cpp libglslang glslang/SPIRV/GlslangToSpv.h "glslang::TIntermediate*" -lglslang -lMachineIndependent -lOSDependent -lHLSL -lOGLCompiler -lGenericCodeGen -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++
377 kx enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu ||
377 kx require libgme gme/gme.h gme_new_emu -lgme -lstdc++; }
377 kx enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
377 kx check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break;
377 kx done || die "ERROR: libgsm not found"; }
377 kx enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc $pthreads_extralibs
377 kx enabled libklvanc && require libklvanc libklvanc/vanc.h klvanc_context_create -lklvanc
377 kx enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
377 kx enabled liblensfun && require_pkg_config liblensfun lensfun lensfun.h lf_db_new
377 kx # While it may appear that require is being used as a pkg-config
377 kx # fallback for libmfx, it is actually being used to detect a different
377 kx # installation route altogether. If libmfx is installed via the Intel
377 kx # Media SDK or Intel Media Server Studio, these don't come with
377 kx # pkg-config support. Instead, users should make sure that the build
377 kx # can find the libraries and headers through other means.
377 kx enabled libmfx && { check_pkg_config libmfx libmfx "mfx/mfxvideo.h" MFXInit ||
377 kx { require libmfx "mfx/mfxvideo.h" MFXInit "-llibmfx $advapi32_extralibs" && warn "using libmfx without pkg-config"; } }
377 kx if enabled libmfx; then
377 kx check_cc MFX_CODEC_VP9 "mfx/mfxvp9.h mfx/mfxstructures.h" "MFX_CODEC_VP9"
377 kx fi
377 kx
377 kx enabled libmodplug && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load
377 kx enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs
377 kx enabled libmysofa && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine ||
377 kx require libmysofa mysofa.h mysofa_neighborhood_init_withstepdefine -lmysofa $zlib_extralibs; }
377 kx enabled libnpp && { check_lib libnpp npp.h nppGetLibVersion -lnppig -lnppicc -lnppc -lnppidei ||
377 kx check_lib libnpp npp.h nppGetLibVersion -lnppi -lnppc -lnppidei ||
377 kx die "ERROR: libnpp not found"; }
377 kx enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
377 kx enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
377 kx enabled libopencv && { check_headers opencv2/core/core_c.h &&
377 kx { check_pkg_config libopencv opencv opencv2/core/core_c.h cvCreateImageHeader ||
377 kx require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
377 kx require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
377 kx enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
377 kx enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
377 kx { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
377 kx enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
377 kx enabled libopenvino && require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api
377 kx enabled libopus && {
377 kx enabled libopus_decoder && {
377 kx require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
377 kx }
377 kx enabled libopus_encoder && {
377 kx require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create
377 kx }
377 kx }
377 kx enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new
377 kx enabled librabbitmq && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection
377 kx enabled librav1e && require_pkg_config librav1e "rav1e >= 0.4.0" rav1e.h rav1e_context_new
377 kx enabled librist && require_pkg_config librist "librist >= 0.2" librist/librist.h rist_receiver_create
377 kx enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo
377 kx enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
377 kx enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++"
377 kx enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer
377 kx enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init ||
377 kx require libsmbclient libsmbclient.h smbc_init -lsmbclient; }
377 kx enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy -lstdc++
377 kx enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
377 kx enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init
377 kx enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
377 kx enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket
377 kx enabled libsvtav1 && require_pkg_config libsvtav1 "SvtAv1Enc >= 0.8.4" EbSvtAv1Enc.h svt_av1_enc_init_handle
377 kx enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow
377 kx enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate
377 kx enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
377 kx enabled libtls && require_pkg_config libtls libtls tls.h tls_configure
377 kx enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
377 kx { check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
377 kx die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
377 kx enabled libuavs3d && require_pkg_config libuavs3d "uavs3d >= 1.1.41" uavs3d.h uavs3d_decode
377 kx enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
377 kx enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
377 kx enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.5.2" libvmaf.h compute_vmaf
377 kx enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
377 kx enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init &&
377 kx require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init
377 kx
377 kx enabled libvpx && {
377 kx enabled libvpx_vp8_decoder && {
377 kx check_pkg_config libvpx_vp8_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
377 kx 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"
377 kx }
377 kx enabled libvpx_vp8_encoder && {
377 kx check_pkg_config libvpx_vp8_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
377 kx 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"
377 kx }
377 kx enabled libvpx_vp9_decoder && {
377 kx check_pkg_config libvpx_vp9_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
377 kx 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"
377 kx }
377 kx enabled libvpx_vp9_encoder && {
377 kx check_pkg_config libvpx_vp9_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
377 kx 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"
377 kx }
377 kx if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
377 kx die "libvpx enabled but no supported decoders found"
377 kx fi
377 kx }
377 kx
377 kx enabled libwebp && {
377 kx enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
377 kx enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
377 kx enabled libx264 && { check_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode ||
377 kx { require libx264 "stdint.h x264.h" x264_encoder_encode "-lx264 $pthreads_extralibs $libm_extralibs" &&
377 kx warn "using libx264 without pkg-config"; } } &&
377 kx require_cpp_condition libx264 x264.h "X264_BUILD >= 118" &&
377 kx check_cpp_condition libx262 x264.h "X264_MPEG2"
377 kx enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
377 kx require_cpp_condition libx265 x265.h "X265_BUILD >= 70"
377 kx enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs"
377 kx enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.3.0" "stdint.h xavs2.h" xavs2_api_get
377 kx enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
377 kx enabled libzimg && require_pkg_config libzimg "zimg >= 2.7.0" zimg.h zimg_get_api_version
377 kx enabled libzmq && require_pkg_config libzmq "libzmq >= 4.2.1" zmq.h zmq_ctx_new
377 kx enabled libzvbi && require_pkg_config libzvbi zvbi-0.2 libzvbi.h vbi_decoder_new &&
377 kx { test_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
377 kx enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
377 kx enabled libxml2 && require_pkg_config libxml2 libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion
377 kx enabled mbedtls && { check_pkg_config mbedtls mbedtls mbedtls/x509_crt.h mbedtls_x509_crt_init ||
377 kx check_pkg_config mbedtls mbedtls mbedtls/ssl.h mbedtls_ssl_init ||
377 kx check_lib mbedtls mbedtls/ssl.h mbedtls_ssl_init -lmbedtls -lmbedx509 -lmbedcrypto ||
377 kx die "ERROR: mbedTLS not found"; }
377 kx enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; }
377 kx enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
377 kx { ! enabled cross_compile &&
377 kx add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
377 kx add_ldflags -L/opt/vc/lib/ &&
377 kx check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
377 kx die "ERROR: mmal not found" &&
377 kx check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
377 kx enabled openal && { { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
377 kx check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } ||
377 kx die "ERROR: openal not found"; } &&
377 kx { test_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
377 kx die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
377 kx enabled opencl && { check_pkg_config opencl OpenCL CL/cl.h clEnqueueNDRangeKernel ||
377 kx check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
377 kx check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
377 kx die "ERROR: opencl not found"; } &&
377 kx { test_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
377 kx test_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
377 kx die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
377 kx enabled opengl && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" ||
377 kx check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
377 kx check_lib opengl OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
377 kx check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
377 kx die "ERROR: opengl not found."
377 kx }
377 kx enabled omx_rpi && { test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame ||
377 kx { ! enabled cross_compile &&
377 kx add_cflags -isystem/opt/vc/include/IL &&
377 kx test_code cc OMX_Core.h OMX_IndexConfigBrcmVideoRequestIFrame; } ||
377 kx die "ERROR: OpenMAX IL headers from raspberrypi/firmware not found"; } &&
377 kx enable omx
377 kx enabled omx_img && add_cppflags "-I$source_path/compat/OpenMAX/IL" &&
377 kx prepend avcodec_deps "swscale" &&
377 kx enable omx
377 kx enabled omx && require_headers OMX_Core.h
377 kx enabled openssl && { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
377 kx check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
377 kx check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
377 kx check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
377 kx check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
377 kx check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
377 kx die "ERROR: openssl not found"; }
377 kx enabled pocketsphinx && require_pkg_config pocketsphinx pocketsphinx pocketsphinx/pocketsphinx.h ps_init
377 kx enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/rk_mpi.h mpp_create &&
377 kx require_pkg_config rockchip_mpp "rockchip_mpp >= 1.3.7" rockchip/rk_mpi.h mpp_create &&
377 kx { enabled libdrm ||
377 kx die "ERROR: rkmpp requires --enable-libdrm"; }
377 kx }
377 kx enabled vapoursynth && require_pkg_config vapoursynth "vapoursynth-script >= 42" VSScript.h vsscript_init
377 kx
377 kx
377 kx if enabled gcrypt; then
377 kx GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
377 kx if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
377 kx gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
377 kx gcrypt_extralibs=$("${GCRYPT_CONFIG}" --libs)
377 kx check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs ||
377 kx die "ERROR: gcrypt not found"
377 kx add_cflags $gcrypt_cflags
377 kx else
377 kx require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
377 kx fi
377 kx fi
377 kx
377 kx if enabled sdl2; then
377 kx SDL2_CONFIG="${cross_prefix}sdl2-config"
377 kx test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 3.0.0" SDL_events.h SDL_PollEvent
377 kx if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
377 kx sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
377 kx sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
377 kx test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
377 kx test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
377 kx check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags &&
377 kx enable sdl2
377 kx fi
377 kx if test $target_os = "mingw32"; then
377 kx sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs)
377 kx fi
377 kx fi
377 kx
377 kx if enabled decklink; then
377 kx case $target_os in
377 kx mingw32*|mingw64*|win32|win64)
377 kx decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
377 kx decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
377 kx ;;
377 kx esac
377 kx fi
377 kx
377 kx enabled securetransport &&
377 kx check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
377 kx check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" ||
377 kx disable securetransport
377 kx
377 kx enabled securetransport &&
377 kx check_func SecItemImport "-Wl,-framework,CoreFoundation -Wl,-framework,Security"
377 kx
377 kx enabled schannel &&
377 kx check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
377 kx test_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" &&
377 kx schannel_extralibs="-lsecur32" ||
377 kx disable schannel
377 kx
377 kx makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
377 kx enabled makeinfo \
377 kx && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
377 kx && enable makeinfo_html || disable makeinfo_html
377 kx disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
377 kx perl -v > /dev/null 2>&1 && enable perl || disable perl
377 kx pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
377 kx rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
377 kx
377 kx # check V4L2 codecs available in the API
377 kx if enabled v4l2_m2m; then
377 kx check_headers linux/fb.h
377 kx check_headers linux/videodev2.h
377 kx test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
377 kx check_cc v4l2_m2m linux/videodev2.h "int i = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_VIDEO_M2M | V4L2_BUF_FLAG_LAST;"
377 kx check_cc vc1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VC1_ANNEX_G;"
377 kx check_cc mpeg1_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG1;"
377 kx check_cc mpeg2_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG2;"
377 kx check_cc mpeg4_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_MPEG4;"
377 kx check_cc hevc_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_HEVC;"
377 kx check_cc h263_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H263;"
377 kx check_cc h264_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_H264;"
377 kx check_cc vp8_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP8;"
377 kx check_cc vp9_v4l2_m2m linux/videodev2.h "int i = V4L2_PIX_FMT_VP9;"
377 kx fi
377 kx
377 kx check_headers sys/videoio.h
377 kx test_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
377 kx
377 kx check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
377 kx check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
377 kx # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
377 kx # w32api 3.12 had it defined wrong
377 kx check_cpp_condition vfwcap_defines vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER"
377 kx
377 kx check_type "dshow.h" IBaseFilter
377 kx
377 kx # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
377 kx check_headers "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h" ||
377 kx check_headers "machine/ioctl_meteor.h machine/ioctl_bt848.h" ||
377 kx check_headers "dev/video/meteor/ioctl_meteor.h dev/video/bktr/ioctl_bt848.h" ||
377 kx check_headers "dev/ic/bt8xx.h"
377 kx
377 kx if check_struct sys/soundcard.h audio_buf_info bytes; then
377 kx enable_sanitized sys/soundcard.h
377 kx else
377 kx test_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_sanitized sys/soundcard.h
377 kx #include <sys/soundcard.h>
377 kx audio_buf_info abc;
377 kx EOF
377 kx fi
377 kx
377 kx enabled alsa && { check_pkg_config alsa alsa "alsa/asoundlib.h" snd_pcm_htimestamp ||
377 kx check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound; }
377 kx
377 kx enabled libjack &&
377 kx require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range
377 kx
377 kx enabled sndio && check_lib sndio sndio.h sio_open -lsndio
377 kx
377 kx if enabled libcdio; then
377 kx check_pkg_config libcdio libcdio_paranoia "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open ||
377 kx check_pkg_config libcdio libcdio_paranoia "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open ||
377 kx check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
377 kx check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
377 kx die "ERROR: No usable libcdio/cdparanoia found"
377 kx fi
377 kx
377 kx enabled libxcb && check_pkg_config libxcb "xcb >= 1.4" xcb/xcb.h xcb_connect ||
377 kx disable libxcb_shm libxcb_shape libxcb_xfixes
377 kx
377 kx if enabled libxcb; then
377 kx enabled libxcb_shm && check_pkg_config libxcb_shm xcb-shm xcb/shm.h xcb_shm_attach
377 kx enabled libxcb_shape && check_pkg_config libxcb_shape xcb-shape xcb/shape.h xcb_shape_get_rectangles
377 kx enabled libxcb_xfixes && check_pkg_config libxcb_xfixes xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image
377 kx fi
377 kx
377 kx check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
377 kx
377 kx # d3d11va requires linking directly to dxgi and d3d11 if not building for
377 kx # the desktop api partition
377 kx test_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11"
377 kx #ifdef WINAPI_FAMILY
377 kx #include <winapifamily.h>
377 kx #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
377 kx #error desktop, not uwp
377 kx #else
377 kx // WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
377 kx #endif
377 kx #else
377 kx #error no family set
377 kx #endif
377 kx EOF
377 kx
377 kx enabled libdrm &&
377 kx check_pkg_config libdrm_getfb2 libdrm "xf86drmMode.h" drmModeGetFB2
377 kx
377 kx enabled vaapi &&
377 kx check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize
377 kx
377 kx if enabled vaapi; then
377 kx check_pkg_config vaapi_drm "libva-drm" "va/va_drm.h" vaGetDisplayDRM
377 kx
377 kx if enabled xlib; then
377 kx check_pkg_config vaapi_x11 "libva-x11" "va/va_x11.h" vaGetDisplay
377 kx fi
377 kx
377 kx check_cpp_condition vaapi_1 "va/va.h" "VA_CHECK_VERSION(1, 0, 0)"
377 kx
377 kx check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
377 kx check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
377 kx check_struct "va/va.h" "VADecPictureParameterBufferAV1" bit_depth_idx
377 kx check_type "va/va.h va/va_vpp.h" "VAProcFilterParameterBufferHDRToneMapping"
377 kx check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" rotation_flags
377 kx check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
377 kx check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
377 kx check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
377 kx check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9"
377 kx fi
377 kx
377 kx if enabled_all opencl libdrm ; then
377 kx check_type "CL/cl_intel.h" "clCreateImageFromFdINTEL_fn" &&
377 kx enable opencl_drm_beignet
377 kx check_func_headers "CL/cl_ext.h" clImportMemoryARM &&
377 kx enable opencl_drm_arm
377 kx fi
377 kx
377 kx if enabled_all opencl vaapi ; then
377 kx if enabled opencl_drm_beignet ; then
377 kx enable opencl_vaapi_beignet
377 kx else
377 kx check_type "CL/cl.h CL/cl_va_api_media_sharing_intel.h" "clCreateFromVA_APIMediaSurfaceINTEL_fn" &&
377 kx enable opencl_vaapi_intel_media
377 kx fi
377 kx fi
377 kx
377 kx if enabled_all opencl dxva2 ; then
377 kx check_type "CL/cl_dx9_media_sharing.h" cl_dx9_surface_info_khr &&
377 kx enable opencl_dxva2
377 kx fi
377 kx
377 kx if enabled_all opencl d3d11va ; then
377 kx check_type "CL/cl_d3d11.h" clGetDeviceIDsFromD3D11KHR_fn &&
377 kx enable opencl_d3d11
377 kx fi
377 kx
377 kx enabled vdpau &&
377 kx check_cpp_condition vdpau vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP"
377 kx
377 kx enabled vdpau &&
377 kx check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
377 kx
377 kx enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd
377 kx
377 kx enabled vulkan &&
377 kx require_pkg_config vulkan "vulkan >= 1.1.97" "vulkan/vulkan.h" vkCreateInstance
377 kx
377 kx if enabled x86; then
377 kx case $target_os in
377 kx mingw32*|mingw64*|win32|win64|linux|cygwin*)
377 kx ;;
377 kx *)
377 kx disable ffnvcodec cuvid nvdec nvenc
377 kx ;;
377 kx esac
377 kx elif enabled_any aarch64 ppc64 && ! enabled bigendian; then
377 kx case $target_os in
377 kx linux)
377 kx ;;
377 kx *)
377 kx disable ffnvcodec cuvid nvdec nvenc
377 kx ;;
377 kx esac
377 kx else
377 kx disable ffnvcodec cuvid nvdec nvenc
377 kx fi
377 kx
377 kx enabled ffnvcodec && enable cuda
377 kx
377 kx enabled nvenc &&
377 kx test_cc -I$source_path <<EOF || disable nvenc
377 kx #include <ffnvcodec/nvEncodeAPI.h>
377 kx NV_ENCODE_API_FUNCTION_LIST flist;
377 kx void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; }
377 kx int main(void) { return 0; }
377 kx EOF
377 kx
377 kx if enabled_any nvdec cuvid; then
377 kx check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
377 kx fi
377 kx
377 kx enabled amf &&
377 kx check_cpp_condition amf "AMF/core/Version.h" \
377 kx "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400090000"
377 kx
377 kx # Funny iconv installations are not unusual, so check it after all flags have been set
377 kx if enabled libc_iconv; then
377 kx check_func_headers iconv.h iconv
377 kx elif enabled iconv; then
377 kx check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
377 kx fi
377 kx
377 kx enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
377 kx
377 kx # add some useful compiler flags if supported
377 kx check_cflags -Wdeclaration-after-statement
377 kx check_cflags -Wall
377 kx check_cflags -Wdisabled-optimization
377 kx check_cflags -Wpointer-arith
377 kx check_cflags -Wredundant-decls
377 kx check_cflags -Wwrite-strings
377 kx check_cflags -Wtype-limits
377 kx check_cflags -Wundef
377 kx check_cflags -Wmissing-prototypes
377 kx check_cflags -Wno-pointer-to-int-cast
377 kx check_cflags -Wstrict-prototypes
377 kx check_cflags -Wempty-body
377 kx
377 kx if enabled extra_warnings; then
377 kx check_cflags -Wcast-qual
377 kx check_cflags -Wextra
377 kx check_cflags -Wpedantic
377 kx fi
377 kx
377 kx check_disable_warning(){
377 kx warning_flag=-W${1#-Wno-}
377 kx test_cflags $unknown_warning_flags $warning_flag && add_cflags $1
377 kx }
377 kx
377 kx test_cflags -Werror=unused-command-line-argument &&
377 kx append unknown_warning_flags "-Werror=unused-command-line-argument"
377 kx test_cflags -Werror=unknown-warning-option &&
377 kx append unknown_warning_flags "-Werror=unknown-warning-option"
377 kx
377 kx check_disable_warning -Wno-parentheses
377 kx check_disable_warning -Wno-switch
377 kx check_disable_warning -Wno-format-zero-length
377 kx check_disable_warning -Wno-pointer-sign
377 kx check_disable_warning -Wno-unused-const-variable
377 kx check_disable_warning -Wno-bool-operation
377 kx check_disable_warning -Wno-char-subscripts
377 kx
377 kx check_disable_warning_headers(){
377 kx warning_flag=-W${1#-Wno-}
377 kx test_cflags $warning_flag && add_cflags_headers $1
377 kx }
377 kx
377 kx check_disable_warning_headers -Wno-deprecated-declarations
377 kx check_disable_warning_headers -Wno-unused-variable
377 kx
377 kx test_cc <<EOF && enable blocks_extension
377 kx void (^block)(void);
377 kx EOF
377 kx
377 kx # add some linker flags
377 kx check_ldflags -Wl,--warn-common
377 kx check_ldflags -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
377 kx enabled rpath && add_ldexeflags -Wl,-rpath,$libdir && add_ldsoflags -Wl,-rpath,$libdir
377 kx test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
377 kx
377 kx # add some strip flags
377 kx check_stripflags -x
377 kx
377 kx enabled neon_clobber_test &&
377 kx check_ldflags -Wl,--wrap,avcodec_open2 \
377 kx -Wl,--wrap,avcodec_decode_audio4 \
377 kx -Wl,--wrap,avcodec_decode_video2 \
377 kx -Wl,--wrap,avcodec_decode_subtitle2 \
377 kx -Wl,--wrap,avcodec_encode_audio2 \
377 kx -Wl,--wrap,avcodec_encode_video2 \
377 kx -Wl,--wrap,avcodec_encode_subtitle \
377 kx -Wl,--wrap,avcodec_send_packet \
377 kx -Wl,--wrap,avcodec_receive_packet \
377 kx -Wl,--wrap,avcodec_send_frame \
377 kx -Wl,--wrap,avcodec_receive_frame \
377 kx -Wl,--wrap,swr_convert \
377 kx -Wl,--wrap,avresample_convert ||
377 kx disable neon_clobber_test
377 kx
377 kx enabled xmm_clobber_test &&
377 kx check_ldflags -Wl,--wrap,avcodec_open2 \
377 kx -Wl,--wrap,avcodec_decode_audio4 \
377 kx -Wl,--wrap,avcodec_decode_video2 \
377 kx -Wl,--wrap,avcodec_decode_subtitle2 \
377 kx -Wl,--wrap,avcodec_encode_audio2 \
377 kx -Wl,--wrap,avcodec_encode_video2 \
377 kx -Wl,--wrap,avcodec_encode_subtitle \
377 kx -Wl,--wrap,avcodec_send_packet \
377 kx -Wl,--wrap,avcodec_receive_packet \
377 kx -Wl,--wrap,avcodec_send_frame \
377 kx -Wl,--wrap,avcodec_receive_frame \
377 kx -Wl,--wrap,swr_convert \
377 kx -Wl,--wrap,avresample_convert \
377 kx -Wl,--wrap,sws_scale ||
377 kx disable xmm_clobber_test
377 kx
377 kx check_ld "cc" proper_dce <<EOF
377 kx extern const int array[512];
377 kx static inline int func(void) { return array[0]; }
377 kx int main(void) { return 0; }
377 kx EOF
377 kx
377 kx if enabled proper_dce; then
377 kx echo "X { local: *; };" > $TMPV
377 kx if test_ldflags -Wl,${version_script},$TMPV; then
377 kx append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
377 kx quotes='""'
377 kx test_cc <<EOF && enable symver_asm_label
377 kx void ff_foo(void) __asm__ ("av_foo@VERSION");
377 kx void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
377 kx EOF
377 kx test_cc <<EOF && enable symver_gnu_asm
377 kx __asm__(".symver ff_foo,av_foo@VERSION");
377 kx void ff_foo(void) {}
377 kx EOF
377 kx fi
377 kx fi
377 kx
377 kx if [ -z "$optflags" ]; then
377 kx if enabled small; then
377 kx optflags=$cflags_size
377 kx elif enabled optimizations; then
377 kx optflags=$cflags_speed
377 kx else
377 kx optflags=$cflags_noopt
377 kx fi
377 kx fi
377 kx
377 kx check_optflags(){
377 kx check_cflags "$@"
377 kx enabled lto && check_ldflags "$@"
377 kx }
377 kx
377 kx check_optflags $optflags
377 kx check_optflags -fno-math-errno
377 kx check_optflags -fno-signed-zeros
377 kx
377 kx if enabled lto; then
377 kx test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
377 kx check_cflags -flto
377 kx check_ldflags -flto $cpuflags
377 kx disable inline_asm_direct_symbol_refs
377 kx fi
377 kx
377 kx enabled ftrapv && check_cflags -ftrapv
377 kx
377 kx test_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
377 kx int x;
377 kx EOF
377 kx
377 kx
377 kx if enabled icc; then
377 kx # Just warnings, no remarks
377 kx check_cflags -w1
377 kx # -wd: Disable following warnings
377 kx # 144, 167, 556: -Wno-pointer-sign
377 kx # 188: enumerated type mixed with another type
377 kx # 1292: attribute "foo" ignored
377 kx # 1419: external declaration in primary source file
377 kx # 10006: ignoring unknown option -fno-signed-zeros
377 kx # 10148: ignoring unknown option -Wno-parentheses
377 kx # 10156: ignoring option '-W'; no argument required
377 kx # 13200: No EMMS instruction before call to function
377 kx # 13203: No EMMS instruction before return from function
377 kx check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
377 kx # 11030: Warning unknown option --as-needed
377 kx # 10156: ignoring option '-export'; no argument required
377 kx check_ldflags -wd10156,11030
377 kx # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
377 kx enable ebp_available
377 kx # The test above does not test linking
377 kx enabled lto && disable symver_asm_label
377 kx if enabled x86_32; then
377 kx icc_version=$($cc -dumpversion)
377 kx test ${icc_version%%.*} -ge 11 &&
377 kx check_cflags -falign-stack=maintain-16-byte ||
377 kx disable aligned_stack
377 kx fi
377 kx elif enabled gcc; then
377 kx check_optflags -fno-tree-vectorize
377 kx check_cflags -Werror=format-security
377 kx check_cflags -Werror=implicit-function-declaration
377 kx check_cflags -Werror=missing-prototypes
377 kx check_cflags -Werror=return-type
377 kx check_cflags -Werror=vla
377 kx check_cflags -Wformat
377 kx check_cflags -fdiagnostics-color=auto
377 kx enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
377 kx if enabled x86_32; then
377 kx case $target_os in
377 kx *bsd*)
377 kx # BSDs don't guarantee a 16 byte aligned stack, but we can
377 kx # request GCC to try to maintain 16 byte alignment throughout
377 kx # function calls. Library entry points that might call assembly
377 kx # functions align the stack. (The parameter means 2^4 bytes.)
377 kx check_cflags -mpreferred-stack-boundary=4
377 kx ;;
377 kx esac
377 kx fi
377 kx elif enabled llvm_gcc; then
377 kx check_cflags -mllvm -stack-alignment=16
377 kx elif enabled clang; then
377 kx if enabled x86_32; then
377 kx # Clang doesn't support maintaining alignment without assuming the
377 kx # same alignment in every function. If 16 byte alignment would be
377 kx # enabled, one would also have to either add attribute_align_arg on
377 kx # every single entry point into the libraries or enable -mstackrealign
377 kx # (doing stack realignment in every single function).
377 kx case $target_os in
377 kx mingw32|win32|*bsd*)
377 kx disable aligned_stack
377 kx ;;
377 kx *)
377 kx check_cflags -mllvm -stack-alignment=16
377 kx check_cflags -mstack-alignment=16
377 kx ;;
377 kx esac
377 kx else
377 kx check_cflags -mllvm -stack-alignment=16
377 kx check_cflags -mstack-alignment=16
377 kx fi
377 kx check_cflags -Qunused-arguments
377 kx check_cflags -Werror=implicit-function-declaration
377 kx check_cflags -Werror=missing-prototypes
377 kx check_cflags -Werror=return-type
377 kx elif enabled cparser; then
377 kx add_cflags -Wno-missing-variable-declarations
377 kx add_cflags -Wno-empty-statement
377 kx elif enabled armcc; then
377 kx add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
377 kx add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
377 kx # 2523: use of inline assembly is deprecated
377 kx add_cflags -W${armcc_opt},--diag_suppress=2523
377 kx add_cflags -W${armcc_opt},--diag_suppress=1207
377 kx add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
377 kx add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
377 kx add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
377 kx add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
377 kx elif enabled pathscale; then
377 kx add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
377 kx disable inline_asm
377 kx elif enabled_any msvc icl; then
377 kx enabled x86_32 && disable aligned_stack
377 kx enabled_all x86_32 debug && add_cflags -Oy-
377 kx enabled debug && add_ldflags -debug
377 kx enable pragma_deprecated
377 kx if enabled icl; then
377 kx # -Qansi-alias is basically -fstrict-aliasing, but does not work
377 kx # (correctly) on icl 13.x.
377 kx test_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
377 kx add_cflags -Qansi-alias
377 kx # Some inline asm is not compilable in debug
377 kx if enabled debug; then
377 kx disable ebp_available
377 kx disable ebx_available
377 kx fi
377 kx fi
377 kx # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
377 kx check_cpp_condition log2 crtversion.h "_VC_CRT_MAJOR_VERSION >= 12"
377 kx # The CRT headers contain __declspec(restrict) in a few places, but if redefining
377 kx # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
377 kx # (as it ends up if the restrict redefine is done before including stdlib.h), while
377 kx # MSVC 2013 and newer can handle it fine.
377 kx # If this declspec fails, force including stdlib.h before the restrict redefinition
377 kx # happens in config.h.
377 kx if [ $restrict_keyword != restrict ]; then
377 kx test_cc <<EOF || add_cflags -FIstdlib.h
377 kx __declspec($restrict_keyword) void *foo(int);
377 kx EOF
377 kx fi
377 kx # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
377 kx # Issue has been fixed in MSVC v19.00.24218.
377 kx test_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
377 kx check_cflags -d2SSAOptimizer-
377 kx # enable utf-8 source processing on VS2015 U2 and newer
377 kx test_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
377 kx add_cflags -utf-8
377 kx fi
377 kx
377 kx for pfx in "" host_; do
377 kx varname=${pfx%_}cc_type
377 kx eval "type=\$$varname"
377 kx if [ "$type" = "msvc" ]; then
377 kx test_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
377 kx static inline int foo(int a) { return a; }
377 kx EOF
377 kx fi
377 kx done
377 kx
377 kx case $as_type in
377 kx clang)
377 kx add_asflags -Qunused-arguments
377 kx ;;
377 kx esac
377 kx
377 kx case $ld_type in
377 kx clang)
377 kx check_ldflags -Qunused-arguments
377 kx ;;
377 kx esac
377 kx
377 kx enable frame_thread_encoder
377 kx
377 kx enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
377 kx
377 kx check_deps $CONFIG_LIST \
377 kx $CONFIG_EXTRA \
377 kx $HAVE_LIST \
377 kx $ALL_COMPONENTS \
377 kx
377 kx enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
377 kx enabled avresample && warn "Building with deprecated library libavresample"
377 kx
377 kx case $target_os in
377 kx haiku)
377 kx disable memalign
377 kx disable posix_memalign
377 kx ;;
377 kx *-dos|freedos|opendos)
377 kx if test_cpp_condition sys/version.h "defined(__DJGPP__) && __DJGPP__ == 2 && __DJGPP_MINOR__ == 5"; then
377 kx disable memalign
377 kx fi
377 kx ;;
377 kx esac
377 kx
377 kx flatten_extralibs(){
377 kx nested_entries=
377 kx list_name=$1
377 kx eval list=\$${1}
377 kx for entry in $list; do
377 kx entry_copy=$entry
377 kx resolve entry_copy
377 kx flat_entries=
377 kx for e in $entry_copy; do
377 kx case $e in
377 kx *_extralibs) nested_entries="$nested_entries$e ";;
377 kx *) flat_entries="$flat_entries$e ";;
377 kx esac
377 kx done
377 kx eval $entry="\$flat_entries"
377 kx done
377 kx append $list_name "$nested_entries"
377 kx
377 kx resolve nested_entries
377 kx if test -n "$(filter '*_extralibs' $nested_entries)"; then
377 kx flatten_extralibs $list_name
377 kx fi
377 kx }
377 kx
377 kx flatten_extralibs_wrapper(){
377 kx list_name=$1
377 kx flatten_extralibs $list_name
377 kx unique $list_name
377 kx resolve $list_name
377 kx eval $list_name=\$\(\$ldflags_filter \$$list_name\)
377 kx eval printf \''%s'\' \""\$$list_name"\"
377 kx }
377 kx
377 kx for linkunit in $LIBRARY_LIST; do
377 kx unset current_extralibs
377 kx eval components=\$$(toupper ${linkunit})_COMPONENTS_LIST
377 kx for comp in ${components}; do
377 kx enabled $comp || continue
377 kx comp_extralibs="${comp}_extralibs"
377 kx append current_extralibs $comp_extralibs
377 kx done
377 kx eval prepend ${linkunit}_extralibs $current_extralibs
377 kx done
377 kx
377 kx for linkunit in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
377 kx eval ${linkunit}_extralibs=\$\(flatten_extralibs_wrapper ${linkunit}_extralibs\)
377 kx done
377 kx
377 kx map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
377 kx
377 kx for thread in $THREADS_LIST; do
377 kx if enabled $thread; then
377 kx test -n "$thread_type" &&
377 kx die "ERROR: Only one thread type must be selected." ||
377 kx thread_type="$thread"
377 kx fi
377 kx done
377 kx
377 kx if disabled stdatomic; then
377 kx if enabled atomics_gcc; then
377 kx add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
377 kx elif enabled atomics_win32; then
377 kx add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
377 kx elif enabled atomics_suncc; then
377 kx add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
377 kx elif enabled pthreads; then
377 kx add_compat atomics/pthread/stdatomic.o
377 kx add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
377 kx else
377 kx enabled threads && die "Threading is enabled, but no atomics are available"
377 kx add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
377 kx fi
377 kx fi
377 kx
377 kx # Check if requested libraries were found.
377 kx for lib in $AUTODETECT_LIBS; do
377 kx requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found";
377 kx done
377 kx
377 kx enabled zlib && add_cppflags -DZLIB_CONST
377 kx
377 kx # conditional library dependencies, in any order
377 kx enabled afftdn_filter && prepend avfilter_deps "avcodec"
377 kx enabled afftfilt_filter && prepend avfilter_deps "avcodec"
377 kx enabled afir_filter && prepend avfilter_deps "avcodec"
377 kx enabled amovie_filter && prepend avfilter_deps "avformat avcodec"
377 kx enabled aresample_filter && prepend avfilter_deps "swresample"
377 kx enabled atempo_filter && prepend avfilter_deps "avcodec"
377 kx enabled bm3d_filter && prepend avfilter_deps "avcodec"
377 kx enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec"
377 kx enabled convolve_filter && prepend avfilter_deps "avcodec"
377 kx enabled deconvolve_filter && prepend avfilter_deps "avcodec"
377 kx enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
377 kx enabled elbg_filter && prepend avfilter_deps "avcodec"
377 kx enabled fftfilt_filter && prepend avfilter_deps "avcodec"
377 kx enabled find_rect_filter && prepend avfilter_deps "avformat avcodec"
377 kx enabled firequalizer_filter && prepend avfilter_deps "avcodec"
377 kx enabled mcdeint_filter && prepend avfilter_deps "avcodec"
377 kx enabled movie_filter && prepend avfilter_deps "avformat avcodec"
377 kx enabled pan_filter && prepend avfilter_deps "swresample"
377 kx enabled pp_filter && prepend avfilter_deps "postproc"
377 kx enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
377 kx enabled resample_filter && prepend avfilter_deps "avresample"
377 kx enabled sab_filter && prepend avfilter_deps "swscale"
377 kx enabled scale_filter && prepend avfilter_deps "swscale"
377 kx enabled scale2ref_filter && prepend avfilter_deps "swscale"
377 kx enabled sofalizer_filter && prepend avfilter_deps "avcodec"
377 kx enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale"
377 kx enabled showfreqs_filter && prepend avfilter_deps "avcodec"
377 kx enabled showspectrum_filter && prepend avfilter_deps "avcodec"
377 kx enabled signature_filter && prepend avfilter_deps "avcodec avformat"
377 kx enabled smartblur_filter && prepend avfilter_deps "swscale"
377 kx enabled spectrumsynth_filter && prepend avfilter_deps "avcodec"
377 kx enabled spp_filter && prepend avfilter_deps "avcodec"
377 kx enabled sr_filter && prepend avfilter_deps "avformat swscale"
377 kx enabled subtitles_filter && prepend avfilter_deps "avformat avcodec"
377 kx enabled uspp_filter && prepend avfilter_deps "avcodec"
377 kx enabled zoompan_filter && prepend avfilter_deps "swscale"
377 kx
377 kx enabled lavfi_indev && prepend avdevice_deps "avfilter"
377 kx
377 kx #FIXME
377 kx enabled_any sdl2_outdev opengl_outdev && enabled sdl2 &&
377 kx add_cflags $(filter_out '-Dmain=SDL_main' $sdl2_cflags)
377 kx
377 kx enabled opus_decoder && prepend avcodec_deps "swresample"
377 kx
377 kx # reorder the items at var $1 to align with the items order at var $2 .
377 kx # die if an item at $1 is not at $2 .
377 kx reorder_by(){
377 kx eval rb_in=\$$1
377 kx eval rb_ordered=\$$2
377 kx
377 kx for rb in $rb_in; do
377 kx is_in $rb $rb_ordered || die "$rb at \$$1 is not at \$$2"
377 kx done
377 kx
377 kx rb_out=
377 kx for rb in $rb_ordered; do
377 kx is_in $rb $rb_in && rb_out="$rb_out$rb "
377 kx done
377 kx eval $1=\$rb_out
377 kx }
377 kx
377 kx # deps-expand fflib $1: N x {append all expanded deps; unique}
377 kx # within a set of N items, N expansions are enough to expose a cycle.
377 kx expand_deps(){
377 kx unique ${1}_deps # required for the early break test.
377 kx for dummy in $LIBRARY_LIST; do # N iteratios
377 kx eval deps=\$${1}_deps
377 kx append ${1}_deps $(map 'eval echo \$${v}_deps' $deps)
377 kx unique ${1}_deps
377 kx eval '[ ${#deps} = ${#'${1}_deps'} ]' && break # doesn't expand anymore
377 kx done
377 kx
377 kx eval is_in $1 \$${1}_deps && die "Dependency cycle at ${1}_deps"
377 kx reorder_by ${1}_deps LIBRARY_LIST # linking order is expected later
377 kx }
377 kx
377 kx #we have to remove gpl from the deps here as some code assumes all lib deps are libs
377 kx postproc_deps="$(filter_out 'gpl' $postproc_deps)"
377 kx
377 kx map 'expand_deps $v' $LIBRARY_LIST
377 kx
377 kx if test "$quiet" != "yes"; then
377 kx
377 kx echo "install prefix $prefix"
377 kx echo "source path $source_path"
377 kx echo "C compiler $cc"
377 kx echo "C library $libc_type"
377 kx if test "$host_cc" != "$cc"; then
377 kx echo "host C compiler $host_cc"
377 kx echo "host C library $host_libc_type"
377 kx fi
377 kx echo "ARCH $arch ($cpu)"
377 kx if test "$build_suffix" != ""; then
377 kx echo "build suffix $build_suffix"
377 kx fi
377 kx if test "$progs_suffix" != ""; then
377 kx echo "progs suffix $progs_suffix"
377 kx fi
377 kx if test "$extra_version" != ""; then
377 kx echo "version string suffix $extra_version"
377 kx fi
377 kx echo "big-endian ${bigendian-no}"
377 kx echo "runtime cpu detection ${runtime_cpudetect-no}"
377 kx if enabled x86; then
377 kx echo "standalone assembly ${x86asm-no}"
377 kx echo "x86 assembler ${x86asmexe}"
377 kx echo "MMX enabled ${mmx-no}"
377 kx echo "MMXEXT enabled ${mmxext-no}"
377 kx echo "3DNow! enabled ${amd3dnow-no}"
377 kx echo "3DNow! extended enabled ${amd3dnowext-no}"
377 kx echo "SSE enabled ${sse-no}"
377 kx echo "SSSE3 enabled ${ssse3-no}"
377 kx echo "AESNI enabled ${aesni-no}"
377 kx echo "AVX enabled ${avx-no}"
377 kx echo "AVX2 enabled ${avx2-no}"
377 kx echo "AVX-512 enabled ${avx512-no}"
377 kx echo "XOP enabled ${xop-no}"
377 kx echo "FMA3 enabled ${fma3-no}"
377 kx echo "FMA4 enabled ${fma4-no}"
377 kx echo "i686 features enabled ${i686-no}"
377 kx echo "CMOV is fast ${fast_cmov-no}"
377 kx echo "EBX available ${ebx_available-no}"
377 kx echo "EBP available ${ebp_available-no}"
377 kx fi
377 kx if enabled aarch64; then
377 kx echo "NEON enabled ${neon-no}"
377 kx echo "VFP enabled ${vfp-no}"
377 kx fi
377 kx if enabled arm; then
377 kx echo "ARMv5TE enabled ${armv5te-no}"
377 kx echo "ARMv6 enabled ${armv6-no}"
377 kx echo "ARMv6T2 enabled ${armv6t2-no}"
377 kx echo "VFP enabled ${vfp-no}"
377 kx echo "NEON enabled ${neon-no}"
377 kx echo "THUMB enabled ${thumb-no}"
377 kx fi
377 kx if enabled mips; then
377 kx echo "MIPS FPU enabled ${mipsfpu-no}"
377 kx echo "MIPS DSP R1 enabled ${mipsdsp-no}"
377 kx echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
377 kx echo "MIPS MSA enabled ${msa-no}"
377 kx echo "MIPS MSA2 enabled ${msa2-no}"
377 kx echo "LOONGSON MMI enabled ${mmi-no}"
377 kx fi
377 kx if enabled ppc; then
377 kx echo "AltiVec enabled ${altivec-no}"
377 kx echo "VSX enabled ${vsx-no}"
377 kx echo "POWER8 enabled ${power8-no}"
377 kx echo "PPC 4xx optimizations ${ppc4xx-no}"
377 kx echo "dcbzl available ${dcbzl-no}"
377 kx fi
377 kx echo "debug symbols ${debug-no}"
377 kx echo "strip symbols ${stripping-no}"
377 kx echo "optimize for size ${small-no}"
377 kx echo "optimizations ${optimizations-no}"
377 kx echo "static ${static-no}"
377 kx echo "shared ${shared-no}"
377 kx echo "postprocessing support ${postproc-no}"
377 kx echo "network support ${network-no}"
377 kx echo "threading support ${thread_type-no}"
377 kx echo "safe bitstream reader ${safe_bitstream_reader-no}"
377 kx echo "texi2html enabled ${texi2html-no}"
377 kx echo "perl enabled ${perl-no}"
377 kx echo "pod2man enabled ${pod2man-no}"
377 kx echo "makeinfo enabled ${makeinfo-no}"
377 kx echo "makeinfo supports HTML ${makeinfo_html-no}"
377 kx test -n "$random_seed" &&
377 kx echo "random seed ${random_seed}"
377 kx echo
377 kx
377 kx echo "External libraries:"
377 kx print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | print_in_columns
377 kx echo
377 kx
377 kx echo "External libraries providing hardware acceleration:"
377 kx print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | print_in_columns
377 kx echo
377 kx
377 kx echo "Libraries:"
377 kx print_enabled '' $LIBRARY_LIST | print_in_columns
377 kx echo
377 kx
377 kx echo "Programs:"
377 kx print_enabled '' $PROGRAM_LIST | print_in_columns
377 kx echo
377 kx
377 kx for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
377 kx echo "Enabled ${type}s:"
377 kx eval list=\$$(toupper $type)_LIST
377 kx print_enabled '_*' $list | print_in_columns
377 kx echo
377 kx done
377 kx
377 kx if test -n "$ignore_tests"; then
377 kx ignore_tests=$(echo $ignore_tests | tr ',' ' ')
377 kx echo "Ignored FATE tests:"
377 kx echo $ignore_tests | print_in_columns
377 kx echo
377 kx fi
377 kx
377 kx echo "License: $license"
377 kx
377 kx fi # test "$quiet" != "yes"
377 kx
377 kx if test -n "$WARN_IF_GETS_DISABLED_LIST"; then
377 kx for cfg in $WARN_IF_GETS_DISABLED_LIST; do
377 kx if disabled $cfg; then
377 kx varname=${cfg}_disable_reason
377 kx eval "warn \"Disabled $cfg because \$$varname\""
377 kx fi
377 kx done
377 kx fi
377 kx
377 kx if test -n "$WARNINGS"; then
377 kx printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color"
377 kx enabled fatal_warnings && exit 1
377 kx fi
377 kx
377 kx test -e Makefile || echo "include $source_path/Makefile" > Makefile
377 kx
377 kx esc(){
377 kx echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
377 kx }
377 kx
377 kx echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" > ffbuild/config.fate
377 kx
377 kx enabled stripping || strip="echo skipping strip"
377 kx enabled stripping || striptype=""
377 kx
377 kx config_files="$TMPH ffbuild/config.mak doc/config.texi"
377 kx
377 kx cat > ffbuild/config.mak <<EOF
377 kx # Automatically generated by configure - do not modify!
377 kx ifndef FFMPEG_CONFIG_MAK
377 kx FFMPEG_CONFIG_MAK=1
377 kx FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
377 kx prefix=$prefix
377 kx LIBDIR=\$(DESTDIR)$libdir
377 kx SHLIBDIR=\$(DESTDIR)$shlibdir
377 kx INCDIR=\$(DESTDIR)$incdir
377 kx BINDIR=\$(DESTDIR)$bindir
377 kx DATADIR=\$(DESTDIR)$datadir
377 kx DOCDIR=\$(DESTDIR)$docdir
377 kx MANDIR=\$(DESTDIR)$mandir
377 kx PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
377 kx INSTALL_NAME_DIR=$install_name_dir
377 kx SRC_PATH=$source_path
377 kx SRC_LINK=$source_link
377 kx ifndef MAIN_MAKEFILE
377 kx SRC_PATH:=\$(SRC_PATH:.%=..%)
377 kx endif
377 kx CC_IDENT=$cc_ident
377 kx ARCH=$arch
377 kx INTRINSICS=$intrinsics
377 kx EXTERN_PREFIX=$extern_prefix
377 kx CC=$cc
377 kx CXX=$cxx
377 kx AS=$as
377 kx OBJCC=$objcc
377 kx LD=$ld
377 kx DEPCC=$dep_cc
377 kx DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
377 kx DEPAS=$as
377 kx DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
377 kx X86ASM=$x86asmexe
377 kx DEPX86ASM=$x86asmexe
377 kx DEPX86ASMFLAGS=\$(X86ASMFLAGS)
377 kx AR=$ar
377 kx ARFLAGS=$arflags
377 kx AR_O=$ar_o
377 kx AR_CMD=$ar
377 kx NM_CMD=$nm
377 kx RANLIB=$ranlib
377 kx STRIP=$strip
377 kx STRIPTYPE=$striptype
377 kx NVCC=$nvcc
377 kx CP=cp -p
377 kx LN_S=$ln_s
377 kx CPPFLAGS=$CPPFLAGS
377 kx CFLAGS=$CFLAGS
377 kx CXXFLAGS=$CXXFLAGS
377 kx OBJCFLAGS=$OBJCFLAGS
377 kx ASFLAGS=$ASFLAGS
377 kx NVCCFLAGS=$nvccflags
377 kx AS_C=$AS_C
377 kx AS_O=$AS_O
377 kx OBJCC_C=$OBJCC_C
377 kx OBJCC_E=$OBJCC_E
377 kx OBJCC_O=$OBJCC_O
377 kx CC_C=$CC_C
377 kx CC_E=$CC_E
377 kx CC_O=$CC_O
377 kx CXX_C=$CXX_C
377 kx CXX_O=$CXX_O
377 kx NVCC_C=$NVCC_C
377 kx NVCC_O=$NVCC_O
377 kx LD_O=$LD_O
377 kx X86ASM_O=$X86ASM_O
377 kx LD_LIB=$LD_LIB
377 kx LD_PATH=$LD_PATH
377 kx DLLTOOL=$dlltool
377 kx WINDRES=$windres
377 kx DOXYGEN=$doxygen
377 kx LDFLAGS=$LDFLAGS
377 kx LDEXEFLAGS=$LDEXEFLAGS
377 kx LDSOFLAGS=$LDSOFLAGS
377 kx SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
377 kx ASMSTRIPFLAGS=$ASMSTRIPFLAGS
377 kx X86ASMFLAGS=$X86ASMFLAGS
377 kx MSAFLAGS=$MSAFLAGS
377 kx MMIFLAGS=$MMIFLAGS
377 kx BUILDSUF=$build_suffix
377 kx PROGSSUF=$progs_suffix
377 kx FULLNAME=$FULLNAME
377 kx LIBPREF=$LIBPREF
377 kx LIBSUF=$LIBSUF
377 kx LIBNAME=$LIBNAME
377 kx SLIBPREF=$SLIBPREF
377 kx SLIBSUF=$SLIBSUF
377 kx EXESUF=$EXESUF
377 kx EXTRA_VERSION=$extra_version
377 kx CCDEP=$CCDEP
377 kx CXXDEP=$CXXDEP
377 kx CCDEP_FLAGS=$CCDEP_FLAGS
377 kx ASDEP=$ASDEP
377 kx ASDEP_FLAGS=$ASDEP_FLAGS
377 kx X86ASMDEP=$X86ASMDEP
377 kx X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS
377 kx CC_DEPFLAGS=$CC_DEPFLAGS
377 kx AS_DEPFLAGS=$AS_DEPFLAGS
377 kx X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS
377 kx HOSTCC=$host_cc
377 kx HOSTLD=$host_ld
377 kx HOSTCFLAGS=$host_cflags
377 kx HOSTCPPFLAGS=$host_cppflags
377 kx HOSTEXESUF=$HOSTEXESUF
377 kx HOSTLDFLAGS=$host_ldflags
377 kx HOSTEXTRALIBS=$host_extralibs
377 kx DEPHOSTCC=$host_cc
377 kx DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
377 kx HOSTCCDEP=$HOSTCCDEP
377 kx HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
377 kx HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
377 kx HOSTCC_C=$HOSTCC_C
377 kx HOSTCC_O=$HOSTCC_O
377 kx HOSTLD_O=$HOSTLD_O
377 kx TARGET_EXEC=$target_exec $target_exec_args
377 kx TARGET_PATH=$target_path
377 kx TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
377 kx CFLAGS-ffplay=${sdl2_cflags}
377 kx CFLAGS_HEADERS=$CFLAGS_HEADERS
377 kx LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
377 kx EXTRALIBS=$extralibs
377 kx COMPAT_OBJS=$compat_objs
377 kx INSTALL=$install
377 kx LIBTARGET=${LIBTARGET}
377 kx SLIBNAME=${SLIBNAME}
377 kx SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
377 kx SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
377 kx SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
377 kx SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
377 kx SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
377 kx SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
377 kx SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
377 kx SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
377 kx VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
377 kx SAMPLES:=${samples:-\$(FATE_SAMPLES)}
377 kx NOREDZONE_FLAGS=$noredzone_flags
377 kx LIBFUZZER_PATH=$libfuzzer_path
377 kx IGNORE_TESTS=$ignore_tests
377 kx EOF
377 kx
377 kx map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST
377 kx
377 kx for entry in $LIBRARY_LIST $PROGRAM_LIST $EXTRALIBS_LIST; do
377 kx eval echo "EXTRALIBS-${entry}=\$${entry}_extralibs" >> ffbuild/config.mak
377 kx done
377 kx
377 kx cat > $TMPH <<EOF
377 kx /* Automatically generated by configure - do not modify! */
377 kx #ifndef FFMPEG_CONFIG_H
377 kx #define FFMPEG_CONFIG_H
377 kx #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
377 kx #define FFMPEG_LICENSE "$(c_escape $license)"
377 kx #define CONFIG_THIS_YEAR 2023
377 kx #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
377 kx #define AVCONV_DATADIR "$(eval c_escape $datadir)"
377 kx #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
377 kx #define OS_NAME $target_os
377 kx #define av_restrict $restrict_keyword
377 kx #define EXTERN_PREFIX "${extern_prefix}"
377 kx #define EXTERN_ASM ${extern_prefix}
377 kx #define BUILDSUF "$build_suffix"
377 kx #define SLIBSUF "$SLIBSUF"
377 kx #define HAVE_MMX2 HAVE_MMXEXT
377 kx #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
377 kx EOF
377 kx
377 kx test -n "$assert_level" &&
377 kx echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
377 kx
377 kx test -n "$malloc_prefix" &&
377 kx echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
377 kx
377 kx if enabled x86asm; then
377 kx append config_files $TMPASM
377 kx cat > $TMPASM <<EOF
377 kx ; Automatically generated by configure - do not modify!
377 kx EOF
377 kx fi
377 kx
377 kx enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
377 kx
377 kx
377 kx mkdir -p doc
377 kx mkdir -p tests
377 kx mkdir -p tests/api
377 kx echo "@c auto-generated by configure - do not modify! " > doc/config.texi
377 kx
377 kx print_config ARCH_ "$config_files" $ARCH_LIST
377 kx print_config HAVE_ "$config_files" $HAVE_LIST
377 kx print_config CONFIG_ "$config_files" $CONFIG_LIST \
377 kx $CONFIG_EXTRA \
377 kx $ALL_COMPONENTS \
377 kx
377 kx echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
377 kx echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak
377 kx
377 kx # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
377 kx cp_if_changed $TMPH config.h
377 kx touch ffbuild/.config
377 kx
377 kx enabled x86asm && cp_if_changed $TMPASM config.asm
377 kx
377 kx cat > $TMPH <<EOF
377 kx /* Generated by ffmpeg configure */
377 kx #ifndef AVUTIL_AVCONFIG_H
377 kx #define AVUTIL_AVCONFIG_H
377 kx EOF
377 kx
377 kx print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
377 kx
377 kx echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
377 kx
377 kx cp_if_changed $TMPH libavutil/avconfig.h
377 kx
377 kx # full_filter_name_foo=vf_foo
377 kx # full_filter_name_bar=asrc_bar
377 kx # ...
377 kx eval "$(sed -n "s/^extern AVFilter ff_\([avfsinkrc]\{2,5\}\)_\(.*\);/full_filter_name_\2=\1_\2/p" $source_path/libavfilter/allfilters.c)"
377 kx
377 kx # generate the lists of enabled components
377 kx print_enabled_components(){
377 kx file=$1
377 kx struct_name=$2
377 kx name=$3
377 kx shift 3
377 kx echo "static const $struct_name * const $name[] = {" > $TMPH
377 kx for c in $*; do
377 kx if enabled $c; then
377 kx case $name in
377 kx filter_list)
377 kx eval c=\$full_filter_name_${c%_filter}
377 kx ;;
377 kx indev_list)
377 kx c=${c%_indev}_demuxer
377 kx ;;
377 kx outdev_list)
377 kx c=${c%_outdev}_muxer
377 kx ;;
377 kx esac
377 kx printf " &ff_%s,\n" $c >> $TMPH
377 kx fi
377 kx done
377 kx if [ "$name" = "filter_list" ]; then
377 kx for c in asrc_abuffer vsrc_buffer asink_abuffer vsink_buffer; do
377 kx printf " &ff_%s,\n" $c >> $TMPH
377 kx done
377 kx fi
377 kx echo " NULL };" >> $TMPH
377 kx cp_if_changed $TMPH $file
377 kx }
377 kx
377 kx print_enabled_components libavfilter/filter_list.c AVFilter filter_list $FILTER_LIST
377 kx print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST
377 kx print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST
377 kx print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
377 kx print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST
377 kx print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list $MUXER_LIST
377 kx print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST
377 kx print_enabled_components libavdevice/outdev_list.c AVOutputFormat outdev_list $OUTDEV_LIST
377 kx print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
377 kx
377 kx # Settings for pkg-config files
377 kx
377 kx cat > $TMPH <<EOF
377 kx # Automatically generated by configure - do not modify!
377 kx shared=$shared
377 kx build_suffix=$build_suffix
377 kx prefix=$prefix
377 kx libdir=$libdir
377 kx incdir=$incdir
377 kx rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}")
377 kx source_path=${source_path}
377 kx LIBPREF=${LIBPREF}
377 kx LIBSUF=${LIBSUF}
377 kx extralibs_avutil="$avutil_extralibs"
377 kx extralibs_avcodec="$avcodec_extralibs"
377 kx extralibs_avformat="$avformat_extralibs"
377 kx extralibs_avdevice="$avdevice_extralibs"
377 kx extralibs_avfilter="$avfilter_extralibs"
377 kx extralibs_avresample="$avresample_extralibs"
377 kx extralibs_postproc="$postproc_extralibs"
377 kx extralibs_swscale="$swscale_extralibs"
377 kx extralibs_swresample="$swresample_extralibs"
377 kx EOF
377 kx
377 kx for lib in $LIBRARY_LIST; do
377 kx lib_deps="$(eval echo \$${lib}_deps)"
377 kx echo ${lib}_deps=\"$lib_deps\" >> $TMPH
377 kx done
377 kx
377 kx cp_if_changed $TMPH ffbuild/config.sh