]> arthur.barton.de Git - netatalk.git/blobdiff - libevent/configure.in
Writing metadata xattr on directories with sticky bit set, FR#94
[netatalk.git] / libevent / configure.in
index 7b8f2af6461cc2efa3cf88dd495abcf6aa1dcc05..285637b8d1ae5c0f02a9a40e4e26b41951600aa7 100644 (file)
@@ -1,21 +1,42 @@
 dnl configure.in for libevent
-dnl Dug Song <dugsong@monkey.org>
+dnl Copyright 2000-2007 Niels Provos
+dnl Copyright 2007-2012 Niels Provos and Nick Mathewson
+dnl
+dnl See LICENSE for copying information.
+dnl
+dnl Original version Dug Song <dugsong@monkey.org>
+
 AC_PREREQ(2.59c)
 AC_INIT(event.c)
 
 AC_CONFIG_MACRO_DIR([m4])
 
-AM_INIT_AUTOMAKE(libevent,2.0.10-stable)
+AM_INIT_AUTOMAKE(libevent,2.0.18-stable)
+dnl Enable silent Automake rules if present                                                                           
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
 AM_CONFIG_HEADER(config.h)
-AC_DEFINE(NUMERIC_VERSION, 0x02000a00, [Numeric representation of the version])
+AC_DEFINE(NUMERIC_VERSION, 0x02001200, [Numeric representation of the version])
 
 dnl Initialize prefix.
 if test "$prefix" = "NONE"; then
    prefix="/usr/local"
 fi
 
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+dnl the 'build' machine is where we run configure and compile
+dnl the 'host' machine is where the resulting stuff runs.
+
+case "$host_os" in
+
+ osf5*)
+    CFLAGS="$CFLAGS -D_OSF_SOURCE"
+    ;;
+esac
+
 dnl Checks for programs.
 AC_PROG_CC
+AM_PROG_CC_C_O
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_MKDIR_P
@@ -30,6 +51,15 @@ if test "$GCC" = "yes" ; then
        CFLAGS="$CFLAGS -fno-strict-aliasing"
 fi
 
