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