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