--- trunk/xvidcore/build/generic/configure.in 2003/05/04 23:58:10 1006 +++ trunk/xvidcore/build/generic/configure.in 2008/12/04 18:30:36 1845 @@ -1,47 +1,40 @@ dnl ========================================================================== dnl -dnl Autoconf script for XviD +dnl Autoconf script for Xvid dnl -dnl Copyright(C) 2003 Edouard Gomez +dnl Copyright(C) 2003-2004 Edouard Gomez dnl dnl ========================================================================== -AC_INIT([XviD], [1.0.0 cvs-snapshot], [xvid-devel@xvid.org]) +AC_PREREQ([2.50]) + +AC_INIT([Xvid], [1.3.0], [xvid-devel@xvid.org]) AC_CONFIG_SRCDIR(configure.in) dnl Do not forget to increase that when needed. -API_MAJOR="3" -API_MINOR="0" +API_MAJOR="4" +API_MINOR="3" -dnl NASM version requirement -minimum_nasm_patch_version=34 +dnl NASM/YASM version requirement +minimum_yasm_minor_version=7 +minimum_nasm_minor_version=0 +minimum_nasm_major_version=2 nasm_prog="nasm" +yasm_prog="yasm" dnl Default CFLAGS -- Big impact on overall speed our_cflags_defaults="-Wall" our_cflags_defaults="$our_cflags_defaults -O2" -our_cflags_defaults="$our_cflags_defaults -fomit-frame-pointer" +our_cflags_defaults="$our_cflags_defaults -fstrength-reduce" +our_cflags_defaults="$our_cflags_defaults -finline-functions" our_cflags_defaults="$our_cflags_defaults -ffast-math" -our_cflags_defaults="$our_cflags_defaults -funroll-loops" -our_cflags_defaults="$our_cflags_defaults -fschedule-insns" -our_cflags_defaults="$our_cflags_defaults -fschedule-insns2" +our_cflags_defaults="$our_cflags_defaults -fomit-frame-pointer" dnl ========================================================================== dnl Features - configure options dnl ========================================================================== FEATURES="" -DIVX4COMPAT_SOURCES="" -DIVX4_ENCORE="" -DIVX4_DECORE="" - -dnl BIGLUT aka old VLC code -AC_ARG_ENABLE(oldvlc, - AC_HELP_STRING([--enable-oldvlc], - [Enable old VLC code (Needs much more memory ~10MB)]), - [if test "$enable_oldvlc" = "yes" ; then - FEATURES="$FEATURES -DBIGLUT" - fi]) dnl Internal Debug AC_ARG_ENABLE(idebug, @@ -59,6 +52,15 @@ FEATURES="$FEATURES -D_PROFILING_" fi]) +dnl GNU Profiling options +AC_ARG_ENABLE(gnuprofile, + AC_HELP_STRING([--enable-gnuprofile], + [Enable profiling informations for gprof]), + [if test "$enable_gnuprofile" = "yes" ; then + GNU_PROF_CFLAGS="-pg -fprofile-arcs -ftest-coverage" + GNU_PROF_LDFLAGS="-pg" + fi]) + dnl Assembly code AC_ARG_ENABLE(assembly, AC_HELP_STRING([--disable-assembly], @@ -72,16 +74,16 @@ fi], [assembly="yes"]) -dnl Internal Debug -AC_ARG_ENABLE(divx4compat, - AC_HELP_STRING([--enable-divx4compat], - [Enable DivX4 compatibility API]), - [if test "$enable_divx4compat" = "yes" ; then - DIVX4COMPAT_SOURCES="SRC_DIVX4COMPAT" - DIVX4_ENCORE="encore;" - DIVX4_DECORE="decore;" - fi]) - +dnl Build as a module not a shared lib on darwin +AC_ARG_ENABLE(macosx_module, + AC_HELP_STRING([--enable-macosx_module], + [Build as a module on MacOS X]), + [if test "$enable_macosx_module" = "yes" ; then + macosx_module="yes" + else + macosx_module="no" + fi], + [macosx_module="no"]) dnl ========================================================================== dnl Default install prefix and checks build type @@ -161,12 +163,14 @@ i[[3456]]86) AC_MSG_RESULT(ia32) ARCHITECTURE="IA32" + ;; + x86_64) + AC_MSG_RESULT(x86_64) + ARCHITECTURE="X86_64" ;; powerpc) AC_MSG_RESULT(PowerPC) - dnl ATM the ppc port is out of date - dnl ARCHITECTURE="PPC" - ARCHITECTURE="GENERIC" + ARCHITECTURE="PPC" ;; ia64) AC_MSG_RESULT(ia64) @@ -196,7 +200,7 @@ BUS="64BIT" ;; *) - AC_MSG_ERROR([XviD supports only 32/64 bit architectures]) + AC_MSG_ERROR([Xvid supports only 32/64 bit architectures]) ;; esac @@ -225,16 +229,21 @@ SHARED_EXTENSION="so" OBJECT_EXTENSION="o" ;; - [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]|mingw32|mks) + [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]*|mingw32*|mks*) AC_MSG_RESULT([.dll .a .obj]) STATIC_EXTENSION="a" SHARED_EXTENSION="dll" OBJECT_EXTENSION="obj" ;; darwin*|raphsody*) - AC_MSG_RESULT([.dynlib .a .o]) + if test x"$macosx_module" = x"yes"; then + AC_MSG_RESULT([.so .a .o]) + SHARED_EXTENSION="so" + else + AC_MSG_RESULT([.dynlib .a .o]) + SHARED_EXTENSION="dylib" + fi STATIC_EXTENSION="a" - SHARED_EXTENSION="dylib" OBJECT_EXTENSION="o" ;; *) @@ -245,50 +254,77 @@ ;; esac +dnl ========================================================================== +dnl +dnl Determines best options for CC and LD +dnl - STATIC_LIB, SHARED_LIB, SPECIFIC_CFLAGS, SPECIFIC_LDLAGS +dnl +dnl ========================================================================== + AC_MSG_CHECKING(for platform specific LDFLAGS/CFLAGS) SPECIFIC_LDFLAGS="" SPECIFIC_CFLAGS="" +PRE_SHARED_LIB="" case "$target_os" in - *bsd*|linux*|irix*|solaris*) - AC_MSG_RESULT([-Wl,-soname,libxvidcore.so -shared -lc -lm]) + linux*|solaris*) + AC_MSG_RESULT([ok]) STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION).\$(API_MAJOR).\$(API_MINOR)" - SPECIFIC_LDFLAGS="-Wl,-soname,libxvidcore.\$(SHARED_EXTENSION).\$(API_MAJOR) -shared -lc -lm" + SPECIFIC_LDFLAGS="-Wl,-soname,libxvidcore.\$(SHARED_EXTENSION).\$(API_MAJOR) -shared -Wl,--version-script=libxvidcore.ld -lc -lm" SPECIFIC_CFLAGS="-fPIC" ;; - [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]|mingw32|mks) - AC_MSG_RESULT([-shared -Wl,--dll,--out-implib,\$@.a]) + *bsd*|irix*) + AC_MSG_RESULT([ok]) STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" - SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION)" + SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION).\$(API_MAJOR).\$(API_MINOR)" + SPECIFIC_LDFLAGS="-Wl,-soname,libxvidcore.\$(SHARED_EXTENSION).\$(API_MAJOR) -shared -lc -lm" + SPECIFIC_CFLAGS="-fPIC" + ;; + [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]*|mingw32*|mks*) + AC_MSG_RESULT([ok]) + STATIC_LIB="xvidcore.\$(STATIC_EXTENSION)" + SHARED_LIB="xvidcore.\$(SHARED_EXTENSION)" SPECIFIC_LDFLAGS="-mno-cygwin -shared -Wl,--dll,--out-implib,\$@.a libxvidcore.def" SPECIFIC_CFLAGS="-mno-cygwin" ;; darwin*|raphsody*) - AC_MSG_RESULT([-dynamiclib -flat_namespace]) STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" - SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION)" - SPECIFIC_LDFLAGS="-dynamiclib -flat_namespace" SPECIFIC_CFLAGS="-fPIC -fno-common -no-cpp-precomp" + if test x"$macosx_module" = x"no"; then + AC_MSG_RESULT([dylib options]) + SHARED_LIB="libxvidcore.\$(API_MAJOR).\$(SHARED_EXTENSION)" + SPECIFIC_LDFLAGS="-dynamiclib -flat_namespace -compatibility_version \$(API_MAJOR) -current_version \$(API_MAJOR).\$(API_MINOR) -install_name \$(libdir)/\$(SHARED_LIB)" + else + AC_MSG_RESULT([module options]) + PRE_SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION)-temp.o" + SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION).\$(API_MAJOR)" + SPECIFIC_LDFLAGS="-r -keep_private_externs -nostdlib && \$(CC) \$(LDFLAGS) \$(PRE_SHARED_LIB) -o libxvidcore.\$(SHARED_EXTENSION).\$(API_MAJOR) -bundle -flat_namespace -undefined suppress" + fi ;; beos) + AC_MSG_RESULT([ok]) STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION)" - AC_MSG_RESULT([-nostart]) SPECIFIC_LDFLAGS="-nostart" SPECIFIC_CFLAGS="-fPIC" ;; *) - AC_MSG_RESULT([Unknown OS - -shared -lc -lm]) - STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" + AC_MSG_RESULT([Unknown Platform (Using default -shared -lc -lm)]) + STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION)" SPECIFIC_LDFLAGS="" SPECIFIC_CFLAGS="" ;; esac +if test x"$PRE_SHARED_LIB" = x; then + PRE_SHARED_LIB=$SHARED_LIB +fi + dnl ========================================================================== dnl -dnl Assembler stuff - AS, AFLAGS, ASSEMBLY_EXTENSION, SOURCES +dnl Assembler stuff +dnl - AS, AFLAGS, ASSEMBLY_EXTENSION, SOURCES dnl dnl ========================================================================== @@ -302,77 +338,201 @@ dnl IA32 dnl -if test "$ARCHITECTURE" = "IA32" ; then +if test "$ARCHITECTURE" = "IA32" -o "$ARCHITECTURE" = "X86_64" ; then dnl - dnl Checking nasm existence + dnl Checking for nasm compatible programs dnl - AC_CHECK_PROG([ac_nasm], [$nasm_prog], [yes], [no], , [yes]) - if test "$ac_nasm" = "yes" ; then - dnl - dnl Checking nasm patch version - dnl - AC_MSG_CHECKING([for nasm patch version]) - nasm_patch=`nasm -r | cut -d '.' -f 3 | cut -d ' ' -f 1` - AC_MSG_RESULT([$nasm_patch]) + found_nasm_comp_prog="no" + chosen_asm_prog="" - if test "$nasm_patch" -lt "$minimum_nasm_patch_version" ; then - AC_MSG_WARN([nasm patch version too old - Compiling generic sources only]) - ARCHITECTURE="GENERIC" - else + dnl Check for yasm first + AC_CHECK_PROG([ac_yasm], [$yasm_prog], [yes], [no], , [yes]) + if test "$ac_yasm" = "yes" ; then + dnl + dnl Checking yasm version + dnl + AC_MSG_CHECKING([for yasm version]) + yasm_minor=`$yasm_prog --version | cut -d '.' -f 2 | cut -d ' ' -f 1` + if test -z $yasm_minor ; then + yasm_minor=-1 + fi + AC_MSG_RESULT([$yasm_minor]) - dnl - dnl Checking nasm format - win32 or elf - dnl - AC_MSG_CHECKING([for nasm object format]) - case "$target_os" in - *bsd*|linux*|beos|irix*|solaris*) - AC_MSG_RESULT([elf]) - NASM_FORMAT="elf" - PREFIX="" - ;; - [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]|mingw32|mks) - AC_MSG_RESULT([win32]) - NASM_FORMAT="win32" - PREFIX="-DPREFIX" - ;; - esac - - AS=nasm - AFLAGS="-I\$(= 0.6.2 should be ok + dnl But I'm too lazy to check also the patch version... + if test "$yasm_minor" -lt "$minimum_yasm_minor_version" ; then + AC_MSG_WARN([yasm version is too old]) + else + found_nasm_comp_prog="yes" + chosen_asm_prog="$yasm_prog" fi + fi - else - AC_MSG_WARN([nasm not found - Compiling generic sources only]) - ARCHITECTURE="GENERIC" + dnl Check for nasm (not buggy version) + if test "$found_nasm_comp_prog" = "no" ; then + AC_CHECK_PROG([ac_nasm], [$nasm_prog], [yes], [no], , [yes]) + if test "$ac_nasm" = "yes" ; then + dnl + dnl Checking nasm version + dnl + AC_MSG_CHECKING([for nasm version]) + nasm_minor=`$nasm_prog -v | cut -d '.' -f 2 | cut -d ' ' -f 1` + nasm_major=`$nasm_prog -v | cut -d '.' -f 1 | cut -d ' ' -f 3` + if test -z $nasm_minor ; then + nasm_minor=-1 + fi + if test -z $nasm_major ; then + nasm_major=-1 + fi + AC_MSG_RESULT([$nasm_major]) + + dnl need nasm 2.x for SSE3/4 and X86_64 + if test "$nasm_major" -lt "$minimum_nasm_major_version" ; then + AC_MSG_WARN([nasm version is too old]) + else + found_nasm_comp_prog="yes" + chosen_asm_prog="$nasm_prog" + fi + fi fi + dnl + dnl Ok now sort what object format we must use + dnl + if test "$found_nasm_comp_prog" = "yes" ; then + AC_MSG_CHECKING([for asm object format]) + case "$target_os" in + *bsd*|linux*|beos|irix*|solaris*) + if test "$ARCHITECTURE" = "X86_64" ; then + AC_MSG_RESULT([elf64]) + NASM_FORMAT="elf64" + else + AC_MSG_RESULT([elf]) + NASM_FORMAT="elf" + fi + MARK_FUNCS="-DMARK_FUNCS" + PREFIX="" + ;; + [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]*|mingw32*|mks*) + if test "$ARCHITECTURE" = "X86_64" ; then + AC_MSG_RESULT([win64]) + NASM_FORMAT="win64" + else + AC_MSG_RESULT([win32]) + NASM_FORMAT="win32" + fi + PREFIX="-DWINDOWS" + MARK_FUNCS="" + ;; + *darwin*) + AC_MSG_RESULT([macho]) + NASM_FORMAT="macho" + PREFIX="-DPREFIX" + MARK_FUNCS="" + ;; + esac + + AS="$chosen_asm_prog" + ASSEMBLY_EXTENSION="asm" + AFLAGS="-I\$( before using intrincic +dnl - define vectors with vec = {0,0,0,0} +dnl +dnl * The compile time option will be "injected" into SPECIFIC_CFLAGS variable +dnl * The need for altivec.h will also be injected into SPECIFIC_CFLAGS through +dnl a -DHAVE_ALTIVEC_H +dnl * The vector definition is handled in portab.h thx to +dnl HAVE_PARENTHESES/BRACES_ALTIVEC_DECL +dnl +PPC_ALTIVEC_SOURCES="" if test "$ARCHITECTURE" = "PPC" ; then AS="\$(CC)" - AFLAGS="-c" - ASSEMBLY_EXTENSION="s" - ASSEMBLY_SOURCES="SRC_PPC" - AC_MSG_CHECKING([for Altivec support]) - cat > conftest.S << EOF - .text - vxor 0,0,0 + AFLAGS="" + ASSEMBLY_EXTENSION=".s" + ASSEMBLY_SOURCES="" + + AC_MSG_CHECKING([for altivec.h]) +cat > conftest.c << EOF +#include +int main() { return(0); } EOF - if $CC -c conftest.S 2>/dev/null 1>/dev/null ; then + if $CC -faltivec -c conftest.c 2>/dev/null 1>/dev/null || \ + $CC -maltivec -mabi=altivec -c conftest.c 2>/dev/null 1>/dev/null ; then AC_MSG_RESULT(yes) - SPECIFIC_CFLAGS="$SPECIFIC_CFLAGS -DARCH_IS_PPC_ALTIVEC" - ASSEMBLY_SOURCES="SRC_ALTIVEC" + SPECIFIC_CFLAGS="$SPECIFIC_CFLAGS -DHAVE_ALTIVEC_H" + TEMP_ALTIVEC="-DHAVE_ALTIVEC_H" else AC_MSG_RESULT(no) + TEMP_ALTIVEC="" fi + + AC_MSG_CHECKING([for Altivec compiler support]) +cat > conftest.c << EOF +#ifdef HAVE_ALTIVEC_H +#include +#endif + +int main() +{ + vector unsigned int vartest2 = (vector unsigned int)(0); + vector unsigned int vartest3 = (vector unsigned int)(1); + vartest2 = vec_add(vartest2, vartest3); + return(0); +} +EOF + if $CC $TEMP_ALTIVEC -faltivec -c conftest.c 2>/dev/null 1>/dev/null ; then + AC_MSG_RESULT([yes (Apple)]) + SPECIFIC_CFLAGS="$SPECIFIC_CFLAGS -faltivec -DHAVE_ALTIVEC_PARENTHESES_DECL $TEMP_ALTIVEC" + PPC_ALTIVEC_SOURCES="SRC_PPC_ALTIVEC" + else +cat > conftest.c << EOF +#ifdef HAVE_ALTIVEC_H +#include +#endif + +int main() +{ + vector unsigned int vartest2 = (vector unsigned int){0}; + vector unsigned int vartest3 = (vector unsigned int){1}; + vartest2 = vec_add(vartest2, vartest3); + return(0); +} +EOF + if $CC $TEMP_ALTIVEC -maltivec -mabi=altivec -c conftest.c 2>/dev/null 1>/dev/null ; then + AC_MSG_RESULT([yes (GNU)]) + SPECIFIC_CFLAGS="$SPECIFIC_CFLAGS -maltivec -mabi=altivec -DHAVE_ALTIVEC_BRACES_DECL $TEMP_ALTIVEC" + PPC_ALTIVEC_SOURCES="SRC_PPC_ALTIVEC" + else + AC_MSG_RESULT([no (ppc support won't be compiled in)]) + dnl Only C code can be compiled :-( + ARCHITECTURE="GENERIC" + fi + fi + rm -f conftest.* fi @@ -388,7 +548,7 @@ case `basename $CC` in *ecc*) - DCT_IA64_SOURCES="idct_ia64_ecc.s" + DCT_IA64_SOURCES="SRC_IA64_IDCT_ECC" dnl If the compiler is ecc, then i don't know its options dnl fallback to "no options" @@ -397,7 +557,7 @@ fi ;; *) - DCT_IA64_SOURCES="idct_ia64_gcc.s" + DCT_IA64_SOURCES="SRC_IA64_IDCT_GCC" ;; esac @@ -412,10 +572,34 @@ AC_CHECK_HEADERS( stdio.h \ signal.h \ + stdlib.h \ + string.h \ + assert.h \ + math.h \ , , AC_MSG_ERROR(Missing header file)) dnl ========================================================================== dnl +dnl Check for pthread +dnl +dnl ========================================================================== + +AC_CHECK_HEADER( + pthread.h, + AC_CHECK_LIB( + pthread, + pthread_create, + AC_CHECK_LIB( + pthread, + pthread_join, + SPECIFIC_CFLAGS="$SPECIFIC_CFLAGS -DHAVE_PTHREAD" + SPECIFIC_LDFLAGS="$SPECIFIC_LDFLAGS -lpthread", + AC_MSG_WARN(Pthread not supported. No SMP support)), + AC_MSG_WARN(Pthread not supported. No SMP support)), + AC_MSG_WARN(Pthread not supported. No SMP support)) + +dnl ========================================================================== +dnl dnl Now we can set CFLAGS if needed dnl dnl ========================================================================== @@ -426,6 +610,63 @@ dnl ========================================================================== dnl +dnl Profiling stuff goes here +dnl - adds options to SPECIFIC_CFLAGS, SPECIFIC_LDLAGS +dnl - removes incompatible options from CFLAGS +dnl +dnl ========================================================================== + +SPECIFIC_LDFLAGS="$SPECIFIC_LDFLAGS $GNU_PROF_LDFLAGS" +SPECIFIC_CFLAGS="$SPECIFIC_CFLAGS $GNU_PROF_CFLAGS" + +if test "$enable_gnuprofile" = "yes" ; then + CFLAGS=`echo $CFLAGS | sed s/'-fomit-frame-pointer'/''/` +fi + +dnl ========================================================================== +dnl Some gcc flags can't be used for gcc >= 3.4.0 +dnl ========================================================================== + +if test "$GCC" = "yes" ; then +cat << EOF > test.c +#include +int main(int argc, char **argv) +{ + if (*argv[[1]] == 'M') { + printf("%d", __GNUC__); + } + if (*argv[[1]] == 'm') { + printf("%d", __GNUC_MINOR__); + } + return 0; +} +EOF + $CC -o gcc-ver test.c + + GCC_MAJOR=`./gcc-ver M` + GCC_MINOR=`./gcc-ver m` + + rm -f test.c + rm -f gcc-ver + + # GCC 4.x + if test "${GCC_MAJOR}" -gt 3 ; then + CFLAGS=`echo $CFLAGS | sed s,"-mcpu","-mtune",g` + CFLAGS=`echo $CFLAGS | sed s,'-freduce-all-givs','',g` + CFLAGS=`echo $CFLAGS | sed s,'-fmove-all-movables','',g` + CFLAGS=`echo $CFLAGS | sed s,'-fnew-ra','',g` + CFLAGS=`echo $CFLAGS | sed s,'-fwritable-strings','',g` + fi + + # GCC 3.4.x + if test "${GCC_MAJOR}" -eq 3 && test "${GCC_MINOR}" -gt 3 ; then + CFLAGS=`echo $CFLAGS | sed s,"-mcpu","-mtune",g` + fi +fi + + +dnl ========================================================================== +dnl dnl Substitions dnl dnl ========================================================================== @@ -447,14 +688,13 @@ AC_SUBST(CFLAGS) AC_SUBST(SPECIFIC_LDFLAGS) AC_SUBST(SPECIFIC_CFLAGS) -AC_SUBST(DIVX4COMPAT_SOURCES) AC_SUBST(DCT_IA64_SOURCES) -AC_SUBST(DIVX4_ENCORE) -AC_SUBST(DIVX4_DECORE) +AC_SUBST(PPC_ALTIVEC_SOURCES) AC_SUBST(RANLIB) AC_SUBST(API_MAJOR) AC_SUBST(API_MINOR) AC_SUBST(STATIC_LIB) +AC_SUBST(PRE_SHARED_LIB) AC_SUBST(SHARED_LIB) dnl ========================================================================== @@ -464,6 +704,5 @@ dnl ========================================================================== AC_CONFIG_FILES(platform.inc) -AC_CONFIG_FILES(libxvidcore.def) AC_OUTPUT