blob: 7528d37ee03f4056181ba36d9fdacb27fef75985 [file] [log] [blame]
Christopher Wileye8679812015-07-01 13:36:18 -07001dnl Copyright 2000-2007 Niels Provos
2dnl Copyright 2007-2012 Niels Provos and Nick Mathewson
3dnl
4dnl See LICENSE for copying information.
5dnl
6dnl Original version Dug Song <dugsong@monkey.org>
7
Narayan Kamathfc74cb42017-09-13 12:53:52 +01008AC_INIT(libevent,2.1.8-stable)
Christopher Wileye8679812015-07-01 13:36:18 -07009AC_PREREQ(2.59)
Narayan Kamathfc74cb42017-09-13 12:53:52 +010010AC_CONFIG_SRCDIR(event.c)
Christopher Wileye8679812015-07-01 13:36:18 -070011
12AC_CONFIG_MACRO_DIR([m4])
Narayan Kamathfc74cb42017-09-13 12:53:52 +010013AM_INIT_AUTOMAKE
14dnl AM_SILENT_RULES req. automake 1.11. [no] defaults V=1
15m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
16AC_CONFIG_HEADERS(config.h evconfig-private.h:evconfig-private.h.in)
17AC_DEFINE(NUMERIC_VERSION, 0x02010800, [Numeric representation of the version])
Christopher Wileye8679812015-07-01 13:36:18 -070018
19dnl Initialize prefix.
20if test "$prefix" = "NONE"; then
21 prefix="/usr/local"
22fi
23
Narayan Kamathfc74cb42017-09-13 12:53:52 +010024dnl Try and get a full POSIX environment on obscure systems
25ifdef([AC_USE_SYSTEM_EXTENSIONS], [
26AC_USE_SYSTEM_EXTENSIONS
27], [
28AC_AIX
29AC_GNU_SOURCE
30AC_MINIX
31])
32
Christopher Wileye8679812015-07-01 13:36:18 -070033AC_CANONICAL_BUILD
34AC_CANONICAL_HOST
35dnl the 'build' machine is where we run configure and compile
36dnl the 'host' machine is where the resulting stuff runs.
37
Narayan Kamathfc74cb42017-09-13 12:53:52 +010038#case "$host_os" in
39#
40# osf5*)
41# CFLAGS="$CFLAGS -D_OSF_SOURCE"
42# ;;
43#esac
Christopher Wileye8679812015-07-01 13:36:18 -070044
45dnl Checks for programs.
Christopher Wileye8679812015-07-01 13:36:18 -070046AM_PROG_CC_C_O
47AC_PROG_INSTALL
48AC_PROG_LN_S
49# AC_PROG_MKDIR_P - $(MKDIR_P) should be defined by AM_INIT_AUTOMAKE
50
51# AC_PROG_SED is only available in Autoconf >= 2.59b; workaround for older
52# versions
53ifdef([AC_PROG_SED], [AC_PROG_SED], [
54AC_CHECK_PROGS(SED, [gsed sed])
55])
56
57AC_PROG_GCC_TRADITIONAL
58
59# We need to test for at least gcc 2.95 here, because older versions don't
60# have -fno-strict-aliasing
61AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
62#if !defined(__GNUC__) || (__GNUC__ < 2) || (__GNUC__ == 2 && __GNUC_MINOR__ < 95)
63#error
64#endif])], have_gcc295=yes, have_gcc295=no)
65
66if test "$GCC" = "yes" ; then
67 # Enable many gcc warnings by default...
68 CFLAGS="$CFLAGS -Wall"
69 # And disable the strict-aliasing optimization, since it breaks
70 # our sockaddr-handling code in strange ways.
71 if test x$have_gcc295 = xyes; then
72 CFLAGS="$CFLAGS -fno-strict-aliasing"
73 fi
74fi
75
76# OS X Lion started deprecating the system openssl. Let's just disable
Narayan Kamathfc74cb42017-09-13 12:53:52 +010077# all deprecation warnings on OS X; but do so only for gcc...
78if test "$GCC" = "yes" ; then
79 case "$host_os" in
80 darwin*)
81 CFLAGS="$CFLAGS -Wno-deprecated-declarations"
82 ;;
83 esac
84fi
Christopher Wileye8679812015-07-01 13:36:18 -070085
86AC_ARG_ENABLE(gcc-warnings,
Narayan Kamathfc74cb42017-09-13 12:53:52 +010087 AS_HELP_STRING(--disable-gcc-warnings, disable verbose warnings with GCC))
88
89AC_ARG_ENABLE(gcc-hardening,
90 AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks),
91[if test x$enableval = xyes; then
92 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2 -fstack-protector-all"
93 CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector"
94 CFLAGS="$CFLAGS --param ssp-buffer-size=1"
95fi])
96
Christopher Wileye8679812015-07-01 13:36:18 -070097AC_ARG_ENABLE(thread-support,
98 AS_HELP_STRING(--disable-thread-support, disable support for threading),
99 [], [enable_thread_support=yes])
100AC_ARG_ENABLE(malloc-replacement,
101 AS_HELP_STRING(--disable-malloc-replacement, disable support for replacing the memory mgt functions),
102 [], [enable_malloc_replacement=yes])
103AC_ARG_ENABLE(openssl,
104 AS_HELP_STRING(--disable-openssl, disable support for openssl encryption),
105 [], [enable_openssl=yes])
106AC_ARG_ENABLE(debug-mode,
107 AS_HELP_STRING(--disable-debug-mode, disable support for running in debug mode),
108 [], [enable_debug_mode=yes])
109AC_ARG_ENABLE([libevent-install],
110 AS_HELP_STRING([--disable-libevent-install, disable installation of libevent]),
111 [], [enable_libevent_install=yes])
112AC_ARG_ENABLE([libevent-regress],
113 AS_HELP_STRING([--disable-libevent-regress, skip regress in make check]),
114 [], [enable_libevent_regress=yes])
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100115AC_ARG_ENABLE([samples],
116 AS_HELP_STRING([--disable-samples, skip building of sample programs]),
117 [], [enable_samples=yes])
Christopher Wileye8679812015-07-01 13:36:18 -0700118AC_ARG_ENABLE([function-sections],
119 AS_HELP_STRING([--enable-function-sections, make static library allow smaller binaries with --gc-sections]),
120 [], [enable_function_sections=no])
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100121AC_ARG_ENABLE([verbose-debug],
122 AS_HELP_STRING([--enable-verbose-debug, verbose debug logging]),
123 [], [enable_verbose_debug=no])
124AC_ARG_ENABLE([clock-gettime],
125 AS_HELP_STRING(--disable-clock-gettime, do not use clock_gettime even if it is available),
126 [], [enable_clock_gettime=yes])
Christopher Wileye8679812015-07-01 13:36:18 -0700127
128
129AC_PROG_LIBTOOL
130
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100131dnl Uncomment "AC_DISABLE_SHARED" to make shared libraries not get
Christopher Wileye8679812015-07-01 13:36:18 -0700132dnl built by default. You can also turn shared libs on and off from
133dnl the command line with --enable-shared and --disable-shared.
134dnl AC_DISABLE_SHARED
135AC_SUBST(LIBTOOL_DEPS)
136
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100137AM_CONDITIONAL([BUILD_SAMPLES], [test "$enable_samples" = "yes"])
Christopher Wileye8679812015-07-01 13:36:18 -0700138AM_CONDITIONAL([BUILD_REGRESS], [test "$enable_libevent_regress" = "yes"])
139
140dnl Checks for libraries.
141AC_SEARCH_LIBS([inet_ntoa], [nsl])
142AC_SEARCH_LIBS([socket], [socket])
143AC_SEARCH_LIBS([inet_aton], [resolv])
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100144if test "x$enable_clock_gettime" = "xyes"; then
145 AC_SEARCH_LIBS([clock_gettime], [rt])
146 AC_CHECK_FUNCS([clock_gettime])
147fi
Christopher Wileye8679812015-07-01 13:36:18 -0700148AC_SEARCH_LIBS([sendfile], [sendfile])
149
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100150dnl - check if the macro _WIN32 is defined on this compiler.
151dnl - (this is how we check for a windows compiler)
Christopher Wileye8679812015-07-01 13:36:18 -0700152AC_MSG_CHECKING(for WIN32)
153AC_TRY_COMPILE(,
154 [
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100155#ifndef _WIN32
Christopher Wileye8679812015-07-01 13:36:18 -0700156die horribly
157#endif
158 ],
159 bwin32=true; AC_MSG_RESULT(yes),
160 bwin32=false; AC_MSG_RESULT(no),
161)
162
163dnl - check if the macro __CYGWIN__ is defined on this compiler.
164dnl - (this is how we check for a cygwin version of GCC)
165AC_MSG_CHECKING(for CYGWIN)
166AC_TRY_COMPILE(,
167 [
168#ifndef __CYGWIN__
169die horribly
170#endif
171 ],
172 cygwin=true; AC_MSG_RESULT(yes),
173 cygwin=false; AC_MSG_RESULT(no),
174)
175
176AC_CHECK_HEADERS([zlib.h])
177
178if test "x$ac_cv_header_zlib_h" = "xyes"; then
179dnl Determine if we have zlib for regression tests
180dnl Don't put this one in LIBS
181save_LIBS="$LIBS"
182LIBS=""
183ZLIB_LIBS=""
184have_zlib=no
185AC_SEARCH_LIBS([inflateEnd], [z],
186 [have_zlib=yes
187 ZLIB_LIBS="$LIBS"
188 AC_DEFINE(HAVE_LIBZ, 1, [Define if the system has zlib])])
189LIBS="$save_LIBS"
190AC_SUBST(ZLIB_LIBS)
191fi
192AM_CONDITIONAL(ZLIB_REGRESS, [test "$have_zlib" = "yes"])
193
194dnl See if we have openssl. This doesn't go in LIBS either.
195if test "$bwin32" = true; then
196 EV_LIB_WS32=-lws2_32
197 EV_LIB_GDI=-lgdi32
198else
199 EV_LIB_WS32=
200 EV_LIB_GDI=
201fi
202AC_SUBST(EV_LIB_WS32)
203AC_SUBST(EV_LIB_GDI)
204AC_SUBST(OPENSSL_LIBADD)
205
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100206AC_SYS_LARGEFILE
Christopher Wileye8679812015-07-01 13:36:18 -0700207
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100208LIBEVENT_OPENSSL
Christopher Wileye8679812015-07-01 13:36:18 -0700209
210dnl Checks for header files.
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100211AC_CHECK_HEADERS([ \
212 arpa/inet.h \
213 fcntl.h \
214 ifaddrs.h \
215 mach/mach_time.h \
216 netdb.h \
217 netinet/in.h \
218 netinet/in6.h \
219 netinet/tcp.h \
220 poll.h \
221 port.h \
222 stdarg.h \
223 stddef.h \
224 sys/devpoll.h \
225 sys/epoll.h \
226 sys/event.h \
227 sys/eventfd.h \
228 sys/ioctl.h \
229 sys/mman.h \
230 sys/param.h \
231 sys/queue.h \
232 sys/resource.h \
233 sys/select.h \
234 sys/sendfile.h \
235 sys/socket.h \
236 sys/stat.h \
237 sys/time.h \
238 sys/timerfd.h \
239 sys/uio.h \
240 sys/wait.h \
241 errno.h \
242])
243
Christopher Wileye8679812015-07-01 13:36:18 -0700244AC_CHECK_HEADERS(sys/sysctl.h, [], [], [
245#ifdef HAVE_SYS_PARAM_H
246#include <sys/param.h>
247#endif
248])
249if test "x$ac_cv_header_sys_queue_h" = "xyes"; then
250 AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h)
251 AC_EGREP_CPP(yes,
252[
253#include <sys/queue.h>
254#ifdef TAILQ_FOREACH
255 yes
256#endif
257], [AC_MSG_RESULT(yes)
258 AC_DEFINE(HAVE_TAILQFOREACH, 1,
259 [Define if TAILQ_FOREACH is defined in <sys/queue.h>])],
260 AC_MSG_RESULT(no)
261 )
262fi
263
264if test "x$ac_cv_header_sys_time_h" = "xyes"; then
265 AC_MSG_CHECKING(for timeradd in sys/time.h)
266 AC_EGREP_CPP(yes,
267[
268#include <sys/time.h>
269#ifdef timeradd
270 yes
271#endif
272], [ AC_DEFINE(HAVE_TIMERADD, 1,
273 [Define if timeradd is defined in <sys/time.h>])
274 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
275)
276fi
277
278if test "x$ac_cv_header_sys_time_h" = "xyes"; then
279 AC_MSG_CHECKING(for timercmp in sys/time.h)
280 AC_EGREP_CPP(yes,
281[
282#include <sys/time.h>
283#ifdef timercmp
284 yes
285#endif
286], [ AC_DEFINE(HAVE_TIMERCMP, 1,
287 [Define if timercmp is defined in <sys/time.h>])
288 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
289)
290fi
291
292if test "x$ac_cv_header_sys_time_h" = "xyes"; then
293 AC_MSG_CHECKING(for timerclear in sys/time.h)
294 AC_EGREP_CPP(yes,
295[
296#include <sys/time.h>
297#ifdef timerclear
298 yes
299#endif
300], [ AC_DEFINE(HAVE_TIMERCLEAR, 1,
301 [Define if timerclear is defined in <sys/time.h>])
302 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
303)
304fi
305
306if test "x$ac_cv_header_sys_time_h" = "xyes"; then
307 AC_MSG_CHECKING(for timerisset in sys/time.h)
308 AC_EGREP_CPP(yes,
309[
310#include <sys/time.h>
311#ifdef timerisset
312 yes
313#endif
314], [ AC_DEFINE(HAVE_TIMERISSET, 1,
315 [Define if timerisset is defined in <sys/time.h>])
316 AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
317)
318fi
319
320if test "x$ac_cv_header_sys_sysctl_h" = "xyes"; then
321 AC_CHECK_DECLS([CTL_KERN, KERN_RANDOM, RANDOM_UUID, KERN_ARND], [], [],
322 [[#include <sys/types.h>
323 #include <sys/sysctl.h>]]
324 )
325fi
326
327AM_CONDITIONAL(BUILD_WIN32, test x$bwin32 = xtrue)
328AM_CONDITIONAL(BUILD_CYGWIN, test x$cygwin = xtrue)
329AM_CONDITIONAL(BUILD_WITH_NO_UNDEFINED, test x$bwin32 = xtrue || test x$cygwin = xtrue)
330
331if test x$bwin32 = xtrue; then
332 AC_SEARCH_LIBS([getservbyname],[ws2_32])
333fi
334
335dnl Checks for typedefs, structures, and compiler characteristics.
336AC_C_CONST
337AC_C_INLINE
338AC_HEADER_TIME
339
340dnl Checks for library functions.
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100341AC_CHECK_FUNCS([ \
342 accept4 \
343 arc4random \
344 arc4random_buf \
345 eventfd \
346 epoll_create1 \
347 fcntl \
348 getegid \
349 geteuid \
350 getifaddrs \
351 getnameinfo \
352 getprotobynumber \
353 gettimeofday \
354 inet_ntop \
355 inet_pton \
356 issetugid \
357 mach_absolute_time \
358 mmap \
359 nanosleep \
360 pipe \
361 pipe2 \
362 putenv \
363 sendfile \
364 setenv \
365 setrlimit \
366 sigaction \
367 signal \
368 splice \
369 strlcpy \
370 strsep \
371 strtok_r \
372 strtoll \
373 sysctl \
374 timerfd_create \
375 umask \
376 unsetenv \
377 usleep \
378 vasprintf \
379 getservbyname \
380])
381AM_CONDITIONAL(STRLCPY_IMPL, [test x"$ac_cv_func_strlcpy" = xno])
Christopher Wileye8679812015-07-01 13:36:18 -0700382
383AC_CACHE_CHECK(
384 [for getaddrinfo],
385 [libevent_cv_getaddrinfo],
386 [AC_LINK_IFELSE(
387 [AC_LANG_PROGRAM(
388 [[
389 #ifdef HAVE_NETDB_H
390 #include <netdb.h>
391 #endif
392 ]],
393 [[
394 getaddrinfo;
395 ]]
396 )],
397 [libevent_cv_getaddrinfo=yes],
398 [libevent_cv_getaddrinfo=no]
399 )]
400)
401if test "$libevent_cv_getaddrinfo" = "yes" ; then
402 AC_DEFINE([HAVE_GETADDRINFO], [1], [Do we have getaddrinfo()?])
403else
404
Christopher Wileye8679812015-07-01 13:36:18 -0700405# Check for gethostbyname_r in all its glorious incompatible versions.
406# (This is cut-and-pasted from Tor, which based its logic on
407# Python's configure.in.)
408AH_TEMPLATE(HAVE_GETHOSTBYNAME_R,
409 [Define this if you have any gethostbyname_r()])
410
411AC_CHECK_FUNC(gethostbyname_r, [
412 AC_MSG_CHECKING([how many arguments gethostbyname_r() wants])
413 OLD_CFLAGS=$CFLAGS
414 CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS"
415 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
416#include <netdb.h>
417 ], [[
418 char *cp1, *cp2;
419 struct hostent *h1, *h2;
420 int i1, i2;
421 (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2);
422 ]])],[
423 AC_DEFINE(HAVE_GETHOSTBYNAME_R)
424 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1,
425 [Define this if gethostbyname_r takes 6 arguments])
426 AC_MSG_RESULT(6)
427 ], [
428 AC_TRY_COMPILE([
429#include <netdb.h>
430 ], [
431 char *cp1, *cp2;
432 struct hostent *h1;
433 int i1, i2;
434 (void)gethostbyname_r(cp1,h1,cp2,i1,&i2);
435 ], [
436 AC_DEFINE(HAVE_GETHOSTBYNAME_R)
437 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARG, 1,
438 [Define this if gethostbyname_r takes 5 arguments])
439 AC_MSG_RESULT(5)
440 ], [
441 AC_TRY_COMPILE([
442#include <netdb.h>
443 ], [
444 char *cp1;
445 struct hostent *h1;
446 struct hostent_data hd;
447 (void) gethostbyname_r(cp1,h1,&hd);
448 ], [
449 AC_DEFINE(HAVE_GETHOSTBYNAME_R)
450 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARG, 1,
451 [Define this if gethostbyname_r takes 3 arguments])
452 AC_MSG_RESULT(3)
453 ], [
454 AC_MSG_RESULT(0)
455 ])
456 ])
457 ])
458 CFLAGS=$OLD_CFLAGS
459])
460
461fi
462
Christopher Wileye8679812015-07-01 13:36:18 -0700463AC_MSG_CHECKING(for F_SETFD in fcntl.h)
464AC_EGREP_CPP(yes,
465[
466#define _GNU_SOURCE
467#include <fcntl.h>
468#ifdef F_SETFD
469yes
470#endif
471], [ AC_DEFINE(HAVE_SETFD, 1,
472 [Define if F_SETFD is defined in <fcntl.h>])
473 AC_MSG_RESULT(yes) ], AC_MSG_RESULT(no))
474
475needsignal=no
476haveselect=no
477if test x$bwin32 != xtrue; then
478 AC_CHECK_FUNCS(select, [haveselect=yes], )
479 if test "x$haveselect" = "xyes" ; then
480 needsignal=yes
481 fi
482fi
483AM_CONDITIONAL(SELECT_BACKEND, [test "x$haveselect" = "xyes"])
484
485havepoll=no
486AC_CHECK_FUNCS(poll, [havepoll=yes], )
487if test "x$havepoll" = "xyes" ; then
488 needsignal=yes
489fi
490AM_CONDITIONAL(POLL_BACKEND, [test "x$havepoll" = "xyes"])
491
492havedevpoll=no
493if test "x$ac_cv_header_sys_devpoll_h" = "xyes"; then
494 AC_DEFINE(HAVE_DEVPOLL, 1,
495 [Define if /dev/poll is available])
496fi
497AM_CONDITIONAL(DEVPOLL_BACKEND, [test "x$ac_cv_header_sys_devpoll_h" = "xyes"])
498
499havekqueue=no
500if test "x$ac_cv_header_sys_event_h" = "xyes"; then
501 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
502 if test "x$havekqueue" = "xyes" ; then
503 AC_MSG_CHECKING(for working kqueue)
504 AC_TRY_RUN(
505#include <sys/types.h>
506#include <sys/time.h>
507#include <sys/event.h>
508#include <stdio.h>
509#include <unistd.h>
510#include <fcntl.h>
511
512int
513main(int argc, char **argv)
514{
515 int kq;
516 int n;
517 int fd[[2]];
518 struct kevent ev;
519 struct timespec ts;
520 char buf[[8000]];
521
522 if (pipe(fd) == -1)
523 exit(1);
524 if (fcntl(fd[[1]], F_SETFL, O_NONBLOCK) == -1)
525 exit(1);
526
527 while ((n = write(fd[[1]], buf, sizeof(buf))) == sizeof(buf))
528 ;
529
530 if ((kq = kqueue()) == -1)
531 exit(1);
532
533 memset(&ev, 0, sizeof(ev));
534 ev.ident = fd[[1]];
535 ev.filter = EVFILT_WRITE;
536 ev.flags = EV_ADD | EV_ENABLE;
537 n = kevent(kq, &ev, 1, NULL, 0, NULL);
538 if (n == -1)
539 exit(1);
540
541 read(fd[[0]], buf, sizeof(buf));
542
543 ts.tv_sec = 0;
544 ts.tv_nsec = 0;
545 n = kevent(kq, NULL, 0, &ev, 1, &ts);
546 if (n == -1 || n == 0)
547 exit(1);
548
549 exit(0);
550}, [AC_MSG_RESULT(yes)
551 AC_DEFINE(HAVE_WORKING_KQUEUE, 1,
552 [Define if kqueue works correctly with pipes])
553 havekqueue=yes
554 ], AC_MSG_RESULT(no), AC_MSG_RESULT(no))
555 fi
556fi
557AM_CONDITIONAL(KQUEUE_BACKEND, [test "x$havekqueue" = "xyes"])
558
559haveepollsyscall=no
560haveepoll=no
561AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
562if test "x$haveepoll" = "xyes" ; then
563 AC_DEFINE(HAVE_EPOLL, 1,
564 [Define if your system supports the epoll system calls])
565 needsignal=yes
566fi
567if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
568 if test "x$haveepoll" = "xno" ; then
569 AC_MSG_CHECKING(for epoll system call)
570 AC_TRY_RUN(
571#include <stdint.h>
572#include <sys/param.h>
573#include <sys/types.h>
574#include <sys/syscall.h>
575#include <sys/epoll.h>
576#include <unistd.h>
577
578int
579epoll_create(int size)
580{
581 return (syscall(__NR_epoll_create, size));
582}
583
584int
585main(int argc, char **argv)
586{
587 int epfd;
588
589 epfd = epoll_create(256);
590 exit (epfd == -1 ? 1 : 0);
591}, [AC_MSG_RESULT(yes)
592 AC_DEFINE(HAVE_EPOLL, 1,
593 [Define if your system supports the epoll system calls])
594 needsignal=yes
595 have_epoll=yes
596 AC_LIBOBJ(epoll_sub)
597 ], AC_MSG_RESULT(no), AC_MSG_RESULT(no))
598 fi
599fi
600AM_CONDITIONAL(EPOLL_BACKEND, [test "x$haveepoll" = "xyes"])
601
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100602AC_MSG_CHECKING(waitpid support WNOWAIT)
603AC_TRY_RUN(
604#include <unistd.h>
605#include <sys/types.h>
606#include <sys/wait.h>
607#include <stdlib.h>
608
609int
610main(int argc, char** argv)
611{
612 pid_t pid;
613 int status;
614 if ((pid = fork()) == 0) _exit(0);
615 _exit(waitpid(pid, &status, WNOWAIT) == -1);
616}, [AC_MSG_RESULT(yes)
617AC_DEFINE(HAVE_WAITPID_WITH_WNOWAIT, 1,
618[Define if waitpid() supports WNOWAIT])
619], AC_MSG_RESULT(no), AC_MSG_RESULT(no))
620
621
Christopher Wileye8679812015-07-01 13:36:18 -0700622haveeventports=no
623AC_CHECK_FUNCS(port_create, [haveeventports=yes], )
624if test "x$haveeventports" = "xyes" ; then
625 AC_DEFINE(HAVE_EVENT_PORTS, 1,
626 [Define if your system supports event ports])
627 needsignal=yes
628fi
629AM_CONDITIONAL(EVPORT_BACKEND, [test "x$haveeventports" = "xyes"])
630
631if test "x$bwin32" = "xtrue"; then
632 needsignal=yes
633fi
634
635AM_CONDITIONAL(SIGNAL_SUPPORT, [test "x$needsignal" = "xyes"])
636
637AC_TYPE_PID_T
638AC_TYPE_SIZE_T
639AC_TYPE_SSIZE_T
640
641AC_CHECK_TYPES([uint64_t, uint32_t, uint16_t, uint8_t, uintptr_t], , ,
642[#ifdef HAVE_STDINT_H
643#include <stdint.h>
644#elif defined(HAVE_INTTYPES_H)
645#include <inttypes.h>
646#endif
647#ifdef HAVE_SYS_TYPES_H
648#include <sys/types.h>
649#endif])
650
651AC_CHECK_TYPES([fd_mask], , ,
652[#ifdef HAVE_SYS_TYPES_H
653#include <sys/types.h>
654#endif
655#ifdef HAVE_SYS_SELECT_H
656#include <sys/select.h>
657#endif])
658
659AC_CHECK_SIZEOF(long long)
660AC_CHECK_SIZEOF(long)
661AC_CHECK_SIZEOF(int)
662AC_CHECK_SIZEOF(short)
663AC_CHECK_SIZEOF(size_t)
664AC_CHECK_SIZEOF(void *)
665AC_CHECK_SIZEOF(off_t)
666
667AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t, struct addrinfo, struct sockaddr_storage], , ,
668[#define _GNU_SOURCE
669#include <sys/types.h>
670#ifdef HAVE_NETINET_IN_H
671#include <netinet/in.h>
672#endif
673#ifdef HAVE_NETINET_IN6_H
674#include <netinet/in6.h>
675#endif
676#ifdef HAVE_SYS_SOCKET_H
677#include <sys/socket.h>
678#endif
679#ifdef HAVE_NETDB_H
680#include <netdb.h>
681#endif
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100682#ifdef _WIN32
Christopher Wileye8679812015-07-01 13:36:18 -0700683#define WIN32_WINNT 0x400
684#define _WIN32_WINNT 0x400
685#define WIN32_LEAN_AND_MEAN
686#if defined(_MSC_VER) && (_MSC_VER < 1300)
687#include <winsock.h>
688#else
689#include <winsock2.h>
690#include <ws2tcpip.h>
691#endif
692#endif
693])
694AC_CHECK_MEMBERS([struct in6_addr.s6_addr32, struct in6_addr.s6_addr16, struct sockaddr_in.sin_len, struct sockaddr_in6.sin6_len, struct sockaddr_storage.ss_family, struct sockaddr_storage.__ss_family], , ,
695[#include <sys/types.h>
696#ifdef HAVE_NETINET_IN_H
697#include <netinet/in.h>
698#endif
699#ifdef HAVE_NETINET_IN6_H
700#include <netinet/in6.h>
701#endif
702#ifdef HAVE_SYS_SOCKET_H
703#include <sys/socket.h>
704#endif
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100705#ifdef _WIN32
Christopher Wileye8679812015-07-01 13:36:18 -0700706#define WIN32_WINNT 0x400
707#define _WIN32_WINNT 0x400
708#define WIN32_LEAN_AND_MEAN
709#if defined(_MSC_VER) && (_MSC_VER < 1300)
710#include <winsock.h>
711#else
712#include <winsock2.h>
713#include <ws2tcpip.h>
714#endif
715#endif
716])
717
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100718AC_CHECK_TYPES([struct so_linger],
719[#define HAVE_SO_LINGER], ,
720[
721#ifdef HAVE_SYS_SOCKET_H
722#include <sys/socket.h>
723#endif
724])
725
Christopher Wileye8679812015-07-01 13:36:18 -0700726AC_MSG_CHECKING([for socklen_t])
727AC_TRY_COMPILE([
728 #include <sys/types.h>
729 #include <sys/socket.h>],
730 [socklen_t x;],
731 AC_MSG_RESULT([yes]),
732 [AC_MSG_RESULT([no])
733 AC_DEFINE(socklen_t, unsigned int,
734 [Define to unsigned int if you dont have it])]
735)
736
737AC_MSG_CHECKING([whether our compiler supports __func__])
738AC_TRY_COMPILE([],
739 [ const char *cp = __func__; ],
740 AC_MSG_RESULT([yes]),
741 AC_MSG_RESULT([no])
742 AC_MSG_CHECKING([whether our compiler supports __FUNCTION__])
743 AC_TRY_COMPILE([],
744 [ const char *cp = __FUNCTION__; ],
745 AC_MSG_RESULT([yes])
746 AC_DEFINE(__func__, __FUNCTION__,
747 [Define to appropriate substitue if compiler doesnt have __func__]),
748 AC_MSG_RESULT([no])
749 AC_DEFINE(__func__, __FILE__,
750 [Define to appropriate substitue if compiler doesnt have __func__])))
751
752
753# check if we can compile with pthreads
754have_pthreads=no
755if test x$bwin32 != xtrue && test "$enable_thread_support" != "no"; then
756 ACX_PTHREAD([
757 AC_DEFINE(HAVE_PTHREADS, 1,
758 [Define if we have pthreads on this system])
759 have_pthreads=yes])
760 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
761 AC_CHECK_SIZEOF(pthread_t, ,
762 [AC_INCLUDES_DEFAULT()
763 #include <pthread.h> ]
764 )
765fi
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100766AM_CONDITIONAL(THREADS, [test "$enable_thread_support" != "no"])
Christopher Wileye8679812015-07-01 13:36:18 -0700767AM_CONDITIONAL(PTHREADS, [test "$have_pthreads" != "no" && test "$enable_thread_support" != "no"])
768
769# check if we should compile locking into the library
770if test x$enable_thread_support = xno; then
771 AC_DEFINE(DISABLE_THREAD_SUPPORT, 1,
772 [Define if libevent should not be compiled with thread support])
773fi
774
775# check if we should hard-code the mm functions.
776if test x$enable_malloc_replacement = xno; then
777 AC_DEFINE(DISABLE_MM_REPLACEMENT, 1,
778 [Define if libevent should not allow replacing the mm functions])
779fi
780
781# check if we should hard-code debugging out
782if test x$enable_debug_mode = xno; then
783 AC_DEFINE(DISABLE_DEBUG_MODE, 1,
784 [Define if libevent should build without support for a debug mode])
785fi
786
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100787# check if we should enable verbose debugging
788if test x$enable_verbose_debug = xyes; then
789 CFLAGS="$CFLAGS -DUSE_DEBUG"
790fi
791
Christopher Wileye8679812015-07-01 13:36:18 -0700792# check if we have and should use openssl
793AM_CONDITIONAL(OPENSSL, [test "$enable_openssl" != "no" && test "$have_openssl" = "yes"])
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100794if test "x$enable_openssl" = "xyes"; then
795 AC_SEARCH_LIBS([ERR_remove_thread_state], [crypto eay32],
796 [AC_DEFINE(HAVE_ERR_REMOVE_THREAD_STATE, 1, [Define to 1 if you have ERR_remove_thread_stat().])])
797fi
Christopher Wileye8679812015-07-01 13:36:18 -0700798
799# Add some more warnings which we use in development but not in the
800# released versions. (Some relevant gcc versions can't handle these.)
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100801if test x$enable_gcc_warnings != xno && test "$GCC" = "yes"; then
Christopher Wileye8679812015-07-01 13:36:18 -0700802
803 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
804#if !defined(__GNUC__) || (__GNUC__ < 4)
805#error
806#endif])], have_gcc4=yes, have_gcc4=no)
807
808 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
809#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
810#error
811#endif])], have_gcc42=yes, have_gcc42=no)
812
813 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
814#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
815#error
816#endif])], have_gcc45=yes, have_gcc45=no)
817
818 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
819#if !defined(__clang__)
820#error
821#endif])], have_clang=yes, have_clang=no)
822
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100823 CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wbad-function-cast -Wswitch"
824 if test x$enable_gcc_warnings = xyes; then
825 CFLAGS="$CFLAGS -Werror"
826 fi
827
Christopher Wileye8679812015-07-01 13:36:18 -0700828 CFLAGS="$CFLAGS -Wno-unused-parameter -Wstrict-aliasing"
829
830 if test x$have_gcc4 = xyes ; then
831 # These warnings break gcc 3.3.5 and work on gcc 4.0.2
832 CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement"
833 #CFLAGS="$CFLAGS -Wold-style-definition"
834 fi
835
836 if test x$have_gcc42 = xyes ; then
837 # These warnings break gcc 4.0.2 and work on gcc 4.2
838 CFLAGS="$CFLAGS -Waddress"
839 fi
840
841 if test x$have_gcc42 = xyes && test x$have_clang = xno; then
842 # These warnings break gcc 4.0.2 and clang, but work on gcc 4.2
843 CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init"
844 fi
845
846 if test x$have_gcc45 = xyes ; then
847 # These warnings work on gcc 4.5
848 CFLAGS="$CFLAGS -Wlogical-op"
849 fi
850
851 if test x$have_clang = xyes; then
852 # Disable the unused-function warnings, because these trigger
853 # for minheap-internal.h related code.
854 CFLAGS="$CFLAGS -Wno-unused-function"
855
856 # clang on macosx emits warnigns for each directory specified which
857 # isn't "used" generating a lot of build noise (typically 3 warnings
858 # per file
859 case "$host_os" in
860 darwin*)
861 CFLAGS="$CFLAGS -Qunused-arguments"
862 ;;
863 esac
864 fi
865
866##This will break the world on some 64-bit architectures
867# CFLAGS="$CFLAGS -Winline"
868
869fi
870
871LIBEVENT_GC_SECTIONS=
872if test "$GCC" = yes && test "$enable_function_sections" = yes ; then
873 AC_CACHE_CHECK(
874 [if linker supports omitting unused code and data],
875 [libevent_cv_gc_sections_runs],
876 [
877 dnl NetBSD will link but likely not run with --gc-sections
878 dnl http://bugs.ntp.org/1844
879 dnl http://gnats.netbsd.org/40401
880 dnl --gc-sections causes attempt to load as linux elf, with
881 dnl wrong syscalls in place. Test a little gauntlet of
882 dnl simple stdio read code checking for errors, expecting
883 dnl enough syscall differences that the NetBSD code will
884 dnl fail even with Linux emulation working as designed.
885 dnl A shorter test could be refined by someone with access
886 dnl to a NetBSD host with Linux emulation working.
887 origCFLAGS="$CFLAGS"
888 CFLAGS="$CFLAGS -Wl,--gc-sections"
889 AC_LINK_IFELSE(
890 [AC_LANG_PROGRAM(
891 [[
892 #include <stdlib.h>
893 #include <stdio.h>
894 ]],
895 [[
896 FILE * fpC;
897 char buf[32];
898 size_t cch;
899 int read_success_once;
900
901 fpC = fopen("conftest.c", "r");
902 if (NULL == fpC)
903 exit(1);
904 do {
905 cch = fread(buf, sizeof(buf), 1, fpC);
906 read_success_once |= (0 != cch);
907 } while (0 != cch);
908 if (!read_success_once)
909 exit(2);
910 if (!feof(fpC))
911 exit(3);
912 if (0 != fclose(fpC))
913 exit(4);
914
915 exit(EXIT_SUCCESS);
916 ]]
917 )],
918 [
919 dnl We have to do this invocation manually so that we can
920 dnl get the output of conftest.err to make sure it doesn't
921 dnl mention gc-sections.
922 if test "X$cross_compiling" = "Xyes" || grep gc-sections conftest.err ; then
923 libevent_cv_gc_sections_runs=no
924 else
925 libevent_cv_gc_sections_runs=no
926 ./conftest >/dev/null 2>&1 && libevent_cv_gc_sections_runs=yes
927 fi
928 ],
929 [libevent_cv_gc_sections_runs=no]
930 )
931 CFLAGS="$origCFLAGS"
932 AS_UNSET([origCFLAGS])
933 ]
934 )
935 case "$libevent_cv_gc_sections_runs" in
936 yes)
937 CFLAGS="-ffunction-sections -fdata-sections $CFLAGS"
938 LIBEVENT_GC_SECTIONS="-Wl,--gc-sections"
939 ;;
940 esac
941fi
942AC_SUBST([LIBEVENT_GC_SECTIONS])
943
944AM_CONDITIONAL([INSTALL_LIBEVENT], [test "$enable_libevent_install" = "yes"])
945
Narayan Kamathfc74cb42017-09-13 12:53:52 +0100946AC_CONFIG_FILES( [libevent.pc libevent_openssl.pc libevent_pthreads.pc libevent_core.pc libevent_extra.pc] )
947AC_OUTPUT(Makefile)