1b3fea673SRoss Lagerwalldnl Copyright 2000-2007 Niels Provos 2b3fea673SRoss Lagerwalldnl Copyright 2007-2012 Niels Provos and Nick Mathewson 3b3fea673SRoss Lagerwalldnl 4b3fea673SRoss Lagerwalldnl See LICENSE for copying information. 5b3fea673SRoss Lagerwalldnl 6b3fea673SRoss Lagerwalldnl Original version Dug Song <[email protected]> 7b3fea673SRoss Lagerwall 8*2cfa7ff7SAzat KhuzhinAC_INIT(libevent,2.1.12-stable) 9fdb8fb66Sygj6AC_PREREQ(2.67) 10b3fea673SRoss LagerwallAC_CONFIG_SRCDIR(event.c) 11b3fea673SRoss Lagerwall 12b3fea673SRoss LagerwallAC_CONFIG_MACRO_DIR([m4]) 1345da7d9dSyuangongjiAC_CONFIG_AUX_DIR([build-aux]) 14a7513cc9SAzat KhuzhinAM_INIT_AUTOMAKE 15b3fea673SRoss Lagerwalldnl AM_SILENT_RULES req. automake 1.11. [no] defaults V=1 1645da7d9dSyuangongjiAM_SILENT_RULES([yes]) 17ebf278b2SNick MathewsonAC_CONFIG_HEADERS(config.h evconfig-private.h:evconfig-private.h.in) 18*2cfa7ff7SAzat KhuzhinAC_DEFINE(NUMERIC_VERSION, 0x02010c00, [Numeric representation of the version]) 19b3fea673SRoss Lagerwall 20b3fea673SRoss Lagerwalldnl Initialize prefix. 2145da7d9dSyuangongjiAC_PREFIX_DEFAULT([/usr/local]) 22b3fea673SRoss Lagerwall 23b3fea673SRoss Lagerwalldnl Try and get a full POSIX environment on obscure systems 24b3fea673SRoss LagerwallAC_USE_SYSTEM_EXTENSIONS 25b3fea673SRoss Lagerwall 26b3fea673SRoss LagerwallAC_CANONICAL_BUILD 27b3fea673SRoss LagerwallAC_CANONICAL_HOST 28b3fea673SRoss Lagerwalldnl the 'build' machine is where we run configure and compile 29b3fea673SRoss Lagerwalldnl the 'host' machine is where the resulting stuff runs. 30b3fea673SRoss Lagerwall 31b3fea673SRoss Lagerwall#case "$host_os" in 32b3fea673SRoss Lagerwall# 33b3fea673SRoss Lagerwall# osf5*) 34b3fea673SRoss Lagerwall# CFLAGS="$CFLAGS -D_OSF_SOURCE" 35b3fea673SRoss Lagerwall# ;; 36b3fea673SRoss Lagerwall#esac 37b3fea673SRoss Lagerwall 38b3fea673SRoss Lagerwalldnl Checks for programs. 39b3fea673SRoss LagerwallAM_PROG_CC_C_O 40b3fea673SRoss LagerwallAC_PROG_INSTALL 41b3fea673SRoss LagerwallAC_PROG_LN_S 42b3fea673SRoss Lagerwall# AC_PROG_MKDIR_P - $(MKDIR_P) should be defined by AM_INIT_AUTOMAKE 43b3fea673SRoss Lagerwall 4445da7d9dSyuangongjiAC_PROG_SED 450c79787aSNick Mathewson 46b3fea673SRoss LagerwallAC_PROG_GCC_TRADITIONAL 47b3fea673SRoss Lagerwall 48b3fea673SRoss Lagerwall# We need to test for at least gcc 2.95 here, because older versions don't 49b3fea673SRoss Lagerwall# have -fno-strict-aliasing 50b3fea673SRoss LagerwallAC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ 51b3fea673SRoss Lagerwall#if !defined(__GNUC__) || (__GNUC__ < 2) || (__GNUC__ == 2 && __GNUC_MINOR__ < 95) 52b3fea673SRoss Lagerwall#error 53b3fea673SRoss Lagerwall#endif])], have_gcc295=yes, have_gcc295=no) 54b3fea673SRoss Lagerwall 55b3fea673SRoss Lagerwallif test "$GCC" = "yes" ; then 56b3fea673SRoss Lagerwall # Enable many gcc warnings by default... 57b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Wall" 58b3fea673SRoss Lagerwall # And disable the strict-aliasing optimization, since it breaks 59b3fea673SRoss Lagerwall # our sockaddr-handling code in strange ways. 60b3fea673SRoss Lagerwall if test x$have_gcc295 = xyes; then 61b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -fno-strict-aliasing" 62b3fea673SRoss Lagerwall fi 63b3fea673SRoss Lagerwallfi 64b3fea673SRoss Lagerwall 65b3fea673SRoss Lagerwall# OS X Lion started deprecating the system openssl. Let's just disable 66b5ca3656SRainer Keller# all deprecation warnings on OS X; but do so only for gcc... 67b5ca3656SRainer Kellerif test "$GCC" = "yes" ; then 68b3fea673SRoss Lagerwall case "$host_os" in 69b3fea673SRoss Lagerwall darwin*) 70b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Wno-deprecated-declarations" 71b3fea673SRoss Lagerwall ;; 72b3fea673SRoss Lagerwall esac 73b5ca3656SRainer Kellerfi 74b3fea673SRoss Lagerwall 75b3fea673SRoss LagerwallAC_ARG_ENABLE(gcc-warnings, 76b3fea673SRoss Lagerwall AS_HELP_STRING(--disable-gcc-warnings, disable verbose warnings with GCC)) 77b3fea673SRoss Lagerwall 78b3fea673SRoss LagerwallAC_ARG_ENABLE(gcc-hardening, 79b3fea673SRoss Lagerwall AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks), 80b3fea673SRoss Lagerwall[if test x$enableval = xyes; then 81b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2 -fstack-protector-all" 82b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector" 83b3fea673SRoss Lagerwall CFLAGS="$CFLAGS --param ssp-buffer-size=1" 84b3fea673SRoss Lagerwallfi]) 85b3fea673SRoss Lagerwall 86b3fea673SRoss LagerwallAC_ARG_ENABLE(thread-support, 87b3fea673SRoss Lagerwall AS_HELP_STRING(--disable-thread-support, disable support for threading), 88b3fea673SRoss Lagerwall [], [enable_thread_support=yes]) 89b3fea673SRoss LagerwallAC_ARG_ENABLE(malloc-replacement, 90b3fea673SRoss Lagerwall AS_HELP_STRING(--disable-malloc-replacement, disable support for replacing the memory mgt functions), 91b3fea673SRoss Lagerwall [], [enable_malloc_replacement=yes]) 92b3fea673SRoss LagerwallAC_ARG_ENABLE(openssl, 93b3fea673SRoss Lagerwall AS_HELP_STRING(--disable-openssl, disable support for openssl encryption), 94b3fea673SRoss Lagerwall [], [enable_openssl=yes]) 95b3fea673SRoss LagerwallAC_ARG_ENABLE(debug-mode, 96b3fea673SRoss Lagerwall AS_HELP_STRING(--disable-debug-mode, disable support for running in debug mode), 97b3fea673SRoss Lagerwall [], [enable_debug_mode=yes]) 98b3fea673SRoss LagerwallAC_ARG_ENABLE([libevent-install], 99b3fea673SRoss Lagerwall AS_HELP_STRING([--disable-libevent-install, disable installation of libevent]), 100b3fea673SRoss Lagerwall [], [enable_libevent_install=yes]) 101b3fea673SRoss LagerwallAC_ARG_ENABLE([libevent-regress], 102b3fea673SRoss Lagerwall AS_HELP_STRING([--disable-libevent-regress, skip regress in make check]), 103b3fea673SRoss Lagerwall [], [enable_libevent_regress=yes]) 1040c492b33SMike FrysingerAC_ARG_ENABLE([samples], 1050c492b33SMike Frysinger AS_HELP_STRING([--disable-samples, skip building of sample programs]), 1060c492b33SMike Frysinger [], [enable_samples=yes]) 107b3fea673SRoss LagerwallAC_ARG_ENABLE([function-sections], 108b3fea673SRoss Lagerwall AS_HELP_STRING([--enable-function-sections, make static library allow smaller binaries with --gc-sections]), 109b3fea673SRoss Lagerwall [], [enable_function_sections=no]) 110b3fea673SRoss LagerwallAC_ARG_ENABLE([verbose-debug], 111b3fea673SRoss Lagerwall AS_HELP_STRING([--enable-verbose-debug, verbose debug logging]), 112b3fea673SRoss Lagerwall [], [enable_verbose_debug=no]) 113adc402baSVlad ShcherbanAC_ARG_ENABLE([clock-gettime], 114adc402baSVlad Shcherban AS_HELP_STRING(--disable-clock-gettime, do not use clock_gettime even if it is available), 115adc402baSVlad Shcherban [], [enable_clock_gettime=yes]) 116b3fea673SRoss Lagerwall 117b3fea673SRoss Lagerwall 118fdb8fb66Sygj6LT_PREREQ([2.4.2]) 119fdb8fb66Sygj6LT_INIT 120b3fea673SRoss Lagerwall 12109098f70SPatrick Pelletierdnl Uncomment "AC_DISABLE_SHARED" to make shared libraries not get 122b3fea673SRoss Lagerwalldnl built by default. You can also turn shared libs on and off from 123b3fea673SRoss Lagerwalldnl the command line with --enable-shared and --disable-shared. 124b3fea673SRoss Lagerwalldnl AC_DISABLE_SHARED 125b3fea673SRoss LagerwallAC_SUBST(LIBTOOL_DEPS) 126b3fea673SRoss Lagerwall 1270c492b33SMike FrysingerAM_CONDITIONAL([BUILD_SAMPLES], [test "$enable_samples" = "yes"]) 128b3fea673SRoss LagerwallAM_CONDITIONAL([BUILD_REGRESS], [test "$enable_libevent_regress" = "yes"]) 129b3fea673SRoss Lagerwall 130b3fea673SRoss Lagerwalldnl Checks for libraries. 131b3fea673SRoss LagerwallAC_SEARCH_LIBS([inet_ntoa], [nsl]) 132b3fea673SRoss LagerwallAC_SEARCH_LIBS([socket], [socket]) 133b3fea673SRoss LagerwallAC_SEARCH_LIBS([inet_aton], [resolv]) 134adc402baSVlad Shcherbanif test "x$enable_clock_gettime" = "xyes"; then 135b3fea673SRoss Lagerwall AC_SEARCH_LIBS([clock_gettime], [rt]) 136adc402baSVlad Shcherban AC_CHECK_FUNCS([clock_gettime]) 137adc402baSVlad Shcherbanfi 138b3fea673SRoss LagerwallAC_SEARCH_LIBS([sendfile], [sendfile]) 139b3fea673SRoss Lagerwall 140b3fea673SRoss Lagerwalldnl - check if the macro _WIN32 is defined on this compiler. 141b3fea673SRoss Lagerwalldnl - (this is how we check for a windows compiler) 142b3fea673SRoss LagerwallAC_MSG_CHECKING(for WIN32) 14345da7d9dSyuangongjiAC_COMPILE_IFELSE( 14445da7d9dSyuangongji [AC_LANG_PROGRAM([], 145b3fea673SRoss Lagerwall [ 146b3fea673SRoss Lagerwall#ifndef _WIN32 147b3fea673SRoss Lagerwalldie horribly 148b3fea673SRoss Lagerwall#endif 14945da7d9dSyuangongji ] 15045da7d9dSyuangongji )], 15145da7d9dSyuangongji [bwin32=true; AC_MSG_RESULT(yes)], 15245da7d9dSyuangongji [bwin32=false; AC_MSG_RESULT(no)] 153b3fea673SRoss Lagerwall) 154b3fea673SRoss Lagerwall 155d433201eSRedfoxmoondnl - check if the macro __midipix__ is defined on this compiler. 156d433201eSRedfoxmoondnl - (this is how we check for a midipix version of GCC) 157d433201eSRedfoxmoonAC_MSG_CHECKING(for MIDIPIX) 15845da7d9dSyuangongjiAC_COMPILE_IFELSE( 15945da7d9dSyuangongji [AC_LANG_PROGRAM([], 160d433201eSRedfoxmoon [ 161d433201eSRedfoxmoon#ifndef __midipix__ 162d433201eSRedfoxmoondie horribly 163d433201eSRedfoxmoon#endif 16445da7d9dSyuangongji ] 16545da7d9dSyuangongji )], 16645da7d9dSyuangongji [midipix=true; AC_MSG_RESULT(yes)], 16745da7d9dSyuangongji [midipix=false; AC_MSG_RESULT(no)] 168d433201eSRedfoxmoon) 169d433201eSRedfoxmoon 170b3fea673SRoss Lagerwalldnl - check if the macro __CYGWIN__ is defined on this compiler. 171b3fea673SRoss Lagerwalldnl - (this is how we check for a cygwin version of GCC) 172b3fea673SRoss LagerwallAC_MSG_CHECKING(for CYGWIN) 17345da7d9dSyuangongjiAC_COMPILE_IFELSE( 17445da7d9dSyuangongji [AC_LANG_PROGRAM([], 175b3fea673SRoss Lagerwall [ 176b3fea673SRoss Lagerwall#ifndef __CYGWIN__ 177b3fea673SRoss Lagerwalldie horribly 178b3fea673SRoss Lagerwall#endif 17945da7d9dSyuangongji ] 18045da7d9dSyuangongji )], 18145da7d9dSyuangongji [cygwin=true; AC_MSG_RESULT(yes)], 18245da7d9dSyuangongji [cygwin=false; AC_MSG_RESULT(no)] 183b3fea673SRoss Lagerwall) 184b3fea673SRoss Lagerwall 185b3fea673SRoss LagerwallAC_CHECK_HEADERS([zlib.h]) 186b3fea673SRoss Lagerwall 187b3fea673SRoss Lagerwallif test "x$ac_cv_header_zlib_h" = "xyes"; then 188b3fea673SRoss Lagerwalldnl Determine if we have zlib for regression tests 189b3fea673SRoss Lagerwalldnl Don't put this one in LIBS 190b3fea673SRoss Lagerwallsave_LIBS="$LIBS" 191b3fea673SRoss LagerwallLIBS="" 192b3fea673SRoss LagerwallZLIB_LIBS="" 193b3fea673SRoss Lagerwallhave_zlib=no 194b3fea673SRoss LagerwallAC_SEARCH_LIBS([inflateEnd], [z], 195b3fea673SRoss Lagerwall [have_zlib=yes 196b3fea673SRoss Lagerwall ZLIB_LIBS="$LIBS" 197b3fea673SRoss Lagerwall AC_DEFINE(HAVE_LIBZ, 1, [Define if the system has zlib])]) 198b3fea673SRoss LagerwallLIBS="$save_LIBS" 199b3fea673SRoss LagerwallAC_SUBST(ZLIB_LIBS) 200b3fea673SRoss Lagerwallfi 201b3fea673SRoss LagerwallAM_CONDITIONAL(ZLIB_REGRESS, [test "$have_zlib" = "yes"]) 202b3fea673SRoss Lagerwall 203b3fea673SRoss Lagerwalldnl See if we have openssl. This doesn't go in LIBS either. 204b3fea673SRoss Lagerwallif test "$bwin32" = true; then 205b3fea673SRoss Lagerwall EV_LIB_WS32=-lws2_32 206b3fea673SRoss Lagerwall EV_LIB_GDI=-lgdi32 207b3fea673SRoss Lagerwallelse 208b3fea673SRoss Lagerwall EV_LIB_WS32= 209b3fea673SRoss Lagerwall EV_LIB_GDI= 210b3fea673SRoss Lagerwallfi 211b3fea673SRoss LagerwallAC_SUBST(EV_LIB_WS32) 212b3fea673SRoss LagerwallAC_SUBST(EV_LIB_GDI) 213b3fea673SRoss LagerwallAC_SUBST(OPENSSL_LIBADD) 214b3fea673SRoss Lagerwall 215b3fea673SRoss LagerwallAC_SYS_LARGEFILE 216b3fea673SRoss Lagerwall 217b3fea673SRoss LagerwallLIBEVENT_OPENSSL 218b3fea673SRoss Lagerwall 219b3fea673SRoss Lagerwalldnl Checks for header files. 220b3fea673SRoss LagerwallAC_CHECK_HEADERS([ \ 221b3fea673SRoss Lagerwall arpa/inet.h \ 222b3fea673SRoss Lagerwall fcntl.h \ 223b3fea673SRoss Lagerwall ifaddrs.h \ 224b3fea673SRoss Lagerwall mach/mach_time.h \ 225e85afbe3SAzat Khuzhin mach/mach.h \ 226b3fea673SRoss Lagerwall netdb.h \ 227b3fea673SRoss Lagerwall netinet/in.h \ 228b3fea673SRoss Lagerwall netinet/in6.h \ 229b3fea673SRoss Lagerwall netinet/tcp.h \ 2307c4da937SAzat Khuzhin sys/un.h \ 231b3fea673SRoss Lagerwall poll.h \ 232b3fea673SRoss Lagerwall port.h \ 233b3fea673SRoss Lagerwall stdarg.h \ 234b3fea673SRoss Lagerwall stddef.h \ 235b3fea673SRoss Lagerwall sys/devpoll.h \ 236b3fea673SRoss Lagerwall sys/epoll.h \ 237b3fea673SRoss Lagerwall sys/event.h \ 238b3fea673SRoss Lagerwall sys/eventfd.h \ 239b3fea673SRoss Lagerwall sys/ioctl.h \ 240b3fea673SRoss Lagerwall sys/mman.h \ 241b3fea673SRoss Lagerwall sys/param.h \ 242b3fea673SRoss Lagerwall sys/queue.h \ 243b3fea673SRoss Lagerwall sys/resource.h \ 244b3fea673SRoss Lagerwall sys/select.h \ 245b3fea673SRoss Lagerwall sys/sendfile.h \ 246b3fea673SRoss Lagerwall sys/socket.h \ 247b3fea673SRoss Lagerwall sys/stat.h \ 248b3fea673SRoss Lagerwall sys/time.h \ 249b3fea673SRoss Lagerwall sys/timerfd.h \ 250b3fea673SRoss Lagerwall sys/uio.h \ 251b3fea673SRoss Lagerwall sys/wait.h \ 25266ec78fdSAzat Khuzhin sys/random.h \ 25330316177SMark Ellzey errno.h \ 254b9bf7fa7Syuangongji afunix.h \ 255b3fea673SRoss Lagerwall]) 256b3fea673SRoss Lagerwall 257d2871a37SAzat Khuzhincase "${host_os}" in 258d2871a37SAzat Khuzhin linux*) ;; 259d2871a37SAzat Khuzhin *) 260b3fea673SRoss Lagerwall AC_CHECK_HEADERS(sys/sysctl.h, [], [], [ 261b3fea673SRoss Lagerwall #ifdef HAVE_SYS_PARAM_H 262b3fea673SRoss Lagerwall #include <sys/param.h> 263b3fea673SRoss Lagerwall #endif 264b3fea673SRoss Lagerwall ]) 265d2871a37SAzat Khuzhinesac 26666ec78fdSAzat Khuzhin 267b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_queue_h" = "xyes"; then 268b3fea673SRoss Lagerwall AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h) 269b3fea673SRoss Lagerwall AC_EGREP_CPP(yes, 270b3fea673SRoss Lagerwall[ 271b3fea673SRoss Lagerwall#include <sys/queue.h> 272b3fea673SRoss Lagerwall#ifdef TAILQ_FOREACH 273b3fea673SRoss Lagerwall yes 274b3fea673SRoss Lagerwall#endif 275b3fea673SRoss Lagerwall], [AC_MSG_RESULT(yes) 276b3fea673SRoss Lagerwall AC_DEFINE(HAVE_TAILQFOREACH, 1, 277b3fea673SRoss Lagerwall [Define if TAILQ_FOREACH is defined in <sys/queue.h>])], 278b3fea673SRoss Lagerwall AC_MSG_RESULT(no) 279b3fea673SRoss Lagerwall ) 280b3fea673SRoss Lagerwallfi 281b3fea673SRoss Lagerwall 282b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_time_h" = "xyes"; then 283b3fea673SRoss Lagerwall AC_MSG_CHECKING(for timeradd in sys/time.h) 284b3fea673SRoss Lagerwall AC_EGREP_CPP(yes, 285b3fea673SRoss Lagerwall[ 286b3fea673SRoss Lagerwall#include <sys/time.h> 287b3fea673SRoss Lagerwall#ifdef timeradd 288b3fea673SRoss Lagerwall yes 289b3fea673SRoss Lagerwall#endif 290b3fea673SRoss Lagerwall], [ AC_DEFINE(HAVE_TIMERADD, 1, 291b3fea673SRoss Lagerwall [Define if timeradd is defined in <sys/time.h>]) 292b3fea673SRoss Lagerwall AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) 293b3fea673SRoss Lagerwall) 294b3fea673SRoss Lagerwallfi 295b3fea673SRoss Lagerwall 296b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_time_h" = "xyes"; then 297b3fea673SRoss Lagerwall AC_MSG_CHECKING(for timercmp in sys/time.h) 298b3fea673SRoss Lagerwall AC_EGREP_CPP(yes, 299b3fea673SRoss Lagerwall[ 300b3fea673SRoss Lagerwall#include <sys/time.h> 301b3fea673SRoss Lagerwall#ifdef timercmp 302b3fea673SRoss Lagerwall yes 303b3fea673SRoss Lagerwall#endif 304b3fea673SRoss Lagerwall], [ AC_DEFINE(HAVE_TIMERCMP, 1, 305b3fea673SRoss Lagerwall [Define if timercmp is defined in <sys/time.h>]) 306b3fea673SRoss Lagerwall AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) 307b3fea673SRoss Lagerwall) 308b3fea673SRoss Lagerwallfi 309b3fea673SRoss Lagerwall 310b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_time_h" = "xyes"; then 311b3fea673SRoss Lagerwall AC_MSG_CHECKING(for timerclear in sys/time.h) 312b3fea673SRoss Lagerwall AC_EGREP_CPP(yes, 313b3fea673SRoss Lagerwall[ 314b3fea673SRoss Lagerwall#include <sys/time.h> 315b3fea673SRoss Lagerwall#ifdef timerclear 316b3fea673SRoss Lagerwall yes 317b3fea673SRoss Lagerwall#endif 318b3fea673SRoss Lagerwall], [ AC_DEFINE(HAVE_TIMERCLEAR, 1, 319b3fea673SRoss Lagerwall [Define if timerclear is defined in <sys/time.h>]) 320b3fea673SRoss Lagerwall AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) 321b3fea673SRoss Lagerwall) 322b3fea673SRoss Lagerwallfi 323b3fea673SRoss Lagerwall 324b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_time_h" = "xyes"; then 325b3fea673SRoss Lagerwall AC_MSG_CHECKING(for timerisset in sys/time.h) 326b3fea673SRoss Lagerwall AC_EGREP_CPP(yes, 327b3fea673SRoss Lagerwall[ 328b3fea673SRoss Lagerwall#include <sys/time.h> 329b3fea673SRoss Lagerwall#ifdef timerisset 330b3fea673SRoss Lagerwall yes 331b3fea673SRoss Lagerwall#endif 332b3fea673SRoss Lagerwall], [ AC_DEFINE(HAVE_TIMERISSET, 1, 333b3fea673SRoss Lagerwall [Define if timerisset is defined in <sys/time.h>]) 334b3fea673SRoss Lagerwall AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no) 335b3fea673SRoss Lagerwall) 336b3fea673SRoss Lagerwallfi 337b3fea673SRoss Lagerwall 338b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_sysctl_h" = "xyes"; then 33966ec78fdSAzat Khuzhin AC_CHECK_DECLS([CTL_KERN, KERN_ARND], [], [], 340b3fea673SRoss Lagerwall [[#include <sys/types.h> 341b3fea673SRoss Lagerwall #include <sys/sysctl.h>]] 342b3fea673SRoss Lagerwall ) 343b3fea673SRoss Lagerwallfi 344b3fea673SRoss Lagerwall 345b3fea673SRoss LagerwallAM_CONDITIONAL(BUILD_WIN32, test x$bwin32 = xtrue) 346b3fea673SRoss LagerwallAM_CONDITIONAL(BUILD_CYGWIN, test x$cygwin = xtrue) 347d433201eSRedfoxmoonAM_CONDITIONAL(BUILD_MIDIPIX, test x$midipix = xtrue) 348d433201eSRedfoxmoonAM_CONDITIONAL(BUILD_WITH_NO_UNDEFINED, test x$bwin32 = xtrue || test x$cygwin = xtrue || test x$midipix = xtrue) 349b3fea673SRoss Lagerwall 350b3fea673SRoss Lagerwallif test x$bwin32 = xtrue; then 351b9bf7fa7Syuangongji AC_HAVE_LIBRARY([ws2_32]) 352b3fea673SRoss Lagerwallfi 353b3fea673SRoss Lagerwall 354b3fea673SRoss Lagerwalldnl Checks for typedefs, structures, and compiler characteristics. 355b3fea673SRoss LagerwallAC_C_CONST 356b3fea673SRoss LagerwallAC_C_INLINE 357b3fea673SRoss LagerwallAC_HEADER_TIME 358b3fea673SRoss Lagerwall 359b3fea673SRoss Lagerwalldnl Checks for library functions. 360b3fea673SRoss LagerwallAC_CHECK_FUNCS([ \ 361b3fea673SRoss Lagerwall accept4 \ 362b3fea673SRoss Lagerwall arc4random \ 363b3fea673SRoss Lagerwall arc4random_buf \ 364a0bfe2c4SAzat Khuzhin arc4random_addrandom \ 365b3fea673SRoss Lagerwall eventfd \ 366b3fea673SRoss Lagerwall epoll_create1 \ 367b3fea673SRoss Lagerwall fcntl \ 368b3fea673SRoss Lagerwall getegid \ 369b3fea673SRoss Lagerwall geteuid \ 370b3fea673SRoss Lagerwall getifaddrs \ 371b3fea673SRoss Lagerwall gettimeofday \ 372b3fea673SRoss Lagerwall issetugid \ 373b3fea673SRoss Lagerwall mach_absolute_time \ 374b3fea673SRoss Lagerwall mmap \ 375b3fea673SRoss Lagerwall nanosleep \ 376b3fea673SRoss Lagerwall pipe \ 377b3fea673SRoss Lagerwall pipe2 \ 378b3fea673SRoss Lagerwall putenv \ 379b3fea673SRoss Lagerwall sendfile \ 380b3fea673SRoss Lagerwall setenv \ 381b3fea673SRoss Lagerwall setrlimit \ 382b3fea673SRoss Lagerwall sigaction \ 383b3fea673SRoss Lagerwall signal \ 384b3fea673SRoss Lagerwall splice \ 385b3fea673SRoss Lagerwall strlcpy \ 386b3fea673SRoss Lagerwall strsep \ 387b3fea673SRoss Lagerwall strtok_r \ 388b3fea673SRoss Lagerwall strtoll \ 389b3fea673SRoss Lagerwall sysctl \ 390b3fea673SRoss Lagerwall timerfd_create \ 391b3fea673SRoss Lagerwall umask \ 392b3fea673SRoss Lagerwall unsetenv \ 393b3fea673SRoss Lagerwall usleep \ 394b3fea673SRoss Lagerwall vasprintf \ 39566ec78fdSAzat Khuzhin getrandom \ 396b3fea673SRoss Lagerwall]) 397f4a6152cSyuangongji 398b9bf7fa7SyuangongjiAS_IF([test x$bwin32 = xtrue], 399b9bf7fa7Syuangongji AC_CHECK_FUNCS(_gmtime64_s, , [AC_CHECK_FUNCS(_gmtime64)]) 400b9bf7fa7Syuangongji) 401f4a6152cSyuangongji 40249146200SNick MathewsonAM_CONDITIONAL(STRLCPY_IMPL, [test x"$ac_cv_func_strlcpy" = xno]) 403b3fea673SRoss Lagerwall 404b9bf7fa7Syuangongjim4_define([funcstochk], 405b9bf7fa7Syuangongji [getnameinfo 406b9bf7fa7Syuangongji getprotobynumber 407b9bf7fa7Syuangongji getservbyname 408b9bf7fa7Syuangongji inet_ntop 409b9bf7fa7Syuangongji inet_pton] 410b9bf7fa7Syuangongji) 411b9bf7fa7Syuangongji 412b9bf7fa7SyuangongjiAS_IF([test x$bwin32 = xtrue], 413b9bf7fa7Syuangongji [AX_CHECK_DECLS_EX([funcstochk getaddrinfo], 414b9bf7fa7Syuangongji [#ifdef _WIN32 415b9bf7fa7Syuangongji #include <winsock2.h> 416b9bf7fa7Syuangongji #include <ws2tcpip.h> 417b9bf7fa7Syuangongji #endif])], 418b9bf7fa7Syuangongji [AC_CHECK_FUNCS(m4_normalize(funcstochk))] 419b9bf7fa7Syuangongji) 420b9bf7fa7Syuangongji 421b9bf7fa7Syuangongjim4_undefine([funcstochk]) 422b9bf7fa7Syuangongji 423b9bf7fa7Syuangongjidnl check getaddrinfo and gethostbyname_r for non-windows 424b9bf7fa7SyuangongjiAS_IF([test x$bwin32 = xfalse], [ 425b3fea673SRoss LagerwallAC_CACHE_CHECK( 426b3fea673SRoss Lagerwall [for getaddrinfo], 427b3fea673SRoss Lagerwall [libevent_cv_getaddrinfo], 428b3fea673SRoss Lagerwall [AC_LINK_IFELSE( 429b3fea673SRoss Lagerwall [AC_LANG_PROGRAM( 430b3fea673SRoss Lagerwall [[ 431b3fea673SRoss Lagerwall #ifdef HAVE_NETDB_H 432b3fea673SRoss Lagerwall #include <netdb.h> 433b3fea673SRoss Lagerwall #endif 434b3fea673SRoss Lagerwall ]], 435b3fea673SRoss Lagerwall [[ 436b3fea673SRoss Lagerwall getaddrinfo; 437b3fea673SRoss Lagerwall ]] 438b3fea673SRoss Lagerwall )], 439b3fea673SRoss Lagerwall [libevent_cv_getaddrinfo=yes], 440b3fea673SRoss Lagerwall [libevent_cv_getaddrinfo=no] 441b3fea673SRoss Lagerwall )] 442b3fea673SRoss Lagerwall) 443b3fea673SRoss Lagerwallif test "$libevent_cv_getaddrinfo" = "yes" ; then 444b3fea673SRoss Lagerwall AC_DEFINE([HAVE_GETADDRINFO], [1], [Do we have getaddrinfo()?]) 445b3fea673SRoss Lagerwallelse 446b3fea673SRoss Lagerwall 447b3fea673SRoss Lagerwall# Check for gethostbyname_r in all its glorious incompatible versions. 448b3fea673SRoss Lagerwall# (This is cut-and-pasted from Tor, which based its logic on 449b3fea673SRoss Lagerwall# Python's configure.in.) 450b3fea673SRoss LagerwallAH_TEMPLATE(HAVE_GETHOSTBYNAME_R, 451b3fea673SRoss Lagerwall [Define this if you have any gethostbyname_r()]) 452b3fea673SRoss Lagerwall 453b3fea673SRoss LagerwallAC_CHECK_FUNC(gethostbyname_r, [ 454b3fea673SRoss Lagerwall AC_MSG_CHECKING([how many arguments gethostbyname_r() wants]) 455b3fea673SRoss Lagerwall OLD_CFLAGS=$CFLAGS 456b3fea673SRoss Lagerwall CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS" 457b3fea673SRoss Lagerwall AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ 458b3fea673SRoss Lagerwall#include <netdb.h> 459b3fea673SRoss Lagerwall ], [[ 460b3fea673SRoss Lagerwall char *cp1, *cp2; 461b3fea673SRoss Lagerwall struct hostent *h1, *h2; 462b3fea673SRoss Lagerwall int i1, i2; 463b3fea673SRoss Lagerwall (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2); 464b3fea673SRoss Lagerwall ]])],[ 465b3fea673SRoss Lagerwall AC_DEFINE(HAVE_GETHOSTBYNAME_R) 466b3fea673SRoss Lagerwall AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1, 467b3fea673SRoss Lagerwall [Define this if gethostbyname_r takes 6 arguments]) 468b3fea673SRoss Lagerwall AC_MSG_RESULT(6) 469b3fea673SRoss Lagerwall ], [ 47045da7d9dSyuangongji AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ 471b3fea673SRoss Lagerwall#include <netdb.h> 472b3fea673SRoss Lagerwall ], [ 473b3fea673SRoss Lagerwall char *cp1, *cp2; 474b3fea673SRoss Lagerwall struct hostent *h1; 475b3fea673SRoss Lagerwall int i1, i2; 476b3fea673SRoss Lagerwall (void)gethostbyname_r(cp1,h1,cp2,i1,&i2); 47745da7d9dSyuangongji ])], [ 478b3fea673SRoss Lagerwall AC_DEFINE(HAVE_GETHOSTBYNAME_R) 479b3fea673SRoss Lagerwall AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARG, 1, 480b3fea673SRoss Lagerwall [Define this if gethostbyname_r takes 5 arguments]) 481b3fea673SRoss Lagerwall AC_MSG_RESULT(5) 482b3fea673SRoss Lagerwall ], [ 48345da7d9dSyuangongji AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ 484b3fea673SRoss Lagerwall#include <netdb.h> 485b3fea673SRoss Lagerwall ], [ 486b3fea673SRoss Lagerwall char *cp1; 487b3fea673SRoss Lagerwall struct hostent *h1; 488b3fea673SRoss Lagerwall struct hostent_data hd; 489b3fea673SRoss Lagerwall (void) gethostbyname_r(cp1,h1,&hd); 49045da7d9dSyuangongji ])], [ 491b3fea673SRoss Lagerwall AC_DEFINE(HAVE_GETHOSTBYNAME_R) 492b3fea673SRoss Lagerwall AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARG, 1, 493b3fea673SRoss Lagerwall [Define this if gethostbyname_r takes 3 arguments]) 494b3fea673SRoss Lagerwall AC_MSG_RESULT(3) 495b3fea673SRoss Lagerwall ], [ 496b3fea673SRoss Lagerwall AC_MSG_RESULT(0) 497b3fea673SRoss Lagerwall ]) 498b3fea673SRoss Lagerwall ]) 499b3fea673SRoss Lagerwall ]) 500b3fea673SRoss Lagerwall CFLAGS=$OLD_CFLAGS 501b3fea673SRoss Lagerwall]) 502b3fea673SRoss Lagerwall 503b3fea673SRoss Lagerwallfi 504b9bf7fa7Syuangongji]) dnl end of checking getaddrinfo and gethostbyname_r 505b3fea673SRoss Lagerwall 506b3fea673SRoss LagerwallAC_MSG_CHECKING(for F_SETFD in fcntl.h) 507b3fea673SRoss LagerwallAC_EGREP_CPP(yes, 508b3fea673SRoss Lagerwall[ 50900ba9fa2SEnji Cooper#define _GNU_SOURCE 1 510b3fea673SRoss Lagerwall#include <fcntl.h> 511b3fea673SRoss Lagerwall#ifdef F_SETFD 512b3fea673SRoss Lagerwallyes 513b3fea673SRoss Lagerwall#endif 514b3fea673SRoss Lagerwall], [ AC_DEFINE(HAVE_SETFD, 1, 515b3fea673SRoss Lagerwall [Define if F_SETFD is defined in <fcntl.h>]) 516b3fea673SRoss Lagerwall AC_MSG_RESULT(yes) ], AC_MSG_RESULT(no)) 517b3fea673SRoss Lagerwall 518b3fea673SRoss Lagerwallneedsignal=no 519b3fea673SRoss Lagerwallhaveselect=no 520b3fea673SRoss Lagerwallif test x$bwin32 != xtrue; then 521b3fea673SRoss Lagerwall AC_CHECK_FUNCS(select, [haveselect=yes], ) 522b3fea673SRoss Lagerwall if test "x$haveselect" = "xyes" ; then 523b3fea673SRoss Lagerwall needsignal=yes 524b3fea673SRoss Lagerwall fi 525b3fea673SRoss Lagerwallfi 526b3fea673SRoss LagerwallAM_CONDITIONAL(SELECT_BACKEND, [test "x$haveselect" = "xyes"]) 527b3fea673SRoss Lagerwall 528b3fea673SRoss Lagerwallhavepoll=no 529b3fea673SRoss LagerwallAC_CHECK_FUNCS(poll, [havepoll=yes], ) 530b3fea673SRoss Lagerwallif test "x$havepoll" = "xyes" ; then 531b3fea673SRoss Lagerwall needsignal=yes 532b3fea673SRoss Lagerwallfi 533b3fea673SRoss LagerwallAM_CONDITIONAL(POLL_BACKEND, [test "x$havepoll" = "xyes"]) 534b3fea673SRoss Lagerwall 535b3fea673SRoss Lagerwallhavedevpoll=no 536b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_devpoll_h" = "xyes"; then 537b3fea673SRoss Lagerwall AC_DEFINE(HAVE_DEVPOLL, 1, 538b3fea673SRoss Lagerwall [Define if /dev/poll is available]) 539b3fea673SRoss Lagerwallfi 540b3fea673SRoss LagerwallAM_CONDITIONAL(DEVPOLL_BACKEND, [test "x$ac_cv_header_sys_devpoll_h" = "xyes"]) 541b3fea673SRoss Lagerwall 542b3fea673SRoss Lagerwallhavekqueue=no 543b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_event_h" = "xyes"; then 544b3fea673SRoss Lagerwall AC_CHECK_FUNCS(kqueue, [havekqueue=yes], ) 545b3fea673SRoss Lagerwall if test "x$havekqueue" = "xyes" ; then 546b3fea673SRoss Lagerwall AC_MSG_CHECKING(for working kqueue) 54745da7d9dSyuangongji AC_RUN_IFELSE( 54845da7d9dSyuangongji [AC_LANG_PROGRAM([ 5499c720b70SCarlo Marcelo Arenas Belón#ifdef HAVE_STDLIB_H 5509c720b70SCarlo Marcelo Arenas Belón#include <stdlib.h> 5519c720b70SCarlo Marcelo Arenas Belón#endif 5529c720b70SCarlo Marcelo Arenas Belón#ifdef HAVE_STRING_H 5539c720b70SCarlo Marcelo Arenas Belón#include <string.h> 5549c720b70SCarlo Marcelo Arenas Belón#endif 555b3fea673SRoss Lagerwall#include <sys/types.h> 556b3fea673SRoss Lagerwall#include <sys/time.h> 557b3fea673SRoss Lagerwall#include <sys/event.h> 558b3fea673SRoss Lagerwall#include <stdio.h> 559b3fea673SRoss Lagerwall#include <unistd.h> 560b3fea673SRoss Lagerwall#include <fcntl.h> 56145da7d9dSyuangongji ], [[ 562b3fea673SRoss Lagerwall int kq; 563b3fea673SRoss Lagerwall int n; 56445da7d9dSyuangongji int fd[2]; 565b3fea673SRoss Lagerwall struct kevent ev; 566b3fea673SRoss Lagerwall struct timespec ts; 56745da7d9dSyuangongji char buf[80000]; 568b3fea673SRoss Lagerwall 569b3fea673SRoss Lagerwall if (pipe(fd) == -1) 57045da7d9dSyuangongji return 1; 57145da7d9dSyuangongji if (fcntl(fd[1], F_SETFL, O_NONBLOCK) == -1) 57245da7d9dSyuangongji return 1; 573b3fea673SRoss Lagerwall 57445da7d9dSyuangongji while ((n = write(fd[1], buf, sizeof(buf))) == sizeof(buf)) 575b3fea673SRoss Lagerwall ; 576b3fea673SRoss Lagerwall 577b3fea673SRoss Lagerwall if ((kq = kqueue()) == -1) 57845da7d9dSyuangongji return 1; 579b3fea673SRoss Lagerwall 580b3fea673SRoss Lagerwall memset(&ev, 0, sizeof(ev)); 58145da7d9dSyuangongji ev.ident = fd[1]; 582b3fea673SRoss Lagerwall ev.filter = EVFILT_WRITE; 583b3fea673SRoss Lagerwall ev.flags = EV_ADD | EV_ENABLE; 584b3fea673SRoss Lagerwall n = kevent(kq, &ev, 1, NULL, 0, NULL); 585b3fea673SRoss Lagerwall if (n == -1) 58645da7d9dSyuangongji return 1; 587b3fea673SRoss Lagerwall 58845da7d9dSyuangongji read(fd[0], buf, sizeof(buf)); 589b3fea673SRoss Lagerwall 590b3fea673SRoss Lagerwall ts.tv_sec = 0; 591b3fea673SRoss Lagerwall ts.tv_nsec = 0; 592b3fea673SRoss Lagerwall n = kevent(kq, NULL, 0, &ev, 1, &ts); 593b3fea673SRoss Lagerwall if (n == -1 || n == 0) 59445da7d9dSyuangongji return 1; 595b3fea673SRoss Lagerwall 59645da7d9dSyuangongji return 0; 59745da7d9dSyuangongji ]] 59845da7d9dSyuangongji )], 59945da7d9dSyuangongji [AC_MSG_RESULT(yes) 600b3fea673SRoss Lagerwall AC_DEFINE(HAVE_WORKING_KQUEUE, 1, 601b3fea673SRoss Lagerwall [Define if kqueue works correctly with pipes]) 602b3fea673SRoss Lagerwall havekqueue=yes 60345da7d9dSyuangongji ], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(no)] 60445da7d9dSyuangongji ) 605b3fea673SRoss Lagerwall fi 606b3fea673SRoss Lagerwallfi 607b3fea673SRoss LagerwallAM_CONDITIONAL(KQUEUE_BACKEND, [test "x$havekqueue" = "xyes"]) 608b3fea673SRoss Lagerwall 609b3fea673SRoss Lagerwallhaveepollsyscall=no 610b3fea673SRoss Lagerwallhaveepoll=no 611b3fea673SRoss LagerwallAC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], ) 612b3fea673SRoss Lagerwallif test "x$haveepoll" = "xyes" ; then 613b3fea673SRoss Lagerwall AC_DEFINE(HAVE_EPOLL, 1, 614b3fea673SRoss Lagerwall [Define if your system supports the epoll system calls]) 615b3fea673SRoss Lagerwall needsignal=yes 616b3fea673SRoss Lagerwallfi 617b3fea673SRoss Lagerwallif test "x$ac_cv_header_sys_epoll_h" = "xyes"; then 618b3fea673SRoss Lagerwall if test "x$haveepoll" = "xno" ; then 619b3fea673SRoss Lagerwall AC_MSG_CHECKING(for epoll system call) 62045da7d9dSyuangongji AC_RUN_IFELSE( 62145da7d9dSyuangongji [AC_LANG_PROGRAM([[ 622b3fea673SRoss Lagerwall#include <stdint.h> 623b3fea673SRoss Lagerwall#include <sys/param.h> 624b3fea673SRoss Lagerwall#include <sys/types.h> 625b3fea673SRoss Lagerwall#include <sys/syscall.h> 626b3fea673SRoss Lagerwall#include <sys/epoll.h> 627b3fea673SRoss Lagerwall#include <unistd.h> 628b3fea673SRoss Lagerwall 629b3fea673SRoss Lagerwallint 630b3fea673SRoss Lagerwallepoll_create(int size) 631b3fea673SRoss Lagerwall{ 632b3fea673SRoss Lagerwall return (syscall(__NR_epoll_create, size)); 633b3fea673SRoss Lagerwall} 63445da7d9dSyuangongji ]],[[ 635b3fea673SRoss Lagerwall int epfd; 636b3fea673SRoss Lagerwall 637b3fea673SRoss Lagerwall epfd = epoll_create(256); 63845da7d9dSyuangongji return (epfd == -1 ? 1 : 0); 63945da7d9dSyuangongji ]] 64045da7d9dSyuangongji )], 64145da7d9dSyuangongji [AC_MSG_RESULT(yes) 642b3fea673SRoss Lagerwall AC_DEFINE(HAVE_EPOLL, 1, 643b3fea673SRoss Lagerwall [Define if your system supports the epoll system calls]) 644b3fea673SRoss Lagerwall needsignal=yes 645b3fea673SRoss Lagerwall have_epoll=yes 646b3fea673SRoss Lagerwall AC_LIBOBJ(epoll_sub) 64745da7d9dSyuangongji ], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(no)] 64845da7d9dSyuangongji ) 649b3fea673SRoss Lagerwall fi 650b3fea673SRoss Lagerwallfi 651b3fea673SRoss LagerwallAM_CONDITIONAL(EPOLL_BACKEND, [test "x$haveepoll" = "xyes"]) 652b3fea673SRoss Lagerwall 653b3fea673SRoss Lagerwallhaveeventports=no 654b3fea673SRoss LagerwallAC_CHECK_FUNCS(port_create, [haveeventports=yes], ) 655b3fea673SRoss Lagerwallif test "x$haveeventports" = "xyes" ; then 656b3fea673SRoss Lagerwall AC_DEFINE(HAVE_EVENT_PORTS, 1, 657b3fea673SRoss Lagerwall [Define if your system supports event ports]) 658b3fea673SRoss Lagerwall needsignal=yes 659b3fea673SRoss Lagerwallfi 660b3fea673SRoss LagerwallAM_CONDITIONAL(EVPORT_BACKEND, [test "x$haveeventports" = "xyes"]) 661b3fea673SRoss Lagerwall 662b3fea673SRoss Lagerwallif test "x$bwin32" = "xtrue"; then 663b3fea673SRoss Lagerwall needsignal=yes 664b3fea673SRoss Lagerwallfi 665b3fea673SRoss Lagerwall 666b3fea673SRoss LagerwallAM_CONDITIONAL(SIGNAL_SUPPORT, [test "x$needsignal" = "xyes"]) 667b3fea673SRoss Lagerwall 668b3fea673SRoss LagerwallAC_TYPE_PID_T 669b3fea673SRoss LagerwallAC_TYPE_SIZE_T 670b3fea673SRoss LagerwallAC_TYPE_SSIZE_T 671b3fea673SRoss Lagerwall 672b3fea673SRoss LagerwallAC_CHECK_TYPES([uint64_t, uint32_t, uint16_t, uint8_t, uintptr_t], , , 673b3fea673SRoss Lagerwall[#ifdef HAVE_STDINT_H 674b3fea673SRoss Lagerwall#include <stdint.h> 675b3fea673SRoss Lagerwall#elif defined(HAVE_INTTYPES_H) 676b3fea673SRoss Lagerwall#include <inttypes.h> 677b3fea673SRoss Lagerwall#endif 678b3fea673SRoss Lagerwall#ifdef HAVE_SYS_TYPES_H 679b3fea673SRoss Lagerwall#include <sys/types.h> 680b3fea673SRoss Lagerwall#endif]) 681b3fea673SRoss Lagerwall 682b3fea673SRoss LagerwallAC_CHECK_TYPES([fd_mask], , , 683b3fea673SRoss Lagerwall[#ifdef HAVE_SYS_TYPES_H 684b3fea673SRoss Lagerwall#include <sys/types.h> 685b3fea673SRoss Lagerwall#endif 686b3fea673SRoss Lagerwall#ifdef HAVE_SYS_SELECT_H 687b3fea673SRoss Lagerwall#include <sys/select.h> 688b3fea673SRoss Lagerwall#endif]) 689b3fea673SRoss Lagerwall 690b3fea673SRoss LagerwallAC_CHECK_SIZEOF(long long) 691b3fea673SRoss LagerwallAC_CHECK_SIZEOF(long) 692b3fea673SRoss LagerwallAC_CHECK_SIZEOF(int) 693b3fea673SRoss LagerwallAC_CHECK_SIZEOF(short) 694b3fea673SRoss LagerwallAC_CHECK_SIZEOF(size_t) 695b3fea673SRoss LagerwallAC_CHECK_SIZEOF(void *) 696b3fea673SRoss LagerwallAC_CHECK_SIZEOF(off_t) 6978983e511SCarlo Marcelo Arenas BelónAC_CHECK_SIZEOF(time_t) 698b3fea673SRoss Lagerwall 6997c4da937SAzat KhuzhinAC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, struct sockaddr_un, sa_family_t, struct addrinfo, struct sockaddr_storage], , , 70000ba9fa2SEnji Cooper[#define _GNU_SOURCE 1 701b3fea673SRoss Lagerwall#include <sys/types.h> 702b3fea673SRoss Lagerwall#ifdef HAVE_NETINET_IN_H 703b3fea673SRoss Lagerwall#include <netinet/in.h> 704b3fea673SRoss Lagerwall#endif 705b3fea673SRoss Lagerwall#ifdef HAVE_NETINET_IN6_H 706b3fea673SRoss Lagerwall#include <netinet/in6.h> 707b3fea673SRoss Lagerwall#endif 7087c4da937SAzat Khuzhin#ifdef HAVE_SYS_UN_H 7097c4da937SAzat Khuzhin#include <sys/un.h> 7107c4da937SAzat Khuzhin#endif 711b3fea673SRoss Lagerwall#ifdef HAVE_SYS_SOCKET_H 712b3fea673SRoss Lagerwall#include <sys/socket.h> 713b3fea673SRoss Lagerwall#endif 714b3fea673SRoss Lagerwall#ifdef HAVE_NETDB_H 715b3fea673SRoss Lagerwall#include <netdb.h> 716b3fea673SRoss Lagerwall#endif 717b3fea673SRoss Lagerwall#ifdef _WIN32 718b3fea673SRoss Lagerwall#define WIN32_WINNT 0x400 719b3fea673SRoss Lagerwall#define _WIN32_WINNT 0x400 720b3fea673SRoss Lagerwall#define WIN32_LEAN_AND_MEAN 721b3fea673SRoss Lagerwall#if defined(_MSC_VER) && (_MSC_VER < 1300) 722b3fea673SRoss Lagerwall#include <winsock.h> 723b3fea673SRoss Lagerwall#else 724b3fea673SRoss Lagerwall#include <winsock2.h> 725b3fea673SRoss Lagerwall#include <ws2tcpip.h> 726b3fea673SRoss Lagerwall#endif 727b3fea673SRoss Lagerwall#endif 728b3fea673SRoss Lagerwall]) 729b3fea673SRoss LagerwallAC_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], , , 730b3fea673SRoss Lagerwall[#include <sys/types.h> 731b3fea673SRoss Lagerwall#ifdef HAVE_NETINET_IN_H 732b3fea673SRoss Lagerwall#include <netinet/in.h> 733b3fea673SRoss Lagerwall#endif 734b3fea673SRoss Lagerwall#ifdef HAVE_NETINET_IN6_H 735b3fea673SRoss Lagerwall#include <netinet/in6.h> 736b3fea673SRoss Lagerwall#endif 737b3fea673SRoss Lagerwall#ifdef HAVE_SYS_SOCKET_H 738b3fea673SRoss Lagerwall#include <sys/socket.h> 739b3fea673SRoss Lagerwall#endif 740b3fea673SRoss Lagerwall#ifdef _WIN32 741b3fea673SRoss Lagerwall#define WIN32_WINNT 0x400 742b3fea673SRoss Lagerwall#define _WIN32_WINNT 0x400 743b3fea673SRoss Lagerwall#define WIN32_LEAN_AND_MEAN 744b3fea673SRoss Lagerwall#if defined(_MSC_VER) && (_MSC_VER < 1300) 745b3fea673SRoss Lagerwall#include <winsock.h> 746b3fea673SRoss Lagerwall#else 747b3fea673SRoss Lagerwall#include <winsock2.h> 748b3fea673SRoss Lagerwall#include <ws2tcpip.h> 749b3fea673SRoss Lagerwall#endif 750b3fea673SRoss Lagerwall#endif 751b3fea673SRoss Lagerwall]) 752b3fea673SRoss Lagerwall 7538567f2f5SAzat KhuzhinAC_CHECK_TYPES([struct linger],,, 7540dda56a4SNicholas Heath[ 7550dda56a4SNicholas Heath#ifdef HAVE_SYS_SOCKET_H 7560dda56a4SNicholas Heath#include <sys/socket.h> 7570dda56a4SNicholas Heath#endif 758b9bf7fa7Syuangongji#ifdef _WIN32 759b9bf7fa7Syuangongji#include <winsock2.h> 760b9bf7fa7Syuangongji#endif 7610dda56a4SNicholas Heath]) 7620dda56a4SNicholas Heath 763b3fea673SRoss LagerwallAC_MSG_CHECKING([for socklen_t]) 76445da7d9dSyuangongjiAC_COMPILE_IFELSE( 76545da7d9dSyuangongji [AC_LANG_PROGRAM([ 766b3fea673SRoss Lagerwall #include <sys/types.h> 767d7579fb9SAzat Khuzhin #ifdef _WIN32 768d7579fb9SAzat Khuzhin #include <ws2tcpip.h> 769d7579fb9SAzat Khuzhin #else 770d7579fb9SAzat Khuzhin #include <sys/socket.h> 77145da7d9dSyuangongji #endif 77245da7d9dSyuangongji ],[socklen_t x;] 77345da7d9dSyuangongji )], 77445da7d9dSyuangongji [AC_MSG_RESULT([yes])], 775b3fea673SRoss Lagerwall [AC_MSG_RESULT([no]) 776b3fea673SRoss Lagerwall AC_DEFINE(socklen_t, unsigned int, 777b3fea673SRoss Lagerwall [Define to unsigned int if you dont have it])] 778b3fea673SRoss Lagerwall) 779b3fea673SRoss Lagerwall 780b3af7bddSAzat Khuzhin# __func__/__FUNCTION__ is not a macros in general 781b3fea673SRoss LagerwallAC_MSG_CHECKING([whether our compiler supports __func__]) 78245da7d9dSyuangongjiAC_COMPILE_IFELSE( 78345da7d9dSyuangongji [AC_LANG_PROGRAM([], 78445da7d9dSyuangongji [ const char *cp = __func__; ] 78545da7d9dSyuangongji )], 786b3af7bddSAzat Khuzhin [ AC_DEFINE(HAVE___func__, 1, [Define to 1 if compiler have __func__]) 787b3af7bddSAzat Khuzhin AC_MSG_RESULT([yes]) 788b3af7bddSAzat Khuzhin ], 78945da7d9dSyuangongji [AC_MSG_RESULT([no])] 790b3af7bddSAzat Khuzhin) 791b3fea673SRoss LagerwallAC_MSG_CHECKING([whether our compiler supports __FUNCTION__]) 79245da7d9dSyuangongjiAC_COMPILE_IFELSE( 79345da7d9dSyuangongji [AC_LANG_PROGRAM([], 79445da7d9dSyuangongji [ const char *cp = __FUNCTION__; ] 79545da7d9dSyuangongji )], 796b3af7bddSAzat Khuzhin [ AC_DEFINE(HAVE___FUNCTION__, 1, [Define to 1 if compiler have __FUNCTION__]) 797b3fea673SRoss Lagerwall AC_MSG_RESULT([yes]) 798b3af7bddSAzat Khuzhin ], 79945da7d9dSyuangongji [AC_MSG_RESULT([no])] 800b3af7bddSAzat Khuzhin) 801b3fea673SRoss Lagerwall 802b3fea673SRoss Lagerwall# check if we can compile with pthreads 803b3fea673SRoss Lagerwallhave_pthreads=no 804b3fea673SRoss Lagerwallif test x$bwin32 != xtrue && test "$enable_thread_support" != "no"; then 805b3fea673SRoss Lagerwall ACX_PTHREAD([ 806b3fea673SRoss Lagerwall AC_DEFINE(HAVE_PTHREADS, 1, 807b3fea673SRoss Lagerwall [Define if we have pthreads on this system]) 808b3fea673SRoss Lagerwall have_pthreads=yes]) 809b3fea673SRoss Lagerwall CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 810b3fea673SRoss Lagerwall AC_CHECK_SIZEOF(pthread_t, , 811b3fea673SRoss Lagerwall [AC_INCLUDES_DEFAULT() 812b3fea673SRoss Lagerwall #include <pthread.h> ] 813b3fea673SRoss Lagerwall ) 814b3fea673SRoss Lagerwallfi 815bb09535bSAzat KhuzhinAM_CONDITIONAL(THREADS, [test "$enable_thread_support" != "no"]) 816b3fea673SRoss LagerwallAM_CONDITIONAL(PTHREADS, [test "$have_pthreads" != "no" && test "$enable_thread_support" != "no"]) 817b3fea673SRoss Lagerwall 818b3fea673SRoss Lagerwall# check if we should compile locking into the library 819b3fea673SRoss Lagerwallif test x$enable_thread_support = xno; then 820b3fea673SRoss Lagerwall AC_DEFINE(DISABLE_THREAD_SUPPORT, 1, 821b3fea673SRoss Lagerwall [Define if libevent should not be compiled with thread support]) 822b3fea673SRoss Lagerwallfi 823b3fea673SRoss Lagerwall 824b3fea673SRoss Lagerwall# check if we should hard-code the mm functions. 825b3fea673SRoss Lagerwallif test x$enable_malloc_replacement = xno; then 826b3fea673SRoss Lagerwall AC_DEFINE(DISABLE_MM_REPLACEMENT, 1, 827b3fea673SRoss Lagerwall [Define if libevent should not allow replacing the mm functions]) 828b3fea673SRoss Lagerwallfi 829b3fea673SRoss Lagerwall 830b3fea673SRoss Lagerwall# check if we should hard-code debugging out 831b3fea673SRoss Lagerwallif test x$enable_debug_mode = xno; then 832b3fea673SRoss Lagerwall AC_DEFINE(DISABLE_DEBUG_MODE, 1, 833b3fea673SRoss Lagerwall [Define if libevent should build without support for a debug mode]) 834b3fea673SRoss Lagerwallfi 83545da7d9dSyuangongji 836b3fea673SRoss Lagerwall# check if we should enable verbose debugging 837b3fea673SRoss Lagerwallif test x$enable_verbose_debug = xyes; then 838b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -DUSE_DEBUG" 839b3fea673SRoss Lagerwallfi 840b3fea673SRoss Lagerwall 841b3fea673SRoss Lagerwall# check if we have and should use openssl 842b3fea673SRoss LagerwallAM_CONDITIONAL(OPENSSL, [test "$enable_openssl" != "no" && test "$have_openssl" = "yes"]) 843b3fea673SRoss Lagerwall 844b3fea673SRoss Lagerwall# Add some more warnings which we use in development but not in the 845b3fea673SRoss Lagerwall# released versions. (Some relevant gcc versions can't handle these.) 846b3fea673SRoss Lagerwallif test x$enable_gcc_warnings != xno && test "$GCC" = "yes"; then 847b3fea673SRoss Lagerwall 848b3fea673SRoss Lagerwall AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ 849b3fea673SRoss Lagerwall#if !defined(__GNUC__) || (__GNUC__ < 4) 850b3fea673SRoss Lagerwall#error 851b3fea673SRoss Lagerwall#endif])], have_gcc4=yes, have_gcc4=no) 852b3fea673SRoss Lagerwall 853b3fea673SRoss Lagerwall AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ 854b3fea673SRoss Lagerwall#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) 855b3fea673SRoss Lagerwall#error 856b3fea673SRoss Lagerwall#endif])], have_gcc42=yes, have_gcc42=no) 857b3fea673SRoss Lagerwall 858b3fea673SRoss Lagerwall AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ 859b3fea673SRoss Lagerwall#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 860b3fea673SRoss Lagerwall#error 861b3fea673SRoss Lagerwall#endif])], have_gcc45=yes, have_gcc45=no) 862b3fea673SRoss Lagerwall 863b3fea673SRoss Lagerwall AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ 864b3fea673SRoss Lagerwall#if !defined(__clang__) 865b3fea673SRoss Lagerwall#error 866b3fea673SRoss Lagerwall#endif])], have_clang=yes, have_clang=no) 867b3fea673SRoss Lagerwall 868bff1423dSAzat Khuzhin # -W is the same as -Wextra 869cb4b8738Sfanquake CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wmissing-declarations -Wnested-externs -Wbad-function-cast" 870b3fea673SRoss Lagerwall if test x$enable_gcc_warnings = xyes; then 871b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Werror" 872b3fea673SRoss Lagerwall fi 873b3fea673SRoss Lagerwall 874b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Wno-unused-parameter -Wstrict-aliasing" 875b3fea673SRoss Lagerwall 876b3fea673SRoss Lagerwall if test x$have_gcc4 = xyes ; then 877b3fea673SRoss Lagerwall # These warnings break gcc 3.3.5 and work on gcc 4.0.2 878b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement" 879b3fea673SRoss Lagerwall #CFLAGS="$CFLAGS -Wold-style-definition" 880b3fea673SRoss Lagerwall fi 881b3fea673SRoss Lagerwall 882b3fea673SRoss Lagerwall if test x$have_gcc42 = xyes ; then 883b3fea673SRoss Lagerwall # These warnings break gcc 4.0.2 and work on gcc 4.2 884b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Waddress" 885b3fea673SRoss Lagerwall fi 886b3fea673SRoss Lagerwall 887b3fea673SRoss Lagerwall if test x$have_gcc42 = xyes && test x$have_clang = xno; then 888b3fea673SRoss Lagerwall # These warnings break gcc 4.0.2 and clang, but work on gcc 4.2 889b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init" 890b3fea673SRoss Lagerwall fi 891b3fea673SRoss Lagerwall 892b3fea673SRoss Lagerwall if test x$have_gcc45 = xyes ; then 893b3fea673SRoss Lagerwall # These warnings work on gcc 4.5 894b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Wlogical-op" 895b3fea673SRoss Lagerwall fi 896b3fea673SRoss Lagerwall 897b3fea673SRoss Lagerwall if test x$have_clang = xyes; then 898b3fea673SRoss Lagerwall # Disable the unused-function warnings, because these trigger 899b3fea673SRoss Lagerwall # for minheap-internal.h related code. 900b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Wno-unused-function" 901b56611d7STrond Norbye 9025e39750dSEnji Cooper # clang on macosx emits warnings for each directory specified which 903b56611d7STrond Norbye # isn't "used" generating a lot of build noise (typically 3 warnings 904b56611d7STrond Norbye # per file 905b56611d7STrond Norbye case "$host_os" in 906b56611d7STrond Norbye darwin*) 907b56611d7STrond Norbye CFLAGS="$CFLAGS -Qunused-arguments" 908b56611d7STrond Norbye ;; 909b56611d7STrond Norbye esac 910b3fea673SRoss Lagerwall fi 911b3fea673SRoss Lagerwall 912b3fea673SRoss Lagerwall##This will break the world on some 64-bit architectures 913b3fea673SRoss Lagerwall# CFLAGS="$CFLAGS -Winline" 914b3fea673SRoss Lagerwall 915b3fea673SRoss Lagerwallfi 916b3fea673SRoss Lagerwall 917b3fea673SRoss LagerwallLIBEVENT_GC_SECTIONS= 918b3fea673SRoss Lagerwallif test "$GCC" = yes && test "$enable_function_sections" = yes ; then 919b3fea673SRoss Lagerwall AC_CACHE_CHECK( 920b3fea673SRoss Lagerwall [if linker supports omitting unused code and data], 921b3fea673SRoss Lagerwall [libevent_cv_gc_sections_runs], 922b3fea673SRoss Lagerwall [ 923b3fea673SRoss Lagerwall dnl NetBSD will link but likely not run with --gc-sections 924b3fea673SRoss Lagerwall dnl http://bugs.ntp.org/1844 925b3fea673SRoss Lagerwall dnl http://gnats.netbsd.org/40401 926b3fea673SRoss Lagerwall dnl --gc-sections causes attempt to load as linux elf, with 927b3fea673SRoss Lagerwall dnl wrong syscalls in place. Test a little gauntlet of 928b3fea673SRoss Lagerwall dnl simple stdio read code checking for errors, expecting 929b3fea673SRoss Lagerwall dnl enough syscall differences that the NetBSD code will 930b3fea673SRoss Lagerwall dnl fail even with Linux emulation working as designed. 931b3fea673SRoss Lagerwall dnl A shorter test could be refined by someone with access 932b3fea673SRoss Lagerwall dnl to a NetBSD host with Linux emulation working. 933b3fea673SRoss Lagerwall origCFLAGS="$CFLAGS" 934b3fea673SRoss Lagerwall CFLAGS="$CFLAGS -Wl,--gc-sections" 935b3fea673SRoss Lagerwall AC_LINK_IFELSE( 936b3fea673SRoss Lagerwall [AC_LANG_PROGRAM( 937b3fea673SRoss Lagerwall [[ 938b3fea673SRoss Lagerwall #include <stdlib.h> 939b3fea673SRoss Lagerwall #include <stdio.h> 940b3fea673SRoss Lagerwall ]], 941b3fea673SRoss Lagerwall [[ 942b3fea673SRoss Lagerwall FILE * fpC; 943b3fea673SRoss Lagerwall char buf[32]; 944b3fea673SRoss Lagerwall size_t cch; 945b3fea673SRoss Lagerwall int read_success_once; 946b3fea673SRoss Lagerwall 947b3fea673SRoss Lagerwall fpC = fopen("conftest.c", "r"); 948b3fea673SRoss Lagerwall if (NULL == fpC) 949b3fea673SRoss Lagerwall exit(1); 950b3fea673SRoss Lagerwall do { 951b3fea673SRoss Lagerwall cch = fread(buf, sizeof(buf), 1, fpC); 952b3fea673SRoss Lagerwall read_success_once |= (0 != cch); 953b3fea673SRoss Lagerwall } while (0 != cch); 954b3fea673SRoss Lagerwall if (!read_success_once) 955b3fea673SRoss Lagerwall exit(2); 956b3fea673SRoss Lagerwall if (!feof(fpC)) 957b3fea673SRoss Lagerwall exit(3); 958b3fea673SRoss Lagerwall if (0 != fclose(fpC)) 959b3fea673SRoss Lagerwall exit(4); 960b3fea673SRoss Lagerwall 961b3fea673SRoss Lagerwall exit(EXIT_SUCCESS); 962b3fea673SRoss Lagerwall ]] 963b3fea673SRoss Lagerwall )], 964b3fea673SRoss Lagerwall [ 965b3fea673SRoss Lagerwall dnl We have to do this invocation manually so that we can 966b3fea673SRoss Lagerwall dnl get the output of conftest.err to make sure it doesn't 967b3fea673SRoss Lagerwall dnl mention gc-sections. 968b3fea673SRoss Lagerwall if test "X$cross_compiling" = "Xyes" || grep gc-sections conftest.err ; then 969b3fea673SRoss Lagerwall libevent_cv_gc_sections_runs=no 970b3fea673SRoss Lagerwall else 971b3fea673SRoss Lagerwall libevent_cv_gc_sections_runs=no 972b3fea673SRoss Lagerwall ./conftest >/dev/null 2>&1 && libevent_cv_gc_sections_runs=yes 973b3fea673SRoss Lagerwall fi 974b3fea673SRoss Lagerwall ], 975b3fea673SRoss Lagerwall [libevent_cv_gc_sections_runs=no] 976b3fea673SRoss Lagerwall ) 977b3fea673SRoss Lagerwall CFLAGS="$origCFLAGS" 978b3fea673SRoss Lagerwall AS_UNSET([origCFLAGS]) 979b3fea673SRoss Lagerwall ] 980b3fea673SRoss Lagerwall ) 981b3fea673SRoss Lagerwall case "$libevent_cv_gc_sections_runs" in 982b3fea673SRoss Lagerwall yes) 983b3fea673SRoss Lagerwall CFLAGS="-ffunction-sections -fdata-sections $CFLAGS" 984b3fea673SRoss Lagerwall LIBEVENT_GC_SECTIONS="-Wl,--gc-sections" 985b3fea673SRoss Lagerwall ;; 986b3fea673SRoss Lagerwall esac 987b3fea673SRoss Lagerwallfi 988b3fea673SRoss LagerwallAC_SUBST([LIBEVENT_GC_SECTIONS]) 989b3fea673SRoss Lagerwall 990b3fea673SRoss LagerwallAM_CONDITIONAL([INSTALL_LIBEVENT], [test "$enable_libevent_install" = "yes"]) 991b3fea673SRoss Lagerwall 9925d1e8570Syuangongji# Doxygen support 9935d1e8570SyuangongjiDX_HTML_FEATURE(ON) 9945d1e8570SyuangongjiDX_MAN_FEATURE(OFF) 9955d1e8570SyuangongjiDX_RTF_FEATURE(OFF) 9965d1e8570SyuangongjiDX_XML_FEATURE(OFF) 9975d1e8570SyuangongjiDX_PDF_FEATURE(OFF) 9985d1e8570SyuangongjiDX_PS_FEATURE(OFF) 9995d1e8570SyuangongjiDX_CHM_FEATURE(OFF) 10005d1e8570SyuangongjiDX_CHI_FEATURE(OFF) 10015d1e8570SyuangongjiDX_INIT_DOXYGEN([libevent], [${top_srcdir}/Doxyfile], [doxygen]) 10025d1e8570Syuangongji 10035d1e8570SyuangongjiAM_CONDITIONAL([ENABLE_DOXYGEN], [test "$DX_FLAG_doc" = "1"]) 10045d1e8570SyuangongjiAM_CONDITIONAL([ENABLE_DOXYGEN_MAN], [test "$DX_FLAG_man" = "1"]) 10055d1e8570Syuangongji 1006b8d7c621SJan HeylenAC_CONFIG_FILES( [libevent.pc libevent_openssl.pc libevent_pthreads.pc libevent_core.pc libevent_extra.pc] ) 1007b3fea673SRoss LagerwallAC_OUTPUT(Makefile) 1008