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)