Home | History | Annotate | Download | only in src
      1 dnl Process this file with autoconf to produce a configure script. -*-m4-*-
      2 
      3 dnl The package_version file will be automatically synced to the git revision
      4 dnl by the update_version script when configured in the repository, but will
      5 dnl remain constant in tarball releases unless it is manually edited.
      6 m4_define([CURRENT_VERSION],
      7           m4_esyscmd([ ./update_version 2>/dev/null || true
      8                        if test -e package_version; then
      9                            . ./package_version
     10                            printf "$PACKAGE_VERSION"
     11                        else
     12                            printf "unknown"
     13                        fi ]))
     14 
     15 AC_INIT([opus],[CURRENT_VERSION],[opus (a] xiph.org])
     16 
     17 AC_CONFIG_SRCDIR(src/opus_encoder.c)
     18 AC_CONFIG_MACRO_DIR([m4])
     19 
     20 dnl enable silent rules on automake 1.11 and later
     21 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
     22 
     23 # For libtool.
     24 dnl Please update these for releases.
     25 OPUS_LT_CURRENT=4
     26 OPUS_LT_REVISION=0
     27 OPUS_LT_AGE=4
     28 
     29 AC_SUBST(OPUS_LT_CURRENT)
     30 AC_SUBST(OPUS_LT_REVISION)
     31 AC_SUBST(OPUS_LT_AGE)
     32 
     33 AM_INIT_AUTOMAKE([no-define])
     34 AM_MAINTAINER_MODE([enable])
     35 
     36 AC_CANONICAL_HOST
     37 AC_MINGW32
     38 AM_PROG_LIBTOOL
     39 AM_PROG_CC_C_O
     40 
     41 AC_PROG_CC_C99
     42 AC_C_CONST
     43 AC_C_INLINE
     44 
     45 AC_DEFINE([OPUS_BUILD], [], [This is a build of OPUS])
     46 
     47 #Use a hacked up version of autoconf's AC_C_RESTRICT because it's not
     48 #strong enough a test to detect old buggy versions of GCC (e.g. 2.95.3)
     49 #Note: Both this and the test for variable-size arrays below are also
     50 #      done by AC_PROG_CC_C99, but not thoroughly enough apparently.
     51 AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict,
     52   [ac_cv_c_restrict=no
     53    # The order here caters to the fact that C++ does not require restrict.
     54    for ac_kw in __restrict __restrict__ _Restrict restrict; do
     55      AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
     56       [[typedef int * int_ptr;
     57 	int foo (int_ptr $ac_kw ip, int * $ac_kw baz[]) {
     58 	return ip[0];
     59        }]],
     60       [[int s[1];
     61 	int * $ac_kw t = s;
     62 	t[0] = 0;
     63 	return foo(t, (void *)0)]])],
     64       [ac_cv_c_restrict=$ac_kw])
     65      test "$ac_cv_c_restrict" != no && break
     66    done
     67   ])
     68 
     69 AH_VERBATIM([restrict],
     70 [/* Define to the equivalent of the C99 'restrict' keyword, or to
     71    nothing if this is not supported.  Do not define if restrict is
     72    supported directly.  */
     73 #undef restrict
     74 /* Work around a bug in Sun C++: it does not support _Restrict or
     75    __restrict__, even though the corresponding Sun C compiler ends up with
     76    "#define restrict _Restrict" or "#define restrict __restrict__" in the
     77    previous line.  Perhaps some future version of Sun C++ will work with
     78    restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
     79 #if defined __SUNPRO_CC && !defined __RESTRICT
     80 # define _Restrict
     81 # define __restrict__
     82 #endif])
     83 
     84 case $ac_cv_c_restrict in
     85    restrict) ;;
     86    no) AC_DEFINE([restrict], []) ;;
     87    *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
     88 esac
     89 
     90 AC_MSG_CHECKING(for C99 variable-size arrays)
     91 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
     92                    [[static int x; char a[++x]; a[sizeof a - 1] = 0; int N; return a[0];]])],
     93     [ has_var_arrays=yes
     94       use_alloca="no (using var arrays)"
     95       AC_DEFINE([VAR_ARRAYS], [1], [Use C99 variable-size arrays])
     96     ],[
     97       has_var_arrays=no
     98     ])
     99 AC_MSG_RESULT([$has_var_arrays])
    100 
    101 AS_IF([test "$has_var_arrays" = "no"],
    102   [
    103    AC_CHECK_HEADERS([alloca.h])
    104    AC_MSG_CHECKING(for alloca)
    105    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <alloca.h>]],
    106                                       [[int foo=10; int *array = alloca(foo);]])],
    107      [ use_alloca=yes;
    108        AC_DEFINE([USE_ALLOCA], [], [Make use of alloca])
    109      ],[
    110        use_alloca=no
    111      ])
    112    AC_MSG_RESULT([$use_alloca])
    113   ])
    114 
    115 LT_LIB_M
    116 
    117 AC_ARG_ENABLE([fixed-point],
    118     [AS_HELP_STRING([--enable-fixed-point],
    119                     [compile without floating point (for machines without a fast enough FPU)])],,
    120     [enable_fixed_point=no])
    121 
    122 AS_IF([test "$enable_fixed_point" = "yes"],[
    123   enable_float="no"
    124   AC_DEFINE([FIXED_POINT], [1], [Compile as fixed-point (for machines without a fast enough FPU)])
    125   PC_BUILD="fixed-point"
    126 ],[
    127   enable_float="yes";
    128   PC_BUILD="floating-point"
    129 ])
    130 
    131 AM_CONDITIONAL([FIXED_POINT], [test "$enable_fixed_point" = "yes"])
    132 
    133 AC_ARG_ENABLE([fixed-point-debug],
    134     [AS_HELP_STRING([--enable-fixed-point-debug], [debug fixed-point implementation])],,
    135     [enable_fixed_point_debug=no])
    136 
    137 AS_IF([test "$enable_fixed_point_debug" = "yes"],[
    138   AC_DEFINE([FIXED_DEBUG], [1], [Debug fixed-point implementation])
    139 ])
    140 
    141 AC_ARG_ENABLE([custom-modes],
    142     [AS_HELP_STRING([--enable-custom-modes], [enable non-Opus modes, e.g. 44.1 kHz & 2^n frames])],,
    143     [enable_custom_modes=no])
    144 
    145 AS_IF([test "$enable_custom_modes" = "yes"],[
    146   AC_DEFINE([CUSTOM_MODES], [1], [Custom modes])
    147   PC_BUILD="$PC_BUILD, custom modes"
    148 ])
    149 
    150 AM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"])
    151 
    152 has_float_approx=no
    153 #case "$host_cpu" in
    154 #i[[3456]]86 | x86_64 | powerpc64 | powerpc32 | ia64)
    155 #  has_float_approx=yes
    156 #  ;;
    157 #esac    
    158 
    159 AC_ARG_ENABLE([float-approx],
    160     [AS_HELP_STRING([--enable-float-approx], [enable fast approximations for floating point])],
    161     [if test "$enable_float_approx" = "yes"; then
    162        AC_WARN([Floating point approximations are not supported on all platforms.])
    163      fi
    164     ],
    165     [enable_float_approx=$has_float_approx])
    166 
    167 AS_IF([test "$enable_float_approx" = "yes"],[
    168   AC_DEFINE([FLOAT_APPROX], [1], [Float approximations])
    169 ])
    170 
    171 AC_ARG_ENABLE([asm],
    172     [AS_HELP_STRING([--disable-asm], [Disable assembly optimizations])],,
    173     [enable_asm=yes])
    174 
    175 rtcd_support=no
    176 cpu_arm=no
    177 
    178 AS_IF([test "$enable_asm" = "yes"],[
    179     asm_optimization="no asm for your platform, please send patches"
    180     case $host_cpu in
    181     arm*)
    182         cpu_arm=yes
    183         AS_GCC_INLINE_ASSEMBLY([asm_optimization="ARM"],
    184             [asm_optimization="disabled"])
    185         if test "$asm_optimization" = "ARM" ; then
    186             rtcd_support=yes
    187             AC_DEFINE([ARMv4_ASM], 1, [Use generic ARMv4 asm optimizations])
    188             AS_ASM_ARM_EDSP([ARMv5E_ASM=1],[ARMv5E_ASM=0])
    189             if test "$ARMv5E_ASM" = "1" ; then
    190                 AC_DEFINE([ARMv5E_ASM], [1], [Use ARMv5E asm optimizations])
    191                 asm_optimization="$asm_optimization (EDSP)"
    192             fi
    193             AS_ASM_ARM_MEDIA([ARMv6_ASM=1],[ARMv6_ASM=0])
    194             if test "$ARMv6_ASM" = "1" ; then
    195                 AC_DEFINE([ARMv6_ASM], [1], [Use ARMv6 asm optimizations])
    196                 asm_optimization="$asm_optimization (Media)"
    197             fi
    198             AS_ASM_ARM_NEON([ARM_HAVE_NEON=1],[ARM_HAVE_NEON=0])
    199             if test "$ARM_HAVE_NEON" = "1" ; then
    200               AC_DEFINE([ARM_HAVE_NEON], 1, [Use ARM NEON optimizations])
    201               asm_optimization="$asm_optimization (NEON)"
    202             fi
    203         fi
    204         ;;
    205     esac
    206 ],[
    207     asm_optimization="disabled"
    208 ])
    209 
    210 AM_CONDITIONAL([CPU_ARM], [test "$cpu_arm" = "yes"])
    211 
    212 AC_ARG_ENABLE([rtcd],
    213     [AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection])],,
    214     [enable_rtcd=yes])
    215 
    216 AS_IF([test "$enable_rtcd" = "yes"],[
    217     AS_IF([test "$rtcd_support" = "yes"],[
    218         AC_DEFINE([OPUS_HAVE_RTCD], [1], [Use run-time CPU capabilities detection])
    219     ],[
    220         rtcd_support="no rtcd for your platform, please send patches"
    221     ])
    222 ],[
    223     rtcd_support="no"
    224 ])
    225 
    226 AC_ARG_ENABLE([assertions],
    227     [AS_HELP_STRING([--enable-assertions],[enable additional software error checking])],,
    228     [enable_assertions=no])
    229 
    230 AS_IF([test "$enable_assertions" = "yes"], [
    231   AC_DEFINE([ENABLE_ASSERTIONS], [1], [Assertions])
    232 ])
    233 
    234 AC_ARG_ENABLE([fuzzing],
    235     [AS_HELP_STRING([--enable-fuzzing],[causes the encoder to make random decisions])],,
    236     [enable_fuzzing=no])
    237 
    238 AS_IF([test "$enable_fuzzing" = "yes"], [
    239   AC_DEFINE([FUZZING], [1], [Fuzzing])
    240 ])
    241 
    242 AC_ARG_ENABLE([doc],
    243     [AS_HELP_STRING([--disable-doc], [Do not build API documentation])],,
    244     [enable_doc=yes])
    245 
    246 AS_IF([test "$enable_doc" = "yes"], [
    247   AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no])
    248 ],[
    249   HAVE_DOXYGEN=no
    250 ])
    251 
    252 AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"])
    253 
    254 AC_ARG_ENABLE([extra-programs],
    255     [AS_HELP_STRING([--disable-extra-programs], [Do not build extra programs (demo and tests)])],,
    256     [enable_extra_programs=yes])
    257 
    258 AM_CONDITIONAL([EXTRA_PROGRAMS], [test "$enable_extra_programs" = "yes"])
    259 
    260 
    261 saved_CFLAGS="$CFLAGS"
    262 CFLAGS="$CFLAGS -fvisibility=hidden"
    263 AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
    264 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
    265     [ AC_MSG_RESULT([yes]) ],
    266     [ AC_MSG_RESULT([no])
    267       CFLAGS="$saved_CFLAGS"
    268     ])
    269 
    270 CFLAGS="$CFLAGS -W"
    271 
    272 warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"
    273 saved_CFLAGS="$CFLAGS"
    274 CFLAGS="$CFLAGS $warn_CFLAGS"
    275 AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
    276 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
    277     [ AC_MSG_RESULT([yes]) ],
    278     [ AC_MSG_RESULT([no])
    279       CFLAGS="$saved_CFLAGS"
    280     ])
    281 
    282 saved_LIBS="$LIBS"
    283 LIBS="$LIBS $LIBM"
    284 AC_CHECK_FUNCS([lrintf])
    285 AC_CHECK_FUNCS([lrint])
    286 LIBS="$saved_LIBS"
    287 
    288 AC_CHECK_FUNCS([__malloc_hook])
    289 
    290 AC_SUBST([PC_BUILD])
    291 
    292 
    293 AC_CONFIG_FILES([Makefile opus.pc opus-uninstalled.pc
    294                  doc/Makefile doc/Doxyfile])
    295 AC_CONFIG_HEADERS([config.h])
    296 
    297 AC_OUTPUT
    298 
    299 AC_MSG_NOTICE([
    300 ------------------------------------------------------------------------
    301   $PACKAGE_NAME $PACKAGE_VERSION:  Automatic configuration OK.
    302 
    303     Compiler support:
    304 
    305       C99 var arrays: ................ ${has_var_arrays}
    306       C99 lrintf: .................... ${ac_cv_func_lrintf}
    307       Use alloca: .................... ${use_alloca}
    308     
    309     General configuration:
    310     
    311       Floating point support: ........ ${enable_float}
    312       Fast float approximations: ..... ${enable_float_approx}
    313       Fixed point debugging: ......... ${enable_fixed_point_debug}
    314       Assembly optimization: ......... ${asm_optimization}
    315       Run-time CPU detection: ........ ${rtcd_support}
    316       Custom modes: .................. ${enable_custom_modes}
    317       Assertion checking: ............ ${enable_assertions}
    318       Fuzzing: ....................... ${enable_fuzzing}
    319 
    320       API documentation: ............. ${enable_doc}
    321       Extra programs: ................ ${enable_extra_programs}
    322 ------------------------------------------------------------------------
    323 
    324  Type "make; make install" to compile and install
    325  Type "make check" to run the test suite
    326 ])
    327 
    328