1、在usr文件夹中创建jason文件夹

cd /usr :进入usr文件夹

mkdir jason: 创建jason文件夹

2、上传ffmpeg文件到阿里云

3、解压ffmpeg压缩包

4、编译.so文件

(1)创建build_android.sh文件,配置NDK的路径及其其它信息

将该文件转为 “UTF-8 - 无BOM格式”

#!/bin/bash
make clean
export NDK=/usr/ndk/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

(2)上传build_android.sh文件到解压的ffmpeg目录中

(3)给解压的ffmpeg文件夹赋权限

(4)执行build_android.sh命令

5、生成的.so在Android中不可用

(1)编译完成后会生成android目录

(2)在lib目录下可以看到生成的.so文件

但是.so文件的命名,有的数字在.so之后,如libavutil.so.54

有的版本号在.so之后,如libavfilter.so.5.11.102

这些.so文件在Android中是无法使用的

6、修改.configure文件生成正确的.so文件

(1)解压ffmpeg,在生成的文件夹中找到configure文件进行编辑

(2)修改configure文件,将2778-1783行的代码改为2784-2788行的代码

configure文件源码:

#!/bin/sh
#
# FFmpeg configure script
#
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
## Prevent locale nonsense from breaking basic text processing.
LC_ALL=C
export LC_ALL# make sure we are running under a compatible shell
# try to make this part work with most shellstry_exec(){echo "Trying shell $1"type "$1" > /dev/null 2>&1 && exec "$@"
}unset foo
(: ${foo%%bar}) 2> /dev/null
E1="$?"(: ${foo?}) 2> /dev/null
E2="$?"if test "$E1" != 0 || test "$E2" = 0; thenecho "Broken shell detected.  Trying alternatives."export FF_CONF_EXECif test "0$FF_CONF_EXEC" -lt 1; thenFF_CONF_EXEC=1try_exec bash "$0" "$@"fiif test "0$FF_CONF_EXEC" -lt 2; thenFF_CONF_EXEC=2try_exec ksh "$0" "$@"fiif test "0$FF_CONF_EXEC" -lt 3; thenFF_CONF_EXEC=3try_exec /usr/xpg4/bin/sh "$0" "$@"fiecho "No compatible shell script interpreter found."echo "This configure script requires a POSIX-compatible shell"echo "such as bash or ksh."echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."echo "Instead, install a working POSIX-compatible shell."echo "Disabling this configure test will create a broken FFmpeg."if test "$BASH_VERSION" = '2.04.0(1)-release'; thenecho "This bash version ($BASH_VERSION) is broken on your platform."echo "Upgrade to a later version if available."fiexit 1
fitest -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATHshow_help(){cat <<EOF
Usage: configure [options]
Options: [defaults in brackets after descriptions]Help options:--help                   print this message--list-decoders          show all available decoders--list-encoders          show all available encoders--list-hwaccels          show all available hardware accelerators--list-demuxers          show all available demuxers--list-muxers            show all available muxers--list-parsers           show all available parsers--list-protocols         show all available protocols--list-bsfs              show all available bitstream filters--list-indevs            show all available input devices--list-outdevs           show all available output devices--list-filters           show all available filtersStandard options:--logfile=FILE           log tests and output to FILE [config.log]--disable-logging        do not log configure debug information--fatal-warnings         fail if any configure warning is generated--prefix=PREFIX          install in PREFIX [$prefix]--bindir=DIR             install binaries in DIR [PREFIX/bin]--datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]--docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]--libdir=DIR             install libs in DIR [PREFIX/lib]--shlibdir=DIR           install shared libs in DIR [LIBDIR]--incdir=DIR             install includes in DIR [PREFIX/include]--mandir=DIR             install man page in DIR [PREFIX/share/man]--enable-rpath           use rpath to allow installing libraries in pathsnot part of the dynamic linker search pathuse rpath when linking programs [USE WITH CARE]Licensing options:--enable-gpl             allow use of GPL code, the resulting libsand binaries will be under GPL [no]--enable-version3        upgrade (L)GPL to version 3 [no]--enable-nonfree         allow use of nonfree code, the resulting libsand binaries will be unredistributable [no]Configuration options:--disable-static         do not build static libraries [no]--enable-shared          build shared libraries [no]--enable-small           optimize for size instead of speed--disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)--enable-gray            enable full grayscale support (slower color)--disable-swscale-alpha  disable alpha channel support in swscale--disable-all            disable building components, libraries and programs--enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]--enable-raise-major     increase major version numbers in sonames [no]Program options:--disable-programs       do not build command line programs--disable-ffmpeg         disable ffmpeg build--disable-ffplay         disable ffplay build--disable-ffprobe        disable ffprobe build--disable-ffserver       disable ffserver buildDocumentation options:--disable-doc            do not build documentation--disable-htmlpages      do not build HTML documentation pages--disable-manpages       do not build man documentation pages--disable-podpages       do not build POD documentation pages--disable-txtpages       do not build text documentation pagesComponent options:--disable-avdevice       disable libavdevice build--disable-avcodec        disable libavcodec build--disable-avformat       disable libavformat build--disable-avutil         disable libavutil build--disable-swresample     disable libswresample build--disable-swscale        disable libswscale build--disable-postproc       disable libpostproc build--disable-avfilter       disable libavfilter build--enable-avresample      enable libavresample build [no]--disable-pthreads       disable pthreads [autodetect]--disable-w32threads     disable Win32 threads [autodetect]--disable-os2threads     disable OS/2 threads [autodetect]--disable-network        disable network support [no]--disable-dct            disable DCT code--disable-dwt            disable DWT code--disable-error-resilience disable error resilience code--disable-lsp            disable LSP code--disable-lzo            disable LZO decoder code--disable-mdct           disable MDCT code--disable-rdft           disable RDFT code--disable-fft            disable FFT code--disable-faan           disable floating point AAN (I)DCT code--disable-pixelutils     disable pixel utils in libavutilHardware accelerators:--disable-dxva2          disable DXVA2 code [autodetect]--disable-vaapi          disable VAAPI code [autodetect]--disable-vda            disable VDA code [autodetect]--disable-vdpau          disable VDPAU code [autodetect]Individual component options:--disable-everything     disable all components listed below--disable-encoder=NAME   disable encoder NAME--enable-encoder=NAME    enable encoder NAME--disable-encoders       disable all encoders--disable-decoder=NAME   disable decoder NAME--enable-decoder=NAME    enable decoder NAME--disable-decoders       disable all decoders--disable-hwaccel=NAME   disable hwaccel NAME--enable-hwaccel=NAME    enable hwaccel NAME--disable-hwaccels       disable all hwaccels--disable-muxer=NAME     disable muxer NAME--enable-muxer=NAME      enable muxer NAME--disable-muxers         disable all muxers--disable-demuxer=NAME   disable demuxer NAME--enable-demuxer=NAME    enable demuxer NAME--disable-demuxers       disable all demuxers--enable-parser=NAME     enable parser NAME--disable-parser=NAME    disable parser NAME--disable-parsers        disable all parsers--enable-bsf=NAME        enable bitstream filter NAME--disable-bsf=NAME       disable bitstream filter NAME--disable-bsfs           disable all bitstream filters--enable-protocol=NAME   enable protocol NAME--disable-protocol=NAME  disable protocol NAME--disable-protocols      disable all protocols--enable-indev=NAME      enable input device NAME--disable-indev=NAME     disable input device NAME--disable-indevs         disable input devices--enable-outdev=NAME     enable output device NAME--disable-outdev=NAME    disable output device NAME--disable-outdevs        disable output devices--disable-devices        disable all devices--enable-filter=NAME     enable filter NAME--disable-filter=NAME    disable filter NAME--disable-filters        disable all filtersExternal library support:--enable-avisynth        enable reading of AviSynth script files [no]--disable-bzlib          disable bzlib [autodetect]--enable-fontconfig      enable fontconfig, useful for drawtext filter [no]--enable-frei0r          enable frei0r video filtering [no]--enable-gnutls          enable gnutls, needed for https supportif openssl is not used [no]--disable-iconv          disable iconv [autodetect]--enable-ladspa          enable LADSPA audio filtering [no]--enable-libaacplus      enable AAC+ encoding via libaacplus [no]--enable-libass          enable libass subtitles rendering,needed for subtitles and ass filter [no]--enable-libbluray       enable BluRay reading using libbluray [no]--enable-libbs2b         enable bs2b DSP library [no]--enable-libcaca         enable textual display using libcaca [no]--enable-libcelt         enable CELT decoding via libcelt [no]--enable-libcdio         enable audio CD grabbing with libcdio [no]--enable-libdc1394       enable IIDC-1394 grabbing using libdc1394and libraw1394 [no]--enable-libfaac         enable AAC encoding via libfaac [no]--enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]--enable-libflite        enable flite (voice synthesis) support via libflite [no]--enable-libfreetype     enable libfreetype, needed for drawtext filter [no]--enable-libfribidi      enable libfribidi, improves drawtext filter [no]--enable-libgme          enable Game Music Emu via libgme [no]--enable-libgsm          enable GSM de/encoding via libgsm [no]--enable-libiec61883     enable iec61883 via libiec61883 [no]--enable-libilbc         enable iLBC de/encoding via libilbc [no]--enable-libmfx          enable HW acceleration through libmfx--enable-libmodplug      enable ModPlug via libmodplug [no]--enable-libmp3lame      enable MP3 encoding via libmp3lame [no]--enable-libnut          enable NUT (de)muxing via libnut,native (de)muxer exists [no]--enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]--enable-libopencv       enable video filtering via libopencv [no]--enable-libopenh264     enable H.264 encoding via OpenH264 [no]--enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]--enable-libopus         enable Opus de/encoding via libopus [no]--enable-libpulse        enable Pulseaudio input via libpulse [no]--enable-libquvi         enable quvi input via libquvi [no]--enable-librtmp         enable RTMP[E] support via librtmp [no]--enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]--enable-libshine        enable fixed-point MP3 encoding via libshine [no]--enable-libsmbclient    enable Samba protocol via libsmbclient [no]--enable-libsoxr         enable Include libsoxr resampling [no]--enable-libspeex        enable Speex de/encoding via libspeex [no]--enable-libssh          enable SFTP protocol via libssh [no]--enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]--enable-libtheora       enable Theora encoding via libtheora [no]--enable-libtwolame      enable MP2 encoding via libtwolame [no]--enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]--enable-libv4l2         enable libv4l2/v4l-utils [no]--enable-libvidstab      enable video stabilization using vid.stab [no]--enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]--enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]--enable-libvorbis       enable Vorbis en/decoding via libvorbis,native implementation exists [no]--enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]--enable-libwavpack      enable wavpack encoding via libwavpack [no]--enable-libwebp         enable WebP encoding via libwebp [no]--enable-libx264         enable H.264 encoding via x264 [no]--enable-libx265         enable HEVC encoding via x265 [no]--enable-libxavs         enable AVS encoding via xavs [no]--enable-libxcb          enable X11 grabbing using XCB [autodetect]--enable-libxcb-shm      enable X11 grabbing shm communication [autodetect]--enable-libxcb-xfixes   enable X11 grabbing mouse rendering [autodetect]--enable-libxcb-shape    enable X11 grabbing shape rendering [autodetect]--enable-libxvid         enable Xvid encoding via xvidcore,native MPEG-4/Xvid encoder exists [no]--enable-libzmq          enable message passing via libzmq [no]--enable-libzvbi         enable teletext support via libzvbi [no]--disable-lzma           disable lzma [autodetect]--enable-decklink        enable Blackmagick DeckLink I/O support [no]--enable-nvenc           enable NVIDIA NVENC support [no]--enable-openal          enable OpenAL 1.1 capture support [no]--enable-opencl          enable OpenCL code--enable-opengl          enable OpenGL rendering [no]--enable-openssl         enable openssl, needed for https supportif gnutls is not used [no]--disable-sdl            disable sdl [autodetect]--enable-x11grab         enable X11 grabbing (legacy) [no]--disable-xlib           disable xlib [autodetect]--disable-zlib           disable zlib [autodetect]Toolchain options:--arch=ARCH              select architecture [$arch]--cpu=CPU                select the minimum required CPU (affectsinstruction selection, may crash on older CPUs)--cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]--progs-suffix=SUFFIX    program name suffix []--enable-cross-compile   assume a cross-compiler is used--sysroot=PATH           root of cross-build tree--sysinclude=PATH        location of cross-build system headers--target-os=OS           compiler targets OS [$target_os]--target-exec=CMD        command to run executables on target--target-path=DIR        path to view of build directory on target--target-samples=DIR     path to samples directory on target--tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks--toolchain=NAME         set tool defaults according to NAME--nm=NM                  use nm tool NM [$nm_default]--ar=AR                  use archive tool AR [$ar_default]--as=AS                  use assembler AS [$as_default]--windres=WINDRES        use windows resource compiler WINDRES [$windres_default]--yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]--cc=CC                  use C compiler CC [$cc_default]--cxx=CXX                use C compiler CXX [$cxx_default]--dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]--ld=LD                  use linker LD [$ld_default]--pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]--pkg-config-flags=FLAGS pass additional flags to pkgconf []--ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]--doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]--host-cc=HOSTCC         use host C compiler HOSTCC--host-cflags=HCFLAGS    use HCFLAGS when compiling for host--host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host--host-ld=HOSTLD         use host linker HOSTLD--host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host--host-libs=HLIBS        use libs HLIBS when linking for host--host-os=OS             compiler host OS [$target_os]--extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]--extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]--extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]--extra-libs=ELIBS       add ELIBS [$ELIBS]--extra-version=STRING   version string suffix []--optflags=OPTFLAGS      override optimization-related compiler flags--build-suffix=SUFFIX    library name suffix []--enable-pic             build position-independent code--enable-thumb           compile for Thumb instruction set--enable-lto             use link-time optimizationAdvanced options (experts only):--malloc-prefix=PREFIX   prefix malloc and related names with PREFIX--disable-symver         disable symbol versioning--enable-hardcoded-tables use hardcoded tables instead of runtime generation--disable-safe-bitstream-readerdisable buffer boundary checking in bitreaders(faster, but may crash)--enable-memalign-hack   emulate memalign, interferes with memory debuggers--sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]Optimization options (experts only):--disable-asm            disable all assembly optimizations--disable-altivec        disable AltiVec optimizations--disable-amd3dnow       disable 3DNow! optimizations--disable-amd3dnowext    disable 3DNow! extended optimizations--disable-mmx            disable MMX optimizations--disable-mmxext         disable MMXEXT optimizations--disable-sse            disable SSE optimizations--disable-sse2           disable SSE2 optimizations--disable-sse3           disable SSE3 optimizations--disable-ssse3          disable SSSE3 optimizations--disable-sse4           disable SSE4 optimizations--disable-sse42          disable SSE4.2 optimizations--disable-avx            disable AVX optimizations--disable-xop            disable XOP optimizations--disable-fma3           disable FMA3 optimizations--disable-fma4           disable FMA4 optimizations--disable-avx2           disable AVX2 optimizations--disable-armv5te        disable armv5te optimizations--disable-armv6          disable armv6 optimizations--disable-armv6t2        disable armv6t2 optimizations--disable-vfp            disable VFP optimizations--disable-neon           disable NEON optimizations--disable-inline-asm     disable use of inline assembly--disable-yasm           disable use of nasm/yasm assembly--disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations--disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations--disable-mipsfpu        disable floating point MIPS optimizations--disable-fast-unaligned consider unaligned accesses slowDeveloper options (useful when working on FFmpeg itself):--disable-debug          disable debugging symbols--enable-debug=LEVEL     set the debug level [$debuglevel]--disable-optimizations  disable compiler optimizations--enable-extra-warnings  enable more compiler warnings--disable-stripping      disable stripping of executables and shared libraries--assert-level=level     0(default), 1 or 2, amount of assertion testing,2 causes a slowdown at runtime.--enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data--valgrind=VALGRIND      run "make fate" tests through valgrind to detect memoryleaks and errors, using the specified valgrind binary.Cannot be combined with --target-exec--enable-ftrapv          Trap arithmetic overflows--samples=PATH           location of test samples for FATE, if not set use\$FATE_SAMPLES at make invocation time.--enable-neon-clobber-test check NEON registers for clobbering (should beused only for debugging purposes)--enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;should be used only for debugging purposes)--enable-random          randomly enable/disable components--disable-random--enable-random=LIST     randomly enable/disable specific components or--disable-random=LIST    component groups. LIST is a comma-separated listof NAME[:PROB] entries where NAME is a component(group) and PROB the probability associated withNAME (default 0.5).--random-seed=VALUE      seed value for --enable/disable-randomNOTE: Object files are built at the place where configure is launched.
EOFexit 0
}quotes='""'log(){echo "$@" >> $logfile
}log_file(){log BEGIN $1pr -n -t $1 >> $logfilelog END $1
}echolog(){log "$@"echo "$@"
}warn(){log "WARNING: $*"WARNINGS="${WARNINGS}WARNING: $*\n"
}die(){echolog "$@"cat <<EOFIf you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
EOFif disabled logging; thencat <<EOF
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
EOFelsecat <<EOF
Include the log file "$logfile" produced by configure as this will help
solve the problem.
EOFfiexit 1
}# Avoid locale weirdness, besides we really just want to translate ASCII.
toupper(){echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
}tolower(){echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
}c_escape(){echo "$*" | sed 's/["\\]/\\\0/g'
}sh_quote(){v=$(echo "$1" | sed "s/'/'\\\\''/g")test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"echo "$v"
}cleanws(){echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\\r//g'
}filter(){pat=$1shiftfor v; doeval "case $v in $pat) echo $v ;; esac"done
}filter_out(){pat=$1shiftfor v; doeval "case $v in $pat) ;; *) echo $v ;; esac"done
}map(){m=$1shiftfor v; do eval $m; done
}add_suffix(){suffix=$1shiftfor v; do echo ${v}${suffix}; done
}set_all(){value=$1shiftfor var in $*; doeval $var=$valuedone
}set_weak(){value=$1shiftfor var; doeval : \${$var:=$value}done
}sanitize_var_name(){echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
}set_safe(){var=$1shifteval $(sanitize_var_name "$var")='$*'
}get_safe(){eval echo \$$(sanitize_var_name "$1")
}pushvar(){for pvar in $*; doeval level=\${${pvar}_level:=0}eval ${pvar}_${level}="\$$pvar"eval ${pvar}_level=$(($level+1))done
}popvar(){for pvar in $*; doeval level=\${${pvar}_level:-0}test $level = 0 && continueeval level=$(($level-1))eval $pvar="\${${pvar}_${level}}"eval ${pvar}_level=$leveleval unset ${pvar}_${level}done
}enable(){set_all yes $*
}disable(){set_all no $*
}enable_weak(){set_weak yes $*
}disable_weak(){set_weak no $*
}enable_safe(){for var; doenable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')done
}disable_safe(){for var; dodisable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')done
}do_enable_deep(){for var; doenabled $var && continueeval sel="\$${var}_select"eval sgs="\$${var}_suggest"pushvar var sgsenable_deep $selpopvar sgsenable_deep_weak $sgspopvar vardone
}enable_deep(){do_enable_deep $*enable $*
}enable_deep_weak(){for var; dodisabled $var && continuepushvar vardo_enable_deep $varpopvar varenable_weak $vardone
}enabled(){test "${1#!}" = "$1" && op== || op=!=eval test "x\$${1#!}" $op "xyes"
}disabled(){test "${1#!}" = "$1" && op== || op=!=eval test "x\$${1#!}" $op "xno"
}enabled_all(){for opt; doenabled $opt || return 1done
}disabled_all(){for opt; dodisabled $opt || return 1done
}enabled_any(){for opt; doenabled $opt && return 0done
}disabled_any(){for opt; dodisabled $opt && return 0donereturn 1
}set_default(){for opt; doeval : \${$opt:=\$${opt}_default}done
}is_in(){value=$1shiftfor var in $*; do[ $var = $value ] && return 0donereturn 1
}do_check_deps(){for cfg; docfg="${cfg#!}"enabled ${cfg}_checking && die "Circular dependency for $cfg."disabled ${cfg}_checking && continueenable ${cfg}_checkingappend allopts $cfgeval dep_all="\$${cfg}_deps"eval dep_any="\$${cfg}_deps_any"eval dep_sel="\$${cfg}_select"eval dep_sgs="\$${cfg}_suggest"eval dep_ifa="\$${cfg}_if"eval dep_ifn="\$${cfg}_if_any"pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifndo_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifnpopvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn[ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }[ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }enabled_all  $dep_all || disable $cfgenabled_any  $dep_any || disable $cfgdisabled_any $dep_sel && disable $cfgif enabled $cfg; thenenable_deep $dep_selenable_deep_weak $dep_sgsfidisable ${cfg}_checkingdone
}check_deps(){unset alloptsdo_check_deps "$@"for cfg in $allopts; doenabled $cfg || continueeval dep_extralibs="\$${cfg}_extralibs"test -n "$dep_extralibs" && add_extralibs $dep_extralibsdone
}print_config(){pfx=$1files=$2shift 2map 'eval echo "$v \${$v:-no}"' "$@" |awk "BEGIN { split(\"$files\", files) }{c = \"$pfx\" toupper(\$1);v = \$2;sub(/yes/, 1, v);sub(/no/,  0, v);for (f in files) {file = files[f];if (file ~ /\\.h\$/) {printf(\"#define %s %d\\n\", c, v) >>file;} else if (file ~ /\\.asm\$/) {printf(\"%%define %s %d\\n\", c, v) >>file;} else if (file ~ /\\.mak\$/) {n = -v ? \"\" : \"!\";printf(\"%s%s=yes\\n\", n, c) >>file;} else if (file ~ /\\.texi\$/) {pre = -v ? \"\" : \"@c \";yesno = \$2;c2 = tolower(c);gsub(/_/, \"-\", c2);printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;}}}"
}print_enabled(){suf=$1shiftfor v; doenabled $v && printf "%s\n" ${v%$suf};done
}append(){var=$1shifteval "$var=\"\$$var $*\""
}prepend(){var=$1shifteval "$var=\"$* \$$var\""
}unique(){var=$1uniq_list=""for tok in $(eval echo \$$var); douniq_list="$(filter_out $tok $uniq_list) $tok"doneeval "$var=\"${uniq_list}\""
}add_cppflags(){append CPPFLAGS "$@"
}add_cflags(){append CFLAGS $($cflags_filter "$@")
}add_cxxflags(){append CXXFLAGS $($cflags_filter "$@")
}add_asflags(){append ASFLAGS $($asflags_filter "$@")
}add_ldflags(){append LDFLAGS $($ldflags_filter "$@")
}add_ldexeflags(){append LDEXEFLAGS $($ldflags_filter "$@")
}add_stripflags(){append ASMSTRIPFLAGS "$@"
}add_extralibs(){prepend extralibs $($ldflags_filter "$@")
}add_host_cppflags(){append host_cppflags "$@"
}add_host_cflags(){append host_cflags $($host_cflags_filter "$@")
}add_host_ldflags(){append host_ldflags $($host_ldflags_filter "$@")
}add_compat(){append compat_objs $1shiftmap 'add_cppflags -D$v' "$@"
}check_cmd(){log "$@""$@" >> $logfile 2>&1
}check_stat(){log check_stat "$@"stat "$1" >> $logfile 2>&1
}cc_o(){eval printf '%s\\n' $CC_O
}cc_e(){eval printf '%s\\n' $CC_E
}check_cc(){log check_cc "$@"cat > $TMPClog_file $TMPCcheck_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
}check_cxx(){log check_cxx "$@"cat > $TMPCPPlog_file $TMPCPPcheck_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
}check_oc(){log check_oc "$@"cat > $TMPMlog_file $TMPMcheck_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM
}check_cpp(){log check_cpp "$@"cat > $TMPClog_file $TMPCcheck_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
}as_o(){eval printf '%s\\n' $AS_O
}check_as(){log check_as "$@"cat > $TMPSlog_file $TMPScheck_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
}check_inline_asm(){log check_inline_asm "$@"name="$1"code="$2"shift 2disable $namecheck_cc "$@" <<EOF && enable $name
void foo(void){ __asm__ volatile($code); }
EOF
}check_insn(){log check_insn "$@"check_inline_asm ${1}_inline "\"$2\""echo "$2" | check_as && enable ${1}_external || disable ${1}_external
}check_yasm(){log check_yasm "$@"echo "$1" > $TMPSlog_file $TMPSshift 1check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
}ld_o(){eval printf '%s\\n' $LD_O
}check_ld(){log check_ld "$@"type=$1shift 1flags=$(filter_out '-l*|*.so' $@)libs=$(filter '-l*|*.so' $@)check_$type $($cflags_filter $flags) || returnflags=$($ldflags_filter $flags)libs=$($ldflags_filter $libs)check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
}print_include(){hdr=$1test "${hdr%.h}" = "${hdr}" &&echo "#include $hdr"    ||echo "#include <$hdr>"
}check_code(){log check_code "$@"check=$1headers=$2code=$3shift 3{for hdr in $headers; doprint_include $hdrdoneecho "int main(void) { $code; return 0; }"} | check_$check "$@"
}check_cppflags(){log check_cppflags "$@"check_cc "$@" <<EOF && append CPPFLAGS "$@"
int x;
EOF
}test_cflags(){log test_cflags "$@"set -- $($cflags_filter "$@")check_cc "$@" <<EOF
int x;
EOF
}check_cflags(){log check_cflags "$@"test_cflags "$@" && add_cflags "$@"
}check_cxxflags(){log check_cxxflags "$@"set -- $($cflags_filter "$@")check_cxx "$@" <<EOF && append CXXFLAGS "$@"
int x;
EOF
}test_ldflags(){log test_ldflags "$@"check_ld "cc" "$@" <<EOF
int main(void){ return 0; }
EOF
}check_ldflags(){log check_ldflags "$@"test_ldflags "$@" && add_ldflags "$@"
}test_stripflags(){log test_stripflags "$@"# call check_cc to get a fresh TMPOcheck_cc <<EOF
int main(void) { return 0; }
EOFcheck_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
}check_stripflags(){log check_stripflags "$@"test_stripflags "$@" && add_stripflags "$@"
}check_header(){log check_header "$@"header=$1shiftdisable_safe $headercheck_cpp "$@" <<EOF && enable_safe $header
#include <$header>
int x;
EOF
}check_header_oc(){log check_header_oc "$@"rm -f -- "$TMPO"header=$1shiftdisable_safe $header{echo "#include <$header>"echo "int main(void) { return 0; }"} | check_oc && check_stat "$TMPO" && enable_safe $headers
}check_func(){log check_func "$@"func=$1shiftdisable $funccheck_ld "cc" "$@" <<EOF && enable $func
extern int $func();
int main(void){ $func(); }
EOF
}check_mathfunc(){log check_mathfunc "$@"func=$1narg=$2shift 2test $narg = 2 && args="f, g" || args="f"disable $funccheck_ld "cc" "$@" <<EOF && enable $func
#include <math.h>
float foo(float f, float g) { return $func($args); }
int main(void){ return (int) foo; }
EOF
}check_func_headers(){log check_func_headers "$@"headers=$1funcs=$2shift 2{for hdr in $headers; doprint_include $hdrdonefor func in $funcs; doecho "long check_$func(void) { return (long) $func; }"doneecho "int main(void) { return 0; }"} | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
}check_class_headers_cpp(){log check_class_headers_cpp "$@"headers=$1classes=$2shift 2{for hdr in $headers; doecho "#include <$hdr>"doneecho "int main(void) { "i=1for class in $classes; doecho "$class obj$i;"i=$(expr $i + 1)doneecho "return 0; }"} | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
}check_cpp_condition(){log check_cpp_condition "$@"header=$1condition=$2shift 2check_cpp "$@" <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}check_lib(){log check_lib "$@"header="$1"func="$2"shift 2check_header $header && check_func $func "$@" && add_extralibs "$@"
}check_lib2(){log check_lib2 "$@"headers="$1"funcs="$2"shift 2check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
}check_lib_cpp(){log check_lib_cpp "$@"headers="$1"classes="$2"shift 2check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
}check_pkg_config(){log check_pkg_config "$@"pkgandversion="$1"pkg="${1%% *}"headers="$2"funcs="$3"shift 3check_cmd $pkg_config --exists --print-errors $pkgandversion || returnpkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&set_safe ${pkg}_cflags $pkg_cflags   &&set_safe ${pkg}_libs   $pkg_libs
}check_exec(){check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
}check_exec_crash(){code=$(cat)# exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)# are safe but may not be available everywhere.  Thus we use# raise(SIGTERM) instead.  The check is run in a subshell so we# can redirect the "Terminated" message from the shell.  SIGBUS# is not defined by standard C so it is used conditionally.(check_exec "$@") >> $logfile 2>&1 <<EOF
#include <signal.h>
static void sighandler(int sig){raise(SIGTERM);
}
int foo(void){$code
}
int (*func_ptr)(void) = foo;
int main(void){signal(SIGILL, sighandler);signal(SIGFPE, sighandler);signal(SIGSEGV, sighandler);
#ifdef SIGBUSsignal(SIGBUS, sighandler);
#endifreturn func_ptr();
}
EOF
}check_type(){log check_type "$@"headers=$1type=$2shift 2disable_safe "$type"check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
}check_struct(){log check_struct "$@"headers=$1struct=$2member=$3shift 3disable_safe "${struct}_${member}"check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&enable_safe "${struct}_${member}"
}check_builtin(){log check_builtin "$@"name=$1headers=$2builtin=$3shift 3disable "$name"check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
}check_compile_assert(){log check_compile_assert "$@"name=$1headers=$2condition=$3shift 3disable "$name"check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
}require(){name="$1"header="$2"func="$3"shift 3check_lib $header $func "$@" || die "ERROR: $name not found"
}require2(){name="$1"headers="$2"func="$3"shift 3check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}require_cpp(){name="$1"headers="$2"classes="$3"shift 3check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
}use_pkg_config(){pkg="$1"check_pkg_config "$@" || return 1add_cflags    $(get_safe ${pkg}_cflags)add_extralibs $(get_safe ${pkg}_libs)
}require_pkg_config(){use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
}require_libfreetype(){log require_libfreetype "$@"pkg="freetype2"check_cmd $pkg_config --exists --print-errors $pkg \|| die "ERROR: $pkg not found"pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg){echo "#include <ft2build.h>"echo "#include FT_FREETYPE_H"echo "long check_func(void) { return (long) FT_Init_FreeType; }"echo "int main(void) { return 0; }"} | check_ld "cc" $pkg_cflags $pkg_libs \&& set_safe ${pkg}_cflags $pkg_cflags \&& set_safe ${pkg}_libs   $pkg_libs \|| die "ERROR: $pkg not found"add_cflags    $(get_safe ${pkg}_cflags)add_extralibs $(get_safe ${pkg}_libs)
}hostcc_e(){eval printf '%s\\n' $HOSTCC_E
}hostcc_o(){eval printf '%s\\n' $HOSTCC_O
}check_host_cc(){log check_host_cc "$@"cat > $TMPClog_file $TMPCcheck_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
}check_host_cpp(){log check_host_cpp "$@"cat > $TMPClog_file $TMPCcheck_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
}check_host_cppflags(){log check_host_cppflags "$@"check_host_cc "$@" <<EOF && append host_cppflags "$@"
int x;
EOF
}check_host_cflags(){log check_host_cflags "$@"set -- $($host_cflags_filter "$@")check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}check_host_cpp_condition(){log check_host_cpp_condition "$@"header=$1condition=$2shift 2check_host_cpp "$@" <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}apply(){file=$1shift"$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}cp_if_changed(){cmp -s "$1" "$2" && echo "$2 is unchanged" && returnmkdir -p "$(dirname $2)"$cp_f "$1" "$2"
}# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.COMPONENT_LIST="bsfsdecodersdemuxersencodersfiltershwaccelsindevsmuxersoutdevsparsersprotocols
"EXAMPLE_LIST="avio_reading_exampledecoding_encoding_exampledemuxing_decoding_exampleextract_mvs_examplefilter_audio_examplefiltering_audio_examplefiltering_video_examplemetadata_examplemuxing_exampleqsvdec_exampleremuxing_exampleresampling_audio_examplescaling_video_exampletranscode_aac_exampletranscoding_example
"EXTERNAL_LIBRARY_LIST="avisynthbzlibcrystalhddecklinkfrei0rgnutlsiconvladspalibaacpluslibasslibbluraylibbs2blibcacalibcdiolibceltlibdc1394libfaaclibfdk_aaclibflitelibfontconfiglibfreetypelibfribidilibgmelibgsmlibiec61883libilbclibmfxlibmodpluglibmp3lamelibnutlibopencore_amrnblibopencore_amrwblibopencvlibopenh264libopenjpeglibopuslibpulselibquvilibrtmplibschroedingerlibshinelibsmbclientlibsoxrlibspeexlibsshlibstagefright_h264libtheoralibtwolamelibutvideolibv4l2libvidstablibvo_aacenclibvo_amrwbenclibvorbislibvpxlibwavpacklibwebplibx264libx265libxavslibxcblibxcb_shmlibxcb_shapelibxcb_xfixeslibxvidlibzmqlibzvbilzmanvencopenalopenclopenglopensslsdlx11grabxlibzlib
"DOCUMENT_LIST="dochtmlpagesmanpagespodpagestxtpages
"FEATURE_LIST="ftrapvgrayhardcoded_tablesruntime_cpudetectsafe_bitstream_readersharedsmallstaticswscale_alpha
"HWACCEL_LIST="dxva2vaapivdavdpauxvmc
"LIBRARY_LIST="avcodecavdeviceavfilteravformatavresampleavutilpostprocswresampleswscale
"LICENSE_LIST="gplnonfreeversion3
"PROGRAM_LIST="ffplayffprobeffserverffmpeg
"SUBSYSTEM_LIST="dctdwterror_resiliencefaanfast_unalignedfftlsplzomdctpixelutilsnetworkqsvrdft
"CONFIG_LIST="$COMPONENT_LIST$DOCUMENT_LIST$EXAMPLE_LIST$EXTERNAL_LIBRARY_LIST$FEATURE_LIST$HWACCEL_LIST$LICENSE_LIST$LIBRARY_LIST$PROGRAM_LIST$SUBSYSTEM_LISTfontconfigincompatible_libav_abimemalign_hackmemory_poisoningneon_clobber_testpicpod2manraise_majorthumbxmm_clobber_test
"THREADS_LIST="pthreadsos2threadsw32threads
"ATOMICS_LIST="atomics_gccatomics_sunccatomics_win32
"ARCH_LIST="aarch64alphaarmavr32avr32_apavr32_ucbfinia64m68kmipsmips64pariscppcppc64s390sh4sparcsparc64tilegxtileprotomix86x86_32x86_64
"ARCH_EXT_LIST_ARM="armv5tearmv6armv6t2armv8neonvfpvfpv3setend
"ARCH_EXT_LIST_MIPS="mipsfpumips32r2mipsdspr1mipsdspr2
"ARCH_EXT_LIST_X86_SIMD="amd3dnowamd3dnowextavxavx2fma3fma4mmxmmxextssesse2sse3sse4sse42ssse3xop
"ARCH_EXT_LIST_PPC="altivecdcbzlldbrxppc4xxvsx
"ARCH_EXT_LIST_X86="$ARCH_EXT_LIST_X86_SIMDcpunopi686
"ARCH_EXT_LIST="$ARCH_EXT_LIST_ARM$ARCH_EXT_LIST_PPC$ARCH_EXT_LIST_X86$ARCH_EXT_LIST_MIPSloongson
"ARCH_FEATURES="aligned_stackfast_64bitfast_clzfast_cmovlocal_aligned_8local_aligned_16local_aligned_32simd_align_16
"BUILTIN_LIST="atomic_cas_ptratomic_compare_exchangemachine_rw_barrierMemoryBarriermm_emptyrdtscsarestartsync_val_compare_and_swap
"
HAVE_LIST_CMDLINE="inline_asmsymveryasm
"HAVE_LIST_PUB="bigendianfast_unalignedincompatible_libav_abi
"HEADERS_LIST="alsa_asoundlib_haltivec_harpa_inet_hasm_types_hcdio_paranoia_hcdio_paranoia_paranoia_hdev_bktr_ioctl_bt848_hdev_bktr_ioctl_meteor_hdev_ic_bt8xx_hdev_video_bktr_ioctl_bt848_hdev_video_meteor_ioctl_meteor_hdirect_hdlfcn_hdxva_hES2_gl_hgsm_hio_hmach_mach_time_hmachine_ioctl_bt848_hmachine_ioctl_meteor_hmalloc_hopenjpeg_1_5_openjpeg_hOpenGL_gl3_hpoll_hsndio_hsoundcard_hsys_mman_hsys_param_hsys_resource_hsys_select_hsys_soundcard_hsys_time_hsys_un_hsys_videoio_htermios_hudplite_hunistd_hwindows_hwinsock2_h
"INTRINSICS_LIST="intrinsics_neon
"MATH_FUNCS="atanfatan2fcbrtcbrtfcosfexp2exp2fexpfisinfisnanldexpfllrintllrintflog2log2flog10flrintlrintfpowfrintroundroundfsinftrunctruncf
"SYSTEM_FUNCS="accessaligned_mallocclock_gettimeclosesocketCommandLineToArgvWCoTaskMemFreeCryptGenRandomdlopenfcntlflt_limforkgetaddrinfogethrtimegetoptGetProcessAffinityMaskGetProcessMemoryInfoGetProcessTimesgetrusagegetservbyportGetSystemTimeAsFileTimegettimeofdayglobglXGetProcAddressgmtime_rinet_atonisattyjack_port_get_latency_rangekbhitlocaltime_rlzo1x_999_compressmach_absolute_timeMapViewOfFilememalignmkstempmmapmprotectnanosleepPeekNamedPipeposix_memalignpthread_cancelsched_getaffinitySetConsoleTextAttributesetmodesetrlimitSleepstrerror_rsysconfsysctlusleepVirtualAllocwglGetProcAddress
"TOOLCHAIN_FEATURES="as_dn_directiveas_funcas_object_archasm_mod_qattribute_may_aliasattribute_packedebp_availableebx_availablegnu_asgnu_windresibm_asminline_asm_labelsinline_asm_nonlocal_labelsinline_asm_direct_symbol_refspragma_deprecatedrsync_contimeoutsymver_asm_labelsymver_gnu_asmvfp_argsxform_asmxmm_clobbers
"TYPES_LIST="CONDITION_VARIABLE_PtrDXVA_PicParams_HEVCsocklen_tstruct_addrinfostruct_group_source_reqstruct_ip_mreq_sourcestruct_ipv6_mreqstruct_pollfdstruct_rusage_ru_maxrssstruct_sctp_event_subscribestruct_sockaddr_in6struct_sockaddr_sa_lenstruct_sockaddr_storagestruct_stat_st_mtim_tv_nsecstruct_v4l2_frmivalenum_discrete
"HAVE_LIST="$ARCH_EXT_LIST$(add_suffix _external $ARCH_EXT_LIST)$(add_suffix _inline   $ARCH_EXT_LIST)$ARCH_FEATURES$ATOMICS_LIST$BUILTIN_LIST$HAVE_LIST_CMDLINE$HAVE_LIST_PUB$HEADERS_LIST$INTRINSICS_LIST$MATH_FUNCS$SYSTEM_FUNCS$THREADS_LIST$TOOLCHAIN_FEATURES$TYPES_LISTatomics_nativedos_pathsdxva2api_cobjdxva2_liblibc_msvcrtlibdc1394_1libdc1394_2makeinfomakeinfo_htmlperlpod2mansdlsection_data_rel_rotexi2htmlthreadsvaapi_x11vdpau_x11xlib
"# options emitted with CONFIG_ prefix but not available on the command line
CONFIG_EXTRA="aandcttablesac3dspaudio_frame_queueaudiodspblockdspbswapdspcabacdvprofileexiffaandctfaanidctfdctdspfmtconvertframe_thread_encodergcryptgolombgplv3h263dsph264chromah264dsph264predh264qpelhpeldsphuffmanhuffyuvdsphuffyuvencdspidctdspiirfilterimdct15intrax8lgplv3llauddspllviddsplpcme_cmpmpeg_ermpegaudiompegaudiodspmpegvideompegvideoencnettlepixblockdspqpeldsprangecoderriffdecriffencrtpdecrtpenc_chainsinewinstartcodetpeldspvideodspvp3dspwma_freqs
"CMDLINE_SELECT="$ARCH_EXT_LIST$CONFIG_LIST$HAVE_LIST_CMDLINE$THREADS_LISTasmcross_compiledebugextra_warningsloggingltooptimizationsrpathstripping
"PATHS_LIST="bindirdatadirdocdirincdirlibdirmandirprefixshlibdir
"CMDLINE_SET="$PATHS_LISTararchasassert_levelbuild_suffixcccpucross_prefixcxxdep_ccdoxygenextra_versiongashost_cchost_cflagshost_ldhost_ldflagshost_libshost_osinstallldlogfilemalloc_prefixnmoptflagspkg_configpkg_config_flagsprogs_suffixrandom_seedranlibsamplesstripsws_max_filter_sizesysincludesysroottarget_exectarget_ostarget_pathtarget_samplestempprefixtoolchainvalgrindyasmexe
"CMDLINE_APPEND="extra_cflagsextra_cxxflagshost_cppflags
"# code dependency declarations# architecture extensionsarmv5te_deps="arm"
armv6_deps="arm"
armv6t2_deps="arm"
armv8_deps="aarch64"
neon_deps_any="aarch64 arm"
intrinsics_neon_deps="neon"
vfp_deps_any="aarch64 arm"
vfpv3_deps="vfp"
setend_deps="arm"map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARMmipsfpu_deps="mips"
mipsdspr1_deps="mips"
mipsdspr2_deps="mips"altivec_deps="ppc"
ppc4xx_deps="ppc"
vsx_deps="ppc"cpunop_deps="i686"
x86_64_select="i686"
x86_64_suggest="fast_cmov"amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
i686_deps="x86"
mmx_deps="x86"
mmxext_deps="mmx"
sse_deps="mmxext"
sse2_deps="sse"
sse3_deps="sse2"
ssse3_deps="sse3"
sse4_deps="ssse3"
sse42_deps="sse4"
avx_deps="sse42"
xop_deps="avx"
fma3_deps="avx"
fma4_deps="avx"
avx2_deps="avx"mmx_external_deps="yasm"
mmx_inline_deps="inline_asm"
mmx_suggest="mmx_external mmx_inline"for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); doeval dep=\$${ext}_depseval ${ext}_external_deps='"${dep}_external"'eval ${ext}_inline_deps='"${dep}_inline"'eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
donealigned_stack_if_any="aarch64 ppc x86"
fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
fast_unaligned_if_any="aarch64 ppc x86"
simd_align_16_if_any="altivec neon sse"# system capabilitiessymver_if_any="symver_asm_label symver_gnu_asm"# threading support
atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
atomics_win32_if="MemoryBarrier"
atomics_native_if_any="$ATOMICS_LIST"
w32threads_deps="atomics_native"
threads_if_any="$THREADS_LIST"# subsystems
dct_select="rdft"
error_resilience_select="me_cmp"
faandct_deps="faan fdctdsp"
faanidct_deps="faan idctdsp"
frame_thread_encoder_deps="encoders threads"
intrax8_select="error_resilience"
mdct_select="fft"
rdft_select="fft"
me_cmp_select="fdctdsp idctdsp pixblockdsp"
mpeg_er_select="error_resilience"
mpegaudio_select="mpegaudiodsp"
mpegaudiodsp_select="dct"
mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"# decoders / encoders
aac_decoder_select="imdct15 mdct sinewin"
aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
aac_latm_decoder_select="aac_decoder aac_latm_parser"
ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
aic_decoder_select="golomb idctdsp"
alac_encoder_select="lpc"
als_decoder_select="bswapdsp"
amrnb_decoder_select="lsp"
amrwb_decoder_select="lsp"
amv_decoder_select="sp5x_decoder exif"
amv_encoder_select="aandcttables mpegvideoenc"
ape_decoder_select="bswapdsp llauddsp"
apng_decoder_select="zlib"
asv1_decoder_select="blockdsp bswapdsp idctdsp"
asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
asv2_decoder_select="blockdsp bswapdsp idctdsp"
asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
atrac1_decoder_select="mdct sinewin"
atrac3_decoder_select="mdct"
atrac3p_decoder_select="mdct sinewin"
avrn_decoder_select="exif"
bink_decoder_select="blockdsp hpeldsp"
binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
cllc_decoder_select="bswapdsp"
comfortnoise_encoder_select="lpc"
cook_decoder_select="audiodsp mdct sinewin"
cscd_decoder_select="lzo"
cscd_decoder_suggest="zlib"
dca_decoder_select="fmtconvert mdct"
dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
dnxhd_decoder_select="blockdsp idctdsp"
dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
dvvideo_decoder_select="dvprofile idctdsp"
dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
dxa_decoder_select="zlib"
eac3_decoder_select="ac3_decoder"
eac3_encoder_select="ac3_encoder"
eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
eatgq_decoder_select="aandcttables"
eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
exr_decoder_select="zlib"
ffv1_decoder_select="golomb rangecoder"
ffv1_encoder_select="rangecoder"
ffvhuff_decoder_select="huffyuv_decoder"
ffvhuff_encoder_select="huffyuv_encoder"
fic_decoder_select="golomb"
flac_decoder_select="golomb"
flac_encoder_select="bswapdsp golomb lpc"
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
flashsv2_encoder_select="zlib"
flashsv2_decoder_select="zlib"
flv_decoder_select="h263_decoder"
flv_encoder_select="h263_encoder"
fourxm_decoder_select="blockdsp bswapdsp"
fraps_decoder_select="bswapdsp huffman"
g2m_decoder_select="blockdsp idctdsp zlib"
g729_decoder_select="audiodsp"
h261_decoder_select="mpeg_er mpegvideo"
h261_encoder_select="aandcttables mpegvideoenc"
h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
h263_encoder_select="aandcttables h263dsp mpegvideoenc"
h263i_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder"
h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
h264_decoder_suggest="error_resilience"
h264_qsv_decoder_deps="libmfx"
h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsv h264_qsv_hwaccel"
hevc_decoder_select="bswapdsp cabac golomb videodsp"
huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
iac_decoder_select="imc_decoder"
imc_decoder_select="bswapdsp fft mdct sinewin"
indeo3_decoder_select="hpeldsp"
interplay_video_decoder_select="hpeldsp"
jpegls_decoder_select="golomb mjpeg_decoder"
jpegls_encoder_select="golomb"
jv_decoder_select="blockdsp"
lagarith_decoder_select="huffyuvdsp"
ljpeg_encoder_select="aandcttables idctdsp"
loco_decoder_select="golomb"
mdec_decoder_select="blockdsp idctdsp mpegvideo"
metasound_decoder_select="lsp mdct sinewin"
mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp"
mjpeg_encoder_select="aandcttables mpegvideoenc"
mjpegb_decoder_select="mjpeg_decoder"
mlp_decoder_select="mlp_parser"
motionpixels_decoder_select="bswapdsp"
mp1_decoder_select="mpegaudio"
mp1float_decoder_select="mpegaudio"
mp2_decoder_select="mpegaudio"
mp2float_decoder_select="mpegaudio"
mp3_decoder_select="mpegaudio"
mp3adu_decoder_select="mpegaudio"
mp3adufloat_decoder_select="mpegaudio"
mp3float_decoder_select="mpegaudio"
mp3on4_decoder_select="mpegaudio"
mp3on4float_decoder_select="mpegaudio"
mpc7_decoder_select="bswapdsp mpegaudiodsp"
mpc8_decoder_select="mpegaudiodsp"
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
mpeg_xvmc_decoder_select="mpeg2video_decoder"
mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder"
msmpeg4v1_decoder_select="h263_decoder"
msmpeg4v2_decoder_select="h263_decoder"
msmpeg4v2_encoder_select="h263_encoder"
msmpeg4v3_decoder_select="h263_decoder"
msmpeg4v3_encoder_select="h263_encoder"
mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
mxpeg_decoder_select="mjpeg_decoder"
nellymoser_decoder_select="mdct sinewin"
nellymoser_encoder_select="audio_frame_queue mdct sinewin"
nuv_decoder_select="idctdsp lzo"
on2avc_decoder_select="mdct"
opus_decoder_deps="swresample"
opus_decoder_select="imdct15"
png_decoder_select="zlib"
png_encoder_select="huffyuvencdsp zlib"
prores_decoder_select="blockdsp idctdsp"
prores_encoder_select="fdctdsp"
qcelp_decoder_select="lsp"
qdm2_decoder_select="mdct rdft mpegaudiodsp"
ra_144_encoder_select="audio_frame_queue lpc audiodsp"
ra_144_decoder_select="audiodsp"
ralf_decoder_select="golomb"
rawvideo_decoder_select="bswapdsp"
rtjpeg_decoder_select="me_cmp"
rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
rv10_encoder_select="h263_encoder"
rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
rv20_encoder_select="h263_encoder"
rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
shorten_decoder_select="golomb"
sipr_decoder_select="lsp"
snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
sonic_decoder_select="golomb rangecoder"
sonic_encoder_select="golomb rangecoder"
sonic_ls_encoder_select="golomb rangecoder"
sp5x_decoder_select="mjpeg_decoder"
svq1_decoder_select="hpeldsp"
svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
svq3_decoder_suggest="zlib"
tak_decoder_select="audiodsp"
theora_decoder_select="vp3_decoder"
thp_decoder_select="mjpeg_decoder"
tiff_decoder_suggest="zlib lzma"
tiff_encoder_suggest="zlib"
truehd_decoder_select="mlp_parser"
truemotion2_decoder_select="bswapdsp"
truespeech_decoder_select="bswapdsp"
tscc_decoder_select="zlib"
twinvq_decoder_select="mdct lsp sinewin"
utvideo_decoder_select="bswapdsp"
utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
vble_decoder_select="huffyuvdsp"
vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
vc1image_decoder_select="vc1_decoder"
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
vp3_decoder_select="hpeldsp vp3dsp videodsp"
vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
vp7_decoder_select="h264pred videodsp"
vp8_decoder_select="h264pred videodsp"
vp9_decoder_select="videodsp vp9_parser"
webp_decoder_select="vp8_decoder"
wmalossless_decoder_select="llauddsp"
wmapro_decoder_select="mdct sinewin wma_freqs"
wmav1_decoder_select="mdct sinewin wma_freqs"
wmav1_encoder_select="mdct sinewin wma_freqs"
wmav2_decoder_select="mdct sinewin wma_freqs"
wmav2_encoder_select="mdct sinewin wma_freqs"
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
wmv1_decoder_select="h263_decoder"
wmv1_encoder_select="h263_encoder"
wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
wmv2_encoder_select="h263_encoder"
wmv3_decoder_select="vc1_decoder"
wmv3image_decoder_select="wmv3_decoder"
zerocodec_decoder_select="zlib"
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"# hardware accelerators
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
dxva2_deps="dxva2api_h"
vaapi_deps="va_va_h"
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
xvmc_deps="X11_extensions_XvMClib_h"h263_vaapi_hwaccel_deps="vaapi"
h263_vaapi_hwaccel_select="h263_decoder"
h263_vdpau_hwaccel_deps="vdpau"
h263_vdpau_hwaccel_select="h263_decoder"
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
h264_dxva2_hwaccel_deps="dxva2"
h264_dxva2_hwaccel_select="h264_decoder"
h264_qsv_hwaccel_deps="libmfx"
h264_vaapi_hwaccel_deps="vaapi"
h264_vaapi_hwaccel_select="h264_decoder"
h264_vda_decoder_deps="vda"
h264_vda_decoder_select="h264_decoder"
h264_vda_hwaccel_deps="vda"
h264_vda_hwaccel_select="h264_decoder"
h264_vda_old_hwaccel_deps="vda"
h264_vda_old_hwaccel_select="h264_decoder"
h264_vdpau_decoder_deps="vdpau"
h264_vdpau_decoder_select="h264_decoder"
h264_vdpau_hwaccel_deps="vdpau"
h264_vdpau_hwaccel_select="h264_decoder"
hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
hevc_dxva2_hwaccel_select="hevc_decoder"
mpeg_vdpau_decoder_deps="vdpau"
mpeg_vdpau_decoder_select="mpeg2video_decoder"
mpeg_xvmc_hwaccel_deps="xvmc"
mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
mpeg1_vdpau_decoder_deps="vdpau"
mpeg1_vdpau_decoder_select="mpeg1video_decoder"
mpeg1_vdpau_hwaccel_deps="vdpau"
mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
mpeg1_xvmc_hwaccel_deps="xvmc"
mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
mpeg2_crystalhd_decoder_select="crystalhd"
mpeg2_dxva2_hwaccel_deps="dxva2"
mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
mpeg2_vaapi_hwaccel_deps="vaapi"
mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
mpeg2_vdpau_hwaccel_deps="vdpau"
mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
mpeg2_xvmc_hwaccel_deps="xvmc"
mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
mpeg4_crystalhd_decoder_select="crystalhd"
mpeg4_vaapi_hwaccel_deps="vaapi"
mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
mpeg4_vdpau_decoder_deps="vdpau"
mpeg4_vdpau_decoder_select="mpeg4_decoder"
mpeg4_vdpau_hwaccel_deps="vdpau"
mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
msmpeg4_crystalhd_decoder_select="crystalhd"
vc1_crystalhd_decoder_select="crystalhd"
vc1_dxva2_hwaccel_deps="dxva2"
vc1_dxva2_hwaccel_select="vc1_decoder"
vc1_vaapi_hwaccel_deps="vaapi"
vc1_vaapi_hwaccel_select="vc1_decoder"
vc1_vdpau_decoder_deps="vdpau"
vc1_vdpau_decoder_select="vc1_decoder"
vc1_vdpau_hwaccel_deps="vdpau"
vc1_vdpau_hwaccel_select="vc1_decoder"
wmv3_crystalhd_decoder_select="crystalhd"
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"# parsers
h264_parser_select="h264_decoder"
hevc_parser_select="hevc_decoder"
mpegvideo_parser_select="mpegvideo"
mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
vc1_parser_select="mpegvideo startcode vc1_decoder"# external libraries
libaacplus_encoder_deps="libaacplus"
libcelt_decoder_deps="libcelt"
libfaac_encoder_deps="libfaac"
libfaac_encoder_select="audio_frame_queue"
libfdk_aac_decoder_deps="libfdk_aac"
libfdk_aac_encoder_deps="libfdk_aac"
libfdk_aac_encoder_select="audio_frame_queue"
libgme_demuxer_deps="libgme"
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
libilbc_decoder_deps="libilbc"
libilbc_encoder_deps="libilbc"
libmodplug_demuxer_deps="libmodplug"
libmp3lame_encoder_deps="libmp3lame"
libmp3lame_encoder_select="audio_frame_queue"
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_select="audio_frame_queue"
libopencore_amrwb_decoder_deps="libopencore_amrwb"
libopenh264_encoder_deps="libopenh264"
libopenjpeg_decoder_deps="libopenjpeg"
libopenjpeg_encoder_deps="libopenjpeg"
libopus_decoder_deps="libopus"
libopus_encoder_deps="libopus"
libopus_encoder_select="audio_frame_queue"
libquvi_demuxer_deps="libquvi"
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
libshine_encoder_deps="libshine"
libshine_encoder_select="audio_frame_queue"
libspeex_decoder_deps="libspeex"
libspeex_encoder_deps="libspeex"
libspeex_encoder_select="audio_frame_queue"
libstagefright_h264_decoder_deps="libstagefright_h264"
libtheora_encoder_deps="libtheora"
libtwolame_encoder_deps="libtwolame"
libvo_aacenc_encoder_deps="libvo_aacenc"
libvo_aacenc_encoder_select="audio_frame_queue"
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
libvorbis_decoder_deps="libvorbis"
libvorbis_encoder_deps="libvorbis"
libvorbis_encoder_select="audio_frame_queue"
libvpx_vp8_decoder_deps="libvpx"
libvpx_vp8_encoder_deps="libvpx"
libvpx_vp9_decoder_deps="libvpx"
libvpx_vp9_encoder_deps="libvpx"
libwavpack_encoder_deps="libwavpack"
libwebp_encoder_deps="libwebp"
libx264_encoder_deps="libx264"
libx264rgb_encoder_deps="libx264"
libx264rgb_encoder_select="libx264_encoder"
libx265_encoder_deps="libx265"
libxavs_encoder_deps="libxavs"
libxvid_encoder_deps="libxvid"
libutvideo_decoder_deps="libutvideo"
libutvideo_encoder_deps="libutvideo"
libzvbi_teletext_decoder_deps="libzvbi"
nvenc_encoder_deps="nvenc"# demuxers / muxers
ac3_demuxer_select="ac3_parser"
asf_demuxer_select="riffdec"
asf_muxer_select="riffenc"
asf_stream_muxer_select="asf_muxer"
avi_demuxer_select="riffdec exif"
avi_muxer_select="riffenc"
avisynth_demuxer_deps="avisynth"
avisynth_demuxer_select="riffdec"
caf_demuxer_select="riffdec"
dash_muxer_select="mp4_muxer"
dirac_demuxer_select="dirac_parser"
dts_demuxer_select="dca_parser"
dtshd_demuxer_select="dca_parser"
dv_demuxer_select="dvprofile"
dv_muxer_select="dvprofile"
dxa_demuxer_select="riffdec"
eac3_demuxer_select="ac3_parser"
f4v_muxer_select="mov_muxer"
flac_demuxer_select="flac_parser"
hds_muxer_select="flv_muxer"
hls_muxer_select="mpegts_muxer"
image2_alias_pix_demuxer_select="image2_demuxer"
image2_brender_pix_demuxer_select="image2_demuxer"
ipod_muxer_select="mov_muxer"
ismv_muxer_select="mov_muxer"
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
matroska_audio_muxer_select="matroska_muxer"
matroska_demuxer_select="riffdec"
matroska_demuxer_suggest="bzlib lzo zlib"
matroska_muxer_select="riffenc"
mmf_muxer_select="riffenc"
mov_demuxer_select="riffdec"
mov_demuxer_suggest="zlib"
mov_muxer_select="riffenc rtpenc_chain"
mp3_demuxer_select="mpegaudio_parser"
mp4_muxer_select="mov_muxer"
mpegts_muxer_select="adts_muxer latm_muxer"
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
mxf_opatom_muxer_select="mxf_muxer"
nut_muxer_select="riffenc"
nuv_demuxer_select="riffdec"
oga_muxer_select="ogg_muxer"
ogg_demuxer_select="golomb"
opus_muxer_select="ogg_muxer"
psp_muxer_select="mov_muxer"
rtp_demuxer_select="sdp_demuxer"
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
rtsp_demuxer_select="http_protocol rtpdec"
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
sap_demuxer_select="sdp_demuxer"
sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
sdp_demuxer_select="rtpdec"
smoothstreaming_muxer_select="ismv_muxer"
spdif_muxer_select="aac_parser"
spx_muxer_select="ogg_muxer"
tak_demuxer_select="tak_parser"
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
vobsub_demuxer_select="mpegps_demuxer"
w64_demuxer_select="wav_demuxer"
w64_muxer_select="wav_muxer"
wav_demuxer_select="riffdec"
wav_muxer_select="riffenc"
webm_muxer_select="riffenc"
wtv_demuxer_select="riffdec"
wtv_muxer_select="riffenc"
xmv_demuxer_select="riffdec"
xwma_demuxer_select="riffdec"# indevs / outdevs
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
alsa_outdev_deps="alsa_asoundlib_h"
avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
avfoundation_indev_select="avfoundation"
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
caca_outdev_deps="libcaca"
decklink_outdev_deps="decklink pthreads"
decklink_outdev_extralibs="-lstdc++"
decklink_indev_deps="decklink pthreads"
decklink_indev_extralibs="-lstdc++"
dshow_indev_deps="IBaseFilter"
dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32"
dv1394_indev_deps="dv1394"
dv1394_indev_select="dv_demuxer"
fbdev_indev_deps="linux_fb_h"
fbdev_outdev_deps="linux_fb_h"
gdigrab_indev_deps="CreateDIBSection"
gdigrab_indev_extralibs="-lgdi32"
gdigrab_indev_select="bmp_decoder"
iec61883_indev_deps="libiec61883"
jack_indev_deps="jack_jack_h sem_timedwait"
lavfi_indev_deps="avfilter"
libcdio_indev_deps="libcdio"
libdc1394_indev_deps="libdc1394"
libv4l2_indev_deps="libv4l2"
openal_indev_deps="openal"
opengl_outdev_deps="opengl"
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
pulse_indev_deps="libpulse"
pulse_outdev_deps="libpulse"
qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
qtkit_indev_select="qtkit"
sdl_outdev_deps="sdl"
sndio_indev_deps="sndio_h"
sndio_outdev_deps="sndio_h"
v4l_indev_deps="linux_videodev_h"
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
vfwcap_indev_extralibs="-lavicap32"
xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
xv_outdev_extralibs="-lXv -lX11 -lXext"
x11grab_indev_deps="x11grab"
x11grab_xcb_indev_deps="libxcb"# protocols
bluray_protocol_deps="libbluray"
ffrtmpcrypt_protocol_deps="!librtmp_protocol"
ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
ffrtmpcrypt_protocol_select="tcp_protocol"
ffrtmphttp_protocol_deps="!librtmp_protocol"
ffrtmphttp_protocol_select="http_protocol"
ftp_protocol_select="tcp_protocol"
gopher_protocol_select="network"
http_protocol_select="tcp_protocol"
httpproxy_protocol_select="tcp_protocol"
https_protocol_select="tls_protocol"
icecast_protocol_select="http_protocol"
librtmp_protocol_deps="librtmp"
librtmpe_protocol_deps="librtmp"
librtmps_protocol_deps="librtmp"
librtmpt_protocol_deps="librtmp"
librtmpte_protocol_deps="librtmp"
libsmbclient_protocol_deps="libsmbclient gplv3"
libssh_protocol_deps="libssh"
mmsh_protocol_select="http_protocol"
mmst_protocol_select="network"
rtmp_protocol_deps="!librtmp_protocol"
rtmp_protocol_select="tcp_protocol"
rtmpe_protocol_select="ffrtmpcrypt_protocol"
rtmps_protocol_deps="!librtmp_protocol"
rtmps_protocol_select="tls_protocol"
rtmpt_protocol_select="ffrtmphttp_protocol"
rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
rtp_protocol_select="udp_protocol"
sctp_protocol_deps="struct_sctp_event_subscribe"
sctp_protocol_select="network"
srtp_protocol_select="rtp_protocol"
tcp_protocol_select="network"
tls_protocol_deps_any="openssl gnutls"
tls_protocol_select="tcp_protocol"
udp_protocol_select="network"
udplite_protocol_select="network"
unix_protocol_deps="sys_un_h"
unix_protocol_select="network"# filters
amovie_filter_deps="avcodec avformat"
aresample_filter_deps="swresample"
ass_filter_deps="libass"
asyncts_filter_deps="avresample"
atempo_filter_deps="avcodec"
atempo_filter_select="rdft"
azmq_filter_deps="libzmq"
blackframe_filter_deps="gpl"
boxblur_filter_deps="gpl"
bs2b_filter_deps="libbs2b"
colormatrix_filter_deps="gpl"
cropdetect_filter_deps="gpl"
delogo_filter_deps="gpl"
deshake_filter_select="pixelutils"
drawtext_filter_deps="libfreetype"
ebur128_filter_deps="gpl"
eq_filter_deps="gpl"
fftfilt_filter_deps="avcodec"
fftfilt_filter_select="rdft"
flite_filter_deps="libflite"
frei0r_filter_deps="frei0r dlopen"
frei0r_src_filter_deps="frei0r dlopen"
fspp_filter_deps="gpl"
geq_filter_deps="gpl"
histeq_filter_deps="gpl"
hqdn3d_filter_deps="gpl"
interlace_filter_deps="gpl"
kerndeint_filter_deps="gpl"
ladspa_filter_deps="ladspa dlopen"
mcdeint_filter_deps="avcodec gpl"
movie_filter_deps="avcodec avformat"
mpdecimate_filter_deps="gpl"
mpdecimate_filter_select="pixelutils"
mptestsrc_filter_deps="gpl"
negate_filter_deps="lut_filter"
perspective_filter_deps="gpl"
pp7_filter_deps="gpl"
ocv_filter_deps="libopencv"
owdenoise_filter_deps="gpl"
pan_filter_deps="swresample"
phase_filter_deps="gpl"
pp_filter_deps="gpl postproc"
pullup_filter_deps="gpl"
removelogo_filter_deps="avcodec avformat swscale"
repeatfields_filter_deps="gpl"
resample_filter_deps="avresample"
sab_filter_deps="gpl swscale"
scale_filter_deps="swscale"
select_filter_select="pixelutils"
smartblur_filter_deps="gpl swscale"
showspectrum_filter_deps="avcodec"
showspectrum_filter_select="rdft"
spp_filter_deps="gpl avcodec"
spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
stereo3d_filter_deps="gpl"
subtitles_filter_deps="avformat avcodec libass"
super2xsai_filter_deps="gpl"
tinterlace_filter_deps="gpl"
vidstabdetect_filter_deps="libvidstab"
vidstabtransform_filter_deps="libvidstab"
pixfmts_super2xsai_test_deps="super2xsai_filter"
tinterlace_merge_test_deps="tinterlace_filter"
tinterlace_pad_test_deps="tinterlace_filter"
uspp_filter_deps="gpl avcodec"
zmq_filter_deps="libzmq"
zoompan_filter_deps="swscale"# examples
avio_reading="avformat avcodec avutil"
avcodec_example_deps="avcodec avutil"
decoding_encoding_example_deps="avcodec avformat avutil"
demuxing_decoding_example_deps="avcodec avformat avutil"
extract_mvs_example_deps="avcodec avformat avutil"
filter_audio_example_deps="avfilter avutil"
filtering_audio_example_deps="avfilter avcodec avformat avutil"
filtering_video_example_deps="avfilter avcodec avformat avutil"
metadata_example_deps="avformat avutil"
muxing_example_deps="avcodec avformat avutil swscale"
qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
remuxing_example_deps="avcodec avformat avutil"
resampling_audio_example_deps="avutil swresample"
scaling_video_example_deps="avutil swscale"
transcode_aac_example_deps="avcodec avformat swresample"
transcoding_example_deps="avfilter avcodec avformat avutil"# libraries, in linking order
avcodec_deps="avutil"
avdevice_deps="avformat avcodec avutil"
avfilter_deps="avutil"
avformat_deps="avcodec avutil"
avresample_deps="avutil"
postproc_deps="avutil gpl"
swresample_deps="avutil"
swscale_deps="avutil"# programs
ffmpeg_deps="avcodec avfilter avformat swresample"
ffmpeg_select="aformat_filter anull_filter atrim_filter format_filternull_filtersetpts_filter trim_filter"
ffplay_deps="avcodec avformat swscale swresample sdl"
ffplay_libs='$sdl_libs'
ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
ffprobe_deps="avcodec avformat"
ffserver_deps="avformat fork sarestart"
ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"# documentation
podpages_deps="perl"
manpages_deps="perl pod2man"
htmlpages_deps="perl"
htmlpages_deps_any="makeinfo_html texi2html"
txtpages_deps="perl makeinfo"
doc_deps_any="manpages htmlpages podpages txtpages"# default parameterslogfile="config.log"# installation paths
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/ffmpeg'
docdir_default='${prefix}/share/doc/ffmpeg'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'# toolchain
ar_default="ar"
cc_default="gcc"
cxx_default="g++"
host_cc_default="gcc"
cp_f="cp -f"
doxygen_default="doxygen"
install="install"
ln_s="ln -s -f"
nm_default="nm -g"
objformat="elf"
pkg_config_default=pkg-config
if ranlib 2>&1 | grep -q "\-D "; thenranlib_default="ranlib -D"
elseranlib_default="ranlib"
fi
strip_default="strip"
yasmexe_default="yasm"
windres_default="windres"# OS
target_os_default=$(tolower $(uname -s))
host_os=$target_os_default# machine
if test "$target_os_default" = aix; thenarch_default=$(uname -p)strip_default="strip -X32_64"
elsearch_default=$(uname -m)
fi
cpu="generic"
intrinsics="none"# configurable options
enable $PROGRAM_LIST
enable $DOCUMENT_LIST
enable $EXAMPLE_LIST
enable $(filter_out avresample $LIBRARY_LIST)
enable strippingenable asm
enable debug
enable doc
enable faan faandct faanidct
enable optimizations
enable runtime_cpudetect
enable safe_bitstream_reader
enable static
enable swscale_alphasws_max_filter_size_default=256
set_default sws_max_filter_size# Enable hwaccels by default.
enable dxva2 vaapi vda vdpau xvmc
enable xlib# build settings
SHFLAGS='-shared -Wl,-soname,$$(@F)'
LIBPREF="lib"
LIBSUF=".a"
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
SLIBPREF="lib"
SLIBSUF=".so"
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
#jason
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'asflags_filter=echo
cflags_filter=echo
ldflags_filter=echoAS_C='-c'
AS_O='-o $@'
CC_C='-c'
CC_E='-E -o $@'
CC_O='-o $@'
CXX_C='-c'
CXX_O='-o $@'
LD_O='-o $@'
LD_LIB='-l%'
LD_PATH='-L'
HOSTCC_C='-c'
HOSTCC_E='-E -o $@'
HOSTCC_O='-o $@'
HOSTLD_O='-o $@'host_libs='-lm'
host_cflags_filter=echo
host_ldflags_filter=echotarget_path='$(CURDIR)'# since the object filename is not given with the -MM flag, the compiler
# is only able to print the basename, and we must add the path ourselves
DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
DEPFLAGS='-MM'# find source path
if test -f configure; thensource_path=.
elsesource_path=$(cd $(dirname "$0"); pwd)echo "$source_path" | grep -q '[[:blank:]]' &&die "Out of tree builds are impossible with whitespace in source path."test -e "$source_path/config.h" &&die "Out of tree builds are impossible with config.h in source dir."
fifor v in "$@"; dor=${v#*=}l=${v%"$r"}r=$(sh_quote "$r")FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
donefind_things(){thing=$1pattern=$2file=$source_path/$3sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
}ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)ALL_COMPONENTS="$BSF_LIST$DECODER_LIST$DEMUXER_LIST$ENCODER_LIST$FILTER_LIST$HWACCEL_LIST$INDEV_LIST$MUXER_LIST$OUTDEV_LIST$PARSER_LIST$PROTOCOL_LIST
"for n in $COMPONENT_LIST; dov=$(toupper ${n%s})_LISTeval enable \$$veval ${n}_if_any="\$$v"
doneenable $ARCH_EXT_LISTdie_unknown(){echo "Unknown option \"$1\"."echo "See $0 --help for available options."exit 1
}print_3_columns() {cat | tr ' ' '\n' | sort | pr -r -3 -t
}show_list() {suffix=_$1shiftecho $* | sed s/$suffix//g | print_3_columnsexit 0
}rand_list(){IFS=', 'set -- $*unset IFSfor thing; docomp=${thing%:*}prob=${thing#$comp}prob=${prob#:}is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LISTecho "prob ${prob:-0.5}"printf '%s\n' $compdone
}do_random(){action=$1shiftrandom_seed=$(awk "BEGIN { srand($random_seed); print srand() }")$action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
}for opt dooptval="${opt#*=}"case "$opt" in--extra-ldflags=*)add_ldflags $optval;;--extra-ldexeflags=*)add_ldexeflags $optval;;--extra-libs=*)add_extralibs $optval;;--disable-devices)disable $INDEV_LIST $OUTDEV_LIST;;--enable-debug=*)debuglevel="$optval";;--disable-programs)disable $PROGRAM_LIST;;--disable-everything)map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST;;--disable-all)map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LISTdisable $LIBRARY_LIST $PROGRAM_LIST doc;;--enable-random|--disable-random)action=${opt%%-random}do_random ${action#--} $COMPONENT_LIST;;--enable-random=*|--disable-random=*)action=${opt%%-random=*}do_random ${action#--} $optval;;--enable-*=*|--disable-*=*)eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"eval list=\$$(toupper $thing)_LISTname=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}list=$(filter "$name" $list)[ "$list" = "" ] && warn "Option $opt did not match anything"$action $list;;--enable-?*|--disable-?*)eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')if is_in $option $COMPONENT_LIST; thentest $action = disable && action=unseteval $action \$$(toupper ${option%s})_LISTelif is_in $option $CMDLINE_SELECT; then$action $optionelsedie_unknown $optfi;;--list-*)NAME="${opt#--list-}"is_in $NAME $COMPONENT_LIST || die_unknown $optNAME=${NAME%s}eval show_list $NAME \$$(toupper $NAME)_LIST;;--help|-h) show_help;;--fatal-warnings) enable fatal_warnings;;*)optname="${opt%%=*}"optname="${optname#--}"optname=$(echo "$optname" | sed 's/-/_/g')if is_in $optname $CMDLINE_SET; theneval $optname='$optval'elif is_in $optname $CMDLINE_APPEND; thenappend $optname "$optval"elsedie_unknown $optfi;;esac
donedisabled logging && logfile=/dev/nullecho "# $0 $FFMPEG_CONFIGURATION" > $logfile
set >> $logfiletest -n "$cross_prefix" && enable cross_compileif enabled cross_compile; thentest -n "$arch" && test -n "$target_os" ||die "Must specify target arch and OS when cross-compiling"
fitest -n "$valgrind" && toolchain="valgrind-memcheck"case "$toolchain" inclang-asan)cc_default="clang"add_cflags  -fsanitize=addressadd_ldflags -fsanitize=address;;clang-tsan)cc_default="clang"add_cflags  -fsanitize=thread -pieadd_ldflags -fsanitize=thread -pie;;clang-usan)cc_default="clang"add_cflags  -fsanitize=undefinedadd_ldflags -fsanitize=undefined;;gcc-asan)cc_default="gcc"add_cflags  -fsanitize=addressadd_ldflags -fsanitize=address;;gcc-tsan)cc_default="gcc"add_cflags  -fsanitize=thread -pie -fPICadd_ldflags -fsanitize=thread -pie -fPIC;;gcc-usan)cc_default="gcc"add_cflags  -fsanitize=undefinedadd_ldflags -fsanitize=undefined;;valgrind-massif)target_exec_default=${valgrind:-"valgrind"}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";;valgrind-memcheck)target_exec_default=${valgrind:-"valgrind"}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";;msvc)# Check whether the current MSVC version needs the C99 converter.# From MSVC 2013 (compiler major version 18) onwards, it does actually# support enough of C99 to build ffmpeg. Default to the new# behaviour if the regexp was unable to match anything, since this# successfully parses the version number of existing supported# versions that require the converter (MSVC 2010 and 2012).cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; thencc_default="cl"elsecc_default="c99wrap cl"fild_default="link"nm_default="dumpbin -symbols"ar_default="lib"target_os_default="win32"# Use a relative path for TMPDIR. This makes sure all the# ffconf temp files are written with a relative path, avoiding# issues with msys/win32 path conversion for MSVC parameters# such as -Fo<file> or -out:<file>.TMPDIR=.;;icl)cc_default="icl"ld_default="xilink"nm_default="dumpbin -symbols"ar_default="xilib"target_os_default="win32"TMPDIR=.;;gcov)add_cflags  -fprofile-arcs -ftest-coverageadd_ldflags -fprofile-arcs -ftest-coverage;;hardened)add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2add_cflags   -fno-strict-overflow -fstack-protector-alladd_ldflags  -Wl,-z,relro -Wl,-z,now;;?*)die "Unknown toolchain $toolchain";;
esacar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
cxx_default="${cross_prefix}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib_default="${cross_prefix}${ranlib_default}"
strip_default="${cross_prefix}${strip_default}"
windres_default="${cross_prefix}${windres_default}"sysinclude_default="${sysroot}/usr/include"set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \target_exec target_os yasmexe
enabled cross_compile || host_cc_default=$cc
set_default host_ccpkg_config_fail_message=""
if ! $pkg_config --version >/dev/null 2>&1; thenwarn "$pkg_config not found, library detection may fail."pkg_config=false
elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; thenpkg_config_fail_message="
Note: When building a static binary, add --pkg-config-flags=\"--static\"."
fiif test $doxygen != $doxygen_default && \! $doxygen --version >/dev/null 2>&1; thenwarn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
fiexesuf() {case $1 inmingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;esac
}EXESUF=$(exesuf $target_os)
HOSTEXESUF=$(exesuf $host_os)# set temporary file name
: ${TMPDIR:=$TEMPDIR}
: ${TMPDIR:=$TMP}
: ${TMPDIR:=/tmp}if [ -n "$tempprefix" ] ; thenmktemp(){echo $tempprefix.${HOSTNAME}.${UID}}
elif ! check_cmd mktemp -u XXXXXX; then# simple replacement for missing mktemp# NOT SAFE FOR GENERAL USEmktemp(){echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"}
fitmpfile(){tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&(set -C; exec > $tmp) 2>/dev/null ||die "Unable to create temporary file in $TMPDIR."append TMPFILES $tmpeval $1=$tmp
}trap 'rm -f -- $TMPFILES' EXITtmpfile TMPASM .asm
tmpfile TMPC   .c
tmpfile TMPCPP .cpp
tmpfile TMPE   $EXESUF
tmpfile TMPH   .h
tmpfile TMPM   .m
tmpfile TMPO   .o
tmpfile TMPS   .S
tmpfile TMPSH  .sh
tmpfile TMPV   .verunset -f mktempchmod +x $TMPE# make sure we can execute files in $TMPDIR
cat > $TMPSH 2>> $logfile <<EOF
#! /bin/sh
EOF
chmod +x $TMPSH >> $logfile 2>&1
if ! $TMPSH >> $logfile 2>&1; thencat <<EOF
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
variable to another directory and make sure that it is not mounted noexec.
EOFdie "Sanity test failed."
fiarmasm_flags(){for flag; docase $flag in# Filter out MSVC cl.exe options from cflags that shouldn't# be passed to gas-preprocessor-M[TD]*)                                            ;;*)                  echo $flag                      ;;esacdone
}ccc_flags(){for flag; docase $flag in-std=c99)           echo -c99                       ;;-mcpu=*)            echo -arch ${flag#*=}           ;;-mieee)             echo -ieee                      ;;-O*|-fast)          echo $flag                      ;;-fno-math-errno)    echo -assume nomath_errno       ;;-g)                 echo -g3                        ;;-Wall)              echo -msg_enable level2         ;;-Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;-Wl,*)              echo $flag                      ;;-f*|-W*)                                            ;;*)                  echo $flag                      ;;esacdone
}cparser_flags(){for flag; docase $flag in-Wno-switch)             echo -Wno-switch-enum ;;-Wno-format-zero-length) ;;-Wdisabled-optimization) ;;-Wno-pointer-sign)       echo -Wno-other ;;*)                       echo $flag ;;esacdone
}msvc_common_flags(){for flag; docase $flag in# In addition to specifying certain flags under the compiler# specific filters, they must be specified here as well or else the# generic catch all at the bottom will print the original flag.-Wall)                ;;-std=c99)             ;;# Common flags-fomit-frame-pointer) ;;-g)                   echo -Z7 ;;-fno-math-errno)      ;;-fno-common)          ;;-fno-signed-zeros)    ;;-fPIC)                ;;-mthumb)              ;;-march=*)             ;;-lz)                  echo zlib.lib ;;-lavifil32)           echo vfw32.lib ;;-lavicap32)           echo vfw32.lib user32.lib ;;-l*)                  echo ${flag#-l}.lib ;;-L*)                  echo -libpath:${flag#-L} ;;*)                    echo $flag ;;esacdone
}msvc_flags(){msvc_common_flags "$@"for flag; docase $flag in-Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \-wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \-wd4152 -wd4324 -we4013 -wd4100 -wd4214 \-wd4554 \-wd4273 -wd4701 ;;esacdone
}icl_flags(){msvc_common_flags "$@"for flag; docase $flag in# Despite what Intel's documentation says -Wall, which is supported# on Windows, does enable remarks so disable them here.-Wall)                echo $flag -Qdiag-disable:remark ;;-std=c99)             echo -Qstd=c99 ;;-flto)                echo -ipo ;;esacdone
}icc_flags(){for flag; docase $flag in-flto)                echo -ipo ;;*)                    echo $flag ;;esacdone
}pgi_flags(){for flag; docase $flag in-flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;-fomit-frame-pointer) echo -Mnoframe ;;-g)                   echo -gopt ;;*)                    echo $flag ;;esacdone
}suncc_flags(){for flag; docase $flag in-march=*|-mcpu=*)case "${flag#*=}" innative)                   echo -xtarget=native       ;;v9|niagara)               echo -xarch=sparc          ;;ultrasparc)               echo -xarch=sparcvis       ;;ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;i586|pentium)             echo -xchip=pentium        ;;i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;pentium3*|c3-2)           echo -xtarget=pentium3     ;;pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;pentium4*)          echo -xtarget=pentium4           ;;prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;*-sse3)             echo -xarch=sse3                 ;;core2)              echo -xarch=ssse3 -xchip=core2   ;;bonnell)                   echo -xarch=ssse3         ;;corei7|nehalem)            echo -xtarget=nehalem     ;;westmere)                  echo -xtarget=westmere    ;;silvermont)                echo -xarch=sse4_2        ;;corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;core-avx*|ivybridge|haswell|broadwell)echo -xarch=avx           ;;amdfam10|barcelona)        echo -xtarget=barcelona   ;;btver1)                    echo -xarch=amdsse4a      ;;btver2|bdver*)             echo -xarch=avx           ;;athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;k8|opteron|athlon64|athlon-fx)echo -xarch=sse2a         ;;athlon*)                   echo -xarch=pentium_proa  ;;esac;;-std=c99)             echo -xc99              ;;-fomit-frame-pointer) echo -xregs=frameptr    ;;-fPIC)                echo -KPIC -xcode=pic32 ;;-W*,*)                echo $flag              ;;-f*-*|-W*|-mimpure-text)                      ;;-shared)              echo -G                 ;;*)                    echo $flag              ;;esacdone
}tms470_flags(){for flag; docase $flag in-march=*|-mcpu=*)case "${flag#*=}" inarmv7-a|cortex-a*)      echo -mv=7a8 ;;armv7-r|cortex-r*)      echo -mv=7r4 ;;armv7-m|cortex-m*)      echo -mv=7m3 ;;armv6*|arm11*)          echo -mv=6   ;;armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])echo -mv=5e  ;;armv4*|arm7*|arm9[24]*) echo -mv=4   ;;esac;;-mfpu=neon)     echo --float_support=vfpv3 --neon ;;-mfpu=vfp)      echo --float_support=vfpv2        ;;-mfpu=vfpv3)    echo --float_support=vfpv3        ;;-mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;-msoft-float)   echo --float_support=vfplib       ;;-O[0-3]|-mf=*)  echo $flag                        ;;-g)             echo -g -mn                       ;;-pds=*)         echo $flag                        ;;-D*|-I*)        echo $flag                        ;;--gcc|--abi=*)  echo $flag                        ;;-me)            echo $flag                        ;;esacdone
}probe_cc(){pfx=$1_cc=$2unset _type _ident _cc_c _cc_e _cc_o _flags _cflagsunset _ld_o _ldflags _ld_lib _ld_pathunset _depflags _DEPCMD _DEPFLAGS_flags_filter=echoif $_cc --version 2>&1 | grep -q '^GNU assembler'; thentrue # no-op to avoid reading stdin in following checkselif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then_type=llvm_gccgcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')_ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"_depflags='-MMD -MF $(@:.o=.d) -MT $@'_cflags_speed='-O3'_cflags_size='-Os'elif $_cc -v 2>&1 | grep -qi ^gcc; then_type=gccgcc_version=$($_cc --version | head -n1)gcc_basever=$($_cc -dumpversion)gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")if ! $_cc -dumpversion | grep -q '^2\.'; then_depflags='-MMD -MF $(@:.o=.d) -MT $@'fi_cflags_speed='-O3'_cflags_size='-Os'elif $_cc --version 2>/dev/null | grep -q ^icc; then_type=icc_ident=$($_cc --version | head -n1)_depflags='-MMD'_cflags_speed='-O3'_cflags_size='-Os'_cflags_noopt='-O1'_flags_filter=icc_flagselif $_cc -v 2>&1 | grep -q xlc; then_type=xlc_ident=$($_cc -qversion 2>/dev/null | head -n1)_cflags_speed='-O5'_cflags_size='-O5 -qcompact'elif $_cc -V 2>/dev/null | grep -q Compaq; then_type=ccc_ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)_DEPFLAGS='-M'_cflags_speed='-fast'_cflags_size='-O1'_flags_filter=ccc_flagselif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; thentest -d "$sysroot" || die "No valid sysroot specified."_type=armcc_ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')armcc_conf="$PWD/armcc.conf"$_cc --arm_linux_configure                 \--arm_linux_config_file="$armcc_conf" \--configure_sysroot="$sysroot"        \--configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||die "Error creating armcc configuration file."$_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc_flags="--arm_linux_config_file=$armcc_conf --translate_gcc"as_default="${cross_prefix}gcc"_depflags='-MMD'_cflags_speed='-O3'_cflags_size='-Os'elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then_type=tms470_ident=$($_cc -version | head -n1 | tr -s ' ')_flags='--gcc --abi=eabi -me'_cc_e='-ppl -fe=$@'_cc_o='-fe=$@'_depflags='-ppa -ppd=$(@:.o=.d)'_cflags_speed='-O3 -mf=5'_cflags_size='-O3 -mf=2'_flags_filter=tms470_flagselif $_cc -v 2>&1 | grep -q clang; then_type=clang_ident=$($_cc --version | head -n1)_depflags='-MMD -MF $(@:.o=.d) -MT $@'_cflags_speed='-O3'_cflags_size='-Os'elif $_cc -V 2>&1 | grep -q Sun; then_type=suncc_ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)_DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'_DEPFLAGS='-xM1 -xc99'_ldflags='-std=c99'_cflags_speed='-O5'_cflags_size='-O5 -xspace'_flags_filter=suncc_flagselif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then_type=pathscale_ident=$($_cc -v 2>&1 | head -n1 | tr -d :)_depflags='-MMD -MF $(@:.o=.d) -MT $@'_cflags_speed='-O2'_cflags_size='-Os'_flags_filter='filter_out -Wdisabled-optimization'elif $_cc -v 2>&1 | grep -q Open64; then_type=open64_ident=$($_cc -v 2>&1 | head -n1 | tr -d :)_depflags='-MMD -MF $(@:.o=.d) -MT $@'_cflags_speed='-O2'_cflags_size='-Os'_flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'elif $_cc -V 2>&1 | grep -q Portland; then_type=pgi_ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"opt_common='-alias=ansi -Mdse -Mlre -Mpre'_cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"_cflags_size="-O2 -Munroll=c:1 $opt_common"_cflags_noopt="-O"_flags_filter=pgi_flagselif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then_type=armasm_ident=$($_cc | head -n1)# 4509: "This form of conditional instruction is deprecated"_flags="-nologo -ignore 4509"_flags_filter=armasm_flagselif $_cc 2>&1 | grep -q Intel; then_type=icl_ident=$($cc 2>&1 | head -n1)_depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'# Not only is O3 broken on 13.x+ but it is slower on all previous# versions (tested) as well._cflags_speed="-O2"_cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuffif $_cc 2>&1 | grep -q Linker; then_ld_o='-out:$@'else_ld_o='-Fe$@'fi_cc_o='-Fo$@'_cc_e='-P'_flags_filter=icl_flags_ld_lib='lib%.a'_ld_path='-libpath:'# -Qdiag-error to make icl error when seeing certain unknown arguments_flags='-nologo -Qdiag-error:4044,10157'# -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency# with MSVC which enables it by default._cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'if [ $pfx = hostcc ]; thenappend _cflags -Dsnprintf=_snprintffidisable strippingelif $_cc 2>&1 | grep -q Microsoft; then_type=msvc_ident=$($cc 2>&1 | head -n1)_DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'_DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'_cflags_speed="-O2"_cflags_size="-O1"if $_cc 2>&1 | grep -q Linker; then_ld_o='-out:$@'else_ld_o='-Fe$@'fi_cc_o='-Fo$@'_cc_e='-P -Fi$@'_flags_filter=msvc_flags_ld_lib='lib%.a'_ld_path='-libpath:'_flags='-nologo'_cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'if [ $pfx = hostcc ]; thenappend _cflags -Dsnprintf=_snprintffidisable strippingelif $_cc --version 2>/dev/null | grep -q ^cparser; then_type=cparser_ident=$($_cc --version | head -n1)_depflags='-MMD'_cflags_speed='-O4'_cflags_size='-O2'_flags_filter=cparser_flagsfieval ${pfx}_type=\$_typeeval ${pfx}_ident=\$_ident
}set_ccvars(){eval ${1}_C=\${_cc_c-\${${1}_C}}eval ${1}_E=\${_cc_e-\${${1}_E}}eval ${1}_O=\${_cc_o-\${${1}_O}}if [ -n "$_depflags" ]; theneval ${1}_DEPFLAGS=\$_depflagselseeval ${1}DEP=\${_DEPCMD:-\$DEPCMD}eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}eval DEP${1}FLAGS=\$_flagsfi
}probe_cc cc "$cc"
cflags_filter=$_flags_filter
cflags_speed=$_cflags_speed
cflags_size=$_cflags_size
cflags_noopt=$_cflags_noopt
add_cflags $_flags $_cflags
cc_ldflags=$_ldflags
set_ccvars CCprobe_cc hostcc "$host_cc"
host_cflags_filter=$_flags_filter
add_host_cflags  $_flags $_cflags
set_ccvars HOSTCCtest -n "$cc_type" && enable $cc_type ||warn "Unknown C compiler $cc, unable to select optimal CFLAGS": ${as_default:=$cc}
: ${dep_cc_default:=$cc}
: ${ld_default:=$cc}
: ${host_ld_default:=$host_cc}
set_default ar as dep_cc ld host_ld windresprobe_cc as "$as"
asflags_filter=$_flags_filter
add_asflags $_flags $_cflags
set_ccvars ASprobe_cc ld "$ld"
ldflags_filter=$_flags_filter
add_ldflags $_flags $_ldflags
test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
LD_O=${_ld_o-$LD_O}
LD_LIB=${_ld_lib-$LD_LIB}
LD_PATH=${_ld_path-$LD_PATH}probe_cc hostld "$host_ld"
host_ldflags_filter=$_flags_filter
add_host_ldflags $_flags $_ldflags
HOSTLD_O=${_ld_o-$HOSTLD_O}if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; thenprobe_cc depcc "$dep_cc"CCDEP=${_DEPCMD:-$DEPCMD}CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}DEPCCFLAGS=$_flags
fiif $ar 2>&1 | grep -q Microsoft; thenarflags="-nologo"ar_o='-out:$@'
elif $ar 2>&1 | grep -q 'Texas Instruments'; thenarflags="rq"ar_o='$@'
elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; thenarflags='-Xany -r -c'ar_o='$@'
elif $ar 2>&1 | grep -q "\[D\] "; thenarflags="rcD"ar_o='$@'
elsearflags="rc"ar_o='$@'
fiadd_cflags $extra_cflags
add_cxxflags $extra_cxxflags
add_asflags $extra_cflagsif test -n "$sysroot"; thencase "$cc_type" ingcc|llvm_gcc|clang)add_cppflags --sysroot="$sysroot"add_ldflags --sysroot="$sysroot"
# On Darwin --sysroot may be ignored, -isysroot always affects headers and linkingadd_cppflags -isysroot "$sysroot"add_ldflags -isysroot "$sysroot";;tms470)add_cppflags -I"$sysinclude"add_ldflags  --sysroot="$sysroot";;esac
fiif test "$cpu" = host; thenenabled cross_compile &&die "--cpu=host makes no sense when cross-compiling."case "$cc_type" ingcc|llvm_gcc)check_native(){$cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || returnsed -n "/cc1.*$1=/{s/.*$1=\\([^ ]*\\).*/\\1/pq}" $TMPE}cpu=$(check_native -march || check_native -mcpu);;esactest "${cpu:-host}" = host &&die "--cpu=host not supported with compiler $cc"
fi# Deal with common $arch aliases
case "$arch" inaarch64|arm64)arch="aarch64";;arm*|iPad*|iPhone*)arch="arm";;mips*|IP*)arch="mips";;parisc*|hppa*)arch="parisc";;"Power Macintosh"|ppc*|powerpc*)arch="ppc";;s390|s390x)arch="s390";;sh4|sh)arch="sh4";;sun4u|sparc*)arch="sparc";;tilegx|tile-gx)arch="tilegx";;i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)arch="x86";;
esacis_in $arch $ARCH_LIST || warn "unknown architecture $arch"
enable $arch# Add processor-specific flags
if enabled aarch64; thencase $cpu inarmv*)cpuflags="-march=$cpu";;*)cpuflags="-mcpu=$cpu";;esacelif enabled alpha; thencpuflags="-mcpu=$cpu"elif enabled arm; thencheck_arm_arch() {check_cpp_condition stddef.h \"defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \$cpuflags}probe_arm_arch() {if   check_arm_arch 4;        then echo armv4;elif check_arm_arch 4T;       then echo armv4t;elif check_arm_arch 5;        then echo armv5;elif check_arm_arch 5E;       then echo armv5e;elif check_arm_arch 5T;       then echo armv5t;elif check_arm_arch 5TE;      then echo armv5te;elif check_arm_arch 5TEJ;     then echo armv5te;elif check_arm_arch 6;        then echo armv6;elif check_arm_arch 6J;       then echo armv6j;elif check_arm_arch 6K;       then echo armv6k;elif check_arm_arch 6Z;       then echo armv6z;elif check_arm_arch 6ZK;      then echo armv6zk;elif check_arm_arch 6T2;      then echo armv6t2;elif check_arm_arch 7;        then echo armv7;elif check_arm_arch 7A  7_A;  then echo armv7-a;elif check_arm_arch 7R  7_R;  then echo armv7-r;elif check_arm_arch 7M  7_M;  then echo armv7-m;elif check_arm_arch 7EM 7E_M; then echo armv7-m;elif check_arm_arch 8A  8_A;  then echo armv8-a;fi}[ "$cpu" = generic ] && cpu=$(probe_arm_arch)case $cpu inarmv*)cpuflags="-march=$cpu"subarch=$(echo $cpu | sed 's/[^a-z0-9]//g');;*)cpuflags="-mcpu=$cpu"case $cpu incortex-a*)                               subarch=armv7a  ;;cortex-r*)                               subarch=armv7r  ;;cortex-m*)                 enable thumb; subarch=armv7m  ;;arm11*)                                  subarch=armv6   ;;arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;*)                             subarch=$(probe_arm_arch) ;;esac;;esaccase "$subarch" inarmv5t*)    enable fast_clz                ;;armv[6-8]*)enable fast_clzdisabled fast_unaligned || enable fast_unaligned;;esacelif enabled avr32; thencase $cpu inap7[02]0[0-2])subarch="avr32_ap"cpuflags="-mpart=$cpu";;ap)subarch="avr32_ap"cpuflags="-march=$cpu";;uc3[ab]*)subarch="avr32_uc"cpuflags="-mcpu=$cpu";;uc)subarch="avr32_uc"cpuflags="-march=$cpu";;esacelif enabled bfin; thencpuflags="-mcpu=$cpu"elif enabled mips; thencpuflags="-march=$cpu"case $cpu in24kc)disable mipsfpudisable mipsdspr1disable mipsdspr2;;24kf*)disable mipsdspr1disable mipsdspr2;;24kec|34kc|1004kc)disable mipsfpudisable mipsdspr2;;24kef*|34kf*|1004kf*)disable mipsdspr2;;74kc)disable mipsfpu;;esacelif enabled ppc; thendisable ldbrxdisable vsxcase $(tolower $cpu) in601|ppc601|powerpc601)cpuflags="-mcpu=601"disable altivec;;603*|ppc603*|powerpc603*)cpuflags="-mcpu=603"disable altivec;;604*|ppc604*|powerpc604*)cpuflags="-mcpu=604"disable altivec;;g3|75*|ppc75*|powerpc75*)cpuflags="-mcpu=750"disable altivec;;g4|745*|ppc745*|powerpc745*)cpuflags="-mcpu=7450";;74*|ppc74*|powerpc74*)cpuflags="-mcpu=7400";;g5|970|ppc970|powerpc970)cpuflags="-mcpu=970";;power[3-8]*)cpuflags="-mcpu=$cpu";;cell)cpuflags="-mcpu=cell"enable ldbrx;;e500mc)cpuflags="-mcpu=e500mc"disable altivec;;e500v2)cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"disable altivecdisable dcbzl;;e500)cpuflags="-mcpu=8540 -mhard-float"disable altivecdisable dcbzl;;esacelif enabled sparc; thencase $cpu incypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])cpuflags="-mcpu=$cpu";;ultrasparc*|niagara[234])cpuflags="-mcpu=$cpu";;esacelif enabled x86; thencase $cpu ini[345]86|pentium)cpuflags="-march=$cpu"disable i686disable mmx;;# targets that do NOT support nopl and conditional mov (cmov)pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)cpuflags="-march=$cpu"disable i686;;# targets that do support nopl and conditional mov (cmov)i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\|core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)cpuflags="-march=$cpu"enable i686enable fast_cmov;;# targets that do support conditional mov but on which it's slowpentium4|pentium4m|prescott|nocona)cpuflags="-march=$cpu"enable i686disable fast_cmov;;esacfiif [ "$cpu" != generic ]; thenadd_cflags  $cpuflagsadd_asflags $cpuflags
fi# compiler sanity check
check_exec <<EOF
int main(void){ return 0; }
EOF
if test "$?" != 0; thenecho "$cc is unable to create an executable file."if test -z "$cross_prefix" && ! enabled cross_compile ; thenecho "If $cc is a cross-compiler, use the --enable-cross-compile option."echo "Only do this if you know what cross compiling means."fidie "C compiler test failed."
fiadd_cppflags -D_ISOC99_SOURCE
add_cxxflags -D__STDC_CONSTANT_MACROS
check_cflags -std=c99
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
#include <stdlib.h>
EOF
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
#include <stdlib.h>
EOFadd_host_cppflags -D_ISOC99_SOURCE
check_host_cflags -std=c99
check_host_cflags -Wall
check_host_cflags -O3check_64bit(){arch32=$1arch64=$2expr=$3check_code cc "" "int test[2*($expr) - 1]" &&subarch=$arch64 || subarch=$arch32
}case "$arch" inaarch64|alpha|ia64)spic=$shared;;mips)check_64bit mips mips64 '_MIPS_SIM > 1'spic=$shared;;parisc)check_64bit parisc parisc64 'sizeof(void *) > 4'spic=$shared;;ppc)check_64bit ppc ppc64 'sizeof(void *) > 4'spic=$shared;;s390)check_64bit s390 s390x 'sizeof(void *) > 4'spic=$shared;;sparc)check_64bit sparc sparc64 'sizeof(void *) > 4'spic=$shared;;x86)check_64bit x86_32 x86_64 'sizeof(void *) > 4'# Treat x32 as x64 for now. Note it also needs spic=$sharedtest "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&subarch=x86_64if test "$subarch" = "x86_64"; thenspic=$sharedfi;;ppc)check_cc <<EOF && subarch="ppc64"int test[(int)sizeof(char*) - 7];
EOF;;
esacenable $subarch
enabled spic && enable_weak pic# OS specific
case $target_os inaix)SHFLAGS=-sharedadd_cppflags '-I\$(SRC_PATH)/compat/aix'enabled shared && add_ldflags -Wl,-brtl;;android)disable symverenable section_data_rel_roSLIB_INSTALL_NAME='$(SLIBNAME)'SLIB_INSTALL_LINKS=# soname not set on purposeSHFLAGS=-shared;;haiku)prefix_default="/boot/common"network_extralibs="-lnetwork"host_libs=;;sunos)SHFLAGS='-shared -Wl,-h,$$(@F)'enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"network_extralibs="-lsocket -lnsl"# When using suncc to build, the Solaris linker will mark# an executable with each instruction set encountered by# the Solaris assembler.  As our libraries contain their own# guards for processor-specific code, instead suppress# generation of the HWCAPS ELF section on Solaris x86 only.enabled_all suncc x86 &&echo "hwcap_1 = OVERRIDE;" > mapfile &&add_ldflags -Wl,-M,mapfilenm_default='nm -P -g';;netbsd)disable symveross_indev_extralibs="-lossaudio"oss_outdev_extralibs="-lossaudio"enabled gcc || check_ldflags -Wl,-zmuldefs;;openbsd|bitrig)disable symverSHFLAGS='-shared'SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'SLIB_INSTALL_LINKS=oss_indev_extralibs="-lossaudio"oss_outdev_extralibs="-lossaudio";;dragonfly)disable symver;;freebsd);;bsd/os)add_extralibs -lpoll -lgnugetoptstrip="strip -d";;darwin)enabled ppc && add_asflags -force_cpusubtype_ALLSHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppressstrip="${strip} -x"add_ldflags -Wl,-dynamic,-search_paths_firstSLIBSUF=".dylib"SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'objformat="macho"enabled x86_64 && objformat="macho64"enabled_any pic shared x86_64 ||{ check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; };;mingw32*)if test $target_os = "mingw32ce"; thendisable networkelsetarget_os=mingw32fiLIBTARGET=i386if enabled x86_64; thenLIBTARGET="i386:x86-64"elif enabled arm; thenLIBTARGET=arm-wincefienabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windrescheck_ldflags -Wl,--nxcompatcheck_ldflags -Wl,--dynamicbaseenabled x86_32 && check_ldflags -Wl,--large-address-awareshlibdir_default="$bindir_default"SLIBPREF=""SLIBSUF=".dll"SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'dlltool="${cross_prefix}dlltool"if check_cmd lib.exe -list; thenSLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'if enabled x86_64; thenLIBTARGET=x64fielif check_cmd $dlltool --version; thenSLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'fiSLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS=SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'objformat="win32"ranlib=:enable dos_paths;;win32|win64)disable symverif enabled shared; then# Link to the import library instead of the normal static library# for shared libs.LD_LIB='%.lib'# Cannot build both shared and static libs with MSVC or icl.disable staticfienabled x86_32 && check_ldflags -LARGEADDRESSAWAREshlibdir_default="$bindir_default"SLIBPREF=""SLIBSUF=".dll"SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS=SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'objformat="win32"ranlib=:enable dos_paths;;cygwin*)target_os=cygwinshlibdir_default="$bindir_default"SLIBPREF="cyg"SLIBSUF=".dll"SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS=SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'objformat="win32"enable dos_pathsenabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres;;*-dos|freedos|opendos)network_extralibs="-lsocket"objformat="coff"enable dos_pathsadd_cppflags -U__STRICT_ANSI__;;linux)enable dv1394enable section_data_rel_ro;;irix*)target_os=irixranlib="echo ignoring ranlib";;os/2*)strip="lxlite -CS"ln_s="cp -f"objformat="aout"add_cppflags -D_GNU_SOURCEadd_ldflags -Zomf -Zbin-files -Zargs-wild -ZmapSHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'LIBSUF="_s.a"SLIBPREF=""SLIBSUF=".dll"SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \echo PROTMODE >> $(SUBDIR)$(NAME).def; \echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \echo EXPORTS >> $(SUBDIR)$(NAME).def; \emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'enable dos_pathsenable_weak os2threads;;gnu/kfreebsd)add_cppflags -D_BSD_SOURCE;;gnu);;qnx)add_cppflags -D_QNX_SOURCEnetwork_extralibs="-lsocket";;symbian)SLIBSUF=".dll"enable dos_pathsadd_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=defaultadd_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALSadd_ldflags -Wl,--target1-abs,--no-undefined \-Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \-Wl,--entry=_E32Startup -Wl,-u,_E32Startupadd_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \-l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \-l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib;;osf1)add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT;;minix);;plan9)add_cppflags -D_C99_SNPRINTF_EXTENSION  \-D_REENTRANT_SOURCE        \-D_RESEARCH_SOURCE         \-DFD_SETSIZE=96            \-DHAVE_SOCK_OPTSadd_compat strtod.o strtod=avpriv_strtodnetwork_extralibs='-lbsd'exeobjs=compat/plan9/main.odisable ffservercp_f='cp';;none);;*)die "Unknown OS '$target_os'.";;
esac# determine libc flavourprobe_libc(){pfx=$1pfx_no_=${pfx%_}# uclibc defines __GLIBC__, so it needs to be checked before glibc.if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; theneval ${pfx}libc_type=uclibcadd_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; theneval ${pfx}libc_type=glibcadd_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600# MinGW headers can be installed on Cygwin, so check for newlib first.elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; theneval ${pfx}libc_type=newlibadd_${pfx}cppflags -U__STRICT_ANSI__# MinGW64 is backwards compatible with MinGW32, so check for it first.elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; theneval ${pfx}libc_type=mingw64if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; thenadd_compat msvcrt/snprintf.oadd_cflags "-include $source_path/compat/msvcrt/snprintf.h"fiadd_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1eval test \$${pfx_no_}cc_type = "gcc" &&add_${pfx}cppflags -D__printf__=__gnu_printf__elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; theneval ${pfx}libc_type=mingw32check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \(__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||die "ERROR: MinGW32 runtime version must be >= 3.15."add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1eval test \$${pfx_no_}cc_type = "gcc" &&add_${pfx}cppflags -D__printf__=__gnu_printf__elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; theneval ${pfx}libc_type=msvcrt# The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to# 0x601 by default unless something else is set by the user.# This can easily lead to us detecting functions only present# in such new versions and producing binaries requiring windows 7.0.# Therefore explicitly set the default to XP unless the user has# set something else on the command line.check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||add_${pfx}cppflags -D_WIN32_WINNT=0x0502elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; theneval ${pfx}libc_type=klibcelif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; theneval ${pfx}libc_type=bionicelif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; theneval ${pfx}libc_type=solarisadd_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600ficheck_${pfx}cc <<EOF
#include <time.h>
void *v = localtime_r;
EOF
test "$?" != 0 && check_${pfx}cc -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 <<EOF && add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
#include <time.h>
void *v = localtime_r;
EOF}probe_libc
test -n "$libc_type" && enable libc_$libc_type
probe_libc host_
test -n "$host_libc_type" && enable host_libc_$host_libc_typecase $libc_type inbionic)add_compat strtod.o strtod=avpriv_strtod;;msvcrt)add_compat strtod.o strtod=avpriv_strtodadd_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \_snprintf=avpriv_snprintf  \vsnprintf=avpriv_vsnprintf;;
esac# hacks for compiler/libc/os combinationsif enabled_all tms470 libc_glibc; thenCPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"add_cppflags -D__USER_LABEL_PREFIX__=add_cppflags -D__builtin_memset=memsetadd_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINEDadd_cflags   -pds=48    # incompatible redefinition of macro
fiif enabled_all ccc libc_glibc; thenadd_ldflags -Wl,-z,now  # calls to libots crash without this
ficheck_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||add_cppflags '-I\$(SRC_PATH)/compat/float'esc(){echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
}echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fatecheck_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak picset_default libdir
: ${shlibdir_default:="$libdir"}set_default $PATHS_LIST
set_default nm# we need to build at least one lib type
if ! enabled_any static shared; thencat <<EOF
At least one library type must be built.
Specify --enable-static to build the static libraries or --enable-shared to
build the shared libraries as well. To only build the shared libraries specify
--disable-static in addition to --enable-shared.
EOFexit 1;
fidie_license_disabled() {enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
}die_license_disabled_gpl() {enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
}die_license_disabled gpl frei0r
die_license_disabled gpl libcdio
die_license_disabled gpl libsmbclient
die_license_disabled gpl libutvideo
die_license_disabled gpl libvidstab
die_license_disabled gpl libx264
die_license_disabled gpl libx265
die_license_disabled gpl libxavs
die_license_disabled gpl libxvid
die_license_disabled gpl libzvbi
die_license_disabled gpl x11grabdie_license_disabled nonfree libaacplus
die_license_disabled nonfree libfaac
die_license_disabled nonfree nvenc
enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
enabled gpl && die_license_disabled_gpl nonfree openssldie_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
die_license_disabled version3 libsmbclient
die_license_disabled version3 libvo_aacenc
die_license_disabled version3 libvo_amrwbencenabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }disabled optimizations || check_cflags -fomit-frame-pointerenable_weak_pic() {disabled pic && returnenable picadd_cppflags -DPICcase "$target_os" inmingw*|cygwin*);;*)add_cflags -fPIC;;esacadd_asflags  -fPIC
}enabled pic && enable_weak_piccheck_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
extern_prefix=${sym%%ff_extern*}check_cc <<EOF && enable_weak inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF_restrict=
for restrict_keyword in restrict __restrict__ __restrict; docheck_cc <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
donecheck_cc <<EOF && enable pragma_deprecated
void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
EOFcheck_cc <<EOF && enable attribute_packed
struct { int x; } __attribute__((packed)) x;
EOFcheck_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOFcheck_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendianif  [ "$cpu" = "power7" ] || [ "$cpu" = "power8" ] || enabled ppc64; thenif ! enabled bigendian && enabled altivec ;thenenable vsxfi
ficheck_gas() {log "check_gas using '$as' as AS"# :vararg is used on aarch64, arm and ppc altiveccheck_as <<EOF || return 1
.macro m n, y:vararg=0
\n: .int \y
.endm
m x
EOF# .altmacro is only used in arm asm! enabled arm || check_as <<EOF || return 1
.altmacro
EOFenable gnu_asreturn 0
}if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; thennogas=:enabled_any arm aarch64 && nogas=dieenabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warnas_noop=-vcase $as_type inarm*) gaspp_as_type=armasm; as_noop=-h ;;gcc)  gaspp_as_type=gas ;;*)    gaspp_as_type=$as_type ;;esac[ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"test "${as#*gas-preprocessor.pl}" != "$as" ||check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"if ! check_gas ; thenas=${gas:=$as}check_gas || \$nogas "GNU assembler not found, install/update gas-preprocessor"ficheck_as <<EOF && enable as_func
.func test
.endfunc
EOF
ficheck_inline_asm inline_asm_labels '"1:\n"'check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'if enabled aarch64; thenenabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'# internal assembler in clang 3.3 does not support this instructionenabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARMelif enabled alpha; thencheck_cflags -mieeeelif enabled arm; thencheck_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
float func(float a, float b){ return a+b; }
EOFenabled thumb && check_cflags -mthumb || check_cflags -marmif     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; thenenable vfp_argselif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; thencase "${cross_prefix:-$cc}" in*hardfloat*)         enable vfp_args;   fpabi=vfp ;;*) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOFesacwarn "Compiler does not indicate floating-point ABI, guessing $fpabi."fienabled armv5te && check_insn armv5te 'qadd r0, r0, r0'enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'enabled armv6t2 && check_insn armv6t2 'movt r0, #0'enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'enabled vfp     && check_insn vfp     'fadds s0, s0, s0'enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'enabled setend  && check_insn setend  'setend be'[ $target_os = linux ] || [ $target_os = android ] ||map 'enabled_any ${v}_external ${v}_inline || disable $v' \$ARCH_EXT_LIST_ARMcheck_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'check_as <<EOF && enable as_dn_directive
ra .dn d0.i16
.unreq ra
EOF# llvm's integrated assembler supports .object_arch from llvm 3.5[ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
.object_arch armv4
EOF[ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_picelif enabled mips; thencheck_inline_asm loongson '"dmult.g $1, $2, $3"'# Enable minimum ISA based on selected optionsif enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); thenadd_cflags "-mips64r2"add_asflags "-mips64r2"elif enabled mips64 && enabled mipsfpu; thenadd_cflags "-mips64"add_asflags "-mips64"elif enabled mipsfpu || enabled mipsdspr1 || enabled mipsdspr2; thenadd_cflags "-mips32r2"add_asflags "-mips32r2"fienabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'elif enabled parisc; thenif enabled gcc; thencase $($cc -dumpversion) in4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;esacfielif enabled ppc; thenenable local_aligned_8 local_aligned_16 local_aligned_32check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'check_inline_asm ibm_asm   '"add 0, 0, 0"'check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'# AltiVec flags: The FSF version of GCC differs from the Apple versionif enabled altivec; thencheck_cflags -maltivec -mabi=altivec &&{ check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||check_cflags -faltivec# check if our compiler supports Motorola AltiVec C APIcheck_cc <<EOF || disable altivec
$inc_altivec_h
int main(void) {vector signed int v1 = (vector signed int) { 0 };vector signed int v2 = (vector signed int) { 1 };v1 = vec_add(v1, v2);return 0;
}
EOFenabled altivec || warn "Altivec disabled, possibly missing --cpu flag"fiif enabled vsx; thencheck_cflags -mvsxfi
elif enabled x86; thencheck_builtin rdtsc    intrin.h   "__rdtsc()"check_builtin mm_empty mmintrin.h "_mm_empty()"enable local_aligned_8 local_aligned_16 local_aligned_32# check whether EBP is available on x86# As 'i' is stored on the stack, this program will crash# if the base pointer is used to access it because the# base pointer is cleared in the inline assembly code.check_exec_crash <<EOF && enable ebp_available
volatile int i=0;
__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
return i;
EOF# check whether EBX is available on x86check_inline_asm ebx_available '""::"b"(0)' &&check_inline_asm ebx_available '"":::"%ebx"'# check whether xmm clobbers are supportedcheck_inline_asm xmm_clobbers '"":::"%xmm0"'check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'# check whether binutils is new enough to compile SSSE3/MMXEXTenabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'if ! disabled_any asm mmx yasm; thenif check_cmd $yasmexe --version; thenenabled x86_64 && yasm_extra="-m amd64"yasm_debug="-g dwarf2"elif check_cmd nasm -v; thenyasmexe=nasmyasm_debug="-g -F dwarf"if enabled x86_64; thencase "$objformat" inelf)   objformat=elf64 ;;win32) objformat=win64 ;;esacfifiYASMFLAGS="-f $objformat $yasm_extra"enabled pic               && append YASMFLAGS "-DPIC"test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"case "$objformat" inelf*) enabled debug && append YASMFLAGS $yasm_debug ;;esaccheck_yasm "movbe ecx, [5]" && enable yasm ||die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_externalcheck_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_externalcheck_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_externalcheck_yasm "CPU amdnop" || disable cpunopficase "$cpu" inathlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)disable fast_clz;;esacficheck_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neoncheck_ldflags -Wl,--as-needed
check_ldflags -Wl,-z,noexecstackif check_func dlopen; thenldl=
elif check_func dlopen -ldl; thenldl=-ldl
fifrei0r_filter_extralibs='$ldl'
frei0r_src_filter_extralibs='$ldl'
ladspa_filter_extralibs='$ldl'
nvenc_encoder_extralibs='$ldl'if ! disabled network; thencheck_func getaddrinfo $network_extralibscheck_func getservbyport $network_extralibscheck_func inet_aton $network_extralibscheck_type netdb.h "struct addrinfo"check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCEcheck_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCEcheck_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCEcheck_type poll.h "struct pollfd"check_type netinet/sctp.h "struct sctp_event_subscribe"check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_lencheck_type netinet/in.h "struct sockaddr_in6"check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"check_type "sys/types.h sys/socket.h" socklen_t# Prefer arpa/inet.h over winsock2if check_header arpa/inet.h ; thencheck_func closesocketelif check_header winsock2.h ; thencheck_func_headers winsock2.h closesocket -lws2 &&network_extralibs="-lws2" ||{ check_func_headers winsock2.h closesocket -lws2_32 &&network_extralibs="-lws2_32"; } || disable winsock2_h networkcheck_func_headers ws2tcpip.h getaddrinfo $network_extralibscheck_type ws2tcpip.h socklen_tcheck_type ws2tcpip.h "struct addrinfo"check_type ws2tcpip.h "struct group_source_req"check_type ws2tcpip.h "struct ip_mreq_source"check_type ws2tcpip.h "struct ipv6_mreq"check_type winsock2.h "struct pollfd"check_struct winsock2.h "struct sockaddr" sa_lencheck_type ws2tcpip.h "struct sockaddr_in6"check_type ws2tcpip.h "struct sockaddr_storage"elsedisable networkfi
ficheck_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
check_builtin MemoryBarrier windows.h "MemoryBarrier()"
check_builtin sarestart signal.h "SA_RESTART"
check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
check_func  ${malloc_prefix}memalign            && enable memalign
check_func  ${malloc_prefix}posix_memalign      && enable posix_memaligncheck_func  access
check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
check_func  fcntl
check_func  fork
check_func  gethrtime
check_func  getopt
check_func  getrusage
check_func  gettimeofday
check_func  gmtime_r
check_func  isatty
check_func  localtime_r
check_func  mach_absolute_time
check_func  mkstemp
check_func  mmap
check_func  mprotect
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
check_func  sched_getaffinity
check_func  setrlimit
check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
check_func  strerror_r
check_func  sysconf
check_func  sysctl
check_func  usleepcheck_func_headers conio.h kbhit
check_func_headers io.h setmode
check_func_headers lzo/lzo1x.h lzo1x_999_compress
check_func_headers stdlib.h getenvcheck_func_headers windows.h CoTaskMemFree -lole32
check_func_headers windows.h GetProcessAffinityMask
check_func_headers windows.h GetProcessTimes
check_func_headers windows.h GetSystemTimeAsFileTime
check_func_headers windows.h MapViewOfFile
check_func_headers windows.h PeekNamedPipe
check_func_headers windows.h SetConsoleTextAttribute
check_func_headers windows.h Sleep
check_func_headers windows.h VirtualAlloc
check_struct windows.h "CONDITION_VARIABLE" Ptr
check_func_headers glob.h glob
enabled xlib &&check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXextcheck_header direct.h
check_header dlfcn.h
check_header dxva.h
check_header dxva2api.h -D_WIN32_WINNT=0x0600
check_header io.h
check_header libcrystalhd/libcrystalhd_if.h
check_header mach/mach_time.h
check_header malloc.h
check_header net/udplite.h
check_header poll.h
check_header sys/mman.h
check_header sys/param.h
check_header sys/resource.h
check_header sys/select.h
check_header sys/time.h
check_header sys/un.h
check_header termios.h
check_header unistd.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
check_header VideoDecodeAcceleration/VDADecoder.h
check_header windows.h
check_header X11/extensions/XvMClib.h
check_header asm/types.hcheck_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapicheck_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrsscheck_type "windows.h dxva.h" "DXVA_PicParams_HEVC"if ! disabled w32threads && ! enabled pthreads; thencheck_func_headers "windows.h process.h" _beginthreadex &&enable w32threads || disable w32threads
fi# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; thenenable pthreadsif check_func pthread_join -pthread && check_func pthread_create -pthread; thenadd_cflags -pthreadadd_extralibs -pthreadelif check_func pthread_join -pthreads && check_func pthread_create -pthreads; thenadd_cflags -pthreadsadd_extralibs -pthreadselif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; thenadd_cflags -ldl -pthreadadd_extralibs -ldl -pthreadelif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; thenadd_extralibs -lpthreadGC2elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then:elif ! check_func pthread_join && ! check_func pthread_create; thendisable pthreadsficheck_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
fiif enabled pthreads; thencheck_func pthread_cancel
fidisabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzmacheck_lib math.h sin -lm && LIBM="-lm"
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhdatan2f_args=2
ldexpf_args=2
powf_args=2for func in $MATH_FUNCS; doeval check_mathfunc $func \${${func}_args:-1}
done# these are off by default, so fail if requested and not available
enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||{ check_lib2 "dlfcn.h" dlopen -ldl; } ||die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&{ check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
flite_libs="-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"
enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
enabled fontconfig        && enable libfontconfig
enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
enabled libfreetype       && require_libfreetype
enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; docheck_lib "${gsm_hdr}" gsm_create -lgsm && break;done || die "ERROR: libgsm not found"; }
enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
enabled libopenjpeg       && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC ||check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||die "ERROR: libopenjpeg not found"; }
enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||require smbclient libsmbclient.h smbc_init -lsmbclient; }
enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.hmedia/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.hmedia/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&{ check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
enabled libvpx            && {enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||die "ERROR: libvpx decoder version must be >=0.9.1"; }enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||die "ERROR: libvpx encoder version must be >=0.9.7"; }enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx || disable libvpx_vp9_encoder; } }
enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
enabled libwebp           && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||{ require libx264 x264.h x264_encoder_encode -lx264 &&warn "using libx264 without pkg-config"; } } &&{ check_cpp_condition x264.h "X264_BUILD >= 118" ||die "ERROR: libx264 must be installed and version must be >= 0.118."; }
enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&{ check_cpp_condition x265.h "X265_BUILD >= 17" ||die "ERROR: libx265 version must be >= 17."; }
enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&{ [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; docheck_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||die "ERROR: openal not found"; } &&{ check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||die "ERROR: opencl not found"; } &&{ check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||die "ERROR: opengl not found."}
enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||die "ERROR: openssl not found"; }
enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }if enabled gnutls; then{ check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||{ check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
fi# libdc1394 check
if enabled libdc1394; then{ require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&enable libdc1394_2; } ||{ check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&enable libdc1394_1; } ||die "ERROR: No version of libdc1394 found "
fi
if ! disabled sdl; thenSDL_CONFIG="${cross_prefix}sdl-config"if check_pkg_config sdl SDL_events.h SDL_PollEvent; thencheck_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&enable sdlelseif "${SDL_CONFIG}" --version > /dev/null 2>&1; thensdl_cflags=$("${SDL_CONFIG}" --cflags)sdl_libs=$("${SDL_CONFIG}" --libs)check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&enable sdlelif enabled sdl ; thendie "ERROR: SDL not found"elsedisable sdlfifi
fi
enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libsmakeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
enabled makeinfo && (makeinfo --version | \grep -q 'makeinfo (GNU texinfo) 5' > /dev/null 2>&1) \&& enable makeinfo_html || disable makeinfo_html
disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
perl -v            > /dev/null 2>&1 && enable perl      || disable perl
pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeoutcheck_header linux/fb.h
check_header linux/videodev.h
check_header linux/videodev2.h
check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discretecheck_header sys/videoio.h
check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discretecheck_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
# w32api 3.12 had it defined wrong
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_definescheck_type "dshow.h" IBaseFilter# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
{ check_header dev/bktr/ioctl_meteor.h &&check_header dev/bktr/ioctl_bt848.h; } ||
{ check_header machine/ioctl_meteor.h &&check_header machine/ioctl_bt848.h; } ||
{ check_header dev/video/meteor/ioctl_meteor.h &&check_header dev/video/bktr/ioctl_bt848.h; } ||
check_header dev/ic/bt8xx.hcheck_header sndio.h
if check_struct sys/soundcard.h audio_buf_info bytes; thenenable_safe sys/soundcard.h
elsecheck_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h#include <sys/soundcard.h>audio_buf_info abc;
EOF
fi
check_header soundcard.henabled_any alsa_indev alsa_outdev &&check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasoundenabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&check_func jack_port_get_latency_range -ljackenabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndioif enabled libcdio; thencheck_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||die "ERROR: No usable libcdio/cdparanoia found"
fienabled xlib &&check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlibif ! disabled libxcb; thencheck_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {enabled libxcb && die "ERROR: libxcb >= 1.4 not found";} && disable x11grab && enable libxcbif enabled libxcb; thendisabled libxcb_shm || {check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {enabled libxcb_shm && die "ERROR: libxcb_shm not found";} && check_header sys/shm.h && enable libxcb_shm; }disabled libxcb_xfixes || {check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";} && enable libxcb_xfixes; }disabled libxcb_shape || {check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {enabled libxcb_shape && die "ERROR: libxcb_shape not found";} && enable libxcb_shape; }add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflagsadd_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
fi
fiif enabled x11grab; thenenabled xlib || die "ERROR: Xlib not found"require Xext X11/extensions/XShm.h XShmCreateImage -lXextrequire Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
ficheck_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"enabled dxva2api_h &&check_cc <<EOF && enable dxva2api_cobj
#define _WIN32_WINNT 0x0600
#define COBJMACROS
#include <windows.h>
#include <d3d9.h>
#include <dxva2api.h>
int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
EOFenabled vaapi &&check_lib va/va.h vaInitialize -lva ||disable vaapienabled vaapi && enabled xlib &&check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&enable vaapi_x11enabled vdpau &&check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||disable vdpauenabled vdpau && enabled xlib &&check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&enable vdpau_x11# Funny iconv installations are not unusual, so check it after all flags have been set
disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconvenabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
check_cflags -Wall
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
check_cflags -Wwrite-strings
check_cflags -Wtype-limits
check_cflags -Wundef
check_cflags -Wmissing-prototypes
check_cflags -Wno-pointer-to-int-cast
check_cflags -Wstrict-prototypes
check_cflags -Wempty-body
enabled extra_warnings && check_cflags -Winlinecheck_disable_warning(){warning_flag=-W${1#-Wno-}test_cflags $warning_flag && add_cflags $1
}check_disable_warning -Wno-parentheses
check_disable_warning -Wno-switch
check_disable_warning -Wno-format-zero-length
check_disable_warning -Wno-pointer-sign# add some linker flags
check_ldflags -Wl,--warn-common
check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic# add some strip flags
# -wN '..@*' is more selective than -x, but not available everywhere.
check_stripflags -wN \'..@*\' || check_stripflags -xenabled neon_clobber_test &&check_ldflags -Wl,--wrap,avcodec_open2              \-Wl,--wrap,avcodec_decode_audio4      \-Wl,--wrap,avcodec_decode_video2      \-Wl,--wrap,avcodec_decode_subtitle2   \-Wl,--wrap,avcodec_encode_audio2      \-Wl,--wrap,avcodec_encode_video2      \-Wl,--wrap,avcodec_encode_subtitle    \-Wl,--wrap,swr_convert                \-Wl,--wrap,avresample_convert ||disable neon_clobber_testenabled xmm_clobber_test &&check_ldflags -Wl,--wrap,avcodec_open2              \-Wl,--wrap,avcodec_decode_audio4      \-Wl,--wrap,avcodec_decode_video2      \-Wl,--wrap,avcodec_decode_subtitle2   \-Wl,--wrap,avcodec_encode_audio2      \-Wl,--wrap,avcodec_encode_video       \-Wl,--wrap,avcodec_encode_video2      \-Wl,--wrap,avcodec_encode_subtitle    \-Wl,--wrap,swr_convert                \-Wl,--wrap,avresample_convert         \-Wl,--wrap,sws_scale ||disable xmm_clobber_testecho "X{};" > $TMPV
if test_ldflags -Wl,--version-script,$TMPV; thenappend SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'check_cc <<EOF && enable symver_asm_label
void ff_foo(void) __asm__ ("av_foo@VERSION");
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
EOFcheck_cc <<EOF && enable symver_gnu_asm
__asm__(".symver ff_foo,av_foo@VERSION");
void ff_foo(void) {}
EOF
fiif [ -z "$optflags" ]; thenif enabled small; thenoptflags=$cflags_sizeelif enabled optimizations; thenoptflags=$cflags_speedelseoptflags=$cflags_nooptfi
ficheck_optflags(){check_cflags "$@"enabled lto && check_ldflags "$@"
}if enabled lto; thentest "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"check_cflags  -fltocheck_ldflags -flto $cpuflagsdisable inline_asm_direct_symbol_refs
ficheck_optflags $optflags
check_optflags -fno-math-errno
check_optflags -fno-signed-zerosenabled ftrapv && check_cflags -ftrapvcheck_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
int x;
EOFif enabled icc; then# Just warnings, no remarkscheck_cflags -w1# -wd: Disable following warnings# 144, 167, 556: -Wno-pointer-sign# 188: enumerated type mixed with another type# 1292: attribute "foo" ignored# 1419: external declaration in primary source file# 10006: ignoring unknown option -fno-signed-zeros# 10148: ignoring unknown option -Wno-parentheses# 10156: ignoring option '-W'; no argument requiredcheck_cflags -wd144,167,188,556,1292,1419,10006,10148,10156# 11030: Warning unknown option --as-needed# 10156: ignoring option '-export'; no argument requiredcheck_ldflags -wd10156,11030# icc 11.0 and 11.1 work with ebp_available, but don't pass the testenable ebp_available# The test above does not test linkingenabled lto && disable symver_asm_labelif enabled x86_32; thenicc_version=$($cc -dumpversion)test ${icc_version%%.*} -ge 11 &&check_cflags -falign-stack=maintain-16-byte ||disable aligned_stackfi
elif enabled ccc; then# disable some annoying warningsadd_cflags -msg_disable bitnotintadd_cflags -msg_disable mixfuncvoidadd_cflags -msg_disable nonstandcastadd_cflags -msg_disable unsupieee
elif enabled gcc; thencheck_optflags -fno-tree-vectorizecheck_cflags -Werror=format-securitycheck_cflags -Werror=implicit-function-declarationcheck_cflags -Werror=missing-prototypescheck_cflags -Werror=return-typecheck_cflags -Werror=vlacheck_cflags -Wformatenabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
elif enabled llvm_gcc; thencheck_cflags -mllvm -stack-alignment=16
elif enabled clang; thencheck_cflags -mllvm -stack-alignment=16check_cflags -Qunused-argumentscheck_cflags -Werror=implicit-function-declarationcheck_cflags -Werror=missing-prototypescheck_cflags -Werror=return-type
elif enabled cparser; thenadd_cflags -Wno-missing-variable-declarationsadd_cflags -Wno-empty-statement
elif enabled armcc; thenadd_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compatadd_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir# 2523: use of inline assembly is deprecatedadd_cflags -W${armcc_opt},--diag_suppress=2523add_cflags -W${armcc_opt},--diag_suppress=1207add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in conditionadd_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compatadd_cflags -W${armcc_opt},--diag_suppress=167  # pointer signadd_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
elif enabled tms470; thenadd_cflags -pds=824 -pds=837disable inline_asm
elif enabled pathscale; thenadd_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
elif enabled_any msvc icl; thenenabled x86_32 && disable aligned_stackenabled_all x86_32 debug && add_cflags -Oy-enabled debug && add_ldflags -debugenable pragma_deprecatedif enabled icl; then# -Qansi-alias is basically -fstrict-aliasing, but does not work# (correctly) on icl 13.x.check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&add_cflags -Qansi-alias# Some inline asm is not compilable in debugif enabled debug; thendisable ebp_availabledisable ebx_availablefifi# msvcrt10 x64 incorrectly enables log2, only msvcrt12 onwards actually has log2.check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
ficase $as_type inclang)add_asflags -Qunused-arguments;;
esaccase $ld_type inclang)check_ldflags -Qunused-arguments;;
esaccase $target_os inosf1)enabled ccc && add_ldflags '-Wl,-expect_unresolved,*';;plan9)add_cppflags -Dmain=plan9_main;;
esacenable frame_thread_encoderenabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }check_deps $CONFIG_LIST       \$CONFIG_EXTRA      \$HAVE_LIST         \$ALL_COMPONENTS    \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"if test $target_os = "haiku"; thendisable memaligndisable posix_memalign
fienabled_all dxva2 dxva2api_cobj CoTaskMemFree &&prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&enable dxva2_lib! enabled_any memalign posix_memalign aligned_malloc &&enabled simd_align_16 && enable memalign_hack# add_dep lib dep
# -> enable ${lib}_deps_${dep}
# -> add $dep to ${lib}_deps only once
add_dep() {lib=$1dep=$2enabled "${lib}_deps_${dep}" && return 0enable  "${lib}_deps_${dep}"prepend "${lib}_deps" $dep
}# merge deps lib components
# merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
merge_deps() {lib=$1shiftfor comp in $*; doenabled $comp || continueeval "dep=\"\$${comp}_deps\""for d in $dep; doadd_dep $lib $ddonedone
}merge_deps libavfilter $FILTER_LISTmap 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LISTfor thread in $THREADS_LIST; doif enabled $thread; thentest -n "$thread_type" &&die "ERROR: Only one thread type must be selected." ||thread_type="$thread"fi
doneenabled zlib && add_cppflags -DZLIB_CONST# conditional library dependencies, in linking order
enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
enabled aresample_filter    && prepend avfilter_deps "swresample"
enabled asyncts_filter      && prepend avfilter_deps "avresample"
enabled atempo_filter       && prepend avfilter_deps "avcodec"
enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
enabled elbg_filter         && prepend avfilter_deps "avcodec"
enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
enabled pan_filter          && prepend avfilter_deps "swresample"
enabled pp_filter           && prepend avfilter_deps "postproc"
enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
enabled resample_filter && prepend avfilter_deps "avresample"
enabled sab_filter          && prepend avfilter_deps "swscale"
enabled scale_filter    && prepend avfilter_deps "swscale"
enabled showspectrum_filter && prepend avfilter_deps "avcodec"
enabled smartblur_filter    && prepend avfilter_deps "swscale"
enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
enabled uspp_filter         && prepend avfilter_deps "avcodec"enabled lavfi_indev         && prepend avdevice_deps "avfilter"enabled opus_decoder    && prepend avcodec_deps "swresample"expand_deps(){lib_deps=${1}_depseval "deps=\$$lib_deps"append $lib_deps $(map 'eval echo \$${v}_deps' $deps)unique $lib_deps
}#we have to remove gpl from the deps here as some code assumes all lib deps are libs
postproc_deps="$(filter_out 'gpl' $postproc_deps)"map 'expand_deps $v' $LIBRARY_LISTecho "install prefix            $prefix"
echo "source path               $source_path"
echo "C compiler                $cc"
echo "C library                 $libc_type"
if test "$host_cc" != "$cc"; thenecho "host C compiler           $host_cc"echo "host C library            $host_libc_type"
fi
echo "ARCH                      $arch ($cpu)"
if test "$build_suffix" != ""; thenecho "build suffix              $build_suffix"
fi
if test "$progs_suffix" != ""; thenecho "progs suffix              $progs_suffix"
fi
if test "$extra_version" != ""; thenecho "version string suffix     $extra_version"
fi
echo "big-endian                ${bigendian-no}"
echo "runtime cpu detection     ${runtime_cpudetect-no}"
if enabled x86; thenecho "${yasmexe}                      ${yasm-no}"echo "MMX enabled               ${mmx-no}"echo "MMXEXT enabled            ${mmxext-no}"echo "3DNow! enabled            ${amd3dnow-no}"echo "3DNow! extended enabled   ${amd3dnowext-no}"echo "SSE enabled               ${sse-no}"echo "SSSE3 enabled             ${ssse3-no}"echo "AVX enabled               ${avx-no}"echo "XOP enabled               ${xop-no}"echo "FMA3 enabled              ${fma3-no}"echo "FMA4 enabled              ${fma4-no}"echo "i686 features enabled     ${i686-no}"echo "CMOV is fast              ${fast_cmov-no}"echo "EBX available             ${ebx_available-no}"echo "EBP available             ${ebp_available-no}"
fi
if enabled aarch64; thenecho "NEON enabled              ${neon-no}"echo "VFP enabled               ${vfp-no}"
fi
if enabled arm; thenecho "ARMv5TE enabled           ${armv5te-no}"echo "ARMv6 enabled             ${armv6-no}"echo "ARMv6T2 enabled           ${armv6t2-no}"echo "VFP enabled               ${vfp-no}"echo "NEON enabled              ${neon-no}"echo "THUMB enabled             ${thumb-no}"
fi
if enabled mips; thenecho "MIPS FPU enabled          ${mipsfpu-no}"echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
fi
if enabled ppc; thenecho "AltiVec enabled           ${altivec-no}"echo "PPC 4xx optimizations     ${ppc4xx-no}"echo "PPC VSX optimizations     ${vsx-no}"echo "dcbzl available           ${dcbzl-no}"
fi
echo "debug symbols             ${debug-no}"
echo "strip symbols             ${stripping-no}"
echo "optimize for size         ${small-no}"
echo "optimizations             ${optimizations-no}"
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
echo "postprocessing support    ${postproc-no}"
echo "new filter support        ${avfilter-no}"
echo "network support           ${network-no}"
echo "threading support         ${thread_type-no}"
echo "safe bitstream reader     ${safe_bitstream_reader-no}"
echo "SDL support               ${sdl-no}"
echo "opencl enabled            ${opencl-no}"
echo "texi2html enabled         ${texi2html-no}"
echo "perl enabled              ${perl-no}"
echo "pod2man enabled           ${pod2man-no}"
echo "makeinfo enabled          ${makeinfo-no}"
echo "makeinfo supports HTML    ${makeinfo_html-no}"
test -n "$random_seed" &&echo "random seed               ${random_seed}"
echoecho "External libraries:"
print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
echofor type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; doecho "Enabled ${type}s:"eval list=\$$(toupper $type)_LISTprint_enabled '_*' $list | print_3_columnsecho
donelicense="LGPL version 2.1 or later"
if enabled nonfree; thenlicense="nonfree and unredistributable"
elif enabled gplv3; thenlicense="GPL version 3 or later"
elif enabled lgplv3; thenlicense="LGPL version 3 or later"
elif enabled gpl; thenlicense="GPL version 2 or later"
fiecho "License: $license"echo "Creating config.mak, config.h, and doc/config.texi..."test -e Makefile || echo "include $source_path/Makefile" > Makefileenabled stripping || strip="echo skipping strip"config_files="$TMPH config.mak doc/config.texi"cat > config.mak <<EOF
# Automatically generated by configure - do not modify!
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=1
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
prefix=$prefix
LIBDIR=\$(DESTDIR)$libdir
SHLIBDIR=\$(DESTDIR)$shlibdir
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
DOCDIR=\$(DESTDIR)$docdir
MANDIR=\$(DESTDIR)$mandir
SRC_PATH=$source_path
ifndef MAIN_MAKEFILE
SRC_PATH:=\$(SRC_PATH:.%=..%)
endif
CC_IDENT=$cc_ident
ARCH=$arch
INTRINSICS=$intrinsics
CC=$cc
CXX=$cxx
AS=$as
LD=$ld
DEPCC=$dep_cc
DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
DEPAS=$as
DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
YASM=$yasmexe
DEPYASM=$yasmexe
AR=$ar
ARFLAGS=$arflags
AR_O=$ar_o
RANLIB=$ranlib
STRIP=$strip
CP=cp -p
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
CXXFLAGS=$CXXFLAGS
ASFLAGS=$ASFLAGS
AS_C=$AS_C
AS_O=$AS_O
CC_C=$CC_C
CC_E=$CC_E
CC_O=$CC_O
CXX_C=$CXX_C
CXX_O=$CXX_O
LD_O=$LD_O
LD_LIB=$LD_LIB
LD_PATH=$LD_PATH
DLLTOOL=$dlltool
WINDRES=$windres
DEPWINDRES=$dep_cc
DOXYGEN=$doxygen
LDFLAGS=$LDFLAGS
LDEXEFLAGS=$LDEXEFLAGS
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
ASMSTRIPFLAGS=$ASMSTRIPFLAGS
YASMFLAGS=$YASMFLAGS
BUILDSUF=$build_suffix
PROGSSUF=$progs_suffix
FULLNAME=$FULLNAME
LIBPREF=$LIBPREF
LIBSUF=$LIBSUF
LIBNAME=$LIBNAME
SLIBPREF=$SLIBPREF
SLIBSUF=$SLIBSUF
EXESUF=$EXESUF
EXTRA_VERSION=$extra_version
CCDEP=$CCDEP
CXXDEP=$CXXDEP
CCDEP_FLAGS=$CCDEP_FLAGS
ASDEP=$ASDEP
ASDEP_FLAGS=$ASDEP_FLAGS
CC_DEPFLAGS=$CC_DEPFLAGS
AS_DEPFLAGS=$AS_DEPFLAGS
HOSTCC=$host_cc
HOSTLD=$host_ld
HOSTCFLAGS=$host_cflags
HOSTCPPFLAGS=$host_cppflags
HOSTEXESUF=$HOSTEXESUF
HOSTLDFLAGS=$host_ldflags
HOSTLIBS=$host_libs
DEPHOSTCC=$host_cc
DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
HOSTCCDEP=$HOSTCCDEP
HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
HOSTCC_C=$HOSTCC_C
HOSTCC_O=$HOSTCC_O
HOSTLD_O=$HOSTLD_O
TARGET_EXEC=$target_exec $target_exec_args
TARGET_PATH=$target_path
TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
CFLAGS-ffplay=$sdl_cflags
ZLIB=$($ldflags_filter -lz)
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
EXTRALIBS=$extralibs
COMPAT_OBJS=$compat_objs
EXEOBJS=$exeobjs
INSTALL=$install
LIBTARGET=${LIBTARGET}
SLIBNAME=${SLIBNAME}
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
NOREDZONE_FLAGS=$noredzone_flags
EOFget_version(){lcname=lib${1}name=$(toupper $lcname)file=$source_path/$lcname/version.heval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICROeval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.makeval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.makeval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
}map 'get_version $v' $LIBRARY_LISTmap 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LISTprint_program_libs(){eval "program_libs=\$${1}_libs"eval echo "LIBS-${1}=${program_libs}" >> config.mak
}map 'print_program_libs $v' $PROGRAM_LISTcat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
#define FFMPEG_LICENSE "$(c_escape $license)"
#define CONFIG_THIS_YEAR 2016
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
#define av_restrict $_restrict
#define EXTERN_PREFIX "${extern_prefix}"
#define EXTERN_ASM ${extern_prefix}
#define BUILDSUF "$build_suffix"
#define SLIBSUF "$SLIBSUF"
#define HAVE_MMX2 HAVE_MMXEXT
#define SWS_MAX_FILTER_SIZE $sws_max_filter_size
EOFtest -n "$assert_level" &&echo "#define ASSERT_LEVEL $assert_level" >>$TMPHtest -n "$malloc_prefix" &&echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPHif enabled yasm; thenappend config_files $TMPASMprintf '' >$TMPASM
fienabled getenv || echo "#define getenv(x) NULL" >> $TMPHmkdir -p doc
mkdir -p tests
echo "@c auto-generated by configure" > doc/config.texiprint_config ARCH_   "$config_files" $ARCH_LIST
print_config HAVE_   "$config_files" $HAVE_LIST
print_config CONFIG_ "$config_files" $CONFIG_LIST       \$CONFIG_EXTRA      \$ALL_COMPONENTS    \echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
cp_if_changed $TMPH config.h
touch .configenabled yasm && cp_if_changed $TMPASM config.asmcat > $TMPH <<EOF
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
EOFprint_config AV_HAVE_ $TMPH $HAVE_LIST_PUBecho "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPHcp_if_changed $TMPH libavutil/avconfig.hif test -n "$WARNINGS"; thenprintf "\n$WARNINGS"enabled fatal_warnings && exit 1
fi# build pkg-config fileslib_version(){eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
}pkgconfig_generate(){name=$1shortname=${name#lib}${build_suffix}comment=$2version=$3libs=$4requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))requires=${requires%, }enabled ${name#lib} || return 0mkdir -p $namecat <<EOF > $name/$name${build_suffix}.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=$libdir
includedir=$incdirName: $name
Description: $comment
Version: $version
Requires: $(enabled shared || echo $requires)
Requires.private: $(enabled shared && echo $requires)
Conflicts:
Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
Libs.private: $(enabled shared && echo $libs)
Cflags: -I\${includedir}
EOFmkdir -p doc/examples/pc-uninstalled
includedir=${source_path}
[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."cat <<EOF > doc/examples/pc-uninstalled/$name.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}/../../../$name
includedir=${includedir}Name: $name
Description: $comment
Version: $version
Requires: $requires
Conflicts:
Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
Cflags: -I\${includedir}
EOF
}pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"

(3)将修改后的configure文件上传到阿里云中对应的ffmpeg文件夹中,并替换原来的config文件

(4)重新执行./build_android.sh命令生成.so文件

(5)现在所生成的文件都为以 .so结尾的Android可执行的so文件了

阿里云服务器编译ffmpeg相关推荐

  1. 阿里云服务器内核编译升级

    阿里云服务器被黑,植入了挖矿程序,所以升级下服务器内核: 下载一个Linux内核:https://www.kernel.org/ 将下载的内核(我下载的是linux-5.2.15.tar.xz),上传 ...

  2. 阿里云服务器ECS配置LNMP

    2019独角兽企业重金招聘Python工程师标准>>> 阿里云服务器ECS配置LNMP 刚刚买的阿里云服务器ECS镜像CentOS 6.5 64位. 准备配置个laravel跑,另外 ...

  3. 在阿里云服务器(ECS)上从零开始搭建nginx服务器

    本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器.阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验 ...

  4. 阿里云centos 7.6安装mysql_阿里云服务器中Linux下centos7.6安装mysql8.0.11

    1.下载安装 MySQL最新下载地址:https://dev.mysql.com/downloads/mysql/ 选择的是Linux 64位通用的二级制版本,这样不在需要进行编译安装,系统安装依赖库 ...

  5. 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 博客总结 : 设置SecureCRT ...

  6. 王者荣耀全栈项目部署到阿里云服务器笔记

    王者荣耀全栈项目部署到阿里云服务器笔记 原创Charles_GX 最后发布于2020-03-27 01:27:00 阅读数 177  收藏 展开 王者荣耀全栈项目部署到阿里云服务器笔记 学习的项目来自 ...

  7. 阿里云centos服务器rdp远程桌面规则_阿里云服务器使用教程 新手用户的好帮手...

    云服务器越来越成为企业及个人用户开展网络业务的首选了,阿里云服务器ECS因其起步较早,用户数量已经是国内第一,全球五强的大云服务商了.虽然阿里云对于用户来说很熟悉了,但阿里云服务器的使用方法,相信还有 ...

  8. 阿里云服务器如何安装memcached

    方法/步骤 1 使用Xshell登陆阿里云服务器. 请使用root帐号登陆.下面的操作全部在home目录里执行 2 安装libevent. 输入命令 yum -y install libevent-d ...

  9. 阿里云服务器上配置并使用: PHP + Redis + Mysql 从配置到使用

    (原创出处为本博客,http://www.cnblogs.com/linguanh/) 目录: 一,下载 二,解压 三,配置与启动 四,测试 Redis 五,配置 phpRedis 扩展 六,综合测试 ...

最新文章

  1. 软件开发 理想_我如何在12个月内找到理想的软件工作
  2. HDU3496-Watch The Movie
  3. 根据内容来产生一个二维码
  4. 怎么像编辑提供wb原图_PLoS One:7月1日起,投稿必须提供原始WB图片!
  5. 关于Java类加载双亲委派机制的思考(附面试题)
  6. spock测试_用于混合Spock 1.x和JUnit 5测试的Maven项目设置
  7. 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)
  8. 通过键盘方向键控制TreeView节点的移动
  9. Percona Server
  10. ★Python爬虫 ※ 入门详解
  11. 阅读SSM项目之scm
  12. 愚人节,这样的微信公众号图文排版方式你见过吗?
  13. python3查找元素在数组位置_Python:查找数组中元素的位置
  14. 跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案
  15. 失眠 我们该怎么办?
  16. python类初始化返回实例_Python基础——类、实例及初始化
  17. winserver 443端口被system占用_手机系统占用内存越来越大,是谁的锅?
  18. imshow 显示图像(Matlab)
  19. finalize机制
  20. 网站已迁移、域名未转出,收到阿里云的“备案号可能被取消接入”邮件提示该怎么办。

热门文章

  1. 【软考点点】知识产权
  2. 基于web的仿Steam游戏网----数据库的安装
  3. 《疯狂java讲义》学习(25):正则表达式
  4. Java 实现“多继承”
  5. Python入门程序【七】
  6. python 调用企查查接口平台
  7. PCB电路板和集成电路的特点与区别
  8. mac 查看当前文件的路径
  9. 无需编译智能研判——您身边的作业自动批改助手
  10. 浅谈技术难度与公司收益