OLD | NEW |
| (Empty) |
1 dnl configure.in for libevent | |
2 dnl Dug Song <dugsong@monkey.org> | |
3 AC_INIT(event.c) | |
4 | |
5 AM_INIT_AUTOMAKE(libevent,1.4.15) | |
6 AM_CONFIG_HEADER(config.h) | |
7 dnl AM_MAINTAINER_MODE | |
8 | |
9 AC_CONFIG_MACRO_DIR([m4]) | |
10 | |
11 AC_CANONICAL_HOST | |
12 | |
13 AC_DEFINE(NUMERIC_VERSION, 0x01040f00, [Numeric representation of the version]) | |
14 | |
15 dnl Initialize prefix. | |
16 if test "$prefix" = "NONE"; then | |
17 prefix="/usr/local" | |
18 fi | |
19 | |
20 dnl Checks for programs. | |
21 AC_PROG_CC | |
22 AC_PROG_INSTALL | |
23 AC_PROG_LN_S | |
24 | |
25 AC_PROG_GCC_TRADITIONAL | |
26 if test "$GCC" = yes ; then | |
27 CFLAGS="$CFLAGS -Wall" | |
28 # And disable the strict-aliasing optimization, since it breaks | |
29 # our sockaddr-handling code in strange ways. | |
30 CFLAGS="$CFLAGS -fno-strict-aliasing" | |
31 fi | |
32 | |
33 dnl Libevent 1.4 isn't multithreaded, but some of its functions are | |
34 dnl documented to be reentrant. If you don't define the right macros | |
35 dnl on some platforms, you get non-reentrant versions of the libc | |
36 dnl functinos (like an errno that's shared by all threads). | |
37 AC_MSG_CHECKING([whether we need extra flags to make libc reentrant]) | |
38 case $host in | |
39 *solaris* | *-osf* | *-hpux* ) | |
40 AC_MSG_RESULT([-D_REENTRANT]) | |
41 CFLAGS="$CFLAGS -D_REENTRANT" | |
42 ;; | |
43 *-aix* | *-freebsd* | *-darwin* ) | |
44 AC_MSG_RESULT([-D_THREAD_SAFE]) | |
45 CFLAGS="$CFLAGS -D_THREAD_SAFE" | |
46 ;; | |
47 *) | |
48 AC_MSG_RESULT(no) | |
49 ;; | |
50 esac | |
51 | |
52 AC_ARG_ENABLE(gcc-warnings, | |
53 AS_HELP_STRING(--enable-gcc-warnings, enable verbose warnings with GCC)) | |
54 | |
55 AC_PROG_LIBTOOL | |
56 | |
57 dnl Uncomment "AC_DISABLE_SHARED" to make shared librraries not get | |
58 dnl built by default. You can also turn shared libs on and off from | |
59 dnl the command line with --enable-shared and --disable-shared. | |
60 dnl AC_DISABLE_SHARED | |
61 AC_SUBST(LIBTOOL_DEPS) | |
62 | |
63 dnl Checks for libraries. | |
64 AC_CHECK_LIB(socket, socket) | |
65 AC_CHECK_LIB(resolv, inet_aton) | |
66 AC_CHECK_LIB(rt, clock_gettime) | |
67 AC_CHECK_LIB(nsl, inet_ntoa) | |
68 | |
69 dnl Checks for header files. | |
70 AC_HEADER_STDC | |
71 AC_CHECK_HEADERS(fcntl.h stdarg.h inttypes.h stdint.h poll.h signal.h unistd.h s
ys/epoll.h sys/time.h sys/queue.h sys/event.h sys/param.h sys/ioctl.h sys/select
.h sys/devpoll.h port.h netinet/in6.h sys/socket.h) | |
72 if test "x$ac_cv_header_sys_queue_h" = "xyes"; then | |
73 AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h) | |
74 AC_EGREP_CPP(yes, | |
75 [ | |
76 #include <sys/queue.h> | |
77 #ifdef TAILQ_FOREACH | |
78 yes | |
79 #endif | |
80 ], [AC_MSG_RESULT(yes) | |
81 AC_DEFINE(HAVE_TAILQFOREACH, 1, | |
82 [Define if TAILQ_FOREACH is defined in <sys/queue.h>])], | |
83 AC_MSG_RESULT(no) | |
84 ) | |
85 fi | |
86 | |
87 if test "x$ac_cv_header_sys_time_h" = "xyes"; then | |
88 AC_MSG_CHECKING(for timeradd in sys/time.h) | |
89 AC_EGREP_CPP(yes, | |
90 [ | |
91 #include <sys/time.h> | |
92 #ifdef timeradd | |
93 yes | |
94 #endif | |
95 ], [ AC_DEFINE(HAVE_TIMERADD, 1, | |
96 [Define if timeradd is defined in <sys/time.h>]) | |
97 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) | |
98 ) | |
99 fi | |
100 | |
101 if test "x$ac_cv_header_sys_time_h" = "xyes"; then | |
102 AC_MSG_CHECKING(for timercmp in sys/time.h) | |
103 AC_EGREP_CPP(yes, | |
104 [ | |
105 #include <sys/time.h> | |
106 #ifdef timercmp | |
107 yes | |
108 #endif | |
109 ], [ AC_DEFINE(HAVE_TIMERCMP, 1, | |
110 [Define if timercmp is defined in <sys/time.h>]) | |
111 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) | |
112 ) | |
113 fi | |
114 | |
115 if test "x$ac_cv_header_sys_time_h" = "xyes"; then | |
116 AC_MSG_CHECKING(for timerclear in sys/time.h) | |
117 AC_EGREP_CPP(yes, | |
118 [ | |
119 #include <sys/time.h> | |
120 #ifdef timerclear | |
121 yes | |
122 #endif | |
123 ], [ AC_DEFINE(HAVE_TIMERCLEAR, 1, | |
124 [Define if timerclear is defined in <sys/time.h>]) | |
125 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) | |
126 ) | |
127 fi | |
128 | |
129 if test "x$ac_cv_header_sys_time_h" = "xyes"; then | |
130 AC_MSG_CHECKING(for timerisset in sys/time.h) | |
131 AC_EGREP_CPP(yes, | |
132 [ | |
133 #include <sys/time.h> | |
134 #ifdef timerisset | |
135 yes | |
136 #endif | |
137 ], [ AC_DEFINE(HAVE_TIMERISSET, 1, | |
138 [Define if timerisset is defined in <sys/time.h>]) | |
139 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) | |
140 ) | |
141 fi | |
142 | |
143 dnl - check if the macro WIN32 is defined on this compiler. | |
144 dnl - (this is how we check for a windows version of GCC) | |
145 AC_MSG_CHECKING(for WIN32) | |
146 AC_TRY_COMPILE(, | |
147 [ | |
148 #ifndef WIN32 | |
149 die horribly | |
150 #endif | |
151 ], | |
152 bwin32=true; AC_MSG_RESULT(yes), | |
153 bwin32=false; AC_MSG_RESULT(no), | |
154 ) | |
155 | |
156 AM_CONDITIONAL(BUILD_WIN32, test x$bwin32 = xtrue) | |
157 | |
158 dnl Checks for typedefs, structures, and compiler characteristics. | |
159 AC_C_CONST | |
160 AC_C_INLINE | |
161 AC_HEADER_TIME | |
162 | |
163 dnl Checks for library functions. | |
164 AC_CHECK_FUNCS(gettimeofday vasprintf fcntl clock_gettime strtok_r strsep getadd
rinfo getnameinfo strlcpy inet_ntop signal sigaction strtoll issetugid geteuid g
etegid) | |
165 | |
166 AC_CHECK_SIZEOF(long) | |
167 | |
168 if test "x$ac_cv_func_clock_gettime" = "xyes"; then | |
169 AC_DEFINE(DNS_USE_CPU_CLOCK_FOR_ID, 1, [Define if clock_gettime is available
in libc]) | |
170 else | |
171 AC_DEFINE(DNS_USE_GETTIMEOFDAY_FOR_ID, 1, [Define is no secure id variant is
available]) | |
172 fi | |
173 | |
174 AC_MSG_CHECKING(for F_SETFD in fcntl.h) | |
175 AC_EGREP_CPP(yes, | |
176 [ | |
177 #define _GNU_SOURCE | |
178 #include <fcntl.h> | |
179 #ifdef F_SETFD | |
180 yes | |
181 #endif | |
182 ], [ AC_DEFINE(HAVE_SETFD, 1, | |
183 [Define if F_SETFD is defined in <fcntl.h>]) | |
184 AC_MSG_RESULT(yes) ], AC_MSG_RESULT(no)) | |
185 | |
186 needsignal=no | |
187 haveselect=no | |
188 AC_CHECK_FUNCS(select, [haveselect=yes], ) | |
189 if test "x$haveselect" = "xyes" ; then | |
190 AC_LIBOBJ(select) | |
191 needsignal=yes | |
192 fi | |
193 | |
194 havepoll=no | |
195 AC_CHECK_FUNCS(poll, [havepoll=yes], ) | |
196 if test "x$havepoll" = "xyes" ; then | |
197 AC_LIBOBJ(poll) | |
198 needsignal=yes | |
199 fi | |
200 | |
201 haveepoll=no | |
202 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], ) | |
203 if test "x$haveepoll" = "xyes" ; then | |
204 AC_DEFINE(HAVE_EPOLL, 1, | |
205 [Define if your system supports the epoll system calls]) | |
206 AC_LIBOBJ(epoll) | |
207 needsignal=yes | |
208 fi | |
209 | |
210 havedevpoll=no | |
211 if test "x$ac_cv_header_sys_devpoll_h" = "xyes"; then | |
212 AC_DEFINE(HAVE_DEVPOLL, 1, | |
213 [Define if /dev/poll is available]) | |
214 AC_LIBOBJ(devpoll) | |
215 fi | |
216 | |
217 havekqueue=no | |
218 if test "x$ac_cv_header_sys_event_h" = "xyes"; then | |
219 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], ) | |
220 if test "x$havekqueue" = "xyes" ; then | |
221 AC_MSG_CHECKING(for working kqueue) | |
222 AC_TRY_RUN( | |
223 #include <sys/types.h> | |
224 #include <sys/time.h> | |
225 #include <sys/event.h> | |
226 #include <stdio.h> | |
227 #include <unistd.h> | |
228 #include <fcntl.h> | |
229 | |
230 int | |
231 main(int argc, char **argv) | |
232 { | |
233 int kq; | |
234 int n; | |
235 int fd[[2]]; | |
236 struct kevent ev; | |
237 struct timespec ts; | |
238 char buf[[8000]]; | |
239 | |
240 if (pipe(fd) == -1) | |
241 exit(1); | |
242 if (fcntl(fd[[1]], F_SETFL, O_NONBLOCK) == -1) | |
243 exit(1); | |
244 | |
245 while ((n = write(fd[[1]], buf, sizeof(buf))) == sizeof(buf)) | |
246 ; | |
247 | |
248 if ((kq = kqueue()) == -1) | |
249 exit(1); | |
250 | |
251 memset(&ev, 0, sizeof(ev)); | |
252 ev.ident = fd[[1]]; | |
253 ev.filter = EVFILT_WRITE; | |
254 ev.flags = EV_ADD | EV_ENABLE; | |
255 n = kevent(kq, &ev, 1, NULL, 0, NULL); | |
256 if (n == -1) | |
257 exit(1); | |
258 | |
259 read(fd[[0]], buf, sizeof(buf)); | |
260 | |
261 ts.tv_sec = 0; | |
262 ts.tv_nsec = 0; | |
263 n = kevent(kq, NULL, 0, &ev, 1, &ts); | |
264 if (n == -1 || n == 0) | |
265 exit(1); | |
266 | |
267 exit(0); | |
268 }, [AC_MSG_RESULT(yes) | |
269 AC_DEFINE(HAVE_WORKING_KQUEUE, 1, | |
270 [Define if kqueue works correctly with pipes]) | |
271 AC_LIBOBJ(kqueue)], AC_MSG_RESULT(no), AC_MSG_RESULT(no)) | |
272 fi | |
273 fi | |
274 | |
275 haveepollsyscall=no | |
276 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then | |
277 if test "x$haveepoll" = "xno" ; then | |
278 AC_MSG_CHECKING(for epoll system call) | |
279 AC_TRY_RUN( | |
280 #include <stdint.h> | |
281 #include <sys/param.h> | |
282 #include <sys/types.h> | |
283 #include <sys/syscall.h> | |
284 #include <sys/epoll.h> | |
285 #include <unistd.h> | |
286 | |
287 int | |
288 epoll_create(int size) | |
289 { | |
290 return (syscall(__NR_epoll_create, size)); | |
291 } | |
292 | |
293 int | |
294 main(int argc, char **argv) | |
295 { | |
296 int epfd; | |
297 | |
298 epfd = epoll_create(256); | |
299 exit (epfd == -1 ? 1 : 0); | |
300 }, [AC_MSG_RESULT(yes) | |
301 AC_DEFINE(HAVE_EPOLL, 1, | |
302 [Define if your system supports the epoll system calls]) | |
303 needsignal=yes | |
304 AC_LIBOBJ(epoll_sub) | |
305 AC_LIBOBJ(epoll)], AC_MSG_RESULT(no), AC_MSG_RESULT(no)) | |
306 fi | |
307 fi | |
308 | |
309 haveeventports=no | |
310 AC_CHECK_FUNCS(port_create, [haveeventports=yes], ) | |
311 if test "x$haveeventports" = "xyes" ; then | |
312 AC_DEFINE(HAVE_EVENT_PORTS, 1, | |
313 [Define if your system supports event ports]) | |
314 AC_LIBOBJ(evport) | |
315 needsignal=yes | |
316 fi | |
317 if test "x$bwin32" = "xtrue"; then | |
318 needsignal=yes | |
319 fi | |
320 if test "x$bwin32" = "xtrue"; then | |
321 needsignal=yes | |
322 fi | |
323 if test "x$needsignal" = "xyes" ; then | |
324 AC_LIBOBJ(signal) | |
325 fi | |
326 | |
327 AC_TYPE_PID_T | |
328 AC_TYPE_SIZE_T | |
329 AC_CHECK_TYPES([uint64_t, uint32_t, uint16_t, uint8_t], , , | |
330 [#ifdef HAVE_STDINT_H | |
331 #include <stdint.h> | |
332 #elif defined(HAVE_INTTYPES_H) | |
333 #include <inttypes.h> | |
334 #endif | |
335 #ifdef HAVE_SYS_TYPES_H | |
336 #include <sys/types.h> | |
337 #endif]) | |
338 AC_CHECK_TYPES([fd_mask], , , | |
339 [#ifdef HAVE_SYS_TYPES_H | |
340 #include <sys/types.h> | |
341 #endif | |
342 #ifdef HAVE_SELECT_H | |
343 #include <select.h> | |
344 #endif]) | |
345 | |
346 AC_CHECK_SIZEOF(long long) | |
347 AC_CHECK_SIZEOF(int) | |
348 AC_CHECK_SIZEOF(short) | |
349 AC_CHECK_TYPES([struct in6_addr], , , | |
350 [#ifdef WIN32 | |
351 #include <winsock2.h> | |
352 #else | |
353 #include <sys/types.h> | |
354 #include <netinet/in.h> | |
355 #include <sys/socket.h> | |
356 #endif | |
357 #ifdef HAVE_NETINET_IN6_H | |
358 #include <netinet/in6.h> | |
359 #endif]) | |
360 | |
361 AC_MSG_CHECKING([for socklen_t]) | |
362 AC_TRY_COMPILE([ | |
363 #include <sys/types.h> | |
364 #include <sys/socket.h>], | |
365 [socklen_t x;], | |
366 AC_MSG_RESULT([yes]), | |
367 [AC_MSG_RESULT([no]) | |
368 AC_DEFINE(socklen_t, unsigned int, | |
369 [Define to unsigned int if you dont have it])] | |
370 ) | |
371 | |
372 AC_MSG_CHECKING([whether our compiler supports __func__]) | |
373 AC_TRY_COMPILE([], | |
374 [ const char *cp = __func__; ], | |
375 AC_MSG_RESULT([yes]), | |
376 AC_MSG_RESULT([no]) | |
377 AC_MSG_CHECKING([whether our compiler supports __FUNCTION__]) | |
378 AC_TRY_COMPILE([], | |
379 [ const char *cp = __FUNCTION__; ], | |
380 AC_MSG_RESULT([yes]) | |
381 AC_DEFINE(__func__, __FUNCTION__, | |
382 [Define to appropriate substitue if compiler doesnt have __func__]), | |
383 AC_MSG_RESULT([no]) | |
384 AC_DEFINE(__func__, __FILE__, | |
385 [Define to appropriate substitue if compiler doesnt have __func__]))) | |
386 | |
387 | |
388 # Add some more warnings which we use in development but not in the | |
389 # released versions. (Some relevant gcc versions can't handle these.) | |
390 if test x$enable_gcc_warnings = xyes; then | |
391 | |
392 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [ | |
393 #if !defined(__GNUC__) || (__GNUC__ < 4) | |
394 #error | |
395 #endif]), have_gcc4=yes, have_gcc4=no) | |
396 | |
397 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [ | |
398 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2
) | |
399 #error | |
400 #endif]), have_gcc42=yes, have_gcc42=no) | |
401 | |
402 CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -
Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcommen
t -Wformat=2 -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wnested-e
xterns -Wbad-function-cast -Wswitch-enum -Werror" | |
403 CFLAGS="$CFLAGS -Wno-unused-parameter -Wno-sign-compare -Wstrict-aliasing" | |
404 | |
405 if test x$have_gcc4 = xyes ; then | |
406 # These warnings break gcc 3.3.5 and work on gcc 4.0.2 | |
407 CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wdeclaration-after
-statement" | |
408 #CFLAGS="$CFLAGS -Wold-style-definition" | |
409 fi | |
410 | |
411 if test x$have_gcc42 = xyes ; then | |
412 # These warnings break gcc 4.0.2 and work on gcc 4.2 | |
413 CFLAGS="$CFLAGS -Waddress -Wnormalized=id -Woverride-init" | |
414 fi | |
415 | |
416 ##This will break the world on some 64-bit architectures | |
417 # CFLAGS="$CFLAGS -Winline" | |
418 | |
419 fi | |
420 | |
421 AC_OUTPUT(Makefile test/Makefile sample/Makefile) | |
OLD | NEW |