1 dnl Copyright 2000-2007 Niels Provos
2 dnl Copyright 2007-2012 Niels Provos and Nick Mathewson
4 dnl See LICENSE for copying information.
6 dnl Original version Dug Song <dugsong@monkey.org>
8 AC_INIT(libevent,2.1.5-beta)
10 AC_CONFIG_SRCDIR(event.c)
12 AC_CONFIG_MACRO_DIR([m4])
13 AC_CONFIG_AUX_DIR([build-aux])
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])
20 dnl Initialize prefix.
21 if test "$prefix" = "NONE"; then
25 dnl Try and get a full POSIX environment on obscure systems
26 ifdef([AC_USE_SYSTEM_EXTENSIONS], [
27 AC_USE_SYSTEM_EXTENSIONS
36 dnl the 'build' machine is where we run configure and compile
37 dnl the 'host' machine is where the resulting stuff runs.
42 # CFLAGS="$CFLAGS -D_OSF_SOURCE"
46 dnl Checks for programs.
50 # AC_PROG_MKDIR_P - $(MKDIR_P) should be defined by AM_INIT_AUTOMAKE
52 # AC_PROG_SED is only available in Autoconf >= 2.59b; workaround for older
54 ifdef([AC_PROG_SED], [AC_PROG_SED], [
55 AC_CHECK_PROGS(SED, [gsed sed])
58 AC_PROG_GCC_TRADITIONAL
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)
65 #endif])], have_gcc295=yes, have_gcc295=no)
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"
77 # OS X Lion started deprecating the system openssl. Let's just disable
78 # all deprecation warnings on OS X.
82 CFLAGS="$CFLAGS -Wno-deprecated-declarations"
86 AC_ARG_ENABLE(gcc-warnings,
87 AS_HELP_STRING(--disable-gcc-warnings, disable verbose warnings with GCC))
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"
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])
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)
134 AM_CONDITIONAL([BUILD_SAMPLES], [test "$enable_samples" = "yes"])
135 AM_CONDITIONAL([BUILD_REGRESS], [test "$enable_libevent_regress" = "yes"])
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])
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)
153 bwin32=true; AC_MSG_RESULT(yes),
154 bwin32=false; AC_MSG_RESULT(no),
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)
166 cygwin=true; AC_MSG_RESULT(yes),
167 cygwin=false; AC_MSG_RESULT(no),
170 AC_CHECK_HEADERS([zlib.h])
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
179 AC_SEARCH_LIBS([inflateEnd], [z],
182 AC_DEFINE(HAVE_LIBZ, 1, [Define if the system has zlib])])
186 AM_CONDITIONAL(ZLIB_REGRESS, [test "$have_zlib" = "yes"])
188 dnl See if we have openssl. This doesn't go in LIBS either.
189 if test "$bwin32" = true; then
196 AC_SUBST(EV_LIB_WS32)
198 AC_SUBST(OPENSSL_LIBADD)
204 dnl Checks for header files.
237 AC_CHECK_HEADERS(sys/sysctl.h, [], [], [
238 #ifdef HAVE_SYS_PARAM_H
239 #include <sys/param.h>
242 if test "x$ac_cv_header_sys_queue_h" = "xyes"; then
243 AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h)
246 #include <sys/queue.h>
250 ], [AC_MSG_RESULT(yes)
251 AC_DEFINE(HAVE_TAILQFOREACH, 1,
252 [Define if TAILQ_FOREACH is defined in <sys/queue.h>])],
257 if test "x$ac_cv_header_sys_time_h" = "xyes"; then
258 AC_MSG_CHECKING(for timeradd in sys/time.h)
261 #include <sys/time.h>
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)
271 if test "x$ac_cv_header_sys_time_h" = "xyes"; then
272 AC_MSG_CHECKING(for timercmp in sys/time.h)
275 #include <sys/time.h>
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)
285 if test "x$ac_cv_header_sys_time_h" = "xyes"; then
286 AC_MSG_CHECKING(for timerclear in sys/time.h)
289 #include <sys/time.h>
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)
299 if test "x$ac_cv_header_sys_time_h" = "xyes"; then
300 AC_MSG_CHECKING(for timerisset in sys/time.h)
303 #include <sys/time.h>
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)
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>]]
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)
324 if test x$bwin32 = xtrue; then
325 AC_SEARCH_LIBS([getservbyname],[ws2_32])
328 dnl Checks for typedefs, structures, and compiler characteristics.
333 dnl Checks for library functions.
374 AM_CONDITIONAL(STRLCPY_IMPL, [test x"$ac_cv_func_strlcpy" = xno])
378 [libevent_cv_getaddrinfo],
390 [libevent_cv_getaddrinfo=yes],
391 [libevent_cv_getaddrinfo=no]
394 if test "$libevent_cv_getaddrinfo" = "yes" ; then
395 AC_DEFINE([HAVE_GETADDRINFO], [1], [Do we have getaddrinfo()?])
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()])
405 AC_CHECK_FUNC(gethostbyname_r, [
406 AC_MSG_CHECKING([how many arguments gethostbyname_r() wants])
408 CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS"
409 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
413 struct hostent *h1, *h2;
415 (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2);
417 AC_DEFINE(HAVE_GETHOSTBYNAME_R)
418 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1,
419 [Define this if gethostbyname_r takes 6 arguments])
428 (void)gethostbyname_r(cp1,h1,cp2,i1,&i2);
430 AC_DEFINE(HAVE_GETHOSTBYNAME_R)
431 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARG, 1,
432 [Define this if gethostbyname_r takes 5 arguments])
440 struct hostent_data hd;
441 (void) gethostbyname_r(cp1,h1,&hd);
443 AC_DEFINE(HAVE_GETHOSTBYNAME_R)
444 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARG, 1,
445 [Define this if gethostbyname_r takes 3 arguments])
457 AC_MSG_CHECKING(for F_SETFD in fcntl.h)
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))
471 if test x$bwin32 != xtrue; then
472 AC_CHECK_FUNCS(select, [haveselect=yes], )
473 if test "x$haveselect" = "xyes" ; then
477 AM_CONDITIONAL(SELECT_BACKEND, [test "x$haveselect" = "xyes"])
480 AC_CHECK_FUNCS(poll, [havepoll=yes], )
481 if test "x$havepoll" = "xyes" ; then
484 AM_CONDITIONAL(POLL_BACKEND, [test "x$havepoll" = "xyes"])
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])
491 AM_CONDITIONAL(DEVPOLL_BACKEND, [test "x$ac_cv_header_sys_devpoll_h" = "xyes"])
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)
499 #include <sys/types.h>
500 #include <sys/time.h>
501 #include <sys/event.h>
507 main(int argc, char **argv)
518 if (fcntl(fd[[1]], F_SETFL, O_NONBLOCK) == -1)
521 while ((n = write(fd[[1]], buf, sizeof(buf))) == sizeof(buf))
524 if ((kq = kqueue()) == -1)
527 memset(&ev, 0, sizeof(ev));
529 ev.filter = EVFILT_WRITE;
530 ev.flags = EV_ADD | EV_ENABLE;
531 n = kevent(kq, &ev, 1, NULL, 0, NULL);
535 read(fd[[0]], buf, sizeof(buf));
539 n = kevent(kq, NULL, 0, &ev, 1, &ts);
540 if (n == -1 || n == 0)
544 }, [AC_MSG_RESULT(yes)
545 AC_DEFINE(HAVE_WORKING_KQUEUE, 1,
546 [Define if kqueue works correctly with pipes])
548 ], AC_MSG_RESULT(no), AC_MSG_RESULT(no))
551 AM_CONDITIONAL(KQUEUE_BACKEND, [test "x$havekqueue" = "xyes"])
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])
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)
566 #include <sys/param.h>
567 #include <sys/types.h>
568 #include <sys/syscall.h>
569 #include <sys/epoll.h>
573 epoll_create(int size)
575 return (syscall(__NR_epoll_create, size));
579 main(int argc, char **argv)
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])
591 ], AC_MSG_RESULT(no), AC_MSG_RESULT(no))
594 AM_CONDITIONAL(EPOLL_BACKEND, [test "x$haveepoll" = "xyes"])
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])
603 AM_CONDITIONAL(EVPORT_BACKEND, [test "x$haveeventports" = "xyes"])
605 if test "x$bwin32" = "xtrue"; then
609 AM_CONDITIONAL(SIGNAL_SUPPORT, [test "x$needsignal" = "xyes"])
615 AC_CHECK_TYPES([uint64_t, uint32_t, uint16_t, uint8_t, uintptr_t], , ,
616 [#ifdef HAVE_STDINT_H
618 #elif defined(HAVE_INTTYPES_H)
619 #include <inttypes.h>
621 #ifdef HAVE_SYS_TYPES_H
622 #include <sys/types.h>
625 AC_CHECK_TYPES([fd_mask], , ,
626 [#ifdef HAVE_SYS_TYPES_H
627 #include <sys/types.h>
629 #ifdef HAVE_SYS_SELECT_H
630 #include <sys/select.h>
633 AC_CHECK_SIZEOF(long long)
634 AC_CHECK_SIZEOF(long)
636 AC_CHECK_SIZEOF(short)
637 AC_CHECK_SIZEOF(size_t)
638 AC_CHECK_SIZEOF(void *)
639 AC_CHECK_SIZEOF(off_t)
641 AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t, struct addrinfo, struct sockaddr_storage], , ,
643 #include <sys/types.h>
644 #ifdef HAVE_NETINET_IN_H
645 #include <netinet/in.h>
647 #ifdef HAVE_NETINET_IN6_H
648 #include <netinet/in6.h>
650 #ifdef HAVE_SYS_SOCKET_H
651 #include <sys/socket.h>
657 #define WIN32_WINNT 0x400
658 #define _WIN32_WINNT 0x400
659 #define WIN32_LEAN_AND_MEAN
660 #if defined(_MSC_VER) && (_MSC_VER < 1300)
663 #include <winsock2.h>
664 #include <ws2tcpip.h>
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>
673 #ifdef HAVE_NETINET_IN6_H
674 #include <netinet/in6.h>
676 #ifdef HAVE_SYS_SOCKET_H
677 #include <sys/socket.h>
680 #define WIN32_WINNT 0x400
681 #define _WIN32_WINNT 0x400
682 #define WIN32_LEAN_AND_MEAN
683 #if defined(_MSC_VER) && (_MSC_VER < 1300)
686 #include <winsock2.h>
687 #include <ws2tcpip.h>
692 AC_CHECK_TYPES([struct so_linger],
693 [#define HAVE_SO_LINGER], ,
695 #ifdef HAVE_SYS_SOCKET_H
696 #include <sys/socket.h>
700 AC_MSG_CHECKING([for socklen_t])
702 #include <sys/types.h>
703 #include <sys/socket.h>],
705 AC_MSG_RESULT([yes]),
707 AC_DEFINE(socklen_t, unsigned int,
708 [Define to unsigned int if you dont have it])]
711 AC_MSG_CHECKING([whether our compiler supports __func__])
713 [ const char *cp = __func__; ],
714 AC_MSG_RESULT([yes]),
716 AC_MSG_CHECKING([whether our compiler supports __FUNCTION__])
718 [ const char *cp = __FUNCTION__; ],
720 AC_DEFINE(__func__, __FUNCTION__,
721 [Define to appropriate substitue if compiler doesnt have __func__]),
723 AC_DEFINE(__func__, __FILE__,
724 [Define to appropriate substitue if compiler doesnt have __func__])))
727 # check if we can compile with pthreads
729 if test x$bwin32 != xtrue && test "$enable_thread_support" != "no"; then
731 AC_DEFINE(HAVE_PTHREADS, 1,
732 [Define if we have pthreads on this system])
734 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
735 AC_CHECK_SIZEOF(pthread_t, ,
736 [AC_INCLUDES_DEFAULT()
737 #include <pthread.h> ]
740 AM_CONDITIONAL([PTHREADS], [test "$have_pthreads" != "no" && test "$enable_thread_support" != "no"])
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])
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])
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])
760 # check if we should enable verbose debugging
761 if test x$enable_verbose_debug = xyes; then
762 CFLAGS="$CFLAGS -DUSE_DEBUG"
765 # check if we have and should use openssl
766 AM_CONDITIONAL(OPENSSL, [test "$enable_openssl" != "no" && test "$have_openssl" = "yes"])
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
772 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
773 #if !defined(__GNUC__) || (__GNUC__ < 4)
775 #endif])], have_gcc4=yes, have_gcc4=no)
777 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
778 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
780 #endif])], have_gcc42=yes, have_gcc42=no)
782 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
783 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
785 #endif])], have_gcc45=yes, have_gcc45=no)
787 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
788 #if !defined(__clang__)
790 #endif])], have_clang=yes, have_clang=no)
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"
797 CFLAGS="$CFLAGS -Wno-unused-parameter -Wstrict-aliasing"
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"
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"
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"
815 if test x$have_gcc45 = xyes ; then
816 # These warnings work on gcc 4.5
817 CFLAGS="$CFLAGS -Wlogical-op"
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"
825 # clang on macosx emits warnigns for each directory specified which
826 # isn't "used" generating a lot of build noise (typically 3 warnings
830 CFLAGS="$CFLAGS -Qunused-arguments"
835 ##This will break the world on some 64-bit architectures
836 # CFLAGS="$CFLAGS -Winline"
840 LIBEVENT_GC_SECTIONS=
841 if test "$GCC" = yes && test "$enable_function_sections" = yes ; then
843 [if linker supports omitting unused code and data],
844 [libevent_cv_gc_sections_runs],
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.
857 CFLAGS="$CFLAGS -Wl,--gc-sections"
868 int read_success_once;
870 fpC = fopen("conftest.c", "r");
874 cch = fread(buf, sizeof(buf), 1, fpC);
875 read_success_once |= (0 != cch);
877 if (!read_success_once)
881 if (0 != fclose(fpC))
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
894 libevent_cv_gc_sections_runs=no
895 ./conftest >/dev/null 2>&1 && libevent_cv_gc_sections_runs=yes
898 [libevent_cv_gc_sections_runs=no]
901 AS_UNSET([origCFLAGS])
904 case "$libevent_cv_gc_sections_runs" in
906 CFLAGS="-ffunction-sections -fdata-sections $CFLAGS"
907 LIBEVENT_GC_SECTIONS="-Wl,--gc-sections"
911 AC_SUBST([LIBEVENT_GC_SECTIONS])
913 AM_CONDITIONAL([INSTALL_LIBEVENT], [test "$enable_libevent_install" = "yes"])
915 AC_SUBST([LEP_CFLAGS])
916 AC_SUBST([LEP_CPPFLAGS])
917 AC_SUBST([LEP_LDFLAGS])
919 AC_CONFIG_FILES( [libevent.pc libevent_openssl.pc libevent_pthreads.pc] )