Skip to content
Snippets Groups Projects
configure 102 KiB
Newer Older
    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 --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
    CC_DEPFLAGS='-MMD'
    AS_DEPFLAGS='-MMD'
    cflags_speed='-O3'
    cflags_size='-Os'
    asflags_filter="filter_out -W${armcc_opt}*"
elif $cc -version 2>/dev/null | grep -q TMS470; then
    cc_type=tms470
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
    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'
    cflags_speed='-O3 -mf=5'
    cflags_size='-O3 -mf=2'
    cflags_filter=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        ;;
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
                -msoft-float)   echo --float_support=vfplib       ;;
                -g)             echo -g -mn                       ;;
elif $cc -v 2>&1 | grep -q clang; then
    cc_type=clang
    cc_ident=$($cc --version | head -n1)
    CC_DEPFLAGS='-MMD'
    AS_DEPFLAGS='-MMD'
    cflags_speed='-O3'
    cflags_size='-Os'
elif $cc -V 2>&1 | grep -q Sun; then
    cc_type=suncc
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
    add_ldflags -xc99
    cflags_speed='-O5'
    cflags_size='-O5 -xspace'
    cflags_filter=suncc_flags
    suncc_flags(){
        for flag; do
            case $flag in
                -march=*|-mcpu=*)
                    case "${flag#*=}" in
                        native)                   echo -xtarget=native       ;;
                        v9|niagara)               echo -xarch=sparc          ;;
                        ultrasparc)               echo -xarch=sparcvis       ;;
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
                        i586|pentium)             echo -xchip=pentium        ;;
                        i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
                        pentium3*|c3-2)           echo -xtarget=pentium3     ;;
                        pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
                        pentium4*)          echo -xtarget=pentium4           ;;
                        prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
                        *-sse3)             echo -xarch=sse3                 ;;
                        core2)              echo -xarch=ssse3 -xchip=core2   ;;
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
                        athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
                        k8|opteron|athlon64|athlon-fx)
                                                  echo -xarch=sse2a          ;;
                        athlon*)                  echo -xarch=pentium_proa   ;;
                    esac
                    ;;
                -std=c99)             echo -xc99              ;;
                -fomit-frame-pointer) echo -xregs=frameptr    ;;
                -fPIC)                echo -KPIC -xcode=pic32 ;;
                -W*,*)                echo $flag              ;;
                -f*-*|-W*)                                    ;;
                *)                    echo $flag              ;;
            esac
        done
    }
elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
    cc_type=pathscale
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    cflags_speed='-O2'
    cflags_size='-Os'
    cflags_filter='filter_out -Wdisabled-optimization'
elif $cc -v 2>&1 | grep -q Open64; then
    cc_type=open64
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    cflags_speed='-O2'
    cflags_size='-Os'
    cflags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
elif $cc -V 2>&1 | grep -q Portland; then
    cc_type=pgi
    cc_ident="PGI $($cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
    opt_common='-alias=ansi -Mlre -Mpre'
    cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
    cflags_size="-O2 -Munroll=c:1 $opt_common"
    cflags_noopt="-O1"
    cflags_filter=pgi_flags
    pgi_flags(){
        for flag; do
            case $flag in
                -fomit-frame-pointer) echo -Mnoframe ;;
                -g)                   echo -gopt ;;
                *)                    echo $flag ;;
            esac
        done
    }
test -n "$cc_type" && enable $cc_type ||
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
: ${dep_cc_default:=$cc}
: ${ld_default:=$cc}
set_default ar 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|llvm_gcc|clang)
            add_cppflags --sysroot="$sysroot"
            add_ldflags --sysroot="$sysroot"
        ;;
        tms470)
            add_cppflags -I"$sysinclude"
            add_ldflags  --sysroot="$sysroot"
        ;;
if test "$cpu" = host; then
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."

    case "$cc_type" in
            check_native(){
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
                sed -n "/cc1.*$1=/{
                            s/.*$1=\\([^ ]*\\).*/\\1/
                            p
                            q
                        }" $TMPE
            }
            cpu=$(check_native -march || check_native -mcpu)
        ;;
    esac

    test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
fi

