diff --git a/Makefile.am b/Makefile.am index 19efc2a711cd7ccb7c7474f2bd860ba37de7ea0e..86cdbf963999a0b73474811af71459faa8496e1d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -40,50 +40,50 @@ TESTS = celt/tests/test_unit_types celt/tests/test_unit_mathops celt/tests/test_ opus_demo_SOURCES = src/opus_demo.c -opus_demo_LDADD = libopus.la -lm +opus_demo_LDADD = libopus.la $(LIBM) repacketizer_demo_SOURCES = src/repacketizer_demo.c -repacketizer_demo_LDADD = libopus.la -lm +repacketizer_demo_LDADD = libopus.la $(LIBM) opus_compare_SOURCES = src/opus_compare.c -opus_compare_LDADD = -lm +opus_compare_LDADD = $(LIBM) tests_test_opus_api_SOURCES = tests/test_opus_api.c tests/test_opus_common.h -tests_test_opus_api_LDADD = libopus.la -lm +tests_test_opus_api_LDADD = libopus.la $(LIBM) tests_test_opus_encode_SOURCES = tests/test_opus_encode.c tests/test_opus_common.h -tests_test_opus_encode_LDADD = libopus.la -lm +tests_test_opus_encode_LDADD = libopus.la $(LIBM) tests_test_opus_decode_SOURCES = tests/test_opus_decode.c tests/test_opus_common.h -tests_test_opus_decode_LDADD = libopus.la -lm +tests_test_opus_decode_LDADD = libopus.la $(LIBM) tests_test_opus_padding_SOURCES = tests/test_opus_padding.c tests/test_opus_common.h -tests_test_opus_padding_LDADD = libopus.la -lm +tests_test_opus_padding_LDADD = libopus.la $(LIBM) celt_tests_test_unit_cwrs32_SOURCES = celt/tests/test_unit_cwrs32.c -celt_tests_test_unit_cwrs32_LDADD = -lm +celt_tests_test_unit_cwrs32_LDADD = $(LIBM) celt_tests_test_unit_dft_SOURCES = celt/tests/test_unit_dft.c -celt_tests_test_unit_dft_LDADD = -lm +celt_tests_test_unit_dft_LDADD = $(LIBM) celt_tests_test_unit_entropy_SOURCES = celt/tests/test_unit_entropy.c -celt_tests_test_unit_entropy_LDADD = -lm +celt_tests_test_unit_entropy_LDADD = $(LIBM) celt_tests_test_unit_laplace_SOURCES = celt/tests/test_unit_laplace.c -celt_tests_test_unit_laplace_LDADD = -lm +celt_tests_test_unit_laplace_LDADD = $(LIBM) celt_tests_test_unit_mathops_SOURCES = celt/tests/test_unit_mathops.c -celt_tests_test_unit_mathops_LDADD = -lm +celt_tests_test_unit_mathops_LDADD = $(LIBM) celt_tests_test_unit_mdct_SOURCES = celt/tests/test_unit_mdct.c -celt_tests_test_unit_mdct_LDADD = -lm +celt_tests_test_unit_mdct_LDADD = $(LIBM) celt_tests_test_unit_rotation_SOURCES = celt/tests/test_unit_rotation.c -celt_tests_test_unit_rotation_LDADD = -lm +celt_tests_test_unit_rotation_LDADD = $(LIBM) celt_tests_test_unit_types_SOURCES = celt/tests/test_unit_types.c -celt_tests_test_unit_types_LDADD = -lm +celt_tests_test_unit_types_LDADD = $(LIBM) endif if CUSTOM_MODES @@ -91,7 +91,7 @@ pkginclude_HEADERS += include/opus_custom.h if EXTRA_PROGRAMS noinst_PROGRAMS += opus_custom_demo opus_custom_demo_SOURCES = celt/opus_custom_demo.c -opus_custom_demo_LDADD = libopus.la -lm +opus_custom_demo_LDADD = libopus.la $(LIBM) endif endif diff --git a/configure.ac b/configure.ac index 824d4429c221b286be5e4daa02031a325ff363a9..13d04b09471d9b30885554670d840aee5ca6b483 100644 --- a/configure.ac +++ b/configure.ac @@ -41,8 +41,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. @@ -60,7 +64,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. */ @@ -74,43 +79,76 @@ 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" + PC_LIBM="$LIBM" +]) + +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" + PC_LIBM="$LIBM" +]) + +AM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"]) has_float_approx=no #case "$host_cpu" in @@ -119,132 +157,116 @@ 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_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 -AC_ARG_ENABLE(asm, - AS_HELP_STRING([--disable-asm], [Disable assembly optimizations]), - [ ac_enable_asm=$enableval ], [ ac_enable_asm=yes] ) -if test "x${ac_enable_asm}" = xyes ; then + +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 "x${asm_optimization}" = "xARM" ; then + 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 "x${ARMv5E_ASM}" = "x1" ; then - AC_DEFINE(ARMv5E_ASM, 1, [Use ARMv5E asm optimizations]) - asm_optimization="${asm_optimization} (EDSP)" + 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 "x${ARMv6_ASM}" = "x1" ; then - AC_DEFINE(ARMv6_ASM, 1, [Use ARMv6 asm optimizations]) - asm_optimization="${asm_optimization} (Media)" + 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 "x${ARM_HAVE_NEON}" = "x1" ; then + if test "$ARM_HAVE_NEON" = "1" ; then AC_DEFINE([ARM_HAVE_NEON], 1, [Use ARM NEON optimizations]) - asm_optimization="${asm_optimization} (NEON)" + asm_optimization="$asm_optimization (NEON)" fi fi ;; esac -else +],[ asm_optimization="disabled" -fi - -AC_ARG_ENABLE(rtcd, - AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection]), - [ ac_enable_rtcd=$enableval ], [ ac_enable_rtcd=yes] ) -if test "x${ac_enable_rtcd}" = xyes -a "x${rtcd_support}" = xyes ; then - AC_DEFINE([OPUS_HAVE_RTCD], 1, [Use run-time CPU capabilities detection]) -elif test "x${rtcd_support}" = xno ; then - rtcd_support="no rtcd for your platform, please send patches" -else +]) + +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" -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([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]) - -ac_enable_extra_programs="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)]), - [ac_enable_extra_programs=$enableval]) -if test "$ac_enable_extra_programs" != "yes"; then - ac_enable_extra_progs="no" -fi + [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" @@ -252,34 +274,20 @@ warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-proto saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $warn_CFLAGS" AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])], - [ AC_MSG_RESULT([yes]) - EXTRA_WARNS=$warn_CFLAGS ], - AC_MSG_RESULT([no])) -CFLAGS="$saved_CFLAGS $EXTRA_WARNS" - +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]) -AC_CHECK_FUNCS([__malloc_hook]) +LIBS="$saved_LIBS" -AM_CONDITIONAL([FIXED_POINT], [test x$ac_enable_fixed = xyes]) -AM_CONDITIONAL([CUSTOM_MODES], [test x$ac_enable_custom_modes = xyes]) -AM_CONDITIONAL([EXTRA_PROGRAMS], [test x$ac_enable_extra_programs = xyes]) -AM_CONDITIONAL([CPU_ARM], [test x$cpu_arm = xyes]) +AC_CHECK_FUNCS([__malloc_hook]) -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]) @@ -298,21 +306,21 @@ AC_MSG_NOTICE([ 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} + 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: .................. ${ac_enable_custom_modes} - Assertion checking: ............ ${ac_enable_assertions} - Fuzzing: ....................... ${ac_enable_fuzzing} + Custom modes: .................. ${enable_custom_modes} + Assertion checking: ............ ${enable_assertions} + Fuzzing: ....................... ${enable_fuzzing} - API documentation: ............. ${ac_enable_doc} - Extra programs: ................ ${ac_enable_extra_programs} + API documentation: ............. ${enable_doc} + Extra programs: ................ ${enable_extra_programs} ------------------------------------------------------------------------ Type "make; make install" to compile and install