#!/bin/sh
#
# FFmpeg configure script
#
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
#

# Prevent locale nonsense from breaking basic text processing.
LC_ALL=C
export LC_ALL

# make sure we are running under a compatible shell
# try to make this part work with most shells

try_exec(){
    echo "Trying shell $1"
    type "$1" > /dev/null 2>&1 && exec "$@"
}

unset foo
(: ${foo%%bar}) 2> /dev/null
E1="$?"

(: ${foo?}) 2> /dev/null
E2="$?"

if test "$E1" != 0 || test "$E2" = 0; 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."
    echo "This configure script requires a POSIX-compatible shell"
    echo "such as bash or ksh."
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
    echo "Instead, install a working POSIX-compatible shell."
    echo "Disabling this configure test will create a broken FFmpeg."
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
        echo "This bash version ($BASH_VERSION) is broken on your platform."
        echo "Upgrade to a later version if available."
    fi
    exit 1
fi

show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
  echo "  --disable-logging        do not log configure debug information"
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
  echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
  echo
  echo "Configuration options:"
  echo "  --disable-static         do not build static libraries [no]"
  echo "  --enable-shared          build shared libraries [no]"
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
  echo "                           and binaries will be under GPL [no]"
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
  echo "                           and binaries will be unredistributable [no]"
  echo "  --disable-ffmpeg         disable ffmpeg build"
  echo "  --disable-ffplay         disable ffplay build"
  echo "  --disable-ffserver       disable ffserver build"
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
  echo "  --enable-avfilter        video filter support [no]"
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
  echo "  --enable-beosthreads     use BeOS threads [no]"
  echo "  --enable-os2threads      use OS/2 threads [no]"
  echo "  --enable-pthreads        use pthreads [no]"
  echo "  --enable-w32threads      use Win32 threads [no]"
  echo "  --enable-x11grab         enable X11 grabbing [no]"
  echo "  --disable-network        disable network support [no]"
  echo "  --disable-ipv6           disable IPv6 support [no]"
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
  echo "  --enable-gray            enable full grayscale support (slower color)"
  echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
  echo "  --disable-fastdiv        disable table-based division"
  echo "  --enable-small           optimize for size instead of speed"
  echo "  --disable-aandct         disable AAN DCT code"
  echo "  --disable-fft            disable FFT code"
  echo "  --disable-golomb         disable Golomb code"
  echo "  --disable-mdct           disable MDCT code"
  echo "  --disable-rdft           disable RDFT code"
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
  echo "  --enable-beos-netserver  enable BeOS netserver"
  echo "  --disable-encoder=NAME   disable encoder NAME"
  echo "  --enable-encoder=NAME    enable encoder NAME"
  echo "  --disable-encoders       disable all encoders"
  echo "  --disable-decoder=NAME   disable decoder NAME"
  echo "  --enable-decoder=NAME    enable decoder NAME"
  echo "  --disable-decoders       disable all decoders"
  echo "  --disable-muxer=NAME     disable muxer NAME"
  echo "  --enable-muxer=NAME      enable muxer NAME"
  echo "  --disable-muxers         disable all muxers"
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
  echo "  --disable-demuxers       disable all demuxers"
  echo "  --enable-parser=NAME     enable parser NAME"
  echo "  --disable-parser=NAME    disable parser NAME"
  echo "  --disable-parsers        disable all parsers"
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
  echo "  --disable-bsfs           disable all bitstream filters"
  echo "  --enable-protocol=NAME   enable protocol NAME"
  echo "  --disable-protocol=NAME  disable protocol NAME"
  echo "  --disable-protocols      disable all protocols"
  echo "  --disable-indevs         disable input devices"
  echo "  --disable-outdevs        disable output devices"
  echo "  --disable-devices        disable all devices"
  echo "  --enable-filter=NAME     enable filter NAME"
  echo "  --disable-filter=NAME    disable filter NAME"
  echo "  --disable-filters        disable all filters"
  echo "  --list-decoders          show all available decoders"
  echo "  --list-encoders          show all available encoders"
  echo "  --list-muxers            show all available muxers"
  echo "  --list-demuxers          show all available demuxers"
  echo "  --list-parsers           show all available parsers"
  echo "  --list-protocols         show all available protocols"
  echo "  --list-bsfs              show all available bitstream filters"
  echo "  --list-indevs            show all available input devices"
  echo "  --list-outdevs           show all available output devices"
  echo "  --list-filters           show all available filters"
  echo
  echo "External library support:"
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
  echo "  --enable-bzlib           enable bzlib [autodetect]"
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
  echo "                           and libraw1394 [no]"
  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
  echo "                           native (de)muxer exists [no]"
  echo "  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]"
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
  echo "                           native implementation exists [no]"
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
  echo "                           native MPEG-4/Xvid encoder exists [no]"
  echo "  --enable-mlib            enable Sun medialib [no]"
  echo "  --enable-zlib            enable zlib [autodetect]"
  echo ""
  echo "Advanced options (experts only):"
  echo "  --source-path=PATH       path to source code [$source_path]"
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
  echo "  --enable-cross-compile   assume a cross-compiler is used"
  echo "  --sysroot=PATH           root of cross-build tree"
  echo "  --sysinclude=PATH        location of cross-build system headers"
  echo "  --target-os=OS           compiler targets OS [$target_os]"
  echo "  --target-exec=CMD        command to run executables on target"
  echo "  --target-path=DIR        path to view of build directory on target"
  echo "  --nm=NM                  use nm tool"
  echo "  --as=AS                  use assembler AS [$as_default]"
  echo "  --cc=CC                  use C compiler CC [$cc_default]"
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
  echo "  --extra-version=STRING   version string suffix []"
  echo "  --build-suffix=SUFFIX    library name suffix []"
  echo "  --arch=ARCH              select architecture [$arch]"
  echo "  --cpu=CPU                select the minimum required CPU (affects"
  echo "                           instruction selection, may crash on older CPUs)"
  echo "  --enable-powerpc-perf    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-altivec        disable AltiVec optimizations"
  echo "  --disable-amd3dnow       disable 3DNow! optimizations"
  echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
  echo "  --disable-mmx            disable MMX optimizations"
  echo "  --disable-mmx2           disable MMX2 optimizations"
  echo "  --disable-sse            disable SSE optimizations"
  echo "  --disable-ssse3          disable SSSE3 optimizations"
  echo "  --disable-armv5te        disable armv5te optimizations"
  echo "  --disable-armv6          disable armv6 optimizations"
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
  echo "  --disable-armvfp         disable ARM VFP optimizations"
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
  echo "  --disable-mmi            disable MMI optimizations"
  echo "  --disable-neon           disable neon optimizations"
  echo "  --disable-vis            disable VIS optimizations"
  echo "  --disable-yasm           disable use of yasm assembler"
  echo
  echo "Developer options (useful when working on FFmpeg itself):"
  echo "  --disable-debug          disable debugging symbols"
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
  echo "  --disable-optimizations  disable compiler optimizations"
  echo "  --enable-extra-warnings  enable more compiler warnings"
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 0
}

