Call this pre3.
[rsync/rsync.git] / configure.in
index d5c626d..1a5e74c 100644 (file)
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(byteorder.h)
+
+AC_INIT()
+AC_CONFIG_SRCDIR([byteorder.h])
 AC_CONFIG_HEADER(config.h)
-AC_PREREQ(2.12)
+AC_PREREQ(2.52)
 
 LDFLAGS=${LDFLAGS-""}
 
-AC_CANONICAL_SYSTEM
-AC_VALIDATE_CACHE_SYSTEM_TYPE
+AC_CANONICAL_TARGET([])
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_SUBST(SHELL)
+
+RSYNC_VERSION=2.4.7pre3
+AC_SUBST(RSYNC_VERSION)
+AC_DEFINE_UNQUOTED(RSYNC_VERSION, ["$RSYNC_VERSION"], [rsync release version])
 
 # compile with optimisation and without debugging by default, unless
 # --debug is given.  We must decide this before testing the compiler.
 
+AC_MSG_CHECKING([whether to include debugging symbols])
 AC_ARG_ENABLE(debug,
-        [  --enable-debug          including debugging symbols and features])
+       AC_HELP_STRING([--enable-debug],
+               [including debugging symbols and features (default yes)]),
+               [], [])
 
-AC_MSG_CHECKING([whether to include debugging symbols])
-if test x"$enable_debug" = x"yes"
+if test x"$enable_debug" = x"no"
 then
-    AC_MSG_RESULT(yes)
-    # leave CFLAGS alone; AC_PROG_CC will try to include -g if it can
-    AC_DEFINE(DEBUG, 1, [Define to turn on debugging code that may slow normal operation])
-    CFLAGS=${CFLAGS-"-g"}
-else
     AC_MSG_RESULT(no)
     CFLAGS=${CFLAGS-"-O"}
+else
+    AC_MSG_RESULT([yes])
+    # leave CFLAGS alone; AC_PROG_CC will try to include -g if it can
+    AC_DEFINE(DEBUG, 1, [Define to turn on debugging code that may slow normal operation])
+    dnl CFLAGS=${CFLAGS-"-g"}
 fi
 
 CFLAGS="$CFLAGS -DHAVE_CONFIG_H"
 
