Skip to content
Snippets Groups Projects
configure 100 KiB
Newer Older
  • Learn to ignore specific revisions
  •     speed_cflags='-O3'
        size_cflags='-Os'
    
    elif $cc -V 2>&1 | grep -q Sun; then
        cc_type=suncc
        cc_version="AV_STRINGIFY(__SUNPRO_C)"
    
        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'
    
        speed_cflags='-O5'
        size_cflags='-O5 -xspace'
    
        filter_cflags=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_version=__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 $@'
        speed_cflags='-O2'
        size_cflags='-Os'
    
    elif $cc -v 2>&1 | grep -q Open64; then
        cc_type=open64
        cc_version=__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 $@'
        speed_cflags='-O2'
        size_cflags='-Os'
    
    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 "/$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|power4*)
    
    Måns Rullgård's avatar
    Måns Rullgård committed
                cpuflags="-mcpu=970 -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*)                               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
    
    
    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|ia64|mips|parisc|sparc)
    
            spic=$shared
    
            subarch="x86_32"
    
            check_cc <<EOF && subarch="x86_64"
    
            int test[(int)sizeof(char*) - 7];
    
            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=
    
            SHFLAGS='-shared -Wl,-h,$$(@F)'
    
            enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
    
            add_cppflags -D__EXTENSIONS__
    
            nm_opts='-P -g'
    
            disable symver
    
            oss_indev_extralibs="-lossaudio"
            oss_outdev_extralibs="-lossaudio"
    
            add_cppflags -D_XOPEN_SOURCE=600
    
            # 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)
            enable malloc_aligned
            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),-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)'
            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="i386:x86-64"
    
            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=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
    
            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"
    
            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."
    
            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"
    
    Dave Yeo's avatar
    Dave Yeo committed
            strip="lxlite -CS"
    
            ln_s="cp -f"
    
            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'
    
            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'
    
        qnx)
            add_cppflags -D_QNX_SOURCE
            network_extralibs="-lsocket"
            ;;
    
            die "Unknown OS '$target_os'."
    
    echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$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
    
    
    disabled static && LIBNAME=""
    
        enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
    
    die_license_disabled gpl libxavs
    
    die_license_disabled gpl libxvid
    die_license_disabled gpl postproc
    die_license_disabled gpl x11grab
    
    
    die_license_disabled nonfree libfaac
    
    die_license_disabled version3 libopencore_amrnb
    die_license_disabled version3 libopencore_amrwb
    
    
    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
    
        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
    
    
        # We have to check if pld is a nop and disable it.
        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 neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
    
        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
    
        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 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
    
    
            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 "vpaddw xmm0, xmm0, xmm0" || 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
    
    
    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 ipv6_mreq" -D_DARWIN_C_SOURCE
        check_type netinet/in.h "struct sockaddr_in6"
        check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
        check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
        # 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_type ws2tcpip.h socklen_t
            check_type ws2tcpip.h "struct addrinfo"
            check_type ws2tcpip.h "struct ipv6_mreq"
            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_func  getaddrinfo $network_extralibs
    
    check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
    
    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
    
    Måns Rullgård's avatar
    Måns Rullgård committed
    check_func  setrlimit
    
    check_func  strerror_r
    
    Stefano Sabatini's avatar
    Stefano Sabatini committed
    check_func  strtok_r
    
    check_func_headers conio.h kbhit
    
    check_func_headers io.h setmode
    
    check_func_headers lzo/lzo1x.h lzo1x_999_compress
    
    check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
    
    check_func_headers windows.h GetProcessTimes
    
    check_func_headers windows.h MapViewOfFile
    
    check_func_headers windows.h VirtualAlloc
    
    check_header dlfcn.h
    
    Laurent Aimar's avatar
    Laurent Aimar committed
    check_header dxva2api.h
    
    check_header malloc.h
    
    check_header sys/resource.h
    
    check_header vdpau/vdpau.h
    check_header vdpau/vdpau_x11.h
    
    check_header X11/extensions/XvMClib.h
    
    check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
    
    
    if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
         enabled_any $need_memalign ; then
    
        die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
    
    disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
    
    disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
    
    
    # check for some common methods of building with pthread support
    # do this before the optional library checks as some of them require pthreads
    
    if ! 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." ||
    
    Måns Rullgård's avatar
    Måns Rullgård committed
    check_lib math.h sin -lm
    
    disabled vaapi || check_lib va/va.h vaInitialize -lva
    
    Måns Rullgård's avatar
    Måns Rullgård committed
    
    
    check_mathfunc exp2
    check_mathfunc exp2f
    check_mathfunc llrint
    
    check_mathfunc llrintf
    
    check_mathfunc log2
    check_mathfunc log2f
    check_mathfunc lrint
    check_mathfunc lrintf
    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 libdirac   && require_pkg_config dirac                          \
        "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
        "dirac_decoder_init dirac_encoder_init"
    
    enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
    
    enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
    
    enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
    
    enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
    
    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 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 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 >= 99" ||
                            die "ERROR: libx264 version must be >= 0.99."; }
    
    enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
    
    enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
    
    enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
    
    # libdc1394 check
    if enabled libdc1394; then
        { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
            enable libdc1394_2; } ||
        { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
            enable libdc1394_1; } ||
        die "ERROR: No version of libdc1394 found "
    fi
    
    
    if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
    
        check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
        enable sdl &&
        check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
    
    texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
    
    check_header linux/videodev.h
    check_header linux/videodev2.h
    
    check_header sys/videoio.h
    
    check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
    
    # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
    # w32api 3.12 had it defined wrong
    check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    
    
    # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    { check_header dev/bktr/ioctl_meteor.h &&
      check_header dev/bktr/ioctl_bt848.h; } ||
    { check_header machine/ioctl_meteor.h &&
      check_header machine/ioctl_bt848.h; } ||
    { check_header dev/video/meteor/ioctl_meteor.h &&
      check_header dev/video/bktr/ioctl_bt848.h; } ||
    check_header dev/ic/bt8xx.h
    
    check_header sys/soundcard.h
    check_header soundcard.h
    
    enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
    
    enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
    
    check_header X11/Xlib.h                 &&
    check_header X11/extensions/XShm.h      &&
    
    check_header X11/extensions/Xfixes.h    &&
    
    check_func XOpenDisplay -lX11           &&
    
    Roxis's avatar
    Roxis committed
    check_func XShmCreateImage -lX11 -lXext &&
    check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
    
    if ! disabled vdpau && enabled vdpau_vdpau_h; then
    
    check_cpp_condition \
        vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
    
        { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
          disable vdpau; }
    
    enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
    
    
    # add some useful compiler flags if supported
    check_cflags -Wdeclaration-after-statement
    
    check_cflags -Wall
    
    check_cflags -Wno-parentheses
    
    check_cflags -Wno-switch
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    check_cflags -Wdisabled-optimization
    check_cflags -Wpointer-arith
    check_cflags -Wredundant-decls
    
    check_cflags -Wno-pointer-sign
    
    check_cflags -Wcast-qual
    
    check_cflags -Wwrite-strings
    
    check_cflags -Wmissing-prototypes
    
    enabled extra_warnings && check_cflags -Winline
    
    check_ldflags -Wl,--warn-common
    
    check_ldflags -Wl,--as-needed
    
    check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
    
    test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
    
    echo "X{};" > $TMPV
    
    if test_ldflags -Wl,--version-script,$TMPV; then
    
        append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
    
        check_cc <<EOF && enable symver_asm_label
    void ff_foo(void) __asm__ ("av_foo@VERSION");
    
    void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
    
    EOF
        check_cc <<EOF && enable symver_gnu_asm
    __asm__(".symver ff_foo,av_foo@VERSION");
    void ff_foo(void) {}
    EOF
    fi
    
        optimizations="small"
    elif enabled optimizations; then
    
    check_cflags -fno-math-errno
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # Just warnings, no remarks
        check_cflags -w1
        # -wd: Disable following warnings
        # 144, 167, 556: -Wno-pointer-sign
        # 10006: ignoring unknown option -fno-signed-zeros
    
        # 10148: ignoring unknown option -Wno-parentheses
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # 10156: ignoring option '-W'; no argument required
    
        check_cflags -wd144,167,556,10006,10148,10156
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # 11030: Warning unknown option --as-needed
        # 10156: ignoring option '-export'; no argument required
        check_ldflags -wd10156,11030
        # Allow to compile with optimizations
        check_ldflags -march=$cpu
    
        # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
        enable ebp_available