log(){
    echo "$@" >> $logfile
}

log_file(){
    log BEGIN $1
    pr -n -t $1 >> $logfile
    log END $1
}

echolog(){
    log "$@"
    echo "$@"
}

die(){
    echolog "$@"
    cat <<EOF
If you think configure made a mistake, make sure you are using the latest
version from SVN.  If the latest version fails, report the problem to the
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
EOF
    if disabled logging; then
        cat <<EOF
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
EOF
    else
cat <<EOF
Include the log file "$logfile" produced by configure as this will help
solving the problem.
EOF
    fi
    exit 1
}

# Avoid locale weirdness, besides we really just want to translate ASCII.
toupper(){
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
}

tolower(){
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
}

c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

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
}

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 $*
}

enable_safe(){
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
}

disable_safe(){
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
}

do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
        eval sgs="\$${var}_suggest"
        pushvar var sgs
        enable_deep $sel
        popvar sgs
        enable_deep_weak $sgs
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

enabled(){
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
}

disabled(){
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
}

enabled_all(){
    for opt; 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
    return 1
}

set_default(){
    for opt; do
        eval : \${$opt:=\$${opt}_default}
    done
}

is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

check_deps(){
    for cfg; do
        cfg="${cfg#!}"
        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"

        pushvar cfg dep_all dep_any dep_sel dep_sgs
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
        popvar cfg dep_all dep_any dep_sel dep_sgs

        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
        fi

        disable ${cfg}_checking
    done
}

print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
        ucname="$(toupper $cfg)"
        if enabled $cfg; then
            echo "#define ${pfx}${ucname} 1" >> $header
            echo "${pfx}${ucname}=yes" >> $makefile
        else
            echo "#define ${pfx}${ucname} 0" >> $header
        fi
    done
}

flags_saved(){
    (: ${SAVE_CFLAGS?}) 2> /dev/null
}

save_flags(){
    flags_saved && return
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
    flags_saved || return
    CFLAGS="$SAVE_CFLAGS"
    LDFLAGS="$SAVE_LDFLAGS"
    extralibs="$SAVE_extralibs"
    unset SAVE_CFLAGS
    unset SAVE_LDFLAGS
    unset SAVE_extralibs
}

temp_cflags(){
    save_flags
    CFLAGS="$CFLAGS $*"
}

temp_ldflags(){
    save_flags
    LDFLAGS="$LDFLAGS $*"
}

temp_extralibs(){
    save_flags
    extralibs="$extralibs $*"
}

append(){
    var=$1
    shift
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
    eval "$var=\"\$$var $*\""
}

add_cflags(){
    append CFLAGS "$@"
}

add_ldflags(){
    append LDFLAGS "$@"
}

add_extralibs(){
    append extralibs "$@"
}

check_cmd(){
    log "$@"
    "$@" >> $logfile 2>&1
}

check_cc(){
    log check_cc "$@"
    cat > $TMPC
    log_file $TMPC
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
}

check_cpp(){
    log check_cpp "$@"
    cat > $TMPC
    log_file $TMPC
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
}

check_as(){
    log check_as "$@"
    cat > $TMPC
    log_file $TMPC
    check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
}

check_asm(){
    log check_asm "$@"
    name="$1"
    asm="$2"
    shift 2
    check_as "$@" <<EOF && enable $name || disable $name
void foo(void){ __asm__ volatile($asm); }
EOF
}

check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

check_ld(){
    log check_ld "$@"
    check_cc || return
    flags=''
    libs=''
    for f; do
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
    done
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
}

check_cflags(){
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
int x;
EOF
}

check_ldflags(){
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(void){ return 0; }
EOF
}

check_header(){
    log check_header "$@"
    header=$1
    shift
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
#include <$header>
int x;
EOF
}

check_func(){
    log check_func "$@"
    func=$1
    shift
    disable $func
    check_ld "$@" <<EOF && enable $func
extern int $func();
int main(void){ $func(); }
EOF
}

check_func_headers(){
    log check_func_headers "$@"
    headers=$1
    func=$2
    shift 2
    disable $func
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
$incs
int main(int argc, char **argv){
    (void) $func;
    return 0;
}
EOF
}

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
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
}

check_lib2(){
    log check_lib2 "$@"
    headers="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
    check_func_headers "$headers" $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
}

check_exec(){
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
}

check_exec_crash(){
    code=$(cat)

    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
    # are safe but may not be available everywhere.  Thus we use
    # raise(SIGTERM) instead.  The check is run in a subshell so we
    # can redirect the "Terminated" message from the shell.  SIGBUS
    # is not defined by standard C so it is used conditionally.

    (check_exec "$@") >> $logfile 2>&1 <<EOF
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
int 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
    disable $type
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
    check_cc "$@" <<EOF && enable $type
$incs
$type v;
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"
}

check_foo_config(){
    cfg=$1
    pkg=$2
    header=$3
    func=$4
    shift 4
    disable $cfg
    check_cmd ${pkg}-config --version
    err=$?
    if test "$err" = 0; then
        temp_cflags $(${pkg}-config --cflags)
        temp_extralibs $(${pkg}-config --libs)
        check_lib "$@" $header $func && enable $cfg
    fi
    return $err
}

apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
    filters
    indevs
    muxers
    outdevs
    parsers
    protocols
"

CONFIG_LIST="
    $COMPONENT_LIST
    aandct
    avfilter
    avfilter_lavf
    avisynth
    beos_netserver
    bzlib
    fastdiv
    ffmpeg
    ffplay
    ffserver
    fft
    golomb
    gpl
    gprof
    gray
    hardcoded_tables
    ipv6
    libamr_nb
    libamr_wb
    libdc1394
    libdirac
    libfaac
    libfaad
    libfaadbin
    libgsm
    libmp3lame
    libnut
    libopenjpeg
    libschroedinger
    libspeex
    libtheora
    libvorbis
    libx264
    libxvid
    mdct
    memalign_hack
    mlib
    mpegaudio_hp
    network
    nonfree
    postproc
    powerpc_perf
    rdft
    shared
    small
    static
    swscale_alpha
    x11grab
    zlib
"

THREADS_LIST='
    beosthreads
    os2threads
    pthreads
    w32threads
'

ARCH_LIST='
    alpha
    arm
    bfin
    ia64
    m68k
    mips
    parisc
    ppc
    s390
    sh4
    sparc
    sparc64
    x86
    x86_32
    x86_64
