1dnl Process this file with autoconf to produce a configure script. -*-m4-*- 2 3dnl The package_version file will be automatically synced to the git revision 4dnl by the update_version script when configured in the repository, but will 5dnl remain constant in tarball releases unless it is manually edited. 6m4_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 15AC_INIT([opus],[CURRENT_VERSION],[opus@xiph.org]) 16 17AC_CONFIG_SRCDIR(src/opus_encoder.c) 18AC_CONFIG_MACRO_DIR([m4]) 19 20dnl enable silent rules on automake 1.11 and later 21m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) 22 23# For libtool. 24dnl Please update these for releases. 25OPUS_LT_CURRENT=5 26OPUS_LT_REVISION=0 27OPUS_LT_AGE=5 28 29AC_SUBST(OPUS_LT_CURRENT) 30AC_SUBST(OPUS_LT_REVISION) 31AC_SUBST(OPUS_LT_AGE) 32 33AM_INIT_AUTOMAKE([no-define]) 34AM_MAINTAINER_MODE([enable]) 35 36AC_CANONICAL_HOST 37AC_MINGW32 38AM_PROG_LIBTOOL 39AM_PROG_CC_C_O 40 41AC_PROG_CC_C99 42AC_C_CONST 43AC_C_INLINE 44 45AM_PROG_AS 46 47AC_DEFINE([OPUS_BUILD], [], [This is a build of OPUS]) 48 49#Use a hacked up version of autoconf's AC_C_RESTRICT because it's not 50#strong enough a test to detect old buggy versions of GCC (e.g. 2.95.3) 51#Note: Both this and the test for variable-size arrays below are also 52# done by AC_PROG_CC_C99, but not thoroughly enough apparently. 53AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, 54 [ac_cv_c_restrict=no 55 # The order here caters to the fact that C++ does not require restrict. 56 for ac_kw in __restrict __restrict__ _Restrict restrict; do 57 AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 58 [[typedef int * int_ptr; 59 int foo (int_ptr $ac_kw ip, int * $ac_kw baz[]) { 60 return ip[0]; 61 }]], 62 [[int s[1]; 63 int * $ac_kw t = s; 64 t[0] = 0; 65 return foo(t, (void *)0)]])], 66 [ac_cv_c_restrict=$ac_kw]) 67 test "$ac_cv_c_restrict" != no && break 68 done 69 ]) 70 71AH_VERBATIM([restrict], 72[/* Define to the equivalent of the C99 'restrict' keyword, or to 73 nothing if this is not supported. Do not define if restrict is 74 supported directly. */ 75#undef restrict 76/* Work around a bug in Sun C++: it does not support _Restrict or 77 __restrict__, even though the corresponding Sun C compiler ends up with 78 "#define restrict _Restrict" or "#define restrict __restrict__" in the 79 previous line. Perhaps some future version of Sun C++ will work with 80 restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ 81#if defined __SUNPRO_CC && !defined __RESTRICT 82# define _Restrict 83# define __restrict__ 84#endif]) 85 86case $ac_cv_c_restrict in 87 restrict) ;; 88 no) AC_DEFINE([restrict], []) ;; 89 *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; 90esac 91 92AC_MSG_CHECKING(for C99 variable-size arrays) 93AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], 94 [[static int x; char a[++x]; a[sizeof a - 1] = 0; int N; return a[0];]])], 95 [ has_var_arrays=yes 96 use_alloca="no (using var arrays)" 97 AC_DEFINE([VAR_ARRAYS], [1], [Use C99 variable-size arrays]) 98 ],[ 99 has_var_arrays=no 100 ]) 101AC_MSG_RESULT([$has_var_arrays]) 102 103AS_IF([test "$has_var_arrays" = "no"], 104 [ 105 AC_CHECK_HEADERS([alloca.h]) 106 AC_MSG_CHECKING(for alloca) 107 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <alloca.h>]], 108 [[int foo=10; int *array = alloca(foo);]])], 109 [ use_alloca=yes; 110 AC_DEFINE([USE_ALLOCA], [], [Make use of alloca]) 111 ],[ 112 use_alloca=no 113 ]) 114 AC_MSG_RESULT([$use_alloca]) 115 ]) 116 117LT_LIB_M 118 119AC_ARG_ENABLE([fixed-point], 120 [AS_HELP_STRING([--enable-fixed-point], 121 [compile without floating point (for machines without a fast enough FPU)])],, 122 [enable_fixed_point=no]) 123 124AS_IF([test "$enable_fixed_point" = "yes"],[ 125 enable_float="no" 126 AC_DEFINE([FIXED_POINT], [1], [Compile as fixed-point (for machines without a fast enough FPU)]) 127 PC_BUILD="fixed-point" 128],[ 129 enable_float="yes"; 130 PC_BUILD="floating-point" 131]) 132 133AM_CONDITIONAL([FIXED_POINT], [test "$enable_fixed_point" = "yes"]) 134 135AC_ARG_ENABLE([fixed-point-debug], 136 [AS_HELP_STRING([--enable-fixed-point-debug], [debug fixed-point implementation])],, 137 [enable_fixed_point_debug=no]) 138 139AS_IF([test "$enable_fixed_point_debug" = "yes"],[ 140 AC_DEFINE([FIXED_DEBUG], [1], [Debug fixed-point implementation]) 141]) 142 143AC_ARG_ENABLE([float_api], 144 [AS_HELP_STRING([--disable-float-api], 145 [compile without the floating point API (for machines with no float library)])],, 146 [enable_float_api=yes]) 147 148AM_CONDITIONAL([DISABLE_FLOAT_API], [test "$enable_float_api" = "no"]) 149 150AS_IF([test "$enable_float_api" = "no"],[ 151 AC_DEFINE([DISABLE_FLOAT_API], [1], [Do not build the float API]) 152]) 153 154AC_ARG_ENABLE([custom-modes], 155 [AS_HELP_STRING([--enable-custom-modes], [enable non-Opus modes, e.g. 44.1 kHz & 2^n frames])],, 156 [enable_custom_modes=no]) 157 158AS_IF([test "$enable_custom_modes" = "yes"],[ 159 AC_DEFINE([CUSTOM_MODES], [1], [Custom modes]) 160 PC_BUILD="$PC_BUILD, custom modes" 161]) 162 163AM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"]) 164 165has_float_approx=no 166#case "$host_cpu" in 167#i[[3456]]86 | x86_64 | powerpc64 | powerpc32 | ia64) 168# has_float_approx=yes 169# ;; 170#esac 171 172AC_ARG_ENABLE([float-approx], 173 [AS_HELP_STRING([--enable-float-approx], [enable fast approximations for floating point])], 174 [if test "$enable_float_approx" = "yes"; then 175 AC_WARN([Floating point approximations are not supported on all platforms.]) 176 fi 177 ], 178 [enable_float_approx=$has_float_approx]) 179 180AS_IF([test "$enable_float_approx" = "yes"],[ 181 AC_DEFINE([FLOAT_APPROX], [1], [Float approximations]) 182]) 183 184AC_ARG_ENABLE([asm], 185 [AS_HELP_STRING([--disable-asm], [Disable assembly optimizations])],, 186 [enable_asm=yes]) 187 188AC_ARG_ENABLE([rtcd], 189 [AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection])],, 190 [enable_rtcd=yes]) 191 192rtcd_support=no 193cpu_arm=no 194 195AS_IF([test x"${enable_asm}" = x"yes"],[ 196 inline_optimization="No ASM for your platform, please send patches" 197 case $host_cpu in 198 arm*) 199 dnl Currently we only have asm for fixed-point 200 AS_IF([test "$enable_float" != "yes"],[ 201 cpu_arm=yes 202 AC_DEFINE([OPUS_ARM_ASM], [], [Make use of ARM asm optimization]) 203 AS_GCC_INLINE_ASSEMBLY( 204 [inline_optimization="ARM"], 205 [inline_optimization="disabled"] 206 ) 207 AS_ASM_ARM_EDSP([OPUS_ARM_INLINE_EDSP=1],[OPUS_ARM_INLINE_EDSP=0]) 208 AS_ASM_ARM_MEDIA([OPUS_ARM_INLINE_MEDIA=1], 209 [OPUS_ARM_INLINE_MEDIA=0]) 210 AS_ASM_ARM_NEON([OPUS_ARM_INLINE_NEON=1],[OPUS_ARM_INLINE_NEON=0]) 211 AS_IF([test x"$inline_optimization" = x"ARM"],[ 212 AM_CONDITIONAL([OPUS_ARM_INLINE_ASM],[true]) 213 AC_DEFINE([OPUS_ARM_INLINE_ASM], 1, 214 [Use generic ARMv4 inline asm optimizations]) 215 AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"],[ 216 AC_DEFINE([OPUS_ARM_INLINE_EDSP], [1], 217 [Use ARMv5E inline asm optimizations]) 218 inline_optimization="$inline_optimization (EDSP)" 219 ]) 220 AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"],[ 221 AC_DEFINE([OPUS_ARM_INLINE_MEDIA], [1], 222 [Use ARMv6 inline asm optimizations]) 223 inline_optimization="$inline_optimization (Media)" 224 ]) 225 AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"],[ 226 AC_DEFINE([OPUS_ARM_INLINE_NEON], 1, 227 [Use ARM NEON inline asm optimizations]) 228 inline_optimization="$inline_optimization (NEON)" 229 ]) 230 ]) 231 dnl We need Perl to translate RVCT-syntax asm to gas syntax. 232 AC_CHECK_PROG([HAVE_PERL], perl, yes, no) 233 AS_IF([test x"$HAVE_PERL" = x"yes"],[ 234 AM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM],[true]) 235 asm_optimization="ARM" 236 AS_IF([test x"$OPUS_ARM_INLINE_EDSP" = x"1"], [ 237 OPUS_ARM_PRESUME_EDSP=1 238 OPUS_ARM_MAY_HAVE_EDSP=1 239 ], 240 [ 241 OPUS_ARM_PRESUME_EDSP=0 242 OPUS_ARM_MAY_HAVE_EDSP=0 243 ]) 244 AS_IF([test x"$OPUS_ARM_INLINE_MEDIA" = x"1"], [ 245 OPUS_ARM_PRESUME_MEDIA=1 246 OPUS_ARM_MAY_HAVE_MEDIA=1 247 ], 248 [ 249 OPUS_ARM_PRESUME_MEDIA=0 250 OPUS_ARM_MAY_HAVE_MEDIA=0 251 ]) 252 AS_IF([test x"$OPUS_ARM_INLINE_NEON" = x"1"], [ 253 OPUS_ARM_PRESUME_NEON=1 254 OPUS_ARM_MAY_HAVE_NEON=1 255 ], 256 [ 257 OPUS_ARM_PRESUME_NEON=0 258 OPUS_ARM_MAY_HAVE_NEON=0 259 ]) 260 AS_IF([test x"$enable_rtcd" = x"yes"],[ 261 AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" != x"1"],[ 262 AC_MSG_NOTICE( 263 [Trying to force-enable armv5e EDSP instructions...]) 264 AS_ASM_ARM_EDSP_FORCE([OPUS_ARM_MAY_HAVE_EDSP=1]) 265 ]) 266 AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" != x"1"],[ 267 AC_MSG_NOTICE( 268 [Trying to force-enable ARMv6 media instructions...]) 269 AS_ASM_ARM_MEDIA_FORCE([OPUS_ARM_MAY_HAVE_MEDIA=1]) 270 ]) 271 AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" != x"1"],[ 272 AC_MSG_NOTICE( 273 [Trying to force-enable NEON instructions...]) 274 AS_ASM_ARM_NEON_FORCE([OPUS_ARM_MAY_HAVE_NEON=1]) 275 ]) 276 ]) 277 rtcd_support= 278 AS_IF([test x"$OPUS_ARM_MAY_HAVE_EDSP" = x"1"],[ 279 AC_DEFINE(OPUS_ARM_MAY_HAVE_EDSP, 1, 280 [Define if assembler supports EDSP instructions]) 281 AS_IF([test x"$OPUS_ARM_PRESUME_EDSP" = x"1"],[ 282 AC_DEFINE(OPUS_ARM_PRESUME_EDSP, 1, 283 [Define if binary requires EDSP instruction support]) 284 asm_optimization="$asm_optimization (EDSP)" 285 ], 286 [rtcd_support="$rtcd_support (EDSP)"] 287 ) 288 ]) 289 AC_SUBST(OPUS_ARM_MAY_HAVE_EDSP) 290 AS_IF([test x"$OPUS_ARM_MAY_HAVE_MEDIA" = x"1"],[ 291 AC_DEFINE(OPUS_ARM_MAY_HAVE_MEDIA, 1, 292 [Define if assembler supports ARMv6 media instructions]) 293 AS_IF([test x"$OPUS_ARM_PRESUME_MEDIA" = x"1"],[ 294 AC_DEFINE(OPUS_ARM_PRESUME_MEDIA, 1, 295 [Define if binary requires ARMv6 media instruction support]) 296 asm_optimization="$asm_optimization (Media)" 297 ], 298 [rtcd_support="$rtcd_support (Media)"] 299 ) 300 ]) 301 AC_SUBST(OPUS_ARM_MAY_HAVE_MEDIA) 302 AS_IF([test x"$OPUS_ARM_MAY_HAVE_NEON" = x"1"],[ 303 AC_DEFINE(OPUS_ARM_MAY_HAVE_NEON, 1, 304 [Define if compiler supports NEON instructions]) 305 AS_IF([test x"$OPUS_ARM_PRESUME_NEON" = x"1"], [ 306 AC_DEFINE(OPUS_ARM_PRESUME_NEON, 1, 307 [Define if binary requires NEON instruction support]) 308 asm_optimization="$asm_optimization (NEON)" 309 ], 310 [rtcd_support="$rtcd_support (NEON)"] 311 ) 312 ]) 313 AC_SUBST(OPUS_ARM_MAY_HAVE_NEON) 314 dnl Make sure turning on RTCD gets us at least one 315 dnl instruction set. 316 AS_IF([test x"$rtcd_support" != x""], 317 [rtcd_support=ARM"$rtcd_support"], 318 [rtcd_support="no"] 319 ) 320 ], 321 [ 322 AC_MSG_WARN( 323 [*** ARM assembly requires perl -- disabling optimizations]) 324 asm_optimization="(missing perl dependency for ARM)" 325 ]) 326 ]) 327 ;; 328 esac 329],[ 330 inline_optimization="disabled" 331 asm_optimization="disabled" 332]) 333 334AM_CONDITIONAL([CPU_ARM], [test "$cpu_arm" = "yes"]) 335AM_CONDITIONAL([OPUS_ARM_INLINE_ASM], 336 [test x"${inline_optimization:0:3}" = x"ARM"]) 337AM_CONDITIONAL([OPUS_ARM_EXTERNAL_ASM], 338 [test x"${asm_optimization:0:3}" = x"ARM"]) 339 340AS_IF([test x"$enable_rtcd" = x"yes"],[ 341 AS_IF([test x"$rtcd_support" != x"no"],[ 342 AC_DEFINE([OPUS_HAVE_RTCD], [1], 343 [Use run-time CPU capabilities detection]) 344 OPUS_HAVE_RTCD=1 345 AC_SUBST(OPUS_HAVE_RTCD) 346 ]) 347],[ 348 rtcd_support="disabled" 349]) 350 351AC_ARG_ENABLE([assertions], 352 [AS_HELP_STRING([--enable-assertions],[enable additional software error checking])],, 353 [enable_assertions=no]) 354 355AS_IF([test "$enable_assertions" = "yes"], [ 356 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Assertions]) 357]) 358 359AC_ARG_ENABLE([fuzzing], 360 [AS_HELP_STRING([--enable-fuzzing],[causes the encoder to make random decisions])],, 361 [enable_fuzzing=no]) 362 363AS_IF([test "$enable_fuzzing" = "yes"], [ 364 AC_DEFINE([FUZZING], [1], [Fuzzing]) 365]) 366 367AC_ARG_ENABLE([doc], 368 [AS_HELP_STRING([--disable-doc], [Do not build API documentation])],, 369 [enable_doc=yes]) 370 371AS_IF([test "$enable_doc" = "yes"], [ 372 AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no]) 373],[ 374 HAVE_DOXYGEN=no 375]) 376 377AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"]) 378 379AC_ARG_ENABLE([extra-programs], 380 [AS_HELP_STRING([--disable-extra-programs], [Do not build extra programs (demo and tests)])],, 381 [enable_extra_programs=yes]) 382 383AM_CONDITIONAL([EXTRA_PROGRAMS], [test "$enable_extra_programs" = "yes"]) 384 385 386saved_CFLAGS="$CFLAGS" 387CFLAGS="$CFLAGS -fvisibility=hidden" 388AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden]) 389AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], 390 [ AC_MSG_RESULT([yes]) ], 391 [ AC_MSG_RESULT([no]) 392 CFLAGS="$saved_CFLAGS" 393 ]) 394 395CFLAGS="$CFLAGS -W" 396 397warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes" 398saved_CFLAGS="$CFLAGS" 399CFLAGS="$CFLAGS $warn_CFLAGS" 400AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}]) 401AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], 402 [ AC_MSG_RESULT([yes]) ], 403 [ AC_MSG_RESULT([no]) 404 CFLAGS="$saved_CFLAGS" 405 ]) 406 407saved_LIBS="$LIBS" 408LIBS="$LIBS $LIBM" 409AC_CHECK_FUNCS([lrintf]) 410AC_CHECK_FUNCS([lrint]) 411LIBS="$saved_LIBS" 412 413AC_CHECK_FUNCS([__malloc_hook]) 414 415AC_SUBST([PC_BUILD]) 416 417AC_CONFIG_FILES([ 418 Makefile 419 opus.pc 420 opus-uninstalled.pc 421 celt/arm/armopts.s 422 doc/Makefile 423 doc/Doxyfile 424]) 425AC_CONFIG_HEADERS([config.h]) 426 427AC_OUTPUT 428 429AC_MSG_NOTICE([ 430------------------------------------------------------------------------ 431 $PACKAGE_NAME $PACKAGE_VERSION: Automatic configuration OK. 432 433 Compiler support: 434 435 C99 var arrays: ................ ${has_var_arrays} 436 C99 lrintf: .................... ${ac_cv_func_lrintf} 437 Use alloca: .................... ${use_alloca} 438 439 General configuration: 440 441 Floating point support: ........ ${enable_float} 442 Fast float approximations: ..... ${enable_float_approx} 443 Fixed point debugging: ......... ${enable_fixed_point_debug} 444 Inline Assembly Optimizations: . ${inline_optimization} 445 External Assembly Optimizations: ${asm_optimization} 446 Run-time CPU detection: ........ ${rtcd_support} 447 Custom modes: .................. ${enable_custom_modes} 448 Assertion checking: ............ ${enable_assertions} 449 Fuzzing: ....................... ${enable_fuzzing} 450 451 API documentation: ............. ${enable_doc} 452 Extra programs: ................ ${enable_extra_programs} 453------------------------------------------------------------------------ 454 455 Type "make; make install" to compile and install 456 Type "make check" to run the test suite 457]) 458 459