File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libevent / configure.in
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:02:54 2012 UTC (12 years, 3 months ago) by misho
Branches: libevent, MAIN
CVS tags: v1_4_14bp0, v1_4_14b, HEAD
libevent

    1: dnl configure.in for libevent
    2: dnl Dug Song <dugsong@monkey.org>
    3: AC_INIT(event.c)
    4: 
    5: AM_INIT_AUTOMAKE(libevent,1.4.14b-stable)
    6: AM_CONFIG_HEADER(config.h)
    7: dnl AM_MAINTAINER_MODE
    8: 
    9: AC_CANONICAL_HOST
   10: 
   11: AC_DEFINE(NUMERIC_VERSION, 0x01040e00, [Numeric representation of the version])
   12: 
   13: dnl Initialize prefix.
   14: if test "$prefix" = "NONE"; then
   15:    prefix="/usr/local"
   16: fi
   17: 
   18: dnl Checks for programs.
   19: AC_PROG_CC
   20: AC_PROG_INSTALL
   21: AC_PROG_LN_S
   22: 
   23: AC_PROG_GCC_TRADITIONAL
   24: if test "$GCC" = yes ; then
   25:         CFLAGS="$CFLAGS -Wall"
   26:         # And disable the strict-aliasing optimization, since it breaks
   27:         # our sockaddr-handling code in strange ways.
   28:         CFLAGS="$CFLAGS -fno-strict-aliasing"
   29: fi
   30: 
   31: dnl Libevent 1.4 isn't multithreaded, but some of its functions are
   32: dnl documented to be reentrant.  If you don't define the right macros
   33: dnl on some platforms, you get non-reentrant versions of the libc
   34: dnl functinos (like an errno that's shared by all threads).
   35: AC_MSG_CHECKING([whether we need extra flags to make libc reentrant])
   36: case $host in
   37:    *solaris* | *-osf* | *-hpux* )
   38:      AC_MSG_RESULT([-D_REENTRANT])
   39:      CFLAGS="$CFLAGS -D_REENTRANT"
   40:      ;;
   41:    *-aix* | *-freebsd* | *-darwin* )
   42:      AC_MSG_RESULT([-D_THREAD_SAFE])
   43:      CFLAGS="$CFLAGS -D_THREAD_SAFE"
   44:      ;;
   45:    *)
   46:      AC_MSG_RESULT(no)
   47:      ;;
   48: esac
   49: 
   50: AC_ARG_ENABLE(gcc-warnings,
   51:      AS_HELP_STRING(--enable-gcc-warnings, enable verbose warnings with GCC))
   52: 
   53: AC_PROG_LIBTOOL
   54: 
   55: dnl   Uncomment "AC_DISABLE_SHARED" to make shared librraries not get
   56: dnl   built by default.  You can also turn shared libs on and off from 
   57: dnl   the command line with --enable-shared and --disable-shared.
   58: dnl AC_DISABLE_SHARED
   59: AC_SUBST(LIBTOOL_DEPS)
   60: 
   61: dnl Checks for libraries.
   62: AC_CHECK_LIB(socket, socket)
   63: AC_CHECK_LIB(resolv, inet_aton)
   64: AC_CHECK_LIB(rt, clock_gettime)
   65: AC_CHECK_LIB(nsl, inet_ntoa)
   66: 
   67: dnl Checks for header files.
   68: AC_HEADER_STDC
   69: AC_CHECK_HEADERS(fcntl.h stdarg.h inttypes.h stdint.h poll.h signal.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/in6.h sys/socket.h)
   70: if test "x$ac_cv_header_sys_queue_h" = "xyes"; then
   71: 	AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h)
   72: 	AC_EGREP_CPP(yes,
   73: [
   74: #include <sys/queue.h>
   75: #ifdef TAILQ_FOREACH
   76:  yes
   77: #endif
   78: ],	[AC_MSG_RESULT(yes)
   79: 	 AC_DEFINE(HAVE_TAILQFOREACH, 1,
   80: 		[Define if TAILQ_FOREACH is defined in <sys/queue.h>])],
   81: 	AC_MSG_RESULT(no)
   82: 	)
   83: fi
   84: 
   85: if test "x$ac_cv_header_sys_time_h" = "xyes"; then
   86: 	AC_MSG_CHECKING(for timeradd in sys/time.h)
   87: 	AC_EGREP_CPP(yes,
   88: [
   89: #include <sys/time.h>
   90: #ifdef timeradd
   91:  yes
   92: #endif
   93: ],	[ AC_DEFINE(HAVE_TIMERADD, 1,
   94: 		[Define if timeradd is defined in <sys/time.h>])
   95: 	  AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
   96: )
   97: fi
   98: 
   99: if test "x$ac_cv_header_sys_time_h" = "xyes"; then
  100: 	AC_MSG_CHECKING(for timercmp in sys/time.h)
  101: 	AC_EGREP_CPP(yes,
  102: [
  103: #include <sys/time.h>
  104: #ifdef timercmp
  105:  yes
  106: #endif
  107: ],	[ AC_DEFINE(HAVE_TIMERCMP, 1,
  108: 		[Define if timercmp is defined in <sys/time.h>])
  109: 	  AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
  110: )
  111: fi
  112: 
  113: if test "x$ac_cv_header_sys_time_h" = "xyes"; then
  114: 	AC_MSG_CHECKING(for timerclear in sys/time.h)
  115: 	AC_EGREP_CPP(yes,
  116: [
  117: #include <sys/time.h>
  118: #ifdef timerclear
  119:  yes
  120: #endif
  121: ],	[ AC_DEFINE(HAVE_TIMERCLEAR, 1,
  122: 		[Define if timerclear is defined in <sys/time.h>])
  123: 	  AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
  124: )
  125: fi
  126: 
  127: if test "x$ac_cv_header_sys_time_h" = "xyes"; then
  128: 	AC_MSG_CHECKING(for timerisset in sys/time.h)
  129: 	AC_EGREP_CPP(yes,
  130: [
  131: #include <sys/time.h>
  132: #ifdef timerisset
  133:  yes
  134: #endif
  135: ],	[ AC_DEFINE(HAVE_TIMERISSET, 1,
  136: 		[Define if timerisset is defined in <sys/time.h>])
  137: 	  AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
  138: )
  139: fi
  140: 
  141: dnl - check if the macro WIN32 is defined on this compiler.
  142: dnl - (this is how we check for a windows version of GCC)
  143: AC_MSG_CHECKING(for WIN32)
  144: AC_TRY_COMPILE(,
  145: 	[
  146: #ifndef WIN32
  147: die horribly
  148: #endif
  149: 	],
  150: 	bwin32=true; AC_MSG_RESULT(yes),
  151: 	bwin32=false; AC_MSG_RESULT(no),
  152: )
  153: 
  154: AM_CONDITIONAL(BUILD_WIN32, test x$bwin32 = xtrue)
  155: 
  156: dnl Checks for typedefs, structures, and compiler characteristics.
  157: AC_C_CONST
  158: AC_C_INLINE
  159: AC_HEADER_TIME
  160: 
  161: dnl Checks for library functions.
  162: AC_CHECK_FUNCS(gettimeofday vasprintf fcntl clock_gettime strtok_r strsep getaddrinfo getnameinfo strlcpy inet_ntop signal sigaction strtoll issetugid geteuid getegid)
  163: 
  164: AC_CHECK_SIZEOF(long)
  165: 
  166: if test "x$ac_cv_func_clock_gettime" = "xyes"; then
  167:    AC_DEFINE(DNS_USE_CPU_CLOCK_FOR_ID, 1, [Define if clock_gettime is available in libc])
  168: else
  169:    AC_DEFINE(DNS_USE_GETTIMEOFDAY_FOR_ID, 1, [Define is no secure id variant is available])
  170: fi
  171: 
  172: AC_MSG_CHECKING(for F_SETFD in fcntl.h)
  173: AC_EGREP_CPP(yes,
  174: [
  175: #define _GNU_SOURCE
  176: #include <fcntl.h>
  177: #ifdef F_SETFD
  178: yes
  179: #endif
  180: ],	[ AC_DEFINE(HAVE_SETFD, 1,
  181: 	      [Define if F_SETFD is defined in <fcntl.h>])
  182: 	  AC_MSG_RESULT(yes) ], AC_MSG_RESULT(no))
  183: 
  184: needsignal=no
  185: haveselect=no
  186: AC_CHECK_FUNCS(select, [haveselect=yes], )
  187: if test "x$haveselect" = "xyes" ; then
  188: 	AC_LIBOBJ(select)
  189: 	needsignal=yes
  190: fi
  191: 
  192: havepoll=no
  193: AC_CHECK_FUNCS(poll, [havepoll=yes], )
  194: if test "x$havepoll" = "xyes" ; then
  195: 	AC_LIBOBJ(poll)
  196: 	needsignal=yes
  197: fi
  198: 
  199: haveepoll=no
  200: AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
  201: if test "x$haveepoll" = "xyes" ; then
  202: 	AC_DEFINE(HAVE_EPOLL, 1,
  203: 		[Define if your system supports the epoll system calls])
  204: 	AC_LIBOBJ(epoll)
  205: 	needsignal=yes
  206: fi
  207: 
  208: havedevpoll=no
  209: if test "x$ac_cv_header_sys_devpoll_h" = "xyes"; then
  210: 	AC_DEFINE(HAVE_DEVPOLL, 1,
  211: 		    [Define if /dev/poll is available])
  212:         AC_LIBOBJ(devpoll)
  213: fi
  214: 
  215: havekqueue=no
  216: if test "x$ac_cv_header_sys_event_h" = "xyes"; then
  217: 	AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
  218: 	if test "x$havekqueue" = "xyes" ; then
  219: 		AC_MSG_CHECKING(for working kqueue)
  220: 		AC_TRY_RUN(
  221: #include <sys/types.h>
  222: #include <sys/time.h>
  223: #include <sys/event.h>
  224: #include <stdio.h>
  225: #include <unistd.h>
  226: #include <fcntl.h>
  227: 
  228: int
  229: main(int argc, char **argv)
  230: {
  231: 	int kq;
  232: 	int n;
  233: 	int fd[[2]];
  234: 	struct kevent ev;
  235: 	struct timespec ts;
  236: 	char buf[[8000]];
  237: 
  238: 	if (pipe(fd) == -1)
  239: 		exit(1);
  240: 	if (fcntl(fd[[1]], F_SETFL, O_NONBLOCK) == -1)
  241: 		exit(1);
  242: 
  243: 	while ((n = write(fd[[1]], buf, sizeof(buf))) == sizeof(buf))
  244: 		;
  245: 
  246:         if ((kq = kqueue()) == -1)
  247: 		exit(1);
  248: 
  249: 	ev.ident = fd[[1]];
  250: 	ev.filter = EVFILT_WRITE;
  251: 	ev.flags = EV_ADD | EV_ENABLE;
  252: 	n = kevent(kq, &ev, 1, NULL, 0, NULL);
  253: 	if (n == -1)
  254: 		exit(1);
  255: 	
  256: 	read(fd[[0]], buf, sizeof(buf));
  257: 
  258: 	ts.tv_sec = 0;
  259: 	ts.tv_nsec = 0;
  260: 	n = kevent(kq, NULL, 0, &ev, 1, &ts);
  261: 	if (n == -1 || n == 0)
  262: 		exit(1);
  263: 
  264: 	exit(0);
  265: }, [AC_MSG_RESULT(yes)
  266:     AC_DEFINE(HAVE_WORKING_KQUEUE, 1,
  267: 		[Define if kqueue works correctly with pipes])
  268:     AC_LIBOBJ(kqueue)], AC_MSG_RESULT(no), AC_MSG_RESULT(no))
  269: 	fi
  270: fi
  271: 
  272: haveepollsyscall=no
  273: if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
  274: 	if test "x$haveepoll" = "xno" ; then
  275: 		AC_MSG_CHECKING(for epoll system call)
  276: 		AC_TRY_RUN(
  277: #include <stdint.h>
  278: #include <sys/param.h>
  279: #include <sys/types.h>
  280: #include <sys/syscall.h>
  281: #include <sys/epoll.h>
  282: #include <unistd.h>
  283: 
  284: int
  285: epoll_create(int size)
  286: {
  287: 	return (syscall(__NR_epoll_create, size));
  288: }
  289: 
  290: int
  291: main(int argc, char **argv)
  292: {
  293: 	int epfd;
  294: 
  295: 	epfd = epoll_create(256);
  296: 	exit (epfd == -1 ? 1 : 0);
  297: }, [AC_MSG_RESULT(yes)
  298:     AC_DEFINE(HAVE_EPOLL, 1,
  299: 	[Define if your system supports the epoll system calls])
  300:     needsignal=yes
  301:     AC_LIBOBJ(epoll_sub)
  302:     AC_LIBOBJ(epoll)], AC_MSG_RESULT(no), AC_MSG_RESULT(no))
  303: 	fi
  304: fi
  305: 
  306: haveeventports=no
  307: AC_CHECK_FUNCS(port_create, [haveeventports=yes], )
  308: if test "x$haveeventports" = "xyes" ; then
  309: 	AC_DEFINE(HAVE_EVENT_PORTS, 1,
  310: 		[Define if your system supports event ports])
  311: 	AC_LIBOBJ(evport)
  312: 	needsignal=yes
  313: fi
  314: if test "x$bwin32" = "xtrue"; then
  315: 	needsignal=yes
  316: fi
  317: if test "x$bwin32" = "xtrue"; then
  318: 	needsignal=yes
  319: fi
  320: if test "x$needsignal" = "xyes" ; then
  321: 	AC_LIBOBJ(signal)
  322: fi
  323: 
  324: AC_TYPE_PID_T
  325: AC_TYPE_SIZE_T
  326: AC_CHECK_TYPES([uint64_t, uint32_t, uint16_t, uint8_t], , ,
  327: [#ifdef HAVE_STDINT_H
  328: #include <stdint.h>
  329: #elif defined(HAVE_INTTYPES_H)
  330: #include <inttypes.h>
  331: #endif
  332: #ifdef HAVE_SYS_TYPES_H
  333: #include <sys/types.h>
  334: #endif])
  335: AC_CHECK_TYPES([fd_mask], , ,
  336: [#ifdef HAVE_SYS_TYPES_H
  337: #include <sys/types.h>
  338: #endif
  339: #ifdef HAVE_SELECT_H
  340: #include <select.h>
  341: #endif])
  342: 
  343: AC_CHECK_SIZEOF(long long)
  344: AC_CHECK_SIZEOF(int)
  345: AC_CHECK_SIZEOF(short)
  346: AC_CHECK_TYPES([struct in6_addr], , ,
  347: [#ifdef WIN32
  348: #include <winsock2.h>
  349: #else
  350: #include <sys/types.h>
  351: #include <netinet/in.h>
  352: #include <sys/socket.h>
  353: #endif
  354: #ifdef HAVE_NETINET_IN6_H
  355: #include <netinet/in6.h>
  356: #endif])
  357: 
  358: AC_MSG_CHECKING([for socklen_t])
  359: AC_TRY_COMPILE([
  360:  #include <sys/types.h>
  361:  #include <sys/socket.h>],
  362:   [socklen_t x;],
  363:   AC_MSG_RESULT([yes]),
  364:   [AC_MSG_RESULT([no])
  365:   AC_DEFINE(socklen_t, unsigned int,
  366: 	[Define to unsigned int if you dont have it])]
  367: )
  368: 
  369: AC_MSG_CHECKING([whether our compiler supports __func__])
  370: AC_TRY_COMPILE([],
  371:  [ const char *cp = __func__; ],
  372:  AC_MSG_RESULT([yes]),
  373:  AC_MSG_RESULT([no])
  374:  AC_MSG_CHECKING([whether our compiler supports __FUNCTION__])
  375:  AC_TRY_COMPILE([],
  376:    [ const char *cp = __FUNCTION__; ],
  377:    AC_MSG_RESULT([yes])
  378:    AC_DEFINE(__func__, __FUNCTION__,
  379:          [Define to appropriate substitue if compiler doesnt have __func__]),
  380:    AC_MSG_RESULT([no])
  381:    AC_DEFINE(__func__, __FILE__,
  382:          [Define to appropriate substitue if compiler doesnt have __func__])))
  383: 
  384: 
  385: # Add some more warnings which we use in development but not in the
  386: # released versions.  (Some relevant gcc versions can't handle these.)
  387: if test x$enable_gcc_warnings = xyes; then
  388: 
  389:   AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
  390: #if !defined(__GNUC__) || (__GNUC__ < 4)
  391: #error
  392: #endif]), have_gcc4=yes, have_gcc4=no)
  393: 
  394:   AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
  395: #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
  396: #error
  397: #endif]), have_gcc42=yes, have_gcc42=no)
  398: 
  399:   CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat=2 -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wbad-function-cast -Wswitch-enum -Werror"
  400:   CFLAGS="$CFLAGS -Wno-unused-parameter -Wno-sign-compare -Wstrict-aliasing"
  401: 
  402:   if test x$have_gcc4 = xyes ; then 
  403:     # These warnings break gcc 3.3.5 and work on gcc 4.0.2
  404:     CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement"
  405:     #CFLAGS="$CFLAGS -Wold-style-definition"
  406:   fi
  407: 
  408:   if test x$have_gcc42 = xyes ; then 
  409:     # These warnings break gcc 4.0.2 and work on gcc 4.2
  410:     CFLAGS="$CFLAGS -Waddress -Wnormalized=id -Woverride-init"
  411:   fi
  412: 
  413: ##This will break the world on some 64-bit architectures
  414: # CFLAGS="$CFLAGS -Winline"
  415: 
  416: fi
  417: 
  418: AC_OUTPUT(Makefile test/Makefile sample/Makefile)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>