'

ARCH_EXT_LIST='
    altivec
    amd3dnow
    amd3dnowext
    armv5te
    armv6
    armv6t2
    armvfp
    iwmmxt
    mmi
    mmx
    mmx2
    neon
    ppc4xx
    sse
    ssse3
    vis
'

HAVE_LIST="
    $ARCH_EXT_LIST
    $THREADS_LIST
    alsa_asoundlib_h
    altivec_h
    arpa_inet_h
    bswap
    closesocket
    cmov
    conio_h
    dcbzl
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_meteor_ioctl_meteor_h
    dev_video_bktr_ioctl_bt848_h
    dlfcn_h
    dlopen
    dos_paths
    ebp_available
    ebx_available
    fast_64bit
    fast_cmov
    fast_unaligned
    fork
    gethrtime
    GetProcessTimes
    getrusage
    inet_aton
    inline_asm
    libdc1394_1
    libdc1394_2
    llrint
    lrint
    lrintf
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
    malloc_h
    memalign
    mkstemp
    pld
    posix_memalign
    ppc64
    round
    roundf
    sdl
    sdl_video_size
    setmode
    socklen_t
    soundcard_h
    poll_h
    sys_mman_h
    sys_resource_h
    sys_select_h
    sys_soundcard_h
    sys_videoio_h
    ten_operands
    termios_h
    threads
    truncf
    VirtualAlloc
    winsock2_h
    yasm
"

# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
"

CMDLINE_SELECT="
    $ARCH_EXT_LIST
    $CONFIG_LIST
    $THREADS_LIST
    cross_compile
    debug
    extra_warnings
    logging
    optimizations
    stripping
    yasm
"

PATHS_LIST='
    bindir
    datadir
    incdir
    libdir
    mandir
    prefix
    shlibdir
'

CMDLINE_SET="
    $PATHS_LIST
    arch
    as
    build_suffix
    cc
    cpu
    cross_prefix
    extra_version
    host_cc
    host_cflags
    host_ldflags
    host_libs
    host_os
    logfile
    nm
    source_path
    sysinclude
    sysroot
    target_exec
    target_os
    target_path
"

# code dependency declarations

# architecture extensions
altivec_deps="ppc"
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
armv5te_deps="arm"
armv6_deps="arm"
armv6t2_deps="arm"
armvfp_deps="arm"
iwmmxt_deps="arm"
mmi_deps="mips"
mmx_deps="x86"
mmx2_deps="mmx"
neon_deps="arm"
ppc4xx_deps="ppc"
sse_deps="mmx"
ssse3_deps="sse"
vis_deps="sparc"

# decoders / encoders
aac_decoder_select="fft mdct"
ac3_decoder_deps="gpl"
ac3_decoder_select="fft mdct"
atrac3_decoder_select="fft mdct"
cavs_decoder_select="golomb"
cook_decoder_select="fft mdct"
cscd_decoder_suggest="zlib"
dca_decoder_select="fft mdct"
dnxhd_encoder_select="aandct"
dxa_decoder_select="zlib"
eac3_decoder_deps="gpl"
eac3_decoder_select="fft mdct"
eatgq_decoder_select="aandct"
eatqi_decoder_select="aandct"
ffv1_decoder_select="golomb"
flac_decoder_select="golomb"
flac_encoder_select="golomb"
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
flv_encoder_select="aandct"
h261_encoder_select="aandct"
h263_encoder_select="aandct"
h263p_encoder_select="aandct"
h264_decoder_select="golomb"
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
imc_decoder_select="fft mdct"
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
ljpeg_encoder_select="aandct"
loco_decoder_select="golomb"
mjpeg_encoder_select="aandct"
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
mpeg4_encoder_select="aandct"
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
msmpeg4v1_encoder_select="aandct"
msmpeg4v2_encoder_select="aandct"
msmpeg4v3_encoder_select="aandct"
nellymoser_decoder_select="fft mdct"
nellymoser_encoder_select="fft mdct"
png_decoder_select="zlib"
png_encoder_select="zlib"
qdm2_decoder_select="fft mdct rdft"
rv10_encoder_select="aandct"
rv20_encoder_select="aandct"
rv30_decoder_select="golomb"
rv40_decoder_select="golomb"
shorten_decoder_select="golomb"
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
svq3_decoder_select="golomb"
svq3_decoder_suggest="zlib"
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
tscc_decoder_select="zlib"
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
vorbis_decoder_select="fft mdct"
vorbis_encoder_select="fft mdct"
wmav1_decoder_select="fft mdct"
wmav1_encoder_select="fft mdct"
wmav2_decoder_select="fft mdct"
wmav2_encoder_select="fft mdct"
wmv1_encoder_select="aandct"
wmv2_encoder_select="aandct"
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"

# external libraries
libamr_nb_decoder_deps="libamr_nb"
libamr_nb_encoder_deps="libamr_nb"
libamr_wb_decoder_deps="libamr_wb"
libamr_wb_encoder_deps="libamr_wb"
libdirac_decoder_deps="libdirac !libschroedinger"
libdirac_encoder_deps="libdirac"
libfaac_encoder_deps="libfaac"
libfaad_decoder_deps="libfaad"
libfaadbin_decoder_extralibs='$ldl'
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
libmp3lame_encoder_deps="libmp3lame"
libopenjpeg_decoder_deps="libopenjpeg"
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
libspeex_decoder_deps="libspeex"
libtheora_encoder_deps="libtheora"
libvorbis_encoder_deps="libvorbis"
libx264_encoder_deps="libx264"
libxvid_encoder_deps="libxvid"

# demuxers / muxers
ac3_demuxer_deps="ac3_parser"
alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
alsa_demuxer_extralibs="-lasound"
alsa_muxer_deps="alsa_asoundlib_h"
alsa_muxer_extralibs="-lasound"
audio_beos_demuxer_deps="audio_beos"
audio_beos_demuxer_extralibs="-lmedia -lbe"
audio_beos_muxer_deps="audio_beos"
audio_beos_muxer_extralibs="-lmedia -lbe"
avisynth_demuxer_deps="avisynth"
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
dirac_demuxer_deps="dirac_parser"
dv1394_demuxer_deps="dv1394 dv_demuxer"
libdc1394_demuxer_deps="libdc1394"
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
matroska_demuxer_suggest="zlib bzlib"
mov_demuxer_suggest="zlib"
mp3_demuxer_deps="mpegaudio_parser"
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
redir_demuxer_deps="network"
rtp_muxer_deps="network rtp_protocol"
rtsp_demuxer_deps="sdp_demuxer"
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
v4l_demuxer_deps="linux_videodev_h"
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
vfwcap_demuxer_deps="capCreateCaptureWindow"
vfwcap_demuxer_extralibs="-lvfw32"
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
x11_grab_device_demuxer_extralibs="-lX11 -lXext"

