tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

configure.ac (25618B)


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