Preparing for release of 3.0.3pre2
[rsync/rsync.git] / configure.in
index 890a76b..cad85bd 100644 (file)
@@ -5,7 +5,7 @@ AC_CONFIG_SRCDIR([byteorder.h])
 AC_CONFIG_HEADER(config.h)
 AC_PREREQ(2.59)
 
-RSYNC_VERSION=3.0.0cvs
+RSYNC_VERSION=3.0.3pre2
 AC_SUBST(RSYNC_VERSION)
 AC_MSG_NOTICE([Configuring rsync $RSYNC_VERSION])
 
@@ -38,7 +38,7 @@ fi
 AC_MSG_CHECKING([whether to include debugging symbols])
 AC_ARG_ENABLE(debug,
        AC_HELP_STRING([--disable-debug],
-               [turn off debugging symbols and features]))
+               [disable debugging symbols and features]))
 
 if test x"$enable_debug" = x"no"; then
     AC_MSG_RESULT(no)
@@ -123,6 +123,11 @@ else
 fi
 AC_DEFINE_UNQUOTED(RSYNC_RSH, "$RSYNC_RSH", [default -e command])
 
+AC_CHECK_PROG(HAVE_YODL2MAN, yodl2man, 1, 0)
+if test x$HAVE_YODL2MAN = x1; then
+    MAKE_MAN=man
+fi
+
 AC_ARG_WITH(nobody-group,
     AC_HELP_STRING([--with-nobody-group=GROUP],
                   [set the default unprivileged group (default nobody or nogroup)]),
@@ -283,7 +288,7 @@ fi
 dnl Do you want to disable use of locale functions
 AC_ARG_ENABLE([locale],
        AC_HELP_STRING([--disable-locale],
-               [turn off locale features]))
+               [disable locale features]))
 AH_TEMPLATE([CONFIG_LOCALE],
 [Undefine if you don't want locale features.  By default this is defined.])
 if test x"$enable_locale" != x"no"; then
@@ -306,8 +311,10 @@ AC_HEADER_SYS_WAIT
 AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
     unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \
     sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \
-    sys/un.h glob.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
-    netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h)
+    sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
+    netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \
+    sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h \
+    popt.h popt/popt.h)
 AC_HEADER_MAJOR
 
 AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[
@@ -346,16 +353,14 @@ AC_CHECK_SIZEOF(uint32_t)
 AC_CHECK_SIZEOF(int64_t)
 AC_CHECK_SIZEOF(off_t)
 AC_CHECK_SIZEOF(off64_t)
+AC_CHECK_SIZEOF(time_t)
 
 AC_C_INLINE
 AC_C_LONG_DOUBLE
 
 AC_TYPE_SIGNAL
 AC_TYPE_UID_T
-AC_TYPE_MODE_T
-AC_TYPE_OFF_T
-AC_TYPE_SIZE_T
-AC_TYPE_PID_T
+AC_CHECK_TYPES([mode_t,off_t,size_t,pid_t,id_t])
 AC_TYPE_GETGROUPS
 AC_CHECK_MEMBERS([struct stat.st_rdev])
 
@@ -437,6 +442,10 @@ dnl AC_MSG_NOTICE([Looking in libraries: $LIBS])
 AC_CHECK_FUNCS(inet_ntop, , [AC_LIBOBJ(lib/inet_ntop)])
 AC_CHECK_FUNCS(inet_pton, , [AC_LIBOBJ(lib/inet_pton)])
 
+AC_HAVE_TYPE([struct addrinfo], [#include <netdb.h>])
+AC_HAVE_TYPE([struct sockaddr_storage], [#include <sys/types.h>
+#include <sys/socket.h>])
+
 # Irix 6.5 has getaddrinfo but not the corresponding defines, so use
 #   builtin getaddrinfo if one of the defines don't exist
 AC_CACHE_CHECK([whether defines needed by getaddrinfo exist],
@@ -450,7 +459,7 @@ AC_CACHE_CHECK([whether defines needed by getaddrinfo exist],
                        #endif],
                        rsync_cv_HAVE_GETADDR_DEFINES=yes,
                        rsync_cv_HAVE_GETADDR_DEFINES=no)])
-if test x"$rsync_cv_HAVE_GETADDR_DEFINES" = x"yes"; then
+if test x"$rsync_cv_HAVE_GETADDR_DEFINES" = x"yes" -a x"$ac_cv_type_struct_addrinfo" = x"yes"; then
        # Tru64 UNIX has getaddrinfo() but has it renamed in libc as
        # something else so we must include <netdb.h> to get the
        # redefinition.
@@ -461,13 +470,11 @@ if test x"$rsync_cv_HAVE_GETADDR_DEFINES" = x"yes"; then
                #include <netdb.h>],[getaddrinfo(NULL, NULL, NULL, NULL);],
                        [AC_MSG_RESULT([yes])
                        AC_DEFINE(HAVE_GETADDRINFO, 1,
-                               [Define to 1 if you have the "getaddrinfo" function.])],
+                               [Define to 1 if you have the "getaddrinfo" function and required types.])],
                        [AC_MSG_RESULT([no])
                        AC_LIBOBJ(lib/getaddrinfo)])])
