X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/fab9a9c54729984199d20b637ea8cc163c73d2e2..06963d0fca72b8af5c708544ba7972582b54d90b:/configure.in diff --git a/configure.in b/configure.in index e08249da..c55b07f5 100644 --- a/configure.in +++ b/configure.in @@ -1,7 +1,8 @@ dnl Process this file with autoconf to produce a configure script. + AC_INIT(byteorder.h) AC_CONFIG_HEADER(config.h) -AC_PREREQ(2.12) +AC_PREREQ(2.52) LDFLAGS=${LDFLAGS-""} @@ -28,31 +29,342 @@ 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_CPP 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 +#include +#include +#include + +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) +AC_DEFINE(ss_len, __ss_len) +CFLAGS="$CFLAGS" +AC_MSG_CHECKING([whether to enable ipv6]) +AC_ARG_ENABLE(ipv6, +[ --enable-ipv6 Enable ipv6 (with ipv4) support + --disable-ipv6 Disable ipv6 support], +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + ipv6=no + ;; + *) AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_IPV6) + ipv6=yes + ;; + esac ], + + AC_TRY_COMPILE([ /* AF_INET6 avalable check */ +#include +#include +main() +{ + if (socket(AF_INET6, SOCK_STREAM, 0) < 0) + exit(1); + else + exit(0); +} +], + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_IPV6) + ipv6=yes, + AC_MSG_RESULT(no) + ipv6=no, + AC_MSG_RESULT(no) + ipv6=no +)) + +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 +#ifdef IPV6_INRIA_VERSION +yes +#endif], + [ipv6type=$i; + CFLAGS="-DINET6 $CFLAGS"]) + ;; + kame) + # http://www.kame.net/ + AC_EGREP_CPP(yes, [ +#include +#ifdef __KAME__ +yes +#endif], + [ipv6type=$i; + CFLAGS="-DINET6 $CFLAGS"]) + ;; + linux-glibc) + # http://www.v6.linux.or.jp/ + AC_EGREP_CPP(yes, [ +#include +#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 +yes +#endif], + [ipv6type=$i; + CFLAGS="-DINET6 $CFLAGS"]) + ;; + 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; + CFLAGS="-DINET6 -I/usr/inet6/include $CFLAGS" + fi + ;; + toshiba) + AC_EGREP_CPP(yes, [ +#include +#ifdef _TOSHIBA_INET6 +yes +#endif], + [ipv6type=$i; + ipv6lib=inet6; + ipv6libdir=/usr/local/v6/lib; + CFLAGS="-DINET6 $CFLAGS"]) + ;; + v6d) + AC_EGREP_CPP(yes, [ +#include +#ifdef __V6D__ +yes +#endif], + [ipv6type=$i; + ipv6lib=v6; + ipv6libdir=/usr/local/v6/lib; + CFLAGS="-I/usr/local/v6/include $CFLAGS"]) + ;; + zeta) + AC_EGREP_CPP(yes, [ +#include +#ifdef _ZETA_MINAMI_INET6 +yes +#endif], + [ipv6type=$i; + ipv6lib=inet6; + ipv6libdir=/usr/local/v6/lib; + CFLAGS="-DINET6 $CFLAGS"]) + ;; + 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 +#include +#include +#include +#include + +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_MSG_CHECKING([whether struct sockaddr has sa_len]) +AC_TRY_COMPILE([ +#include +#include +],[ +struct sockaddr s; +int i = s.sa_len; +], +[ AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SOCKADDR_LEN)], +[ AC_MSG_RESULT(no), + ], +[ AC_MSG_RESULT(unknown), + ]) + + AC_C_BIGENDIAN AC_HEADER_DIRENT AC_HEADER_TIME @@ -77,8 +389,7 @@ AC_TYPE_PID_T AC_TYPE_GETGROUPS AC_STRUCT_ST_RDEV AC_CHECK_TYPE([ino_t], [unsigned]) -dnl TYPE_SOCKLEN_T -AC_CHECK_TYPE([socklen_t], [size_t]) +TYPE_SOCKLEN_T AC_CACHE_CHECK([for errno in errno.h],rsync_cv_errno, [ AC_TRY_COMPILE([#include ],[int i = errno], @@ -348,4 +659,4 @@ AC_SUBST(OBJ_RESTORE) AC_SUBST(CC_SHOBJ_FLAG) AC_SUBST(BUILD_POPT) -AC_OUTPUT(Makefile lib/dummy zlib/dummy) +AC_OUTPUT(Makefile lib/dummy zlib/dummy popt/dummy shconfig)