Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #!/bin/sh
  2. #
  3. # FFmpeg configure script
  4. #
  5. # Copyright (c) 2000-2002 Fabrice Bellard
  6. # Copyright (c) 2005-2008 Diego Biurrun
  7. # Copyright (c) 2005-2008 Mans Rullgard
  8. #
  9.  
  10. # Prevent locale nonsense from breaking basic text processing.
  11. LC_ALL=C
  12. export LC_ALL
  13.  
  14. # make sure we are running under a compatible shell
  15. # try to make this part work with most shells
  16.  
  17. try_exec(){
  18.     echo "Trying shell $1"
  19.     type "$1" > /dev/null 2>&1 && exec "$@"
  20. }
  21.  
  22. unset foo
  23. (: ${foo%%bar}) 2> /dev/null
  24. E1="$?"
  25.  
  26. (: ${foo?}) 2> /dev/null
  27. E2="$?"
  28.  
  29. if test "$E1" != 0 || test "$E2" = 0; then
  30.     echo "Broken shell detected.  Trying alternatives."
  31.     export FF_CONF_EXEC
  32.     if test "0$FF_CONF_EXEC" -lt 1; then
  33.         FF_CONF_EXEC=1
  34.         try_exec bash "$0" "$@"
  35.     fi
  36.     if test "0$FF_CONF_EXEC" -lt 2; then
  37.         FF_CONF_EXEC=2
  38.         try_exec ksh "$0" "$@"
  39.     fi
  40.     if test "0$FF_CONF_EXEC" -lt 3; then
  41.         FF_CONF_EXEC=3
  42.         try_exec /usr/xpg4/bin/sh "$0" "$@"
  43.     fi
  44.     echo "No compatible shell script interpreter found."
  45.     echo "This configure script requires a POSIX-compatible shell"
  46.     echo "such as bash or ksh."
  47.     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
  48.     echo "Instead, install a working POSIX-compatible shell."
  49.     echo "Disabling this configure test will create a broken FFmpeg."
  50.     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
  51.         echo "This bash version ($BASH_VERSION) is broken on your platform."
  52.         echo "Upgrade to a later version if available."
  53.     fi
  54.     exit 1
  55. fi
  56.  
  57. test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
  58.  
  59. show_help(){
  60.     cat <<EOF
  61. Usage: configure [options]
  62. Options: [defaults in brackets after descriptions]
  63.  
  64. Help options:
  65.   --help                   print this message
  66.   --list-decoders          show all available decoders
  67.   --list-encoders          show all available encoders
  68.   --list-hwaccels          show all available hardware accelerators
  69.   --list-demuxers          show all available demuxers
  70.   --list-muxers            show all available muxers
  71.   --list-parsers           show all available parsers
  72.   --list-protocols         show all available protocols
  73.   --list-bsfs              show all available bitstream filters
  74.   --list-indevs            show all available input devices
  75.   --list-outdevs           show all available output devices
  76.   --list-filters           show all available filters
  77.  
  78. Standard options:
  79.   --logfile=FILE           log tests and output to FILE [config.log]
  80.   --disable-logging        do not log configure debug information
  81.   --fatal-warnings         fail if any configure warning is generated
  82.   --prefix=PREFIX          install in PREFIX [$prefix]
  83.   --bindir=DIR             install binaries in DIR [PREFIX/bin]
  84.   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
  85.   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
  86.   --libdir=DIR             install libs in DIR [PREFIX/lib]
  87.   --shlibdir=DIR           install shared libs in DIR [LIBDIR]
  88.   --incdir=DIR             install includes in DIR [PREFIX/include]
  89.   --mandir=DIR             install man page in DIR [PREFIX/share/man]
  90.   --pkgconfigdir=DIR       install pkg-config files in DIR [LIBDIR/pkgconfig]
  91.   --enable-rpath           use rpath to allow installing libraries in paths
  92.                            not part of the dynamic linker search path
  93.                            use rpath when linking programs [USE WITH CARE]
  94.  
  95. Licensing options:
  96.   --enable-gpl             allow use of GPL code, the resulting libs
  97.                            and binaries will be under GPL [no]
  98.   --enable-version3        upgrade (L)GPL to version 3 [no]
  99.   --enable-nonfree         allow use of nonfree code, the resulting libs
  100.                            and binaries will be unredistributable [no]
  101.  
  102. Configuration options:
  103.   --disable-static         do not build static libraries [no]
  104.   --enable-shared          build shared libraries [no]
  105.   --enable-small           optimize for size instead of speed
  106.   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
  107.   --enable-gray            enable full grayscale support (slower color)
  108.   --disable-swscale-alpha  disable alpha channel support in swscale
  109.   --disable-all            disable building components, libraries and programs
  110.   --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
  111.   --enable-raise-major     increase major version numbers in sonames [no]
  112.  
  113. Program options:
  114.   --disable-programs       do not build command line programs
  115.   --disable-ffmpeg         disable ffmpeg build
  116.   --disable-ffplay         disable ffplay build
  117.   --disable-ffprobe        disable ffprobe build
  118.   --disable-ffserver       disable ffserver build
  119.  
  120. Documentation options:
  121.   --disable-doc            do not build documentation
  122.   --disable-htmlpages      do not build HTML documentation pages
  123.   --disable-manpages       do not build man documentation pages
  124.   --disable-podpages       do not build POD documentation pages
  125.   --disable-txtpages       do not build text documentation pages
  126.  
  127. Component options:
  128.   --disable-avdevice       disable libavdevice build
  129.   --disable-avcodec        disable libavcodec build
  130.   --disable-avformat       disable libavformat build
  131.   --disable-avutil         disable libavutil build
  132.   --disable-swresample     disable libswresample build
  133.   --disable-swscale        disable libswscale build
  134.   --disable-postproc       disable libpostproc build
  135.   --disable-avfilter       disable libavfilter build
  136.   --enable-avresample      enable libavresample build [no]
  137.   --disable-pthreads       disable pthreads [autodetect]
  138.   --disable-w32threads     disable Win32 threads [autodetect]
  139.   --disable-os2threads     disable OS/2 threads [autodetect]
  140.   --disable-network        disable network support [no]
  141.   --disable-dct            disable DCT code
  142.   --disable-dwt            disable DWT code
  143.   --disable-error-resilience disable error resilience code
  144.   --disable-lsp            disable LSP code
  145.   --disable-lzo            disable LZO decoder code
  146.   --disable-mdct           disable MDCT code
  147.   --disable-rdft           disable RDFT code
  148.   --disable-fft            disable FFT code
  149.   --disable-faan           disable floating point AAN (I)DCT code
  150.   --disable-pixelutils     disable pixel utils in libavutil
  151.  
  152. Hardware accelerators:
  153.   --disable-d3d11va        disable D3D11VA code [autodetect]
  154.   --disable-dxva2          disable DXVA2 code [autodetect]
  155.   --disable-vaapi          disable VAAPI code [autodetect]
  156.   --disable-vda            disable VDA code [autodetect]
  157.   --disable-vdpau          disable VDPAU code [autodetect]
  158.   --enable-videotoolbox    enable VideoToolbox code [autodetect]
  159.  
  160. Individual component options:
  161.   --disable-everything     disable all components listed below
  162.   --disable-encoder=NAME   disable encoder NAME
  163.   --enable-encoder=NAME    enable encoder NAME
  164.   --disable-encoders       disable all encoders
  165.   --disable-decoder=NAME   disable decoder NAME
  166.   --enable-decoder=NAME    enable decoder NAME
  167.   --disable-decoders       disable all decoders
  168.   --disable-hwaccel=NAME   disable hwaccel NAME
  169.   --enable-hwaccel=NAME    enable hwaccel NAME
  170.   --disable-hwaccels       disable all hwaccels
  171.   --disable-muxer=NAME     disable muxer NAME
  172.   --enable-muxer=NAME      enable muxer NAME
  173.   --disable-muxers         disable all muxers
  174.   --disable-demuxer=NAME   disable demuxer NAME
  175.   --enable-demuxer=NAME    enable demuxer NAME
  176.   --disable-demuxers       disable all demuxers
  177.   --enable-parser=NAME     enable parser NAME
  178.   --disable-parser=NAME    disable parser NAME
  179.   --disable-parsers        disable all parsers
  180.   --enable-bsf=NAME        enable bitstream filter NAME
  181.   --disable-bsf=NAME       disable bitstream filter NAME
  182.   --disable-bsfs           disable all bitstream filters
  183.   --enable-protocol=NAME   enable protocol NAME
  184.   --disable-protocol=NAME  disable protocol NAME
  185.   --disable-protocols      disable all protocols
  186.   --enable-indev=NAME      enable input device NAME
  187.   --disable-indev=NAME     disable input device NAME
  188.   --disable-indevs         disable input devices
  189.   --enable-outdev=NAME     enable output device NAME
  190.   --disable-outdev=NAME    disable output device NAME
  191.   --disable-outdevs        disable output devices
  192.   --disable-devices        disable all devices
  193.   --enable-filter=NAME     enable filter NAME
  194.   --disable-filter=NAME    disable filter NAME
  195.   --disable-filters        disable all filters
  196.  
  197. External library support:
  198.   --enable-avisynth        enable reading of AviSynth script files [no]
  199.   --disable-bzlib          disable bzlib [autodetect]
  200.   --enable-fontconfig      enable fontconfig, useful for drawtext filter [no]
  201.   --enable-frei0r          enable frei0r video filtering [no]
  202.   --enable-gnutls          enable gnutls, needed for https support
  203.                            if openssl is not used [no]
  204.   --disable-iconv          disable iconv [autodetect]
  205.   --enable-ladspa          enable LADSPA audio filtering [no]
  206.   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
  207.   --enable-libass          enable libass subtitles rendering,
  208.                            needed for subtitles and ass filter [no]
  209.   --enable-libbluray       enable BluRay reading using libbluray [no]
  210.   --enable-libbs2b         enable bs2b DSP library [no]
  211.   --enable-libcaca         enable textual display using libcaca [no]
  212.   --enable-libcelt         enable CELT decoding via libcelt [no]
  213.   --enable-libcdio         enable audio CD grabbing with libcdio [no]
  214.   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
  215.                            and libraw1394 [no]
  216.   --enable-libdcadec       enable DCA decoding via libdcadec [no]
  217.   --enable-libfaac         enable AAC encoding via libfaac [no]
  218.   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
  219.   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
  220.   --enable-libfreetype     enable libfreetype, needed for drawtext filter [no]
  221.   --enable-libfribidi      enable libfribidi, improves drawtext filter [no]
  222.   --enable-libgme          enable Game Music Emu via libgme [no]
  223.   --enable-libgsm          enable GSM de/encoding via libgsm [no]
  224.   --enable-libiec61883     enable iec61883 via libiec61883 [no]
  225.   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
  226.   --enable-libkvazaar      enable HEVC encoding via libkvazaar [no]
  227.   --enable-libmfx          enable HW acceleration through libmfx
  228.   --enable-libmodplug      enable ModPlug via libmodplug [no]
  229.   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
  230.   --enable-libnut          enable NUT (de)muxing via libnut,
  231.                            native (de)muxer exists [no]
  232.   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
  233.   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
  234.   --enable-libopencv       enable video filtering via libopencv [no]
  235.   --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
  236.   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
  237.   --enable-libopus         enable Opus de/encoding via libopus [no]
  238.   --enable-libpulse        enable Pulseaudio input via libpulse [no]
  239.   --enable-libquvi         enable quvi input via libquvi [no]
  240.   --enable-librtmp         enable RTMP[E] support via librtmp [no]
  241.   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
  242.   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
  243.   --enable-libsmbclient    enable Samba protocol via libsmbclient [no]
  244.   --enable-libsnappy       enable Snappy compression, needed for hap encoding [no]
  245.   --enable-libsoxr         enable Include libsoxr resampling [no]
  246.   --enable-libspeex        enable Speex de/encoding via libspeex [no]
  247.   --enable-libssh          enable SFTP protocol via libssh [no]
  248.   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
  249.   --enable-libtheora       enable Theora encoding via libtheora [no]
  250.   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
  251.   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
  252.   --enable-libv4l2         enable libv4l2/v4l-utils [no]
  253.   --enable-libvidstab      enable video stabilization using vid.stab [no]
  254.   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
  255.   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
  256.   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
  257.                            native implementation exists [no]
  258.   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
  259.   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
  260.   --enable-libwebp         enable WebP encoding via libwebp [no]
  261.   --enable-libx264         enable H.264 encoding via x264 [no]
  262.   --enable-libx265         enable HEVC encoding via x265 [no]
  263.   --enable-libxavs         enable AVS encoding via xavs [no]
  264.   --enable-libxcb          enable X11 grabbing using XCB [autodetect]
  265.   --enable-libxcb-shm      enable X11 grabbing shm communication [autodetect]
  266.   --enable-libxcb-xfixes   enable X11 grabbing mouse rendering [autodetect]
  267.   --enable-libxcb-shape    enable X11 grabbing shape rendering [autodetect]
  268.   --enable-libxvid         enable Xvid encoding via xvidcore,
  269.                            native MPEG-4/Xvid encoder exists [no]
  270.   --enable-libzmq          enable message passing via libzmq [no]
  271.   --enable-libzvbi         enable teletext support via libzvbi [no]
  272.   --disable-lzma           disable lzma [autodetect]
  273.   --enable-decklink        enable Blackmagick DeckLink I/O support [no]
  274.   --enable-mmal            enable decoding via MMAL [no]
  275.   --enable-nvenc           enable NVIDIA NVENC support [no]
  276.   --enable-openal          enable OpenAL 1.1 capture support [no]
  277.   --enable-opencl          enable OpenCL code
  278.   --enable-opengl          enable OpenGL rendering [no]
  279.   --enable-openssl         enable openssl, needed for https support
  280.                            if gnutls is not used [no]
  281.   --disable-sdl            disable sdl [autodetect]
  282.   --disable-securetransport disable Secure Transport, needed for TLS support
  283.                            on OSX if openssl and gnutls are not used [autodetect]
  284.   --enable-x11grab         enable X11 grabbing (legacy) [no]
  285.   --disable-xlib           disable xlib [autodetect]
  286.   --disable-zlib           disable zlib [autodetect]
  287.  
  288. Toolchain options:
  289.   --arch=ARCH              select architecture [$arch]
  290.   --cpu=CPU                select the minimum required CPU (affects
  291.                            instruction selection, may crash on older CPUs)
  292.   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
  293.   --progs-suffix=SUFFIX    program name suffix []
  294.   --enable-cross-compile   assume a cross-compiler is used
  295.   --sysroot=PATH           root of cross-build tree
  296.   --sysinclude=PATH        location of cross-build system headers
  297.   --target-os=OS           compiler targets OS [$target_os]
  298.   --target-exec=CMD        command to run executables on target
  299.   --target-path=DIR        path to view of build directory on target
  300.   --target-samples=DIR     path to samples directory on target
  301.   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
  302.   --toolchain=NAME         set tool defaults according to NAME
  303.   --nm=NM                  use nm tool NM [$nm_default]
  304.   --ar=AR                  use archive tool AR [$ar_default]
  305.   --as=AS                  use assembler AS [$as_default]
  306.   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
  307.   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
  308.   --cc=CC                  use C compiler CC [$cc_default]
  309.   --cxx=CXX                use C compiler CXX [$cxx_default]
  310.   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
  311.   --ld=LD                  use linker LD [$ld_default]
  312.   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
  313.   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
  314.   --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
  315.   --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
  316.   --host-cc=HOSTCC         use host C compiler HOSTCC
  317.   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
  318.   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
  319.   --host-ld=HOSTLD         use host linker HOSTLD
  320.   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
  321.   --host-libs=HLIBS        use libs HLIBS when linking for host
  322.   --host-os=OS             compiler host OS [$target_os]
  323.   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
  324.   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
  325.   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
  326.   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
  327.   --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS]
  328.   --extra-libs=ELIBS       add ELIBS [$ELIBS]
  329.   --extra-version=STRING   version string suffix []
  330.   --optflags=OPTFLAGS      override optimization-related compiler flags
  331.   --build-suffix=SUFFIX    library name suffix []
  332.   --enable-pic             build position-independent code
  333.   --enable-thumb           compile for Thumb instruction set
  334.   --enable-lto             use link-time optimization
  335.   --env="ENV=override"     override the environment variables
  336.  
  337. Advanced options (experts only):
  338.   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
  339.   --disable-symver         disable symbol versioning
  340.   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
  341.   --disable-safe-bitstream-reader
  342.                            disable buffer boundary checking in bitreaders
  343.                            (faster, but may crash)
  344.   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
  345.   --sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]
  346.  
  347. Optimization options (experts only):
  348.   --disable-asm            disable all assembly optimizations
  349.   --disable-altivec        disable AltiVec optimizations
  350.   --disable-vsx            disable VSX optimizations
  351.   --disable-power8         disable POWER8 optimizations
  352.   --disable-amd3dnow       disable 3DNow! optimizations
  353.   --disable-amd3dnowext    disable 3DNow! extended optimizations
  354.   --disable-mmx            disable MMX optimizations
  355.   --disable-mmxext         disable MMXEXT optimizations
  356.   --disable-sse            disable SSE optimizations
  357.   --disable-sse2           disable SSE2 optimizations
  358.   --disable-sse3           disable SSE3 optimizations
  359.   --disable-ssse3          disable SSSE3 optimizations
  360.   --disable-sse4           disable SSE4 optimizations
  361.   --disable-sse42          disable SSE4.2 optimizations
  362.   --disable-avx            disable AVX optimizations
  363.   --disable-xop            disable XOP optimizations
  364.   --disable-fma3           disable FMA3 optimizations
  365.   --disable-fma4           disable FMA4 optimizations
  366.   --disable-avx2           disable AVX2 optimizations
  367.   --disable-armv5te        disable armv5te optimizations
  368.   --disable-armv6          disable armv6 optimizations
  369.   --disable-armv6t2        disable armv6t2 optimizations
  370.   --disable-vfp            disable VFP optimizations
  371.   --disable-neon           disable NEON optimizations
  372.   --disable-inline-asm     disable use of inline assembly
  373.   --disable-yasm           disable use of nasm/yasm assembly
  374.   --disable-mips32r5       disable MIPS32R5 optimizations
  375.   --disable-mips64r6       disable MIPS64R6 optimizations
  376.   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
  377.   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
  378.   --disable-msa            disable MSA optimizations
  379.   --disable-mipsfpu        disable floating point MIPS optimizations
  380.   --disable-mmi            disable Loongson SIMD optimizations
  381.   --disable-fast-unaligned consider unaligned accesses slow
  382.  
  383. Developer options (useful when working on FFmpeg itself):
  384.   --disable-debug          disable debugging symbols
  385.   --enable-debug=LEVEL     set the debug level [$debuglevel]
  386.   --disable-optimizations  disable compiler optimizations
  387.   --enable-extra-warnings  enable more compiler warnings
  388.   --disable-stripping      disable stripping of executables and shared libraries
  389.   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
  390.                            2 causes a slowdown at runtime.
  391.   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
  392.   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
  393.                            leaks and errors, using the specified valgrind binary.
  394.                            Cannot be combined with --target-exec
  395.   --enable-ftrapv          Trap arithmetic overflows
  396.   --samples=PATH           location of test samples for FATE, if not set use
  397.                            \$FATE_SAMPLES at make invocation time.
  398.   --enable-neon-clobber-test check NEON registers for clobbering (should be
  399.                            used only for debugging purposes)
  400.   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
  401.                            should be used only for debugging purposes)
  402.   --enable-random          randomly enable/disable components
  403.   --disable-random
  404.   --enable-random=LIST     randomly enable/disable specific components or
  405.   --disable-random=LIST    component groups. LIST is a comma-separated list
  406.                            of NAME[:PROB] entries where NAME is a component
  407.                            (group) and PROB the probability associated with
  408.                            NAME (default 0.5).
  409.   --random-seed=VALUE      seed value for --enable/disable-random
  410.   --disable-valgrind-backtrace do not print a backtrace under Valgrind
  411.                            (only applies to --disable-optimizations builds)
  412.  
  413. NOTE: Object files are built at the place where configure is launched.
  414. EOF
  415.   exit 0
  416. }
  417.  
  418. quotes='""'
  419.  
  420. log(){
  421.     echo "$@" >> $logfile
  422. }
  423.  
  424. log_file(){
  425.     log BEGIN $1
  426.     pr -n -t $1 >> $logfile
  427.     log END $1
  428. }
  429.  
  430. echolog(){
  431.     log "$@"
  432.     echo "$@"
  433. }
  434.  
  435. warn(){
  436.     log "WARNING: $*"
  437.     WARNINGS="${WARNINGS}WARNING: $*\n"
  438. }
  439.  
  440. die(){
  441.     echolog "$@"
  442.     cat <<EOF
  443.  
  444. If you think configure made a mistake, make sure you are using the latest
  445. version from Git.  If the latest version fails, report the problem to the
  446. ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
  447. EOF
  448.     if disabled logging; then
  449.         cat <<EOF
  450. Rerun configure with logging enabled (do not use --disable-logging), and
  451. include the log this produces with your report.
  452. EOF
  453.     else
  454.         cat <<EOF
  455. Include the log file "$logfile" produced by configure as this will help
  456. solve the problem.
  457. EOF
  458.     fi
  459.     exit 1
  460. }
  461.  
  462. # Avoid locale weirdness, besides we really just want to translate ASCII.
  463. toupper(){
  464.     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
  465. }
  466.  
  467. tolower(){
  468.     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
  469. }
  470.  
  471. c_escape(){
  472.     echo "$*" | sed 's/["\\]/\\\0/g'
  473. }
  474.  
  475. sh_quote(){
  476.     v=$(echo "$1" | sed "s/'/'\\\\''/g")
  477.     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
  478.     echo "$v"
  479. }
  480.  
  481. cleanws(){
  482.     echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
  483. }
  484.  
  485. filter(){
  486.     pat=$1
  487.     shift
  488.     for v; do
  489.         eval "case $v in $pat) echo $v ;; esac"
  490.     done
  491. }
  492.  
  493. filter_out(){
  494.     pat=$1
  495.     shift
  496.     for v; do
  497.         eval "case $v in $pat) ;; *) echo $v ;; esac"
  498.     done
  499. }
  500.  
  501. map(){
  502.     m=$1
  503.     shift
  504.     for v; do eval $m; done
  505. }
  506.  
  507. add_suffix(){
  508.     suffix=$1
  509.     shift
  510.     for v; do echo ${v}${suffix}; done
  511. }
  512.  
  513. set_all(){
  514.     value=$1
  515.     shift
  516.     for var in $*; do
  517.         eval $var=$value
  518.     done
  519. }
  520.  
  521. set_weak(){
  522.     value=$1
  523.     shift
  524.     for var; do
  525.         eval : \${$var:=$value}
  526.     done
  527. }
  528.  
  529. sanitize_var_name(){
  530.     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
  531. }
  532.  
  533. set_safe(){
  534.     var=$1
  535.     shift
  536.     eval $(sanitize_var_name "$var")='$*'
  537. }
  538.  
  539. get_safe(){
  540.     eval echo \$$(sanitize_var_name "$1")
  541. }
  542.  
  543. pushvar(){
  544.     for pvar in $*; do
  545.         eval level=\${${pvar}_level:=0}
  546.         eval ${pvar}_${level}="\$$pvar"
  547.         eval ${pvar}_level=$(($level+1))
  548.     done
  549. }
  550.  
  551. popvar(){
  552.     for pvar in $*; do
  553.         eval level=\${${pvar}_level:-0}
  554.         test $level = 0 && continue
  555.         eval level=$(($level-1))
  556.         eval $pvar="\${${pvar}_${level}}"
  557.         eval ${pvar}_level=$level
  558.         eval unset ${pvar}_${level}
  559.     done
  560. }
  561.  
  562. enable(){
  563.     set_all yes $*
  564. }
  565.  
  566. disable(){
  567.     set_all no $*
  568. }
  569.  
  570. enable_weak(){
  571.     set_weak yes $*
  572. }
  573.  
  574. disable_weak(){
  575.     set_weak no $*
  576. }
  577.  
  578. enable_safe(){
  579.     for var; do
  580.         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
  581.     done
  582. }
  583.  
  584. disable_safe(){
  585.     for var; do
  586.         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
  587.     done
  588. }
  589.  
  590. do_enable_deep(){
  591.     for var; do
  592.         enabled $var && continue
  593.         eval sel="\$${var}_select"
  594.         eval sgs="\$${var}_suggest"
  595.         pushvar var sgs
  596.         enable_deep $sel
  597.         popvar sgs
  598.         enable_deep_weak $sgs
  599.         popvar var
  600.     done
  601. }
  602.  
  603. enable_deep(){
  604.     do_enable_deep $*
  605.     enable $*
  606. }
  607.  
  608. enable_deep_weak(){
  609.     for var; do
  610.         disabled $var && continue
  611.         pushvar var
  612.         do_enable_deep $var
  613.         popvar var
  614.         enable_weak $var
  615.     done
  616. }
  617.  
  618. enabled(){
  619.     test "${1#!}" = "$1" && op== || op=!=
  620.     eval test "x\$${1#!}" $op "xyes"
  621. }
  622.  
  623. disabled(){
  624.     test "${1#!}" = "$1" && op== || op=!=
  625.     eval test "x\$${1#!}" $op "xno"
  626. }
  627.  
  628. enabled_all(){
  629.     for opt; do
  630.         enabled $opt || return 1
  631.     done
  632. }
  633.  
  634. disabled_all(){
  635.     for opt; do
  636.         disabled $opt || return 1
  637.     done
  638. }
  639.  
  640. enabled_any(){
  641.     for opt; do
  642.         enabled $opt && return 0
  643.     done
  644. }
  645.  
  646. disabled_any(){
  647.     for opt; do
  648.         disabled $opt && return 0
  649.     done
  650.     return 1
  651. }
  652.  
  653. set_default(){
  654.     for opt; do
  655.         eval : \${$opt:=\$${opt}_default}
  656.     done
  657. }
  658.  
  659. is_in(){
  660.     value=$1
  661.     shift
  662.     for var in $*; do
  663.         [ $var = $value ] && return 0
  664.     done
  665.     return 1
  666. }
  667.  
  668. do_check_deps(){
  669.     for cfg; do
  670.         cfg="${cfg#!}"
  671.         enabled ${cfg}_checking && die "Circular dependency for $cfg."
  672.         disabled ${cfg}_checking && continue
  673.         enable ${cfg}_checking
  674.         append allopts $cfg
  675.  
  676.         eval dep_all="\$${cfg}_deps"
  677.         eval dep_any="\$${cfg}_deps_any"
  678.         eval dep_sel="\$${cfg}_select"
  679.         eval dep_sgs="\$${cfg}_suggest"
  680.         eval dep_ifa="\$${cfg}_if"
  681.         eval dep_ifn="\$${cfg}_if_any"
  682.  
  683.         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
  684.         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
  685.         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
  686.  
  687.         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
  688.         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
  689.         enabled_all  $dep_all || disable $cfg
  690.         enabled_any  $dep_any || disable $cfg
  691.         disabled_any $dep_sel && disable $cfg
  692.  
  693.         if enabled $cfg; then
  694.             enable_deep $dep_sel
  695.             enable_deep_weak $dep_sgs
  696.         fi
  697.  
  698.         disable ${cfg}_checking
  699.     done
  700. }
  701.  
  702. check_deps(){
  703.     unset allopts
  704.  
  705.     do_check_deps "$@"
  706.  
  707.     for cfg in $allopts; do
  708.         enabled $cfg || continue
  709.         eval dep_extralibs="\$${cfg}_extralibs"
  710.         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
  711.     done
  712. }
  713.  
  714. print_config(){
  715.     pfx=$1
  716.     files=$2
  717.     shift 2
  718.     map 'eval echo "$v \${$v:-no}"' "$@" |
  719.     awk "BEGIN { split(\"$files\", files) }
  720.         {
  721.             c = \"$pfx\" toupper(\$1);
  722.             v = \$2;
  723.             sub(/yes/, 1, v);
  724.             sub(/no/,  0, v);
  725.             for (f in files) {
  726.                 file = files[f];
  727.                 if (file ~ /\\.h\$/) {
  728.                     printf(\"#define %s %d\\n\", c, v) >>file;
  729.                 } else if (file ~ /\\.asm\$/) {
  730.                     printf(\"%%define %s %d\\n\", c, v) >>file;
  731.                 } else if (file ~ /\\.mak\$/) {
  732.                     n = -v ? \"\" : \"!\";
  733.                     printf(\"%s%s=yes\\n\", n, c) >>file;
  734.                 } else if (file ~ /\\.texi\$/) {
  735.                     pre = -v ? \"\" : \"@c \";
  736.                     yesno = \$2;
  737.                     c2 = tolower(c);
  738.                     gsub(/_/, \"-\", c2);
  739.                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
  740.                 }
  741.             }
  742.         }"
  743. }
  744.  
  745. print_enabled(){
  746.     suf=$1
  747.     shift
  748.     for v; do
  749.         enabled $v && printf "%s\n" ${v%$suf};
  750.     done
  751. }
  752.  
  753. append(){
  754.     var=$1
  755.     shift
  756.     eval "$var=\"\$$var $*\""
  757. }
  758.  
  759. prepend(){
  760.     var=$1
  761.     shift
  762.     eval "$var=\"$* \$$var\""
  763. }
  764.  
  765. unique(){
  766.     var=$1
  767.     uniq_list=""
  768.     for tok in $(eval echo \$$var); do
  769.         uniq_list="$(filter_out $tok $uniq_list) $tok"
  770.     done
  771.     eval "$var=\"${uniq_list}\""
  772. }
  773.  
  774. add_cppflags(){
  775.     append CPPFLAGS "$@"
  776. }
  777.  
  778. add_cflags(){
  779.     append CFLAGS $($cflags_filter "$@")
  780. }
  781.  
  782. add_cxxflags(){
  783.     append CXXFLAGS $($cflags_filter "$@")
  784. }
  785.  
  786. add_asflags(){
  787.     append ASFLAGS $($asflags_filter "$@")
  788. }
  789.  
  790. add_ldflags(){
  791.     append LDFLAGS $($ldflags_filter "$@")
  792. }
  793.  
  794. add_ldexeflags(){
  795.     append LDEXEFLAGS $($ldflags_filter "$@")
  796. }
  797.  
  798. add_ldlibflags(){
  799.     append LDLIBFLAGS $($ldflags_filter "$@")
  800. }
  801.  
  802. add_stripflags(){
  803.     append ASMSTRIPFLAGS "$@"
  804. }
  805.  
  806. add_extralibs(){
  807.     prepend extralibs $($ldflags_filter "$@")
  808. }
  809.  
  810. add_host_cppflags(){
  811.     append host_cppflags "$@"
  812. }
  813.  
  814. add_host_cflags(){
  815.     append host_cflags $($host_cflags_filter "$@")
  816. }
  817.  
  818. add_host_ldflags(){
  819.     append host_ldflags $($host_ldflags_filter "$@")
  820. }
  821.  
  822. add_compat(){
  823.     append compat_objs $1
  824.     shift
  825.     map 'add_cppflags -D$v' "$@"
  826. }
  827.  
  828. check_cmd(){
  829.     log "$@"
  830.     "$@" >> $logfile 2>&1
  831. }
  832.  
  833. check_stat(){
  834.     log check_stat "$@"
  835.     stat "$1" >> $logfile 2>&1
  836. }
  837.  
  838. cc_o(){
  839.     eval printf '%s\\n' $CC_O
  840. }
  841.  
  842. cc_e(){
  843.     eval printf '%s\\n' $CC_E
  844. }
  845.  
  846. check_cc(){
  847.     log check_cc "$@"
  848.     cat > $TMPC
  849.     log_file $TMPC
  850.     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
  851. }
  852.  
  853. check_cxx(){
  854.     log check_cxx "$@"
  855.     cat > $TMPCPP
  856.     log_file $TMPCPP
  857.     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
  858. }
  859.  
  860. check_oc(){
  861.     log check_oc "$@"
  862.     cat > $TMPM
  863.     log_file $TMPM
  864.     check_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM
  865. }
  866.  
  867. check_cpp(){
  868.     log check_cpp "$@"
  869.     cat > $TMPC
  870.     log_file $TMPC
  871.     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
  872. }
  873.  
  874. as_o(){
  875.     eval printf '%s\\n' $AS_O
  876. }
  877.  
  878. check_as(){
  879.     log check_as "$@"
  880.     cat > $TMPS
  881.     log_file $TMPS
  882.     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
  883. }
  884.  
  885. check_inline_asm(){
  886.     log check_inline_asm "$@"
  887.     name="$1"
  888.     code="$2"
  889.     shift 2
  890.     disable $name
  891.     check_cc "$@" <<EOF && enable $name
  892. void foo(void){ __asm__ volatile($code); }
  893. EOF
  894. }
  895.  
  896. check_insn(){
  897.     log check_insn "$@"
  898.     check_inline_asm ${1}_inline "\"$2\""
  899.     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
  900. }
  901.  
  902. check_yasm(){
  903.     log check_yasm "$@"
  904.     echo "$1" > $TMPS
  905.     log_file $TMPS
  906.     shift 1
  907.     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
  908. }
  909.  
  910. ld_o(){
  911.     eval printf '%s\\n' $LD_O
  912. }
  913.  
  914. check_ld(){
  915.     log check_ld "$@"
  916.     type=$1
  917.     shift 1
  918.     flags=$(filter_out '-l*|*.so' $@)
  919.     libs=$(filter '-l*|*.so' $@)
  920.     check_$type $($cflags_filter $flags) || return
  921.     flags=$($ldflags_filter $flags)
  922.     libs=$($ldflags_filter $libs)
  923.     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
  924. }
  925.  
  926. print_include(){
  927.     hdr=$1
  928.     test "${hdr%.h}" = "${hdr}" &&
  929.         echo "#include $hdr"    ||
  930.         echo "#include <$hdr>"
  931. }
  932.  
  933. check_code(){
  934.     log check_code "$@"
  935.     check=$1
  936.     headers=$2
  937.     code=$3
  938.     shift 3
  939.     {
  940.         for hdr in $headers; do
  941.             print_include $hdr
  942.         done
  943.         echo "int main(void) { $code; return 0; }"
  944.     } | check_$check "$@"
  945. }
  946.  
  947. check_cppflags(){
  948.     log check_cppflags "$@"
  949.     check_cc "$@" <<EOF && append CPPFLAGS "$@"
  950. int x;
  951. EOF
  952. }
  953.  
  954. test_cflags(){
  955.     log test_cflags "$@"
  956.     set -- $($cflags_filter "$@")
  957.     check_cc "$@" <<EOF
  958. int x;
  959. EOF
  960. }
  961.  
  962. check_cflags(){
  963.     log check_cflags "$@"
  964.     test_cflags "$@" && add_cflags "$@"
  965. }
  966.  
  967. check_cxxflags(){
  968.     log check_cxxflags "$@"
  969.     set -- $($cflags_filter "$@")
  970.     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
  971. int x;
  972. EOF
  973. }
  974.  
  975. test_ldflags(){
  976.     log test_ldflags "$@"
  977.     check_ld "cc" "$@" <<EOF
  978. int main(void){ return 0; }
  979. EOF
  980. }
  981.  
  982. check_ldflags(){
  983.     log check_ldflags "$@"
  984.     test_ldflags "$@" && add_ldflags "$@"
  985. }
  986.  
  987. test_stripflags(){
  988.     log test_stripflags "$@"
  989.     # call check_cc to get a fresh TMPO
  990.     check_cc <<EOF
  991. int main(void) { return 0; }
  992. EOF
  993.     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
  994. }
  995.  
  996. check_stripflags(){
  997.     log check_stripflags "$@"
  998.     test_stripflags "$@" && add_stripflags "$@"
  999. }
  1000.  
  1001. check_header(){
  1002.     log check_header "$@"
  1003.     header=$1
  1004.     shift
  1005.     disable_safe $header
  1006.     check_cpp "$@" <<EOF && enable_safe $header
  1007. #include <$header>
  1008. int x;
  1009. EOF
  1010. }
  1011.  
  1012. check_header_oc(){
  1013.     log check_header_oc "$@"
  1014.     rm -f -- "$TMPO"
  1015.     header=$1
  1016.     shift
  1017.     disable_safe $header
  1018.     {
  1019.        echo "#include <$header>"
  1020.        echo "int main(void) { return 0; }"
  1021.     } | check_oc && check_stat "$TMPO" && enable_safe $headers
  1022. }
  1023.  
  1024. check_func(){
  1025.     log check_func "$@"
  1026.     func=$1
  1027.     shift
  1028.     disable $func
  1029.     check_ld "cc" "$@" <<EOF && enable $func
  1030. extern int $func();
  1031. int main(void){ $func(); }
  1032. EOF
  1033. }
  1034.  
  1035. check_mathfunc(){
  1036.     log check_mathfunc "$@"
  1037.     func=$1
  1038.     narg=$2
  1039.     shift 2
  1040.     test $narg = 2 && args="f, g" || args="f"
  1041.     disable $func
  1042.     check_ld "cc" "$@" <<EOF && enable $func
  1043. #include <math.h>
  1044. float foo(float f, float g) { return $func($args); }
  1045. int main(void){ return (int) foo; }
  1046. EOF
  1047. }
  1048.  
  1049. check_func_headers(){
  1050.     log check_func_headers "$@"
  1051.     headers=$1
  1052.     funcs=$2
  1053.     shift 2
  1054.     {
  1055.         for hdr in $headers; do
  1056.             print_include $hdr
  1057.         done
  1058.         for func in $funcs; do
  1059.             echo "long check_$func(void) { return (long) $func; }"
  1060.         done
  1061.         echo "int main(void) { return 0; }"
  1062.     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
  1063. }
  1064.  
  1065. check_class_headers_cpp(){
  1066.     log check_class_headers_cpp "$@"
  1067.     headers=$1
  1068.     classes=$2
  1069.     shift 2
  1070.     {
  1071.         for hdr in $headers; do
  1072.             echo "#include <$hdr>"
  1073.         done
  1074.         echo "int main(void) { "
  1075.         i=1
  1076.         for class in $classes; do
  1077.             echo "$class obj$i;"
  1078.             i=$(expr $i + 1)
  1079.         done
  1080.         echo "return 0; }"
  1081.     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
  1082. }
  1083.  
  1084. check_cpp_condition(){
  1085.     log check_cpp_condition "$@"
  1086.     header=$1
  1087.     condition=$2
  1088.     shift 2
  1089.     check_cpp "$@" <<EOF
  1090. #include <$header>
  1091. #if !($condition)
  1092. #error "unsatisfied condition: $condition"
  1093. #endif
  1094. EOF
  1095. }
  1096.  
  1097. check_lib(){
  1098.     log check_lib "$@"
  1099.     header="$1"
  1100.     func="$2"
  1101.     shift 2
  1102.     check_header $header && check_func $func "$@" && add_extralibs "$@"
  1103. }
  1104.  
  1105. check_lib2(){
  1106.     log check_lib2 "$@"
  1107.     headers="$1"
  1108.     funcs="$2"
  1109.     shift 2
  1110.     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
  1111. }
  1112.  
  1113. check_lib_cpp(){
  1114.     log check_lib_cpp "$@"
  1115.     headers="$1"
  1116.     classes="$2"
  1117.     shift 2
  1118.     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
  1119. }
  1120.  
  1121. check_pkg_config(){
  1122.     log check_pkg_config "$@"
  1123.     pkgandversion="$1"
  1124.     pkg="${1%% *}"
  1125.     headers="$2"
  1126.     funcs="$3"
  1127.     shift 3
  1128.     check_cmd $pkg_config --exists --print-errors $pkgandversion || return
  1129.     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
  1130.     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
  1131.     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
  1132.         set_safe "${pkg}_cflags" $pkg_cflags   &&
  1133.         set_safe "${pkg}_libs"   $pkg_libs
  1134. }
  1135.  
  1136. check_exec(){
  1137.     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
  1138. }
  1139.  
  1140. check_exec_crash(){
  1141.     code=$(cat)
  1142.  
  1143.     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
  1144.     # are safe but may not be available everywhere.  Thus we use
  1145.     # raise(SIGTERM) instead.  The check is run in a subshell so we
  1146.     # can redirect the "Terminated" message from the shell.  SIGBUS
  1147.     # is not defined by standard C so it is used conditionally.
  1148.  
  1149.     (check_exec "$@") >> $logfile 2>&1 <<EOF
  1150. #include <signal.h>
  1151. static void sighandler(int sig){
  1152.     raise(SIGTERM);
  1153. }
  1154. int foo(void){
  1155.     $code
  1156. }
  1157. int (*func_ptr)(void) = foo;
  1158. int main(void){
  1159.     signal(SIGILL, sighandler);
  1160.     signal(SIGFPE, sighandler);
  1161.     signal(SIGSEGV, sighandler);
  1162. #ifdef SIGBUS
  1163.     signal(SIGBUS, sighandler);
  1164. #endif
  1165.     return func_ptr();
  1166. }
  1167. EOF
  1168. }
  1169.  
  1170. check_type(){
  1171.     log check_type "$@"
  1172.     headers=$1
  1173.     type=$2
  1174.     shift 2
  1175.     disable_safe "$type"
  1176.     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
  1177. }
  1178.  
  1179. check_struct(){
  1180.     log check_struct "$@"
  1181.     headers=$1
  1182.     struct=$2
  1183.     member=$3
  1184.     shift 3
  1185.     disable_safe "${struct}_${member}"
  1186.     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
  1187.         enable_safe "${struct}_${member}"
  1188. }
  1189.  
  1190. check_builtin(){
  1191.     log check_builtin "$@"
  1192.     name=$1
  1193.     headers=$2
  1194.     builtin=$3
  1195.     shift 3
  1196.     disable "$name"
  1197.     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
  1198. }
  1199.  
  1200. check_compile_assert(){
  1201.     log check_compile_assert "$@"
  1202.     name=$1
  1203.     headers=$2
  1204.     condition=$3
  1205.     shift 3
  1206.     disable "$name"
  1207.     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
  1208. }
  1209.  
  1210. require(){
  1211.     name="$1"
  1212.     header="$2"
  1213.     func="$3"
  1214.     shift 3
  1215.     check_lib $header $func "$@" || die "ERROR: $name not found"
  1216. }
  1217.  
  1218. require2(){
  1219.     name="$1"
  1220.     headers="$2"
  1221.     func="$3"
  1222.     shift 3
  1223.     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
  1224. }
  1225.  
  1226. require_cpp(){
  1227.     name="$1"
  1228.     headers="$2"
  1229.     classes="$3"
  1230.     shift 3
  1231.     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
  1232. }
  1233.  
  1234. use_pkg_config(){
  1235.     pkg="$1"
  1236.     check_pkg_config "$@" || return 1
  1237.     add_cflags    $(get_safe "${pkg}_cflags")
  1238.     add_extralibs $(get_safe "${pkg}_libs")
  1239. }
  1240.  
  1241. require_pkg_config(){
  1242.     use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
  1243. }
  1244.  
  1245. require_libfreetype(){
  1246.     log require_libfreetype "$@"
  1247.     pkg="freetype2"
  1248.     check_cmd $pkg_config --exists --print-errors $pkg \
  1249.       || die "ERROR: $pkg not found"
  1250.     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
  1251.     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
  1252.     {
  1253.         echo "#include <ft2build.h>"
  1254.         echo "#include FT_FREETYPE_H"
  1255.         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
  1256.         echo "int main(void) { return 0; }"
  1257.     } | check_ld "cc" $pkg_cflags $pkg_libs \
  1258.       && set_safe "${pkg}_cflags" $pkg_cflags \
  1259.       && set_safe "${pkg}_libs"   $pkg_libs \
  1260.       || die "ERROR: $pkg not found"
  1261.     add_cflags    $(get_safe "${pkg}_cflags")
  1262.     add_extralibs $(get_safe "${pkg}_libs")
  1263. }
  1264.  
  1265. hostcc_e(){
  1266.     eval printf '%s\\n' $HOSTCC_E
  1267. }
  1268.  
  1269. hostcc_o(){
  1270.     eval printf '%s\\n' $HOSTCC_O
  1271. }
  1272.  
  1273. check_host_cc(){
  1274.     log check_host_cc "$@"
  1275.     cat > $TMPC
  1276.     log_file $TMPC
  1277.     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
  1278. }
  1279.  
  1280. check_host_cpp(){
  1281.     log check_host_cpp "$@"
  1282.     cat > $TMPC
  1283.     log_file $TMPC
  1284.     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
  1285. }
  1286.  
  1287. check_host_cppflags(){
  1288.     log check_host_cppflags "$@"
  1289.     check_host_cc "$@" <<EOF && append host_cppflags "$@"
  1290. int x;
  1291. EOF
  1292. }
  1293.  
  1294. check_host_cflags(){
  1295.     log check_host_cflags "$@"
  1296.     set -- $($host_cflags_filter "$@")
  1297.     check_host_cc "$@" <<EOF && append host_cflags "$@"
  1298. int x;
  1299. EOF
  1300. }
  1301.  
  1302. check_host_cpp_condition(){
  1303.     log check_host_cpp_condition "$@"
  1304.     header=$1
  1305.     condition=$2
  1306.     shift 2
  1307.     check_host_cpp "$@" <<EOF
  1308. #include <$header>
  1309. #if !($condition)
  1310. #error "unsatisfied condition: $condition"
  1311. #endif
  1312. EOF
  1313. }
  1314.  
  1315. cp_if_changed(){
  1316.     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
  1317.     mkdir -p "$(dirname $2)"
  1318.     $cp_f "$1" "$2"
  1319. }
  1320.  
  1321. # CONFIG_LIST contains configurable options, while HAVE_LIST is for
  1322. # system-dependent things.
  1323.  
  1324. COMPONENT_LIST="
  1325.     bsfs
  1326.     decoders
  1327.     demuxers
  1328.     encoders
  1329.     filters
  1330.     hwaccels
  1331.     indevs
  1332.     muxers
  1333.     outdevs
  1334.     parsers
  1335.     protocols
  1336. "
  1337.  
  1338. EXAMPLE_LIST="
  1339.     avio_reading_example
  1340.     avio_dir_cmd_example
  1341.     decoding_encoding_example
  1342.     demuxing_decoding_example
  1343.     extract_mvs_example
  1344.     filter_audio_example
  1345.     filtering_audio_example
  1346.     filtering_video_example
  1347.     metadata_example
  1348.     muxing_example
  1349.     qsvdec_example
  1350.     remuxing_example
  1351.     resampling_audio_example
  1352.     scaling_video_example
  1353.     transcode_aac_example
  1354.     transcoding_example
  1355. "
  1356.  
  1357. EXTERNAL_LIBRARY_LIST="
  1358.     avisynth
  1359.     bzlib
  1360.     crystalhd
  1361.     decklink
  1362.     frei0r
  1363.     gnutls
  1364.     iconv
  1365.     ladspa
  1366.     libaacplus
  1367.     libass
  1368.     libbluray
  1369.     libbs2b
  1370.     libcaca
  1371.     libcdio
  1372.     libcelt
  1373.     libdc1394
  1374.     libdcadec
  1375.     libfaac
  1376.     libfdk_aac
  1377.     libflite
  1378.     libfontconfig
  1379.     libfreetype
  1380.     libfribidi
  1381.     libgme
  1382.     libgsm
  1383.     libiec61883
  1384.     libilbc
  1385.     libkvazaar
  1386.     libmfx
  1387.     libmodplug
  1388.     libmp3lame
  1389.     libnut
  1390.     libopencore_amrnb
  1391.     libopencore_amrwb
  1392.     libopencv
  1393.     libopenh264
  1394.     libopenjpeg
  1395.     libopus
  1396.     libpulse
  1397.     libquvi
  1398.     librtmp
  1399.     libschroedinger
  1400.     libshine
  1401.     libsmbclient
  1402.     libsnappy
  1403.     libsoxr
  1404.     libspeex
  1405.     libssh
  1406.     libstagefright_h264
  1407.     libtheora
  1408.     libtwolame
  1409.     libutvideo
  1410.     libv4l2
  1411.     libvidstab
  1412.     libvo_aacenc
  1413.     libvo_amrwbenc
  1414.     libvorbis
  1415.     libvpx
  1416.     libwavpack
  1417.     libwebp
  1418.     libx264
  1419.     libx265
  1420.     libxavs
  1421.     libxcb
  1422.     libxcb_shm
  1423.     libxcb_shape
  1424.     libxcb_xfixes
  1425.     libxvid
  1426.     libzmq
  1427.     libzvbi
  1428.     lzma
  1429.     mmal
  1430.     nvenc
  1431.     openal
  1432.     opencl
  1433.     opengl
  1434.     openssl
  1435.     sdl
  1436.     securetransport
  1437.     x11grab
  1438.     xlib
  1439.     zlib
  1440. "
  1441.  
  1442. DOCUMENT_LIST="
  1443.     doc
  1444.     htmlpages
  1445.     manpages
  1446.     podpages
  1447.     txtpages
  1448. "
  1449.  
  1450. FEATURE_LIST="
  1451.     ftrapv
  1452.     gray
  1453.     hardcoded_tables
  1454.     runtime_cpudetect
  1455.     safe_bitstream_reader
  1456.     shared
  1457.     small
  1458.     static
  1459.     swscale_alpha
  1460. "
  1461.  
  1462. HWACCEL_LIST="
  1463.     d3d11va
  1464.     dxva2
  1465.     vaapi
  1466.     vda
  1467.     vdpau
  1468.     videotoolbox
  1469.     xvmc
  1470. "
  1471.  
  1472. LIBRARY_LIST="
  1473.     avcodec
  1474.     avdevice
  1475.     avfilter
  1476.     avformat
  1477.     avresample
  1478.     avutil
  1479.     postproc
  1480.     swresample
  1481.     swscale
  1482. "
  1483.  
  1484. LICENSE_LIST="
  1485.     gpl
  1486.     nonfree
  1487.     version3
  1488. "
  1489.  
  1490. PROGRAM_LIST="
  1491.     ffplay
  1492.     ffprobe
  1493.     ffserver
  1494.     ffmpeg
  1495. "
  1496.  
  1497. SUBSYSTEM_LIST="
  1498.     dct
  1499.     dwt
  1500.     error_resilience
  1501.     faan
  1502.     fast_unaligned
  1503.     fft
  1504.     lsp
  1505.     lzo
  1506.     mdct
  1507.     pixelutils
  1508.     network
  1509.     rdft
  1510. "
  1511.  
  1512. CONFIG_LIST="
  1513.     $COMPONENT_LIST
  1514.     $DOCUMENT_LIST
  1515.     $EXAMPLE_LIST
  1516.     $EXTERNAL_LIBRARY_LIST
  1517.     $FEATURE_LIST
  1518.     $HWACCEL_LIST
  1519.     $LICENSE_LIST
  1520.     $LIBRARY_LIST
  1521.     $PROGRAM_LIST
  1522.     $SUBSYSTEM_LIST
  1523.     fontconfig
  1524.     incompatible_libav_abi
  1525.     memalign_hack
  1526.     memory_poisoning
  1527.     neon_clobber_test
  1528.     pic
  1529.     pod2man
  1530.     raise_major
  1531.     thumb
  1532.     valgrind_backtrace
  1533.     xmm_clobber_test
  1534. "
  1535.  
  1536. THREADS_LIST="
  1537.     pthreads
  1538.     os2threads
  1539.     w32threads
  1540. "
  1541.  
  1542. ATOMICS_LIST="
  1543.     atomics_gcc
  1544.     atomics_suncc
  1545.     atomics_win32
  1546. "
  1547.  
  1548. ARCH_LIST="
  1549.     aarch64
  1550.     alpha
  1551.     arm
  1552.     avr32
  1553.     avr32_ap
  1554.     avr32_uc
  1555.     bfin
  1556.     ia64
  1557.     m68k
  1558.     mips
  1559.     mips64
  1560.     parisc
  1561.     ppc
  1562.     ppc64
  1563.     s390
  1564.     sh4
  1565.     sparc
  1566.     sparc64
  1567.     tilegx
  1568.     tilepro
  1569.     tomi
  1570.     x86
  1571.     x86_32
  1572.     x86_64
  1573. "
  1574.  
  1575. ARCH_EXT_LIST_ARM="
  1576.     armv5te
  1577.     armv6
  1578.     armv6t2
  1579.     armv8
  1580.     neon
  1581.     vfp
  1582.     vfpv3
  1583.     setend
  1584. "
  1585.  
  1586. ARCH_EXT_LIST_MIPS="
  1587.     mipsfpu
  1588.     mips32r2
  1589.     mips32r5
  1590.     mips64r6
  1591.     mipsdspr1
  1592.     mipsdspr2
  1593.     msa
  1594. "
  1595.  
  1596. ARCH_EXT_LIST_LOONGSON="
  1597.     loongson2
  1598.     loongson3
  1599.     mmi
  1600. "
  1601.  
  1602. ARCH_EXT_LIST_X86_SIMD="
  1603.     amd3dnow
  1604.     amd3dnowext
  1605.     avx
  1606.     avx2
  1607.     fma3
  1608.     fma4
  1609.     mmx
  1610.     mmxext
  1611.     sse
  1612.     sse2
  1613.     sse3
  1614.     sse4
  1615.     sse42
  1616.     ssse3
  1617.     xop
  1618. "
  1619.  
  1620. ARCH_EXT_LIST_PPC="
  1621.     altivec
  1622.     dcbzl
  1623.     ldbrx
  1624.     power8
  1625.     ppc4xx
  1626.     vsx
  1627. "
  1628.  
  1629. ARCH_EXT_LIST_X86="
  1630.     $ARCH_EXT_LIST_X86_SIMD
  1631.     cpunop
  1632.     i686
  1633. "
  1634.  
  1635. ARCH_EXT_LIST="
  1636.     $ARCH_EXT_LIST_ARM
  1637.     $ARCH_EXT_LIST_PPC
  1638.     $ARCH_EXT_LIST_X86
  1639.     $ARCH_EXT_LIST_MIPS
  1640.     $ARCH_EXT_LIST_LOONGSON
  1641. "
  1642.  
  1643. ARCH_FEATURES="
  1644.     aligned_stack
  1645.     fast_64bit
  1646.     fast_clz
  1647.     fast_cmov
  1648.     local_aligned_8
  1649.     local_aligned_16
  1650.     local_aligned_32
  1651.     simd_align_16
  1652. "
  1653.  
  1654. BUILTIN_LIST="
  1655.     atomic_cas_ptr
  1656.     atomic_compare_exchange
  1657.     machine_rw_barrier
  1658.     MemoryBarrier
  1659.     mm_empty
  1660.     rdtsc
  1661.     sarestart
  1662.     sync_val_compare_and_swap
  1663. "
  1664. HAVE_LIST_CMDLINE="
  1665.     inline_asm
  1666.     symver
  1667.     yasm
  1668. "
  1669.  
  1670. HAVE_LIST_PUB="
  1671.     bigendian
  1672.     fast_unaligned
  1673.     incompatible_libav_abi
  1674. "
  1675.  
  1676. HEADERS_LIST="
  1677.     alsa_asoundlib_h
  1678.     altivec_h
  1679.     arpa_inet_h
  1680.     asm_types_h
  1681.     cdio_paranoia_h
  1682.     cdio_paranoia_paranoia_h
  1683.     dev_bktr_ioctl_bt848_h
  1684.     dev_bktr_ioctl_meteor_h
  1685.     dev_ic_bt8xx_h
  1686.     dev_video_bktr_ioctl_bt848_h
  1687.     dev_video_meteor_ioctl_meteor_h
  1688.     direct_h
  1689.     dirent_h
  1690.     dlfcn_h
  1691.     d3d11_h
  1692.     dxva_h
  1693.     ES2_gl_h
  1694.     gsm_h
  1695.     io_h
  1696.     mach_mach_time_h
  1697.     machine_ioctl_bt848_h
  1698.     machine_ioctl_meteor_h
  1699.     malloc_h
  1700.     openjpeg_1_5_openjpeg_h
  1701.     OpenGL_gl3_h
  1702.     poll_h
  1703.     sndio_h
  1704.     soundcard_h
  1705.     sys_mman_h
  1706.     sys_param_h
  1707.     sys_resource_h
  1708.     sys_select_h
  1709.     sys_soundcard_h
  1710.     sys_time_h
  1711.     sys_un_h
  1712.     sys_videoio_h
  1713.     termios_h
  1714.     udplite_h
  1715.     unistd_h
  1716.     valgrind_valgrind_h
  1717.     windows_h
  1718.     winsock2_h
  1719. "
  1720.  
  1721. INTRINSICS_LIST="
  1722.     intrinsics_neon
  1723. "
  1724.  
  1725. MATH_FUNCS="
  1726.     atanf
  1727.     atan2f
  1728.     cbrt
  1729.     cbrtf
  1730.     copysign
  1731.     cosf
  1732.     erf
  1733.     exp2
  1734.     exp2f
  1735.     expf
  1736.     isinf
  1737.     isnan
  1738.     ldexpf
  1739.     llrint
  1740.     llrintf
  1741.     log2
  1742.     log2f
  1743.     log10f
  1744.     lrint
  1745.     lrintf
  1746.     powf
  1747.     rint
  1748.     round
  1749.     roundf
  1750.     sinf
  1751.     trunc
  1752.     truncf
  1753. "
  1754.  
  1755. SYSTEM_FUNCS="
  1756.     access
  1757.     aligned_malloc
  1758.     clock_gettime
  1759.     closesocket
  1760.     CommandLineToArgvW
  1761.     CoTaskMemFree
  1762.     CryptGenRandom
  1763.     dlopen
  1764.     fcntl
  1765.     flt_lim
  1766.     fork
  1767.     getaddrinfo
  1768.     gethrtime
  1769.     getopt
  1770.     GetProcessAffinityMask
  1771.     GetProcessMemoryInfo
  1772.     GetProcessTimes
  1773.     getrusage
  1774.     getservbyport
  1775.     GetSystemTimeAsFileTime
  1776.     gettimeofday
  1777.     glob
  1778.     glXGetProcAddress
  1779.     gmtime_r
  1780.     inet_aton
  1781.     isatty
  1782.     jack_port_get_latency_range
  1783.     kbhit
  1784.     localtime_r
  1785.     lstat
  1786.     lzo1x_999_compress
  1787.     mach_absolute_time
  1788.     MapViewOfFile
  1789.     memalign
  1790.     mkstemp
  1791.     mmap
  1792.     mprotect
  1793.     nanosleep
  1794.     PeekNamedPipe
  1795.     posix_memalign
  1796.     pthread_cancel
  1797.     sched_getaffinity
  1798.     SetConsoleTextAttribute
  1799.     SetConsoleCtrlHandler
  1800.     setmode
  1801.     setrlimit
  1802.     Sleep
  1803.     strerror_r
  1804.     sysconf
  1805.     sysctl
  1806.     usleep
  1807.     VirtualAlloc
  1808.     wglGetProcAddress
  1809. "
  1810.  
  1811. TOOLCHAIN_FEATURES="
  1812.     as_dn_directive
  1813.     as_func
  1814.     as_object_arch
  1815.     asm_mod_q
  1816.     attribute_may_alias
  1817.     attribute_packed
  1818.     ebp_available
  1819.     ebx_available
  1820.     gnu_as
  1821.     gnu_windres
  1822.     ibm_asm
  1823.     inline_asm_labels
  1824.     inline_asm_nonlocal_labels
  1825.     inline_asm_direct_symbol_refs
  1826.     pragma_deprecated
  1827.     rsync_contimeout
  1828.     symver_asm_label
  1829.     symver_gnu_asm
  1830.     vfp_args
  1831.     xform_asm
  1832.     xmm_clobbers
  1833. "
  1834.  
  1835. TYPES_LIST="
  1836.     CONDITION_VARIABLE_Ptr
  1837.     socklen_t
  1838.     struct_addrinfo
  1839.     struct_dcadec_exss_info_matrix_encoding
  1840.     struct_group_source_req
  1841.     struct_ip_mreq_source
  1842.     struct_ipv6_mreq
  1843.     struct_pollfd
  1844.     struct_rusage_ru_maxrss
  1845.     struct_sctp_event_subscribe
  1846.     struct_sockaddr_in6
  1847.     struct_sockaddr_sa_len
  1848.     struct_sockaddr_storage
  1849.     struct_stat_st_mtim_tv_nsec
  1850.     struct_v4l2_frmivalenum_discrete
  1851. "
  1852.  
  1853. HAVE_LIST="
  1854.     $ARCH_EXT_LIST
  1855.     $(add_suffix _external $ARCH_EXT_LIST)
  1856.     $(add_suffix _inline   $ARCH_EXT_LIST)
  1857.     $ARCH_FEATURES
  1858.     $ATOMICS_LIST
  1859.     $BUILTIN_LIST
  1860.     $HAVE_LIST_CMDLINE
  1861.     $HAVE_LIST_PUB
  1862.     $HEADERS_LIST
  1863.     $INTRINSICS_LIST
  1864.     $MATH_FUNCS
  1865.     $SYSTEM_FUNCS
  1866.     $THREADS_LIST
  1867.     $TOOLCHAIN_FEATURES
  1868.     $TYPES_LIST
  1869.     atomics_native
  1870.     dos_paths
  1871.     dxva2api_cobj
  1872.     dxva2_lib
  1873.     libc_msvcrt
  1874.     libdc1394_1
  1875.     libdc1394_2
  1876.     makeinfo
  1877.     makeinfo_html
  1878.     perl
  1879.     pod2man
  1880.     sdl
  1881.     section_data_rel_ro
  1882.     texi2html
  1883.     threads
  1884.     vaapi_x11
  1885.     vdpau_x11
  1886.     xlib
  1887. "
  1888.  
  1889. # options emitted with CONFIG_ prefix but not available on the command line
  1890. CONFIG_EXTRA="
  1891.     aandcttables
  1892.     ac3dsp
  1893.     audio_frame_queue
  1894.     audiodsp
  1895.     blockdsp
  1896.     bswapdsp
  1897.     cabac
  1898.     dvprofile
  1899.     exif
  1900.     faandct
  1901.     faanidct
  1902.     fdctdsp
  1903.     flacdsp
  1904.     fmtconvert
  1905.     frame_thread_encoder
  1906.     g722dsp
  1907.     gcrypt
  1908.     gmp
  1909.     golomb
  1910.     gplv3
  1911.     h263dsp
  1912.     h264chroma
  1913.     h264dsp
  1914.     h264pred
  1915.     h264qpel
  1916.     hpeldsp
  1917.     huffman
  1918.     huffyuvdsp
  1919.     huffyuvencdsp
  1920.     idctdsp
  1921.     iirfilter
  1922.     imdct15
  1923.     intrax8
  1924.     ividsp
  1925.     jpegtables
  1926.     libx262
  1927.     lgplv3
  1928.     llauddsp
  1929.     llviddsp
  1930.     lpc
  1931.     me_cmp
  1932.     mpeg_er
  1933.     mpegaudio
  1934.     mpegaudiodsp
  1935.     mpegvideo
  1936.     mpegvideoenc
  1937.     mss34dsp
  1938.     pixblockdsp
  1939.     qpeldsp
  1940.     qsv
  1941.     qsvdec
  1942.     qsvenc
  1943.     rangecoder
  1944.     riffdec
  1945.     riffenc
  1946.     rtpdec
  1947.     rtpenc_chain
  1948.     rv34dsp
  1949.     sinewin
  1950.     snappy
  1951.     startcode
  1952.     texturedsp
  1953.     texturedspenc
  1954.     tpeldsp
  1955.     videodsp
  1956.     vp3dsp
  1957.     vp56dsp
  1958.     vp8dsp
  1959.     wma_freqs
  1960.     wmv2dsp
  1961. "
  1962.  
  1963. CMDLINE_SELECT="
  1964.     $ARCH_EXT_LIST
  1965.     $CONFIG_LIST
  1966.     $HAVE_LIST_CMDLINE
  1967.     $THREADS_LIST
  1968.     asm
  1969.     cross_compile
  1970.     debug
  1971.     extra_warnings
  1972.     logging
  1973.     lto
  1974.     optimizations
  1975.     rpath
  1976.     stripping
  1977. "
  1978.  
  1979. PATHS_LIST="
  1980.     bindir
  1981.     datadir
  1982.     docdir
  1983.     incdir
  1984.     libdir
  1985.     mandir
  1986.     pkgconfigdir
  1987.     prefix
  1988.     shlibdir
  1989. "
  1990.  
  1991. CMDLINE_SET="
  1992.     $PATHS_LIST
  1993.     ar
  1994.     arch
  1995.     as
  1996.     assert_level
  1997.     build_suffix
  1998.     cc
  1999.     cpu
  2000.     cross_prefix
  2001.     cxx
  2002.     dep_cc
  2003.     doxygen
  2004.     env
  2005.     extra_version
  2006.     gas
  2007.     host_cc
  2008.     host_cflags
  2009.     host_ld
  2010.     host_ldflags
  2011.     host_libs
  2012.     host_os
  2013.     install
  2014.     ld
  2015.     logfile
  2016.     malloc_prefix
  2017.     nm
  2018.     optflags
  2019.     pkg_config
  2020.     pkg_config_flags
  2021.     progs_suffix
  2022.     random_seed
  2023.     ranlib
  2024.     samples
  2025.     strip
  2026.     sws_max_filter_size
  2027.     sysinclude
  2028.     sysroot
  2029.     target_exec
  2030.     target_os
  2031.     target_path
  2032.     target_samples
  2033.     tempprefix
  2034.     toolchain
  2035.     valgrind
  2036.     yasmexe
  2037. "
  2038.  
  2039. CMDLINE_APPEND="
  2040.     extra_cflags
  2041.     extra_cxxflags
  2042.     host_cppflags
  2043. "
  2044.  
  2045. # code dependency declarations
  2046.  
  2047. # architecture extensions
  2048.  
  2049. armv5te_deps="arm"
  2050. armv6_deps="arm"
  2051. armv6t2_deps="arm"
  2052. armv8_deps="aarch64"
  2053. neon_deps_any="aarch64 arm"
  2054. intrinsics_neon_deps="neon"
  2055. vfp_deps_any="aarch64 arm"
  2056. vfpv3_deps="vfp"
  2057. setend_deps="arm"
  2058.  
  2059. map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
  2060.  
  2061. mipsfpu_deps="mips"
  2062. mipsdspr1_deps="mips"
  2063. mipsdspr2_deps="mips"
  2064. mips32r2_deps="mips"
  2065. mips32r5_deps="mips"
  2066. mips64r6_deps="mips"
  2067. msa_deps="mips"
  2068. mmi_deps="mips"
  2069.  
  2070. altivec_deps="ppc"
  2071. dcbzl_deps="ppc"
  2072. ldbrx_deps="ppc"
  2073. ppc4xx_deps="ppc"
  2074. vsx_deps="altivec"
  2075. power8_deps="vsx"
  2076.  
  2077. cpunop_deps="i686"
  2078. x86_64_select="i686"
  2079. x86_64_suggest="fast_cmov"
  2080.  
  2081. amd3dnow_deps="mmx"
  2082. amd3dnowext_deps="amd3dnow"
  2083. i686_deps="x86"
  2084. mmx_deps="x86"
  2085. mmxext_deps="mmx"
  2086. sse_deps="mmxext"
  2087. sse2_deps="sse"
  2088. sse3_deps="sse2"
  2089. ssse3_deps="sse3"
  2090. sse4_deps="ssse3"
  2091. sse42_deps="sse4"
  2092. avx_deps="sse42"
  2093. xop_deps="avx"
  2094. fma3_deps="avx"
  2095. fma4_deps="avx"
  2096. avx2_deps="avx"
  2097.  
  2098. mmx_external_deps="yasm"
  2099. mmx_inline_deps="inline_asm"
  2100. mmx_suggest="mmx_external mmx_inline"
  2101.  
  2102. for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
  2103.     eval dep=\$${ext}_deps
  2104.     eval ${ext}_external_deps='"${dep}_external"'
  2105.     eval ${ext}_inline_deps='"${dep}_inline"'
  2106.     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
  2107. done
  2108.  
  2109. aligned_stack_if_any="aarch64 ppc x86"
  2110. fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
  2111. fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
  2112. fast_unaligned_if_any="aarch64 ppc x86"
  2113. simd_align_16_if_any="altivec neon sse"
  2114.  
  2115. # system capabilities
  2116. symver_if_any="symver_asm_label symver_gnu_asm"
  2117. valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
  2118.  
  2119. # threading support
  2120. atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
  2121. atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
  2122. atomics_win32_if="MemoryBarrier"
  2123. atomics_native_if_any="$ATOMICS_LIST"
  2124. w32threads_deps="atomics_native"
  2125. threads_if_any="$THREADS_LIST"
  2126.  
  2127. # subsystems
  2128. dct_select="rdft"
  2129. error_resilience_select="me_cmp"
  2130. faandct_deps="faan fdctdsp"
  2131. faanidct_deps="faan idctdsp"
  2132. frame_thread_encoder_deps="encoders threads"
  2133. intrax8_select="error_resilience"
  2134. mdct_select="fft"
  2135. rdft_select="fft"
  2136. me_cmp_select="fdctdsp idctdsp pixblockdsp"
  2137. mpeg_er_select="error_resilience"
  2138. mpegaudio_select="mpegaudiodsp"
  2139. mpegaudiodsp_select="dct"
  2140. mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
  2141. mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
  2142. qsvdec_select="qsv"
  2143. qsvenc_select="qsv"
  2144.  
  2145. # decoders / encoders
  2146. aac_decoder_select="imdct15 mdct sinewin"
  2147. aac_fixed_decoder_select="mdct sinewin"
  2148. aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
  2149. aac_latm_decoder_select="aac_decoder aac_latm_parser"
  2150. ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
  2151. ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
  2152. ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
  2153. ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
  2154. adpcm_g722_decoder_select="g722dsp"
  2155. adpcm_g722_encoder_select="g722dsp"
  2156. aic_decoder_select="golomb idctdsp"
  2157. alac_encoder_select="lpc"
  2158. als_decoder_select="bswapdsp"
  2159. amrnb_decoder_select="lsp"
  2160. amrwb_decoder_select="lsp"
  2161. amv_decoder_select="sp5x_decoder exif"
  2162. amv_encoder_select="aandcttables jpegtables mpegvideoenc"
  2163. ape_decoder_select="bswapdsp llauddsp"
  2164. apng_decoder_select="zlib"
  2165. apng_encoder_select="huffyuvencdsp zlib"
  2166. asv1_decoder_select="blockdsp bswapdsp idctdsp"
  2167. asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
  2168. asv2_decoder_select="blockdsp bswapdsp idctdsp"
  2169. asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
  2170. atrac1_decoder_select="mdct sinewin"
  2171. atrac3_decoder_select="mdct"
  2172. atrac3p_decoder_select="mdct sinewin"
  2173. avrn_decoder_select="exif jpegtables"
  2174. bink_decoder_select="blockdsp hpeldsp"
  2175. binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
  2176. binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
  2177. cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
  2178. cllc_decoder_select="bswapdsp"
  2179. comfortnoise_encoder_select="lpc"
  2180. cook_decoder_select="audiodsp mdct sinewin"
  2181. cscd_decoder_select="lzo"
  2182. cscd_decoder_suggest="zlib"
  2183. dca_decoder_select="fmtconvert mdct"
  2184. dds_decoder_select="texturedsp"
  2185. dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
  2186. dnxhd_decoder_select="blockdsp idctdsp"
  2187. dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
  2188. dvvideo_decoder_select="dvprofile idctdsp"
  2189. dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
  2190. dxa_decoder_select="zlib"
  2191. eac3_decoder_select="ac3_decoder"
  2192. eac3_encoder_select="ac3_encoder"
  2193. eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
  2194. eatgq_decoder_select="aandcttables"
  2195. eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
  2196. exr_decoder_select="zlib"
  2197. ffv1_decoder_select="golomb rangecoder"
  2198. ffv1_encoder_select="rangecoder"
  2199. ffvhuff_decoder_select="huffyuv_decoder"
  2200. ffvhuff_encoder_select="huffyuv_encoder"
  2201. fic_decoder_select="golomb"
  2202. flac_decoder_select="flacdsp golomb"
  2203. flac_encoder_select="bswapdsp flacdsp golomb lpc"
  2204. flashsv_decoder_select="zlib"
  2205. flashsv_encoder_select="zlib"
  2206. flashsv2_encoder_select="zlib"
  2207. flashsv2_decoder_select="zlib"
  2208. flv_decoder_select="h263_decoder"
  2209. flv_encoder_select="h263_encoder"
  2210. fourxm_decoder_select="blockdsp bswapdsp"
  2211. fraps_decoder_select="bswapdsp huffman"
  2212. g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
  2213. g729_decoder_select="audiodsp"
  2214. h261_decoder_select="mpegvideo"
  2215. h261_encoder_select="aandcttables mpegvideoenc"
  2216. h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
  2217. h263_encoder_select="aandcttables h263dsp mpegvideoenc"
  2218. h263i_decoder_select="h263_decoder"
  2219. h263p_decoder_select="h263_decoder"
  2220. h263p_encoder_select="h263_encoder"
  2221. h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
  2222. h264_decoder_suggest="error_resilience"
  2223. h264_qsv_decoder_deps="libmfx"
  2224. h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
  2225. h264_qsv_encoder_deps="libmfx"
  2226. h264_qsv_encoder_select="qsvenc"
  2227. hap_decoder_select="snappy texturedsp"
  2228. hap_encoder_deps="libsnappy"
  2229. hap_encoder_select="texturedspenc"
  2230. hevc_decoder_select="bswapdsp cabac golomb videodsp"
  2231. hevc_qsv_encoder_deps="libmfx"
  2232. hevc_qsv_decoder_deps="libmfx"
  2233. hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
  2234. hevc_qsv_encoder_select="qsvenc"
  2235. huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
  2236. huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
  2237. iac_decoder_select="imc_decoder"
  2238. imc_decoder_select="bswapdsp fft mdct sinewin"
  2239. indeo3_decoder_select="hpeldsp"
  2240. indeo4_decoder_select="ividsp"
  2241. indeo5_decoder_select="ividsp"
  2242. interplay_video_decoder_select="hpeldsp"
  2243. jpegls_decoder_select="golomb mjpeg_decoder"
  2244. jpegls_encoder_select="golomb"
  2245. jv_decoder_select="blockdsp"
  2246. lagarith_decoder_select="huffyuvdsp"
  2247. ljpeg_encoder_select="aandcttables idctdsp jpegtables"
  2248. loco_decoder_select="golomb"
  2249. mdec_decoder_select="blockdsp idctdsp mpegvideo"
  2250. metasound_decoder_select="lsp mdct sinewin"
  2251. mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
  2252. mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
  2253. mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
  2254. mjpegb_decoder_select="mjpeg_decoder"
  2255. mlp_decoder_select="mlp_parser"
  2256. motionpixels_decoder_select="bswapdsp"
  2257. mp1_decoder_select="mpegaudio"
  2258. mp1float_decoder_select="mpegaudio"
  2259. mp2_decoder_select="mpegaudio"
  2260. mp2float_decoder_select="mpegaudio"
  2261. mp3_decoder_select="mpegaudio"
  2262. mp3adu_decoder_select="mpegaudio"
  2263. mp3adufloat_decoder_select="mpegaudio"
  2264. mp3float_decoder_select="mpegaudio"
  2265. mp3on4_decoder_select="mpegaudio"
  2266. mp3on4float_decoder_select="mpegaudio"
  2267. mpc7_decoder_select="bswapdsp mpegaudiodsp"
  2268. mpc8_decoder_select="mpegaudiodsp"
  2269. mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
  2270. mpeg_xvmc_decoder_select="mpeg2video_decoder"
  2271. mpegvideo_decoder_select="mpegvideo"
  2272. mpeg1video_decoder_select="mpegvideo"
  2273. mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
  2274. mpeg2video_decoder_select="mpegvideo"
  2275. mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
  2276. mpeg2_qsv_decoder_deps="libmfx"
  2277. mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel"
  2278. mpeg2_qsv_encoder_deps="libmfx"
  2279. mpeg2_qsv_encoder_select="qsvenc"
  2280. mpeg4_decoder_select="h263_decoder mpeg4video_parser"
  2281. mpeg4_encoder_select="h263_encoder"
  2282. msa1_decoder_select="mss34dsp"
  2283. msmpeg4v1_decoder_select="h263_decoder"
  2284. msmpeg4v2_decoder_select="h263_decoder"
  2285. msmpeg4v2_encoder_select="h263_encoder"
  2286. msmpeg4v3_decoder_select="h263_decoder"
  2287. msmpeg4v3_encoder_select="h263_encoder"
  2288. mss2_decoder_select="vc1_decoder"
  2289. mts2_decoder_select="mss34dsp"
  2290. mxpeg_decoder_select="mjpeg_decoder"
  2291. nellymoser_decoder_select="mdct sinewin"
  2292. nellymoser_encoder_select="audio_frame_queue mdct sinewin"
  2293. nuv_decoder_select="idctdsp lzo"
  2294. on2avc_decoder_select="mdct"
  2295. opus_decoder_deps="swresample"
  2296. opus_decoder_select="imdct15"
  2297. png_decoder_select="zlib"
  2298. png_encoder_select="huffyuvencdsp zlib"
  2299. prores_decoder_select="blockdsp idctdsp"
  2300. prores_encoder_select="fdctdsp"
  2301. qcelp_decoder_select="lsp"
  2302. qdm2_decoder_select="mdct rdft mpegaudiodsp"
  2303. ra_144_encoder_select="audio_frame_queue lpc audiodsp"
  2304. ra_144_decoder_select="audiodsp"
  2305. ralf_decoder_select="golomb"
  2306. rawvideo_decoder_select="bswapdsp"
  2307. rtjpeg_decoder_select="me_cmp"
  2308. rv10_decoder_select="h263_decoder"
  2309. rv10_encoder_select="h263_encoder"
  2310. rv20_decoder_select="h263_decoder"
  2311. rv20_encoder_select="h263_encoder"
  2312. rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
  2313. rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
  2314. shorten_decoder_select="golomb"
  2315. sipr_decoder_select="lsp"
  2316. snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
  2317. snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
  2318. sonic_decoder_select="golomb rangecoder"
  2319. sonic_encoder_select="golomb rangecoder"
  2320. sonic_ls_encoder_select="golomb rangecoder"
  2321. sp5x_decoder_select="mjpeg_decoder"
  2322. svq1_decoder_select="hpeldsp"
  2323. svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
  2324. svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
  2325. svq3_decoder_suggest="zlib"
  2326. tak_decoder_select="audiodsp"
  2327. tdsc_decoder_select="zlib mjpeg_decoder"
  2328. theora_decoder_select="vp3_decoder"
  2329. thp_decoder_select="mjpeg_decoder"
  2330. tiff_decoder_suggest="zlib lzma"
  2331. tiff_encoder_suggest="zlib"
  2332. truehd_decoder_select="mlp_parser"
  2333. truemotion2_decoder_select="bswapdsp"
  2334. truespeech_decoder_select="bswapdsp"
  2335. tscc_decoder_select="zlib"
  2336. twinvq_decoder_select="mdct lsp sinewin"
  2337. txd_decoder_select="texturedsp"
  2338. utvideo_decoder_select="bswapdsp"
  2339. utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
  2340. vble_decoder_select="huffyuvdsp"
  2341. vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 qpeldsp startcode"
  2342. vc1image_decoder_select="vc1_decoder"
  2343. vc1_qsv_decoder_deps="libmfx"
  2344. vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel"
  2345. vorbis_decoder_select="mdct"
  2346. vorbis_encoder_select="mdct"
  2347. vp3_decoder_select="hpeldsp vp3dsp videodsp"
  2348. vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
  2349. vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
  2350. vp6a_decoder_select="vp6_decoder"
  2351. vp6f_decoder_select="vp6_decoder"
  2352. vp7_decoder_select="h264pred videodsp vp8dsp"
  2353. vp8_decoder_select="h264pred videodsp vp8dsp"
  2354. vp9_decoder_select="videodsp vp9_parser"
  2355. webp_decoder_select="vp8_decoder"
  2356. wmalossless_decoder_select="llauddsp"
  2357. wmapro_decoder_select="mdct sinewin wma_freqs"
  2358. wmav1_decoder_select="mdct sinewin wma_freqs"
  2359. wmav1_encoder_select="mdct sinewin wma_freqs"
  2360. wmav2_decoder_select="mdct sinewin wma_freqs"
  2361. wmav2_encoder_select="mdct sinewin wma_freqs"
  2362. wmavoice_decoder_select="lsp rdft dct mdct sinewin"
  2363. wmv1_decoder_select="h263_decoder"
  2364. wmv1_encoder_select="h263_encoder"
  2365. wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp wmv2dsp"
  2366. wmv2_encoder_select="h263_encoder wmv2dsp"
  2367. wmv3_decoder_select="vc1_decoder"
  2368. wmv3image_decoder_select="wmv3_decoder"
  2369. zerocodec_decoder_select="zlib"
  2370. zlib_decoder_select="zlib"
  2371. zlib_encoder_select="zlib"
  2372. zmbv_decoder_select="zlib"
  2373. zmbv_encoder_select="zlib"
  2374.  
  2375. # hardware accelerators
  2376. crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
  2377. d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
  2378. dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
  2379. vaapi_deps="va_va_h"
  2380. vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads CoreServices_CoreServices_h"
  2381. vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore -framework CoreServices"
  2382. vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
  2383. videotoolbox_deps="VideoToolbox_VideoToolbox_h pthreads CoreServices_CoreServices_h"
  2384. videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework QuartzCore -framework CoreServices"
  2385. xvmc_deps="X11_extensions_XvMClib_h"
  2386.  
  2387. h263_vaapi_hwaccel_deps="vaapi"
  2388. h263_vaapi_hwaccel_select="h263_decoder"
  2389. h263_vdpau_hwaccel_deps="vdpau"
  2390. h263_vdpau_hwaccel_select="h263_decoder"
  2391. h263_videotoolbox_hwaccel_deps="videotoolbox"
  2392. h263_videotoolbox_hwaccel_select="h263_decoder"
  2393. h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
  2394. h264_d3d11va_hwaccel_deps="d3d11va"
  2395. h264_d3d11va_hwaccel_select="h264_decoder"
  2396. h264_dxva2_hwaccel_deps="dxva2"
  2397. h264_dxva2_hwaccel_select="h264_decoder"
  2398. h264_mmal_decoder_deps="mmal"
  2399. h264_mmal_hwaccel_deps="mmal"
  2400. h264_mmal_decoder_select="h264_decoder"
  2401. h264_mmal_encoder_deps="mmal"
  2402. h264_qsv_hwaccel_deps="libmfx"
  2403. h264_vaapi_hwaccel_deps="vaapi"
  2404. h264_vaapi_hwaccel_select="h264_decoder"
  2405. h264_vda_decoder_deps="vda"
  2406. h264_vda_decoder_select="h264_decoder"
  2407. h264_vda_hwaccel_deps="vda"
  2408. h264_vda_hwaccel_select="h264_decoder"
  2409. h264_vda_old_hwaccel_deps="vda"
  2410. h264_vda_old_hwaccel_select="h264_decoder"
  2411. h264_vdpau_decoder_deps="vdpau"
  2412. h264_vdpau_decoder_select="h264_decoder"
  2413. h264_vdpau_hwaccel_deps="vdpau"
  2414. h264_vdpau_hwaccel_select="h264_decoder"
  2415. h264_videotoolbox_hwaccel_deps="videotoolbox"
  2416. h264_videotoolbox_hwaccel_select="h264_decoder"
  2417. hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
  2418. hevc_d3d11va_hwaccel_select="hevc_decoder"
  2419. hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
  2420. hevc_dxva2_hwaccel_select="hevc_decoder"
  2421. hevc_qsv_hwaccel_deps="libmfx"
  2422. hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
  2423. hevc_vaapi_hwaccel_select="hevc_decoder"
  2424. hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
  2425. hevc_vdpau_hwaccel_select="hevc_decoder"
  2426. mpeg_vdpau_decoder_deps="vdpau"
  2427. mpeg_vdpau_decoder_select="mpeg2video_decoder"
  2428. mpeg_xvmc_hwaccel_deps="xvmc"
  2429. mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
  2430. mpeg1_vdpau_decoder_deps="vdpau"
  2431. mpeg1_vdpau_decoder_select="mpeg1video_decoder"
  2432. mpeg1_vdpau_hwaccel_deps="vdpau"
  2433. mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
  2434. mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
  2435. mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
  2436. mpeg1_xvmc_hwaccel_deps="xvmc"
  2437. mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
  2438. mpeg2_crystalhd_decoder_select="crystalhd"
  2439. mpeg2_d3d11va_hwaccel_deps="d3d11va"
  2440. mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
  2441. mpeg2_dxva2_hwaccel_deps="dxva2"
  2442. mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
  2443. mpeg2_qsv_hwaccel_deps="libmfx"
  2444. mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
  2445. mpeg2_vaapi_hwaccel_deps="vaapi"
  2446. mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
  2447. mpeg2_vdpau_hwaccel_deps="vdpau"
  2448. mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
  2449. mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
  2450. mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
  2451. mpeg2_xvmc_hwaccel_deps="xvmc"
  2452. mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
  2453. mpeg4_crystalhd_decoder_select="crystalhd"
  2454. mpeg4_vaapi_hwaccel_deps="vaapi"
  2455. mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
  2456. mpeg4_vdpau_decoder_deps="vdpau"
  2457. mpeg4_vdpau_decoder_select="mpeg4_decoder"
  2458. mpeg4_vdpau_hwaccel_deps="vdpau"
  2459. mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
  2460. mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
  2461. mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
  2462. msmpeg4_crystalhd_decoder_select="crystalhd"
  2463. vc1_crystalhd_decoder_select="crystalhd"
  2464. vc1_d3d11va_hwaccel_deps="d3d11va"
  2465. vc1_d3d11va_hwaccel_select="vc1_decoder"
  2466. vc1_dxva2_hwaccel_deps="dxva2"
  2467. vc1_dxva2_hwaccel_select="vc1_decoder"
  2468. vc1_vaapi_hwaccel_deps="vaapi"
  2469. vc1_vaapi_hwaccel_select="vc1_decoder"
  2470. vc1_vdpau_decoder_deps="vdpau"
  2471. vc1_vdpau_decoder_select="vc1_decoder"
  2472. vc1_vdpau_hwaccel_deps="vdpau"
  2473. vc1_vdpau_hwaccel_select="vc1_decoder"
  2474. vc1_qsv_hwaccel_deps="libmfx"
  2475. vc1_qsv_hwaccel_select="qsvdec_vc1"
  2476. wmv3_crystalhd_decoder_select="crystalhd"
  2477. wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
  2478. wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
  2479. wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
  2480. wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
  2481. wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
  2482.  
  2483. # parsers
  2484. h264_parser_select="h264_decoder"
  2485. hevc_parser_select="golomb"
  2486. mpegvideo_parser_select="mpegvideo"
  2487. mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
  2488. vc1_parser_select="mpegvideo startcode vc1_decoder"
  2489.  
  2490. # bitstream_filters
  2491. mjpeg2jpeg_bsf_select="jpegtables"
  2492.  
  2493. # external libraries
  2494. libaacplus_encoder_deps="libaacplus"
  2495. libcelt_decoder_deps="libcelt"
  2496. libdcadec_decoder_deps="libdcadec"
  2497. libfaac_encoder_deps="libfaac"
  2498. libfaac_encoder_select="audio_frame_queue"
  2499. libfdk_aac_decoder_deps="libfdk_aac"
  2500. libfdk_aac_encoder_deps="libfdk_aac"
  2501. libfdk_aac_encoder_select="audio_frame_queue"
  2502. libgme_demuxer_deps="libgme"
  2503. libgsm_decoder_deps="libgsm"
  2504. libgsm_encoder_deps="libgsm"
  2505. libgsm_ms_decoder_deps="libgsm"
  2506. libgsm_ms_encoder_deps="libgsm"
  2507. libilbc_decoder_deps="libilbc"
  2508. libilbc_encoder_deps="libilbc"
  2509. libkvazaar_encoder_deps="libkvazaar"
  2510. libmodplug_demuxer_deps="libmodplug"
  2511. libmp3lame_encoder_deps="libmp3lame"
  2512. libmp3lame_encoder_select="audio_frame_queue"
  2513. libopencore_amrnb_decoder_deps="libopencore_amrnb"
  2514. libopencore_amrnb_encoder_deps="libopencore_amrnb"
  2515. libopencore_amrnb_encoder_select="audio_frame_queue"
  2516. libopencore_amrwb_decoder_deps="libopencore_amrwb"
  2517. libopenh264_encoder_deps="libopenh264"
  2518. libopenjpeg_decoder_deps="libopenjpeg"
  2519. libopenjpeg_encoder_deps="libopenjpeg"
  2520. libopus_decoder_deps="libopus"
  2521. libopus_encoder_deps="libopus"
  2522. libopus_encoder_select="audio_frame_queue"
  2523. libquvi_demuxer_deps="libquvi"
  2524. libschroedinger_decoder_deps="libschroedinger"
  2525. libschroedinger_encoder_deps="libschroedinger"
  2526. libshine_encoder_deps="libshine"
  2527. libshine_encoder_select="audio_frame_queue"
  2528. libspeex_decoder_deps="libspeex"
  2529. libspeex_encoder_deps="libspeex"
  2530. libspeex_encoder_select="audio_frame_queue"
  2531. libstagefright_h264_decoder_deps="libstagefright_h264"
  2532. libtheora_encoder_deps="libtheora"
  2533. libtwolame_encoder_deps="libtwolame"
  2534. libvo_aacenc_encoder_deps="libvo_aacenc"
  2535. libvo_aacenc_encoder_select="audio_frame_queue"
  2536. libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
  2537. libvorbis_decoder_deps="libvorbis"
  2538. libvorbis_encoder_deps="libvorbis"
  2539. libvorbis_encoder_select="audio_frame_queue"
  2540. libvpx_vp8_decoder_deps="libvpx"
  2541. libvpx_vp8_encoder_deps="libvpx"
  2542. libvpx_vp9_decoder_deps="libvpx"
  2543. libvpx_vp9_encoder_deps="libvpx"
  2544. libwavpack_encoder_deps="libwavpack"
  2545. libwebp_encoder_deps="libwebp"
  2546. libwebp_anim_encoder_deps="libwebp"
  2547. libx262_encoder_deps="libx262"
  2548. libx264_encoder_deps="libx264"
  2549. libx264rgb_encoder_deps="libx264"
  2550. libx264rgb_encoder_select="libx264_encoder"
  2551. libx265_encoder_deps="libx265"
  2552. libxavs_encoder_deps="libxavs"
  2553. libxvid_encoder_deps="libxvid"
  2554. libutvideo_decoder_deps="libutvideo"
  2555. libutvideo_encoder_deps="libutvideo"
  2556. libzvbi_teletext_decoder_deps="libzvbi"
  2557. nvenc_encoder_deps="nvenc"
  2558. nvenc_h264_encoder_deps="nvenc"
  2559. nvenc_hevc_encoder_deps="nvenc"
  2560.  
  2561. # demuxers / muxers
  2562. ac3_demuxer_select="ac3_parser"
  2563. asf_demuxer_select="riffdec"
  2564. asf_o_demuxer_select="riffdec"
  2565. asf_muxer_select="riffenc"
  2566. asf_stream_muxer_select="asf_muxer"
  2567. avi_demuxer_select="riffdec exif"
  2568. avi_muxer_select="riffenc"
  2569. avisynth_demuxer_deps="avisynth"
  2570. avisynth_demuxer_select="riffdec"
  2571. caf_demuxer_select="riffdec"
  2572. dash_muxer_select="mp4_muxer"
  2573. dirac_demuxer_select="dirac_parser"
  2574. dts_demuxer_select="dca_parser"
  2575. dtshd_demuxer_select="dca_parser"
  2576. dv_demuxer_select="dvprofile"
  2577. dv_muxer_select="dvprofile"
  2578. dxa_demuxer_select="riffdec"
  2579. eac3_demuxer_select="ac3_parser"
  2580. f4v_muxer_select="mov_muxer"
  2581. flac_demuxer_select="flac_parser"
  2582. hds_muxer_select="flv_muxer"
  2583. hls_muxer_select="mpegts_muxer"
  2584. image2_alias_pix_demuxer_select="image2_demuxer"
  2585. image2_brender_pix_demuxer_select="image2_demuxer"
  2586. ipod_muxer_select="mov_muxer"
  2587. ismv_muxer_select="mov_muxer"
  2588. libnut_demuxer_deps="libnut"
  2589. libnut_muxer_deps="libnut"
  2590. matroska_audio_muxer_select="matroska_muxer"
  2591. matroska_demuxer_select="riffdec"
  2592. matroska_demuxer_suggest="bzlib lzo zlib"
  2593. matroska_muxer_select="riffenc"
  2594. mmf_muxer_select="riffenc"
  2595. mov_demuxer_select="riffdec"
  2596. mov_demuxer_suggest="zlib"
  2597. mov_muxer_select="riffenc rtpenc_chain"
  2598. mp3_demuxer_select="mpegaudio_parser"
  2599. mp4_muxer_select="mov_muxer"
  2600. mpegts_muxer_select="adts_muxer latm_muxer"
  2601. mpegtsraw_demuxer_select="mpegts_demuxer"
  2602. mxf_d10_muxer_select="mxf_muxer"
  2603. mxf_opatom_muxer_select="mxf_muxer"
  2604. nut_muxer_select="riffenc"
  2605. nuv_demuxer_select="riffdec"
  2606. oga_muxer_select="ogg_muxer"
  2607. ogg_demuxer_select="golomb"
  2608. opus_muxer_select="ogg_muxer"
  2609. psp_muxer_select="mov_muxer"
  2610. rtp_demuxer_select="sdp_demuxer"
  2611. rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
  2612. rtsp_demuxer_select="http_protocol rtpdec"
  2613. rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
  2614. sap_demuxer_select="sdp_demuxer"
  2615. sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
  2616. sdp_demuxer_select="rtpdec"
  2617. smoothstreaming_muxer_select="ismv_muxer"
  2618. spdif_muxer_select="aac_parser"
  2619. spx_muxer_select="ogg_muxer"
  2620. tak_demuxer_select="tak_parser"
  2621. tg2_muxer_select="mov_muxer"
  2622. tgp_muxer_select="mov_muxer"
  2623. vobsub_demuxer_select="mpegps_demuxer"
  2624. w64_demuxer_select="wav_demuxer"
  2625. w64_muxer_select="wav_muxer"
  2626. wav_demuxer_select="riffdec"
  2627. wav_muxer_select="riffenc"
  2628. webm_muxer_select="riffenc"
  2629. wtv_demuxer_select="riffdec"
  2630. wtv_muxer_select="riffenc"
  2631. xmv_demuxer_select="riffdec"
  2632. xwma_demuxer_select="riffdec"
  2633.  
  2634. # indevs / outdevs
  2635. alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
  2636. alsa_outdev_deps="alsa_asoundlib_h"
  2637. avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
  2638. avfoundation_indev_select="avfoundation"
  2639. bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
  2640. caca_outdev_deps="libcaca"
  2641. decklink_outdev_deps="decklink pthreads"
  2642. decklink_outdev_extralibs="-lstdc++"
  2643. decklink_indev_deps="decklink pthreads"
  2644. decklink_indev_extralibs="-lstdc++"
  2645. dshow_indev_deps="IBaseFilter"
  2646. dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
  2647. dv1394_indev_deps="dv1394"
  2648. dv1394_indev_select="dv_demuxer"
  2649. fbdev_indev_deps="linux_fb_h"
  2650. fbdev_outdev_deps="linux_fb_h"
  2651. gdigrab_indev_deps="CreateDIBSection"
  2652. gdigrab_indev_extralibs="-lgdi32"
  2653. gdigrab_indev_select="bmp_decoder"
  2654. iec61883_indev_deps="libiec61883"
  2655. jack_indev_deps="jack_jack_h sem_timedwait"
  2656. lavfi_indev_deps="avfilter"
  2657. libcdio_indev_deps="libcdio"
  2658. libdc1394_indev_deps="libdc1394"
  2659. libv4l2_indev_deps="libv4l2"
  2660. openal_indev_deps="openal"
  2661. opengl_outdev_deps="opengl"
  2662. oss_indev_deps_any="soundcard_h sys_soundcard_h"
  2663. oss_outdev_deps_any="soundcard_h sys_soundcard_h"
  2664. pulse_indev_deps="libpulse"
  2665. pulse_outdev_deps="libpulse"
  2666. qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
  2667. qtkit_indev_select="qtkit"
  2668. sdl_outdev_deps="sdl"
  2669. sndio_indev_deps="sndio_h"
  2670. sndio_outdev_deps="sndio_h"
  2671. v4l_indev_deps="linux_videodev_h"
  2672. v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
  2673. v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
  2674. vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
  2675. vfwcap_indev_extralibs="-lavicap32"
  2676. xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
  2677. xv_outdev_extralibs="-lXv -lX11 -lXext"
  2678. x11grab_indev_deps="x11grab"
  2679. x11grab_xcb_indev_deps="libxcb"
  2680.  
  2681. # protocols
  2682. async_protocol_deps="pthreads"
  2683. bluray_protocol_deps="libbluray"
  2684. ffrtmpcrypt_protocol_deps="!librtmp_protocol"
  2685. ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
  2686. ffrtmpcrypt_protocol_select="tcp_protocol"
  2687. ffrtmphttp_protocol_deps="!librtmp_protocol"
  2688. ffrtmphttp_protocol_select="http_protocol"
  2689. ftp_protocol_select="tcp_protocol"
  2690. gopher_protocol_select="network"
  2691. http_protocol_select="tcp_protocol"
  2692. httpproxy_protocol_select="tcp_protocol"
  2693. https_protocol_select="tls_protocol"
  2694. icecast_protocol_select="http_protocol"
  2695. librtmp_protocol_deps="librtmp"
  2696. librtmpe_protocol_deps="librtmp"
  2697. librtmps_protocol_deps="librtmp"
  2698. librtmpt_protocol_deps="librtmp"
  2699. librtmpte_protocol_deps="librtmp"
  2700. libsmbclient_protocol_deps="libsmbclient gplv3"
  2701. libssh_protocol_deps="libssh"
  2702. mmsh_protocol_select="http_protocol"
  2703. mmst_protocol_select="network"
  2704. rtmp_protocol_deps="!librtmp_protocol"
  2705. rtmp_protocol_select="tcp_protocol"
  2706. rtmpe_protocol_select="ffrtmpcrypt_protocol"
  2707. rtmps_protocol_deps="!librtmp_protocol"
  2708. rtmps_protocol_select="tls_protocol"
  2709. rtmpt_protocol_select="ffrtmphttp_protocol"
  2710. rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
  2711. rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
  2712. rtp_protocol_select="udp_protocol"
  2713. sctp_protocol_deps="struct_sctp_event_subscribe"
  2714. sctp_protocol_select="network"
  2715. srtp_protocol_select="rtp_protocol"
  2716. tcp_protocol_select="network"
  2717. tls_gnutls_protocol_deps="gnutls !tls_securetransport_protocol"
  2718. tls_gnutls_protocol_select="tcp_protocol"
  2719. tls_openssl_protocol_deps="openssl !tls_securetransport_protocol !tls_gnutls_protocol"
  2720. tls_openssl_protocol_select="tcp_protocol"
  2721. tls_securetransport_protocol_deps="securetransport"
  2722. tls_securetransport_protocol_select="tcp_protocol"
  2723. tls_protocol_deps_any="tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
  2724. udp_protocol_select="network"
  2725. udplite_protocol_select="network"
  2726. unix_protocol_deps="sys_un_h"
  2727. unix_protocol_select="network"
  2728.  
  2729. # filters
  2730. amovie_filter_deps="avcodec avformat"
  2731. aresample_filter_deps="swresample"
  2732. ass_filter_deps="libass"
  2733. asyncts_filter_deps="avresample"
  2734. atempo_filter_deps="avcodec"
  2735. atempo_filter_select="rdft"
  2736. azmq_filter_deps="libzmq"
  2737. blackframe_filter_deps="gpl"
  2738. boxblur_filter_deps="gpl"
  2739. bs2b_filter_deps="libbs2b"
  2740. colormatrix_filter_deps="gpl"
  2741. cover_rect_filter_deps="avcodec avformat gpl"
  2742. cropdetect_filter_deps="gpl"
  2743. delogo_filter_deps="gpl"
  2744. deshake_filter_select="pixelutils"
  2745. drawtext_filter_deps="libfreetype"
  2746. dynaudnorm_filter_deps="copysign erf"
  2747. ebur128_filter_deps="gpl"
  2748. eq_filter_deps="gpl"
  2749. fftfilt_filter_deps="avcodec"
  2750. fftfilt_filter_select="rdft"
  2751. flite_filter_deps="libflite"
  2752. find_rect_filter_deps="avcodec avformat gpl"
  2753. frei0r_filter_deps="frei0r dlopen"
  2754. frei0r_src_filter_deps="frei0r dlopen"
  2755. fspp_filter_deps="gpl"
  2756. geq_filter_deps="gpl"
  2757. histeq_filter_deps="gpl"
  2758. hqdn3d_filter_deps="gpl"
  2759. interlace_filter_deps="gpl"
  2760. kerndeint_filter_deps="gpl"
  2761. ladspa_filter_deps="ladspa dlopen"
  2762. mcdeint_filter_deps="avcodec gpl"
  2763. movie_filter_deps="avcodec avformat"
  2764. mpdecimate_filter_deps="gpl"
  2765. mpdecimate_filter_select="pixelutils"
  2766. mptestsrc_filter_deps="gpl"
  2767. negate_filter_deps="lut_filter"
  2768. perspective_filter_deps="gpl"
  2769. pp7_filter_deps="gpl"
  2770. ocv_filter_deps="libopencv"
  2771. owdenoise_filter_deps="gpl"
  2772. pan_filter_deps="swresample"
  2773. phase_filter_deps="gpl"
  2774. pp_filter_deps="gpl postproc"
  2775. pullup_filter_deps="gpl"
  2776. removelogo_filter_deps="avcodec avformat swscale"
  2777. repeatfields_filter_deps="gpl"
  2778. resample_filter_deps="avresample"
  2779. sab_filter_deps="gpl swscale"
  2780. scale_filter_deps="swscale"
  2781. scale2ref_filter_deps="swscale"
  2782. select_filter_select="pixelutils"
  2783. smartblur_filter_deps="gpl swscale"
  2784. showcqt_filter_deps="avcodec"
  2785. showcqt_filter_select="fft"
  2786. showfreqs_filter_deps="avcodec"
  2787. showfreqs_filter_select="fft"
  2788. showspectrum_filter_deps="avcodec"
  2789. showspectrum_filter_select="rdft"
  2790. spp_filter_deps="gpl avcodec"
  2791. spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
  2792. stereo3d_filter_deps="gpl"
  2793. subtitles_filter_deps="avformat avcodec libass"
  2794. super2xsai_filter_deps="gpl"
  2795. tinterlace_filter_deps="gpl"
  2796. vidstabdetect_filter_deps="libvidstab"
  2797. vidstabtransform_filter_deps="libvidstab"
  2798. pixfmts_super2xsai_test_deps="super2xsai_filter"
  2799. tinterlace_merge_test_deps="tinterlace_filter"
  2800. tinterlace_pad_test_deps="tinterlace_filter"
  2801. uspp_filter_deps="gpl avcodec"
  2802. zmq_filter_deps="libzmq"
  2803. zoompan_filter_deps="swscale"
  2804.  
  2805. # examples
  2806. avio_reading="avformat avcodec avutil"
  2807. avio_dir_cmd="avformat avutil"
  2808. avcodec_example_deps="avcodec avutil"
  2809. decoding_encoding_example_deps="avcodec avformat avutil"
  2810. demuxing_decoding_example_deps="avcodec avformat avutil"
  2811. extract_mvs_example_deps="avcodec avformat avutil"
  2812. filter_audio_example_deps="avfilter avutil"
  2813. filtering_audio_example_deps="avfilter avcodec avformat avutil"
  2814. filtering_video_example_deps="avfilter avcodec avformat avutil"
  2815. metadata_example_deps="avformat avutil"
  2816. muxing_example_deps="avcodec avformat avutil swscale"
  2817. qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
  2818. remuxing_example_deps="avcodec avformat avutil"
  2819. resampling_audio_example_deps="avutil swresample"
  2820. scaling_video_example_deps="avutil swscale"
  2821. transcode_aac_example_deps="avcodec avformat swresample"
  2822. transcoding_example_deps="avfilter avcodec avformat avutil"
  2823.  
  2824. # libraries, in linking order
  2825. avcodec_deps="avutil"
  2826. avdevice_deps="avformat avcodec avutil"
  2827. avfilter_deps="avutil"
  2828. avformat_deps="avcodec avutil"
  2829. avresample_deps="avutil"
  2830. postproc_deps="avutil gpl"
  2831. swresample_deps="avutil"
  2832. swscale_deps="avutil"
  2833.  
  2834. # programs
  2835. ffmpeg_deps="avcodec avfilter avformat swresample"
  2836. ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
  2837.                null_filter
  2838.                setpts_filter trim_filter"
  2839. ffplay_deps="avcodec avformat swscale swresample sdl"
  2840. ffplay_libs='$sdl_libs'
  2841. ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
  2842. ffprobe_deps="avcodec avformat"
  2843. ffserver_deps="avformat fork sarestart"
  2844. ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
  2845.  
  2846. # documentation
  2847. podpages_deps="perl"
  2848. manpages_deps="perl pod2man"
  2849. htmlpages_deps="perl"
  2850. htmlpages_deps_any="makeinfo_html texi2html"
  2851. txtpages_deps="perl makeinfo"
  2852. doc_deps_any="manpages htmlpages podpages txtpages"
  2853.  
  2854. # default parameters
  2855.  
  2856. logfile="config.log"
  2857.  
  2858. # installation paths
  2859. prefix_default="/usr/local"
  2860. bindir_default='${prefix}/bin'
  2861. datadir_default='${prefix}/share/ffmpeg'
  2862. docdir_default='${prefix}/share/doc/ffmpeg'
  2863. incdir_default='${prefix}/include'
  2864. libdir_default='${prefix}/lib'
  2865. mandir_default='${prefix}/share/man'
  2866.  
  2867. # toolchain
  2868. ar_default="ar"
  2869. cc_default="gcc"
  2870. cxx_default="g++"
  2871. host_cc_default="gcc"
  2872. cp_f="cp -f"
  2873. doxygen_default="doxygen"
  2874. install="install"
  2875. ln_s="ln -s -f"
  2876. nm_default="nm -g"
  2877. objformat="elf"
  2878. pkg_config_default=pkg-config
  2879. ranlib_default="ranlib"
  2880. strip_default="strip"
  2881. yasmexe_default="yasm"
  2882. windres_default="windres"
  2883.  
  2884. # OS
  2885. target_os_default=$(tolower $(uname -s))
  2886. host_os=$target_os_default
  2887.  
  2888. # machine
  2889. if test "$target_os_default" = aix; then
  2890.     arch_default=$(uname -p)
  2891.     strip_default="strip -X32_64"
  2892. else
  2893.     arch_default=$(uname -m)
  2894. fi
  2895. cpu="generic"
  2896. intrinsics="none"
  2897.  
  2898. # configurable options
  2899. enable $PROGRAM_LIST
  2900. enable $DOCUMENT_LIST
  2901. enable $EXAMPLE_LIST
  2902. enable $(filter_out avresample $LIBRARY_LIST)
  2903. enable stripping
  2904.  
  2905. enable asm
  2906. enable debug
  2907. enable doc
  2908. enable faan faandct faanidct
  2909. enable optimizations
  2910. enable runtime_cpudetect
  2911. enable safe_bitstream_reader
  2912. enable static
  2913. enable swscale_alpha
  2914. enable valgrind_backtrace
  2915.  
  2916. sws_max_filter_size_default=256
  2917. set_default sws_max_filter_size
  2918.  
  2919. # Enable hwaccels by default.
  2920. enable d3d11va dxva2 vaapi vda vdpau videotoolbox xvmc
  2921. enable xlib
  2922.  
  2923. # build settings
  2924. SHFLAGS='-shared -Wl,-soname,$$(@F)'
  2925. LIBPREF="lib"
  2926. LIBSUF=".a"
  2927. FULLNAME='$(NAME)$(BUILDSUF)'
  2928. LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
  2929. SLIBPREF="lib"
  2930. SLIBSUF=".so"
  2931. SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
  2932. SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
  2933. SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
  2934. LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
  2935. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
  2936. SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
  2937.  
  2938. asflags_filter=echo
  2939. cflags_filter=echo
  2940. ldflags_filter=echo
  2941.  
  2942. AS_C='-c'
  2943. AS_O='-o $@'
  2944. CC_C='-c'
  2945. CC_E='-E -o $@'
  2946. CC_O='-o $@'
  2947. CXX_C='-c'
  2948. CXX_O='-o $@'
  2949. LD_O='-o $@'
  2950. LD_LIB='-l%'
  2951. LD_PATH='-L'
  2952. HOSTCC_C='-c'
  2953. HOSTCC_E='-E -o $@'
  2954. HOSTCC_O='-o $@'
  2955. HOSTLD_O='-o $@'
  2956.  
  2957. host_libs='-lm'
  2958. host_cflags_filter=echo
  2959. host_ldflags_filter=echo
  2960.  
  2961. target_path='$(CURDIR)'
  2962.  
  2963. # since the object filename is not given with the -MM flag, the compiler
  2964. # is only able to print the basename, and we must add the path ourselves
  2965. DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
  2966. DEPFLAGS='-MM'
  2967.  
  2968. # find source path
  2969. if test -f configure; then
  2970.     source_path=.
  2971. else
  2972.     source_path=$(cd $(dirname "$0"); pwd)
  2973.     case "$source_path" in
  2974.         *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
  2975.     esac
  2976.     test -e "$source_path/config.h" &&
  2977.         die "Out of tree builds are impossible with config.h in source dir."
  2978. fi
  2979.  
  2980. for v in "$@"; do
  2981.     r=${v#*=}
  2982.     l=${v%"$r"}
  2983.     r=$(sh_quote "$r")
  2984.     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
  2985. done
  2986.  
  2987. find_things(){
  2988.     thing=$1
  2989.     pattern=$2
  2990.     file=$source_path/$3
  2991.     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
  2992. }
  2993.  
  2994. ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
  2995. DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
  2996. HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
  2997. PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
  2998. BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
  2999. MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
  3000. DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
  3001. OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
  3002. INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
  3003. PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
  3004. FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
  3005.  
  3006. ALL_COMPONENTS="
  3007.     $BSF_LIST
  3008.     $DECODER_LIST
  3009.     $DEMUXER_LIST
  3010.     $ENCODER_LIST
  3011.     $FILTER_LIST
  3012.     $HWACCEL_LIST
  3013.     $INDEV_LIST
  3014.     $MUXER_LIST
  3015.     $OUTDEV_LIST
  3016.     $PARSER_LIST
  3017.     $PROTOCOL_LIST
  3018. "
  3019.  
  3020. for n in $COMPONENT_LIST; do
  3021.     v=$(toupper ${n%s})_LIST
  3022.     eval enable \$$v
  3023.     eval ${n}_if_any="\$$v"
  3024. done
  3025.  
  3026. enable $ARCH_EXT_LIST
  3027.  
  3028. die_unknown(){
  3029.     echo "Unknown option \"$1\"."
  3030.     echo "See $0 --help for available options."
  3031.     exit 1
  3032. }
  3033.  
  3034. print_3_columns() {
  3035.     cat | tr ' ' '\n' | sort | pr -r -3 -t
  3036. }
  3037.  
  3038. show_list() {
  3039.     suffix=_$1
  3040.     shift
  3041.     echo $* | sed s/$suffix//g | print_3_columns
  3042.     exit 0
  3043. }
  3044.  
  3045. rand_list(){
  3046.     IFS=', '
  3047.     set -- $*
  3048.     unset IFS
  3049.     for thing; do
  3050.         comp=${thing%:*}
  3051.         prob=${thing#$comp}
  3052.         prob=${prob#:}
  3053.         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
  3054.         echo "prob ${prob:-0.5}"
  3055.         printf '%s\n' $comp
  3056.     done
  3057. }
  3058.  
  3059. do_random(){
  3060.     action=$1
  3061.     shift
  3062.     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
  3063.     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
  3064. }
  3065.  
  3066. for opt do
  3067.     optval="${opt#*=}"
  3068.     case "$opt" in
  3069.         --extra-ldflags=*)
  3070.             add_ldflags $optval
  3071.         ;;
  3072.         --extra-ldexeflags=*)
  3073.             add_ldexeflags $optval
  3074.         ;;
  3075.         --extra-ldlibflags=*)
  3076.             add_ldlibflags $optval
  3077.         ;;
  3078.         --extra-libs=*)
  3079.             add_extralibs $optval
  3080.         ;;
  3081.         --disable-devices)
  3082.             disable $INDEV_LIST $OUTDEV_LIST
  3083.         ;;
  3084.         --enable-debug=*)
  3085.             debuglevel="$optval"
  3086.         ;;
  3087.         --disable-programs)
  3088.             disable $PROGRAM_LIST
  3089.         ;;
  3090.         --disable-everything)
  3091.             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
  3092.         ;;
  3093.         --disable-all)
  3094.             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
  3095.             disable $LIBRARY_LIST $PROGRAM_LIST doc
  3096.         ;;
  3097.         --enable-random|--disable-random)
  3098.             action=${opt%%-random}
  3099.             do_random ${action#--} $COMPONENT_LIST
  3100.         ;;
  3101.         --enable-random=*|--disable-random=*)
  3102.             action=${opt%%-random=*}
  3103.             do_random ${action#--} $optval
  3104.         ;;
  3105.         --enable-*=*|--disable-*=*)
  3106.             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
  3107.             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
  3108.             eval list=\$$(toupper $thing)_LIST
  3109.             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
  3110.             list=$(filter "$name" $list)
  3111.             [ "$list" = "" ] && warn "Option $opt did not match anything"
  3112.             $action $list
  3113.         ;;
  3114.         --enable-?*|--disable-?*)
  3115.             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
  3116.             if is_in $option $COMPONENT_LIST; then
  3117.                 test $action = disable && action=unset
  3118.                 eval $action \$$(toupper ${option%s})_LIST
  3119.             elif is_in $option $CMDLINE_SELECT; then
  3120.                 $action $option
  3121.             else
  3122.                 die_unknown $opt
  3123.             fi
  3124.         ;;
  3125.         --list-*)
  3126.             NAME="${opt#--list-}"
  3127.             is_in $NAME $COMPONENT_LIST || die_unknown $opt
  3128.             NAME=${NAME%s}
  3129.             eval show_list $NAME \$$(toupper $NAME)_LIST
  3130.         ;;
  3131.         --help|-h) show_help
  3132.         ;;
  3133.         --fatal-warnings) enable fatal_warnings
  3134.         ;;
  3135.         *)
  3136.             optname="${opt%%=*}"
  3137.             optname="${optname#--}"
  3138.             optname=$(echo "$optname" | sed 's/-/_/g')
  3139.             if is_in $optname $CMDLINE_SET; then
  3140.                 eval $optname='$optval'
  3141.             elif is_in $optname $CMDLINE_APPEND; then
  3142.                 append $optname "$optval"
  3143.             else
  3144.                 die_unknown $opt
  3145.             fi
  3146.         ;;
  3147.     esac
  3148. done
  3149.  
  3150. for e in $env; do
  3151.     eval "export $e"
  3152. done
  3153.  
  3154. disabled logging && logfile=/dev/null
  3155.  
  3156. echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
  3157. set >> $logfile
  3158.  
  3159. test -n "$valgrind" && toolchain="valgrind-memcheck"
  3160.  
  3161. case "$toolchain" in
  3162.     clang-asan)
  3163.         cc_default="clang"
  3164.         add_cflags  -fsanitize=address
  3165.         add_ldflags -fsanitize=address
  3166.     ;;
  3167.     clang-tsan)
  3168.         cc_default="clang"
  3169.         add_cflags  -fsanitize=thread -pie
  3170.         add_ldflags -fsanitize=thread -pie
  3171.     ;;
  3172.     clang-usan)
  3173.         cc_default="clang"
  3174.         add_cflags  -fsanitize=undefined
  3175.         add_ldflags -fsanitize=undefined
  3176.     ;;
  3177.     gcc-asan)
  3178.         cc_default="gcc"
  3179.         add_cflags  -fsanitize=address
  3180.         add_ldflags -fsanitize=address
  3181.     ;;
  3182.     gcc-tsan)
  3183.         cc_default="gcc"
  3184.         add_cflags  -fsanitize=thread -pie -fPIC
  3185.         add_ldflags -fsanitize=thread -pie -fPIC
  3186.     ;;
  3187.     gcc-usan)
  3188.         cc_default="gcc"
  3189.         add_cflags  -fsanitize=undefined
  3190.         add_ldflags -fsanitize=undefined
  3191.     ;;
  3192.     valgrind-massif)
  3193.         target_exec_default=${valgrind:-"valgrind"}
  3194.         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"
  3195.     ;;
  3196.     valgrind-memcheck)
  3197.         target_exec_default=${valgrind:-"valgrind"}
  3198.         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"
  3199.     ;;
  3200.     msvc)
  3201.         # Check whether the current MSVC version needs the C99 converter.
  3202.         # From MSVC 2013 (compiler major version 18) onwards, it does actually
  3203.         # support enough of C99 to build ffmpeg. Default to the new
  3204.         # behaviour if the regexp was unable to match anything, since this
  3205.         # successfully parses the version number of existing supported
  3206.         # versions that require the converter (MSVC 2010 and 2012).
  3207.         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
  3208.         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
  3209.             cc_default="cl"
  3210.         else
  3211.             cc_default="c99wrap cl"
  3212.         fi
  3213.         ld_default="$source_path/compat/windows/mslink"
  3214.         nm_default="dumpbin -symbols"
  3215.         ar_default="lib"
  3216.         case "$arch" in
  3217.         arm*)
  3218.             as_default="armasm"
  3219.             ;;
  3220.         esac
  3221.         target_os_default="win32"
  3222.         # Use a relative path for TMPDIR. This makes sure all the
  3223.         # ffconf temp files are written with a relative path, avoiding
  3224.         # issues with msys/win32 path conversion for MSVC parameters
  3225.         # such as -Fo<file> or -out:<file>.
  3226.         TMPDIR=.
  3227.     ;;
  3228.     icl)
  3229.         cc_default="icl"
  3230.         ld_default="xilink"
  3231.         nm_default="dumpbin -symbols"
  3232.         ar_default="xilib"
  3233.         target_os_default="win32"
  3234.         TMPDIR=.
  3235.     ;;
  3236.     gcov)
  3237.         add_cflags  -fprofile-arcs -ftest-coverage
  3238.         add_ldflags -fprofile-arcs -ftest-coverage
  3239.     ;;
  3240.     hardened)
  3241.         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
  3242.         add_cflags   -fno-strict-overflow -fstack-protector-all
  3243.         add_ldflags  -Wl,-z,relro -Wl,-z,now
  3244.     ;;
  3245.     ?*)
  3246.         die "Unknown toolchain $toolchain"
  3247.     ;;
  3248. esac
  3249.  
  3250. test -n "$cross_prefix" && enable cross_compile
  3251.  
  3252. if enabled cross_compile; then
  3253.     test -n "$arch" && test -n "$target_os" ||
  3254.         die "Must specify target arch and OS when cross-compiling"
  3255. fi
  3256.  
  3257. ar_default="${cross_prefix}${ar_default}"
  3258. cc_default="${cross_prefix}${cc_default}"
  3259. cxx_default="${cross_prefix}${cxx_default}"
  3260. nm_default="${cross_prefix}${nm_default}"
  3261. pkg_config_default="${cross_prefix}${pkg_config_default}"
  3262. if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
  3263.     ranlib_default="${cross_prefix}${ranlib_default} -D"
  3264. else
  3265.     ranlib_default="${cross_prefix}${ranlib_default}"
  3266. fi
  3267. strip_default="${cross_prefix}${strip_default}"
  3268. windres_default="${cross_prefix}${windres_default}"
  3269.  
  3270. sysinclude_default="${sysroot}/usr/include"
  3271.  
  3272. set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
  3273.     target_exec target_os yasmexe
  3274. enabled cross_compile || host_cc_default=$cc
  3275. set_default host_cc
  3276.  
  3277. pkg_config_fail_message=""
  3278. if ! $pkg_config --version >/dev/null 2>&1; then
  3279.     warn "$pkg_config not found, library detection may fail."
  3280.     pkg_config=false
  3281. elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
  3282.     pkg_config_fail_message="
  3283. Note: When building a static binary, add --pkg-config-flags=\"--static\"."
  3284. fi
  3285.  
  3286. if test $doxygen != $doxygen_default && \
  3287.   ! $doxygen --version >/dev/null 2>&1; then
  3288.     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
  3289. fi
  3290.  
  3291. exesuf() {
  3292.     case $1 in
  3293.         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
  3294.     esac
  3295. }
  3296.  
  3297. EXESUF=$(exesuf $target_os)
  3298. HOSTEXESUF=$(exesuf $host_os)
  3299.  
  3300. # set temporary file name
  3301. : ${TMPDIR:=$TEMPDIR}
  3302. : ${TMPDIR:=$TMP}
  3303. : ${TMPDIR:=/tmp}
  3304.  
  3305. if [ -n "$tempprefix" ] ; then
  3306.     mktemp(){
  3307.         echo $tempprefix.${HOSTNAME}.${UID}
  3308.     }
  3309. elif ! check_cmd mktemp -u XXXXXX; then
  3310.     # simple replacement for missing mktemp
  3311.     # NOT SAFE FOR GENERAL USE
  3312.     mktemp(){
  3313.         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
  3314.     }
  3315. fi
  3316.  
  3317. tmpfile(){
  3318.     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
  3319.         (set -C; exec > $tmp) 2>/dev/null ||
  3320.         die "Unable to create temporary file in $TMPDIR."
  3321.     append TMPFILES $tmp
  3322.     eval $1=$tmp
  3323. }
  3324.  
  3325. trap 'rm -f -- $TMPFILES' EXIT
  3326.  
  3327. tmpfile TMPASM .asm
  3328. tmpfile TMPC   .c
  3329. tmpfile TMPCPP .cpp
  3330. tmpfile TMPE   $EXESUF
  3331. tmpfile TMPH   .h
  3332. tmpfile TMPM   .m
  3333. tmpfile TMPO   .o
  3334. tmpfile TMPS   .S
  3335. tmpfile TMPSH  .sh
  3336. tmpfile TMPV   .ver
  3337.  
  3338. unset -f mktemp
  3339.  
  3340. chmod +x $TMPE
  3341.  
  3342. # make sure we can execute files in $TMPDIR
  3343. cat > $TMPSH 2>> $logfile <<EOF
  3344. #! /bin/sh
  3345. EOF
  3346. chmod +x $TMPSH >> $logfile 2>&1
  3347. if ! $TMPSH >> $logfile 2>&1; then
  3348.     cat <<EOF
  3349. Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
  3350. variable to another directory and make sure that it is not mounted noexec.
  3351. EOF
  3352.     die "Sanity test failed."
  3353. fi
  3354.  
  3355. armasm_flags(){
  3356.     for flag; do
  3357.         case $flag in
  3358.             # Filter out MSVC cl.exe options from cflags that shouldn't
  3359.             # be passed to gas-preprocessor
  3360.             -M[TD]*)                                            ;;
  3361.             *)                  echo $flag                      ;;
  3362.         esac
  3363.    done
  3364. }
  3365.  
  3366. ccc_flags(){
  3367.     for flag; do
  3368.         case $flag in
  3369.             -std=c99)           echo -c99                       ;;
  3370.             -mcpu=*)            echo -arch ${flag#*=}           ;;
  3371.             -mieee)             echo -ieee                      ;;
  3372.             -O*|-fast)          echo $flag                      ;;
  3373.             -fno-math-errno)    echo -assume nomath_errno       ;;
  3374.             -g)                 echo -g3                        ;;
  3375.             -Wall)              echo -msg_enable level2         ;;
  3376.             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
  3377.             -Wl,*)              echo $flag                      ;;
  3378.             -f*|-W*)                                            ;;
  3379.             *)                  echo $flag                      ;;
  3380.         esac
  3381.    done
  3382. }
  3383.  
  3384. cparser_flags(){
  3385.     for flag; do
  3386.         case $flag in
  3387.             -Wno-switch)             echo -Wno-switch-enum ;;
  3388.             -Wno-format-zero-length) ;;
  3389.             -Wdisabled-optimization) ;;
  3390.             -Wno-pointer-sign)       echo -Wno-other ;;
  3391.             *)                       echo $flag ;;
  3392.         esac
  3393.     done
  3394. }
  3395.  
  3396. msvc_common_flags(){
  3397.     for flag; do
  3398.         case $flag in
  3399.             # In addition to specifying certain flags under the compiler
  3400.             # specific filters, they must be specified here as well or else the
  3401.             # generic catch all at the bottom will print the original flag.
  3402.             -Wall)                ;;
  3403.             -std=c99)             ;;
  3404.             # Common flags
  3405.             -fomit-frame-pointer) ;;
  3406.             -g)                   echo -Z7 ;;
  3407.             -fno-math-errno)      ;;
  3408.             -fno-common)          ;;
  3409.             -fno-signed-zeros)    ;;
  3410.             -fPIC)                ;;
  3411.             -mthumb)              ;;
  3412.             -march=*)             ;;
  3413.             -lz)                  echo zlib.lib ;;
  3414.             -lavifil32)           echo vfw32.lib ;;
  3415.             -lavicap32)           echo vfw32.lib user32.lib ;;
  3416.             -l*)                  echo ${flag#-l}.lib ;;
  3417.             -LARGEADDRESSAWARE)   echo $flag ;;
  3418.             -L*)                  echo -libpath:${flag#-L} ;;
  3419.             *)                    echo $flag ;;
  3420.         esac
  3421.     done
  3422. }
  3423.  
  3424. msvc_flags(){
  3425.     msvc_common_flags "$@"
  3426.     for flag; do
  3427.         case $flag in
  3428.             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
  3429.                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
  3430.                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
  3431.                                        -wd4307 \
  3432.                                        -wd4273 -wd4554 -wd4701 ;;
  3433.         esac
  3434.     done
  3435. }
  3436.  
  3437. icl_flags(){
  3438.     msvc_common_flags "$@"
  3439.     for flag; do
  3440.         case $flag in
  3441.             # Despite what Intel's documentation says -Wall, which is supported
  3442.             # on Windows, does enable remarks so disable them here.
  3443.             -Wall)                echo $flag -Qdiag-disable:remark ;;
  3444.             -std=c99)             echo -Qstd=c99 ;;
  3445.             -flto)                echo -ipo ;;
  3446.         esac
  3447.     done
  3448. }
  3449.  
  3450. icc_flags(){
  3451.     for flag; do
  3452.         case $flag in
  3453.             -flto)                echo -ipo ;;
  3454.             *)                    echo $flag ;;
  3455.         esac
  3456.     done
  3457. }
  3458.  
  3459. pgi_flags(){
  3460.     for flag; do
  3461.         case $flag in
  3462.             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
  3463.             -fomit-frame-pointer) echo -Mnoframe ;;
  3464.             -g)                   echo -gopt ;;
  3465.             *)                    echo $flag ;;
  3466.         esac
  3467.     done
  3468. }
  3469.  
  3470. suncc_flags(){
  3471.     for flag; do
  3472.         case $flag in
  3473.             -march=*|-mcpu=*)
  3474.                 case "${flag#*=}" in
  3475.                     native)                   echo -xtarget=native       ;;
  3476.                     v9|niagara)               echo -xarch=sparc          ;;
  3477.                     ultrasparc)               echo -xarch=sparcvis       ;;
  3478.                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
  3479.                     i586|pentium)             echo -xchip=pentium        ;;
  3480.                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
  3481.                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
  3482.                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
  3483.                     pentium4*)          echo -xtarget=pentium4           ;;
  3484.                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
  3485.                     *-sse3)             echo -xarch=sse3                 ;;
  3486.                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
  3487.                     bonnell)                   echo -xarch=ssse3         ;;
  3488.                     corei7|nehalem)            echo -xtarget=nehalem     ;;
  3489.                     westmere)                  echo -xtarget=westmere    ;;
  3490.                     silvermont)                echo -xarch=sse4_2        ;;
  3491.                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
  3492.                     core-avx*|ivybridge|haswell|broadwell)
  3493.                                                echo -xarch=avx           ;;
  3494.                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
  3495.                     btver1)                    echo -xarch=amdsse4a      ;;
  3496.                     btver2|bdver*)             echo -xarch=avx           ;;
  3497.                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
  3498.                     k8|opteron|athlon64|athlon-fx)
  3499.                                                echo -xarch=sse2a         ;;
  3500.                     athlon*)                   echo -xarch=pentium_proa  ;;
  3501.                 esac
  3502.                 ;;
  3503.             -std=c99)             echo -xc99              ;;
  3504.             -fomit-frame-pointer) echo -xregs=frameptr    ;;
  3505.             -fPIC)                echo -KPIC -xcode=pic32 ;;
  3506.             -W*,*)                echo $flag              ;;
  3507.             -f*-*|-W*|-mimpure-text)                      ;;
  3508.             -shared)              echo -G                 ;;
  3509.             *)                    echo $flag              ;;
  3510.         esac
  3511.     done
  3512. }
  3513.  
  3514. tms470_flags(){
  3515.     for flag; do
  3516.         case $flag in
  3517.             -march=*|-mcpu=*)
  3518.                 case "${flag#*=}" in
  3519.                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
  3520.                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
  3521.                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
  3522.                     armv6*|arm11*)          echo -mv=6   ;;
  3523.                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
  3524.                                             echo -mv=5e  ;;
  3525.                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
  3526.                 esac
  3527.                 ;;
  3528.             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
  3529.             -mfpu=vfp)      echo --float_support=vfpv2        ;;
  3530.             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
  3531.             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
  3532.             -msoft-float)   echo --float_support=vfplib       ;;
  3533.             -O[0-3]|-mf=*)  echo $flag                        ;;
  3534.             -g)             echo -g -mn                       ;;
  3535.             -pds=*)         echo $flag                        ;;
  3536.             -D*|-I*)        echo $flag                        ;;
  3537.             --gcc|--abi=*)  echo $flag                        ;;
  3538.             -me)            echo $flag                        ;;
  3539.         esac
  3540.     done
  3541. }
  3542.  
  3543. probe_cc(){
  3544.     pfx=$1
  3545.     _cc=$2
  3546.     first=$3
  3547.  
  3548.     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
  3549.     unset _ld_o _ldflags _ld_lib _ld_path
  3550.     unset _depflags _DEPCMD _DEPFLAGS
  3551.     _flags_filter=echo
  3552.  
  3553.     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
  3554.         true # no-op to avoid reading stdin in following checks
  3555.     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
  3556.         _type=llvm_gcc
  3557.         gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
  3558.         _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
  3559.         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
  3560.         _cflags_speed='-O3'
  3561.         _cflags_size='-Os'
  3562.     elif $_cc -v 2>&1 | grep -qi ^gcc; then
  3563.         _type=gcc
  3564.         gcc_version=$($_cc --version | head -n1)
  3565.         gcc_basever=$($_cc -dumpversion)
  3566.         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
  3567.         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
  3568.         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
  3569.         case $gcc_basever in
  3570.             2*) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
  3571.         esac
  3572.         if [ "$first" = true ]; then
  3573.             case $gcc_basever in
  3574.                 4.2*)
  3575.                 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
  3576.             esac
  3577.         fi
  3578.         _cflags_speed='-O3'
  3579.         _cflags_size='-Os'
  3580.     elif $_cc --version 2>/dev/null | grep -q ^icc; then
  3581.         _type=icc
  3582.         _ident=$($_cc --version | head -n1)
  3583.         _depflags='-MMD'
  3584.         _cflags_speed='-O3'
  3585.         _cflags_size='-Os'
  3586.         _cflags_noopt='-O1'
  3587.         _flags_filter=icc_flags
  3588.     elif $_cc -v 2>&1 | grep -q xlc; then
  3589.         _type=xlc
  3590.         _ident=$($_cc -qversion 2>/dev/null | head -n1)
  3591.         _cflags_speed='-O5'
  3592.         _cflags_size='-O5 -qcompact'
  3593.     elif $_cc -V 2>/dev/null | grep -q Compaq; then
  3594.         _type=ccc
  3595.         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
  3596.         _DEPFLAGS='-M'
  3597.         _cflags_speed='-fast'
  3598.         _cflags_size='-O1'
  3599.         _flags_filter=ccc_flags
  3600.     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
  3601.         test -d "$sysroot" || die "No valid sysroot specified."
  3602.         _type=armcc
  3603.         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
  3604.         armcc_conf="$PWD/armcc.conf"
  3605.         $_cc --arm_linux_configure                 \
  3606.              --arm_linux_config_file="$armcc_conf" \
  3607.              --configure_sysroot="$sysroot"        \
  3608.              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
  3609.              die "Error creating armcc configuration file."
  3610.         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
  3611.         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
  3612.         as_default="${cross_prefix}gcc"
  3613.         _depflags='-MMD'
  3614.         _cflags_speed='-O3'
  3615.         _cflags_size='-Os'
  3616.     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
  3617.         _type=tms470
  3618.         _ident=$($_cc -version | head -n1 | tr -s ' ')
  3619.         _flags='--gcc --abi=eabi -me'
  3620.         _cc_e='-ppl -fe=$@'
  3621.         _cc_o='-fe=$@'
  3622.         _depflags='-ppa -ppd=$(@:.o=.d)'
  3623.         _cflags_speed='-O3 -mf=5'
  3624.         _cflags_size='-O3 -mf=2'
  3625.         _flags_filter=tms470_flags
  3626.     elif $_cc -v 2>&1 | grep -q clang; then
  3627.         _type=clang
  3628.         _ident=$($_cc --version 2>/dev/null | head -n1)
  3629.         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
  3630.         _cflags_speed='-O3'
  3631.         _cflags_size='-Os'
  3632.     elif $_cc -V 2>&1 | grep -q Sun; then
  3633.         _type=suncc
  3634.         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
  3635.         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
  3636.         _DEPFLAGS='-xM1 -xc99'
  3637.         _ldflags='-std=c99'
  3638.         _cflags_speed='-O5'
  3639.         _cflags_size='-O5 -xspace'
  3640.         _flags_filter=suncc_flags
  3641.     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
  3642.         _type=pathscale
  3643.         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
  3644.         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
  3645.         _cflags_speed='-O2'
  3646.         _cflags_size='-Os'
  3647.         _flags_filter='filter_out -Wdisabled-optimization'
  3648.     elif $_cc -v 2>&1 | grep -q Open64; then
  3649.         _type=open64
  3650.         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
  3651.         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
  3652.         _cflags_speed='-O2'
  3653.         _cflags_size='-Os'
  3654.         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
  3655.     elif $_cc -V 2>&1 | grep -q Portland; then
  3656.         _type=pgi
  3657.         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
  3658.         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
  3659.         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
  3660.         _cflags_size="-O2 -Munroll=c:1 $opt_common"
  3661.         _cflags_noopt="-O"
  3662.         _flags_filter=pgi_flags
  3663.     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
  3664.         _type=armasm
  3665.         _ident=$($_cc | head -n1)
  3666.         # 4509: "This form of conditional instruction is deprecated"
  3667.         _flags="-nologo -ignore 4509"
  3668.         _flags_filter=armasm_flags
  3669.     elif $_cc 2>&1 | grep -q Intel; then
  3670.         _type=icl
  3671.         _ident=$($_cc 2>&1 | head -n1)
  3672.         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
  3673.         # Not only is O3 broken on 13.x+ but it is slower on all previous
  3674.         # versions (tested) as well.
  3675.         _cflags_speed="-O2"
  3676.         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
  3677.         if $_cc 2>&1 | grep -q Linker; then
  3678.             _ld_o='-out:$@'
  3679.         else
  3680.             _ld_o='-Fe$@'
  3681.         fi
  3682.         _cc_o='-Fo$@'
  3683.         _cc_e='-P'
  3684.         _flags_filter=icl_flags
  3685.         _ld_lib='lib%.a'
  3686.         _ld_path='-libpath:'
  3687.         # -Qdiag-error to make icl error when seeing certain unknown arguments
  3688.         _flags='-nologo -Qdiag-error:4044,10157'
  3689.         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
  3690.         # with MSVC which enables it by default.
  3691.         _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
  3692.         disable stripping
  3693.     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
  3694.         _type=msvc
  3695.         _ident=$($_cc 2>&1 | head -n1)
  3696.         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
  3697.         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
  3698.         _cflags_speed="-O2"
  3699.         _cflags_size="-O1"
  3700.         if $_cc -nologo- 2>&1 | grep -q Linker; then
  3701.             _ld_o='-out:$@'
  3702.         else
  3703.             _ld_o='-Fe$@'
  3704.         fi
  3705.         _cc_o='-Fo$@'
  3706.         _cc_e='-P -Fi$@'
  3707.         _flags_filter=msvc_flags
  3708.         _ld_lib='lib%.a'
  3709.         _ld_path='-libpath:'
  3710.         _flags='-nologo'
  3711.         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS'
  3712.         disable stripping
  3713.     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
  3714.         _type=cparser
  3715.         _ident=$($_cc --version | head -n1)
  3716.         _depflags='-MMD'
  3717.         _cflags_speed='-O4'
  3718.         _cflags_size='-O2'
  3719.         _flags_filter=cparser_flags
  3720.     fi
  3721.  
  3722.     eval ${pfx}_type=\$_type
  3723.     eval ${pfx}_ident=\$_ident
  3724. }
  3725.  
  3726. set_ccvars(){
  3727.     eval ${1}_C=\${_cc_c-\${${1}_C}}
  3728.     eval ${1}_E=\${_cc_e-\${${1}_E}}
  3729.     eval ${1}_O=\${_cc_o-\${${1}_O}}
  3730.  
  3731.     if [ -n "$_depflags" ]; then
  3732.         eval ${1}_DEPFLAGS=\$_depflags
  3733.     else
  3734.         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
  3735.         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
  3736.         eval DEP${1}FLAGS=\$_flags
  3737.     fi
  3738. }
  3739.  
  3740. probe_cc cc "$cc" "true"
  3741. cflags_filter=$_flags_filter
  3742. cflags_speed=$_cflags_speed
  3743. cflags_size=$_cflags_size
  3744. cflags_noopt=$_cflags_noopt
  3745. add_cflags $_flags $_cflags
  3746. cc_ldflags=$_ldflags
  3747. set_ccvars CC
  3748.  
  3749. probe_cc hostcc "$host_cc"
  3750. host_cflags_filter=$_flags_filter
  3751. add_host_cflags  $_flags $_cflags
  3752. set_ccvars HOSTCC
  3753.  
  3754. test -n "$cc_type" && enable $cc_type ||
  3755.     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
  3756.  
  3757. : ${as_default:=$cc}
  3758. : ${dep_cc_default:=$cc}
  3759. : ${ld_default:=$cc}
  3760. : ${host_ld_default:=$host_cc}
  3761. set_default ar as dep_cc ld host_ld windres
  3762.  
  3763. probe_cc as "$as"
  3764. asflags_filter=$_flags_filter
  3765. add_asflags $_flags $_cflags
  3766. set_ccvars AS
  3767.  
  3768. probe_cc ld "$ld"
  3769. ldflags_filter=$_flags_filter
  3770. add_ldflags $_flags $_ldflags
  3771. test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
  3772. LD_O=${_ld_o-$LD_O}
  3773. LD_LIB=${_ld_lib-$LD_LIB}
  3774. LD_PATH=${_ld_path-$LD_PATH}
  3775.  
  3776. probe_cc hostld "$host_ld"
  3777. host_ldflags_filter=$_flags_filter
  3778. add_host_ldflags $_flags $_ldflags
  3779. HOSTLD_O=${_ld_o-$HOSTLD_O}
  3780.  
  3781. if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
  3782.     probe_cc depcc "$dep_cc"
  3783.     CCDEP=${_DEPCMD:-$DEPCMD}
  3784.     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
  3785.     DEPCCFLAGS=$_flags
  3786. fi
  3787.  
  3788. if $ar 2>&1 | grep -q Microsoft; then
  3789.     arflags="-nologo"
  3790.     ar_o='-out:$@'
  3791. elif $ar 2>&1 | grep -q 'Texas Instruments'; then
  3792.     arflags="rq"
  3793.     ar_o='$@'
  3794. elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
  3795.     arflags='-Xany -r -c'
  3796.     ar_o='$@'
  3797. elif $ar 2>&1 | grep -q "\[D\] "; then
  3798.     arflags="rcD"
  3799.     ar_o='$@'
  3800. else
  3801.     arflags="rc"
  3802.     ar_o='$@'
  3803. fi
  3804.  
  3805. add_cflags $extra_cflags
  3806. add_cxxflags $extra_cxxflags
  3807. add_asflags $extra_cflags
  3808.  
  3809. if test -n "$sysroot"; then
  3810.     case "$cc_type" in
  3811.         gcc|llvm_gcc|clang)
  3812.             add_cppflags --sysroot="$sysroot"
  3813.             add_ldflags --sysroot="$sysroot"
  3814. # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
  3815.             add_cppflags -isysroot "$sysroot"
  3816.             add_ldflags -isysroot "$sysroot"
  3817.         ;;
  3818.         tms470)
  3819.             add_cppflags -I"$sysinclude"
  3820.             add_ldflags  --sysroot="$sysroot"
  3821.         ;;
  3822.     esac
  3823. fi
  3824.  
  3825. if test "$cpu" = host; then
  3826.     enabled cross_compile &&
  3827.         die "--cpu=host makes no sense when cross-compiling."
  3828.  
  3829.     case "$cc_type" in
  3830.         gcc|llvm_gcc)
  3831.             check_native(){
  3832.                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
  3833.                 sed -n "/cc1.*$1=/{
  3834.                             s/.*$1=\\([^ ]*\\).*/\\1/
  3835.                             p
  3836.                             q
  3837.                         }" $TMPE
  3838.             }
  3839.             cpu=$(check_native -march || check_native -mcpu)
  3840.         ;;
  3841.     esac
  3842.  
  3843.     test "${cpu:-host}" = host &&
  3844.         die "--cpu=host not supported with compiler $cc"
  3845. fi
  3846.  
  3847. # Deal with common $arch aliases
  3848. case "$arch" in
  3849.     aarch64|arm64)
  3850.         arch="aarch64"
  3851.     ;;
  3852.     arm*|iPad*|iPhone*)
  3853.         arch="arm"
  3854.     ;;
  3855.     mips*|IP*)
  3856.         arch="mips"
  3857.     ;;
  3858.     parisc*|hppa*)
  3859.         arch="parisc"
  3860.     ;;
  3861.     "Power Macintosh"|ppc*|powerpc*)
  3862.         arch="ppc"
  3863.     ;;
  3864.     s390|s390x)
  3865.         arch="s390"
  3866.     ;;
  3867.     sh4|sh)
  3868.         arch="sh4"
  3869.     ;;
  3870.     sun4u|sparc*)
  3871.         arch="sparc"
  3872.     ;;
  3873.     tilegx|tile-gx)
  3874.         arch="tilegx"
  3875.     ;;
  3876.     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
  3877.         arch="x86"
  3878.     ;;
  3879. esac
  3880.  
  3881. is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
  3882. enable $arch
  3883.  
  3884. # Add processor-specific flags
  3885. if enabled aarch64; then
  3886.  
  3887.     case $cpu in
  3888.         armv*)
  3889.             cpuflags="-march=$cpu"
  3890.         ;;
  3891.         *)
  3892.             cpuflags="-mcpu=$cpu"
  3893.         ;;
  3894.     esac
  3895.  
  3896. elif enabled alpha; then
  3897.  
  3898.     cpuflags="-mcpu=$cpu"
  3899.  
  3900. elif enabled arm; then
  3901.  
  3902.     check_arm_arch() {
  3903.         check_cpp_condition stddef.h \
  3904.             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
  3905.             $cpuflags
  3906.     }
  3907.  
  3908.     probe_arm_arch() {
  3909.         if   check_arm_arch 4;        then echo armv4;
  3910.         elif check_arm_arch 4T;       then echo armv4t;
  3911.         elif check_arm_arch 5;        then echo armv5;
  3912.         elif check_arm_arch 5E;       then echo armv5e;
  3913.         elif check_arm_arch 5T;       then echo armv5t;
  3914.         elif check_arm_arch 5TE;      then echo armv5te;
  3915.         elif check_arm_arch 5TEJ;     then echo armv5te;
  3916.         elif check_arm_arch 6;        then echo armv6;
  3917.         elif check_arm_arch 6J;       then echo armv6j;
  3918.         elif check_arm_arch 6K;       then echo armv6k;
  3919.         elif check_arm_arch 6Z;       then echo armv6z;
  3920.         elif check_arm_arch 6ZK;      then echo armv6zk;
  3921.         elif check_arm_arch 6T2;      then echo armv6t2;
  3922.         elif check_arm_arch 7;        then echo armv7;
  3923.         elif check_arm_arch 7A  7_A;  then echo armv7-a;
  3924.         elif check_arm_arch 7S;       then echo armv7-a;
  3925.         elif check_arm_arch 7R  7_R;  then echo armv7-r;
  3926.         elif check_arm_arch 7M  7_M;  then echo armv7-m;
  3927.         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
  3928.         elif check_arm_arch 8A  8_A;  then echo armv8-a;
  3929.         fi
  3930.     }
  3931.  
  3932.     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
  3933.  
  3934.     case $cpu in
  3935.         armv*)
  3936.             cpuflags="-march=$cpu"
  3937.             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
  3938.         ;;
  3939.         *)
  3940.             cpuflags="-mcpu=$cpu"
  3941.             case $cpu in
  3942.                 cortex-a*)                               subarch=armv7a  ;;
  3943.                 cortex-r*)                               subarch=armv7r  ;;
  3944.                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
  3945.                 arm11*)                                  subarch=armv6   ;;
  3946.                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
  3947.                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
  3948.                 *)                             subarch=$(probe_arm_arch) ;;
  3949.             esac
  3950.         ;;
  3951.     esac
  3952.  
  3953.     case "$subarch" in
  3954.         armv5t*)    enable fast_clz                ;;
  3955.         armv[6-8]*)
  3956.             enable fast_clz
  3957.             disabled fast_unaligned || enable fast_unaligned
  3958.             ;;
  3959.     esac
  3960.  
  3961. elif enabled avr32; then
  3962.  
  3963.     case $cpu in
  3964.         ap7[02]0[0-2])
  3965.             subarch="avr32_ap"
  3966.             cpuflags="-mpart=$cpu"
  3967.         ;;
  3968.         ap)
  3969.             subarch="avr32_ap"
  3970.             cpuflags="-march=$cpu"
  3971.         ;;
  3972.         uc3[ab]*)
  3973.             subarch="avr32_uc"
  3974.             cpuflags="-mcpu=$cpu"
  3975.         ;;
  3976.         uc)
  3977.             subarch="avr32_uc"
  3978.             cpuflags="-march=$cpu"
  3979.         ;;
  3980.     esac
  3981.  
  3982. elif enabled bfin; then
  3983.  
  3984.     cpuflags="-mcpu=$cpu"
  3985.  
  3986. elif enabled mips; then
  3987.  
  3988.     cpuflags="-march=$cpu"
  3989.  
  3990.     case $cpu in
  3991.         24kc)
  3992.             disable mips32r5
  3993.             disable mips64r6
  3994.             disable mipsfpu
  3995.             disable mipsdspr1
  3996.             disable mipsdspr2
  3997.             disable msa
  3998.         ;;
  3999.         24kf*)
  4000.             disable mips32r5
  4001.             disable mips64r6
  4002.             disable mipsdspr1
  4003.             disable mipsdspr2
  4004.             disable msa
  4005.         ;;
  4006.         24kec|34kc|1004kc)
  4007.             disable mips32r5
  4008.             disable mips64r6
  4009.             disable mipsfpu
  4010.             disable mipsdspr2
  4011.             disable msa
  4012.         ;;
  4013.         24kef*|34kf*|1004kf*)
  4014.             disable mips32r5
  4015.             disable mips64r6
  4016.             disable mipsdspr2
  4017.             disable msa
  4018.         ;;
  4019.         74kc)
  4020.             disable mips32r5
  4021.             disable mips64r6
  4022.             disable mipsfpu
  4023.             disable msa
  4024.         ;;
  4025.         74kf)
  4026.             disable mips32r5
  4027.             disable mips64r6
  4028.             disable msa
  4029.         ;;
  4030.         p5600)
  4031.             disable mips64r6
  4032.             disable mipsdspr1
  4033.             disable mipsdspr2
  4034.  
  4035.             check_cflags "-mtune=p5600"
  4036.         ;;
  4037.         i6400)
  4038.             disable mips32r5
  4039.             disable mipsdspr1
  4040.             disable mipsdspr2
  4041.             disable mipsfpu
  4042.  
  4043.             check_cflags "-mtune=i6400 -mabi=64"
  4044.             check_ldflags "-mabi=64"
  4045.         ;;
  4046.         loongson*)
  4047.             disable mipsfpu
  4048.             disable mips32r2
  4049.             disable mips32r5
  4050.             disable mips64r6
  4051.             disable mipsdspr1
  4052.             disable mipsdspr2
  4053.             disable msa
  4054.             enable local_aligned_8 local_aligned_16 local_aligned_32
  4055.             enable simd_align_16
  4056.             enable fast_64bit
  4057.             enable fast_clz
  4058.             enable fast_cmov
  4059.             enable fast_unaligned
  4060.             disable aligned_stack
  4061.             case $cpu in
  4062.                 loongson3*)
  4063.                     cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
  4064.                 ;;
  4065.                 loongson2e)
  4066.                     cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
  4067.                 ;;
  4068.                 loongson2f)
  4069.                     cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
  4070.                 ;;
  4071.             esac
  4072.         ;;
  4073.         generic)
  4074.             disable mips32r5
  4075.             disable mips64r6
  4076.             disable msa
  4077.         ;;
  4078.     esac
  4079.  
  4080. elif enabled ppc; then
  4081.  
  4082.     disable ldbrx
  4083.  
  4084.     case $(tolower $cpu) in
  4085.         601|ppc601|powerpc601)
  4086.             cpuflags="-mcpu=601"
  4087.             disable altivec
  4088.         ;;
  4089.         603*|ppc603*|powerpc603*)
  4090.             cpuflags="-mcpu=603"
  4091.             disable altivec
  4092.         ;;
  4093.         604*|ppc604*|powerpc604*)
  4094.             cpuflags="-mcpu=604"
  4095.             disable altivec
  4096.         ;;
  4097.         g3|75*|ppc75*|powerpc75*)
  4098.             cpuflags="-mcpu=750"
  4099.             disable altivec
  4100.         ;;
  4101.         g4|745*|ppc745*|powerpc745*)
  4102.             cpuflags="-mcpu=7450"
  4103.             disable vsx
  4104.         ;;
  4105.         74*|ppc74*|powerpc74*)
  4106.             cpuflags="-mcpu=7400"
  4107.             disable vsx
  4108.         ;;
  4109.         g5|970|ppc970|powerpc970)
  4110.             cpuflags="-mcpu=970"
  4111.             disable vsx
  4112.         ;;
  4113.         power[3-6]*)
  4114.             cpuflags="-mcpu=$cpu"
  4115.             disable vsx
  4116.         ;;
  4117.         power[7-8]*)
  4118.             cpuflags="-mcpu=$cpu"
  4119.         ;;
  4120.         cell)
  4121.             cpuflags="-mcpu=cell"
  4122.             enable ldbrx
  4123.             disable vsx
  4124.         ;;
  4125.         e500mc)
  4126.             cpuflags="-mcpu=e500mc"
  4127.             disable altivec
  4128.         ;;
  4129.         e500v2)
  4130.             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
  4131.             disable altivec
  4132.             disable dcbzl
  4133.         ;;
  4134.         e500)
  4135.             cpuflags="-mcpu=8540 -mhard-float"
  4136.             disable altivec
  4137.             disable dcbzl
  4138.         ;;
  4139.     esac
  4140.  
  4141. elif enabled sparc; then
  4142.  
  4143.     case $cpu in
  4144.         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
  4145.             cpuflags="-mcpu=$cpu"
  4146.         ;;
  4147.         ultrasparc*|niagara[234])
  4148.             cpuflags="-mcpu=$cpu"
  4149.         ;;
  4150.     esac
  4151.  
  4152. elif enabled x86; then
  4153.  
  4154.     case $cpu in
  4155.         i[345]86|pentium)
  4156.             cpuflags="-march=$cpu"
  4157.             disable i686
  4158.             disable mmx
  4159.         ;;
  4160.         # targets that do NOT support nopl and conditional mov (cmov)
  4161.         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
  4162.             cpuflags="-march=$cpu"
  4163.             disable i686
  4164.         ;;
  4165.         # targets that do support nopl and conditional mov (cmov)
  4166.         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
  4167.         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
  4168.             cpuflags="-march=$cpu"
  4169.             enable i686
  4170.             enable fast_cmov
  4171.         ;;
  4172.         # targets that do support conditional mov but on which it's slow
  4173.         pentium4|pentium4m|prescott|nocona)
  4174.             cpuflags="-march=$cpu"
  4175.             enable i686
  4176.             disable fast_cmov
  4177.         ;;
  4178.     esac
  4179.  
  4180. fi
  4181.  
  4182. if [ "$cpu" != generic ]; then
  4183.     add_cflags  $cpuflags
  4184.     add_asflags $cpuflags
  4185. fi
  4186.  
  4187. # compiler sanity check
  4188. check_exec <<EOF
  4189. int main(void){ return 0; }
  4190. EOF
  4191. if test "$?" != 0; then
  4192.     echo "$cc is unable to create an executable file."
  4193.     if test -z "$cross_prefix" && ! enabled cross_compile ; then
  4194.         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
  4195.         echo "Only do this if you know what cross compiling means."
  4196.     fi
  4197.     die "C compiler test failed."
  4198. fi
  4199.  
  4200. add_cppflags -D_ISOC99_SOURCE
  4201. add_cxxflags -D__STDC_CONSTANT_MACROS
  4202. check_cflags -std=c99
  4203. check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
  4204. #include <stdlib.h>
  4205. EOF
  4206. check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
  4207. #include <stdlib.h>
  4208. EOF
  4209.  
  4210. add_host_cppflags -D_ISOC99_SOURCE
  4211. check_host_cflags -std=c99
  4212. check_host_cflags -Wall
  4213. check_host_cflags -O3
  4214.  
  4215. check_64bit(){
  4216.     arch32=$1
  4217.     arch64=$2
  4218.     expr=$3
  4219.     check_code cc "" "int test[2*($expr) - 1]" &&
  4220.         subarch=$arch64 || subarch=$arch32
  4221. }
  4222.  
  4223. case "$arch" in
  4224.     aarch64|alpha|ia64)
  4225.         spic=$shared
  4226.     ;;
  4227.     mips)
  4228.         check_64bit mips mips64 '_MIPS_SIM > 1'
  4229.         spic=$shared
  4230.     ;;
  4231.     parisc)
  4232.         check_64bit parisc parisc64 'sizeof(void *) > 4'
  4233.         spic=$shared
  4234.     ;;
  4235.     ppc)
  4236.         check_64bit ppc ppc64 'sizeof(void *) > 4'
  4237.         spic=$shared
  4238.     ;;
  4239.     s390)
  4240.         check_64bit s390 s390x 'sizeof(void *) > 4'
  4241.         spic=$shared
  4242.     ;;
  4243.     sparc)
  4244.         check_64bit sparc sparc64 'sizeof(void *) > 4'
  4245.         spic=$shared
  4246.     ;;
  4247.     x86)
  4248.         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
  4249.         # Treat x32 as x64 for now. Note it also needs spic=$shared
  4250.         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
  4251.             subarch=x86_64
  4252.         if test "$subarch" = "x86_64"; then
  4253.             spic=$shared
  4254.         fi
  4255.     ;;
  4256.     ppc)
  4257.         check_cc <<EOF && subarch="ppc64"
  4258.         int test[(int)sizeof(char*) - 7];
  4259. EOF
  4260.     ;;
  4261. esac
  4262.  
  4263. enable $subarch
  4264. enabled spic && enable_weak pic
  4265.  
  4266. # OS specific
  4267. case $target_os in
  4268.     aix)
  4269.         SHFLAGS=-shared
  4270.         add_cppflags '-I\$(SRC_PATH)/compat/aix'
  4271.         enabled shared && add_ldflags -Wl,-brtl
  4272.         ;;
  4273.     android)
  4274.         disable symver
  4275.         enable section_data_rel_ro
  4276.         SLIB_INSTALL_NAME='$(SLIBNAME)'
  4277.         SLIB_INSTALL_LINKS=
  4278.         # soname not set on purpose
  4279.         SHFLAGS=-shared
  4280.         ;;
  4281.     haiku)
  4282.         prefix_default="/boot/common"
  4283.         network_extralibs="-lnetwork"
  4284.         host_libs=
  4285.         ;;
  4286.     sunos)
  4287.         SHFLAGS='-shared -Wl,-h,$$(@F)'
  4288.         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
  4289.         network_extralibs="-lsocket -lnsl"
  4290.         add_cppflags -D__EXTENSIONS__
  4291.         # When using suncc to build, the Solaris linker will mark
  4292.         # an executable with each instruction set encountered by
  4293.         # the Solaris assembler.  As our libraries contain their own
  4294.         # guards for processor-specific code, instead suppress
  4295.         # generation of the HWCAPS ELF section on Solaris x86 only.
  4296.         enabled_all suncc x86 &&
  4297.             echo "hwcap_1 = OVERRIDE;" > mapfile &&
  4298.             add_ldflags -Wl,-M,mapfile
  4299.         nm_default='nm -P -g'
  4300.         ;;
  4301.     netbsd)
  4302.         disable symver
  4303.         oss_indev_extralibs="-lossaudio"
  4304.         oss_outdev_extralibs="-lossaudio"
  4305.         enabled gcc || check_ldflags -Wl,-zmuldefs
  4306.         ;;
  4307.     openbsd|bitrig)
  4308.         disable symver
  4309.         SHFLAGS='-shared'
  4310.         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
  4311.         SLIB_INSTALL_LINKS=
  4312.         oss_indev_extralibs="-lossaudio"
  4313.         oss_outdev_extralibs="-lossaudio"
  4314.         ;;
  4315.     dragonfly)
  4316.         disable symver
  4317.         ;;
  4318.     freebsd)
  4319.         ;;
  4320.     bsd/os)
  4321.         add_extralibs -lpoll -lgnugetopt
  4322.         strip="strip -d"
  4323.         ;;
  4324.     darwin)
  4325.         enabled ppc && add_asflags -force_cpusubtype_ALL
  4326.         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
  4327.         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
  4328.         strip="${strip} -x"
  4329.         add_ldflags -Wl,-dynamic,-search_paths_first
  4330.         SLIBSUF=".dylib"
  4331.         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
  4332.         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
  4333.         objformat="macho"
  4334.         enabled x86_64 && objformat="macho64"
  4335.         enabled_any pic shared x86_64 ||
  4336.             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
  4337.         ;;
  4338.     mingw32*)
  4339.         if test $target_os = "mingw32ce"; then
  4340.             disable network
  4341.         else
  4342.             target_os=mingw32
  4343.         fi
  4344.         decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
  4345.         decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
  4346.         LIBTARGET=i386
  4347.         if enabled x86_64; then
  4348.             LIBTARGET="i386:x86-64"
  4349.         elif enabled arm; then
  4350.             LIBTARGET=arm-wince
  4351.         fi
  4352.         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
  4353.         check_ldflags -Wl,--nxcompat
  4354.         check_ldflags -Wl,--dynamicbase
  4355.         enabled x86_32 && check_ldflags -Wl,--large-address-aware
  4356.         shlibdir_default="$bindir_default"
  4357.         SLIBPREF=""
  4358.         SLIBSUF=".dll"
  4359.         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
  4360.         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
  4361.         dlltool="${cross_prefix}dlltool"
  4362.         if check_cmd lib.exe -list; then
  4363.             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
  4364.             if enabled x86_64; then
  4365.                 LIBTARGET=x64
  4366.             fi
  4367.         elif check_cmd $dlltool --version; then
  4368.             SLIB_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)'
  4369.         fi
  4370.         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
  4371.         SLIB_INSTALL_LINKS=
  4372.         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
  4373.         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
  4374.         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'
  4375.         objformat="win32"
  4376.         ranlib=:
  4377.         enable dos_paths
  4378.         ;;
  4379.     win32|win64)
  4380.         disable symver
  4381.         if enabled shared; then
  4382.             # Link to the import library instead of the normal static library
  4383.             # for shared libs.
  4384.             LD_LIB='%.lib'
  4385.             # Cannot build both shared and static libs with MSVC or icl.
  4386.             disable static
  4387.         fi
  4388.         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
  4389.         shlibdir_default="$bindir_default"
  4390.         SLIBPREF=""
  4391.         SLIBSUF=".dll"
  4392.         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
  4393.         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
  4394.         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
  4395.         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
  4396.         SLIB_INSTALL_LINKS=
  4397.         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
  4398.         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
  4399.         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
  4400.         objformat="win32"
  4401.         ranlib=:
  4402.         enable dos_paths
  4403.         ;;
  4404.     cygwin*)
  4405.         target_os=cygwin
  4406.         shlibdir_default="$bindir_default"
  4407.         SLIBPREF="cyg"
  4408.         SLIBSUF=".dll"
  4409.         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
  4410.         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
  4411.         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
  4412.         SLIB_INSTALL_LINKS=
  4413.         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
  4414.         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
  4415.         objformat="win32"
  4416.         enable dos_paths
  4417.         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
  4418.         ;;
  4419.     *-dos|freedos|opendos)
  4420.         network_extralibs="-lsocket"
  4421.         objformat="coff"
  4422.         enable dos_paths
  4423.         add_cppflags -U__STRICT_ANSI__
  4424.         ;;
  4425.     linux)
  4426.         enable dv1394
  4427.         enable section_data_rel_ro
  4428.         ;;
  4429.     irix*)
  4430.         target_os=irix
  4431.         ranlib="echo ignoring ranlib"
  4432.         ;;
  4433.     os/2*)
  4434.         strip="lxlite -CS"
  4435.         ln_s="cp -f"
  4436.         objformat="aout"
  4437.         add_cppflags -D_GNU_SOURCE
  4438.         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
  4439.         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
  4440.         LIBSUF="_s.a"
  4441.         SLIBPREF=""
  4442.         SLIBSUF=".dll"
  4443.         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
  4444.         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
  4445.         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
  4446.             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
  4447.             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
  4448.             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
  4449.             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
  4450.         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
  4451.             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
  4452.         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
  4453.         enable dos_paths
  4454.         enable_weak os2threads
  4455.         ;;
  4456.     gnu/kfreebsd)
  4457.         add_cppflags -D_BSD_SOURCE
  4458.         ;;
  4459.     gnu)
  4460.         ;;
  4461.     qnx)
  4462.         add_cppflags -D_QNX_SOURCE
  4463.         network_extralibs="-lsocket"
  4464.         ;;
  4465.     symbian)
  4466.         SLIBSUF=".dll"
  4467.         enable dos_paths
  4468.         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
  4469.         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
  4470.         add_ldflags -Wl,--target1-abs,--no-undefined \
  4471.                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
  4472.                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
  4473.         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
  4474.                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
  4475.                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
  4476.         ;;
  4477.     osf1)
  4478.         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
  4479.         ;;
  4480.     minix)
  4481.         ;;
  4482.     plan9)
  4483.         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
  4484.                      -D_REENTRANT_SOURCE        \
  4485.                      -D_RESEARCH_SOURCE         \
  4486.                      -DFD_SETSIZE=96            \
  4487.                      -DHAVE_SOCK_OPTS
  4488.         add_compat strtod.o strtod=avpriv_strtod
  4489.         network_extralibs='-lbsd'
  4490.         exeobjs=compat/plan9/main.o
  4491.         disable ffserver
  4492.         cp_f='cp'
  4493.         ;;
  4494.     none)
  4495.         ;;
  4496.     *)
  4497.         die "Unknown OS '$target_os'."
  4498.         ;;
  4499. esac
  4500.  
  4501. # determine libc flavour
  4502.  
  4503. probe_libc(){
  4504.     pfx=$1
  4505.     pfx_no_=${pfx%_}
  4506.     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
  4507.     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
  4508.         eval ${pfx}libc_type=uclibc
  4509.         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
  4510.     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
  4511.         eval ${pfx}libc_type=glibc
  4512.         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
  4513.     # MinGW headers can be installed on Cygwin, so check for newlib first.
  4514.     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
  4515.         eval ${pfx}libc_type=newlib
  4516.         add_${pfx}cppflags -U__STRICT_ANSI__
  4517.     # MinGW64 is backwards compatible with MinGW32, so check for it first.
  4518.     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
  4519.         eval ${pfx}libc_type=mingw64
  4520.         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
  4521.             add_compat msvcrt/snprintf.o
  4522.             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
  4523.         fi
  4524.         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
  4525.         eval test \$${pfx_no_}cc_type = "gcc" &&
  4526.             add_${pfx}cppflags -D__printf__=__gnu_printf__
  4527.     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
  4528.          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
  4529.         eval ${pfx}libc_type=mingw32
  4530.         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
  4531.             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
  4532.             die "ERROR: MinGW32 runtime version must be >= 3.15."
  4533.         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
  4534.         eval test \$${pfx_no_}cc_type = "gcc" &&
  4535.             add_${pfx}cppflags -D__printf__=__gnu_printf__
  4536.     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
  4537.         eval ${pfx}libc_type=msvcrt
  4538.         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
  4539.             if [ "$pfx" = host_ ]; then
  4540.                 add_host_cppflags -Dsnprintf=_snprintf
  4541.             else
  4542.                 add_compat strtod.o strtod=avpriv_strtod
  4543.                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
  4544.                                              _snprintf=avpriv_snprintf  \
  4545.                                              vsnprintf=avpriv_vsnprintf
  4546.             fi
  4547.         fi
  4548.         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
  4549.         # 0x601 by default unless something else is set by the user.
  4550.         # This can easily lead to us detecting functions only present
  4551.         # in such new versions and producing binaries requiring windows 7.0.
  4552.         # Therefore explicitly set the default to XP unless the user has
  4553.         # set something else on the command line.
  4554.         # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
  4555.         # family. For these cases, configure is free to use any functions
  4556.         # found in the SDK headers by default. (Alternatively, we could force
  4557.         # _WIN32_WINNT to 0x0602 in that case.)
  4558.         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
  4559.             { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
  4560. #ifdef WINAPI_FAMILY
  4561. #include <winapifamily.h>
  4562. #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  4563. #error not desktop
  4564. #endif
  4565. #endif
  4566. EOF
  4567.     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
  4568.         eval ${pfx}libc_type=klibc
  4569.     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
  4570.         eval ${pfx}libc_type=bionic
  4571.     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
  4572.         eval ${pfx}libc_type=solaris
  4573.         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
  4574.     fi
  4575.     check_${pfx}cc <<EOF
  4576. #include <time.h>
  4577. void *v = localtime_r;
  4578. EOF
  4579. 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
  4580. #include <time.h>
  4581. void *v = localtime_r;
  4582. EOF
  4583.  
  4584. }
  4585.  
  4586. probe_libc
  4587. test -n "$libc_type" && enable libc_$libc_type
  4588. probe_libc host_
  4589. test -n "$host_libc_type" && enable host_libc_$host_libc_type
  4590.  
  4591. case $libc_type in
  4592.     bionic)
  4593.         add_compat strtod.o strtod=avpriv_strtod
  4594.         ;;
  4595. esac
  4596.  
  4597. # hacks for compiler/libc/os combinations
  4598.  
  4599. if enabled_all tms470 libc_glibc; then
  4600.     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
  4601.     add_cppflags -D__USER_LABEL_PREFIX__=
  4602.     add_cppflags -D__builtin_memset=memset
  4603.     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
  4604.     add_cflags   -pds=48    # incompatible redefinition of macro
  4605. fi
  4606.  
  4607. if enabled_all ccc libc_glibc; then
  4608.     add_ldflags -Wl,-z,now  # calls to libots crash without this
  4609. fi
  4610.  
  4611. check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
  4612.     add_cppflags '-I\$(SRC_PATH)/compat/float'
  4613.  
  4614. esc(){
  4615.     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
  4616. }
  4617.  
  4618. echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
  4619.  
  4620. check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
  4621.  
  4622. set_default libdir
  4623. : ${shlibdir_default:="$libdir"}
  4624. : ${pkgconfigdir_default:="$libdir/pkgconfig"}
  4625.  
  4626. set_default $PATHS_LIST
  4627. set_default nm
  4628.  
  4629. # we need to build at least one lib type
  4630. if ! enabled_any static shared; then
  4631.     cat <<EOF
  4632. At least one library type must be built.
  4633. Specify --enable-static to build the static libraries or --enable-shared to
  4634. build the shared libraries as well. To only build the shared libraries specify
  4635. --disable-static in addition to --enable-shared.
  4636. EOF
  4637.     exit 1;
  4638. fi
  4639.  
  4640. die_license_disabled() {
  4641.     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
  4642. }
  4643.  
  4644. die_license_disabled_gpl() {
  4645.     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
  4646. }
  4647.  
  4648. die_license_disabled gpl frei0r
  4649. die_license_disabled gpl libcdio
  4650. die_license_disabled gpl libsmbclient
  4651. die_license_disabled gpl libutvideo
  4652. die_license_disabled gpl libvidstab
  4653. die_license_disabled gpl libx264
  4654. die_license_disabled gpl libx265
  4655. die_license_disabled gpl libxavs
  4656. die_license_disabled gpl libxvid
  4657. die_license_disabled gpl libzvbi
  4658. die_license_disabled gpl x11grab
  4659.  
  4660. die_license_disabled nonfree libaacplus
  4661. die_license_disabled nonfree libfaac
  4662. die_license_disabled nonfree nvenc
  4663. enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
  4664. enabled gpl && die_license_disabled_gpl nonfree openssl
  4665.  
  4666. die_license_disabled version3 libopencore_amrnb
  4667. die_license_disabled version3 libopencore_amrwb
  4668. die_license_disabled version3 libsmbclient
  4669. die_license_disabled version3 libvo_aacenc
  4670. die_license_disabled version3 libvo_amrwbenc
  4671.  
  4672. enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
  4673.  
  4674. disabled optimizations || check_cflags -fomit-frame-pointer
  4675.  
  4676. enable_weak_pic() {
  4677.     disabled pic && return
  4678.     enable pic
  4679.     add_cppflags -DPIC
  4680.     case "$target_os" in
  4681.     mingw*|cygwin*)
  4682.         ;;
  4683.     *)
  4684.         add_cflags -fPIC
  4685.         ;;
  4686.     esac
  4687.     add_asflags  -fPIC
  4688. }
  4689.  
  4690. enabled pic && enable_weak_pic
  4691.  
  4692. check_cc <<EOF || die "Symbol mangling check failed."
  4693. int ff_extern;
  4694. EOF
  4695. sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
  4696. extern_prefix=${sym%%ff_extern*}
  4697.  
  4698. check_cc <<EOF && enable_weak inline_asm
  4699. void foo(void) { __asm__ volatile ("" ::); }
  4700. EOF
  4701.  
  4702. _restrict=
  4703. for restrict_keyword in restrict __restrict__ __restrict; do
  4704.     check_cc <<EOF && _restrict=$restrict_keyword && break
  4705. void foo(char * $restrict_keyword p);
  4706. EOF
  4707. done
  4708.  
  4709. check_cc <<EOF && enable pragma_deprecated
  4710. void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
  4711. EOF
  4712.  
  4713. check_cc <<EOF && enable attribute_packed
  4714. struct { int x; } __attribute__((packed)) x;
  4715. EOF
  4716.  
  4717. check_cc <<EOF && enable attribute_may_alias
  4718. union { int x; } __attribute__((may_alias)) x;
  4719. EOF
  4720.  
  4721. check_cc <<EOF || die "endian test failed"
  4722. unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
  4723. EOF
  4724. od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
  4725.  
  4726. if ! enabled ppc64 || enabled bigendian; then
  4727.     disable vsx
  4728. fi
  4729.  
  4730. check_gas() {
  4731.     log "check_gas using '$as' as AS"
  4732.     # :vararg is used on aarch64, arm and ppc altivec
  4733.     check_as <<EOF || return 1
  4734. .macro m n, y:vararg=0
  4735. \n: .int \y
  4736. .endm
  4737. m x
  4738. EOF
  4739.     # .altmacro is only used in arm asm
  4740.     ! enabled arm || check_as <<EOF || return 1
  4741. .altmacro
  4742. EOF
  4743.     enable gnu_as
  4744.     return 0
  4745. }
  4746.  
  4747. if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
  4748.     nogas=:
  4749.     enabled_any arm aarch64 && nogas=die
  4750.     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
  4751.     as_noop=-v
  4752.  
  4753.     case $as_type in
  4754.         arm*) gaspp_as_type=armasm; as_noop=-h ;;
  4755.         gcc)  gaspp_as_type=gas ;;
  4756.         *)    gaspp_as_type=$as_type ;;
  4757.     esac
  4758.  
  4759.     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
  4760.  
  4761.     test "${as#*gas-preprocessor.pl}" != "$as" ||
  4762.     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
  4763.         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
  4764.  
  4765.     if ! check_gas ; then
  4766.         as=${gas:=$as}
  4767.         check_gas || \
  4768.             $nogas "GNU assembler not found, install/update gas-preprocessor"
  4769.     fi
  4770.  
  4771.     check_as <<EOF && enable as_func
  4772. .func test
  4773. .endfunc
  4774. EOF
  4775. fi
  4776.  
  4777. check_inline_asm inline_asm_labels '"1:\n"'
  4778.  
  4779. check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
  4780.  
  4781. if enabled aarch64; then
  4782.     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
  4783.     # internal assembler in clang 3.3 does not support this instruction
  4784.     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
  4785.     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
  4786.  
  4787.     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
  4788.  
  4789. elif enabled alpha; then
  4790.  
  4791.     check_cflags -mieee
  4792.  
  4793. elif enabled arm; then
  4794.  
  4795.     enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
  4796.  
  4797.     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
  4798. float func(float a, float b){ return a+b; }
  4799. EOF
  4800.  
  4801.     enabled thumb && check_cflags -mthumb || check_cflags -marm
  4802.  
  4803.     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
  4804.         enable vfp_args
  4805.     elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
  4806.         enable vfp_args
  4807.     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
  4808.         case "${cross_prefix:-$cc}" in
  4809.             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
  4810.             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
  4811. __asm__ (".eabi_attribute 28, 1");
  4812. int main(void) { return 0; }
  4813. EOF
  4814.         esac
  4815.         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
  4816.     fi
  4817.  
  4818.     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
  4819.     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
  4820.     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
  4821.     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
  4822.     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
  4823.     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
  4824.     enabled setend  && check_insn setend  'setend be'
  4825.  
  4826.     [ $target_os = linux ] || [ $target_os = android ] ||
  4827.         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
  4828.             $ARCH_EXT_LIST_ARM
  4829.  
  4830.     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
  4831.  
  4832.     check_as <<EOF && enable as_dn_directive
  4833. ra .dn d0.i16
  4834. .unreq ra
  4835. EOF
  4836.  
  4837.     # llvm's integrated assembler supports .object_arch from llvm 3.5
  4838.     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
  4839. .object_arch armv4
  4840. EOF
  4841.  
  4842.     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
  4843.  
  4844. elif enabled mips; then
  4845.  
  4846.     enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
  4847.     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
  4848.     enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
  4849.  
  4850.     # Enable minimum ISA based on selected options
  4851.     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
  4852.         add_cflags "-mips64r2"
  4853.         add_asflags "-mips64r2"
  4854.     elif enabled mips64 && enabled mipsfpu && disabled loongson2 && disabled loongson3; then
  4855.         add_cflags "-mips64"
  4856.         add_asflags "-mips64"
  4857.     elif enabled mipsdspr1 || enabled mipsdspr2; then
  4858.         add_cflags "-mips32r2 -mfp32"
  4859.         add_asflags "-mips32r2 -mfp32"
  4860.     elif enabled mips32r5 || enabled mips64r6; then
  4861.         check_cflags "-mfp64"
  4862.         check_ldflags "-mfp64"
  4863.     fi
  4864.  
  4865.     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
  4866.      check_ldflags "-mips32r5" &&
  4867.      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
  4868.     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
  4869.      check_ldflags "-mips64r6" &&
  4870.      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
  4871.     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
  4872.      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
  4873.     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
  4874.      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
  4875.     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
  4876.      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
  4877.     enabled msa       && check_cflags "-mmsa" && check_ldflags "-mmsa" &&
  4878.      check_inline_asm msa       '"addvi.b $w0, $w1, 1"'
  4879.  
  4880.     enabled mips32r5 && add_asflags "-mips32r5 -mfp64"
  4881.     enabled mips64r6 && add_asflags "-mips64r6 -mfp64"
  4882.     enabled msa && add_asflags "-mmsa"
  4883.  
  4884. elif enabled parisc; then
  4885.  
  4886.     if enabled gcc; then
  4887.         case $($cc -dumpversion) in
  4888.             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
  4889.         esac
  4890.     fi
  4891.  
  4892. elif enabled ppc; then
  4893.  
  4894.     enable local_aligned_8 local_aligned_16 local_aligned_32
  4895.  
  4896.     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
  4897.     check_inline_asm ibm_asm   '"add 0, 0, 0"'
  4898.     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
  4899.     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
  4900.  
  4901.     # AltiVec flags: The FSF version of GCC differs from the Apple version
  4902.     if enabled altivec; then
  4903.         check_cflags -maltivec -mabi=altivec &&
  4904.         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
  4905.         check_cflags -faltivec
  4906.  
  4907.         # check if our compiler supports Motorola AltiVec C API
  4908.         check_cc <<EOF || disable altivec
  4909. $inc_altivec_h
  4910. int main(void) {
  4911.     vector signed int v1 = (vector signed int) { 0 };
  4912.     vector signed int v2 = (vector signed int) { 1 };
  4913.     v1 = vec_add(v1, v2);
  4914.     return 0;
  4915. }
  4916. EOF
  4917.  
  4918.         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
  4919.     fi
  4920.  
  4921.     if enabled vsx; then
  4922.         check_cflags -mvsx &&
  4923.         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
  4924.     fi
  4925.  
  4926.     if enabled power8; then
  4927.         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
  4928.     fi
  4929.  
  4930. elif enabled x86; then
  4931.  
  4932.     check_builtin rdtsc    intrin.h   "__rdtsc()"
  4933.     check_builtin mm_empty mmintrin.h "_mm_empty()"
  4934.  
  4935.     enable local_aligned_8 local_aligned_16 local_aligned_32
  4936.  
  4937.     # check whether EBP is available on x86
  4938.     # As 'i' is stored on the stack, this program will crash
  4939.     # if the base pointer is used to access it because the
  4940.     # base pointer is cleared in the inline assembly code.
  4941.     check_exec_crash <<EOF && enable ebp_available
  4942. volatile int i=0;
  4943. __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
  4944. return i;
  4945. EOF
  4946.  
  4947.     # check whether EBX is available on x86
  4948.     check_inline_asm ebx_available '""::"b"(0)' &&
  4949.         check_inline_asm ebx_available '"":::"%ebx"'
  4950.  
  4951.     # check whether xmm clobbers are supported
  4952.     check_inline_asm xmm_clobbers '"":::"%xmm0"'
  4953.  
  4954.     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
  4955.         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
  4956.  
  4957.     # check whether binutils is new enough to compile SSSE3/MMXEXT
  4958.     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
  4959.     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
  4960.  
  4961.     if ! disabled_any asm mmx yasm; then
  4962.         if check_cmd $yasmexe --version; then
  4963.             enabled x86_64 && yasm_extra="-m amd64"
  4964.             yasm_debug="-g dwarf2"
  4965.         elif check_cmd nasm -v; then
  4966.             yasmexe=nasm
  4967.             yasm_debug="-g -F dwarf"
  4968.             if enabled x86_64; then
  4969.                 case "$objformat" in
  4970.                     elf)   objformat=elf64 ;;
  4971.                     win32) objformat=win64 ;;
  4972.                 esac
  4973.             fi
  4974.         fi
  4975.  
  4976.         YASMFLAGS="-f $objformat $yasm_extra"
  4977.         enabled pic               && append YASMFLAGS "-DPIC"
  4978.         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
  4979.         case "$objformat" in
  4980.             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
  4981.         esac
  4982.  
  4983.         check_yasm "movbe ecx, [5]" && enable yasm ||
  4984.             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
  4985.         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
  4986.         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
  4987.         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
  4988.         check_yasm "CPU amdnop" || disable cpunop
  4989.     fi
  4990.  
  4991.     case "$cpu" in
  4992.         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
  4993.             disable fast_clz
  4994.         ;;
  4995.     esac
  4996.  
  4997. fi
  4998.  
  4999. check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
  5000.  
  5001. check_ldflags -Wl,--as-needed
  5002. check_ldflags -Wl,-z,noexecstack
  5003.  
  5004. if check_func dlopen; then
  5005.     ldl=
  5006. elif check_func dlopen -ldl; then
  5007.     ldl=-ldl
  5008. fi
  5009.  
  5010. frei0r_filter_extralibs='$ldl'
  5011. frei0r_src_filter_extralibs='$ldl'
  5012. ladspa_filter_extralibs='$ldl'
  5013. nvenc_encoder_extralibs='$ldl'
  5014.  
  5015. if ! disabled network; then
  5016.     check_func getaddrinfo $network_extralibs
  5017.     check_func getservbyport $network_extralibs
  5018.     check_func inet_aton $network_extralibs
  5019.  
  5020.     check_type netdb.h "struct addrinfo"
  5021.     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
  5022.     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
  5023.     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
  5024.     check_type poll.h "struct pollfd"
  5025.     check_type netinet/sctp.h "struct sctp_event_subscribe"
  5026.     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
  5027.     check_type netinet/in.h "struct sockaddr_in6"
  5028.     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
  5029.     check_type "sys/types.h sys/socket.h" socklen_t
  5030.  
  5031.     # Prefer arpa/inet.h over winsock2
  5032.     if check_header arpa/inet.h ; then
  5033.         check_func closesocket
  5034.     elif check_header winsock2.h ; then
  5035.         check_func_headers winsock2.h closesocket -lws2 &&
  5036.             network_extralibs="-lws2" ||
  5037.         { check_func_headers winsock2.h closesocket -lws2_32 &&
  5038.             network_extralibs="-lws2_32"; } || disable winsock2_h network
  5039.         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
  5040.  
  5041.         check_type ws2tcpip.h socklen_t
  5042.         check_type ws2tcpip.h "struct addrinfo"
  5043.         check_type ws2tcpip.h "struct group_source_req"
  5044.         check_type ws2tcpip.h "struct ip_mreq_source"
  5045.         check_type ws2tcpip.h "struct ipv6_mreq"
  5046.         check_type winsock2.h "struct pollfd"
  5047.         check_struct winsock2.h "struct sockaddr" sa_len
  5048.         check_type ws2tcpip.h "struct sockaddr_in6"
  5049.         check_type ws2tcpip.h "struct sockaddr_storage"
  5050.     else
  5051.         disable network
  5052.     fi
  5053. fi
  5054.  
  5055. check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
  5056. check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
  5057. check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
  5058. check_builtin MemoryBarrier windows.h "MemoryBarrier()"
  5059. check_builtin sarestart signal.h "SA_RESTART"
  5060. check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
  5061. check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
  5062. check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
  5063.  
  5064. check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
  5065. check_func  ${malloc_prefix}memalign            && enable memalign
  5066. check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
  5067.  
  5068. check_func  access
  5069. check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
  5070. check_func  fcntl
  5071. check_func  fork
  5072. check_func  gethrtime
  5073. check_func  getopt
  5074. check_func  getrusage
  5075. check_func  gettimeofday
  5076. check_func  isatty
  5077. check_func  mach_absolute_time
  5078. check_func  mkstemp
  5079. check_func  mmap
  5080. check_func  mprotect
  5081. # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
  5082. check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
  5083. check_func  sched_getaffinity
  5084. check_func  setrlimit
  5085. check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
  5086. check_func  strerror_r
  5087. check_func  sysconf
  5088. check_func  sysctl
  5089. check_func  usleep
  5090.  
  5091. check_func_headers conio.h kbhit
  5092. check_func_headers io.h setmode
  5093. check_func_headers lzo/lzo1x.h lzo1x_999_compress
  5094. check_func_headers stdlib.h getenv
  5095. check_func_headers sys/stat.h lstat
  5096.  
  5097. check_func_headers windows.h CoTaskMemFree -lole32
  5098. check_func_headers windows.h GetProcessAffinityMask
  5099. check_func_headers windows.h GetProcessTimes
  5100. check_func_headers windows.h GetSystemTimeAsFileTime
  5101. check_func_headers windows.h MapViewOfFile
  5102. check_func_headers windows.h PeekNamedPipe
  5103. check_func_headers windows.h SetConsoleTextAttribute
  5104. check_func_headers windows.h SetConsoleCtrlHandler
  5105. check_func_headers windows.h Sleep
  5106. check_func_headers windows.h VirtualAlloc
  5107. check_struct windows.h "CONDITION_VARIABLE" Ptr
  5108. check_func_headers glob.h glob
  5109. enabled xlib &&
  5110.     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
  5111.  
  5112. check_header CoreServices/CoreServices.h
  5113. check_header direct.h
  5114. check_header dirent.h
  5115. check_header dlfcn.h
  5116. check_header d3d11.h
  5117. check_header dxva.h
  5118. check_header dxva2api.h -D_WIN32_WINNT=0x0600
  5119. check_header io.h
  5120. check_header libcrystalhd/libcrystalhd_if.h
  5121. check_header mach/mach_time.h
  5122. check_header malloc.h
  5123. check_header net/udplite.h
  5124. check_header poll.h
  5125. check_header sys/mman.h
  5126. check_header sys/param.h
  5127. check_header sys/resource.h
  5128. check_header sys/select.h
  5129. check_header sys/time.h
  5130. check_header sys/un.h
  5131. check_header termios.h
  5132. check_header unistd.h
  5133. check_header valgrind/valgrind.h
  5134. check_header vdpau/vdpau.h
  5135. check_header vdpau/vdpau_x11.h
  5136. check_header VideoDecodeAcceleration/VDADecoder.h
  5137. check_header VideoToolbox/VideoToolbox.h
  5138. check_header windows.h
  5139. check_header X11/extensions/XvMClib.h
  5140. check_header asm/types.h
  5141.  
  5142. check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
  5143. check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
  5144. check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
  5145.  
  5146. check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
  5147.  
  5148. check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
  5149. check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
  5150. check_type "windows.h d3d11.h" "ID3D11VideoContext"
  5151. check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
  5152.  
  5153. check_type "va/va.h" "VAPictureParameterBufferHEVC"
  5154.  
  5155. check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
  5156.  
  5157. if ! disabled w32threads && ! enabled pthreads; then
  5158.     check_func_headers "windows.h process.h" _beginthreadex &&
  5159.         enable w32threads || disable w32threads
  5160. fi
  5161.  
  5162. # check for some common methods of building with pthread support
  5163. # do this before the optional library checks as some of them require pthreads
  5164. if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
  5165.     enable pthreads
  5166.     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
  5167.         add_cflags -pthread
  5168.         add_extralibs -pthread
  5169.     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
  5170.         add_cflags -pthreads
  5171.         add_extralibs -pthreads
  5172.     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
  5173.         add_cflags -ldl -pthread
  5174.         add_extralibs -ldl -pthread
  5175.     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
  5176.         add_extralibs -lpthreadGC2
  5177.     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
  5178.         :
  5179.     elif ! check_func pthread_join && ! check_func pthread_create; then
  5180.         disable pthreads
  5181.     fi
  5182.     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
  5183. fi
  5184.  
  5185.  
  5186. if enabled pthreads; then
  5187.   check_func pthread_cancel
  5188. fi
  5189.  
  5190. disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
  5191. disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
  5192. disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
  5193.  
  5194. check_lib math.h sin -lm && LIBM="-lm"
  5195. disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
  5196.  
  5197. atan2f_args=2
  5198. copysign_args=2
  5199. ldexpf_args=2
  5200. powf_args=2
  5201.  
  5202. for func in $MATH_FUNCS; do
  5203.     eval check_mathfunc $func \${${func}_args:-1}
  5204. done
  5205.  
  5206. # these are off by default, so fail if requested and not available
  5207. enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
  5208. enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
  5209.                                 check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
  5210. enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
  5211.                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
  5212.                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
  5213. enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
  5214. enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
  5215. enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
  5216. enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
  5217. enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
  5218. enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
  5219. enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
  5220. enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
  5221. enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
  5222. enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
  5223.                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
  5224.                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
  5225. enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
  5226. enabled libdcadec         && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create &&
  5227.                              check_struct libdcadec/dca_context.h "struct dcadec_exss_info" matrix_encoding
  5228. enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
  5229. enabled libfdk_aac        && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
  5230.                                { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
  5231.                                  warn "using libfdk without pkg-config"; } }
  5232. 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"
  5233. enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
  5234. enabled fontconfig        && enable libfontconfig
  5235. enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
  5236. enabled libfreetype       && require_libfreetype
  5237. enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
  5238. enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
  5239. enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
  5240.                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
  5241.                                done || die "ERROR: libgsm not found"; }
  5242. enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
  5243. enabled libkvazaar        && require_pkg_config "kvazaar < 0.7.0" kvazaar.h kvz_api_get
  5244. enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
  5245. enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
  5246. enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
  5247. enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
  5248. enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
  5249. enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
  5250. enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
  5251. enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
  5252. enabled libopenjpeg       && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC ||
  5253.                                check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
  5254.                                check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
  5255.                                die "ERROR: libopenjpeg not found"; }
  5256. enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
  5257. enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
  5258. enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
  5259. enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
  5260. enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
  5261. enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
  5262. enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||
  5263.                                require smbclient libsmbclient.h smbc_init -lsmbclient; }
  5264. enabled libsnappy         && require snappy snappy-c.h snappy_compress -lsnappy
  5265. enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr && LIBSOXR="-lsoxr"
  5266. enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
  5267. enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
  5268. enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
  5269.     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
  5270.     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
  5271. enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
  5272. enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
  5273.                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
  5274.                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
  5275. enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
  5276. enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
  5277. enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
  5278. enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
  5279. enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
  5280. enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
  5281.  
  5282. enabled libvpx            && {
  5283.     enabled libvpx_vp8_decoder && {
  5284.         use_pkg_config "vpx >= 0.9.1" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
  5285.             check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
  5286.                 die "ERROR: libvpx decoder version must be >=0.9.1";
  5287.     }
  5288.     enabled libvpx_vp8_encoder && {
  5289.         use_pkg_config "vpx >= 0.9.7" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
  5290.             check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
  5291.                 die "ERROR: libvpx encoder version must be >=0.9.7";
  5292.     }
  5293.     enabled libvpx_vp9_decoder && {
  5294.         use_pkg_config "vpx >= 1.3.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
  5295.             check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx ||
  5296.                 disable libvpx_vp9_decoder;
  5297.     }
  5298.     enabled libvpx_vp9_encoder && {
  5299.         use_pkg_config "vpx >= 1.3.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
  5300.             check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx ||
  5301.                 disable libvpx_vp9_encoder;
  5302.     }
  5303.     if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
  5304.         die "libvpx enabled but no supported decoders found"
  5305.     fi
  5306. }
  5307.  
  5308. enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
  5309. enabled libwebp           && {
  5310.     enabled libwebp_encoder      && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
  5311.     enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
  5312. enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
  5313.                                { require libx264 x264.h x264_encoder_encode -lx264 &&
  5314.                                  warn "using libx264 without pkg-config"; } } &&
  5315.                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
  5316.                                die "ERROR: libx264 must be installed and version must be >= 0.118."; } &&
  5317.                              { check_cpp_condition x264.h "X264_MPEG2" &&
  5318.                                enable libx262; }
  5319. enabled libx265           && require_pkg_config x265 x265.h x265_api_get &&
  5320.                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
  5321.                                die "ERROR: libx265 version must be >= 57."; }
  5322. enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
  5323. enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
  5324. enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
  5325. enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
  5326. enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
  5327.                                 { ! enabled cross_compile && {
  5328.                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
  5329.                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
  5330.                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
  5331.                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
  5332.                                die "ERROR: mmal not found"; }
  5333. enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&
  5334.                              { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
  5335.                                die "ERROR: NVENC API version 4 or older is not supported"; } &&
  5336.                              { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
  5337. enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
  5338.                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
  5339.                                die "ERROR: openal not found"; } &&
  5340.                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
  5341.                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
  5342. enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
  5343.                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
  5344.                                die "ERROR: opencl not found"; } &&
  5345.                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
  5346.                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
  5347.                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
  5348. enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
  5349.                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
  5350.                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
  5351.                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
  5352.                                die "ERROR: opengl not found."
  5353.                              }
  5354. enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
  5355.                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
  5356.                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
  5357.                                die "ERROR: openssl not found"; }
  5358. enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }
  5359.  
  5360. if enabled gnutls; then
  5361.     { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
  5362.     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
  5363. fi
  5364.  
  5365. # libdc1394 check
  5366. if enabled libdc1394; then
  5367.     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
  5368.         enable libdc1394_2; } ||
  5369.     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
  5370.         enable libdc1394_1; } ||
  5371.     die "ERROR: No version of libdc1394 found "
  5372. fi
  5373. if ! disabled sdl; then
  5374.     SDL_CONFIG="${cross_prefix}sdl-config"
  5375.     if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
  5376.         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
  5377.         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
  5378.         enable sdl
  5379.     else
  5380.         if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
  5381.             sdl_cflags=$("${SDL_CONFIG}" --cflags)
  5382.             sdl_libs=$("${SDL_CONFIG}" --libs)
  5383.             check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
  5384.             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
  5385.             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
  5386.             enable sdl
  5387.         elif enabled sdl ; then
  5388.             die "ERROR: SDL not found"
  5389.         else
  5390.             disable sdl
  5391.         fi
  5392.     fi
  5393.     if test $target_os = "mingw32"; then
  5394.         sdl_libs="$sdl_libs -mconsole"
  5395.     fi
  5396. fi
  5397. enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
  5398.  
  5399. disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
  5400.     check_lib2 "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
  5401.     enable securetransport; }
  5402.  
  5403. makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
  5404. enabled makeinfo \
  5405.     && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
  5406.     && enable makeinfo_html || disable makeinfo_html
  5407. disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
  5408. perl -v            > /dev/null 2>&1 && enable perl      || disable perl
  5409. pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
  5410. rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
  5411.  
  5412. check_header linux/fb.h
  5413. check_header linux/videodev.h
  5414. check_header linux/videodev2.h
  5415. check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
  5416.  
  5417. check_header sys/videoio.h
  5418. check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
  5419.  
  5420. check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
  5421. # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
  5422. # w32api 3.12 had it defined wrong
  5423. check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
  5424.  
  5425. check_type "dshow.h" IBaseFilter
  5426.  
  5427. # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
  5428. { check_header dev/bktr/ioctl_meteor.h &&
  5429.   check_header dev/bktr/ioctl_bt848.h; } ||
  5430. { check_header machine/ioctl_meteor.h &&
  5431.   check_header machine/ioctl_bt848.h; } ||
  5432. { check_header dev/video/meteor/ioctl_meteor.h &&
  5433.   check_header dev/video/bktr/ioctl_bt848.h; } ||
  5434. check_header dev/ic/bt8xx.h
  5435.  
  5436. check_header sndio.h
  5437. if check_struct sys/soundcard.h audio_buf_info bytes; then
  5438.     enable_safe sys/soundcard.h
  5439. else
  5440.     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
  5441.     #include <sys/soundcard.h>
  5442.     audio_buf_info abc;
  5443. EOF
  5444. fi
  5445. check_header soundcard.h
  5446.  
  5447. enabled_any alsa_indev alsa_outdev &&
  5448.     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
  5449.  
  5450. enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
  5451.     check_func jack_port_get_latency_range -ljack
  5452.  
  5453. enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
  5454.  
  5455. if enabled libcdio; then
  5456.     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
  5457.     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
  5458.     die "ERROR: No usable libcdio/cdparanoia found"
  5459. fi
  5460.  
  5461. enabled xlib &&
  5462.     check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib
  5463.  
  5464. if ! disabled libxcb; then
  5465.     check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
  5466.         enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
  5467.     } && disable x11grab && enable libxcb
  5468.  
  5469. if enabled libxcb; then
  5470.     disabled libxcb_shm || {
  5471.         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
  5472.             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
  5473.         } && check_header sys/shm.h && enable libxcb_shm; }
  5474.  
  5475.     disabled libxcb_xfixes || {
  5476.         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
  5477.             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
  5478.         } && enable libxcb_xfixes; }
  5479.  
  5480.     disabled libxcb_shape || {
  5481.         check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
  5482.             enabled libxcb_shape && die "ERROR: libxcb_shape not found";
  5483.         } && enable libxcb_shape; }
  5484.  
  5485.     add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
  5486.     add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
  5487. fi
  5488. fi
  5489.  
  5490. if enabled x11grab; then
  5491.     enabled xlib || die "ERROR: Xlib not found"
  5492.     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
  5493.     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
  5494. fi
  5495.  
  5496. check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
  5497.  
  5498. enabled dxva2api_h &&
  5499.     check_cc <<EOF && enable dxva2api_cobj
  5500. #define _WIN32_WINNT 0x0600
  5501. #define COBJMACROS
  5502. #include <windows.h>
  5503. #include <d3d9.h>
  5504. #include <dxva2api.h>
  5505. int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
  5506. EOF
  5507.  
  5508. enabled vaapi &&
  5509.     check_lib va/va.h vaInitialize -lva ||
  5510.     disable vaapi
  5511.  
  5512. enabled vaapi && enabled xlib &&
  5513.     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
  5514.     enable vaapi_x11
  5515.  
  5516. enabled vdpau &&
  5517.     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
  5518.     disable vdpau
  5519.  
  5520. enabled vdpau && enabled xlib &&
  5521.     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
  5522.     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
  5523.     enable vdpau_x11
  5524.  
  5525. # Funny iconv installations are not unusual, so check it after all flags have been set
  5526. disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
  5527.  
  5528. enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
  5529.  
  5530. # add some useful compiler flags if supported
  5531. check_cflags -Wdeclaration-after-statement
  5532. check_cflags -Wall
  5533. check_cflags -Wdisabled-optimization
  5534. check_cflags -Wpointer-arith
  5535. check_cflags -Wredundant-decls
  5536. check_cflags -Wwrite-strings
  5537. check_cflags -Wtype-limits
  5538. check_cflags -Wundef
  5539. check_cflags -Wmissing-prototypes
  5540. check_cflags -Wno-pointer-to-int-cast
  5541. check_cflags -Wstrict-prototypes
  5542. check_cflags -Wempty-body
  5543. enabled extra_warnings && check_cflags -Winline
  5544.  
  5545. check_disable_warning(){
  5546.     warning_flag=-W${1#-Wno-}
  5547.     test_cflags $warning_flag && add_cflags $1
  5548. }
  5549.  
  5550. check_disable_warning -Wno-parentheses
  5551. check_disable_warning -Wno-switch
  5552. check_disable_warning -Wno-format-zero-length
  5553. check_disable_warning -Wno-pointer-sign
  5554.  
  5555. # add some linker flags
  5556. check_ldflags -Wl,--warn-common
  5557. check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
  5558. enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
  5559. enabled rpath && add_ldlibflags -Wl,-rpath,$libdir
  5560. test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
  5561.  
  5562. # add some strip flags
  5563. # -wN '..@*' is more selective than -x, but not available everywhere.
  5564. check_stripflags -wN \'..@*\' || check_stripflags -x
  5565.  
  5566. enabled neon_clobber_test &&
  5567.     check_ldflags -Wl,--wrap,avcodec_open2              \
  5568.                   -Wl,--wrap,avcodec_decode_audio4      \
  5569.                   -Wl,--wrap,avcodec_decode_video2      \
  5570.                   -Wl,--wrap,avcodec_decode_subtitle2   \
  5571.                   -Wl,--wrap,avcodec_encode_audio2      \
  5572.                   -Wl,--wrap,avcodec_encode_video2      \
  5573.                   -Wl,--wrap,avcodec_encode_subtitle    \
  5574.                   -Wl,--wrap,swr_convert                \
  5575.                   -Wl,--wrap,avresample_convert ||
  5576.     disable neon_clobber_test
  5577.  
  5578. enabled xmm_clobber_test &&
  5579.     check_ldflags -Wl,--wrap,avcodec_open2              \
  5580.                   -Wl,--wrap,avcodec_decode_audio4      \
  5581.                   -Wl,--wrap,avcodec_decode_video2      \
  5582.                   -Wl,--wrap,avcodec_decode_subtitle2   \
  5583.                   -Wl,--wrap,avcodec_encode_audio2      \
  5584.                   -Wl,--wrap,avcodec_encode_video       \
  5585.                   -Wl,--wrap,avcodec_encode_video2      \
  5586.                   -Wl,--wrap,avcodec_encode_subtitle    \
  5587.                   -Wl,--wrap,swr_convert                \
  5588.                   -Wl,--wrap,avresample_convert         \
  5589.                   -Wl,--wrap,sws_scale ||
  5590.     disable xmm_clobber_test
  5591.  
  5592. echo "X{};" > $TMPV
  5593. if test_ldflags -Wl,--version-script,$TMPV; then
  5594.     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
  5595.     check_cc <<EOF && enable symver_asm_label
  5596. void ff_foo(void) __asm__ ("av_foo@VERSION");
  5597. void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
  5598. EOF
  5599.     check_cc <<EOF && enable symver_gnu_asm
  5600. __asm__(".symver ff_foo,av_foo@VERSION");
  5601. void ff_foo(void) {}
  5602. EOF
  5603. fi
  5604.  
  5605. if [ -z "$optflags" ]; then
  5606.     if enabled small; then
  5607.         optflags=$cflags_size
  5608.     elif enabled optimizations; then
  5609.         optflags=$cflags_speed
  5610.     else
  5611.         optflags=$cflags_noopt
  5612.     fi
  5613. fi
  5614.  
  5615. check_optflags(){
  5616.     check_cflags "$@"
  5617.     enabled lto && check_ldflags "$@"
  5618. }
  5619.  
  5620.  
  5621. if enabled lto; then
  5622.     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
  5623.     check_cflags  -flto
  5624.     check_ldflags -flto $cpuflags
  5625.     disable inline_asm_direct_symbol_refs
  5626. fi
  5627.  
  5628. check_optflags $optflags
  5629. check_optflags -fno-math-errno
  5630. check_optflags -fno-signed-zeros
  5631.  
  5632. enabled ftrapv && check_cflags -ftrapv
  5633.  
  5634. check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
  5635. int x;
  5636. EOF
  5637.  
  5638.  
  5639. if enabled icc; then
  5640.     # Just warnings, no remarks
  5641.     check_cflags -w1
  5642.     # -wd: Disable following warnings
  5643.     # 144, 167, 556: -Wno-pointer-sign
  5644.     # 188: enumerated type mixed with another type
  5645.     # 1292: attribute "foo" ignored
  5646.     # 1419: external declaration in primary source file
  5647.     # 10006: ignoring unknown option -fno-signed-zeros
  5648.     # 10148: ignoring unknown option -Wno-parentheses
  5649.     # 10156: ignoring option '-W'; no argument required
  5650.     # 13200: No EMMS instruction before call to function
  5651.     # 13203: No EMMS instruction before return from function
  5652.     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
  5653.     # 11030: Warning unknown option --as-needed
  5654.     # 10156: ignoring option '-export'; no argument required
  5655.     check_ldflags -wd10156,11030
  5656.     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
  5657.     enable ebp_available
  5658.     # The test above does not test linking
  5659.     enabled lto && disable symver_asm_label
  5660.     if enabled x86_32; then
  5661.         icc_version=$($cc -dumpversion)
  5662.         test ${icc_version%%.*} -ge 11 &&
  5663.             check_cflags -falign-stack=maintain-16-byte ||
  5664.             disable aligned_stack
  5665.     fi
  5666. elif enabled ccc; then
  5667.     # disable some annoying warnings
  5668.     add_cflags -msg_disable bitnotint
  5669.     add_cflags -msg_disable mixfuncvoid
  5670.     add_cflags -msg_disable nonstandcast
  5671.     add_cflags -msg_disable unsupieee
  5672. elif enabled gcc; then
  5673.     check_optflags -fno-tree-vectorize
  5674.     check_cflags -Werror=format-security
  5675.     check_cflags -Werror=implicit-function-declaration
  5676.     check_cflags -Werror=missing-prototypes
  5677.     check_cflags -Werror=return-type
  5678.     check_cflags -Werror=vla
  5679.     check_cflags -Wformat
  5680.     check_cflags -fdiagnostics-color=auto
  5681.     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
  5682. elif enabled llvm_gcc; then
  5683.     check_cflags -mllvm -stack-alignment=16
  5684. elif enabled clang; then
  5685.     check_cflags -mllvm -stack-alignment=16
  5686.     check_cflags -Qunused-arguments
  5687.     check_cflags -Werror=implicit-function-declaration
  5688.     check_cflags -Werror=missing-prototypes
  5689.     check_cflags -Werror=return-type
  5690. elif enabled cparser; then
  5691.     add_cflags -Wno-missing-variable-declarations
  5692.     add_cflags -Wno-empty-statement
  5693. elif enabled armcc; then
  5694.     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
  5695.     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
  5696.     # 2523: use of inline assembly is deprecated
  5697.     add_cflags -W${armcc_opt},--diag_suppress=2523
  5698.     add_cflags -W${armcc_opt},--diag_suppress=1207
  5699.     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
  5700.     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
  5701.     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
  5702.     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
  5703. elif enabled tms470; then
  5704.     add_cflags -pds=824 -pds=837
  5705.     disable inline_asm
  5706. elif enabled pathscale; then
  5707.     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
  5708. elif enabled_any msvc icl; then
  5709.     enabled x86_32 && disable aligned_stack
  5710.     enabled_all x86_32 debug && add_cflags -Oy-
  5711.     enabled debug && add_ldflags -debug
  5712.     enable pragma_deprecated
  5713.     if enabled icl; then
  5714.         # -Qansi-alias is basically -fstrict-aliasing, but does not work
  5715.         # (correctly) on icl 13.x.
  5716.         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
  5717.             add_cflags -Qansi-alias
  5718.         # Some inline asm is not compilable in debug
  5719.         if enabled debug; then
  5720.             disable ebp_available
  5721.             disable ebx_available
  5722.         fi
  5723.     fi
  5724.     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
  5725.     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
  5726.     # The CRT headers contain __declspec(restrict) in a few places, but if redefining
  5727.     # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
  5728.     # (as it ends up if the restrict redefine is done before including stdlib.h), while
  5729.     # MSVC 2013 and newer can handle it fine.
  5730.     # If this declspec fails, force including stdlib.h before the restrict redefinition
  5731.     # happens in config.h.
  5732.     if [ $_restrict != restrict ]; then
  5733.         check_cc <<EOF || add_cflags -FIstdlib.h
  5734. __declspec($_restrict) void* foo(int);
  5735. EOF
  5736.     fi
  5737.     check_func strtoll || add_cflags -Dstrtoll=_strtoi64
  5738. fi
  5739.  
  5740. for pfx in "" host_; do
  5741.     varname=${pfx%_}cc_type
  5742.     eval "type=\$$varname"
  5743.     if [ $type = "msvc" ]; then
  5744.         check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
  5745. static inline int foo(int a) { return a; }
  5746. EOF
  5747.     fi
  5748. done
  5749.  
  5750. case $as_type in
  5751.     clang)
  5752.         add_asflags -Qunused-arguments
  5753.     ;;
  5754. esac
  5755.  
  5756. case $ld_type in
  5757.     clang)
  5758.         check_ldflags -Qunused-arguments
  5759.     ;;
  5760. esac
  5761.  
  5762. case $target_os in
  5763.     osf1)
  5764.         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
  5765.     ;;
  5766.     plan9)
  5767.         add_cppflags -Dmain=plan9_main
  5768.     ;;
  5769. esac
  5770.  
  5771. enable frame_thread_encoder
  5772.  
  5773. enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
  5774.  
  5775. check_deps $CONFIG_LIST       \
  5776.            $CONFIG_EXTRA      \
  5777.            $HAVE_LIST         \
  5778.            $ALL_COMPONENTS    \
  5779.  
  5780. 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"
  5781.  
  5782.  
  5783. if test $target_os = "haiku"; then
  5784.     disable memalign
  5785.     disable posix_memalign
  5786. fi
  5787.  
  5788. enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
  5789.     prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
  5790.     enable dxva2_lib
  5791.  
  5792. ! enabled_any memalign posix_memalign aligned_malloc &&
  5793.     enabled simd_align_16 && enable memalign_hack
  5794.  
  5795. # add_dep lib dep
  5796. # -> enable ${lib}_deps_${dep}
  5797. # -> add $dep to ${lib}_deps only once
  5798. add_dep() {
  5799.     lib=$1
  5800.     dep=$2
  5801.     enabled "${lib}_deps_${dep}" && return 0
  5802.     enable  "${lib}_deps_${dep}"
  5803.     prepend "${lib}_deps" $dep
  5804. }
  5805.  
  5806. # merge deps lib components
  5807. # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
  5808. merge_deps() {
  5809.     lib=$1
  5810.     shift
  5811.     for comp in $*; do
  5812.         enabled $comp || continue
  5813.         eval "dep=\"\$${comp}_deps\""
  5814.         for d in $dep; do
  5815.             add_dep $lib $d
  5816.         done
  5817.     done
  5818. }
  5819.  
  5820. merge_deps libavfilter $FILTER_LIST
  5821.  
  5822. map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
  5823.  
  5824. for thread in $THREADS_LIST; do
  5825.     if enabled $thread; then
  5826.         test -n "$thread_type" &&
  5827.             die "ERROR: Only one thread type must be selected." ||
  5828.             thread_type="$thread"
  5829.     fi
  5830. done
  5831.  
  5832. enabled zlib && add_cppflags -DZLIB_CONST
  5833.  
  5834. # conditional library dependencies, in linking order
  5835. enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
  5836. enabled aresample_filter    && prepend avfilter_deps "swresample"
  5837. enabled asyncts_filter      && prepend avfilter_deps "avresample"
  5838. enabled atempo_filter       && prepend avfilter_deps "avcodec"
  5839. enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
  5840. enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
  5841. enabled elbg_filter         && prepend avfilter_deps "avcodec"
  5842. enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
  5843. enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
  5844. enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
  5845. enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
  5846. enabled pan_filter          && prepend avfilter_deps "swresample"
  5847. enabled pp_filter           && prepend avfilter_deps "postproc"
  5848. enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
  5849. enabled resample_filter && prepend avfilter_deps "avresample"
  5850. enabled sab_filter          && prepend avfilter_deps "swscale"
  5851. enabled scale_filter    && prepend avfilter_deps "swscale"
  5852. enabled scale2ref_filter    && prepend avfilter_deps "swscale"
  5853. enabled showspectrum_filter && prepend avfilter_deps "avcodec"
  5854. enabled smartblur_filter    && prepend avfilter_deps "swscale"
  5855. enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
  5856. enabled uspp_filter         && prepend avfilter_deps "avcodec"
  5857.  
  5858. enabled lavfi_indev         && prepend avdevice_deps "avfilter"
  5859.  
  5860. enabled opus_decoder    && prepend avcodec_deps "swresample"
  5861.  
  5862. expand_deps(){
  5863.     lib_deps=${1}_deps
  5864.     eval "deps=\$$lib_deps"
  5865.     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
  5866.     unique $lib_deps
  5867. }
  5868.  
  5869. #we have to remove gpl from the deps here as some code assumes all lib deps are libs
  5870. postproc_deps="$(filter_out 'gpl' $postproc_deps)"
  5871.  
  5872. map 'expand_deps $v' $LIBRARY_LIST
  5873.  
  5874. echo "install prefix            $prefix"
  5875. echo "source path               $source_path"
  5876. echo "C compiler                $cc"
  5877. echo "C library                 $libc_type"
  5878. if test "$host_cc" != "$cc"; then
  5879.     echo "host C compiler           $host_cc"
  5880.     echo "host C library            $host_libc_type"
  5881. fi
  5882. echo "ARCH                      $arch ($cpu)"
  5883. if test "$build_suffix" != ""; then
  5884.     echo "build suffix              $build_suffix"
  5885. fi
  5886. if test "$progs_suffix" != ""; then
  5887.     echo "progs suffix              $progs_suffix"
  5888. fi
  5889. if test "$extra_version" != ""; then
  5890.     echo "version string suffix     $extra_version"
  5891. fi
  5892. echo "big-endian                ${bigendian-no}"
  5893. echo "runtime cpu detection     ${runtime_cpudetect-no}"
  5894. if enabled x86; then
  5895.     echo "${yasmexe}                      ${yasm-no}"
  5896.     echo "MMX enabled               ${mmx-no}"
  5897.     echo "MMXEXT enabled            ${mmxext-no}"
  5898.     echo "3DNow! enabled            ${amd3dnow-no}"
  5899.     echo "3DNow! extended enabled   ${amd3dnowext-no}"
  5900.     echo "SSE enabled               ${sse-no}"
  5901.     echo "SSSE3 enabled             ${ssse3-no}"
  5902.     echo "AVX enabled               ${avx-no}"
  5903.     echo "XOP enabled               ${xop-no}"
  5904.     echo "FMA3 enabled              ${fma3-no}"
  5905.     echo "FMA4 enabled              ${fma4-no}"
  5906.     echo "i686 features enabled     ${i686-no}"
  5907.     echo "CMOV is fast              ${fast_cmov-no}"
  5908.     echo "EBX available             ${ebx_available-no}"
  5909.     echo "EBP available             ${ebp_available-no}"
  5910. fi
  5911. if enabled aarch64; then
  5912.     echo "NEON enabled              ${neon-no}"
  5913.     echo "VFP enabled               ${vfp-no}"
  5914. fi
  5915. if enabled arm; then
  5916.     echo "ARMv5TE enabled           ${armv5te-no}"
  5917.     echo "ARMv6 enabled             ${armv6-no}"
  5918.     echo "ARMv6T2 enabled           ${armv6t2-no}"
  5919.     echo "VFP enabled               ${vfp-no}"
  5920.     echo "NEON enabled              ${neon-no}"
  5921.     echo "THUMB enabled             ${thumb-no}"
  5922. fi
  5923. if enabled mips; then
  5924.     echo "MIPS FPU enabled          ${mipsfpu-no}"
  5925.     echo "MIPS32R5 enabled          ${mips32r5-no}"
  5926.     echo "MIPS64R6 enabled          ${mips64r6-no}"
  5927.     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
  5928.     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
  5929.     echo "MIPS MSA enabled          ${msa-no}"
  5930.     echo "LOONGSON MMI enabled      ${mmi-no}"
  5931. fi
  5932. if enabled ppc; then
  5933.     echo "AltiVec enabled           ${altivec-no}"
  5934.     echo "VSX enabled               ${vsx-no}"
  5935.     echo "POWER8 enabled            ${power8-no}"
  5936.     echo "PPC 4xx optimizations     ${ppc4xx-no}"
  5937.     echo "dcbzl available           ${dcbzl-no}"
  5938. fi
  5939. echo "debug symbols             ${debug-no}"
  5940. echo "strip symbols             ${stripping-no}"
  5941. echo "optimize for size         ${small-no}"
  5942. echo "optimizations             ${optimizations-no}"
  5943. echo "static                    ${static-no}"
  5944. echo "shared                    ${shared-no}"
  5945. echo "postprocessing support    ${postproc-no}"
  5946. echo "new filter support        ${avfilter-no}"
  5947. echo "network support           ${network-no}"
  5948. echo "threading support         ${thread_type-no}"
  5949. echo "safe bitstream reader     ${safe_bitstream_reader-no}"
  5950. echo "SDL support               ${sdl-no}"
  5951. echo "opencl enabled            ${opencl-no}"
  5952. echo "texi2html enabled         ${texi2html-no}"
  5953. echo "perl enabled              ${perl-no}"
  5954. echo "pod2man enabled           ${pod2man-no}"
  5955. echo "makeinfo enabled          ${makeinfo-no}"
  5956. echo "makeinfo supports HTML    ${makeinfo_html-no}"
  5957. test -n "$random_seed" &&
  5958.     echo "random seed               ${random_seed}"
  5959. echo
  5960.  
  5961. echo "Enabled programs:"
  5962. print_enabled '' $PROGRAM_LIST | print_3_columns
  5963. echo
  5964.  
  5965. echo "External libraries:"
  5966. print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
  5967. echo
  5968.  
  5969. for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
  5970.     echo "Enabled ${type}s:"
  5971.     eval list=\$$(toupper $type)_LIST
  5972.     print_enabled '_*' $list | print_3_columns
  5973.     echo
  5974. done
  5975.  
  5976. license="LGPL version 2.1 or later"
  5977. if enabled nonfree; then
  5978.     license="nonfree and unredistributable"
  5979. elif enabled gplv3; then
  5980.     license="GPL version 3 or later"
  5981. elif enabled lgplv3; then
  5982.     license="LGPL version 3 or later"
  5983. elif enabled gpl; then
  5984.     license="GPL version 2 or later"
  5985. fi
  5986.  
  5987. echo "License: $license"
  5988.  
  5989. echo "Creating config.mak, config.h, and doc/config.texi..."
  5990.  
  5991. test -e Makefile || echo "include $source_path/Makefile" > Makefile
  5992.  
  5993. enabled stripping || strip="echo skipping strip"
  5994.  
  5995. config_files="$TMPH config.mak doc/config.texi"
  5996.  
  5997. cat > config.mak <<EOF
  5998. # Automatically generated by configure - do not modify!
  5999. ifndef FFMPEG_CONFIG_MAK
  6000. FFMPEG_CONFIG_MAK=1
  6001. FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
  6002. prefix=$prefix
  6003. LIBDIR=\$(DESTDIR)$libdir
  6004. SHLIBDIR=\$(DESTDIR)$shlibdir
  6005. INCDIR=\$(DESTDIR)$incdir
  6006. BINDIR=\$(DESTDIR)$bindir
  6007. DATADIR=\$(DESTDIR)$datadir
  6008. DOCDIR=\$(DESTDIR)$docdir
  6009. MANDIR=\$(DESTDIR)$mandir
  6010. PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
  6011. SRC_PATH=$source_path
  6012. ifndef MAIN_MAKEFILE
  6013. SRC_PATH:=\$(SRC_PATH:.%=..%)
  6014. endif
  6015. CC_IDENT=$cc_ident
  6016. ARCH=$arch
  6017. INTRINSICS=$intrinsics
  6018. CC=$cc
  6019. CXX=$cxx
  6020. AS=$as
  6021. LD=$ld
  6022. DEPCC=$dep_cc
  6023. DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
  6024. DEPAS=$as
  6025. DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
  6026. YASM=$yasmexe
  6027. DEPYASM=$yasmexe
  6028. AR=$ar
  6029. ARFLAGS=$arflags
  6030. AR_O=$ar_o
  6031. RANLIB=$ranlib
  6032. STRIP=$strip
  6033. CP=cp -p
  6034. LN_S=$ln_s
  6035. CPPFLAGS=$CPPFLAGS
  6036. CFLAGS=$CFLAGS
  6037. CXXFLAGS=$CXXFLAGS
  6038. ASFLAGS=$ASFLAGS
  6039. AS_C=$AS_C
  6040. AS_O=$AS_O
  6041. CC_C=$CC_C
  6042. CC_E=$CC_E
  6043. CC_O=$CC_O
  6044. CXX_C=$CXX_C
  6045. CXX_O=$CXX_O
  6046. LD_O=$LD_O
  6047. LD_LIB=$LD_LIB
  6048. LD_PATH=$LD_PATH
  6049. DLLTOOL=$dlltool
  6050. WINDRES=$windres
  6051. DEPWINDRES=$dep_cc
  6052. DOXYGEN=$doxygen
  6053. LDFLAGS=$LDFLAGS
  6054. LDEXEFLAGS=$LDEXEFLAGS
  6055. LDLIBFLAGS=$LDLIBFLAGS
  6056. SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
  6057. ASMSTRIPFLAGS=$ASMSTRIPFLAGS
  6058. YASMFLAGS=$YASMFLAGS
  6059. BUILDSUF=$build_suffix
  6060. PROGSSUF=$progs_suffix
  6061. FULLNAME=$FULLNAME
  6062. LIBPREF=$LIBPREF
  6063. LIBSUF=$LIBSUF
  6064. LIBNAME=$LIBNAME
  6065. SLIBPREF=$SLIBPREF
  6066. SLIBSUF=$SLIBSUF
  6067. EXESUF=$EXESUF
  6068. EXTRA_VERSION=$extra_version
  6069. CCDEP=$CCDEP
  6070. CXXDEP=$CXXDEP
  6071. CCDEP_FLAGS=$CCDEP_FLAGS
  6072. ASDEP=$ASDEP
  6073. ASDEP_FLAGS=$ASDEP_FLAGS
  6074. CC_DEPFLAGS=$CC_DEPFLAGS
  6075. AS_DEPFLAGS=$AS_DEPFLAGS
  6076. HOSTCC=$host_cc
  6077. HOSTLD=$host_ld
  6078. HOSTCFLAGS=$host_cflags
  6079. HOSTCPPFLAGS=$host_cppflags
  6080. HOSTEXESUF=$HOSTEXESUF
  6081. HOSTLDFLAGS=$host_ldflags
  6082. HOSTLIBS=$host_libs
  6083. DEPHOSTCC=$host_cc
  6084. DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
  6085. HOSTCCDEP=$HOSTCCDEP
  6086. HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
  6087. HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
  6088. HOSTCC_C=$HOSTCC_C
  6089. HOSTCC_O=$HOSTCC_O
  6090. HOSTLD_O=$HOSTLD_O
  6091. TARGET_EXEC=$target_exec $target_exec_args
  6092. TARGET_PATH=$target_path
  6093. TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
  6094. CFLAGS-ffplay=$sdl_cflags
  6095. ZLIB=$($ldflags_filter -lz)
  6096. LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
  6097. EXTRALIBS=$extralibs
  6098. COMPAT_OBJS=$compat_objs
  6099. EXEOBJS=$exeobjs
  6100. INSTALL=$install
  6101. LIBTARGET=${LIBTARGET}
  6102. SLIBNAME=${SLIBNAME}
  6103. SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
  6104. SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
  6105. SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
  6106. SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
  6107. SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
  6108. SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
  6109. SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
  6110. SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
  6111. SAMPLES:=${samples:-\$(FATE_SAMPLES)}
  6112. NOREDZONE_FLAGS=$noredzone_flags
  6113. EOF
  6114.  
  6115. get_version(){
  6116.     lcname=lib${1}
  6117.     name=$(toupper $lcname)
  6118.     file=$source_path/$lcname/version.h
  6119.     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
  6120.     enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
  6121.     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
  6122.     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
  6123.     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
  6124.     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
  6125. }
  6126.  
  6127. map 'get_version $v' $LIBRARY_LIST
  6128.  
  6129. map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
  6130.  
  6131. print_program_libs(){
  6132.     eval "program_libs=\$${1}_libs"
  6133.     eval echo "LIBS-${1}=${program_libs}" >> config.mak
  6134. }
  6135.  
  6136. map 'print_program_libs $v' $PROGRAM_LIST
  6137.  
  6138. cat > $TMPH <<EOF
  6139. /* Automatically generated by configure - do not modify! */
  6140. #ifndef FFMPEG_CONFIG_H
  6141. #define FFMPEG_CONFIG_H
  6142. #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
  6143. #define FFMPEG_LICENSE "$(c_escape $license)"
  6144. #define CONFIG_THIS_YEAR 2016
  6145. #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
  6146. #define AVCONV_DATADIR "$(eval c_escape $datadir)"
  6147. #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
  6148. #define av_restrict $_restrict
  6149. #define EXTERN_PREFIX "${extern_prefix}"
  6150. #define EXTERN_ASM ${extern_prefix}
  6151. #define BUILDSUF "$build_suffix"
  6152. #define SLIBSUF "$SLIBSUF"
  6153. #define HAVE_MMX2 HAVE_MMXEXT
  6154. #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
  6155. EOF
  6156.  
  6157. test -n "$assert_level" &&
  6158.     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
  6159.  
  6160. test -n "$malloc_prefix" &&
  6161.     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
  6162.  
  6163. if enabled yasm; then
  6164.     append config_files $TMPASM
  6165.     printf '' >$TMPASM
  6166. fi
  6167.  
  6168. enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
  6169.  
  6170.  
  6171. mkdir -p doc
  6172. mkdir -p tests
  6173. mkdir -p tests/api
  6174. echo "@c auto-generated by configure" > doc/config.texi
  6175.  
  6176. print_config ARCH_   "$config_files" $ARCH_LIST
  6177. print_config HAVE_   "$config_files" $HAVE_LIST
  6178. print_config CONFIG_ "$config_files" $CONFIG_LIST       \
  6179.                                      $CONFIG_EXTRA      \
  6180.                                      $ALL_COMPONENTS    \
  6181.  
  6182. echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
  6183. echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
  6184.  
  6185. # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
  6186. cp_if_changed $TMPH config.h
  6187. touch .config
  6188.  
  6189. enabled yasm && cp_if_changed $TMPASM config.asm
  6190.  
  6191. cat > $TMPH <<EOF
  6192. /* Generated by ffconf */
  6193. #ifndef AVUTIL_AVCONFIG_H
  6194. #define AVUTIL_AVCONFIG_H
  6195. EOF
  6196.  
  6197. print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
  6198.  
  6199. echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
  6200.  
  6201. cp_if_changed $TMPH libavutil/avconfig.h
  6202.  
  6203. if test -n "$WARNINGS"; then
  6204.     printf "\n$WARNINGS"
  6205.     enabled fatal_warnings && exit 1
  6206. fi
  6207.  
  6208. # build pkg-config files
  6209.  
  6210. lib_version(){
  6211.     eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
  6212. }
  6213.  
  6214. pkgconfig_generate(){
  6215.     name=$1
  6216.     shortname=${name#lib}${build_suffix}
  6217.     comment=$2
  6218.     version=$3
  6219.     libs=$4
  6220.     requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
  6221.     requires=${requires%, }
  6222.     enabled ${name#lib} || return 0
  6223.     mkdir -p $name
  6224.     cat <<EOF > $name/$name${build_suffix}.pc
  6225. prefix=$prefix
  6226. exec_prefix=\${prefix}
  6227. libdir=$libdir
  6228. includedir=$incdir
  6229.  
  6230. Name: $name
  6231. Description: $comment
  6232. Version: $version
  6233. Requires: $(enabled shared || echo $requires)
  6234. Requires.private: $(enabled shared && echo $requires)
  6235. Conflicts:
  6236. Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
  6237. Libs.private: $(enabled shared && echo $libs)
  6238. Cflags: -I\${includedir}
  6239. EOF
  6240.  
  6241. mkdir -p doc/examples/pc-uninstalled
  6242. includedir=${source_path}
  6243. [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
  6244.     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
  6245. prefix=
  6246. exec_prefix=
  6247. libdir=\${pcfiledir}/../../../$name
  6248. includedir=${includedir}
  6249.  
  6250. Name: $name
  6251. Description: $comment
  6252. Version: $version
  6253. Requires: $requires
  6254. Conflicts:
  6255. Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
  6256. Cflags: -I\${includedir}
  6257. EOF
  6258. }
  6259.  
  6260. pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
  6261. pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
  6262. pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
  6263. pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
  6264. pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
  6265. pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
  6266. pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
  6267. pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
  6268. pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM $LIBSOXR"
  6269.