-       AC_CHECK_FUNCS(getnameinfo, , [AC_LIBOBJ(lib/getnameinfo)])
 else
        AC_LIBOBJ(lib/getaddrinfo)
-       AC_LIBOBJ(lib/getnameinfo)
 fi
 
 AC_CHECK_MEMBER([struct sockaddr.sa_len],
@@ -496,15 +503,6 @@ AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
 #include <netinet/in.h>
 ])
 
-AC_MSG_CHECKING(struct sockaddr_storage)
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/socket.h>],
-[struct sockaddr_storage x;],
-       AC_MSG_RESULT(yes)
-       AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1,
-               [Define to 1 if you have struct sockaddr_storage.] ),
-       AC_MSG_RESULT(no))
-
 AC_CHECK_MEMBER([struct sockaddr_in6.sin6_scope_id],
                [ AC_DEFINE(HAVE_SOCKADDR_IN6_SCOPE_ID, 1, [Do we have sockaddr_in6.sin6_scope_id?]) ],
                [],
@@ -514,8 +512,7 @@ AC_CHECK_MEMBER([struct sockaddr_in6.sin6_scope_id],
 #include <netinet/in.h>
 ])
 
-AC_MSG_CHECKING(struct stat64)
-AC_TRY_COMPILE([#include <stdio.h>
+AC_HAVE_TYPE([struct stat64], [#include <stdio.h>
 #if HAVE_SYS_TYPES_H
 # include <sys/types.h>
 #endif
@@ -530,10 +527,7 @@ AC_TRY_COMPILE([#include <stdio.h>
 #  include <stdlib.h>
 # endif
 #endif
-],[struct stat64 st;],
-    AC_MSG_RESULT(yes)
-       AC_DEFINE(HAVE_STRUCT_STAT64,1,[Define to 1 if you have struct stat64.]),
-    AC_MSG_RESULT(no))
+])
 
 # if we can't find strcasecmp, look in -lresolv (for Unixware at least)
 #
@@ -542,6 +536,11 @@ if test x"$ac_cv_func_strcasecmp" = x"no"; then
     AC_CHECK_LIB(resolv, strcasecmp)
 fi
 
+AC_CHECK_FUNCS(aclsort)
+if test x"$ac_cv_func_aclsort" = x"no"; then
+    AC_CHECK_LIB(sec, aclsort)
+fi
+
 dnl At the moment we don't test for a broken memcmp(), because all we
 dnl need to do is test for equality, not comparison, and it seems that
 dnl every platform has a memcmp that can do at least that.
@@ -551,17 +550,38 @@ AC_FUNC_UTIME_NULL
 AC_FUNC_ALLOCA
 AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \
     fchmod fstat ftruncate strchr readlink link utime utimes lutimes strftime \
-    memmove lchown vsnprintf snprintf vasprintf asprintf setsid glob strpbrk \
+    memmove lchown vsnprintf snprintf vasprintf asprintf setsid strpbrk \
     strlcat strlcpy strtol mallinfo getgroups setgroups geteuid getegid \
     setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \
-    strerror putenv iconv_open locale_charset nl_langinfo \
-    sigaction sigprocmask)
+    strerror putenv iconv_open locale_charset nl_langinfo getxattr \
+    extattr_get_link sigaction sigprocmask setattrlist)
+
+dnl cygwin iconv.h defines iconv_open as libiconv_open
+if test x"$ac_cv_func_iconv_open" != x"yes"; then
+    AC_CHECK_FUNC(libiconv_open, [ac_cv_func_iconv_open=yes; AC_DEFINE(HAVE_ICONV_OPEN, 1)])
+fi
 
 AC_CHECK_FUNCS(getpgrp tcgetpgrp)
 if test $ac_cv_func_getpgrp = yes; then
     AC_FUNC_GETPGRP
 fi
 
