• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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=4
26OPUS_LT_REVISION=0
27OPUS_LT_AGE=4
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
45AC_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.
51AC_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
69AH_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
84case $ac_cv_c_restrict in
85   restrict) ;;
86   no) AC_DEFINE([restrict], []) ;;
87   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
88esac
89
90AC_MSG_CHECKING(for C99 variable-size arrays)
91AC_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    ])
99AC_MSG_RESULT([$has_var_arrays])
100
101AS_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
115LT_LIB_M
116
117AC_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
122AS_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
131AM_CONDITIONAL([FIXED_POINT], [test "$enable_fixed_point" = "yes"])
132
133AC_ARG_ENABLE([fixed-point-debug],
134    [AS_HELP_STRING([--enable-fixed-point-debug], [debug fixed-point implementation])],,
135    [enable_fixed_point_debug=no])
136
137AS_IF([test "$enable_fixed_point_debug" = "yes"],[
138  AC_DEFINE([FIXED_DEBUG], [1], [Debug fixed-point implementation])
139])
140
141AC_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
145AS_IF([test "$enable_custom_modes" = "yes"],[
146  AC_DEFINE([CUSTOM_MODES], [1], [Custom modes])
147  PC_BUILD="$PC_BUILD, custom modes"
148])
149
150AM_CONDITIONAL([CUSTOM_MODES], [test "$enable_custom_modes" = "yes"])
151
152has_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
159AC_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
167AS_IF([test "$enable_float_approx" = "yes"],[
168  AC_DEFINE([FLOAT_APPROX], [1], [Float approximations])
169])
170
171AC_ARG_ENABLE([asm],
172    [AS_HELP_STRING([--disable-asm], [Disable assembly optimizations])],,
173    [enable_asm=yes])
174
175rtcd_support=no
176cpu_arm=no
177
178AS_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
210AM_CONDITIONAL([CPU_ARM], [test "$cpu_arm" = "yes"])
211
212AC_ARG_ENABLE([rtcd],
213    [AS_HELP_STRING([--disable-rtcd], [Disable run-time CPU capabilities detection])],,
214    [enable_rtcd=yes])
215
216AS_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
226AC_ARG_ENABLE([assertions],
227    [AS_HELP_STRING([--enable-assertions],[enable additional software error checking])],,
228    [enable_assertions=no])
229
230AS_IF([test "$enable_assertions" = "yes"], [
231  AC_DEFINE([ENABLE_ASSERTIONS], [1], [Assertions])
232])
233
234AC_ARG_ENABLE([fuzzing],
235    [AS_HELP_STRING([--enable-fuzzing],[causes the encoder to make random decisions])],,
236    [enable_fuzzing=no])
237
238AS_IF([test "$enable_fuzzing" = "yes"], [
239  AC_DEFINE([FUZZING], [1], [Fuzzing])
240])
241
242AC_ARG_ENABLE([doc],
243    [AS_HELP_STRING([--disable-doc], [Do not build API documentation])],,
244    [enable_doc=yes])
245
246AS_IF([test "$enable_doc" = "yes"], [
247  AC_CHECK_PROG(HAVE_DOXYGEN, [doxygen], [yes], [no])
248],[
249  HAVE_DOXYGEN=no
250])
251
252AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"])
253
254AC_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
258AM_CONDITIONAL([EXTRA_PROGRAMS], [test "$enable_extra_programs" = "yes"])
259
260
261saved_CFLAGS="$CFLAGS"
262CFLAGS="$CFLAGS -fvisibility=hidden"
263AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
264AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
265    [ AC_MSG_RESULT([yes]) ],
266    [ AC_MSG_RESULT([no])
267      CFLAGS="$saved_CFLAGS"
268    ])
269
270CFLAGS="$CFLAGS -W"
271
272warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"
273saved_CFLAGS="$CFLAGS"
274CFLAGS="$CFLAGS $warn_CFLAGS"
275AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
276AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
277    [ AC_MSG_RESULT([yes]) ],
278    [ AC_MSG_RESULT([no])
279      CFLAGS="$saved_CFLAGS"
280    ])
281
282saved_LIBS="$LIBS"
283LIBS="$LIBS $LIBM"
284AC_CHECK_FUNCS([lrintf])
285AC_CHECK_FUNCS([lrint])
286LIBS="$saved_LIBS"
287
288AC_CHECK_FUNCS([__malloc_hook])
289
290AC_SUBST([PC_BUILD])
291
292
293AC_CONFIG_FILES([Makefile opus.pc opus-uninstalled.pc
294                 doc/Makefile doc/Doxyfile])
295AC_CONFIG_HEADERS([config.h])
296
297AC_OUTPUT
298
299AC_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