# protocols
gopher_protocol_deps="network"
http_protocol_deps="network"
rtp_protocol_deps="udp_protocol"
tcp_protocol_deps="network"
udp_protocol_deps="network"

# filters
movie_filter_deps="avfilter_lavf"

# programs
ffplay_deps="sdl"
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
ffserver_extralibs='$ldl'


# default parameters

logfile="config.err"

# installation paths
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/ffmpeg'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"

# toolchain
ar="ar"
cc_default="gcc"
host_cc_default="gcc"
ln_s="ln -sf"
nm_default="nm"
objformat="elf"
ranlib="ranlib"
strip="strip"
yasmexe="yasm"

# machine
arch=$(uname -m)
cpu="generic"

# OS
target_os=$(tolower $(uname -s))
host_os=$target_os

# configurable options
enable debug
enable fastdiv
enable ffmpeg
enable ffplay
enable ffserver
enable ipv6
enable mpegaudio_hp
enable network
enable optimizations
enable protocols
enable static
enable stripping
enable swscale_alpha

# build settings
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
SHFLAGS='-shared -Wl,-soname,$$(@F)'
FFSERVERLDFLAGS=-Wl,-E
LIBPREF="lib"
LIBSUF=".a"
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
SLIBPREF="lib"
SLIBSUF=".so"
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'

host_cflags='-O3 -g -Wall'
host_libs='-lm'

target_path='.'

# gcc stupidly only outputs the basename of targets with -MM, but we need the
# full relative path for objects in subdirectories for non-recursive Make.
DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'

# find source path
source_path="$(dirname "$0")"
enable source_path_used
if test -z "$source_path" -o "$source_path" = "." ; then
    source_path="$(pwd)"
    disable source_path_used
else
    source_path="$(cd "$source_path"; pwd)"
    echo "$source_path" | grep -q '[[:blank:]]' &&
        die "Out of tree builds are impossible with whitespace in source path."
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
fi

FFMPEG_CONFIGURATION=`echo "$@" | sed -e 's,\",\\\",g'`

find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
}

ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)

enable $ARCH_EXT_LIST \
       $DECODER_LIST \
       $ENCODER_LIST \
       $PARSER_LIST \
       $BSF_LIST \
       $DEMUXER_LIST \
       $MUXER_LIST \
       $FILTER_LIST \
       $PROTOCOL_LIST \
       $INDEV_LIST \
       $OUTDEV_LIST \

die_unknown(){
    echo "Unknown option \"$1\"."
    echo "See $0 --help for available options."
    exit 1
}

show_list() {
    suffix=_$1
    shift
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
    exit 0
}

for opt do
    optval="${opt#*=}"
    case "$opt" in
    --extra-cflags=*) add_cflags $optval
    ;;
    --extra-ldflags=*) add_ldflags $optval
    ;;
    --extra-libs=*) add_extralibs $optval
    ;;
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
    ;;
    --enable-debug=*) debuglevel="$optval"
    ;;
    --enable-*=*|--disable-*=*)
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
    case "$thing" in
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
        *) die_unknown "$opt" ;;
    esac
    ;;
    --enable-?*|--disable-?*)
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
    if is_in $option $COMPONENT_LIST; then
        eval $action \$$(toupper ${option%s})_LIST
    elif is_in $option $CMDLINE_SELECT; then
        $action $option
    else
        die_unknown $opt
    fi
    ;;
    --list-*)
        NAME="${opt#--list-}"
        is_in $NAME $COMPONENT_LIST || die_unknown $opt
        NAME=${NAME%s}
        eval show_list $NAME \$$(toupper $NAME)_LIST
    ;;
    --help|-h) show_help
    ;;
    *)
    optname="${opt%%=*}"
    optname="${optname#--}"
    optname=$(echo "$optname" | sed 's/-/_/g')
    is_in $optname $CMDLINE_SET || die_unknown $opt
    eval $optname='$optval'
    ;;
    esac
done

disabled logging && logfile=/dev/null

echo "# $0 $@" > $logfile
set >> $logfile

test -n "$cross_prefix" && enable cross_compile

ar="${cross_prefix}${ar}"
cc_default="${cross_prefix}${cc_default}"
nm_default="${cross_prefix}${nm_default}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

sysinclude_default="${sysroot}/usr/include"

set_default cc nm sysinclude
as_default=$cc
enabled cross_compile || host_cc_default=$cc
set_default host_cc

exesuf() {
    case $1 in
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
    esac
}

EXESUF=$(exesuf $target_os)
HOSTEXESUF=$(exesuf $host_os)

# set temporary file name
: ${TMPDIR:=$TEMPDIR}
: ${TMPDIR:=$TMP}
: ${TMPDIR:=/tmp}

if ! check_cmd type mktemp; then
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
        die "Unable to create temoporary file in $TMPDIR."
    append TMPFILES $tmp
    eval $1=$tmp
}

trap 'rm -f -- $TMPFILES' EXIT
trap exit HUP INT TERM

tmpfile TMPC  .c
tmpfile TMPE  $EXESUF
tmpfile TMPH  .h
tmpfile TMPO  .o
tmpfile TMPS  .S
tmpfile TMPSH .sh

unset -f mktemp

# make sure we can execute files in $TMPDIR
cat > $TMPSH 2>> $logfile <<EOF
#! /bin/sh
EOF
chmod +x $TMPSH >> $logfile 2>&1
if ! $TMPSH >> $logfile 2>&1; then
    cat <<EOF
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
variable to another directory and make sure that it is not mounted noexec.
EOF
    die "Sanity test failed."
fi

if   $cc --version 2>/dev/null | grep -qi gcc; then
    cc_type=gcc
elif $cc --version 2>/dev/null | grep -q Intel; then
    cc_type=icc
elif $cc -v 2>&1 | grep -q xlc; then
    cc_type=xlc
elif $cc -V 2>/dev/null | grep -q Compaq; then
    cc_type=ccc
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
    debuglevel=3
    add_ldflags -Wl,-z,now # calls to libots crash without this
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
    test -d "$sysroot" || die "No valid sysroot specified."
    cc_type=armcc
    armcc_conf="$PWD/armcc.conf"
    $cc --arm_linux_configure                 \
        --arm_linux_config_file="$armcc_conf" \
        --configure_sysroot="$sysroot"        \
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
        die "Error creating armcc configuration file."
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
    as_default="${cross_prefix}gcc"
fi

test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"

set_default as

if test -n "$sysroot"; then
    case "$cc_type" in
        gcc)
            add_cflags  --sysroot="$sysroot"
            add_ldflags --sysroot="$sysroot"
        ;;
    esac
