1 |
dnl Prefered emacs editing mode: -*- Autoconf -*- |
2 |
dnl |
3 |
dnl Process this file with autoconf to produce a configure script. |
4 |
dnl |
5 |
dnl Copyright (c) 2003, 2004, 2005, 2006, 2007 |
6 |
dnl Stephane Thiell <mbuna@bugged.org>. All rights reserved. |
7 |
dnl |
8 |
dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
9 |
dnl "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
10 |
dnl TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
11 |
dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
12 |
dnl CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
13 |
dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
14 |
dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
15 |
dnl OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
16 |
dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
17 |
dnl OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
18 |
dnl ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
19 |
dnl |
20 |
dnl $Id: configure.ac,v 1.14 2007/05/24 13:26:43 mbuna Exp $ |
21 |
|
22 |
AC_INIT([PEAK Library], 0.1.2, [mbuna@bugged.org], [libpeak]) |
23 |
AC_CONFIG_SRCDIR([peak/peak.h]) |
24 |
AC_CANONICAL_HOST |
25 |
AM_INIT_AUTOMAKE |
26 |
AM_CONFIG_HEADER([config.h]) |
27 |
AM_MAINTAINER_MODE |
28 |
|
29 |
dnl Assume GCC compatibility. |
30 |
cflags='-O2 -g -Wall' |
31 |
default_includes=' -I. -I$(srcdir) -I$(top_builddir)' |
32 |
includes='-I- -I$(top_builddir)' |
33 |
|
34 |
case "$host" in |
35 |
*-*-aix*) |
36 |
if test -z "$CC"; then |
37 |
AC_CHECK_PROGS(CC, [cc_r xlc_r gcc cc]) |
38 |
fi |
39 |
if test "$CC" = "cc_r" -o "$CC" = "xlc_r"; then |
40 |
cflags='-O3 -qthreaded -qwarn64' |
41 |
default_includes='-I$(top_builddir)' |
42 |
includes= |
43 |
elif test "$CC" = gcc; then |
44 |
AC_MSG_WARN([GCC not recommended on AIX]) |
45 |
else |
46 |
AC_MSG_WARN([cc_r on AIX not found; threads wont work!]) |
47 |
default_includes='-I$(top_builddir)' |
48 |
includes= |
49 |
fi |
50 |
;; |
51 |
|
52 |
*-*-netbsd*) |
53 |
includes='-I- -I/usr/pkg/include -I$(top_builddir)' |
54 |
PTHREAD_CFLAGS='-I/usr/pkg/include' |
55 |
PTHREAD_LIBS='-L/usr/pkg/lib -lpthread' |
56 |
;; |
57 |
|
58 |
powerpc-*-darwin*) |
59 |
dnl We support the PowerPC IBM compiler on Darwin. |
60 |
if test -z "$CC"; then |
61 |
AC_CHECK_PROGS(CC, [gcc cc_r cc]) |
62 |
fi |
63 |
if test "$CC" = "cc_r" -o "$CC" = "xlc_r"; then |
64 |
cflags='-O3 -qthreaded -qtune=auto' |
65 |
default_includes='-I$(top_builddir)' |
66 |
includes='-I$(ARCH_INCLUDES)' |
67 |
fi |
68 |
;; |
69 |
|
70 |
*) |
71 |
;; |
72 |
esac |
73 |
CFLAGS=$cflags |
74 |
AC_SUBST(default_includes) |
75 |
AC_SUBST(includes) |
76 |
|
77 |
dnl Check for asm includes |
78 |
AC_PROG_LN_S |
79 |
AC_MSG_CHECKING(for architecture-dependent code) |
80 |
arch=unknown |
81 |
case "$host" in |
82 |
powerpc-*) |
83 |
arch=powerpc |
84 |
;; |
85 |
|
86 |
i*86-* | x86-* | x86_64-*) |
87 |
arch=x86 |
88 |
;; |
89 |
|
90 |
m68k-*) |
91 |
arch=m68k |
92 |
;; |
93 |
|
94 |
sparc-*) |
95 |
arch=sparc |
96 |
;; |
97 |
|
98 |
ia64-*) |
99 |
arch=ia64 |
100 |
;; |
101 |
|
102 |
*) |
103 |
AC_MSG_RESULT([failed!]) |
104 |
AC_MSG_ERROR([libpeak is not available for your architecture yet, |
105 |
please submit a feature request for: |
106 |
${host}]) |
107 |
;; |
108 |
esac |
109 |
AC_CONFIG_LINKS([peak/atomic.h:peak/arch/${arch}/atomic.h |
110 |
peak/spinlock.h:peak/arch/${arch}/spinlock.h]) |
111 |
AC_MSG_RESULT([peak/arch/${arch} will be used.]) |
112 |
|
113 |
AC_SUBST_FILE([atomic_header]) |
114 |
atomic_header="peak/atomic.h" |
115 |
|
116 |
dnl Initialize libtool |
117 |
AM_PROG_LIBTOOL |
118 |
|
119 |
dnl Checks for programs. |
120 |
AC_PROG_CC |
121 |
AC_PROG_MAKE_SET |
122 |
ACX_PTHREAD |
123 |
LIBS="$PTHREAD_CFLAGS $PTHREAD_LIBS $LIBS" |
124 |
CFLAGS="$CFLAGS $PTHREAD_CFLAGS" |
125 |
CC="$PTHREAD_CC" |
126 |
|
127 |
dnl Checks for header files. |
128 |
AC_HEADER_STDC |
129 |
AC_CHECK_HEADERS([pthread.h sched.h mach/mach_init.h mach/mach.h]) |
130 |
AC_CHECK_HEADERS([mach/semaphore.h mach/task.h signal.h sys/signal.h]) |
131 |
AC_CHECK_HEADERS([machine/hal_sysinfo.h sys/atomic_op.h]) |
132 |
AC_CHECK_HEADERS([poll.h sys/poll.h sys/devpoll.h sys/epoll.h sys/event.h]) |
133 |
AC_CHECK_HEADERS([sys/mpctl.h sys/sysctl.h sys/sysinfo.h]) |
134 |
AC_CREATE_STDINT_H([peak/stdint.h]) |
135 |
|
136 |
dnl Checks for typedefs, structures, and compiler characteristics. |
137 |
AC_C_INLINE |
138 |
AC_TYPE_SIZE_T |
139 |
AC_HEADER_TIME |
140 |
AC_STRUCT_TM |
141 |
ACX_STRUCT_TZHEAD |
142 |
ACX_FD_SETSIZE |
143 |
|
144 |
dnl Checks for library functions. |
145 |
AC_PROG_GCC_TRADITIONAL |
146 |
AC_FUNC_ALLOCA |
147 |
AC_FUNC_SELECT_ARGTYPES |
148 |
|
149 |
dnl Do all the checks necessary to figure out -lnsl / -lsocket stuff |
150 |
AC_LIBRARY_NET |
151 |
|
152 |
AC_CHECK_FUNCS([gettimeofday memset strerror]) |
153 |
AC_CHECK_FUNCS([getpagesize getsysinfo mpctl sysconf sysctl]) |
154 |
AC_CHECK_FUNCS([epoll_create poll kqueue getrlimit getrusage setrlimit]) |
155 |
AC_CHECK_FUNCS([semaphore_create semaphore_signal]) |
156 |
AC_CHECK_FUNCS([_spin_lock _spin_lock_try _spin_unlock]) |
157 |
AC_SEARCH_LIBS([sched_yield], [rt posix4]) |
158 |
|
159 |
dnl Now choose the engine |
160 |
AC_MSG_CHECKING([for event engine module type]) |
161 |
AC_ARG_WITH([engine], |
162 |
[ --with-engine=ENGINE Force event engine module type [[automatic]]], |
163 |
[peak_engine=$with_engine]) |
164 |
if test -z "$peak_engine" -o x"$peak_engine" = xno; then |
165 |
if test x"$ac_cv_header_sys_event_h" = xyes -a x"$ac_cv_func_kqueue" = xyes; then |
166 |
peak_engine=kqueue |
167 |
elif test x"$ac_cv_header_sys_epoll_h" = xyes; then |
168 |
peak_engine=epoll |
169 |
elif test x"$ac_cv_header_sys_devpoll_h" = xyes; then |
170 |
case "$host" in |
171 |
*-*-linux*) dnl Do not use devpoll on Linux. |
172 |
peak_engine=poll |
173 |
;; |
174 |
*) |
175 |
peak_engine=devpoll |
176 |
;; |
177 |
esac |
178 |
elif test x"$ac_cv_header_poll_h" = xyes; then |
179 |
peak_engine=poll |
180 |
else |
181 |
peak_engine=select |
182 |
fi |
183 |
fi |
184 |
case "$peak_engine" in |
185 |
devpoll) |
186 |
AC_LIBOBJ([engine_mod_devpoll]) |
187 |
AC_DEFINE_UNQUOTED(PEAK_ENGINE_DEVPOLL, 1, [Use engine devpoll.]) |
188 |
;; |
189 |
epoll) |
190 |
AC_LIBOBJ([engine_mod_epoll]) |
191 |
AC_DEFINE_UNQUOTED(PEAK_ENGINE_EPOLL, 1, [Use engine epoll.]) |
192 |
;; |
193 |
kqueue) |
194 |
AC_LIBOBJ([engine_mod_kqueue]) |
195 |
AC_DEFINE_UNQUOTED(PEAK_ENGINE_KQUEUE, 1, [Use engine kqueue.]) |
196 |
;; |
197 |
poll) |
198 |
AC_LIBOBJ([engine_mod_poll]) |
199 |
AC_DEFINE_UNQUOTED(PEAK_ENGINE_POLL, 1, [Use engine poll.]) |
200 |
;; |
201 |
select) |
202 |
AC_DEFINE_UNQUOTED(PEAK_ENGINE_SELECT, 1, [Use engine select.]) |
203 |
AC_LIBOBJ([engine_mod_select]) |
204 |
;; |
205 |
*) |
206 |
AC_MSG_ERROR([Unable to find requested engine module type]) |
207 |
;; |
208 |
esac |
209 |
AC_MSG_RESULT([$peak_engine]) |
210 |
|
211 |
|
212 |
dnl Now check for --enable-profile |
213 |
AC_MSG_CHECKING([whether to enable profiling support (gprof)]) |
214 |
AC_ARG_ENABLE([profile], |
215 |
[ --enable-profile Enable profiling support (add -pg to CFLAGS)], |
216 |
[peak_cv_enable_profile=$enable_profile], |
217 |
[AC_CACHE_VAL(peak_cv_enable_profile, |
218 |
[peak_cv_enable_profile=no])]) |
219 |
AC_MSG_RESULT([$peak_cv_enable_profile]) |
220 |
|
221 |
if test x"$peak_cv_enable_profile" = xyes; then |
222 |
CFLAGS="-pg $CFLAGS" |
223 |
fi |
224 |
|
225 |
|
226 |
dnl Now check for --enable-pedantic |
227 |
AC_MSG_CHECKING([whether to enable pedantic compiler warnings]) |
228 |
AC_ARG_ENABLE([pedantic], |
229 |
[ --enable-pedantic Enable pedantic warnings (add -pedantic to CFLAGS)], |
230 |
[peak_cv_enable_pedantic=$enable_pedantic], |
231 |
[AC_CACHE_VAL(peak_cv_enable_pedantic, |
232 |
[peak_cv_enable_pedantic=no])]) |
233 |
AC_MSG_RESULT([$peak_cv_enable_pedantic]) |
234 |
|
235 |
if test x"$peak_cv_enable_pedantic" = xyes; then |
236 |
CFLAGS="-pedantic $CFLAGS" |
237 |
fi |
238 |
|
239 |
dnl Now check for --enable-uniprocessor-only |
240 |
AC_MSG_CHECKING([whether to enable uniprocessor-only code]) |
241 |
AC_ARG_ENABLE([uniprocessor-only], |
242 |
[ --enable-uniprocessor-only Enable uniprocessor-only code optimization |
243 |
Warning: library binary no more SMP safe |
244 |
[[default=no]]], |
245 |
[peak_cv_enable_uniprocessor_only=$enable_uniprocessor_only], |
246 |
[AC_CACHE_VAL(peak_cv_enable_uniprocessor_only, |
247 |
[peak_cv_enable_uniprocessor_only=no])]) |
248 |
AC_MSG_RESULT([$peak_cv_enable_uniprocessor_only]) |
249 |
|
250 |
if test x"$peak_cv_enable_uniprocessor_only" = xyes; then |
251 |
AC_DEFINE_UNQUOTED(PEAK_CONFIG_UNIPROCESSOR, 1, [Enable uniprocessor-only code.]) |
252 |
fi |
253 |
|
254 |
|
255 |
dnl --with-default-maxfds |
256 |
peak_default_maxfds=256 |
257 |
AC_MSG_CHECKING([for default maxfds flavor]) |
258 |
AC_ARG_WITH([default-maxfds], |
259 |
[ --with-default-maxfds=MAXFDS Default MAXFDS flavor number [[default=256]]], |
260 |
[peak_cv_with_default_maxfds=$with_default_maxfds], |
261 |
[AC_CACHE_VAL(peak_cv_with_default_maxfds, |
262 |
[peak_cv_with_default_maxfds=$peak_default_maxfds])]) |
263 |
|
264 |
if test x"$peak_cv_with_default_maxfds" = xyes -o x"$peak_cv_with_default_maxfds" = xno; then |
265 |
peak_cv_with_default_maxfds=$peak_default_maxfds |
266 |
fi |
267 |
AC_MSG_RESULT([$peak_cv_with_default_maxfds]) |
268 |
AC_DEFINE_UNQUOTED(PEAK_DEFAULT_FLAVOR_MAXFDS, $peak_cv_with_default_maxfds, |
269 |
[Default maxfds flavor number]) |
270 |
|
271 |
|
272 |
if test $peak_engine = "select"; then |
273 |
|
274 |
dnl --with-select-maxfds allows us to set the number of fds for systems that support |
275 |
dnl it and with the select engine only |
276 |
AC_MSG_CHECKING([for max fds for select]) |
277 |
AC_ARG_WITH([select-maxfds], |
278 |
[ --with-select-maxfds=MAXFDS Maximum number of fds the library can handle |
279 |
(make sense for select engine only) |
280 |
[[default=FD_SETSIZE]]], |
281 |
[select_maxfds=$with_select_maxfds]) |
282 |
|
283 |
if test -n "$select_maxfds"; then |
284 |
AC_MSG_RESULT([$select_maxfds]) |
285 |
AC_DEFINE_UNQUOTED(PEAK_FD_SETSIZE, $peak_cv_with_select_maxfds, |
286 |
[Maximum number of fds the library can handle with select]) |
287 |
else |
288 |
AC_MSG_RESULT([n/a]) |
289 |
fi |
290 |
|
291 |
fi |
292 |
|
293 |
|
294 |
dnl We need another host scan for atomic.h configuration |
295 |
ATOMIC_HEADERS= |
296 |
case "$host" in |
297 |
*-*-aix*) |
298 |
if test x"$ac_cv_header_atomic_op_h" = xyes; then |
299 |
ATOMIC_HEADERS=[#include <sys/atomic_op.h> /* AIX */] |
300 |
fi |
301 |
;; |
302 |
i*86-* | x86-*) |
303 |
if test x"$peak_cv_enable_uniprocessor_only" = xyes; then |
304 |
ATOMIC_HEADERS=[#define PEAK_CONFIG_UNIPROCESSOR] |
305 |
fi |
306 |
;; |
307 |
*) |
308 |
;; |
309 |
esac |
310 |
AC_SUBST(ATOMIC_HEADERS) |
311 |
|
312 |
|
313 |
PEAK_CFLAGS= |
314 |
PEAK_LIBS=-lpeak |
315 |
PEAK_LIBDEPS=$LIBS |
316 |
PEAK_VERSION=$PACKAGE_VERSION |
317 |
|
318 |
AC_CONFIG_LIBCONFIG_IN([peak]) |
319 |
|
320 |
AC_CONFIG_FILES([Makefile peak-config peak/Makefile tests/Makefile |
321 |
peak/arch/ia64/atomic.h |
322 |
peak/arch/ia64/spinlock.h |
323 |
peak/arch/m68k/atomic.h |
324 |
peak/arch/m68k/spinlock.h |
325 |
peak/arch/powerpc/atomic.h |
326 |
peak/arch/powerpc/spinlock.h |
327 |
peak/arch/sparc/atomic.h |
328 |
peak/arch/sparc/spinlock.h |
329 |
peak/arch/x86/atomic.h |
330 |
peak/arch/x86/spinlock.h]) |
331 |
|
332 |
AC_OUTPUT |
333 |
|
334 |
eval e_bindir=${bindir}; eval e_bindir=${e_bindir} |
335 |
eval e_includedir=${includedir}; eval e_includedir=${e_includedir} |
336 |
eval e_libdir=${libdir}; eval e_libdir=${e_libdir} |
337 |
AC_MSG_RESULT([ |
338 |
PEAK library compile-time configuration done. |
339 |
|
340 |
Installation base directory: ${prefix} |
341 |
Installation binary directory: ${e_bindir} |
342 |
Installation include directory: ${e_includedir} |
343 |
Installation library directory: ${e_libdir} |
344 |
Architecture: ${arch} |
345 |
Engine module: ${peak_engine} |
346 |
|
347 |
Type 'make' to compile the library |
348 |
then 'make check' to compile and run the test suite (optional) |
349 |
then 'make install' to install libpeak.]) |
350 |
|