Skip to content
Snippets Groups Projects
configure 102 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
    
    cat <<EOF
    Usage: configure [options]
    Options: [defaults in brackets after descriptions]
    
    Standard options:
      --help                   print this message
    
      --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]
    
      --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]
    
    Configuration options:
      --disable-static         do not build static libraries [no]
      --enable-shared          build shared libraries [no]
      --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]
      --disable-doc            do not build documentation
      --disable-ffmpeg         disable ffmpeg build
    
      --disable-avconv         disable avconv build
    
    Anton Khirnov's avatar
    Anton Khirnov committed
      --disable-avplay         disable avplay build
    
      --disable-avprobe        disable avprobe build
    
      --disable-avserver       disable avserver build
    
      --disable-avdevice       disable libavdevice build
      --disable-avcodec        disable libavcodec build
      --disable-avformat       disable libavformat build
      --disable-swscale        disable libswscale build
    
      --disable-postproc       disable libpostproc build
    
      --disable-avfilter       disable video filter support [no]
    
      --disable-pthreads       disable pthreads [auto]
    
      --disable-w32threads     disable Win32 threads [auto]
    
      --enable-x11grab         enable X11 grabbing [no]
      --disable-network        disable network support [no]
      --enable-gray            enable full grayscale support (slower color)
      --disable-swscale-alpha  disable alpha channel support in swscale
      --disable-fastdiv        disable table-based division
      --enable-small           optimize for size instead of speed
      --disable-aandct         disable AAN DCT code
    
      --disable-dct            disable DCT code
    
      --disable-fft            disable FFT code
      --disable-golomb         disable Golomb code
    
      --disable-huffman        disable Huffman code
    
      --disable-lpc            disable LPC code
      --disable-mdct           disable MDCT code
      --disable-rdft           disable RDFT code
    
      --enable-vaapi           enable VAAPI code
    
      --enable-vdpau           enable VDPAU code
    
    Laurent Aimar's avatar
    Laurent Aimar committed
      --disable-dxva2          disable DXVA2 code
    
      --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
      --enable-hardcoded-tables use hardcoded tables instead of runtime generation
      --enable-memalign-hack   emulate memalign, interferes with memory debuggers
    
      --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
      --disable-indev=NAME     disable input device NAME
      --disable-outdev=NAME    disable output device NAME
      --disable-indevs         disable input devices
      --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
      --list-decoders          show all available decoders
      --list-encoders          show all available encoders
      --list-hwaccels          show all available hardware accelerators
      --list-muxers            show all available muxers
      --list-demuxers          show all available demuxers
      --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
    
    External library support:
      --enable-avisynth        enable reading of AVISynth script files [no]
      --enable-bzlib           enable bzlib [autodetect]
    
    Stefano Sabatini's avatar
    Stefano Sabatini committed
      --enable-frei0r          enable frei0r video filtering
    
      --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
      --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
    
      --enable-libopencv       enable video filtering via libopencv [no]
    
      --enable-libcdio         enable audio CD grabbing with libcdio
    
      --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                               and libraw1394 [no]
      --enable-libdirac        enable Dirac support via libdirac [no]
      --enable-libfaac         enable FAAC support via libfaac [no]
    
      --enable-libfreetype     enable libfreetype [no]
    
      --enable-libgsm          enable GSM support via libgsm [no]
      --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
      --enable-libnut          enable NUT (de)muxing via libnut,
                               native (de)muxer exists [no]
      --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
    
      --enable-librtmp         enable RTMP[E] support via librtmp [no]
    
      --enable-libschroedinger enable Dirac support via libschroedinger [no]
    
      --enable-libspeex        enable Speex support via libspeex [no]
    
      --enable-libtheora       enable Theora encoding via libtheora [no]
    
      --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
    
      --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
    
      --enable-libvorbis       enable Vorbis encoding via libvorbis,
                               native implementation exists [no]
    
    James Zern's avatar
    James Zern committed
      --enable-libvpx          enable VP8 support via libvpx [no]
    
      --enable-libx264         enable H.264 encoding via x264 [no]
    
      --enable-libxavs         enable AVS encoding via xavs [no]
    
      --enable-libxvid         enable Xvid encoding via xvidcore,
                               native MPEG-4/Xvid encoder exists [no]
      --enable-mlib            enable Sun medialib [no]
      --enable-zlib            enable zlib [autodetect]
    
    Advanced options (experts only):
      --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
      --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]
      --ld=LD                  use linker LD
      --host-cc=HOSTCC         use host C compiler HOSTCC
      --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
      --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
      --host-libs=HLIBS        use libs HLIBS when linking for host
      --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
      --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
      --extra-libs=ELIBS       add ELIBS [$ELIBS]
      --extra-version=STRING   version string suffix []
      --build-suffix=SUFFIX    library name suffix []
      --arch=ARCH              select architecture [$arch]
      --cpu=CPU                select the minimum required CPU (affects
                               instruction selection, may crash on older CPUs)
    
      --disable-asm            disable all assembler optimizations
    
      --disable-altivec        disable AltiVec optimizations
      --disable-amd3dnow       disable 3DNow! optimizations
      --disable-amd3dnowext    disable 3DNow! extended optimizations
      --disable-mmx            disable MMX optimizations
      --disable-mmx2           disable MMX2 optimizations
      --disable-sse            disable SSE optimizations
      --disable-ssse3          disable SSSE3 optimizations
    
      --disable-avx            disable AVX optimizations
    
      --disable-armv5te        disable armv5te optimizations
      --disable-armv6          disable armv6 optimizations
      --disable-armv6t2        disable armv6t2 optimizations
      --disable-armvfp         disable ARM VFP optimizations
      --disable-iwmmxt         disable iwmmxt optimizations
      --disable-mmi            disable MMI optimizations
      --disable-neon           disable neon optimizations
      --disable-vis            disable VIS optimizations
      --disable-yasm           disable use of yasm assembler
      --enable-pic             build position-independent code
    
      --malloc-prefix=PFX      prefix malloc and related names with PFX
    
      --enable-sram            allow use of on-chip SRAM
    
      --disable-symver         disable symbol versioning
    
      --optflags               override optimization-related compiler flags
    
    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
                               \$FATE_SAMPLES at make invocation time.
    
    
    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
    
        pr -n -t $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-user@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.
    
    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
    
    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
    }
    
    
    set_safe(){
        var=$1
        shift
        eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
    }
    
    get_safe(){
        eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
    }
    
    
    pushvar(){
        for var in $*; do
            eval level=\${${var}_level:=0}
            eval ${var}_${level}="\$$var"
            eval ${var}_level=$(($level+1))
        done
    }
    
    popvar(){
        for var in $*; do
            eval level=\${${var}_level:-0}
            test $level = 0 && continue
            eval level=$(($level-1))
            eval $var="\${${var}_${level}}"
            eval ${var}_level=$level
            eval unset ${var}_${level}
        done
    }
    
    
    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 sel="\$${var}_select"
    
            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(){
        do_enable_deep $*
        enable_weak $*
    }
    
    
        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_any="\$${cfg}_deps_any"
    
            eval dep_sel="\$${cfg}_select"
    
            eval dep_sgs="\$${cfg}_suggest"
    
            eval dep_ifa="\$${cfg}_if"
            eval dep_ifn="\$${cfg}_if_any"
    
            pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
            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
                eval dep_extralibs="\$${cfg}_extralibs"
                test -n "$dep_extralibs" && add_extralibs $dep_extralibs
    
                enable_deep $dep_sel
    
                enable_deep_weak $dep_sgs
    
            disable ${cfg}_checking
    
    print_config_h(){
        enabled $1 && v=1 || v=0
        echo "#define $2 $v"
    }
    
    print_config_mak(){
        enabled $1 && v= || v=!
        echo "$v$2=yes"
    }
    
    
    print_config_asm(){
        enabled $1 && echo "%define $2"
    }
    
    
    print_config(){
        pfx=$1
    
            for f in $files; do
                "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
            done
    
    print_enabled(){
        test "$1" = -n && end=" " && shift || end="\n"
        suf=$1
        shift
        for v; do
            enabled $v && printf "%s$end" ${v%$suf};
        done
    }
    
    
    prepend(){
        var=$1
        shift
        eval "$var=\"$* \$$var\""
    }
    
    
        append CPPFLAGS $($filter_cppflags "$@")
    
        append CFLAGS $($filter_cflags "$@")
    
        append ASFLAGS $($filter_asflags "$@")
    
    add_ldflags(){
        append LDFLAGS "$@"
    }
    
    add_extralibs(){
    
        prepend extralibs "$@"
    
        log "$@"
    
        check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
    
    check_as(){
        log check_as "$@"
        cat > $TMPC
        log_file $TMPC
    
        check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
    
    check_asm(){
        log check_asm "$@"
        name="$1"
    
        disable $name
        check_as "$@" <<EOF && enable $name
    
    void foo(void){ __asm__ volatile($code); }
    
    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
    }
    
    
        flags=''
        libs=''
        for f; do
            test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
        done
    
        check_cc $($filter_cflags $flags) || return
    
        check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
    
    check_cppflags(){
        log check_cppflags "$@"
    
        set -- $($filter_cppflags "$@")
        check_cc "$@" <<EOF && append CPPFLAGS "$@"
    
    check_cflags(){
    
        set -- $($filter_cflags "$@")
        check_cc "$@" <<EOF && append CFLAGS "$@"
    
    test_ldflags(){
        log test_ldflags "$@"
        check_ld "$@" <<EOF
    
    check_ldflags(){
        log check_ldflags "$@"
        test_ldflags "$@" && add_ldflags "$@"
    }
    
    
    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 "$@"
    
        func=$1
        shift
        disable $func
        check_ld "$@" <<EOF && enable $func
    #include <math.h>
    
    float foo(float f) { return $func(f); }
    int main(void){ return 0; }
    
    check_func_headers(){
        log check_func_headers "$@"
    
        {
            for hdr in $headers; do
                echo "#include <$hdr>"
            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
    
        shift 2
        check_cpp $($filter_cppflags "$@") <<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"
    
        check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
    
    check_pkg_config(){
        log check_pkg_config "$@"
        pkg="$1"
        headers="$2"
        funcs="$3"
        shift 3
        $pkg_config --exists $pkg || return
        pkg_cflags=$($pkg_config --cflags $pkg)
        pkg_libs=$($pkg_config --libs $pkg)
        check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
            set_safe ${pkg}_cflags $pkg_cflags   &&
            set_safe ${pkg}_libs   $pkg_libs
    }
    
    
        check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
    
    check_exec_crash(){
    
    
        # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
        # are safe but may not be available everywhere.  Thus we use
        # raise(SIGTERM) instead.  The check is run in a subshell so we
        # can redirect the "Terminated" message from the shell.  SIGBUS
        # is not defined by standard C so it is used conditionally.
    
    
        (check_exec "$@") >> $logfile 2>&1 <<EOF
    
    #include <signal.h>
    static void sighandler(int sig){
        raise(SIGTERM);
    }
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    int main(void){
    
        signal(SIGILL, sighandler);
        signal(SIGFPE, sighandler);
        signal(SIGSEGV, sighandler);
    #ifdef SIGBUS
        signal(SIGBUS, sighandler);
    #endif
        { $code }
    }
    EOF
    }
    
    
    check_type(){
        log check_type "$@"
        headers=$1
        type=$2
        shift 2
    
        incs=""
        for hdr in $headers; do
            incs="$incs
    #include <$hdr>"
        done
    
        check_cc "$@" <<EOF && enable_safe "$type"
    
    check_struct(){
        log check_type "$@"
        headers=$1
        struct=$2
        member=$3
        shift 3
        disable_safe "${struct}_${member}"
        incs=""
        for hdr in $headers; do
            incs="$incs
    #include <$hdr>"
        done
        check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
    $incs
    const void *p = &(($struct *)0)->$member;
    EOF
    }
    
    
    require(){
        name="$1"
        header="$2"
        func="$3"
        shift 3
        check_lib $header $func "$@" || die "ERROR: $name not found"
    
    require2(){
        name="$1"
        headers="$2"
        func="$3"
        shift 3
        check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
    }
    
    
    require_pkg_config(){
        pkg="$1"
        check_pkg_config "$@" || die "ERROR: $pkg not found"
        add_cflags    $(get_safe ${pkg}_cflags)
        add_extralibs $(get_safe ${pkg}_libs)
    }
    
    
    check_host_cc(){
        log check_host_cc "$@"
        cat > $TMPC
        log_file $TMPC
        check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
    }
    
    check_host_cflags(){
        log check_host_cflags "$@"
        check_host_cc "$@" <<EOF && append host_cflags "$@"
    int x;
    EOF
    }
    
    
    apply(){
        file=$1
        shift
        "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
    }
    
    
        cmp -s "$1" "$2" && echo "$2 is unchanged" && return
        mkdir -p "$(dirname $2)"
        cp -f "$1" "$2"
    
    # CONFIG_LIST contains configurable options, while HAVE_LIST is for
    # system-dependent things.
    
    
    COMPONENT_LIST="
        bsfs
        decoders
        demuxers
        encoders
    
    Vitor Sessak's avatar
    Vitor Sessak committed
        filters
    
        parsers
        protocols
    "
    
    CONFIG_LIST="
        $COMPONENT_LIST
    
    Laurent Aimar's avatar
    Laurent Aimar committed
        dxva2
    
    Anton Khirnov's avatar
    Anton Khirnov committed
        avplay
    
        avprobe
    
        avserver
    
    Stefano Sabatini's avatar
    Stefano Sabatini committed
        frei0r
    
    Aurelien Jacobs's avatar
    Aurelien Jacobs committed
        hardcoded_tables
    
    Ramiro Polla's avatar
    Ramiro Polla committed
        libdc1394
    
        libopencore_amrnb
        libopencore_amrwb
    
        libopenjpeg
    
        libpulse
    
        libspeex
    
        libtheora
    
    James Zern's avatar
    James Zern committed
        libvpx
    
        runtime_cpudetect