fi

# compiler sanity check
check_exec <<EOF
int main(void){ return 0; }
EOF
if test "$?" != 0; then
    echo "$cc is unable to create an executable file."
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
        echo "Only do this if you know what cross compiling means."
    fi
    die "C compiler test failed."
fi

check_cflags -std=c99
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
#include <stdlib.h>
EOF
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
#include <stdlib.h>
EOF

case "$arch" in
    alpha)
        arch="alpha"
        enable fast_64bit
        check_cflags -mieee
    ;;
    arm|armv[4567]*l)
        arch="arm"
    ;;
    avr32)
    ;;
    bfin)
        arch="bfin"
    ;;
    ia64)
        arch="ia64"
        enable fast_64bit
    ;;
    m68k)
        arch="m68k"
    ;;
    mips|mipsel|IP*)
        arch="mips"
    ;;
    mips64)
        arch="mips"
        enable fast_64bit
    ;;
    parisc|hppa)
        arch="parisc"
    ;;
    parisc64|hppa64)
        arch="parisc"
        enable fast_64bit
    ;;
    "Power Macintosh"|ppc|powerpc)
        arch="ppc"
        enable fast_unaligned
    ;;
    ppc64)
        arch="ppc"
        enable fast_64bit
        enable fast_unaligned
    ;;
    s390|s390x)
        arch="s390"
    ;;
    sh4|sh)
        arch="sh4"
    ;;
    sparc)
        arch="sparc"
    ;;
    sun4u|sparc64)
        arch="sparc"
        subarch="sparc64"
        enable fast_64bit
    ;;
    i386|i486|i586|i686|i86pc|BePC)
        arch="x86"
        subarch="x86_32"
        enable fast_unaligned
    ;;
    x86_64|amd64)
        arch="x86"
        subarch="x86_32"
        enable cmov
        enable fast_cmov
        enable fast_unaligned
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
        int test[sizeof(char*) - 7];
EOF
    ;;
    *)
        arch="unknown"
    ;;
esac

enable $arch $subarch

# OS specific
case $target_os in
    beos|haiku|zeta)
        prefix_default="$HOME/config"
        # helps building libavcodec
        add_cflags -DPIC -fomit-frame-pointer
        # 3 gcc releases known for BeOS, each with ugly bugs
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
        case "$gcc_version" in
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
            disable mmx
            ;;
          *20010315*) echo "BeBits gcc"
            add_cflags -fno-expensive-optimizations
            ;;
        esac
        SHFLAGS=-nostart
        # enable BeOS things
        enable audio_beos
        # no need for libm, but the inet stuff
        # Check for BONE
        # XXX: actually should check for NOT net_server
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
            network_extralibs="-lbind -lsocket"
        else
            enable beos_netserver
            network_extralibs="-lnet"
        fi ;;
    sunos)
        FFSERVERLDFLAGS=""
        SHFLAGS='-shared -Wl,-h,$$(@F)'
        network_extralibs="-lsocket -lnsl"
        add_cflags -D__EXTENSIONS__
        ;;
    netbsd)
        oss_demuxer_extralibs="-lossaudio"
        oss_muxer_extralibs="-lossaudio"
        ;;
    openbsd)
        disable need_memalign
        LIBOBJFLAGS='$(PIC)'
        SHFLAGS='-shared'
        oss_demuxer_extralibs="-lossaudio"
        oss_muxer_extralibs="-lossaudio"
        ;;
    freebsd)
        disable need_memalign
        ;;
    bsd/os)
        osextralibs="-lpoll -lgnugetopt"
        strip="strip -d"
        ;;
    darwin)
        disable need_memalign
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
        strip="strip -x"
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
        SLIBSUF=".dylib"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
        FFSERVERLDFLAGS=-Wl,-bind_at_load
        objformat="macho"
        enabled x86_64 && objformat="macho64"
        ;;
    mingw32*)
        target_os=mingw32
        LIBTARGET=i386
        if enabled x86_64; then
            disable need_memalign
            LIBTARGET=x64
        fi
        shlibdir_default="$bindir_default"
        disable ffserver
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
        objformat="win32"
        enable dos_paths
        if ! enabled x86_64; then
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
                die "ERROR: MinGW runtime version must be >= 3.15."
            enabled_any avisynth vfwcap_demuxer &&
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
            fi
        ;;
    cygwin*)
        target_os=cygwin
        shlibdir_default="$bindir_default"
        SLIBPREF="cyg"
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
        objformat="win32"
        enable dos_paths
        ;;
    *-dos|freedos|opendos)
        disable ffplay ffserver
        disable $INDEV_LIST $OUTDEV_LIST
        network_extralibs="-lsocket"
        objformat="coff"
        enable dos_paths
        ;;
    linux)
        enable dv1394
        ;;
    irix*)
        target_os=irix
        ranlib="echo ignoring ranlib"
        ;;
    os/2*)
        strip="lxlite"
        ln_s="cp -f"
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
        FFSERVERLDFLAGS=""
        LIBSUF="_s.a"
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
          echo PROTMODE >> $(SUBDIR)$(NAME).def; \
          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
          echo EXPORTS >> $(SUBDIR)$(NAME).def; \
          emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
        enable dos_paths
        ;;

    *)
        die "Unknown OS '$target_os'."
        ;;
esac

set_default $PATHS_LIST

add_extralibs $osextralibs

# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"

# we need to build at least one lib type
if ! enabled_any static shared; then
    cat <<EOF
At least one library type must be built.
Specify --enable-static to build the static libraries or --enable-shared to
build the shared libraries as well. To only build the shared libraries specify
--disable-static in addition to --enable-shared.
EOF
    exit 1;
fi

disabled static && LIBNAME=""

if enabled_any libfaad libfaadbin ; then
    if check_header faad.h; then
        check_cc <<EOF
#include <faad.h>
#ifndef FAAD2_VERSION
ok faad1
#endif
int main(void) { return 0; }
EOF
        test $? = 0 && enable libfaad2
    else
        die "FAAD test failed."
    fi
fi


if ! enabled gpl; then
    die_gpl_disabled(){
        name=$1
        shift
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
    }
    die_gpl_disabled "The Postprocessing code" postproc
    die_gpl_disabled "libx264"                 libx264
    die_gpl_disabled "libxvidcore"             libxvid
    die_gpl_disabled "FAAD2"                   libfaad2
    die_gpl_disabled "The X11 grabber"         x11grab
fi

if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
    die "libamr is nonfree and --enable-nonfree is not specified."
fi

check_deps $ARCH_EXT_LIST

test -z "$need_memalign" && need_memalign="$mmx"

