Skip to content
Snippets Groups Projects
configure 161 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Libav configure script
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    # Copyright (c) 2000-2002 Fabrice Bellard
    # Copyright (c) 2005-2008 Diego Biurrun
    # Copyright (c) 2005-2008 Mans Rullgard
    
    # Prevent locale nonsense from breaking basic text processing.
    
    # make sure we are running under a compatible shell
    
    # try to make this part work with most shells
    
    try_exec(){
    
        echo "Trying shell $1"
    
        type "$1" > /dev/null 2>&1 && exec "$@"
    
    unset foo
    
    (: ${foo%%bar}) 2> /dev/null
    
    (: ${foo?}) 2> /dev/null
    
    E2="$?"
    
    if test "$E1" != 0 || test "$E2" = 0; then
        echo "Broken shell detected.  Trying alternatives."
    
        export FF_CONF_EXEC
        if test "0$FF_CONF_EXEC" -lt 1; then
            FF_CONF_EXEC=1
            try_exec bash "$0" "$@"
        fi
        if test "0$FF_CONF_EXEC" -lt 2; then
            FF_CONF_EXEC=2
            try_exec ksh "$0" "$@"
        fi
        if test "0$FF_CONF_EXEC" -lt 3; then
            FF_CONF_EXEC=3
            try_exec /usr/xpg4/bin/sh "$0" "$@"
    
        fi
        echo "No compatible shell script interpreter found."
    
    Diego Biurrun's avatar
    Diego Biurrun committed
        echo "This configure script requires a POSIX-compatible shell"
    
        echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
    
        echo "Instead, install a working POSIX-compatible shell."
    
        echo "Disabling this configure test will create a broken Libav."
    
        if test "$BASH_VERSION" = '2.04.0(1)-release'; then
            echo "This bash version ($BASH_VERSION) is broken on your platform."
            echo "Upgrade to a later version if available."
        fi
    
    test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
    
    
        cat <<EOF
    
    Usage: configure [options]
    Options: [defaults in brackets after descriptions]
    
    
    Help options:
    
      --help                   print this message
    
      --list-decoders          show all available decoders
      --list-encoders          show all available encoders
      --list-hwaccels          show all available hardware accelerators
      --list-demuxers          show all available demuxers
      --list-muxers            show all available muxers
      --list-parsers           show all available parsers
      --list-protocols         show all available protocols
      --list-bsfs              show all available bitstream filters
      --list-indevs            show all available input devices
      --list-outdevs           show all available output devices
      --list-filters           show all available filters
    
    Standard options:
    
      --logfile=FILE           log tests and output to FILE [config.log]
    
      --disable-logging        do not log configure debug information
      --prefix=PREFIX          install in PREFIX [$prefix]
      --bindir=DIR             install binaries in DIR [PREFIX/bin]
    
      --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
    
      --docdir=DIR             install documentation in DIR [PREFIX/share/doc/libav]
    
      --libdir=DIR             install libs in DIR [PREFIX/lib]
      --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
      --incdir=DIR             install includes in DIR [PREFIX/include]
      --mandir=DIR             install man page in DIR [PREFIX/share/man]
    
      --enable-rpath           use rpath when linking programs [USE WITH CARE]
    
    Licensing options:
    
      --enable-gpl             allow use of GPL code, the resulting libs
                               and binaries will be under GPL [no]
      --enable-version3        upgrade (L)GPL to version 3 [no]
      --enable-nonfree         allow use of nonfree code, the resulting libs
                               and binaries will be unredistributable [no]
    
    
    Configuration options:
      --disable-static         do not build static libraries [no]
      --enable-shared          build shared libraries [no]
      --enable-small           optimize for size instead of speed
      --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
      --enable-gray            enable full grayscale support (slower color)
      --disable-swscale-alpha  disable alpha channel support in swscale
    
      --disable-all            disable building components, libraries and programs
    
    Program options:
      --disable-programs       do not build command line programs
    
      --disable-avconv         disable avconv build
    
    Anton Khirnov's avatar
    Anton Khirnov committed
      --disable-avplay         disable avplay build
    
      --disable-avprobe        disable avprobe build
    
    Anton Khirnov's avatar
    Anton Khirnov committed
      --disable-avserver       deprecated, does nothing
    
    
    Component options:
      --disable-doc            do not build documentation
    
      --disable-avdevice       disable libavdevice build
      --disable-avcodec        disable libavcodec build
      --disable-avformat       disable libavformat build
    
      --disable-avutil         disable libavutil build
    
      --disable-swscale        disable libswscale build
    
      --disable-avfilter       disable video filter support [no]
    
    Justin Ruggles's avatar
    Justin Ruggles committed
      --disable-avresample     disable libavresample build [no]
    
      --disable-pthreads       disable pthreads [auto]
    
      --disable-w32threads     disable Win32 threads [auto]
    
      --disable-network        disable network support [no]
    
      --disable-dct            disable DCT code
    
      --disable-error-resilience disable error resilience code
    
      --disable-lsp            disable LSP code
    
      --disable-lzo            disable LZO decoder code
    
      --disable-mdct           disable MDCT code
      --disable-rdft           disable RDFT code
    
      --disable-fft            disable FFT code
    
      --disable-faan           disable floating point AAN (I)DCT code
    
    Individual component options:
    
      --disable-everything     disable all components listed below
    
      --disable-encoder=NAME   disable encoder NAME
      --enable-encoder=NAME    enable encoder NAME
      --disable-encoders       disable all encoders
      --disable-decoder=NAME   disable decoder NAME
      --enable-decoder=NAME    enable decoder NAME
      --disable-decoders       disable all decoders
      --disable-hwaccel=NAME   disable hwaccel NAME
      --enable-hwaccel=NAME    enable hwaccel NAME
      --disable-hwaccels       disable all hwaccels
      --disable-muxer=NAME     disable muxer NAME
      --enable-muxer=NAME      enable muxer NAME
      --disable-muxers         disable all muxers
      --disable-demuxer=NAME   disable demuxer NAME
      --enable-demuxer=NAME    enable demuxer NAME
      --disable-demuxers       disable all demuxers
      --enable-parser=NAME     enable parser NAME
      --disable-parser=NAME    disable parser NAME
      --disable-parsers        disable all parsers
      --enable-bsf=NAME        enable bitstream filter NAME
      --disable-bsf=NAME       disable bitstream filter NAME
      --disable-bsfs           disable all bitstream filters
      --enable-protocol=NAME   enable protocol NAME
      --disable-protocol=NAME  disable protocol NAME
      --disable-protocols      disable all protocols
    
      --enable-indev=NAME      enable input device NAME
    
      --disable-indev=NAME     disable input device NAME
      --disable-indevs         disable input devices
    
      --enable-outdev=NAME     enable output device NAME
      --disable-outdev=NAME    disable output device NAME
    
      --disable-outdevs        disable output devices
      --disable-devices        disable all devices
      --enable-filter=NAME     enable filter NAME
      --disable-filter=NAME    disable filter NAME
      --disable-filters        disable all filters
    
    External library support:
    
    
      Using any of the following switches will allow Libav to link to the
      corresponding external library. All the components depending on that library
      will become enabled, if all their other dependencies are met and they are not
      explicitly disabled. E.g. --enable-libwavpack will enable linking to
      libwavpack and allow the libwavpack encoder to be built, unless it is
      specifically disabled with --disable-encoder=libwavpack.
    
      Note that only the system libraries are auto-detected. All the other external
      libraries must be explicitly enabled.
    
      Also note that the following help text describes the purpose of the libraries
      themselves, not all their features will necessarily be usable by Libav.
    
      --enable-avisynth          video frameserver
      --enable-bzlib             bzip2 compression [autodetect]
      --enable-frei0r            video filtering plugins
      --enable-gnutls            crypto
      --enable-libbs2b           Bauer stereophonic-to-binaural DSP
      --enable-libcdio           audio CD input
      --enable-libdc1394         IEEE 1394/Firewire camera input
      --enable-libdcadec         DCA audio decoding
      --enable-libfaac           AAC audio encoding
      --enable-libfdk-aac        AAC audio encoding/decoding
      --enable-libfontconfig     font configuration and management
      --enable-libfreetype       font rendering
      --enable-libgsm            GSM audio encoding/decoding
      --enable-libilbc           ILBC audio encoding/decoding
      --enable-libkvazaar        HEVC video encoding
      --enable-libmp3lame        MP3 audio encoding
      --enable-libopencore-amrnb AMR-NB audio encoding/decoding
      --enable-libopencore-amrwb AMR-WB audio decoding
      --enable-libopencv         computer vision
      --enable-libopenh264       H.264 video encoding/decoding
      --enable-libopenjpeg       JPEG 2000 image encoding/decoding
      --enable-libopus           Opus audio encoding/decoding
      --enable-libpulse          Pulseaudio sound server
      --enable-librtmp           RTMP streaming
      --enable-libschroedinger   Dirac video encoding/decoding
      --enable-libsnappy         snappy compression
      --enable-libspeex          Speex audio encoding/decoding
      --enable-libtheora         Theora video encoding/decoding
      --enable-libtwolame        MP2 audio encoding
      --enable-libvo-aacenc      AAC audio encoding
      --enable-libvo-amrwbenc    AMR-WB audio encoding
      --enable-libvorbis         Vorbis audio encoding/decoding
      --enable-libvpx            VP* video encoding/decoding
      --enable-libwavpack        Wavpack audio encoding/decoding
      --enable-libwebp           WebP image encoding/decoding
      --enable-libx264           H.264 video encoding
      --enable-libx265           HEVC video encoding
      --enable-libxavs           Chinese AVS video encoding
      --enable-libxcb            X window system protocol communication
      --enable-libxcb-shm        X11 shm communication [auto]
      --enable-libxcb-xfixes     X11 mouse rendering [auto]
      --enable-libxvid           MPEG-4 ASP video encoding
      --enable-openssl           crypto
      --enable-x11grab           X11 grabbing through xlib (legacy, use xcb instead)
      --enable-zlib              compression [autodetect]
    
      The following libraries provide various hardware acceleration features:
      --enable-cuda    Nvidia CUDA (dynamically linked)
      --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
      --enable-dxva2   Microsoft DirectX 9 video acceleration [auto]
      --enable-libmfx  Intel MediaSDK (AKA Quick Sync Video)
      --enable-libnpp  Nvidia CUDA processing
      --enable-mmal    Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
      --enable-nvenc   Nvidia video encoding
      --enable-omx     OpenMAX IL
      --enable-omx-rpi OpenMAX IL for Raspberry Pi
      --enable-vaapi   Video Acceleration API (mainly Unix/Intel)
      --enable-vda     Apple Video Decode Acceleration [auto]
      --enable-vdpau   Nvidia Video Decode and Presentation API for Unix [auto]
    
    
    Toolchain options:
      --arch=ARCH              select architecture [$arch]
      --cpu=CPU                select the minimum required CPU (affects
                               instruction selection, may crash on older CPUs)
    
      --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
      --enable-cross-compile   assume a cross-compiler is used
      --sysroot=PATH           root of cross-build tree
      --sysinclude=PATH        location of cross-build system headers
      --target-os=OS           compiler targets OS [$target_os]
      --target-exec=CMD        command to run executables on target
      --target-path=DIR        path to view of build directory on target
    
      --target-samples=DIR     path to samples directory on target
    
      --toolchain=NAME         set tool defaults according to NAME
    
      --nm=NM                  use nm tool
    
      --ar=AR                  use archive tool AR [$ar_default]
    
      --as=AS                  use assembler AS [$as_default]
      --cc=CC                  use C compiler CC [$cc_default]
    
    Luca Barbato's avatar
    Luca Barbato committed
      --objcc=OCC              use ObjC compiler OCC [$cc_default]
    
      --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
    
      --ld=LD                  use linker LD
    
      --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
    
      --pkg-config-flags=FLAGS pass additional flags to pkgconf []
    
      --host-cc=HOSTCC         use host C compiler HOSTCC
      --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
    
      --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
    
      --host-ld=HOSTLD         use host linker HOSTLD
    
      --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
      --host-libs=HLIBS        use libs HLIBS when linking for host
    
      --host-os=OS             compiler host OS [$target_os]
    
      --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
    
    Luca Barbato's avatar
    Luca Barbato committed
      --extra-objcflags=FLAGS  add FLAGS to OBJCFLAGS [$CFLAGS]
    
      --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
    
      --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
    
      --extra-libs=ELIBS       add ELIBS [$ELIBS]
      --extra-version=STRING   version string suffix []
    
      --optflags=OPTFLAGS      override optimization-related compiler flags
    
      --build-suffix=SUFFIX    library name suffix []
    
      --enable-pic             build position-independent code
    
      --enable-thumb           compile for Thumb instruction set
    
      --enable-lto             use link-time optimization
    
      --env="ENV=override"     override the environment variables
    
    
    Advanced options (experts only):
      --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
    
      --custom-allocator=NAME  use a supported custom allocator
    
      --disable-symver         disable symbol versioning
      --enable-hardcoded-tables use hardcoded tables instead of runtime generation
      --disable-safe-bitstream-reader
                               disable buffer boundary checking in bitreaders
                               (faster, but may crash)
      --enable-memalign-hack   emulate memalign, interferes with memory debuggers
    
      --enable-sram            allow use of on-chip SRAM
    
    
    Optimization options (experts only):
    
      --disable-asm            disable all assembly optimizations
    
      --disable-altivec        disable AltiVec optimizations
    
      --disable-vsx            disable VSX optimizations
      --disable-power8         disable POWER8 optimizations
    
      --disable-amd3dnow       disable 3DNow! optimizations
      --disable-amd3dnowext    disable 3DNow! extended optimizations
      --disable-mmx            disable MMX optimizations
    
      --disable-mmxext         disable MMXEXT optimizations
    
      --disable-sse            disable SSE optimizations
    
      --disable-sse2           disable SSE2 optimizations
      --disable-sse3           disable SSE3 optimizations
    
      --disable-ssse3          disable SSSE3 optimizations
    
      --disable-sse4           disable SSE4 optimizations
      --disable-sse42          disable SSE4.2 optimizations
    
      --disable-avx            disable AVX optimizations
    
      --disable-xop            disable XOP optimizations
    
      --disable-fma3           disable FMA3 optimizations
    
      --disable-fma4           disable FMA4 optimizations
    
      --disable-avx2           disable AVX2 optimizations
    
      --disable-armv5te        disable armv5te optimizations
      --disable-armv6          disable armv6 optimizations
      --disable-armv6t2        disable armv6t2 optimizations
    
      --disable-vfp            disable VFP optimizations
    
      --disable-neon           disable NEON optimizations
    
      --disable-inline-asm     disable use of inline assembly
      --disable-yasm           disable use of nasm/yasm assembly
    
    Developer options (useful when working on Libav itself):
    
      --disable-debug          disable debugging symbols
      --enable-debug=LEVEL     set the debug level [$debuglevel]
      --disable-optimizations  disable compiler optimizations
      --enable-extra-warnings  enable more compiler warnings
    
      --samples=PATH           location of test samples for FATE, if not set use
    
                               \$LIBAV_SAMPLES at make invocation time.
    
      --enable-neon-clobber-test check NEON registers for clobbering (should be
                               used only for debugging purposes)
    
      --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                               should be used only for debugging purposes)
    
      --enable-random          randomly enable/disable components
      --disable-random
      --enable-random=LIST     randomly enable/disable specific components or
      --disable-random=LIST    component groups. LIST is a comma-separated list
                               of NAME[:PROB] entries where NAME is a component
                               (group) and PROB the probability associated with
                               NAME (default 0.5).
      --random-seed=VALUE      seed value for --enable/disable-random
    
      --disable-valgrind-backtrace do not print a backtrace under Valgrind
                               (only applies to --disable-optimizations builds)
    
    
    NOTE: Object files are built at the place where configure is launched.
    EOF
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        log BEGIN $1
    
        i=1
        while read line; do
            printf '%5s   %s\n' "${i}" "${line}"
            i=$(($i+1))
        done < $1 >> $logfile
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        log END $1
    }
    
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        log "$@"
    
    warn(){
        log "WARNING: $*"
        WARNINGS="${WARNINGS}WARNING: $*\n"
    }
    
    
    If you think configure made a mistake, make sure you are using the latest
    
    version from Git.  If the latest version fails, report the problem to the
    
    libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
    
    Rerun configure with logging enabled (do not use --disable-logging), and
    include the log this produces with your report.
    
            cat <<EOF
    
    Include the log file "$logfile" produced by configure as this will help
    solving the problem.
    
    # Avoid locale weirdness, besides we really just want to translate ASCII.
    
        echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
    tolower(){
    
        echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
    
    c_escape(){
        echo "$*" | sed 's/["\\]/\\\0/g'
    }
    
    
    sh_quote(){
        v=$(echo "$1" | sed "s/'/'\\\\''/g")
    
        test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
    
    cleanws(){
        echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
    }
    
    
            eval "case $v in $pat) echo $v ;; esac"
    
    filter_out(){
        pat=$1
        shift
        for v; do
            eval "case $v in $pat) ;; *) echo $v ;; esac"
        done
    }
    
    
        for v; do eval $m; done
    
    add_suffix(){
        suffix=$1
        shift
        for v; do echo ${v}${suffix}; done
    }
    
    
    set_all(){
        value=$1
        shift
        for var in $*; do
            eval $var=$value
        done
    }
    
    
    set_weak(){
        value=$1
        shift
        for var; do
            eval : \${$var:=$value}
        done
    }
    
    
    sanitize_var_name(){
        echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
    }
    
    
    set_safe(){
        var=$1
        shift
    
        eval $(sanitize_var_name "$var")='$*'
    
        eval echo \$$(sanitize_var_name "$1")
    
        for pvar in $*; do
            eval level=\${${pvar}_level:=0}
            eval ${pvar}_${level}="\$$pvar"
            eval ${pvar}_level=$(($level+1))
    
        for pvar in $*; do
            eval level=\${${pvar}_level:-0}
    
            test $level = 0 && continue
            eval level=$(($level-1))
    
            eval $pvar="\${${pvar}_${level}}"
            eval ${pvar}_level=$level
            eval unset ${pvar}_${level}
    
    enable(){
        set_all yes $*
    }
    
    disable(){
        set_all no $*
    }
    
    
    enable_weak(){
        set_weak yes $*
    }
    
    disable_weak(){
        set_weak no $*
    }
    
    
        for var; do
            enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
        done
    
        for var; do
            disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
        done
    
    do_enable_deep(){
        for var; do
            enabled $var && continue
    
            eval sgs="\$${var}_suggest"
            pushvar var sgs
    
            popvar sgs
            enable_deep_weak $sgs
    
            popvar var
        done
    }
    
    enable_deep(){
        do_enable_deep $*
        enable $*
    }
    
    
    enable_deep_weak(){
    
        for var; do
            disabled $var && continue
            pushvar var
            do_enable_deep $var
            popvar var
            enable_weak $var
        done
    
        test "${1#!}" = "$1" && op== || op=!=
        eval test "x\$${1#!}" $op "xyes"
    
        test "${1#!}" = "$1" && op== || op=!=
        eval test "x\$${1#!}" $op "xno"
    
    enabled_all(){
        for opt; do
            enabled $opt || return 1
        done
    }
    
    
    disabled_all(){
        for opt; do
            disabled $opt || return 1
        done
    }
    
    
    enabled_any(){
        for opt; do
            enabled $opt && return 0
        done
    }
    
    
    disabled_any(){
        for opt; do
            disabled $opt && return 0
        done
    
    set_default(){
        for opt; do
    
            eval : \${$opt:=\$${opt}_default}
    
    is_in(){
        value=$1
        shift
        for var in $*; do
            [ $var = $value ] && return 0
        done
        return 1
    }
    
    
            enabled ${cfg}_checking && die "Circular dependency for $cfg."
            disabled ${cfg}_checking && continue
            enable ${cfg}_checking
    
            eval dep_all="\$${cfg}_deps"
    
            eval dep_sel="\$${cfg}_select"
    
            eval dep_sgs="\$${cfg}_suggest"
    
            eval dep_ifa="\$${cfg}_if"
            eval dep_ifn="\$${cfg}_if_any"
    
            pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
    
            do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
    
            popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
    
            [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
            [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
    
    Måns Rullgård's avatar
    Måns Rullgård committed
            enabled_all  $dep_all || disable $cfg
            enabled_any  $dep_any || disable $cfg
    
            disabled_any $dep_sel && disable $cfg
    
            if enabled $cfg; then
    
                enable_deep $dep_sel
    
                enable_deep_weak $dep_sgs
    
            disable ${cfg}_checking
    
    check_deps(){
        unset allopts
    
        do_check_deps "$@"
    
        for cfg in $allopts; do
            enabled $cfg || continue
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
        done
    }
    
    
    print_config(){
        pfx=$1
    
        map 'eval echo "$v \${$v:-no}"' "$@" |
        awk "BEGIN { split(\"$files\", files) }
            {
                c = \"$pfx\" toupper(\$1);
                v = \$2;
                sub(/yes/, 1, v);
                sub(/no/,  0, v);
                for (f in files) {
                    file = files[f];
                    if (file ~ /\\.h\$/) {
                        printf(\"#define %s %d\\n\", c, v) >>file;
                    } else if (file ~ /\\.asm\$/) {
                        printf(\"%%define %s %d\\n\", c, v) >>file;
                    } else if (file ~ /\\.mak\$/) {
    
                        n = -v ? \"\" : \"!\";
    
                        printf(\"%s%s=yes\\n\", n, c) >>file;
                    }
                }
            }"
    
    print_enabled(){
        suf=$1
        shift
        for v; do
    
            enabled $v && printf "%s\n" ${v%$suf}
    
    prepend(){
        var=$1
        shift
        eval "$var=\"$* \$$var\""
    }
    
    
    unique(){
        var=$1
        uniq_list=""
        for tok in $(eval echo \$$var); do
            uniq_list="$(filter_out $tok $uniq_list) $tok"
        done
        eval "$var=\"${uniq_list}\""
    }
    
    
        append CPPFLAGS "$@"
    
        append CFLAGS $($cflags_filter "$@")
    
        append ASFLAGS $($asflags_filter "$@")
    
    Luca Barbato's avatar
    Luca Barbato committed
    add_objcflags(){
        append OBJCFLAGS $($objcflags_filter "$@")
    }
    
    
        append LDFLAGS $($ldflags_filter "$@")
    
    add_ldexeflags(){
        append LDEXEFLAGS $($ldflags_filter "$@")
    }
    
    
    add_stripflags(){
        append STRIPFLAGS "$@"
    }
    
    
        prepend extralibs $($ldflags_filter "$@")
    
    add_host_cppflags(){
        append host_cppflags "$@"
    }
    
    
    add_host_cflags(){
        append host_cflags $($host_cflags_filter "$@")
    }
    
    add_host_ldflags(){
        append host_ldflags $($host_ldflags_filter "$@")
    }
    
    
    add_compat(){
        append compat_objs $1
        shift
        map 'add_cppflags -D$v' "$@"
    }
    
    
        log "$@"
    
    cc_o(){
        eval printf '%s\\n' $CC_O
    }
    
    
    cc_e(){
        eval printf '%s\\n' $CC_E
    }
    
    
        check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
    
    Luca Barbato's avatar
    Luca Barbato committed
    check_objcc(){
        log check_objcc "$@"
        cat > $TMPC
        log_file $TMPC
        check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
    }
    
    
        check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
    
    as_o(){
        eval printf '%s\\n' $AS_O
    }
    
    
    check_as(){
        log check_as "$@"
    
        cat > $TMPS
        log_file $TMPS
        check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
    
    check_inline_asm(){
        log check_inline_asm "$@"
    
        check_cc "$@" <<EOF && enable $name
    
    void foo(void){ __asm__ volatile($code); }
    
    check_insn(){
        log check_insn "$@"
        check_inline_asm ${1}_inline "\"$2\""
        echo "$2" | check_as && enable ${1}_external || disable ${1}_external
    }
    
    
    Loren Merritt's avatar
    Loren Merritt committed
    check_yasm(){
        log check_yasm "$@"
        echo "$1" > $TMPS
        log_file $TMPS
        shift 1
        check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
    }
    
    
    ld_o(){
        eval printf '%s\\n' $LD_O
    }
    
    
        flags=$(filter_out '-l*' "$@")
        libs=$(filter '-l*' "$@")
    
        check_cc $($cflags_filter $flags) || return
    
        flags=$($ldflags_filter $flags)
        libs=$($ldflags_filter $libs)
    
        check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
    
    print_include(){
        hdr=$1
        test "${hdr%.h}" = "${hdr}" &&
            echo "#include $hdr"    ||
            echo "#include <$hdr>"
    }
    
    
    check_code(){
        log check_code "$@"
        check=$1
        headers=$2
        code=$3
        shift 3
        {
            for hdr in $headers; do
    
            done
            echo "int main(void) { $code; return 0; }"
        } | check_$check "$@"
    }
    
    
    check_cppflags(){
        log check_cppflags "$@"
    
        check_cc "$@" <<EOF && append CPPFLAGS "$@"
    
    test_cflags(){
        log test_cflags "$@"
    
        set -- $($cflags_filter "$@")
    
    check_cflags(){
        log check_cflags "$@"
        test_cflags "$@" && add_cflags "$@"
    }
    
    
    Luca Barbato's avatar
    Luca Barbato committed
    test_objcflags(){
        log test_cflags "$@"
        set -- $($cflags_filter "$@")
        check_objcc "$@" <<EOF
    int x;
    EOF
    }
    
    check_objcflags(){
        log check_cflags "$@"
        test_objcflags "$@" && add_objcflags "$@"
    }
    
    
    test_ldflags(){
        log test_ldflags "$@"
        check_ld "$@" <<EOF
    
    check_ldflags(){
        log check_ldflags "$@"
        test_ldflags "$@" && add_ldflags "$@"
    }
    
    
    test_stripflags(){
        log test_stripflags "$@"
        # call check_cc to get a fresh TMPO
        check_cc <<EOF
    int main(void) { return 0; }
    EOF
        check_cmd $strip $STRIPFLAGS "$@" $TMPO
    }
    
    check_stripflags(){
        log check_stripflags "$@"
        test_stripflags "$@" && add_stripflags "$@"
    }
    
    
    check_header(){
    
        disable_safe $header
        check_cpp "$@" <<EOF && enable_safe $header
    
    #include <$header>
    int x;
    EOF
    }
    
    check_func(){
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        disable $func
        check_ld "$@" <<EOF && enable $func
    
    extern int $func();
    
    check_mathfunc(){
    
        log check_mathfunc "$@"
    
        narg=$2
        shift 2
        test $narg = 2 && args="f, g" || args="f"
    
        disable $func
        check_ld "$@" <<EOF && enable $func
    #include <math.h>
    
    float foo(float f, float g) { return $func($args); }
    
    int main(void){ return 0; }
    
    check_func_headers(){
        log check_func_headers "$@"
    
            done
            for func in $funcs; do
                echo "long check_$func(void) { return (long) $func; }"
            done
            echo "int main(void) { return 0; }"
        } | check_ld "$@" && enable $funcs && enable_safe $headers
    
    check_cpp_condition(){
        log check_cpp_condition "$@"
        header=$1
        condition=$2
    
        check_cpp "$@" <<EOF
    
    #include <$header>
    #if !($condition)
    #error "unsatisfied condition: $condition"
    #endif
    EOF
    }
    
    
    check_lib(){
        log check_lib "$@"
        header="$1"
        func="$2"
        shift 2
    
        check_header $header && check_func $func "$@" && add_extralibs "$@"
    
    check_lib2(){
        log check_lib2 "$@"
        headers="$1"