Index: configure.ac |
diff --git a/configure.ac b/configure.ac |
index 6394e2eadb5c94a6cbc227924bf883540d635f73..2d4896bdd4a90c8587816dd8d64dcce82b224b6f 100644 |
--- a/configure.ac |
+++ b/configure.ac |
@@ -1,67 +1,36 @@ |
dnl Process this file with autoconf to produce a configure script. -*-m4-*- |
-AC_INIT(src/opus_encoder.c) |
- |
-AM_CONFIG_HEADER([config.h]) |
+dnl The package_version file will be automatically synced to the git revision |
+dnl by the update_version script when configured in the repository, but will |
+dnl remain constant in tarball releases unless it is manually edited. |
+m4_define([CURRENT_VERSION], |
+ m4_esyscmd([ ./update_version 2>/dev/null || true |
+ if test -e package_version; then |
+ . ./package_version |
+ printf "$PACKAGE_VERSION" |
+ else |
+ printf "unknown" |
+ fi ])) |
+ |
+AC_INIT([opus],[CURRENT_VERSION],[opus@xiph.org]) |
+ |
+AC_CONFIG_SRCDIR(src/opus_encoder.c) |
+AC_CONFIG_MACRO_DIR([m4]) |
dnl enable silent rules on automake 1.11 and later |
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) |
-# Read our default version string from version.mk. |
-# Please update this file for releases. |
-AC_MSG_CHECKING([version.mk]) |
-MK_VERSION=$(awk 'BEGIN { FS = "=" } |
- /OPUS_VERSION/ { ver = $2} |
- END { |
- gsub(/"/, "", ver); |
- gsub(/^ /, "", ver); |
- gsub(/ $/, "", ver); |
- print ver; |
- }' $srcdir/version.mk) |
-if test -z "$MK_VERSION"; then |
- AC_MSG_RESULT([no]) |
-else |
- AC_MSG_RESULT([$MK_VERSION]) |
- OPUS_VERSION="$MK_VERSION" |
-fi |
- |
-# Override with the git version, if available. |
-AC_MSG_CHECKING([git revision]) |
-GIT_VERSION=$(git describe --tags --match 'v*' 2>/dev/null | sed 's/^v//') |
-if test -z "$GIT_VERSION"; then |
- AC_MSG_RESULT([no]) |
-else |
- AC_MSG_RESULT([$GIT_VERSION]) |
- OPUS_VERSION="$GIT_VERSION" |
-fi |
- |
-# Use 'unknown' if all else fails. |
-if test -z "$OPUS_VERSION"; then |
- OPUS_VERSION="unknown" |
-fi |
- |
-# For automake. |
-PACKAGE=opus |
-VERSION=$OPUS_VERSION |
- |
-# For autoconf |
-AC_SUBST(OPUS_VERSION) |
- |
-# For config.h. |
-AC_DEFINE_UNQUOTED([OPUS_VERSION], ["$OPUS_VERSION"], |
- [Opus library version string]) |
- |
# For libtool. |
dnl Please update these for releases. |
-OPUS_LT_CURRENT=3 |
+OPUS_LT_CURRENT=4 |
OPUS_LT_REVISION=0 |
-OPUS_LT_AGE=3 |
+OPUS_LT_AGE=4 |
AC_SUBST(OPUS_LT_CURRENT) |
AC_SUBST(OPUS_LT_REVISION) |
AC_SUBST(OPUS_LT_AGE) |
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define) |
+AM_INIT_AUTOMAKE([no-define]) |
AM_MAINTAINER_MODE([enable]) |
AC_CANONICAL_HOST |
@@ -73,8 +42,12 @@ AC_PROG_CC_C99 |
AC_C_CONST |
AC_C_INLINE |
+AC_DEFINE([OPUS_BUILD], [], [This is a build of OPUS]) |
+ |
#Use a hacked up version of autoconf's AC_C_RESTRICT because it's not |
#strong enough a test to detect old buggy versions of GCC (e.g. 2.95.3) |
+#Note: Both this and the test for variable-size arrays below are also |
+# done by AC_PROG_CC_C99, but not thoroughly enough apparently. |
AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, |
[ac_cv_c_restrict=no |
# The order here caters to the fact that C++ does not require restrict. |
@@ -92,7 +65,8 @@ AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, |
test "$ac_cv_c_restrict" != no && break |
done |
]) |
- AH_VERBATIM([restrict], |
+ |
+AH_VERBATIM([restrict], |
[/* Define to the equivalent of the C99 'restrict' keyword, or to |
nothing if this is not supported. Do not define if restrict is |
supported directly. */ |
@@ -106,43 +80,74 @@ AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, |
# define _Restrict |
# define __restrict__ |
#endif]) |
- case $ac_cv_c_restrict in |
+ |
+case $ac_cv_c_restrict in |
restrict) ;; |
no) AC_DEFINE([restrict], []) ;; |
*) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; |
- esac |
- |
-AC_DEFINE([OPUS_BUILD], [], [This is a build of OPUS]) |
+esac |
AC_MSG_CHECKING(for C99 variable-size arrays) |
-AC_TRY_COMPILE( [], [static int x; char a[++x]; a[sizeof a - 1] = 0; int N; return a[0];], |
-[has_var_arrays=yes;AC_DEFINE([VAR_ARRAYS], [], [Use C99 variable-size arrays]) |
-], |
-has_var_arrays=no |
-) |
-AC_MSG_RESULT($has_var_arrays) |
- |
-AC_CHECK_HEADERS([alloca.h getopt.h]) |
-AC_MSG_CHECKING(for alloca) |
-AC_TRY_COMPILE( [#include <alloca.h>], [ |
-int foo=10; |
-int *array = alloca(foo); |
-], |
-[ |
-has_alloca=yes; |
-if test x$has_var_arrays = "xno" ; then |
-AC_DEFINE([USE_ALLOCA], [], [Make use of alloca]) |
-fi |
-], |
-has_alloca=no |
-) |
-AC_MSG_RESULT($has_alloca) |
- |
-AC_CHECK_FUNC(exp,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno]) |
-if test x"$fp_libm_not_needed" = xdunno; then |
- AC_CHECK_LIB([m], [exp], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=]) |
-fi |
-AC_SUBST([LIBM]) |
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], |
+ [[static int x; char a[++x]; a[sizeof a - 1] = 0; int N; return a[0];]])], |
+ [ has_var_arrays=yes |
+ use_alloca="no (using var arrays)" |
+ AC_DEFINE([VAR_ARRAYS], [1], [Use C99 variable-size arrays]) |
+ ],[ |
+ has_var_arrays=no |
+ ]) |
+AC_MSG_RESULT([$has_var_arrays]) |
+ |
+AS_IF([test "$has_var_arrays" = "no"], |
+ [ |
+ AC_CHECK_HEADERS([alloca.h]) |
+ AC_MSG_CHECKING(for alloca) |
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <alloca.h>]], |
+ [[int foo=10; int *array = alloca(foo);]])], |
+ [ use_alloca=yes; |
+ AC_DEFINE([USE_ALLOCA], [], [Make use of alloca]) |
+ ],[ |
+ use_alloca=no |
+ ]) |
+ AC_MSG_RESULT([$use_alloca]) |
+ ]) |
+ |
+LT_LIB_M |
+ |
+AC_ARG_ENABLE([fixed-point], |
+ [AS_HELP_STRING([--enable-fixed-point], |
+ [compile without floating point (for machines without a fast enough FPU)])],, |
+ [enable_fixed_point=no]) |
+ |
+AS_IF([test "$enable_fixed_point" = "yes"],[ |
+ enable_float="no" |
+ AC_DEFINE([FIXED_POINT], [1], [Compile as fixed-point (for machines without a fast enough FPU)]) |
+ PC_BUILD="fixed-point" |
+],[ |
+ enable_float="yes"; |
+ PC_BUILD="floating-point" |
+]) |
+ |
+AM_CONDITIONAL([FIXED_POINT], [test "$enable_fixed_point" = "yes"]) |
+ |
+AC_ARG_ENABLE([fixed-point-debug], |
+ [AS_HELP_STRING([--enable-fixed-point-debug], [debug fixed-point implementation])],, |
+ [enable_fixed_point_debug=no]) |
+ |
+AS_IF([test "$enable_fixed_point_debug" = "yes"],[ |
+ AC_DEFINE([FIXED_DEBUG], [1], [Debug fixed-point implementation]) |
+]) |
+ |
+AC_ARG_ENABLE([custom-modes], |
+ [AS_HELP_STRING([--enable-custom-modes], [enable non-Opus modes, e.g. 44.1 kHz & 2^n frames])],, |
+ [enable_custom_modes=no]) |
+ |
+AS_IF([test "$enable_custom_modes" = "yes"],[ |
+ AC_DEFINE([CUSTOM_MODES], [1], [Custom modes]) |
+ PC_BUILD="$PC_BUILD, custom modes" |
+]) |
+ |
+AM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"]) |
has_float_approx=no |
#case "$host_cpu" in |
@@ -151,173 +156,172 @@ has_float_approx=no |
# ;; |
#esac |
-ac_enable_fixed="no"; |
-ac_enable_float="yes"; |
-AC_ARG_ENABLE(fixed-point, [ --enable-fixed-point compile without floating point (for machines without a fast enough FPU)], |
-[if test "$enableval" = yes; then |
- ac_enable_fixed="yes"; |
- ac_enable_float="no"; |
- AC_DEFINE([FIXED_POINT], [1], [Compile as fixed-point (for machines without a fast enough FPU)]) |
-fi]) |
- |
-ac_enable_fixed_debug="no" |
-AC_ARG_ENABLE(fixed-point-debug, [ --enable-fixed-point-debug debug fixed-point implementation], |
-[if test "$enableval" = yes; then |
- ac_enable_fixed_debug="yes" |
- AC_DEFINE([FIXED_DEBUG], , [Debug fixed-point implementation]) |
-fi]) |
- |
-ac_enable_custom_modes="no" |
-AC_ARG_ENABLE(custom-modes, [ --enable-custom-modes enable non-Opus modes, e.g. 44.1 kHz & 2^n frames], |
-[if test "$enableval" = yes; then |
- ac_enable_custom_modes="yes" |
- AC_DEFINE([CUSTOM_MODES], , [Custom modes]) |
-fi]) |
- |
-float_approx=$has_float_approx |
-AC_ARG_ENABLE(float-approx, [ --enable-float-approx enable fast approximations for floating point], |
- [ if test "$enableval" = yes; then |
- AC_WARN([Floating point approximations are not supported on all platforms.]) |
- float_approx=yes |
- else |
- float_approx=no |
- fi], [ float_approx=$has_float_approx ]) |
- |
-if test "x${float_approx}" = "xyes"; then |
- AC_DEFINE([FLOAT_APPROX], , [Float approximations]) |
-fi |
- |
-ac_enable_assertions="no" |
-AC_ARG_ENABLE(assertions, [ --enable-assertions enable additional software error checking], |
-[if test "$enableval" = yes; then |
- ac_enable_assertions="yes" |
- AC_DEFINE([ENABLE_ASSERTIONS], , [Assertions]) |
-fi]) |
- |
-ac_enable_fuzzing="no" |
-AC_ARG_ENABLE(fuzzing, [ --enable-fuzzing causes the encoder to make random decisions], |
-[if test "$enableval" = yes; then |
- ac_enable_fuzzing="yes" |
- AC_DEFINE([FUZZING], , [Fuzzing]) |
-fi]) |
- |
-ac_enable_doc="yes" |
+AC_ARG_ENABLE([float-approx], |
+ [AS_HELP_STRING([--enable-float-approx], [enable fast approximations for floating point])], |
+ [if test "$enable_float_approx" = "yes"; then |
+ AC_WARN([Floating point approximations are not supported on all platforms.]) |
+ fi |
+ ], |
+ [enable_float_approx=$has_float_approx]) |
+ |
+AS_IF([test "$enable_float_approx" = "yes"],[ |
+ AC_DEFINE([FLOAT_APPROX], [1], [Float approximations]) |
+]) |
+ |
+AC_ARG_ENABLE([asm], |
+ [AS_HELP_STRING([--disable-asm], [Disable assembly optimizations])],, |
+ [enable_asm=yes]) |
+ |
+rtcd_support=no |
+cpu_arm=no |
+ |
+AS_IF([test "$enable_asm" = "yes"],[ |
+ asm_optimization="no asm for your platform, please send patches" |
+ case $host_cpu in |
+ arm*) |
+ cpu_arm=yes |
+ AS_GCC_INLINE_ASSEMBLY([asm_optimization="ARM"], |
+ [asm_optimization="disabled"]) |
+ if test "$asm_optimization" = "ARM" ; then |
+ rtcd_support=yes |
+ AC_DEFINE([ARMv4_ASM], 1, [Use generic ARMv4 asm optimizations]) |
+ AS_ASM_ARM_EDSP([ARMv5E_ASM=1],[ARMv5E_ASM=0]) |
+ if test "$ARMv5E_ASM" = "1" ; then |
+ AC_DEFINE([ARMv5E_ASM], [1], [Use ARMv5E asm optimizations]) |
+ asm_optimization="$asm_optimization (EDSP)" |
+ fi |
+ AS_ASM_ARM_MEDIA([ARMv6_ASM=1],[ARMv6_ASM=0]) |
+ if test "$ARMv6_ASM" = "1" ; then |
+ AC_DEFINE([ARMv6_ASM], [1], [Use ARMv6 asm optimizations]) |
+ asm_optimization="$asm_optimization (Media)" |
+ fi |
+ AS_ASM_ARM_NEON([ARM_HAVE_NEON=1],[ARM_HAVE_NEON=0]) |
+ if test "$ARM_HAVE_NEON" = "1" ; then |
+ AC_DEFINE([ARM_HAVE_NEON], 1, [Use ARM NEON optimizations]) |
+ asm_optimization="$asm_optimization (NEON)" |
+ fi |
+ fi |
+ ;; |
+ esac |
+],[ |
+ asm_optimization="disabled" |
+]) |
+ |
+AM_CONDITIONAL([CPU_ARM], [test "$cpu_arm" = "yes"]) |
+ |
+AC_ARG_ENABLE([rtcd], |
+ [AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection])],, |
+ [enable_rtcd=yes]) |
+ |
+AS_IF([test "$enable_rtcd" = "yes"],[ |
+ AS_IF([test "$rtcd_support" = "yes"],[ |
+ AC_DEFINE([OPUS_HAVE_RTCD], [1], [Use run-time CPU capabilities detection]) |
+ ],[ |
+ rtcd_support="no rtcd for your platform, please send patches" |
+ ]) |
+],[ |
+ rtcd_support="no" |
+]) |
+ |
+AC_ARG_ENABLE([assertions], |
+ [AS_HELP_STRING([--enable-assertions],[enable additional software error checking])],, |
+ [enable_assertions=no]) |
+ |
+AS_IF([test "$enable_assertions" = "yes"], [ |
+ AC_DEFINE([ENABLE_ASSERTIONS], [1], [Assertions]) |
+]) |
+ |
+AC_ARG_ENABLE([fuzzing], |
+ [AS_HELP_STRING([--enable-fuzzing],[causes the encoder to make random decisions])],, |
+ [enable_fuzzing=no]) |
+ |
+AS_IF([test "$enable_fuzzing" = "yes"], [ |
+ AC_DEFINE([FUZZING], [1], [Fuzzing]) |
+]) |
+ |
AC_ARG_ENABLE([doc], |
- AS_HELP_STRING([--disable-doc], [Do not build API documentation]), |
- [ac_enable_doc=$enableval]) |
-AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no]) |
-if test "$HAVE_DOXYGEN" != "yes" -o "$ac_enable_doc" != "yes"; then |
- HAVE_DOXYGEN="false" |
- ac_enable_doc="no" |
-fi |
-AM_CONDITIONAL(HAVE_DOXYGEN, [test $HAVE_DOXYGEN = yes]) |
+ [AS_HELP_STRING([--disable-doc], [Do not build API documentation])],, |
+ [enable_doc=yes]) |
+ |
+AS_IF([test "$enable_doc" = "yes"], [ |
+ AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no]) |
+],[ |
+ HAVE_DOXYGEN=no |
+]) |
+ |
+AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"]) |
+ |
+AC_ARG_ENABLE([extra-programs], |
+ [AS_HELP_STRING([--disable-extra-programs], [Do not build extra programs (demo and tests)])],, |
+ [enable_extra_programs=yes]) |
+ |
+AM_CONDITIONAL([EXTRA_PROGRAMS], [test "$enable_extra_programs" = "yes"]) |
+ |
saved_CFLAGS="$CFLAGS" |
CFLAGS="$CFLAGS -fvisibility=hidden" |
AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden]) |
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])], |
- [ AC_MSG_RESULT([yes]) |
- SYMBOL_VISIBILITY="-fvisibility=hidden" ], |
- AC_MSG_RESULT([no])) |
-CFLAGS="$saved_CFLAGS $SYMBOL_VISIBILITY" |
-AC_SUBST(SYMBOL_VISIBILITY) |
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], |
+ [ AC_MSG_RESULT([yes]) ], |
+ [ AC_MSG_RESULT([no]) |
+ CFLAGS="$saved_CFLAGS" |
+ ]) |
CFLAGS="$CFLAGS -W" |
+warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes" |
saved_CFLAGS="$CFLAGS" |
-CFLAGS="$CFLAGS -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes" |
-AC_MSG_CHECKING([if ${CC} supports -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes]) |
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])], |
- [ AC_MSG_RESULT([yes]) |
- EXTRA_WARNS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes" ], |
- AC_MSG_RESULT([no])) |
-CFLAGS="$saved_CFLAGS $EXTRA_WARNS" |
- |
+CFLAGS="$CFLAGS $warn_CFLAGS" |
+AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}]) |
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], |
+ [ AC_MSG_RESULT([yes]) ], |
+ [ AC_MSG_RESULT([no]) |
+ CFLAGS="$saved_CFLAGS" |
+ ]) |
+ |
+saved_LIBS="$LIBS" |
+LIBS="$LIBS $LIBM" |
AC_CHECK_FUNCS([lrintf]) |
AC_CHECK_FUNCS([lrint]) |
+LIBS="$saved_LIBS" |
+ |
AC_CHECK_FUNCS([__malloc_hook]) |
-AC_CHECK_SIZEOF(short) |
-AC_CHECK_SIZEOF(int) |
-AC_CHECK_SIZEOF(long) |
-AC_CHECK_SIZEOF(long long) |
- |
-if test x$has_char16 = "xyes" ; then |
- case 1 in |
- $ac_cv_sizeof_short) SIZE16="short";; |
- $ac_cv_sizeof_int) SIZE16="int";; |
- esac |
-else |
- case 2 in |
- $ac_cv_sizeof_short) SIZE16="short";; |
- $ac_cv_sizeof_int) SIZE16="int";; |
- esac |
-fi |
- |
-if test x$has_char16 = "xyes" ; then |
- case 2 in |
- $ac_cv_sizeof_int) SIZE32="int";; |
- $ac_cv_sizeof_long) SIZE32="long";; |
- $ac_cv_sizeof_short) SIZE32="short";; |
- esac |
-else |
- case 4 in |
- $ac_cv_sizeof_int) SIZE32="int";; |
- $ac_cv_sizeof_long) SIZE32="long";; |
- $ac_cv_sizeof_short) SIZE32="short";; |
- esac |
-fi |
- |
-AC_SUBST(SIZE16) |
-AC_SUBST(SIZE32) |
- |
-AM_CONDITIONAL([FIXED_POINT], [test x$ac_enable_fixed = xyes]) |
-AM_CONDITIONAL([CUSTOM_MODES], [test x$ac_enable_custom_modes = xyes]) |
- |
-dnl subsitutions for the pkg-config files |
-if test x$ac_enable_float = xyes; then |
- PC_BUILD="floating-point" |
- PC_LIBM=$LIBM |
-else |
- PC_BUILD="fixed-point" |
- PC_LIBM= |
-fi |
-dnl opus_custom requires libm as well |
-if test x$ac_enable_custom_modes = xyes; then |
- PC_BUILD="${PC_BUILD}, custom modes" |
- PC_LIBM=$LIBM |
-fi |
AC_SUBST([PC_BUILD]) |
-AC_SUBST([PC_LIBM]) |
AC_CONFIG_FILES([Makefile opus.pc opus-uninstalled.pc |
doc/Makefile doc/Doxyfile]) |
+AC_CONFIG_HEADERS([config.h]) |
AC_OUTPUT |
-AC_MSG_RESULT([ |
+AC_MSG_NOTICE([ |
------------------------------------------------------------------------ |
- $PACKAGE $VERSION: Automatic configuration OK. |
- |
+ $PACKAGE_NAME $PACKAGE_VERSION: Automatic configuration OK. |
+ |
Compiler support: |
C99 var arrays: ................ ${has_var_arrays} |
C99 lrintf: .................... ${ac_cv_func_lrintf} |
- Alloca: ........................ ${has_alloca} |
+ Use alloca: .................... ${use_alloca} |
General configuration: |
- Floating point support: ........ ${ac_enable_float} |
- Fast float approximations: ..... ${float_approx} |
- Fixed point debugging: ......... ${ac_enable_fixed_debug} |
- Custom modes: .................. ${ac_enable_custom_modes} |
- Assertion checking: ............ ${ac_enable_assertions} |
- Fuzzing: ....................... ${ac_enable_fuzzing} |
- |
- API documentation: ............. ${ac_enable_doc} |
+ Floating point support: ........ ${enable_float} |
+ Fast float approximations: ..... ${enable_float_approx} |
+ Fixed point debugging: ......... ${enable_fixed_point_debug} |
+ Assembly optimization: ......... ${asm_optimization} |
+ Run-time CPU detection: ........ ${rtcd_support} |
+ Custom modes: .................. ${enable_custom_modes} |
+ Assertion checking: ............ ${enable_assertions} |
+ Fuzzing: ....................... ${enable_fuzzing} |
+ |
+ API documentation: ............. ${enable_doc} |
+ Extra programs: ................ ${enable_extra_programs} |
------------------------------------------------------------------------ |
+ |
+ Type "make; make install" to compile and install |
+ Type "make check" to run the test suite |
]) |
-echo "Type \"make; make install\" to compile and install"; |
-echo "Type \"make check\" to run the test suite"; |