Skip to content
Snippets Groups Projects
configure 82.7 KiB
Newer Older
  • Learn to ignore specific revisions
  •     host_cc
        host_cflags
        host_ldflags
        host_libs
    
    # code dependency declarations
    
    
    # architecture extensions
    
    armv5te_deps="arm"
    armv6_deps="arm"
    
    armv6t2_deps="arm"
    
    armvfp_deps="arm"
    iwmmxt_deps="arm"
    
    mmx_deps="x86"
    
    neon_deps="arm"
    
    sse_deps="mmx"
    ssse3_deps="sse"
    
    need_memalign="altivec neon sse"
    
    inline_asm_deps="!tms470"
    
    # decoders / encoders / hardware accelerators
    
    aac_decoder_select="fft mdct"
    
    aac_encoder_select="fft mdct"
    
    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="ac3_decoder"
    
    eamad_decoder_select="aandct"
    
    eatgq_decoder_select="aandct"
    
    eatqi_decoder_select="aandct"
    
    ffv1_decoder_select="golomb"
    flac_decoder_select="golomb"
    
    flashsv_decoder_select="zlib"
    flashsv_encoder_select="zlib"
    
    flv_encoder_select="h263_encoder"
    
    h261_encoder_select="aandct"
    h263_encoder_select="aandct"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    h263_vaapi_hwaccel_deps="va_va_h"
    
    h263_vaapi_hwaccel_select="vaapi h263_decoder"
    
    h263p_encoder_select="h263_encoder"
    
    h264_decoder_select="golomb"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    h264_vaapi_hwaccel_deps="va_va_h"
    
    h264_vaapi_hwaccel_select="vaapi"
    
    h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
    
    h264_vdpau_decoder_select="vdpau h264_decoder"
    
    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="h263_encoder"
    
    mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
    
    mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
    
    mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
    
    mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    mpeg2_vaapi_hwaccel_deps="va_va_h"
    
    mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
    
    Gwenole Beauchesne's avatar
    Gwenole Beauchesne committed
    mpeg4_vaapi_hwaccel_deps="va_va_h"
    
    mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
    
    mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
    
    mpeg_xvmc_decoder_select="mpegvideo_decoder"
    
    msmpeg4v1_encoder_select="h263_encoder"
    msmpeg4v2_encoder_select="h263_encoder"
    msmpeg4v3_encoder_select="h263_encoder"
    
    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="h263_encoder"
    rv20_encoder_select="h263_encoder"
    
    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"
    
    theora_decoder_select="vp3_decoder"
    
    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_vaapi_hwaccel_select="vaapi vc1_decoder"
    
    vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
    
    vc1_vdpau_decoder_select="vdpau vc1_decoder"
    
    vorbis_decoder_select="fft mdct"
    vorbis_encoder_select="fft mdct"
    
    vp6a_decoder_select="vp6_decoder"
    vp6f_decoder_select="vp6_decoder"
    
    wmav1_decoder_select="fft mdct"
    wmav1_encoder_select="fft mdct"
    wmav2_decoder_select="fft mdct"
    wmav2_encoder_select="fft mdct"
    
    wmv1_encoder_select="h263_encoder"
    
    wmv2_encoder_select="h263_encoder"
    
    wmv3_decoder_select="vc1_decoder"
    wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
    wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
    
    zlib_decoder_select="zlib"
    zlib_encoder_select="zlib"
    zmbv_decoder_select="zlib"
    zmbv_encoder_select="zlib"
    
    # external libraries
    
    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"
    
    libopencore_amrnb_decoder_deps="libopencore_amrnb"
    libopencore_amrnb_encoder_deps="libopencore_amrnb"
    libopencore_amrwb_decoder_deps="libopencore_amrwb"
    
    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"
    
    asf_stream_muxer_select="asf_muxer"
    
    avisynth_demuxer_deps="avisynth"
    dirac_demuxer_deps="dirac_parser"
    
    libnut_demuxer_deps="libnut"
    libnut_muxer_deps="libnut"
    
    matroska_audio_muxer_select="matroska_muxer"
    
    matroska_demuxer_suggest="zlib bzlib"
    mov_demuxer_suggest="zlib"
    mp3_demuxer_deps="mpegaudio_parser"
    
    mp4_muxer_select="mov_muxer"
    mpegtsraw_demuxer_select="mpegts_demuxer"
    mxf_d10_muxer_select="mxf_muxer"
    psp_muxer_select="mov_muxer"
    
    rtp_muxer_deps="network rtp_protocol"
    rtsp_demuxer_deps="sdp_demuxer"
    sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
    
    tg2_muxer_select="mov_muxer"
    tgp_muxer_select="mov_muxer"
    
    w64_demuxer_deps="wav_demuxer"
    
    alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
    alsa_indev_extralibs="-lasound"
    alsa_outdev_deps="alsa_asoundlib_h"
    alsa_outdev_extralibs="-lasound"
    audio_beos_indev_deps="audio_beos"
    audio_beos_indev_extralibs="-lmedia -lbe"
    audio_beos_outdev_deps="audio_beos"
    audio_beos_outdev_extralibs="-lmedia -lbe"
    bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
    dv1394_indev_deps="dv1394 dv_demuxer"
    jack_indev_deps="jack_jack_h"
    jack_indev_extralibs="-ljack"
    libdc1394_indev_deps="libdc1394"
    oss_indev_deps_any="soundcard_h sys_soundcard_h"
    oss_outdev_deps_any="soundcard_h sys_soundcard_h"
    v4l_indev_deps="linux_videodev_h"
    v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
    vfwcap_indev_deps="capCreateCaptureWindow"
    vfwcap_indev_extralibs="-lvfw32"
    x11_grab_device_indev_deps="x11grab XShmCreateImage"
    x11_grab_device_indev_extralibs="-lX11 -lXext"
    
    # protocols
    
    gopher_protocol_deps="network"
    
    Måns Rullgård's avatar
    Måns Rullgård committed
    rtmp_protocol_deps="tcp_protocol"
    
    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
    
    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='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
    
    # 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='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
    
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
    
    source_path="$(dirname "$0")"
    
    enable source_path_used
    
    if test -f configure; 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."
    
        r=${v#*=}
        l=${v%"$r"}
        r=$(sh_quote "$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   outdev   OUTDEV   libavdevice/alldevices.c)
    INDEV_LIST=$(find_things    indev    _IN      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-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/--/action=/;s/-/ thing=/')
    
        is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
        eval list=\$$(toupper $thing)_LIST
    
        name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
        $action $(filter "$name" $list)
    
        eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
    
        if is_in $option $COMPONENT_LIST; then
    
            test $action = disable && action=unset
    
            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')
    
        if is_in $optname $CMDLINE_SET; then
            eval $optname='$optval'
        elif is_in $optname $CMDLINE_APPEND; then
            append $optname "$optval"
        else
             die_unknown $opt
        fi
    
    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"
    
    
    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 temporary 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
    
    
    filter_cflags=echo
    filter_cppflags=echo
    filter_asflags=echo
    
    
    if   $cc -v 2>&1 | grep -qi ^gcc; then
    
        if ! $cc -dumpversion | grep -q '^2\.'; then
            CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
            AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
        fi
    
    elif $cc --version 2>/dev/null | grep -q Intel; then
        cc_type=icc
    
        cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
    
        CC_DEPFLAGS='-MMD'
        AS_DEPFLAGS='-MMD'
    
    elif $cc -v 2>&1 | grep -q xlc; then
        cc_type=xlc
    
        cc_version="AV_STRINGIFY(__IBMC__)"
    
    elif $cc -V 2>/dev/null | grep -q Compaq; then
        cc_type=ccc
    
        cc_version="AV_STRINGIFY(__DECC_VER)"
    
        DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
    
        add_ldflags -Wl,-z,now # calls to libots crash without this
    
    elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
    
        test -d "$sysroot" || die "No valid sysroot specified."
        cc_type=armcc
    
        cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
    
        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"
    
        CC_DEPFLAGS='-MMD'
        AS_DEPFLAGS='-MMD'
    
    elif $cc -version 2>/dev/null | grep -q TMS470; then
        cc_type=tms470
    
        cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
    
        cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
        CC_O='-fr=$(@D)'
        as_default="${cross_prefix}gcc"
        ld_default="${cross_prefix}gcc"
        TMPO=$(basename $TMPC .c).o
        append TMPFILES $TMPO
        add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
    
        CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
        AS_DEPFLAGS='-MMD'
    
        filter_cflags=tms470_flags
        tms470_flags(){
            for flag; do
                case $flag in
                    -march=*|-mcpu=*)
                        case "${flag#*=}" in
                            armv7-a|cortex-a*)      echo -mv=7a8 ;;
                            armv7-r|cortex-r*)      echo -mv=7r4 ;;
                            armv7-m|cortex-m*)      echo -mv=7m3 ;;
                            armv6*|arm11*)          echo -mv=6   ;;
                            armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
                                                    echo -mv=5e  ;;
                            armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
                        esac
                        ;;
                    -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
                    -mfpu=vfp)      echo --float_support=vfpv2        ;;
    
                    -msoft-float)   echo --float_support=vfplib       ;;
    
                    -Os)            echo -O3 -mf=2                    ;;
                    -O[0-3])        echo $flag -mf=5                  ;;
                    -g)             echo -g -mn                       ;;
                esac
            done
        }
    
    elif $cc -v 2>&1 | grep -q clang; then
        cc_type=clang
        cc_version=__VERSION__
        CC_DEPFLAGS='-MMD'
        AS_DEPFLAGS='-MMD'
    
    elif $cc -V 2>&1 | grep -q Sun; then
        cc_type=suncc
        cc_version="AV_STRINGIFY(__SUNPRO_C)"
        DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\\\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
        DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
    
    fi
    
    test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
    
    
    : ${dep_cc_default:=$cc}
    
    : ${ld_default:=$cc}
    
    set_default as dep_cc ld
    
    test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
    test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
    
    
    add_asflags $extra_cflags
    
    if test -n "$sysroot"; then
        case "$cc_type" in
            gcc)
    
                add_cppflags --sysroot="$sysroot"
    
                add_ldflags --sysroot="$sysroot"
            ;;
    
            tms470)
                add_cppflags -I"$sysinclude"
                add_ldflags  --sysroot="$sysroot"
            ;;
    
            clang)
                add_cppflags -isysroot="$sysroot"
                add_ldflags -isysroot="$sysroot"
            ;;
    
    if test "$cpu" = host; then
        enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
    
        case "$cc_type" in
            gcc)
                check_native(){
                    $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
                    awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
                }
                cpu=$(check_native -march || check_native -mcpu)
            ;;
        esac
    
        test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
    fi
    
    
    # Add processor-specific flags
    case $cpu in
        601|ppc601|PowerPC601)
            cpuflags="-mcpu=601"
        ;;
        603*|ppc603*|PowerPC603*)
            cpuflags="-mcpu=603"
        ;;
        604*|ppc604*|PowerPC604*)
            cpuflags="-mcpu=604"
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
        ;;
        74*|ppc74*|PowerPC74*)
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
        ;;
        Cell|CELL|cell)
            cpuflags="-mcpu=cell"
            enable ldbrx
        ;;
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
            cpuflags="-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|amdfam10)
    
            cpuflags="-march=$cpu"
            enable cmov
            enable fast_cmov
        ;;
        # targets that do support conditional mov but on which it's slow
        pentium4|pentium4m|prescott|nocona)
            cpuflags="-march=$cpu"
            enable cmov
            disable fast_cmov
        ;;
        sparc64)
            cpuflags="-mcpu=v9"
        ;;
        arm11*|cortex*)
            cpuflags="-mcpu=$cpu"
            enable fast_unaligned
        ;;
        armv[67]*)
            cpuflags="-march=$cpu"
            enable fast_unaligned
        ;;
        armv*)
            cpuflags="-march=$cpu"
        ;;
        arm*)
            cpuflags="-mcpu=$cpu"
        ;;
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
            enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
        ;;
        bf*)
            cpuflags="-mcpu=$cpu"
        ;;
        mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
            cpuflags="-march=$cpu"
        ;;
    
        ap7[02]0[0-2])
            subarch="avr32_ap"
            cpuflags="-mpart=$cpu"
        ;;
        ap)
            subarch="avr32_ap"
            cpuflags="-march=$cpu"
        ;;
        uc3[ab]*)
            subarch="avr32_uc"
            cpuflags="-mcpu=$cpu"
        ;;
        uc)
            subarch="avr32_uc"
            cpuflags="-march=$cpu"
        ;;
    
        generic)
        ;;
        *)
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
        ;;
    esac
    
    add_cflags $cpuflags
    add_asflags $cpuflags
    
    
    # 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
    
    
    add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
    
    check_cflags -std=c99
    
    check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
    
    check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
    
    check_host_cflags -std=c99
    
    
    case "$arch" in
        alpha)
            arch="alpha"
            enable fast_64bit
    
            check_cflags -mieee
    
            spic=$shared
    
        arm|armv[4567]*l)
            arch="arm"
    
        bfin)
            arch="bfin"
        ;;
        ia64)
            arch="ia64"
    
            enable fast_64bit
    
            spic=$shared
    
            # HACK: currently fails to build if .bss is > 4MB and shared libs are built
            enabled shared && enable hardcoded_tables
    
            arch="mips"
    
            spic=$shared
    
            enable fast_64bit
    
            spic=$shared
    
            arch="parisc"
    
            spic=$shared
    
            arch="parisc"
            enable fast_64bit
    
            spic=$shared
    
        "Power Macintosh"|ppc|powerpc)
            arch="ppc"
            enable fast_unaligned
        ;;
        ppc64)
            arch="ppc"
    
            subarch="ppc64"
    
            enable fast_64bit
            enable fast_unaligned
        ;;
    
        s390|s390x)
            arch="s390"
        ;;
    
        sh4|sh)
            arch="sh4"
    
        sparc)
            arch="sparc"
    
            spic=$shared
    
        ;;
        sun4u|sparc64)
            arch="sparc"
            subarch="sparc64"
    
            enable fast_64bit
    
            spic=$shared
    
        i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
    
            arch="x86"
            subarch="x86_32"
            enable fast_unaligned
    
            check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
    
            int test[sizeof(char*) - 7];
    EOF
    
            if test "$subarch" = "x86_64"; then
                enable cmov
                enable fast_cmov
            fi
    
    enable $arch $subarch
    
    enabled spic && enable pic
    
            prefix_default="$HOME/config"
    
            add_cppflags -DPIC
            add_cflags -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)'
    
            enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
    
            add_cppflags -D__EXTENSIONS__
    
            oss_indev_extralibs="-lossaudio"
            oss_outdev_extralibs="-lossaudio"
    
            oss_indev_extralibs="-lossaudio"
            oss_outdev_extralibs="-lossaudio"
    
            ;;
        bsd/os)
            osextralibs="-lpoll -lgnugetopt"
            strip="strip -d"
            ;;
        darwin)
    
            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"
    
            enabled_any pic shared ||
    
                { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
    
            if test $target_os = "mingw32ce"; then
    
            LIBTARGET=i386
    
                LIBTARGET=x64
    
            elif enabled arm; then
                LIBTARGET=arm
    
            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)"; \
                install -d "$(LIBDIR)"; \
                install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
    
            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_indev &&
    
    Ramiro Polla's avatar
    Ramiro Polla committed
                    { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
    
                      die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
    
    Ramiro Polla's avatar
    Ramiro Polla committed
                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"