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