-# look for getconf early as this affects just about everything
-AC_CHECK_PROG(HAVE_GETCONF, getconf, "yes", "no")
-if test $HAVE_GETCONF = "yes"; then
-       CFLAGS=$CFLAGS" "`getconf LFS_CFLAGS 2> /dev/null`
-       LDFLAGS=$LDFLAGS" "`getconf LFS_LDFLAGS 2> /dev/null`
-fi
-
 AC_ARG_WITH(included-popt,
         [  --with-included-popt    use bundled popt library, not from system])
 
 AC_ARG_WITH(rsync-path,
        [  --with-rsync-path=PATH  set default --rsync-path to PATH (default: \"rsync\")],
-       [ RSYNC_PATH="$with_rsync_name" ],
+       [ RSYNC_PATH="$with_rsync_path" ],
        [ RSYNC_PATH="rsync" ])
 AC_DEFINE_UNQUOTED(RSYNC_PATH, "$RSYNC_PATH", [ ])
 
-dnl Checks for programs.
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_SUBST(SHELL)
-
 AC_CHECK_PROG(HAVE_REMSH, remsh, 1, 0)
 AC_DEFINE_UNQUOTED(HAVE_REMSH, $HAVE_REMSH, [ ])
 
-AC_SYS_LARGEFILE
+
+# arrgh. libc in the current debian stable screws up the largefile
+# stuff, getting byte range locking wrong
+AC_CACHE_CHECK([for broken largefile support],rsync_cv_HAVE_BROKEN_LARGEFILE,[
+AC_TRY_RUN([
+#define _FILE_OFFSET_BITS 64
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+int main(void) 
+{
+       struct flock lock;
+        int status;
+       int fd = open("conftest.dat", O_CREAT|O_RDWR, 0600);
+       lock.l_type = F_WRLCK;
+       lock.l_whence = SEEK_SET;
+       lock.l_start = 0;
+       lock.l_len = 1;
+       lock.l_pid = 0;
+       
+       fcntl(fd,F_SETLK,&lock);
+       if (fork() == 0) {
+               lock.l_start = 1;               
+               exit(fcntl(fd,F_SETLK,&lock) == 0);
+        }
+        wait(&status);
+       unlink("conftest.dat");
+       exit(WEXITSTATUS(status));
+}
+],
+rsync_cv_HAVE_BROKEN_LARGEFILE=yes,rsync_cv_HAVE_BROKEN_LARGEFILE=no,rsync_cv_HAVE_BROKEN_LARGEFILE=cross)])
+if test x"$rsync_cv_HAVE_BROKEN_LARGEFILE" != x"yes"; then
+   AC_SYS_LARGEFILE
+fi
+
+
+
+AC_DEFINE(ss_family, __ss_family, [KAME hack])
+AC_DEFINE(ss_len, __ss_len, [KAME hack])
+
+CFLAGS="$CFLAGS"
+AC_ARG_ENABLE(ipv6,
+       AC_HELP_STRING([--enable-ipv6], [try to support IPv6]))
+AC_MSG_CHECKING([whether IPv6 is requested])
+if test "$xenable_ipv6" = xyes
+then
+       AC_MSG_RESULT(yes)
+       ipv6=yes
+else
+       AC_MSG_RESULT(no)
+       ipv6=no
+fi
+
+ipv6type=unknown
+ipv6lib=none
+ipv6trylibc=no
+
+if test "$ipv6" = "yes"; then
+       AC_MSG_CHECKING([ipv6 stack type])
+       for i in inria kame linux-glibc linux-inet6 toshiba v6d zeta; do
+               case $i in
+               inria)
+                       # http://www.kame.net/
+                       AC_EGREP_CPP(yes, [
+#include <netinet/in.h>
+#ifdef IPV6_INRIA_VERSION
+yes
+#endif],
+                               [ipv6type=$i;
+                               AC_DEFINE(INET6, 1, [true if you have IPv6])
+                               ])
+                       ;;
+               kame)
+                       # http://www.kame.net/
+                       AC_EGREP_CPP(yes, [
+#include <netinet/in.h>
+#ifdef __KAME__
+yes
+#endif],
+                               [ipv6type=$i; 
+                               AC_DEFINE(INET6, 1, [true if you have IPv6])])
+                       ;;
+               linux-glibc)
+                       # http://www.v6.linux.or.jp/
+                       AC_EGREP_CPP(yes, [
+#include <features.h>
+#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+yes
+#endif],
+                               [ipv6type=$i;
+AC_DEFINE(INET6, 1, [true if you have IPv6])])
+                       ;;
+               linux-inet6)
+                       # http://www.v6.linux.or.jp/
+                       if test -d /usr/inet6 -o -f /usr/inet6/lib/libinet6.a; then
+                               ipv6type=$i
+                               ipv6lib=inet6
+                               ipv6libdir=/usr/inet6/lib
+                               ipv6trylibc=yes;
+                               AC_DEFINE(INET6, 1, [true if you have IPv6])
+                               CFLAGS="-I/usr/inet6/include $CFLAGS"
+                       fi
+                       ;;
+               toshiba)
+                       AC_EGREP_CPP(yes, [
+#include <sys/param.h>
+#ifdef _TOSHIBA_INET6
+yes
+#endif],
+                               [ipv6type=$i;
+                               ipv6lib=inet6;
+                               ipv6libdir=/usr/local/v6/lib;
+                               AC_DEFINE(INET6, 1, [true if you have IPv6])])
+                       ;;
+               v6d)
+                       AC_EGREP_CPP(yes, [
+#include </usr/local/v6/include/sys/v6config.h>
+#ifdef __V6D__
+yes
+#endif],
+                               [ipv6type=$i;
+                               ipv6lib=v6;
+                               ipv6libdir=/usr/local/v6/lib;
+                               AC_DEFINE(INET6, 1, [true if you have IPv6])])
+                       ;;
+               zeta)
+                       AC_EGREP_CPP(yes, [
+#include <sys/param.h>
+#ifdef _ZETA_MINAMI_INET6
+yes
+#endif],
+                               [ipv6type=$i;
+                               ipv6lib=inet6;
+                               ipv6libdir=/usr/local/v6/lib;
+                               AC_DEFINE(INET6, 1, [true if you have IPv6])])
+                       ;;
+               esac
+               if test "$ipv6type" != "unknown"; then
+                       break
+               fi
+       done
+       AC_MSG_RESULT($ipv6type)
+fi
+
+if test "$ipv6" = "yes" -a -f /usr/local/v6/lib/libinet6.a; then
+       ac_inet6_LDFLAGS="inet6"
+       ipv6libdir=/usr/local/v6/lib
+       LDFLAGS="$LDFLAGS -L/usr/local/v6/lib"
+       AC_CHECK_LIB(inet6, getaddrinfo, , ipv6lib="$ac_inet6_LDFLAGS")
+fi
+
+if test "$ipv6" = "yes" -a -f /usr/lib/libinet6.a; then
+       ac_inet6_LDFLAGS="inet6"
+       AC_CHECK_LIB(inet6, getaddrinfo, , ipv6lib="$ac_inet6_LDFLAGS")
+fi
+
+if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
+       if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
+               LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
+               echo "You have $ipv6lib library, using it"
+       else
+               if test "$ipv6trylibc" = "yes"; then
+                       echo "You do not have $ipv6lib library, using libc"
+               else
+                       echo 'Fatal: no $ipv6lib library found.  cannot continue.'
+                       echo "You need to fetch lib$ipv6lib.a from appropriate"
+                       echo 'ipv6 kit and compile beforehand.'
+                       exit 1
+               fi
+       fi
+fi
+
+
+AC_MSG_CHECKING(getaddrinfo bug)
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <netdb.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+main()
+{
+  int passive, gaierr, inet4 = 0, inet6 = 0;
+  struct addrinfo hints, *ai, *aitop;
+  char straddr[INET6_ADDRSTRLEN], strport[16];
+
+  for (passive = 0; passive <= 1; passive++) {
+    memset(&hints, 0, sizeof(hints));
+    hints.ai_family = AF_UNSPEC;
+    hints.ai_flags = passive ? AI_PASSIVE : 0;
+    hints.ai_socktype = SOCK_STREAM;
+    if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
+      (void)gai_strerror(gaierr);
+      goto bad;
+    }
+    for (ai = aitop; ai; ai = ai->ai_next) {
+      if (ai->ai_addr == NULL ||
+          ai->ai_addrlen == 0 ||
+          getnameinfo(ai->ai_addr, ai->ai_addrlen,
+                      straddr, sizeof(straddr), strport, sizeof(strport),
+                      NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
+        goto bad;
+      }
+      switch (ai->ai_family) {
+      case AF_INET:
+        if (strcmp(strport, "54321") != 0) {
+          goto bad;
+        }
+        if (passive) {
+          if (strcmp(straddr, "0.0.0.0") != 0) {
+            goto bad;
+          }
+        } else {
+          if (strcmp(straddr, "127.0.0.1") != 0) {
+            goto bad;
+          }
+        }
+        inet4++;
+        break;
+      case AF_INET6:
+        if (strcmp(strport, "54321") != 0) {
+          goto bad;
+        }
+        if (passive) {
+          if (strcmp(straddr, "::") != 0) {
+            goto bad;
+          }
+        } else {
+          if (strcmp(straddr, "::1") != 0) {
+            goto bad;
+          }
+        }
+        inet6++;
+        break;
+      case AF_UNSPEC:
+        goto bad;
+        break;
+      default:
+        /* another family support? */
+        break;
+      }
+    }
+  }
+
+  if (!(inet4 == 0 || inet4 == 2))
+    goto bad;
+  if (!(inet6 == 0 || inet6 == 2))
+    goto bad;
+
+  if (aitop)
+    freeaddrinfo(aitop);
+  exit(0);
+
+ bad:
+  if (aitop)
+    freeaddrinfo(aitop);
+  exit(1);
+}
+],
+AC_MSG_RESULT(good)
+buggygetaddrinfo=no,
+AC_MSG_RESULT(buggy)
+buggygetaddrinfo=yes,
+AC_MSG_RESULT(buggy)
+buggygetaddrinfo=yes)
+
+if test "$buggygetaddrinfo" = "yes"; then
+       if test "$ipv6" = "yes" -a "$ipv6type" != "linux"; then
+               echo 'Fatal: You must get working getaddrinfo() function.'
+               echo '       or you can specify "--disable-ipv6"'.
+               exit 1
+       elif test "$ipv6type" = "linux"; then
+               echo 'Warning: getaddrinfo() implementation on your system seems be buggy.'
+               echo '         Better upgreade your system library to newest version'
+               echo '         of GNU C library (aka glibc).'
+       fi
+fi
+AC_REPLACE_FUNCS(getaddrinfo getnameinfo)
+
+AC_CHECK_MEMBER([struct sockaddr.sa_len], 
+               [ AC_DEFINE(HAVE_SOCKADDR_LEN) ],
+               [],
+               [
+#include <sys/types.h>
+#include <sys/socket.h>
+])
+
 AC_C_BIGENDIAN
 AC_HEADER_DIRENT
 AC_HEADER_TIME
@@ -75,7 +365,8 @@ AC_TYPE_OFF_T
 AC_TYPE_SIZE_T
 AC_TYPE_PID_T
 AC_TYPE_GETGROUPS
-AC_STRUCT_ST_RDEV
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+
 AC_CHECK_TYPE([ino_t], [unsigned])
 TYPE_SOCKLEN_T
 
@@ -347,4 +638,5 @@ AC_SUBST(OBJ_RESTORE)
 AC_SUBST(CC_SHOBJ_FLAG)
 AC_SUBST(BUILD_POPT)
 
-AC_OUTPUT(Makefile lib/dummy zlib/dummy)
+AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig])
+AC_OUTPUT