dnl ========================================================================== dnl dnl Autoconf script for XviD dnl dnl Copyright(C) 2003 Edouard Gomez dnl dnl ========================================================================== AC_INIT([XviD], [1.0.0 cvs-snapshot], [xvid-devel@xvid.org]) AC_CONFIG_SRCDIR(configure.in) dnl Do not forget to increase that when needed. API_MAJOR="4" API_MINOR="0" dnl NASM version requirement minimum_nasm_patch_version=34 nasm_prog="nasm" 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 -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" 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, AC_HELP_STRING([--enable-idebug], [Enable internal debug function]), [if test "$enable_idebug" = "yes" ; then FEATURES="$FEATURES -D_DEBUG" fi]) dnl Internal Profile AC_ARG_ENABLE(iprofile, AC_HELP_STRING([--enable-iprofile], [Enable internal profiling]), [if test "$enable_iprofile" = "yes" ; then 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], [Disable assembly code]), [if test "$enable_assembly" = "no" ; then assembly="no" else if test "$enable_assembly" = "yes" ; then assembly="yes" fi 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 ========================================================================== dnl Default install prefix and checks build type dnl ========================================================================== AC_PREFIX_DEFAULT("/usr/local") AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_CANONICAL_TARGET dnl ========================================================================== dnl Check for the C compiler (could be passed on command line) dnl ========================================================================== dnl dnl First we test if CFLAGS have been passed on command line dnl I do that because autoconf defaults (-g -O2) suck and they would kill dnl performance. To prevent that we define a good defult CFLAGS at the end dnl of the script if and only if CFLAGS has not been passed on the command dnl line dnl AC_MSG_CHECKING(whether to use default CFLAGS) if test x"$CFLAGS" = x"" ; then force_default_cc_options="yes" AC_MSG_RESULT([yes]) else force_default_cc_options="no" AC_MSG_RESULT([no]) fi dnl Now we can safely check for the C compiler AC_PROG_CC dnl ========================================================================== dnl Check for the install program dnl ========================================================================== AC_PROG_INSTALL dnl ========================================================================== dnl Check for the ranlib program to generate static library index dnl ========================================================================== AC_PROG_RANLIB dnl ========================================================================== dnl dnl This part looks for: dnl dnl ARCHITECTURE : The platform architecture dnl - IA32 for mmx, mmx-ext, mmx2, sse assembly dnl - IA64 dnl - PPC for PowerPC assembly routines dnl - GENERIC for plain C sources only dnl dnl BUS: Address bus size (in bits) dnl - 32 dnl - 64 dnl dnl ENDIANNESS: I think you can guess what this thing means :-) dnl - LITTLE_ENDIAN dnl - BIG_ENDIAN dnl dnl ========================================================================== dnl dnl Looking what sources have to be compiled according to the CPU type dnl ARCHITECTURE="" AC_MSG_CHECKING([for whether to use assembly code]) if test x"$assembly" = x"yes" ; then AC_MSG_RESULT([yes]) AC_MSG_CHECKING([for architecture type]) case "$target_cpu" in i[[3456]]86) AC_MSG_RESULT(ia32) ARCHITECTURE="IA32" ;; powerpc) AC_MSG_RESULT(PowerPC) dnl ATM the ppc port is out of date dnl ARCHITECTURE="PPC" ARCHITECTURE="GENERIC" ;; ia64) AC_MSG_RESULT(ia64) ARCHITECTURE="IA64" ;; *) AC_MSG_RESULT($target_cpu) ARCHITECTURE="GENERIC" ;; esac else AC_MSG_RESULT([no]) ARCHITECTURE="GENERIC" fi dnl dnl Testing address bus length dnl BUS="" AC_CHECK_SIZEOF([int *]) case "$ac_cv_sizeof_int_p" in 4) BUS="32BIT" ;; 8) BUS="64BIT" ;; *) AC_MSG_ERROR([XviD supports only 32/64 bit architectures]) ;; esac dnl dnl Testing endianness dnl ENDIANNESS="" AC_C_BIGENDIAN(ENDIANNESS="BIG_ENDIAN", ENDIANNESS="LITTLE_ENDIAN") dnl ========================================================================== dnl dnl Check for OS specific variables dnl - SHARED_EXTENSION, STATIC_EXTENSION, OBJECT_EXTENSION dnl dnl ========================================================================== AC_MSG_CHECKING(for build extensions) SHARED_EXTENSION="" STATIC_EXTENSION="" OBJECT_EXTENSION="" case "$target_os" in *bsd*|linux*|beos|irix*|solaris*) AC_MSG_RESULT([.so .a .o]) STATIC_EXTENSION="a" SHARED_EXTENSION="so" OBJECT_EXTENSION="o" ;; [[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]) STATIC_EXTENSION="a" SHARED_EXTENSION="dylib" OBJECT_EXTENSION="o" ;; *) AC_MSG_RESULT([Unknown OS - Using .so .a .o]) STATIC_EXTENSION="a" SHARED_EXTENSION="so" OBJECT_EXTENSION="o" ;; 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="" case "$target_os" in *bsd*|linux*|irix*|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_CFLAGS="-fPIC" ;; [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]|mingw32|mks) AC_MSG_RESULT([ok]) STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION)" SPECIFIC_LDFLAGS="-mno-cygwin -shared -Wl,--dll,--out-implib,\$@.a libxvidcore.def" SPECIFIC_CFLAGS="-mno-cygwin" ;; darwin*|raphsody*) AC_MSG_RESULT([ok]) STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" SHARED_LIB="libxvidcore.\$(API_MAJOR).\$(SHARED_EXTENSION)" SPECIFIC_LDFLAGS="-dynamiclib -flat_namespace -compatibility_version \$(API_MAJOR) -current_version \$(API_MINOR) -install_name \$(libdir)/\$(SHARED_LIB)" SPECIFIC_CFLAGS="-fPIC -fno-common -no-cpp-precomp" ;; beos) AC_MSG_RESULT([ok]) STATIC_LIB="libxvidcore.\$(STATIC_EXTENSION)" SHARED_LIB="libxvidcore.\$(SHARED_EXTENSION)" SPECIFIC_LDFLAGS="-nostart" SPECIFIC_CFLAGS="-fPIC" ;; *) 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 dnl ========================================================================== dnl dnl Assembler stuff dnl - AS, AFLAGS, ASSEMBLY_EXTENSION, SOURCES dnl dnl ========================================================================== AS="" AFLAGS="" ASSEMBLY_EXTENSION="" GENERIC_SOURCES="SRC_GENERIC" ASSEMBLY_SOURCES="" dnl dnl IA32 dnl if test "$ARCHITECTURE" = "IA32" ; then dnl dnl Checking nasm existence 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]) 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 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\$( conftest.S << EOF .text vxor 0,0,0 EOF if $CC -c conftest.S 2>/dev/null 1>/dev/null ; then AC_MSG_RESULT(yes) SPECIFIC_CFLAGS="$SPECIFIC_CFLAGS -DARCH_IS_PPC_ALTIVEC" ASSEMBLY_SOURCES="SRC_ALTIVEC" else AC_MSG_RESULT(no) fi rm -f conftest.* fi dnl dnl IA64 dnl if test "$ARCHITECTURE" = "IA64" ; then AS="\$(CC)" AFLAGS="-c" ASSEMBLY_EXTENSION="s" ASSEMBLY_SOURCES="SRC_IA64" case `basename $CC` in *ecc*) DCT_IA64_SOURCES="idct_ia64_ecc.s" dnl If the compiler is ecc, then i don't know its options dnl fallback to "no options" if test "$force_default_cc_options" = "yes" ; then our_cflags_defaults="" fi ;; *) DCT_IA64_SOURCES="idct_ia64_gcc.s" ;; esac fi dnl ========================================================================== dnl dnl Check for header files dnl dnl ========================================================================== AC_CHECK_HEADERS( stdio.h \ signal.h \ , , AC_MSG_ERROR(Missing header file)) dnl ========================================================================== dnl dnl Now we can set CFLAGS if needed dnl dnl ========================================================================== if test "$force_default_cc_options" = "yes" ; then CFLAGS="$our_cflags_defaults" fi 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_CFLAG $GNU_PROF_CFLAGS" if test "$enable_gnuprofile" = "yes" ; then CFLAGS=`echo $CFLAGS | sed s/'-fomit-frame-pointer'/''/` fi dnl ========================================================================== dnl dnl Substitions dnl dnl ========================================================================== AC_SUBST(FEATURES) AC_SUBST(ARCHITECTURE) AC_SUBST(BUS) AC_SUBST(ENDIANNESS) AC_SUBST(SHARED_EXTENSION) AC_SUBST(STATIC_EXTENSION) AC_SUBST(OBJECT_EXTENSION) AC_SUBST(NASM_FORMAT) AC_SUBST(AS) AC_SUBST(AFLAGS) AC_SUBST(ASSEMBLY_EXTENSION) AC_SUBST(GENERIC_SOURCES) AC_SUBST(ASSEMBLY_SOURCES) AC_SUBST(CC) 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(RANLIB) AC_SUBST(API_MAJOR) AC_SUBST(API_MINOR) AC_SUBST(STATIC_LIB) AC_SUBST(SHARED_LIB) dnl ========================================================================== dnl dnl Output files dnl dnl ========================================================================== AC_CONFIG_FILES(platform.inc) AC_CONFIG_FILES(libxvidcore.def) AC_OUTPUT