#Darwin CC versions
if test $target_os = darwin; then
    if enabled xlc; then
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
    else
        add_cflags -pipe
        check_cflags -force_cpusubtype_ALL
        check_cflags -Wno-sign-compare
        enabled shared || check_cflags -mdynamic-no-pic
    fi
fi

disabled optimizations || check_cflags -fomit-frame-pointer

# Add processor-specific flags
if test $cpu != "generic"; then
    warn_altivec(){
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
    }
    case $cpu in
        601|ppc601|PowerPC601)
            add_cflags -mcpu=601
            warn_altivec enabled PPC601
        ;;
        603*|ppc603*|PowerPC603*)
            add_cflags -mcpu=603
            warn_altivec enabled PPC603
        ;;
        604*|ppc604*|PowerPC604*)
            add_cflags -mcpu=604
            warn_altivec enabled PPC604
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
            add_cflags -mcpu=750 -mpowerpc-gfxopt
            warn_altivec enabled PPC75x
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
            warn_altivec disabled PPC745x
        ;;
        74*|ppc74*|PowerPC74*)
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
            warn_altivec disabled PPC74xx
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
            warn_altivec disabled PPC970
            enable ppc64
        ;;
        Cell|CELL|cell)
            add_cflags -mcpu=cell
            warn_altivec disabled Cell
            enable ppc64
        ;;
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
            add_cflags -march=$cpu
            disable cmov
        ;;
        # targets that do support conditional mov (cmov)
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
            add_cflags -march=$cpu
            enable cmov
            enable fast_cmov
        ;;
        # targets that do support conditional mov but on which it's slow
        pentium4|pentium4m|prescott|nocona)
            add_cflags -march=$cpu
            enable cmov
            disable fast_cmov
        ;;
        sparc64)
            add_cflags -mcpu=v9
        ;;
        arm11*|cortex*)
            add_cflags -mcpu=$cpu
            enable fast_unaligned
        ;;
        armv*)
            add_cflags -march=$cpu
        ;;
        arm*)
            add_cflags -mcpu=$cpu
        ;;
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
            enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
        ;;
        *)
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
        ;;
    esac
fi

check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
sym=$($nm -P -g $TMPO | grep ff_extern)
extern_prefix=${sym%%ff_extern*}

check_cc <<EOF && enable inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF

if enabled x86; then
    # check whether EBP is available on x86
    # As 'i' is stored on the stack, this program will crash
    # if the base pointer is used to access it because the
    # base pointer is cleared in the inline assembly code.
    check_exec_crash <<EOF && enable ebp_available
    volatile int i=0;
    __asm__ volatile (
        "xorl %%ebp, %%ebp"
    ::: "%ebp");
    return i;
EOF

    # check wether EBX is available on x86
    check_asm ebx_available '"":::"%ebx"'

    # check whether more than 10 operands are supported
    check_cc <<EOF && enable ten_operands
int main(void) {
    int x=0;
    __asm__ volatile(
        ""
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
    );
    return 0;
}
EOF

    # check whether binutils is new enough to compile SSSE3/MMX2
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'

    check_asm bswap '"bswap %%eax" ::: "%eax"'

    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
    enabled     x86_64        && append YASMFLAGS "-m amd64"
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
    case "$objformat" in
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
        *)                    append YASMFLAGS "-DPREFIX"  ;;
    esac
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
fi

# check for assembler specific support

enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'

# check for SIMD availability

# AltiVec flags: The FSF version of GCC differs from the Apple version
if enabled altivec; then
    check_cflags -maltivec -mabi=altivec &&
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
        check_cflags -faltivec

    # check if our compiler supports Motorola AltiVec C API
    check_cc <<EOF || disable altivec
$inc_altivec_h
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF

    # check if our compiler supports braces for vector declarations
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
$inc_altivec_h
int main (void) { (vector int) {1}; return 0; }
EOF
fi

# We have to check if pld is a nop and disable it.
enabled arm     && check_asm pld     '"pld [r0]"'
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc

enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc

# ---
# big/little-endian test
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian

# ---
# check availability of some header files

if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
fi

# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }

check_func  fork
check_func  gethrtime
check_func  getrusage
check_func  inet_aton $network_extralibs
check_func  memalign
check_func  mkstemp
check_func  posix_memalign
check_func_headers io.h setmode
check_func_headers windows.h GetProcessTimes
check_func_headers windows.h VirtualAlloc

check_header conio.h
check_header dlfcn.h
check_header malloc.h
check_header poll.h
check_header sys/mman.h
check_header sys/resource.h
check_header sys/select.h
check_header termios.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
check_header X11/extensions/XvMClib.h

if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
fi

disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib

# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if enabled pthreads; then
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
        add_extralibs -pthread
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
        add_extralibs -pthreads
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
    elif ! check_lib pthread.h pthread_create -lpthread; then
        die "ERROR: can't find pthreads library"
    fi
fi

for thread in $THREADS_LIST; do
    if enabled $thread; then
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
            thread_type="$thread"
    fi
done

check_lib math.h sin -lm


# test for C99 functions in math.h
for func in llrint lrint lrintf round roundf truncf; do
    check_exec <<EOF && enable $func || disable $func
#include <math.h>
int main(void) { return ($func(3.999f) > 0)?0:1; }
EOF
done

# these are off by default, so fail if requested and not available
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
                        die "ERROR: libx264 version must be >= 0.65."; }
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib

# disable oggivorbis decoder if it's not available
disabled oggivorbis_decoder || check_header ivorbiscodec.h || disable oggivorbis_decoder

# libdc1394 check
if enabled libdc1394; then
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
        enable libdc1394_2; } ||
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
        enable libdc1394_1; } ||
    die "ERROR: No version of libdc1394 found "
fi


_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
    check_cc <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
done

##########################################
# SDL check

disable sdl_too_old
disable sdl
SDL_CONFIG="${cross_prefix}sdl-config"
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
    temp_cflags $sdl_cflags
    temp_extralibs $("${SDL_CONFIG}" --libs)
    if check_lib2 SDL.h SDL_Init; then
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
        if test "$_sdlversion" -lt 121 ; then
            enable sdl_too_old
        else
            enable sdl
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
#include <SDL.h>
int main(int argc, char **argv){
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
    int w = vi->current_w;
    return 0;
}
EOF
        fi
    fi
    restore_flags
fi

texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html

##########################################
# Network check

if enabled network; then
    check_type "sys/types.h sys/socket.h" socklen_t
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
        network_extralibs="-lws2_32"
        check_type ws2tcpip.h socklen_t
        check_func_headers winsock2.h closesocket
    fi
fi

##########################################
# IPv6 check

enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main(void) {
    struct sockaddr_storage saddr;
    struct ipv6_mreq mreq6;
    getaddrinfo(0,0,0,0);
    getnameinfo(0,0,0,0,0,0,0);
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
}
EOF

