Skip to content
Snippets Groups Projects
configure 137 KiB
Newer Older
  • Learn to ignore specific revisions
  • Måns Rullgård's avatar
    Måns Rullgård committed
        # 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
    
        if enabled x86_32; then
    
            icc_version=$($cc -dumpversion)
    
            test ${icc_version%%.*} -ge 11 &&
                check_cflags -falign-stack=maintain-16-byte ||
    
    elif enabled ccc; then
        # disable some annoying warnings
    
        add_cflags -msg_disable bitnotint
        add_cflags -msg_disable mixfuncvoid
        add_cflags -msg_disable nonstandcast
        add_cflags -msg_disable unsupieee
    
    elif enabled gcc; then
    
        check_optflags -fno-tree-vectorize
    
        check_cflags -Werror=implicit-function-declaration
    
        check_cflags -Werror=missing-prototypes
    
        check_cflags -Werror=vla
    
    elif enabled llvm_gcc; then
        check_cflags -mllvm -stack-alignment=16
    
    elif enabled clang; then
    
        check_cflags -mllvm -stack-alignment=16
    
        check_cflags -Qunused-arguments
    
        check_cflags -Werror=implicit-function-declaration
        check_cflags -Werror=missing-prototypes
    
    elif enabled armcc; then
        # 2523: use of inline assembler is deprecated
    
        add_cflags -W${armcc_opt},--diag_suppress=2523
        add_cflags -W${armcc_opt},--diag_suppress=1207
    
        add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
    
        add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
    
        add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
        add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
    
    elif enabled tms470; then
        add_cflags -pds=824 -pds=837
    
    elif enabled pathscale; then
        add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
    
    elif enabled msvc; then
        enabled x86_32 && disable aligned_stack
    
    Mans Rullgard's avatar
    Mans Rullgard committed
    case $target_os in
    
        osf1)
            enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
        ;;
    
    Mans Rullgard's avatar
    Mans Rullgard committed
        plan9)
            add_cppflags -Dmain=plan9_main
        ;;
    esac
    
    
    enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
    
    
    if test $target_os = "haiku"; then
    
    ! enabled_any memalign posix_memalign aligned_malloc &&
    
        enabled_any $need_memalign && enable memalign_hack
    
    
    # add_dep lib dep
    # -> enable ${lib}_deps_${dep}
    # -> add $dep to ${lib}_deps only once
    add_dep() {
        lib=$1
        dep=$2
        enabled "${lib}_deps_${dep}" && return 0
        enable  "${lib}_deps_${dep}"
        prepend "${lib}_deps" $dep
    }
    
    # merge deps lib components
    # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
    merge_deps() {
        lib=$1
        shift
        for comp in $*; do
            enabled $comp || continue
            eval "dep=\"\$${comp}_deps\""
            for d in $dep; do
                add_dep $lib $d
            done
        done
    }
    
    merge_deps libavfilter $FILTER_LIST
    
    
    echo "install prefix            $prefix"
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    echo "source path               $source_path"
    echo "C compiler                $cc"
    echo "ARCH                      $arch ($cpu)"
    
    if test "$build_suffix" != ""; then
        echo "build suffix              $build_suffix"
    
    if test "$progs_suffix" != ""; then
        echo "progs suffix              $progs_suffix"
    fi
    
    if test "$extra_version" != ""; then
        echo "version string suffix     $extra_version"
    fi
    
    echo "big-endian                ${bigendian-no}"
    
    echo "runtime cpu detection     ${runtime_cpudetect-no}"
    
        echo "${yasmexe}                      ${yasm-no}"
    
        echo "MMX enabled               ${mmx-no}"
    
        echo "MMXEXT enabled            ${mmxext-no}"
    
        echo "3DNow! extended enabled   ${amd3dnowext-no}"
    
        echo "SSE enabled               ${sse-no}"
    
        echo "SSSE3 enabled             ${ssse3-no}"
    
        echo "AVX enabled               ${avx-no}"
    
        echo "CMOV enabled              ${cmov-no}"
        echo "CMOV is fast              ${fast_cmov-no}"
    
        echo "EBX available             ${ebx_available-no}"
        echo "EBP available             ${ebp_available-no}"
    
        echo "ARMv5TE enabled           ${armv5te-no}"
        echo "ARMv6 enabled             ${armv6-no}"
    
        echo "ARMv6T2 enabled           ${armv6t2-no}"
    
        echo "ARM VFP enabled           ${armvfp-no}"
    
        echo "NEON enabled              ${neon-no}"
    
        echo "MIPS FPU enabled          ${mipsfpu-no}"
        echo "MIPS32R2 enabled          ${mips32r2-no}"
        echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
        echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
    
        echo "AltiVec enabled           ${altivec-no}"
    
        echo "PPC 4xx optimizations     ${ppc4xx-no}"
    
        echo "dcbzl available           ${dcbzl-no}"
    
    fi
    if enabled sparc; then
        echo "VIS enabled               ${vis-no}"
    
    echo "debug symbols             ${debug-no}"
    
    echo "strip symbols             ${stripping-no}"
    
    echo "optimize for size         ${small-no}"
    
    echo "optimizations             ${optimizations-no}"
    
    echo "static                    ${static-no}"
    echo "shared                    ${shared-no}"
    
    echo "postprocessing support    ${postproc-no}"
    
    echo "network support           ${network-no}"
    echo "threading support         ${thread_type-no}"
    
    echo "safe bitstream reader     ${safe_bitstream_reader-no}"
    
    echo "SDL support               ${sdl-no}"
    
    echo "libdxva2 enabled          ${dxva2-no}"
    echo "libva enabled             ${vaapi-no}"
    echo "libvdpau enabled          ${vdpau-no}"
    
    echo "AVISynth enabled          ${avisynth-no}"
    
    Stefano Sabatini's avatar
    Stefano Sabatini committed
    echo "frei0r enabled            ${frei0r-no}"
    
    echo "gnutls enabled            ${gnutls-no}"
    
    echo "libaacplus enabled        ${libaacplus-no}"
    
    echo "libass enabled            ${libass-no}"
    
    Paul B Mahol's avatar
    Paul B Mahol committed
    echo "libcaca enabled           ${libcaca-no}"
    
    echo "libcdio support           ${libcdio-no}"
    
    echo "libcelt enabled           ${libcelt-no}"
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    echo "libdc1394 support         ${libdc1394-no}"
    
    echo "libfaac enabled           ${libfaac-no}"
    
    echo "libfdk-aac enabled        ${libfdk_aac-no}"
    
    echo "libgsm enabled            ${libgsm-no}"
    
    echo "libiec61883 support       ${libiec61883-no}"
    
    echo "libilbc enabled           ${libilbc-no}"
    
    Clément Bœsch's avatar
    Clément Bœsch committed
    echo "libmodplug enabled        ${libmodplug-no}"
    
    echo "libmp3lame enabled        ${libmp3lame-no}"
    echo "libnut enabled            ${libnut-no}"
    
    echo "libopencore-amrnb support ${libopencore_amrnb-no}"
    echo "libopencore-amrwb support ${libopencore_amrwb-no}"
    
    echo "libopencv support         ${libopencv-no}"
    
    echo "libopenjpeg enabled       ${libopenjpeg-no}"
    
    echo "libopus enabled           ${libopus-no}"
    
    echo "libpulse enabled          ${libpulse-no}"
    
    echo "librtmp enabled           ${librtmp-no}"
    
    echo "libschroedinger enabled   ${libschroedinger-no}"
    
    echo "libspeex enabled          ${libspeex-no}"
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
    
    echo "libtheora enabled         ${libtheora-no}"
    
    echo "libtwolame enabled        ${libtwolame-no}"
    
    echo "libutvideo enabled        ${libutvideo-no}"
    
    echo "libv4l2 enabled           ${libv4l2-no}"
    
    echo "libvo-aacenc support      ${libvo_aacenc-no}"
    
    echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
    
    echo "libvorbis enabled         ${libvorbis-no}"
    
    James Zern's avatar
    James Zern committed
    echo "libvpx enabled            ${libvpx-no}"
    
    echo "libxavs enabled           ${libxavs-no}"
    
    echo "openal enabled            ${openal-no}"
    
    echo "openssl enabled           ${openssl-no}"
    
    echo "zlib enabled              ${zlib-no}"
    
    echo "bzlib enabled             ${bzlib-no}"
    
    echo "texi2html enabled         ${texi2html-no}"
    
    echo "perl enabled              ${perl-no}"
    
    echo "pod2man enabled           ${pod2man-no}"
    echo "makeinfo enabled          ${makeinfo-no}"
    
    test -n "$random_seed" &&
        echo "random seed               ${random_seed}"
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
    
        echo "Enabled ${type}s:"
    
        eval list=\$$(toupper $type)_LIST
    
        print_enabled '_*' $list | sort | pr -r -3 -t
    
    license="LGPL version 2.1 or later"
    
    if enabled nonfree; then
    
        license="nonfree and unredistributable"
    
    elif enabled gplv3; then
        license="GPL version 3 or later"
    elif enabled lgplv3; then
        license="LGPL version 3 or later"
    
    elif enabled gpl; then
    
        license="GPL version 2 or later"
    
    echo "Creating config.mak and config.h..."
    
    
    test -e Makefile || $ln_s "$source_path/Makefile" .
    
    enabled stripping || strip="echo skipping strip"
    
    
    config_files="$TMPH config.mak"
    
    
    cat > config.mak <<EOF
    # Automatically generated by configure - do not modify!
    
    ifndef FFMPEG_CONFIG_MAK
    FFMPEG_CONFIG_MAK=1
    
    FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
    
    prefix=$prefix
    LIBDIR=\$(DESTDIR)$libdir
    SHLIBDIR=\$(DESTDIR)$shlibdir
    INCDIR=\$(DESTDIR)$incdir
    BINDIR=\$(DESTDIR)$bindir
    DATADIR=\$(DESTDIR)$datadir
    MANDIR=\$(DESTDIR)$mandir
    
    SRC_PATH=$source_path
    
    ifndef MAIN_MAKEFILE
    SRC_PATH:=\$(SRC_PATH:.%=..%)
    endif
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXX=$cxx
    
    DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
    DEPAS=$as
    DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
    
    ARFLAGS=$arflags
    AR_O=$ar_o
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXXFLAGS=$CXXFLAGS
    
    CXX_C=$CXX_C
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXX_O=$CXX_O
    
    LD_LIB=$LD_LIB
    LD_PATH=$LD_PATH
    
    LDFLAGS-ffserver=$FFSERVERLDFLAGS
    
    SHFLAGS=$SHFLAGS
    YASMFLAGS=$YASMFLAGS
    BUILDSUF=$build_suffix
    
    PROGSSUF=$progs_suffix
    
    FULLNAME=$FULLNAME
    LIBPREF=$LIBPREF
    LIBSUF=$LIBSUF
    LIBNAME=$LIBNAME
    SLIBPREF=$SLIBPREF
    SLIBSUF=$SLIBSUF
    EXESUF=$EXESUF
    EXTRA_VERSION=$extra_version
    CCDEP=$CCDEP
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXXDEP=$CXXDEP
    
    CC_DEPFLAGS=$CC_DEPFLAGS
    AS_DEPFLAGS=$AS_DEPFLAGS
    HOSTCC=$host_cc
    
    HOSTCFLAGS=$host_cflags
    HOSTEXESUF=$HOSTEXESUF
    HOSTLDFLAGS=$host_ldflags
    HOSTLIBS=$host_libs
    
    DEPHOSTCC=$host_cc
    DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
    HOSTCCDEP=$HOSTCCDEP
    HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
    HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
    
    HOSTLD_O=$HOSTLD_O
    
    TARGET_EXEC=$target_exec
    TARGET_PATH=$target_path
    
    LIBS-ffplay=$sdl_libs
    CFLAGS-ffplay=$sdl_cflags
    
    ZLIB=$($ldflags_filter -lz)
    
    LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
    EXTRALIBS=$extralibs
    
    COMPAT_OBJS=$compat_objs
    
    LIBTARGET=${LIBTARGET}
    SLIBNAME=${SLIBNAME}
    SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
    SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
    SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
    SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
    
    SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
    SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
    SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
    SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
    
    SAMPLES:=${samples:-\$(FATE_SAMPLES)}
    
    NOREDZONE_FLAGS=$noredzone_flags
    
        name=$(toupper $lcname)
        file=$source_path/$lcname/version.h
    
        eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
    
        eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
    
        eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
        eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
    
        name=$1
        file=$source_path/$2
    
    # This condition will be removed when we stop supporting old libpostproc versions
    if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
    
        eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
        eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
    
        lcname=$(tolower $name)
        eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
        eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
    
    jamal's avatar
    jamal committed
    get_version_old LIBPOSTPROC libpostproc/version.h
    
    map 'get_version $v' $LIBRARY_LIST
    
    cat > $TMPH <<EOF
    /* Automatically generated by configure - do not modify! */
    
    #ifndef FFMPEG_CONFIG_H
    #define FFMPEG_CONFIG_H
    #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
    
    #define FFMPEG_LICENSE "$(c_escape $license)"
    
    #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
    
    #define AVCONV_DATADIR "$(eval c_escape $datadir)"
    
    #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
    
    #define av_restrict $_restrict
    
    #define EXTERN_PREFIX "${extern_prefix}"
    #define EXTERN_ASM ${extern_prefix}
    
    #define HAVE_MMX2 HAVE_MMXEXT
    
    test -n "$assert_level" &&
        echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
    
    
    test -n "$malloc_prefix" &&
        echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
    
    
    if enabled yasm; then
        append config_files $TMPASM
        printf '' >$TMPASM
    fi
    
    
    print_config ARCH_   "$config_files" $ARCH_LIST
    print_config HAVE_   "$config_files" $HAVE_LIST
    print_config CONFIG_ "$config_files" $CONFIG_LIST       \
    
    Måns Rullgård's avatar
    Måns Rullgård committed
                                         $CONFIG_EXTRA      \
    
    echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
    
    echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
    
    cp_if_changed $TMPH config.h
    
    enabled yasm && cp_if_changed $TMPASM config.asm
    
    
    cat > $TMPH <<EOF
    /* Generated by ffconf */
    #ifndef AVUTIL_AVCONFIG_H
    #define AVUTIL_AVCONFIG_H
    EOF
    
    
    test "$postproc_version" != current && cat >> $TMPH <<EOF
    #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
    #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
    #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
    EOF
    
    
    print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
    
    
    echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
    
    cp_if_changed $TMPH libavutil/avconfig.h
    
    
    if test -n "$WARNINGS"; then
        printf "\n$WARNINGS"
        enabled fatal_warnings && exit 1
    fi
    
    # build pkg-config files
    
    pkgconfig_generate(){
    
        name=$1
        shortname=${name#lib}${build_suffix}
        comment=$2
        version=$3
        libs=$4
        requires=$5
        enabled ${name#lib} || return 0
        mkdir -p $name
        cat <<EOF > $name/$name.pc
    
    exec_prefix=\${prefix}
    
    Name: $name
    Description: $comment
    Version: $version
    
    Requires: $(enabled shared || echo $requires)
    
    Requires.private: $(enabled shared && echo $requires)
    
    Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
    
    Libs.private: $(enabled shared && echo $libs)
    
    Cflags: -I\${includedir}
    
    
    mkdir -p doc/examples/pc-uninstalled
    includedir=${source_path}
    [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
    
        cat <<EOF > doc/examples/pc-uninstalled/$name.pc
    
    libdir=\${pcfiledir}/../../../$name
    includedir=${includedir}
    
    Name: $name
    Description: $comment
    Version: $version
    Requires: $requires
    
    Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
    
    libavfilter_pc_deps="libavutil = $LIBAVUTIL_VERSION"
    
    enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
    enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
    
    enabled libavfilter_deps_avresample && prepend libavfilter_pc_deps "libavresample = $LIBAVRESAMPLE_VERSION,"
    
    enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
    enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
    
    enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
    
    libavfilter_pc_deps=${libavfilter_pc_deps%, }
    
    
    libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
    enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
    
    
    pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
    
    pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
    
    pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
    
    pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
    
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
    
    pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
    
    pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
    
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
    
    pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
    
    
    fix_ffmpeg_remote(){
        git_remote_from=$1
        git_remote_to=$2
    
        fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
    
        if [ "$fixme_remote" != "" ]; then
            echolog "
    Outdated domain in git config, the official domain for ffmpeg git is since
    November 2011, source.ffmpeg.org, both the old and the new point to the same
    repository and server. To update it enter the following commands:
    "
            for remote in $fixme_remote; do
                echolog "git remote set-url $remote $git_remote_to"
            done
        fi
    }
    
    if test -f "$source_path/.git/config"; then
        remote_from=git.videolan.org
        remote_to=source.ffmpeg.org
        fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
        fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
    fi