dnl -*- m4 -*-
dnl
dnl libmad - MPEG audio decoder library
dnl Copyright (C) 2000-2004 Underbit Technologies, Inc.
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dnl
AC_REVISION([$Id: configure.ac,v 1.9 2004/01/23 09:41:32 rob Exp $])dnl
dnl Process this file with autoconf to produce a configure script.
AC_INIT([MPEG Audio Decoder], [0.15.1b], [support@underbit.com], [libmad])
AC_PREREQ(2.53)
AC_CONFIG_SRCDIR([decoder.h])
AM_INIT_AUTOMAKE
AM_CONFIG_HEADER([config.h])
dnl System type.
AC_CANONICAL_HOST
dnl Checks for programs.
AC_PROG_CC
AM_PROG_AS
if test "$GCC" = yes
then
case "$host" in
*-*-mingw*)
case "$build" in
*-*-cygwin*)
CPPFLAGS="$CPPFLAGS -mno-cygwin"
LDFLAGS="$LDFLAGS -mno-cygwin"
;;
esac
esac
dnl case "$host" in
dnl *-*-cygwin* | *-*-mingw*)
dnl LDFLAGS="$LDFLAGS -no-undefined -mdll"
dnl ;;
dnl esac
fi
dnl Support for libtool.
AC_DISABLE_SHARED
dnl AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS)
dnl Compiler options.
arch=""
debug=""
optimize=""
profile=""
set -- $CFLAGS
CFLAGS=""
if test "$GCC" = yes
then
CFLAGS="-Wall"
fi
while test $# -gt 0
do
case "$1" in
-Wall)
if test "$GCC" = yes
then
:
else
CFLAGS="$CFLAGS $1"
fi
shift
;;
-g)
debug="-g"
shift
;;
-mno-cygwin)
shift
;;
-m*)
arch="$arch $1"
shift
;;
-O2)
optimize="-O"
shift
;;
-fomit-frame-pointer)
shift
;;
-O*|-f*)
optimize="$optimize $1"
shift
;;
*)
CFLAGS="$CFLAGS $1"
shift
;;
esac
done
if test "$GCC" = yes
then
if test -z "$arch"
then
case "$host" in
i386-*) ;;
i?86-*) arch="-march=i486" ;;
arm*-empeg-*) arch="-march=armv4 -mtune=strongarm1100" ;;
armv4*-*) arch="-march=armv4 -mtune=strongarm" ;;
powerpc-*) ;;
mips*-agenda-*) arch="-mcpu=vr4100" ;;
mips*-luxsonor-*) arch="-mips1 -mcpu=r3000 -Wa,-m4010" ;;
esac
fi
case "$optimize" in
-O|"-O "*)
optimize="-O"
optimize="$optimize -fforce-mem"
optimize="$optimize -fforce-addr"
: #x optimize="$optimize -finline-functions"
: #- optimize="$optimize -fstrength-reduce"
optimize="$optimize -fthread-jumps"
optimize="$optimize -fcse-follow-jumps"
optimize="$optimize -fcse-skip-blocks"
: #x optimize="$optimize -frerun-cse-after-loop"
: #x optimize="$optimize -frerun-loop-opt"
: #x optimize="$optimize -fgcse"
optimize="$optimize -fexpensive-optimizations"
optimize="$optimize -fregmove"
: #* optimize="$optimize -fdelayed-branch"
: #x optimize="$optimize -fschedule-insns"
optimize="$optimize -fschedule-insns2"
: #? optimize="$optimize -ffunction-sections"
: #? optimize="$optimize -fcaller-saves"
: #> optimize="$optimize -funroll-loops"
: #> optimize="$optimize -funroll-all-loops"
: #x optimize="$optimize -fmove-all-movables"
: #x optimize="$optimize -freduce-all-givs"
: #? optimize="$optimize -fstrict-aliasing"
: #* optimize="$optimize -fstructure-noalias"
case "$host" in
arm*-*)
optimize="$optimize -fstrength-reduce"
;;
mips*-*)
optimize="$optimize -fstrength-reduce"
optimize="$optimize -finline-functions"
;;
i?86-*)
optimize="$optimize -fstrength-reduce"
;;
powerpc-apple-*)
# this triggers an internal compiler error with gcc2
: #optimize="$optimize -fstrength-reduce"
# this is really only beneficial with gcc3
: #optimize="$optimize -finline-functions"
;;
*)
# this sometimes provokes bugs in gcc 2.95.2
: #optimize="$optimize -fstrength-reduce"
;;
esac
;;
esac
fi
case "$host" in
mips*-agenda-*)
AC_DEFINE(HAVE_MADD16_ASM, 1,
[Define if your MIPS CPU supports a 2-operand MADD16 instruction.])
;;
mips*-luxsonor-*)
AC_DEFINE(HAVE_MADD_ASM, 1,
[Define if your MIPS CPU supports a 2-operand MADD instruction.])
;;
esac
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(assert.h limits.h unistd.h sys/types.h fcntl.h errno.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_C_BIGENDIAN
AC_TYPE_PID_T
AC_CHECK_SIZEOF(int, 2)
AC_CHECK_SIZEOF(long, 4)
AC_CHECK_SIZEOF(long long, 8)
dnl Checks for library functions.
AC_CHECK_FUNCS(waitpid fcntl pipe fork)
dnl Other options.
AC_SUBST(FPM)
AC_SUBST(ASO)
AC_SUBST(ASO_OBJS)
dnl handle --enable and --disable options
AC_CACHE_SAVE
AC_MSG_CHECKING(whether to optimize for speed or for accuracy)
AC_ARG_ENABLE(speed, AC_HELP_STRING([--enable-speed],
[optimize for speed over accuracy]),
[
case "$enableval" in
yes)
optimize_for="speed"
AC_DEFINE(OPT_SPEED, 1,
[Define to optimize for speed over accuracy.])
;;
esac
])
AC_ARG_ENABLE(accuracy, AC_HELP_STRING([--enable-accuracy],
[optimize for accuracy over speed]),
[
case "$enableval" in
yes)
if test "$optimize_for" = "speed"
then
optimize_for="both"
else
optimize_for="accuracy"
fi
AC_DEFINE(OPT_ACCURACY, 1,
[Define to optimize for accuracy over speed.])
;;
esac
])
AC_MSG_RESULT(${optimize_for-default})
if test "$optimize_for" = "both"
then
AC_MSG_ERROR(cannot optimize for both speed and accuracy)
fi
AC_MSG_CHECKING(for architecture-specific fixed-point math routines)
AC_ARG_ENABLE(fpm, AC_HELP_STRING([--enable-fpm=ARCH],
[use ARCH-specific fixed-point math routines
(one of: intel, arm, mips, sparc, ppc, 64bit, default)]),
[
case "$enableval" in
yes) ;;
no|default|approx) FPM="DEFAULT" ;;
intel|i?86) FPM="INTEL" ;;
arm) FPM="ARM" ;;
mips) FPM="MIPS" ;;
sparc) FPM="SPARC" ;;
ppc|powerpc) FPM="PPC" ;;
64bit) FPM="64BIT" ;;
float) FPM="FLOAT" ;;
*)
AC_MSG_RESULT(failed)
AC_MSG_ERROR([bad --enable-fpm option])
;;
esac
])
if test -z "$FPM" && test "$GCC" = yes
then
case "$host" in
i?86-*) FPM="INTEL" ;;
arm*-*) FPM="ARM" ;;
mips*-*) FPM="MIPS" ;;
sparc*-*) FPM="SPARC" ;;
powerpc*-*) FPM="PPC" ;;
# FIXME: need to test for 64-bit long long...
esac
fi
AC_MSG_RESULT(${FPM=DEFAULT})
if test "$FPM" = "DEFAULT"
then
AC_MSG_WARN([default fixed-point math will yield limited accuracy])
fi
FPM="-DFPM_$FPM"
AC_ARG_ENABLE(sso, AC_HELP_STRING([--enable-sso],
[use subband synthesis optimization]),
[
case "$enableval" in
yes)
AC_DEFINE(OPT_SSO, 1,
[Define to enable a fast subband synthesis approximation optimization.])
;;
esac
])
AC_ARG_ENABLE(aso, AC_HELP_STRING([--disable-aso],
[disable architecture-specific optimizations]),
[], [enable_aso=yes])
if test "$enable_aso" = yes
then
case "$host" in
i?86-*)
: #ASO="$ASO -DASO_INTERLEAVE1"
ASO="$ASO -DASO_ZEROCHECK"
: #not yet #ASO="$ASO -DASO_SYNTH"
: #not yet #ASO_OBJS="synth_mmx.lo"
;;
arm*-*)
ASO="$ASO -DASO_INTERLEAVE1"
ASO="$ASO -DASO_IMDCT"
ASO_OBJS="imdct_l_arm.lo"
;;
mips*-*)
ASO="$ASO -DASO_INTERLEAVE2"
ASO="$ASO -DASO_ZEROCHECK"
;;
esac
fi
AC_MSG_CHECKING(for ISO/IEC interpretation)
AC_ARG_ENABLE(strict-iso, AC_HELP_STRING([--enable-strict-iso],
[use strict ISO/IEC interpretations]),
[
case "$enableval" in
yes)
AC_DEFINE(OPT_STRICT, 1,
[Define to influence a strict interpretation of the ISO/IEC standards,
even if this is in opposition with best accepted practices.])
interpretation="strict"
;;
esac
])
AC_MSG_RESULT(${interpretation-best accepted practices})
AC_MSG_CHECKING(whether to enable profiling)
AC_ARG_ENABLE(profiling, AC_HELP_STRING([--enable-profiling],
[generate profiling code]),
[
case "$enableval" in
yes) profile="-pg" ;;
esac
])
AC_MSG_RESULT(${enable_profiling-no})
AC_MSG_CHECKING(whether to enable debugging)
AC_ARG_ENABLE(debugging, AC_HELP_STRING([--enable-debugging],
[enable diagnostic debugging support])
AC_HELP_STRING([--disable-debugging],
[do not enable debugging and use more optimization]),
[
case "$enableval" in
yes)
AC_DEFINE(DEBUG, 1,
[Define to enable diagnostic debugging support.])
optimize=""
;;
no)
if test -n "$profile"
then
AC_MSG_ERROR(--enable-profiling and --disable-debugging are incompatible)
fi
AC_DEFINE(NDEBUG, 1,
[Define to disable debugging assertions.])
debug=""
if test "$GCC" = yes
then
optimize="$optimize -fomit-frame-pointer"
fi
;;
esac
])
AC_MSG_RESULT(${enable_debugging-default})
AC_MSG_CHECKING(whether to enable experimental code)
AC_ARG_ENABLE(experimental, AC_HELP_STRING([--enable-experimental],
[enable experimental code]),
[
case "$enableval" in
yes)
AC_DEFINE(EXPERIMENTAL, 1,
[Define to enable experimental code.])
;;
esac
])
AC_MSG_RESULT(${enable_experimental-no})
dnl Create output files.
test -n "$arch" && CFLAGS="$CFLAGS $arch"
test -n "$debug" && CFLAGS="$CFLAGS $debug"
test -n "$optimize" && CFLAGS="$CFLAGS $optimize"
test -n "$profile" && CFLAGS="$CFLAGS $profile" LDFLAGS="$LDFLAGS $profile"
dnl LTLIBOBJS=`echo "$LIBOBJS" | sed -e 's/\.o/.lo/g'`
dnl AC_SUBST(LTLIBOBJS)
AC_CONFIG_FILES([Makefile \
libmad.list])
AC_OUTPUT