check_header linux/videodev.h
check_header linux/videodev2.h
check_header sys/videoio.h

check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32

# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
{ check_header dev/bktr/ioctl_meteor.h &&
  check_header dev/bktr/ioctl_bt848.h; } ||
{ check_header machine/ioctl_meteor.h &&
  check_header machine/ioctl_bt848.h; } ||
{ check_header dev/video/meteor/ioctl_meteor.h &&
  check_header dev/video/bktr/ioctl_bt848.h; } ||
check_header dev/ic/bt8xx.h

check_header sys/soundcard.h
check_header soundcard.h

check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound

# deal with the X11 frame grabber
enabled x11grab                         &&
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
check_func XOpenDisplay -lX11           &&
check_func XShmCreateImage -lX11 -lXext

enabled debug && add_cflags -g"$debuglevel"

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
check_cflags -Wall
check_cflags -Wno-switch
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
check_cflags -Wno-pointer-sign
check_cflags -Wcast-qual
check_cflags -Wwrite-strings
check_cflags -Wtype-limits
check_cflags -Wundef
enabled extra_warnings && check_cflags -Winline

# add some linker flags
check_ldflags -Wl,--warn-common
check_ldflags -Wl,--as-needed
check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
check_ldflags -Wl,-Bsymbolic

if enabled small; then
    check_cflags -Os            # not all compilers support -Os
    optimizations="small"
elif enabled optimizations; then
    if enabled xlc; then
        add_cflags  -O5
        add_ldflags -O5
    elif enabled ccc; then
        add_cflags -fast
    else
        add_cflags -O3
    fi
fi
check_cflags -fno-math-errno
check_cflags -fno-signed-zeros

# add some flags for Intel C Compiler
if enabled icc; then
    # Just warnings, no remarks
    check_cflags -w1
    # -wd: Disable following warnings
    # 144, 167, 556: -Wno-pointer-sign
    # 10006: ignoring unknown option -fno-signed-zeros
    # 10156: ignoring option '-W'; no argument required
    check_cflags -wd144,167,556,10006,10156
    # 11030: Warning unknown option --as-needed
    # 10156: ignoring option '-export'; no argument required
    check_ldflags -wd10156,11030
    # Allow to compile with optimizations
    check_ldflags -march=$cpu
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
    enable ebp_available
elif enabled ccc; then
    # disable some annoying warnings
    add_cflags -msg_disable cvtu32to64
    add_cflags -msg_disable embedcomment
    add_cflags -msg_disable needconstext
    add_cflags -msg_disable nomainieee
    add_cflags -msg_disable ptrmismatch1
    add_cflags -msg_disable unreachcode
fi

# PIC flags for shared library objects where they are needed
if enabled shared; then
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
        case "${subarch-$arch}" in
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
        esac
    fi
fi

if enabled gprof; then
    add_cflags  -p
    add_ldflags -p
fi

# Find out if the .align argument is a power of two or not.
check_asm asmalign_pot '".align 3"'

enabled_any $DECODER_LIST      && enable decoders
enabled_any $ENCODER_LIST      && enable encoders
enabled_any $BSF_LIST          && enable bsfs
enabled_any $DEMUXER_LIST      && enable demuxers
enabled_any $MUXER_LIST        && enable muxers
enabled_any $FILTER_LIST       && enable filters
enabled_any $INDEV_LIST        && enable demuxers
enabled_any $OUTDEV_LIST       && enable muxers
enabled_any $PROTOCOL_LIST     && enable protocols

enabled_any $THREADS_LIST      && enable threads

check_deps $CONFIG_LIST       \
           $CONFIG_EXTRA      \
           $HAVE_LIST         \
           $DECODER_LIST      \
           $ENCODER_LIST      \
           $PARSER_LIST       \
           $BSF_LIST          \
           $DEMUXER_LIST      \
           $MUXER_LIST        \
           $FILTER_LIST       \
           $INDEV_LIST        \
           $OUTDEV_LIST       \
           $PROTOCOL_LIST     \

echo "install prefix            $prefix"
echo "source path               $source_path"
echo "C compiler                $cc"
echo ".align is power-of-two    $asmalign_pot"
echo "ARCH                      $arch ($cpu)"
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
fi
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
echo "big-endian                ${bigendian-no}"
if enabled x86; then
    echo "yasm                      ${yasm-no}"
    echo "MMX enabled               ${mmx-no}"
    echo "MMX2 enabled              ${mmx2-no}"
    echo "3DNow! enabled            ${amd3dnow-no}"
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
    echo "SSE enabled               ${sse-no}"
    echo "SSSE3 enabled             ${ssse3-no}"
    echo "CMOV enabled              ${cmov-no}"
    echo "CMOV is fast              ${fast_cmov-no}"
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
    echo "10 operands supported     ${ten_operands-no}"
fi
if enabled arm; then
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
    echo "ARMv6T2 enabled           ${armv6t2-no}"
    echo "ARM VFP enabled           ${armvfp-no}"
    echo "IWMMXT enabled            ${iwmmxt-no}"
    echo "NEON enabled              ${neon-no}"
fi
if enabled mips; then
    echo "MMI enabled               ${mmi-no}"
fi
if enabled ppc; then
    echo "AltiVec enabled           ${altivec-no}"
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
    echo "dcbzl available           ${dcbzl-no}"
    echo "performance report        ${powerpc_perf-no}"
fi
if enabled sparc; then
    echo "VIS enabled               ${vis-no}"
fi
echo "gprof enabled             ${gprof-no}"
echo "debug symbols             ${debug-no}"
echo "strip symbols             ${stripping-no}"
echo "optimizations             ${optimizations-no}"
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
echo "postprocessing support    ${postproc-no}"
echo "new filter support        ${avfilter-no}"
echo "filters using lavformat   ${avfilter_lavf-no}"
echo "network support           ${network-no}"
if enabled network; then
    echo "IPv6 support              ${ipv6-no}"
fi
echo "threading support         ${thread_type-no}"
echo "SDL support               ${sdl-no}"
if enabled sdl_too_old; then
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
fi
echo "Sun medialib support      ${mlib-no}"
echo "AVISynth enabled          ${avisynth-no}"
echo "libamr-nb support         ${libamr_nb-no}"
echo "libamr-wb support         ${libamr_wb-no}"
echo "libdc1394 support         ${libdc1394-no}"
echo "libdirac enabled          ${libdirac-no}"
echo "libfaac enabled           ${libfaac-no}"
echo "libfaad enabled           ${libfaad-no}"
echo "libfaad dlopened          ${libfaadbin-no}"
echo "libgsm enabled            ${libgsm-no}"
echo "libmp3lame enabled        ${libmp3lame-no}"
echo "libnut enabled            ${libnut-no}"
echo "libopenjpeg enabled       ${libopenjpeg-no}"
echo "libschroedinger enabled   ${libschroedinger-no}"
echo "libspeex enabled          ${libspeex-no}"
echo "libtheora enabled         ${libtheora-no}"
echo "libvorbis enabled         ${libvorbis-no}"
echo "libx264 enabled           ${libx264-no}"
echo "libxvid enabled           ${libxvid-no}"
echo "zlib enabled              ${zlib-no}"
echo "bzlib enabled             ${bzlib-no}"
echo