+# OS X Lion started deprecating the system openssl. Let's just disable
+# all deprecation warnings on OS X.
+case "$host_os" in
+
+ darwin*)
+    CFLAGS="$CFLAGS -Wno-deprecated-declarations"
+    ;;
+esac
+
 AC_ARG_ENABLE(gcc-warnings,
      AS_HELP_STRING(--enable-gcc-warnings, enable verbose warnings with GCC))
 AC_ARG_ENABLE(thread-support,
@@ -44,6 +74,16 @@ AC_ARG_ENABLE(openssl,
 AC_ARG_ENABLE(debug-mode,
      AS_HELP_STRING(--disable-debug-mode, disable support for running in debug mode),
         [], [enable_debug_mode=yes])
+AC_ARG_ENABLE([libevent-install],
+     AS_HELP_STRING([--disable-libevent-install, disable installation of libevent]),
+       [], [enable_libevent_install=yes])
+AC_ARG_ENABLE([libevent-regress],
+     AS_HELP_STRING([--disable-libevent-regress, skip regress in make check]),
+       [], [enable_libevent_regress=yes])
+AC_ARG_ENABLE([function-sections],
+     AS_HELP_STRING([--enable-function-sections, make static library allow smaller binaries with --gc-sections]),
+       [], [enable_function_sections=no])
+
 
 AC_PROG_LIBTOOL
 
@@ -53,6 +93,8 @@ dnl   the command line with --enable-shared and --disable-shared.
 dnl AC_DISABLE_SHARED
 AC_SUBST(LIBTOOL_DEPS)
 
+AM_CONDITIONAL([BUILD_REGRESS], [test "$enable_libevent_regress" = "yes"])
+
 dnl Checks for libraries.
 AC_SEARCH_LIBS([inet_ntoa], [nsl])
 AC_SEARCH_LIBS([socket], [socket])
@@ -60,6 +102,35 @@ AC_SEARCH_LIBS([inet_aton], [resolv])
 AC_SEARCH_LIBS([clock_gettime], [rt])
 AC_SEARCH_LIBS([sendfile], [sendfile])
 
+dnl - check if the macro WIN32 is defined on this compiler.
+dnl - (this is how we check for a windows version of GCC)
+AC_MSG_CHECKING(for WIN32)
+AC_TRY_COMPILE(,
+       [
+#ifndef WIN32
+die horribly
+#endif
+       ],
+       bwin32=true; AC_MSG_RESULT(yes),
+       bwin32=false; AC_MSG_RESULT(no),
+)
+
+dnl - check if the macro __CYGWIN__ is defined on this compiler.
+dnl - (this is how we check for a cygwin version of GCC)
+AC_MSG_CHECKING(for CYGWIN)
+AC_TRY_COMPILE(,
+       [
+#ifndef __CYGWIN__
+die horribly
+#endif
+       ],
+       cygwin=true; AC_MSG_RESULT(yes),
+       cygwin=false; AC_MSG_RESULT(no),
+)
+
+AC_CHECK_HEADERS([zlib.h])
+
+if test "x$ac_cv_header_zlib_h" = "xyes"; then
 dnl Determine if we have zlib for regression tests
 dnl Don't put this one in LIBS
 save_LIBS="$LIBS"
@@ -72,25 +143,41 @@ AC_SEARCH_LIBS([inflateEnd], [z],
        AC_DEFINE(HAVE_LIBZ, 1, [Define if the system has zlib])])
 LIBS="$save_LIBS"
 AC_SUBST(ZLIB_LIBS)
+fi
 AM_CONDITIONAL(ZLIB_REGRESS, [test "$have_zlib" = "yes"])
 
 dnl See if we have openssl.  This doesn't go in LIBS either.
+if test "$bwin32" = true; then
+  EV_LIB_WS32=-lws2_32
+  EV_LIB_GDI=-lgdi32
+else
+  EV_LIB_WS32=
+  EV_LIB_GDI=
+fi
+AC_SUBST(EV_LIB_WS32)
+AC_SUBST(EV_LIB_GDI)
+AC_SUBST(OPENSSL_LIBADD)
+
+AC_CHECK_HEADERS([openssl/bio.h])
+
 if test "$enable_openssl" = "yes"; then
 save_LIBS="$LIBS"
 LIBS=""
 OPENSSL_LIBS=""
 have_openssl=no
 AC_SEARCH_LIBS([SSL_new], [ssl],
-               [have_openssl=yes
-               OPENSSL_LIBS="$LIBS"
-               AC_DEFINE(HAVE_OPENSSL, 1, [Define if the system has openssl])])
+       [have_openssl=yes
+       OPENSSL_LIBS="$LIBS -lcrypto $EV_LIB_GDI $EV_LIB_WS32 $OPENSSL_LIBADD"
+       AC_DEFINE(HAVE_OPENSSL, 1, [Define if the system has openssl])],
+       [have_openssl=no],
+       [-lcrypto $EV_LIB_GDI $EV_LIB_WS32 $OPENSSL_LIBADD])
 LIBS="$save_LIBS"
 AC_SUBST(OPENSSL_LIBS)
 fi
 
 dnl Checks for header files.
 AC_HEADER_STDC