# Deal with common $arch aliases
case "$arch" in
    arm*)
        arch="arm"
    ;;
    mips|mipsel|IP*)
        arch="mips"
    ;;
        arch="mips"
        subarch="mips64"
    ;;
    parisc|hppa)
        arch="parisc"
    ;;
    parisc64|hppa64)
        arch="parisc"
        subarch="parisc64"
    ;;
    "Power Macintosh"|ppc|powerpc)
        arch="ppc"
    ;;
        arch="ppc"
        subarch="ppc64"
    ;;
    s390|s390x)
        arch="s390"
    ;;
    sh4|sh)
        arch="sh4"
    ;;
    sun4u|sparc64)
        arch="sparc"
        subarch="sparc64"
    ;;
    i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
# Add processor-specific flags
if test "$cpu" = generic; then
    : do nothing
elif enabled ppc; then
    case $(tolower $cpu) in
        601|ppc601|powerpc601)
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=601"
Måns Rullgård's avatar
Måns Rullgård committed
        ;;
        603*|ppc603*|powerpc603*)
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=603"
Måns Rullgård's avatar
Måns Rullgård committed
        ;;
        604*|ppc604*|powerpc604*)
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=604"
Måns Rullgård's avatar
Måns Rullgård committed
        ;;
        g3|75*|ppc75*|powerpc75*)
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
Måns Rullgård's avatar
Måns Rullgård committed
        ;;
        g4|745*|ppc745*|powerpc745*)
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
        ;;
        74*|ppc74*|powerpc74*)
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
        ;;
        g5|970|ppc970|powerpc970)
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
        ;;
        power[3-7]*)
            cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
        ;;
Måns Rullgård's avatar
Måns Rullgård committed
            cpuflags="-mcpu=cell"
            enable ldbrx
        ;;
        e500v2)
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
            disable altivec
        ;;
        e500)
            cpuflags="-mcpu=8540 -mhard-float"
            disable altivec
        ;;
Måns Rullgård's avatar
Måns Rullgård committed
    esac
Måns Rullgård's avatar
Måns Rullgård committed
    case $cpu in
        i[345]86|pentium)
            cpuflags="-march=$cpu"
            disable mmx
        ;;
        # targets that do NOT support conditional mov (cmov)
        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|barcelona|atom)
Måns Rullgård's avatar
Måns Rullgård committed
            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
        ;;
    esac

elif enabled sparc; then

Måns Rullgård's avatar
Måns Rullgård committed
    case $cpu in
        niagara)
            cpuflags="-mcpu=$cpu"
            disable vis
        ;;
Måns Rullgård's avatar
Måns Rullgård committed
        sparc64)
            cpuflags="-mcpu=v9"
        ;;
    esac
    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
            case $cpu in
                cortex-a*)                               subarch=armv7a  ;;
                cortex-r*)                               subarch=armv7r  ;;
                cortex-m*)                 enable thumb; subarch=armv7m  ;;
                arm11*)                                  subarch=armv6   ;;
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
            esac

elif enabled alpha; then

    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"

elif enabled avr32; then

Måns Rullgård's avatar
Måns Rullgård committed
    case $cpu in
        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"
        ;;
    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

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|ia64|mips|parisc|sparc)
        spic=$shared
        subarch="x86_32"
        check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
        if test "$subarch" = "x86_64"; then
            spic=$shared
enable $subarch
enabled spic && enable pic
François Revol's avatar
François Revol committed
        host_libs=
        AVSERVERLDFLAGS=""
        SHFLAGS='-shared -Wl,-h,$$(@F)'
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
        add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
        # When using suncc to build, the Solaris linker will mark
        # an executable with each instruction set encountered by
        # the Solaris assembler.  As our libraries contain their own
        # guards for processor-specific code, instead suppress
        # generation of the HWCAPS ELF section on Solaris x86 only.
        enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
        nm_opts='-P -g'
        disable symver
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
        # On OpenBSD 4.5. the compiler does not use PIC unless
        # explicitly using -fPIC. Libav builds fine without PIC,
        # however the generated executable will not do anything
        # (simply quits with exit-code 1, no crash, no output).
        # Thus explicitly enable PIC here.
        disable symver
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
    dragonfly)
        disable symver
        ;;
    freebsd)
        add_extralibs -lpoll -lgnugetopt
        gas="gas-preprocessor.pl $cc"
        enabled ppc && add_asflags -force_cpusubtype_ALL
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
        add_ldflags -Wl,-dynamic,-search_paths_first
        SLIBSUF=".dylib"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
        AVSERVERLDFLAGS=-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="i386:x86-64"
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
        SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
        SLIB_INSTALL_LINKS=
        SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
        SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
        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"
        dlltool="${cross_prefix}dlltool"
        check_cflags -fno-common
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
Ramiro Polla's avatar
Ramiro Polla committed
                die "ERROR: MinGW runtime version must be >= 3.15."
        add_cppflags -U__STRICT_ANSI__
        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
        add_cppflags -U__STRICT_ANSI__
