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