-AC_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)
+AC_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])
 AC_CHECK_HEADERS(sys/sysctl.h, [], [], [
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
@@ -174,20 +261,9 @@ if test "x$ac_cv_header_sys_sysctl_h" = "xyes"; then
        )
 fi
 
-dnl - check if the macro WIN32 is defined on this compiler.
-dnl - (this is how we check for a windows version of GCC)
-AC_MSG_CHECKING(for WIN32)
-AC_TRY_COMPILE(,
-       [
-#ifndef WIN32
-die horribly
-#endif
-       ],
-       bwin32=true; AC_MSG_RESULT(yes),
-       bwin32=false; AC_MSG_RESULT(no),
-)
-
 AM_CONDITIONAL(BUILD_WIN32, test x$bwin32 = xtrue)
+AM_CONDITIONAL(BUILD_CYGWIN, test x$cygwin = xtrue)
+AM_CONDITIONAL(BUILD_WITH_NO_UNDEFINED, test x$bwin32 = xtrue || test x$cygwin = xtrue)
 
 if test x$bwin32 = xtrue; then
    AC_SEARCH_LIBS([getservbyname],[ws2_32])
@@ -199,8 +275,32 @@ AC_C_INLINE
 AC_HEADER_TIME
 
 dnl Checks for library functions.
-AC_CHECK_FUNCS(gettimeofday vasprintf fcntl clock_gettime strtok_r strsep getaddrinfo getnameinfo strlcpy inet_ntop inet_pton signal sigaction strtoll inet_aton pipe eventfd sendfile mmap splice arc4random arc4random_buf issetugid geteuid getegid getservbyname getprotobynumber setenv unsetenv putenv)
+AC_CHECK_FUNCS([gettimeofday vasprintf fcntl clock_gettime strtok_r strsep])
+AC_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])
+
+AC_CACHE_CHECK(
+    [for getaddrinfo],
+    [libevent_cv_getaddrinfo],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+           [[
+               #ifdef HAVE_NETDB_H
+               #include <netdb.h>
+               #endif
+           ]],
+           [[
+               getaddrinfo;
+           ]]
+       )],
+       [libevent_cv_getaddrinfo=yes],
+       [libevent_cv_getaddrinfo=no]
+    )]
+)
+if test "$libevent_cv_getaddrinfo" = "yes" ; then
+    AC_DEFINE([HAVE_GETADDRINFO], [1], [Do we have getaddrinfo()?])
+else
 
+AC_CHECK_FUNCS([getservbyname])
 # Check for gethostbyname_r in all its glorious incompatible versions.
 #   (This is cut-and-pasted from Tor, which based its logic on
 #   Python's configure.in.)
@@ -211,14 +311,14 @@ AC_CHECK_FUNC(gethostbyname_r, [
   AC_MSG_CHECKING([how many arguments gethostbyname_r() wants])
   OLD_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS"
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <netdb.h>
   ], [[
     char *cp1, *cp2;
     struct hostent *h1, *h2;
     int i1, i2;
     (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2);
-  ]]),[
+  ]])],[
     AC_DEFINE(HAVE_GETHOSTBYNAME_R)
     AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1,
      [Define this if gethostbyname_r takes 6 arguments])
@@ -257,6 +357,7 @@ AC_CHECK_FUNC(gethostbyname_r, [
  CFLAGS=$OLD_CFLAGS
 ])
 
+fi
 
 AC_CHECK_SIZEOF(long)
 
@@ -443,7 +544,7 @@ AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(size_t)
 AC_CHECK_SIZEOF(void *)
 
-AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t, struct addrinfo], , ,
+AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t, struct addrinfo, struct sockaddr_storage], , ,
 [#define _GNU_SOURCE
 #include <sys/types.h>
 #ifdef HAVE_NETINET_IN_H
@@ -559,22 +660,27 @@ AM_CONDITIONAL(OPENSSL, [test "$enable_openssl" != "no" && test "$have_openssl"
 
 # Add some more warnings which we use in development but not in the
 # released versions.  (Some relevant gcc versions can't handle these.)
-if test x$enable_gcc_warnings = xyes; then
+if test x$enable_gcc_warnings = xyes && test "$GCC" = "yes"; then
 
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 #if !defined(__GNUC__) || (__GNUC__ < 4)
 #error
-#endif]), have_gcc4=yes, have_gcc4=no)
+#endif])], have_gcc4=yes, have_gcc4=no)
 
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
 #error
-#endif]), have_gcc42=yes, have_gcc42=no)
+#endif])], have_gcc42=yes, have_gcc42=no)
 
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
 #error
-#endif]), have_gcc45=yes, have_gcc45=no)
+#endif])], have_gcc45=yes, have_gcc45=no)
+
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
+#if !defined(__clang__)
+#error
+#endif])], have_clang=yes, have_clang=no)
 
   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"
   CFLAGS="$CFLAGS -Wno-unused-parameter -Wstrict-aliasing"
@@ -587,17 +693,104 @@ if test x$enable_gcc_warnings = xyes; then
 
   if test x$have_gcc42 = xyes ; then
     # These warnings break gcc 4.0.2 and work on gcc 4.2
-    CFLAGS="$CFLAGS -Waddress -Wnormalized=id -Woverride-init"
+    CFLAGS="$CFLAGS -Waddress"
+  fi
+
+  if test x$have_gcc42 = xyes && test x$have_clang = xno; then
+    # These warnings break gcc 4.0.2 and clang, but work on gcc 4.2
+    CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init"
   fi
 
   if test x$have_gcc45 = xyes ; then
     # These warnings work on gcc 4.5
     CFLAGS="$CFLAGS -Wlogical-op"
   fi
+
+  if test x$have_clang = xyes; then
+    # Disable the unused-function warnings, because these trigger
+    # for minheap-internal.h related code.
+    CFLAGS="$CFLAGS -Wno-unused-function"
+  fi
+
 ##This will break the world on some 64-bit architectures
 # CFLAGS="$CFLAGS -Winline"
 
 fi
 
+LIBEVENT_GC_SECTIONS=
+if test "$GCC" = yes && test "$enable_function_sections" = yes ; then
+    AC_CACHE_CHECK(
+       [if linker supports omitting unused code and data],
+       [libevent_cv_gc_sections_runs],
+       [
+           dnl  NetBSD will link but likely not run with --gc-sections
+           dnl  http://bugs.ntp.org/1844
+           dnl  http://gnats.netbsd.org/40401
+           dnl  --gc-sections causes attempt to load as linux elf, with
+           dnl  wrong syscalls in place.  Test a little gauntlet of
+           dnl  simple stdio read code checking for errors, expecting
+           dnl  enough syscall differences that the NetBSD code will
+           dnl  fail even with Linux emulation working as designed.
+           dnl  A shorter test could be refined by someone with access
+           dnl  to a NetBSD host with Linux emulation working.
+           origCFLAGS="$CFLAGS"
+           CFLAGS="$CFLAGS -Wl,--gc-sections"
+           AC_LINK_IFELSE(
+               [AC_LANG_PROGRAM(
+                   [[
+                       #include <stdlib.h>
+                       #include <stdio.h>
+                   ]],
+                   [[
+                       FILE *  fpC;
+                       char    buf[32];
+                       size_t  cch;
+                       int     read_success_once;
+
+                       fpC = fopen("conftest.c", "r");
+                       if (NULL == fpC)
+                               exit(1);
+                       do {
+                               cch = fread(buf, sizeof(buf), 1, fpC);
+                               read_success_once |= (0 != cch);
+                       } while (0 != cch);
+                       if (!read_success_once)
+                               exit(2);
+                       if (!feof(fpC))
+                               exit(3);
+                       if (0 != fclose(fpC))
+                               exit(4);
+
+                       exit(EXIT_SUCCESS);
+                   ]]
+               )],
+               [
+                    dnl We have to do this invocation manually so that we can
+                    dnl get the output of conftest.err to make sure it doesn't
+                    dnl mention gc-sections.
+                   if test "X$cross_compiling" = "Xyes" || grep gc-sections conftest.err ; then
+                       libevent_cv_gc_sections_runs=no
+                   else
+                       libevent_cv_gc_sections_runs=no
+                       ./conftest >/dev/null 2>&1 && libevent_cv_gc_sections_runs=yes
+                   fi
+               ],
+               [libevent_cv_gc_sections_runs=no]
+           )
+           CFLAGS="$origCFLAGS"
+           AS_UNSET([origCFLAGS])
+       ]
+    )
+    case "$libevent_cv_gc_sections_runs" in
+     yes)
+       CFLAGS="-ffunction-sections -fdata-sections $CFLAGS"
+       LIBEVENT_GC_SECTIONS="-Wl,--gc-sections"
+       ;;
+    esac
+fi
+AC_SUBST([LIBEVENT_GC_SECTIONS])
+
+AM_CONDITIONAL([INSTALL_LIBEVENT], [test "$enable_libevent_install" = "yes"])
+
 AC_CONFIG_FILES( [libevent.pc libevent_openssl.pc libevent_pthreads.pc] )
 AC_OUTPUT(Makefile include/Makefile test/Makefile sample/Makefile)