Michael Kostylev's avatar
Michael Kostylev committed
    *-dos|freedos|opendos)
        network_extralibs="-lsocket"
        objformat="coff"
        add_cppflags -U__STRICT_ANSI__
        add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
    os/2*)
        ln_s="cp -f"
        objformat="aout"
        add_cppflags -D_GNU_SOURCE
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
Måns Rullgård's avatar
Måns Rullgård committed
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
        AVSERVERLDFLAGS=""
        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_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
        add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
        add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
    qnx)
        add_cppflags -D_QNX_SOURCE
        network_extralibs="-lsocket"
        ;;
    symbian)
        SLIBSUF=".dll"
        enable dos_paths
        add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
        add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
        add_ldflags -Wl,--target1-abs,--no-undefined \
                    -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
                    -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
        add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
                      -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
                      -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
        die "Unknown OS '$target_os'."
esc(){
    echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
}

echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic

set_default $PATHS_LIST

# 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

    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
die_license_disabled gpl libcdio
die_license_disabled gpl libx264
die_license_disabled gpl libxavs
die_license_disabled gpl libxvid
die_license_disabled gpl x11grab

die_license_disabled nonfree libfaac
die_license_disabled nonfree libfdk_aac
die_license_disabled nonfree openssl
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
die_license_disabled version3 libvo_aacenc
die_license_disabled version3 libvo_amrwbenc
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
disabled optimizations || check_cflags -fomit-frame-pointer
    add_cppflags -DPIC
    add_cflags   -fPIC
    add_asflags  -fPIC
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
extern_prefix=${sym%%ff_extern*}

check_cc <<EOF && enable inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
    check_cc <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
done

check_cc <<EOF && enable attribute_packed
struct { int x; } __attribute__((packed)) x;
EOF

check_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOF

check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
if enabled alpha; then

    check_cflags -mieee

elif enabled arm; then
    enabled thumb && check_cflags -mthumb || check_cflags -marm
    if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
        enable vfp_args
    elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
        case "${cross_prefix:-$cc}" in
            *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
            *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
        esac
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
    fi

    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 neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
Mans Rullgard's avatar
Mans Rullgard committed
    enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
    check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'

    enabled_all armv6t2 shared !pic && enable_pic