+AC_ARG_ENABLE(iconv,
+    AC_HELP_STRING([--disable-iconv],
+           [disable rsync's --iconv option]),
+    [], [enable_iconv=$ac_cv_func_iconv_open])
+AH_TEMPLATE([ICONV_OPTION],
+[Define if you want the --iconv option.  Specifing a value will set the
+default iconv setting (a NULL means no --iconv processing by default).])
+if test x"$enable_iconv" != x"no"; then
+       if test x"$enable_iconv" = x"yes"; then
+               AC_DEFINE(ICONV_OPTION, NULL)
+       else
+               AC_DEFINE_UNQUOTED(ICONV_OPTION, "$enable_iconv")
+       fi
+       AC_DEFINE(UTF8_CHARSET, "UTF-8", [String to pass to iconv() for the UTF-8 charset.])
+fi
+
 AC_CACHE_CHECK([whether chown() modifies symlinks],rsync_cv_chown_modifies_symlink,[
   AC_TRY_RUN([
 #if HAVE_UNISTD_H
@@ -636,6 +656,15 @@ fi
 if test x"$with_included_popt" != x"yes"; then
     AC_CHECK_LIB(popt, poptGetContext, , [with_included_popt=yes])
 fi
+if test x"$ac_cv_header_popt_popt_h" = x"yes"; then
+    # If the system has /usr/include/popt/popt.h, we enable the
+    # included popt because an attempt to "#include <popt/popt.h>"
+    # would use our included header file anyway (due to -I.), and
+    # might conflict with the system popt.
+    with_included_popt=yes
+elif test x"$ac_cv_header_popt_h" != x"yes"; then
+    with_included_popt=yes
+fi
 
 AC_MSG_CHECKING([whether to use included libpopt])
 if test x"$with_included_popt" = x"yes"; then
@@ -670,13 +699,13 @@ if test x"$rsync_cv_HAVE_BROKEN_READDIR" = x"yes"; then
     AC_DEFINE(HAVE_BROKEN_READDIR, 1, [Define to 1 if readdir() is broken])
 fi
 
-AC_CACHE_CHECK([for utimbuf],rsync_cv_HAVE_UTIMBUF,[
+AC_CACHE_CHECK([for utimbuf],rsync_cv_HAVE_STRUCT_UTIMBUF,[
 AC_TRY_COMPILE([#include <sys/types.h>
 #include <utime.h>],
 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
-rsync_cv_HAVE_UTIMBUF=yes,rsync_cv_HAVE_UTIMBUF=no)])
-if test x"$rsync_cv_HAVE_UTIMBUF" = x"yes"; then
-    AC_DEFINE(HAVE_UTIMBUF, 1, [Define to 1 if you have the "struct utimbuf" type])
+rsync_cv_HAVE_STRUCT_UTIMBUF=yes,rsync_cv_HAVE_STRUCT_UTIMBUF=no)])
+if test x"$rsync_cv_HAVE_STRUCT_UTIMBUF" = x"yes"; then
+    AC_DEFINE(HAVE_STRUCT_UTIMBUF, 1, [Define to 1 if you have the "struct utimbuf" type])
 fi
 
 AC_CACHE_CHECK([if gettimeofday takes tz argument],rsync_cv_HAVE_GETTIMEOFDAY_TZ,[
@@ -805,6 +834,146 @@ AC_SUBST(OBJ_SAVE)
 AC_SUBST(OBJ_RESTORE)
 AC_SUBST(CC_SHOBJ_FLAG)
 AC_SUBST(BUILD_POPT)
+AC_SUBST(MAKE_MAN)
+
+AC_CHECK_FUNCS(_acl __acl _facl __facl)
+#################################################
+# check for ACL support
+
+AC_MSG_CHECKING([whether to support ACLs])
+AC_ARG_ENABLE(acl-support,
+       AC_HELP_STRING([--disable-acl-support],
+                      [disable ACL support]))
+
+if test x"$enable_acl_support" = x"no"; then
+    AC_MSG_RESULT(no)
+else
+    case "$host_os" in
+    *sysv5*)
+       AC_MSG_RESULT(Using UnixWare ACLs)
+       AC_DEFINE(HAVE_UNIXWARE_ACLS, 1, [true if you have UnixWare ACLs])
+       AC_DEFINE(SUPPORT_ACLS, 1, [Define to 1 to add support for ACLs])
+       ;;
+    *solaris*|*cygwin*)
+       AC_MSG_RESULT(Using solaris ACLs)
+       AC_DEFINE(HAVE_SOLARIS_ACLS, 1, [true if you have solaris ACLs])
+       AC_DEFINE(SUPPORT_ACLS, 1)
+       ;;
+    *hpux*)
+       AC_MSG_RESULT(Using HPUX ACLs)
+       AC_DEFINE(HAVE_HPUX_ACLS, 1, [true if you have HPUX ACLs])
+       AC_DEFINE(SUPPORT_ACLS, 1)
+       ;;
+    *irix*)
+       AC_MSG_RESULT(Using IRIX ACLs)
+       AC_DEFINE(HAVE_IRIX_ACLS, 1, [true if you have IRIX ACLs])
+       AC_DEFINE(SUPPORT_ACLS, 1)
+       ;;
+    *aix*)
+       AC_MSG_RESULT(Using AIX ACLs)
+       AC_DEFINE(HAVE_AIX_ACLS, 1, [true if you have AIX ACLs])
+       AC_DEFINE(SUPPORT_ACLS, 1)
+       ;;
+    *osf*)
+       AC_MSG_RESULT(Using Tru64 ACLs)
+       AC_DEFINE(HAVE_TRU64_ACLS, 1, [true if you have Tru64 ACLs])
+       AC_DEFINE(SUPPORT_ACLS, 1)
+       LIBS="$LIBS -lpacl"
+       ;;
+    darwin*)
+       AC_MSG_RESULT(Using OS X ACLs)
+       AC_DEFINE(HAVE_OSX_ACLS, 1, [true if you have Mac OS X ACLs])
+       AC_DEFINE(SUPPORT_ACLS, 1)
+       ;;
+    *)
+       AC_MSG_RESULT(running tests:)
+       AC_CHECK_LIB(acl,acl_get_file)
+           AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
+           AC_TRY_LINK([#include <sys/types.h>
+#include <sys/acl.h>],
+[ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
+samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)])
+       AC_MSG_CHECKING(ACL test results)
+       if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
+           AC_MSG_RESULT(Using posix ACLs)
+           AC_DEFINE(HAVE_POSIX_ACLS, 1, [true if you have posix ACLs])
+           AC_DEFINE(SUPPORT_ACLS, 1)
+           AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
+               AC_TRY_LINK([#include <sys/types.h>
+#include <sys/acl.h>],
+[ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
+samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)])
+           if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
+               AC_DEFINE(HAVE_ACL_GET_PERM_NP, 1, [true if you have acl_get_perm_np])
+           fi
+       else
+           if test x"$enable_acl_support" = x"yes"; then
+               AC_MSG_ERROR(Failed to find ACL support)
+           else
+               AC_MSG_RESULT(No ACL support found)
+           fi
+       fi
+       ;;
+    esac
+fi
+
+#################################################
+# check for extended attribute support
+AC_MSG_CHECKING(whether to support extended attributes)
+AC_ARG_ENABLE(xattr-support,
+    AC_HELP_STRING([--disable-xattr-support],
+           [disable extended attributes]),
+    [], [case "$ac_cv_func_getxattr$ac_cv_func_extattr_get_link" in
+       *yes*) enable_xattr_support=maybe ;;
+       *) enable_xattr_support=no ;;
+       esac])
+AH_TEMPLATE([SUPPORT_XATTRS],
+[Define to 1 to add support for extended attributes])
+if test x"$enable_xattr_support" = x"no"; then
+    AC_MSG_RESULT(no)
+else
+    case "$host_os" in
+    *linux*)
+       AC_MSG_RESULT(Using Linux xattrs)
+       AC_DEFINE(HAVE_LINUX_XATTRS, 1, [True if you have Linux xattrs])
+       AC_DEFINE(SUPPORT_XATTRS, 1)
+       ;;
+    darwin*)
+       AC_MSG_RESULT(Using OS X xattrs)
+       AC_DEFINE(HAVE_OSX_XATTRS, 1, [True if you have Mac OS X xattrs])
+       AC_DEFINE(SUPPORT_XATTRS, 1)
+       ;;
+    freebsd*)
+       AC_MSG_RESULT(Using FreeBSD extattrs)
+       AC_DEFINE(HAVE_FREEBSD_XATTRS, 1, [True if you have FreeBSD xattrs])
+       AC_DEFINE(SUPPORT_XATTRS, 1)
+       ;;
+    *)
+       if test x"$enable_xattr_support" = x"yes"; then
+           AC_MSG_ERROR(Failed to find extended attribute support)
+       else
+           AC_MSG_RESULT(No extended attribute support found)
+       fi
+       ;;
+    esac
+fi
+
+if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"$enable_iconv" = x"no"; then
+    AC_MSG_CHECKING([whether $CC supports -Wno-unused-parameter])
+    OLD_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -Wno-unused-parameter"
+    AC_COMPILE_IFELSE([ ], [rsync_warn_flag=yes], [rsync_warn_flag=no])
+    AC_MSG_RESULT([$rsync_warn_flag])
+    if test x"$rsync_warn_flag" = x"no"; then
+       CFLAGS="$OLD_CFLAGS"
+    fi
+fi
+
+case "$CC" in
+' checker'*|checker*)
+    AC_DEFINE(FORCE_FD_ZERO_MEMSET, 1, [Used to make "checker" understand that FD_ZERO() clears memory.])
+    ;;
+esac
 
 AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig])
 AC_OUTPUT