Skip to content
Snippets Groups Projects
configure 75.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • # decoders / encoders / hardware accelerators
    
    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_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"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    h263_vaapi_hwaccel_deps="va_va_h"
    
    h263p_encoder_select="aandct"
    
    h264_decoder_select="golomb"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    h264_vaapi_hwaccel_deps="va_va_h"
    
    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"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    mpeg2_vaapi_hwaccel_deps="va_va_h"
    mpeg4_vaapi_hwaccel_deps="va_va_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"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    vc1_vaapi_hwaccel_deps="va_va_h"
    
    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"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    wmv3_vaapi_hwaccel_deps="va_va_h"
    
    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"
    
    libfaadbin_decoder_extralibs='$ldl'
    
    libgsm_decoder_deps="libgsm"
    libgsm_encoder_deps="libgsm"
    
    libgsm_ms_decoder_deps="libgsm"
    libgsm_ms_encoder_deps="libgsm"
    
    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"
    
    jack_demuxer_deps="jack_jack_h"
    jack_demuxer_extralibs="-ljack"
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    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"
    
    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"
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    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"
    
    
    movie_filter_deps="avfilter_lavf"
    
    # programs
    
    ffplay_deps="sdl"
    
    ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
    
    ffserver_extralibs='$ldl'
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    # default parameters
    
    
    # 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"
    
    host_cc_default="gcc"
    
    ln_s="ln -sf"
    
    objformat="elf"
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    ranlib="ranlib"
    
    yasmexe="yasm"
    
    target_os=$(tolower $(uname -s))
    
    
    # configurable options
    
    enable fastdiv
    
    enable ffmpeg
    enable ffplay
    enable ffserver
    enable ipv6
    enable mpegaudio_hp
    enable network
    
    enable static
    
    add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
    
    SHFLAGS='-shared -Wl,-soname,$$(@F)'
    
    FULLNAME='$(NAME)$(BUILDSUF)'
    LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
    
    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'
    
    
    # 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,"'
    
    source_path="$(dirname "$0")"
    
    enable source_path_used
    
    if test -z "$source_path" -o "$source_path" = "." ; then
    
        disable source_path_used
    
        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."
    
    for v in "$@"; do
        r="${v#*=}"
        l="${v%$r}"
        test "$r" = "${r#* }" || r="'$r'"
        FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
    done
    
    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)
    
    HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
    
    PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
    BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
    MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
    DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
    OUTDEV_LIST=$(find_things   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 \
    
    
    die_unknown(){
        echo "Unknown option \"$1\"."
        echo "See $0 --help for available options."
        exit 1
    }
    
    
    Ramiro Polla's avatar
    Ramiro Polla committed
        suffix=_$1
        shift
        echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
    
        --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"
        ;;
    
        eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
    
            encoder|decoder|hwaccel|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="${optname#--}"
        optname=$(echo "$optname" | sed 's/-/_/g')
        is_in $optname $CMDLINE_SET || die_unknown $opt
        eval $optname='$optval'
    
    Måns Rullgård's avatar
    Måns Rullgård committed
    disabled logging && logfile=/dev/null
    
    
    echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
    
    Måns Rullgård's avatar
    Måns Rullgård committed
    set >> $logfile
    
    
    test -n "$cross_prefix" && enable cross_compile
    
    
    ar="${cross_prefix}${ar}"
    
    cc_default="${cross_prefix}${cc_default}"
    
    Måns Rullgård's avatar
    Måns Rullgård committed
    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}
    
    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,"'
    
        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"
    
    fi
    
    test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
    
    
    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"
    
        bfin)
            arch="bfin"
        ;;
        ia64)
            arch="ia64"
    
            enable fast_64bit
    
            arch="mips"
        ;;
    
        mips64)
            arch="mips"
            enable fast_64bit
        ;;
    
            arch="parisc"
        ;;
    
            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
    
    enable $arch $subarch
    
            prefix_default="$HOME/config"
    
            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)'
    
            ;;
        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
    
    Loren Merritt's avatar
    Loren Merritt committed
            objformat="macho"
    
            enabled x86_64 && objformat="macho64"
    
            LIBTARGET=i386
    
                disable need_memalign
                LIBTARGET=x64
            fi
    
            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,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
    
    Loren Merritt's avatar
    Loren Merritt committed
            objformat="win32"
    
            check_cflags -fno-common
    
    Ramiro Polla's avatar
    Ramiro Polla committed
                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
    
            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'
    
    Loren Merritt's avatar
    Loren Merritt committed
            objformat="win32"
    
            check_cflags -fno-common
    
    Michael Kostylev's avatar
    Michael Kostylev committed
        *-dos|freedos|opendos)
    
            disable ffplay ffserver
    
    Michael Kostylev's avatar
    Michael Kostylev committed
            disable $INDEV_LIST $OUTDEV_LIST
            network_extralibs="-lsocket"
    
            objformat="coff"
    
        os/2*)
            strip="lxlite"
            ln_s="cp -f"
            FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
    
    Måns Rullgård's avatar
    Måns Rullgård committed
            SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
    
            FFSERVERLDFLAGS=""
    
            SLIBPREF=""
            SLIBSUF=".dll"
            SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
            SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
    
    Måns Rullgård's avatar
    Måns Rullgård committed
            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'
    
            die "Unknown OS '$target_os'."
    
    set_default $PATHS_LIST
    
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    # 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
    
    Diego Biurrun's avatar
    Diego Biurrun committed
            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."
    
        enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
    
    }
    
    die_license_disabled gpl libfaad2
    die_license_disabled gpl libx264
    die_license_disabled gpl libxvid
    die_license_disabled gpl postproc
    die_license_disabled gpl x11grab
    
    die_license_disabled nonfree libamr_nb
    die_license_disabled nonfree libamr_wb
    
    die_license_disabled nonfree libfaac
    
    check_deps $ARCH_EXT_LIST
    
    test -z "$need_memalign" && need_memalign="$mmx"
    
    
    if test $target_os = darwin; then
    
            add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
    
            add_cflags -pipe
            check_cflags -force_cpusubtype_ALL
            check_cflags -Wno-sign-compare
    
            enabled shared || check_cflags -mdynamic-no-pic
    
    disabled optimizations || check_cflags -fomit-frame-pointer
    
        warn_altivec(){
            $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
    
            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
    
    Måns Rullgård's avatar
    Måns Rullgård committed
                enable ppc64
    
                add_cflags -mcpu=cell
    
                warn_altivec disabled Cell
    
    Måns Rullgård's avatar
    Måns Rullgård committed
                enable ppc64 ldbrx
    
            # 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
    
            ;;
            # 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
    
                add_cflags -mcpu=v9
    
                add_cflags -mcpu=$cpu
    
                add_cflags -march=$cpu
    
                add_cflags -mcpu=$cpu
    
    Måns Rullgård's avatar
    Måns Rullgård committed
            ;;
    
            ev4|ev45|ev5|ev56|pca56|ev6|ev67)
    
                enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
    
            mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
                add_cflags -march=$cpu
            ;;
    
                echo "WARNING: Unknown CPU \"$cpu\", ignored."
    
    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
    
        __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"'
    
    Loren Merritt's avatar
    Loren Merritt committed
    
    
        YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
    
    Loren Merritt's avatar
    Loren Merritt committed
        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" ;;
    
    Loren Merritt's avatar
    Loren Merritt committed
            *)                    append YASMFLAGS "-DPREFIX"  ;;
        esac
    
        disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
    
    # check for assembler specific support
    
    
    enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
    
    enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
    
    enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
    
    # 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>" ; } ||
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # check if our compiler supports Motorola AltiVec C API
    
        check_cc <<EOF || disable altivec
    
    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."
    
    int main (void) { (vector int) {1}; return 0; }
    
    # 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
    
    check_cc <<EOF || die "endian test failed"
    unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
    
    od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
    
    Nick Kurshev's avatar
    Nick Kurshev committed
    # ---
    # check availability of some header files
    
    
    if check_func dlopen; then
        ldl=
    elif check_func dlopen -ldl; then
        ldl=-ldl
    
    # 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  posix_memalign
    
    check_func_headers io.h setmode
    
    check_func_headers lzo/lzo1x.h lzo1x_999_compress
    
    check_func_headers windows.h GetProcessTimes
    
    check_func_headers windows.h VirtualAlloc
    
    check_header dlfcn.h
    check_header malloc.h
    
    check_header sys/resource.h
    
    check_header termios.h
    
    check_header vdpau/vdpau.h
    check_header vdpau/vdpau_x11.h
    
    check_header X11/extensions/XvMClib.h