elif enabled mips; then
    check_asm loongson '"dmult.g $1, $2, $3"'
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
elif enabled ppc; then
    enable local_aligned_8 local_aligned_16

    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
    check_asm ibm_asm   '"add 0, 0, 0"'
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(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>" ; } ||
        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
elif enabled sparc; then
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
elif enabled x86; then
    check_code ld immintrin.h "__xgetbv(0)" && enable xgetbv
    check_code ld intrin.h "int info[4]; __cpuid(info, 0)" && enable cpuid
    check_code ld intrin.h "__rdtsc()" && enable rdtsc
    check_code ld intrin.h "unsigned int x = __readeflags()" && enable rweflags
    check_code ld mmintrin.h "_mm_empty()" && enable mm_empty

    enable local_aligned_8 local_aligned_16

    # 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 (
Reimar Döffinger's avatar
Reimar Döffinger committed
    # check whether EBX is available on x86
    check_asm ebx_available '""::"b"(0)' &&
        check_asm ebx_available '"":::"%ebx"'
    # check whether xmm clobbers are supported
    check_asm xmm_clobbers '"":::"%xmm0"'

    # 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"'
        if check_cmd $yasmexe --version; then
            enabled x86_64 && yasm_extra="-m amd64"
            yasm_debug="-g dwarf2"
        elif check_cmd nasm -v; then
            yasmexe=nasm
            yasm_debug="-g -F dwarf"
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
        fi

        YASMFLAGS="-f $objformat $yasm_extra"
        enabled pic               && append YASMFLAGS "-DPIC"
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
        case "$objformat" in
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
        esac

        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
            die "yasm not found, use --disable-yasm for a crippled build"
        check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
    case "$cpu" in
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
            disable fast_clz
        ;;
    esac

if enabled asm; then
    as=${gas:=$as}
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
        $nogas "GNU assembler not found, install gas-preprocessor"
fi

check_ldflags -Wl,--as-needed

if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
if enabled network; then
    check_type "sys/types.h sys/socket.h" socklen_t
    check_type netdb.h "struct addrinfo"
    check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
    check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
    check_type netinet/in.h "struct sockaddr_in6"
    check_type poll.h "struct pollfd"
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
    check_header netinet/sctp.h
    check_func getaddrinfo $network_extralibs
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
        check_func_headers winsock2.h closesocket -lws2 &&
            network_extralibs="-lws2" ||
        { check_func_headers winsock2.h closesocket -lws2_32 &&
            network_extralibs="-lws2_32"; }
        check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
        check_type ws2tcpip.h socklen_t
        check_type ws2tcpip.h "struct addrinfo"
        check_type ws2tcpip.h "struct group_source_req"
        check_type ws2tcpip.h "struct ip_mreq_source"
        check_type ws2tcpip.h "struct ipv6_mreq"
        check_type winsock2.h "struct pollfd"
        check_type ws2tcpip.h "struct sockaddr_in6"
        check_type ws2tcpip.h "struct sockaddr_storage"
        check_struct winsock2.h "struct sockaddr" sa_len
    else
        disable network
    fi
fi

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

Måns Rullgård's avatar
Måns Rullgård committed
check_func  fcntl
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
check_func  gettimeofday
check_func  inet_aton $network_extralibs
check_func  isatty
check_func  ${malloc_prefix}memalign            && enable memalign
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
Måns Rullgård's avatar
Måns Rullgård committed
check_func  setrlimit
check_func  strerror_r
check_func  strptime
Stefano Sabatini's avatar
Stefano Sabatini committed
check_func  strtok_r
check_func  sched_getaffinity
check_func  usleep
check_func_headers io.h setmode
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
check_func_headers windows.h GetProcessAffinityMask
check_func_headers windows.h GetProcessTimes
check_func_headers windows.h GetSystemTimeAsFileTime
check_func_headers windows.h MapViewOfFile
check_func_headers windows.h Sleep
check_func_headers windows.h VirtualAlloc
check_header dlfcn.h
check_header dxva.h
Laurent Aimar's avatar
Laurent Aimar committed
check_header dxva2api.h
check_header io.h
check_header malloc.h
check_header sys/resource.h
check_header sys/time.h
check_header unistd.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
check_header windows.h
check_header X11/extensions/XvMClib.h
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
if ! disabled w32threads && ! enabled pthreads; then
    check_func _beginthreadex && enable w32threads
fi

# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if ! disabled pthreads && ! enabled w32threads; then
    enable pthreads
Måns Rullgård's avatar
Måns Rullgård committed
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
Måns Rullgård's avatar
Måns Rullgård committed
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
Måns Rullgård's avatar
Måns Rullgård committed
    elif ! check_lib pthread.h pthread_create -lpthread; then
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
check_lib math.h sin -lm && LIBM="-lm"
enabled vaapi && require vaapi va/va.h vaInitialize -lva
Måns Rullgård's avatar
Måns Rullgård committed

check_mathfunc exp2
check_mathfunc exp2f
check_mathfunc isinf
check_mathfunc isnan
check_mathfunc llrint
check_mathfunc llrintf
check_mathfunc log2
check_mathfunc log2f
check_mathfunc lrint
check_mathfunc lrintf
check_mathfunc rint
check_mathfunc round
check_mathfunc roundf
check_mathfunc truncf
# these are off by default, so fail if requested and not available
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
Stefano Sabatini's avatar
Stefano Sabatini committed
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
enabled libvpx     && {
    enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
    enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
                                die "ERROR: libvpx encoder version must be >=0.9.1"; } }
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
                      { check_cpp_condition x264.h "X264_BUILD >= 118" ||
                        die "ERROR: libx264 version must be >= 0.118."; }
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
                        check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                        check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
                        die "ERROR: openssl not found"; }