for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
    echo "Enabled ${type}s:"
    eval list=\$$(toupper $type)_LIST
    for part in $list; do
        enabled $part && echo ${part%_*}
    done | sort | pr -3 -t
    echo
done

license="LGPL"
if enabled nonfree; then
    license="unredistributable"
elif enabled gpl; then
    license="GPL"
fi

echo "License: $license"

echo "Creating config.mak and config.h..."

echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
echo "#define FFMPEG_CONFIG_H" >> $TMPH
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH

echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
echo "prefix=$prefix" >> config.mak
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
echo "CC=$cc" >> config.mak
echo "AS=$as" >> config.mak
echo "YASM=$yasmexe" >> config.mak
echo "AR=$ar" >> config.mak
echo "RANLIB=$ranlib" >> config.mak
echo "LN_S=$ln_s" >> config.mak
enabled stripping &&
    echo "STRIP=$strip" >> config.mak ||
    echo "STRIP=echo ignoring strip" >> config.mak

echo "OPTFLAGS=$CFLAGS" >> config.mak
echo "LDFLAGS=$LDFLAGS" >> config.mak
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
echo "SHFLAGS=$SHFLAGS" >> config.mak
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
echo "BUILD_STATIC=$static" >> config.mak
echo "BUILDSUF=$build_suffix" >> config.mak
echo "FULLNAME=$FULLNAME" >> config.mak
echo "LIBPREF=$LIBPREF" >> config.mak
echo "LIBSUF=$LIBSUF" >> config.mak
echo "LIBNAME=$LIBNAME" >> config.mak
echo "SLIBPREF=$SLIBPREF" >> config.mak
echo "SLIBSUF=$SLIBSUF" >> config.mak
echo "EXESUF=$EXESUF" >> config.mak
echo "EXTRA_VERSION=$extra_version" >> config.mak
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
echo "HOSTCC=$host_cc" >> config.mak
echo "HOSTCFLAGS=$host_cflags" >> config.mak
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
echo "HOSTLIBS=$host_libs" >> config.mak
echo "TARGET_EXEC=$target_exec" >> config.mak
echo "TARGET_PATH=$target_path" >> config.mak

if enabled bigendian; then
    echo "WORDS_BIGENDIAN=yes" >> config.mak
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
fi

if enabled sdl; then
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
fi
if enabled texi2html; then
    echo "BUILD_DOC=yes" >> config.mak
fi

get_version(){
    name=$1
    file=$source_path/$2
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
    lcname=$(tolower $name)
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
}

get_version LIBSWSCALE  libswscale/swscale.h
get_version LIBPOSTPROC libpostproc/postprocess.h
get_version LIBAVCODEC  libavcodec/avcodec.h
get_version LIBAVDEVICE libavdevice/avdevice.h
get_version LIBAVFORMAT libavformat/avformat.h
get_version LIBAVUTIL   libavutil/avutil.h
get_version LIBAVFILTER libavfilter/avfilter.h

if enabled shared; then
    echo "BUILD_SHARED=yes" >> config.mak
    echo "PIC=-fPIC -DPIC" >> config.mak
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
fi
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
echo "EXTRALIBS=$extralibs" >> config.mak

echo "ARCH=$arch" >> config.mak

print_config ARCH_   $TMPH config.mak $ARCH_LIST
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
                                      $CONFIG_EXTRA      \
                                      $DECODER_LIST      \
                                      $ENCODER_LIST      \
                                      $PARSER_LIST       \
                                      $BSF_LIST          \
                                      $DEMUXER_LIST      \
                                      $MUXER_LIST        \
                                      $FILTER_LIST       \
                                      $PROTOCOL_LIST     \
                                      $INDEV_LIST        \
                                      $OUTDEV_LIST       \

echo "#define restrict $_restrict" >> $TMPH

if enabled small; then
    echo "#define av_always_inline"  >> $TMPH
fi


# Apparently it's not possible to portably echo a backslash.
enabled asmalign_pot &&
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH

echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH

echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH

# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
cmp -s $TMPH config.h &&
    echo "config.h is unchanged" ||
    mv -f $TMPH config.h

# build tree in object directory if source path is different from current one
if enabled source_path_used; then
    DIRS="\
        doc               \
        libavcodec        \
        libavcodec/alpha  \
        libavcodec/arm    \
        libavcodec/bfin   \
        libavcodec/mlib   \
        libavcodec/ppc    \
        libavcodec/sh4    \
        libavcodec/sparc  \
        libavcodec/x86    \
        libavdevice       \
        libavfilter       \
        libavformat       \
        libavutil         \
        libpostproc       \
        libswscale        \
        libswscale/bfin   \
        libswscale/mlib   \
        libswscale/ppc    \
        libswscale/sparc  \
        libswscale/x86    \
        tests             \
        tools             \
        "
    FILES="\
        Makefile             \
        common.mak           \
        subdir.mak           \
        doc/texi2pod.pl      \
        libavcodec/Makefile  \
        libavdevice/Makefile \
        libavfilter/Makefile \
        libavformat/Makefile \
        libavutil/Makefile   \
        libpostproc/Makefile \
        libswscale/Makefile  \
        "
    for dir in $DIRS ; do
        mkdir -p $dir
    done
    for f in $FILES ; do
        $ln_s "$source_path/$f" $f
    done
fi


# build pkg-config files

pkgconfig_generate(){
name=$1
shortname=${name#lib}${build_suffix}
comment=$2
version=$3
libs=$4
requires=$5
cat <<EOF > $name/$name.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=$libdir
includedir=$incdir

Name: $name
Description: $comment
Version: $version
Requires: $(disabled shared && echo $requires)
Requires.private: $(enabled shared && echo $requires)
Conflicts:
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
Libs.private: $(enabled shared && echo $libs)
Cflags: -I\${includedir}
EOF
cat <<EOF > $name/$name-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}
includedir=${source_path}

Name: $name
Description: $comment
Version: $version
Requires: $requires
Conflicts:
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
Cflags: -I\${includedir}
EOF
}

pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
enabled avfilter &&
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
enabled postproc &&
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
