diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | Makefile.in | 21 | ||||
-rw-r--r-- | NEWS | 36 | ||||
-rw-r--r-- | OLDNEWS | 1 | ||||
-rw-r--r-- | access.c | 2 | ||||
-rw-r--r-- | aclocal.m4 | 100 | ||||
-rw-r--r-- | acls.c | 2 | ||||
-rw-r--r-- | authenticate.c | 11 | ||||
-rw-r--r-- | backup.c | 33 | ||||
-rw-r--r-- | batch.c | 2 | ||||
-rw-r--r-- | byteorder.h | 2 | ||||
-rw-r--r-- | case_N.h | 2 | ||||
-rw-r--r-- | checksum.c | 19 | ||||
-rw-r--r-- | chmod.c | 2 | ||||
-rw-r--r-- | cleanup.c | 2 | ||||
-rw-r--r-- | clientname.c | 2 | ||||
-rw-r--r-- | clientserver.c | 36 | ||||
-rw-r--r-- | compat.c | 9 | ||||
-rw-r--r-- | config.h.in | 774 | ||||
-rw-r--r-- | configure.ac | 200 | ||||
-rwxr-xr-x | configure.sh | 10350 | ||||
-rw-r--r-- | delete.c | 2 | ||||
-rw-r--r-- | errcode.h | 2 | ||||
-rw-r--r-- | exclude.c | 143 | ||||
-rw-r--r-- | fileio.c | 2 | ||||
-rw-r--r-- | flist.c | 52 | ||||
-rw-r--r-- | generator.c | 38 | ||||
-rw-r--r-- | getgroups.c | 2 | ||||
-rw-r--r-- | hashtable.c | 2 | ||||
-rw-r--r-- | hlink.c | 2 | ||||
-rw-r--r-- | ifuncs.h | 2 | ||||
-rw-r--r-- | inums.h | 2 | ||||
-rw-r--r-- | io.c | 6 | ||||
-rw-r--r-- | io.h | 2 | ||||
-rw-r--r-- | itypes.h | 2 | ||||
-rw-r--r-- | lib/compat.c | 2 | ||||
-rw-r--r-- | lib/mdfour.c | 2 | ||||
-rw-r--r-- | lib/permstring.c | 2 | ||||
-rw-r--r-- | lib/sysacls.c | 2 | ||||
-rw-r--r-- | lib/sysacls.h | 2 | ||||
-rw-r--r-- | lib/sysxattrs.c | 2 | ||||
-rw-r--r-- | loadparm.c | 2 | ||||
-rw-r--r-- | log.c | 15 | ||||
-rw-r--r-- | m4/have_type.m4 | 22 | ||||
-rw-r--r-- | m4/socklen_t.m4 | 45 | ||||
-rw-r--r-- | m4/validate_cache_system_type.m4 | 23 | ||||
-rw-r--r-- | main.c | 39 | ||||
-rw-r--r-- | match.c | 2 | ||||
-rw-r--r-- | options.c | 21 | ||||
-rw-r--r-- | packaging/lsb/rsync.spec | 6 | ||||
-rwxr-xr-x | packaging/nightly-rsync | 7 | ||||
-rwxr-xr-x | packaging/release-rsync | 8 | ||||
-rw-r--r-- | pipe.c | 2 | ||||
-rwxr-xr-x | prepare-source | 4 | ||||
-rw-r--r-- | prepare-source.mak | 3 | ||||
-rw-r--r-- | progress.c | 2 | ||||
-rw-r--r-- | proto.h | 424 | ||||
-rw-r--r-- | proto.h-tstamp | 0 | ||||
-rw-r--r-- | receiver.c | 5 | ||||
-rw-r--r-- | rounding.c | 2 | ||||
-rw-r--r-- | rsync.1 | 4007 | ||||
-rw-r--r-- | rsync.c | 12 | ||||
-rw-r--r-- | rsync.h | 3 | ||||
-rw-r--r-- | rsync.yo | 13 | ||||
-rw-r--r-- | rsyncd.conf.5 | 1085 | ||||
-rw-r--r-- | rsyncd.conf.yo | 31 | ||||
-rw-r--r-- | sender.c | 10 | ||||
-rw-r--r-- | socket.c | 6 | ||||
-rw-r--r-- | support/rrsync | 21 | ||||
-rw-r--r-- | syscall.c | 2 | ||||
-rw-r--r-- | t_stub.c | 2 | ||||
-rw-r--r-- | t_unsafe.c | 2 | ||||
-rw-r--r-- | testsuite/chgrp.test | 4 | ||||
-rw-r--r-- | testsuite/duplicates.test | 2 | ||||
-rw-r--r-- | testsuite/hardlinks.test | 6 | ||||
-rw-r--r-- | testsuite/relative.test | 2 | ||||
-rw-r--r-- | tls.c | 2 | ||||
-rw-r--r-- | token.c | 2 | ||||
-rw-r--r-- | trimslash.c | 2 | ||||
-rw-r--r-- | uidlist.c | 44 | ||||
-rw-r--r-- | util.c | 24 | ||||
-rw-r--r-- | util2.c | 10 | ||||
-rw-r--r-- | wildtest.c | 2 | ||||
-rw-r--r-- | xattrs.c | 2 |
84 files changed, 17303 insertions, 504 deletions
@@ -12,6 +12,7 @@ config.h.in config.h.in.old config.log config.status +aclocal.m4 /proto.h /proto.h-tstamp /rsync.1 @@ -44,3 +45,4 @@ config.status /testsuite/devices-fake.test /testsuite/xattrs-hlink.test /patches +.deps diff --git a/Makefile.in b/Makefile.in index d0e0dded..151247db 100644 --- a/Makefile.in +++ b/Makefile.in @@ -14,6 +14,7 @@ CFLAGS=@CFLAGS@ CPPFLAGS=@CPPFLAGS@ EXEEXT=@EXEEXT@ LDFLAGS=@LDFLAGS@ +LIBOBJDIR=lib/ INSTALLCMD=@INSTALL@ INSTALLMAN=@INSTALL@ @@ -28,7 +29,7 @@ VERSION=@RSYNC_VERSION@ .SUFFIXES: .SUFFIXES: .c .o -GENFILES=configure.sh config.h.in proto.h proto.h-tstamp rsync.1 rsyncd.conf.5 +GENFILES=configure.sh aclocal.m4 config.h.in proto.h proto.h-tstamp rsync.1 rsyncd.conf.5 HEADERS=byteorder.h config.h errcode.h proto.h rsync.h ifuncs.h itypes.h inums.h \ lib/pool_alloc.h LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \ @@ -138,11 +139,14 @@ t_unsafe$(EXEEXT): $(T_UNSAFE_OBJ) gen: conf proto.h man gensend: gen - rsync -aivzc $(GENFILES) samba.org:/home/ftp/pub/rsync/generated-files/ + rsync -aivzc $(GENFILES) $${SAMBA_HOST-samba.org}:/home/ftp/pub/rsync/generated-files/ conf: cd $(srcdir) && $(MAKE) -f prepare-source.mak conf +aclocal.m4: $(srcdir)/m4/*.m4 + aclocal -I $(srcdir)/m4 + configure.sh config.h.in: configure.ac aclocal.m4 @if test -f configure.sh; then cp -p configure.sh configure.sh.old; else touch configure.sh.old; fi @if test -f config.h.in; then cp -p config.h.in config.h.in.old; else touch config.h.in.old; fi @@ -303,21 +307,10 @@ installcheck: $(CHECK_PROGS) $(CHECK_SYMLINKS) splint: splint +unixlib +gnuextensions -weak rsync.c - -rsync.dvi: doc/rsync.texinfo - texi2dvi -o $@ $< - -rsync.ps: rsync.dvi - dvips -ta4 -o $@ $< - -rsync.pdf: doc/rsync.texinfo - texi2dvi -o $@ --pdf $< - - doxygen: cd $(srcdir) && rm dox/html/* && doxygen # for maintainers only doxygen-upload: rsync -avzv $(srcdir)/dox/html/ --delete \ - samba.org:/home/httpd/html/rsync/doxygen/head/ + $${SAMBA_HOST-samba.org}:/home/httpd/html/rsync/doxygen/head/ @@ -1,17 +1,47 @@ -NEWS for rsync 3.1.2 (UNRELEASED) +NEWS for rsync 3.1.2 (21 Dec 2015) Protocol: 31 (unchanged) Changes since 3.1.1: + SECURITY FIXES: + + - Make sure that all transferred files use only path names from inside the + transfer. This makes it impossible for a malicious sender to try to make + the receiver use an unsafe destination path for a transferred file, such + as a just-sent symlink. + BUG FIXES: - - ... + - Change the checksum seed order in the per-block checksums. This prevents + someone from trying to create checksum blocks that match in sum but not + content. + - Fixed a with the per-dir filter files (using -FF) that could trigger an + assert failure. + - Only skip set_modtime() on a transferred file if the time is exactly + right. + - Don't create an empty backup dir for a transferred file that doesn't + exist yet. + - Fixed a bug where --link-dest and --xattrs could cause rsync to exit if + a filename had a matching dir of the same name in the alt-dest area. + - Allow more than 32 group IDs per user in the daemon's gid=LIST config. + - Fix the logging of %b & %c via --log-file (daemon logging was already + correct, as was --out-format='%b/%c'). + - Fix erroneous acceptance of --info=5 & --debug=5 (an empty flag name is + not valid). ENHANCEMENTS: - Added "(DRY RUN)" info to the --debug=exit output line. - - Added a few extra long options to rrsync script, which will make BackupPC happier. + - Use usleep() for our msleep() function if it is available. + - Added a few extra long-option names to rrsync script, which will make + BackupPC happier. + - Made configure choose to use linux xattrs on netbsd (rather than not + supporting xattrs). + - Added -wo (write-only) option to rrsync support script. + - Misc. manpage tweaks. DEVELOPER RELATED: - Fixed a bug with the Makefile's use of INSTALL_STRIP. + - Improve a test in the suite that could get an erroneous timestamp error. - Tweaks for newer versions of git in the packaging tools. + - Improved the m4 generation rules and some autoconf idioms. @@ -3650,6 +3650,7 @@ Changes since 2.4.6: Partial Protocol History RELEASE DATE VER. DATE OF COMMIT* PROTOCOL + 21 Dec 2015 3.1.2 31 22 Jun 2014 3.1.1 31 28 Sep 2013 3.1.0 31 Aug 2008 31 23 Sep 2011 3.0.9 30 @@ -2,7 +2,7 @@ * Routines to authenticate access to a daemon (hosts allow/deny). * * Copyright (C) 1998 Andrew Tridgell - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1,92 +1,16 @@ -dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)] -dnl if the cache file is inconsistent with the current host, -dnl target and build system types, execute CMD or print a default -dnl error message. -AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [ - AC_REQUIRE([AC_CANONICAL_SYSTEM]) - AC_MSG_CHECKING([config.cache system type]) - if { test x"${ac_cv_host_system_type+set}" = x"set" && - test x"$ac_cv_host_system_type" != x"$host"; } || - { test x"${ac_cv_build_system_type+set}" = x"set" && - test x"$ac_cv_build_system_type" != x"$build"; } || - { test x"${ac_cv_target_system_type+set}" = x"set" && - test x"$ac_cv_target_system_type" != x"$target"; }; then - AC_MSG_RESULT([different]) - ifelse($#, 1, [$1], - [AC_MSG_ERROR(["you must remove config.cache and restart configure"])]) - else - AC_MSG_RESULT([same]) - fi - ac_cv_host_system_type="$host" - ac_cv_build_system_type="$build" - ac_cv_target_system_type="$target" -]) +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- -dnl Check for socklen_t: historically on BSD it is an int, and in -dnl POSIX 1g it is a type of its own, but some platforms use different -dnl types for the argument to getsockopt, getpeername, etc. So we -dnl have to test to find something that will work. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. -dnl This is no good, because passing the wrong pointer on C compilers is -dnl likely to only generate a warning, not an error. We don't call this at -dnl the moment. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -AC_DEFUN([TYPE_SOCKLEN_T], -[ - AC_CHECK_TYPE([socklen_t], ,[ - AC_MSG_CHECKING([for socklen_t equivalent]) - AC_CACHE_VAL([rsync_cv_socklen_t_equiv], - [ - # Systems have either "struct sockaddr *" or - # "void *" as the second argument to getpeername - rsync_cv_socklen_t_equiv= - for arg2 in "struct sockaddr" void; do - for t in int size_t unsigned long "unsigned long"; do - AC_TRY_COMPILE([ -#include <sys/types.h> -#include <sys/socket.h> +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. - int getpeername (int, $arg2 *, $t *); - ],[ - $t len; - getpeername(0,0,&len); - ],[ - rsync_cv_socklen_t_equiv="$t" - break - ]) - done - done - - if test "x$rsync_cv_socklen_t_equiv" = x; then - AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) - fi - ]) - AC_MSG_RESULT($rsync_cv_socklen_t_equiv) - AC_DEFINE_UNQUOTED(socklen_t, $rsync_cv_socklen_t_equiv, - [type to use in place of socklen_t if not defined])], - [#include <sys/types.h> -#include <sys/socket.h>]) -]) - -dnl AC_HAVE_TYPE(TYPE,INCLUDES) -AC_DEFUN([AC_HAVE_TYPE], [ -AC_REQUIRE([AC_HEADER_STDC]) -cv=`echo "$1" | sed 'y%./+- %__p__%'` -AC_MSG_CHECKING(for $1) -AC_CACHE_VAL([ac_cv_type_$cv], -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -AC_INCLUDES_DEFAULT -$2]], -[[$1 foo;]])], -[eval "ac_cv_type_$cv=yes"], -[eval "ac_cv_type_$cv=no"]))dnl -ac_foo=`eval echo \\$ac_cv_type_$cv` -AC_MSG_RESULT($ac_foo) -if test "$ac_foo" = yes; then - ac_tr_hdr=HAVE_`echo $1 | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'` -if false; then - AC_CHECK_TYPES($1) -fi - AC_DEFINE_UNQUOTED($ac_tr_hdr, 1, [Define if you have type `$1']) -fi -]) +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_include([m4/have_type.m4]) +m4_include([m4/socklen_t.m4]) @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2006-2014 Wayne Davison + * Copyright (C) 2006-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/authenticate.c b/authenticate.c index c92746c6..5f125dea 100644 --- a/authenticate.c +++ b/authenticate.c @@ -2,7 +2,7 @@ * Support rsync daemon authentication. * * Copyright (C) 1998-2000 Andrew Tridgell - * Copyright (C) 2002-2014 Wayne Davison + * Copyright (C) 2002-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -279,17 +279,18 @@ char *auth_server(int f_in, int f_out, int module, const char *host, /* See if authorizing user is a real user, and if so, see * if it is in a group that matches tok+1 wildmat. */ if (auth_uid_groups_cnt < 0) { - gid_t gid_list[64]; + item_list gid_list = EMPTY_ITEM_LIST; uid_t auth_uid; - auth_uid_groups_cnt = sizeof gid_list / sizeof (gid_t); if (!user_to_uid(line, &auth_uid, False) - || getallgroups(auth_uid, gid_list, &auth_uid_groups_cnt) != NULL) + || getallgroups(auth_uid, &gid_list) != NULL) auth_uid_groups_cnt = 0; else { + gid_t *gid_array = gid_list.items; + auth_uid_groups_cnt = gid_list.count; if ((auth_uid_groups = new_array(char *, auth_uid_groups_cnt)) == NULL) out_of_memory("auth_server"); for (j = 0; j < auth_uid_groups_cnt; j++) - auth_uid_groups[j] = gid_to_group(gid_list[j]); + auth_uid_groups[j] = gid_to_group(gid_array[j]); } } for (j = 0; j < auth_uid_groups_cnt; j++) { @@ -2,7 +2,7 @@ * Backup handling code. * * Copyright (C) 1999 Andrew Tridgell - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -157,6 +157,18 @@ static BOOL copy_valid_path(const char *fname) char *get_backup_name(const char *fname) { if (backup_dir) { + static int initialized = 0; + if (!initialized) { + int ret; + if (backup_dir_len > 1) + backup_dir_buf[backup_dir_len-1] = '\0'; + ret = make_path(backup_dir_buf, 0); + if (backup_dir_len > 1) + backup_dir_buf[backup_dir_len-1] = '/'; + if (ret < 0) + return NULL; + initialized = 1; + } /* copy fname into backup_dir_buf while validating the dirs. */ if (copy_valid_path(fname)) return backup_dir_buf; @@ -208,23 +220,24 @@ static inline int link_or_rename(const char *from, const char *to, return 0; } -/* Hard-link, rename, or copy an item to the backup name. Returns 2 if item - * was duplicated into backup area, 1 if item was moved, or 0 for failure.*/ +/* Hard-link, rename, or copy an item to the backup name. Returns 0 for + * failure, 1 if item was moved, 2 if item was duplicated or hard linked + * into backup area, or 3 if item doesn't exist or isn't a regular file. */ int make_backup(const char *fname, BOOL prefer_rename) { stat_x sx; struct file_struct *file; int save_preserve_xattrs; - char *buf = get_backup_name(fname); + char *buf; int ret = 0; - if (!buf) - return 0; - init_stat_x(&sx); /* Return success if no file to keep. */ if (x_lstat(fname, &sx.st, NULL) < 0) - return 1; + return 3; + + if (!(buf = get_backup_name(fname))) + return 0; /* Try a hard-link or a rename first. Using rename is not atomic, but * is more efficient than forcing a copy for larger files when no hard- @@ -244,7 +257,7 @@ int make_backup(const char *fname, BOOL prefer_rename) /* Fall back to making a copy. */ if (!(file = make_file(fname, NULL, &sx.st, 0, NO_FILTERS))) - return 1; /* the file could have disappeared */ + return 3; /* the file could have disappeared */ #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { @@ -299,7 +312,7 @@ int make_backup(const char *fname, BOOL prefer_rename) #ifdef SUPPORT_XATTRS uncache_tmp_xattrs(); #endif - return 2; + return 3; } /* Copy to backup tree if a file. */ @@ -3,7 +3,7 @@ * * Copyright (C) 1999 Weiss * Copyright (C) 2004 Chris Shoemaker - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/byteorder.h b/byteorder.h index 49c358ba..630f830b 100644 --- a/byteorder.h +++ b/byteorder.h @@ -2,7 +2,7 @@ * Simple byteorder handling. * * Copyright (C) 1992-1995 Andrew Tridgell - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1,7 +1,7 @@ /* * Allow an arbitrary sequence of case labels. * - * Copyright (C) 2006-2014 Wayne Davison + * Copyright (C) 2006-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ extern int checksum_seed; extern int protocol_version; +extern int proper_seed_order; /* a simple 32 bit checksum that can be upadted from either end @@ -54,10 +55,18 @@ void get_checksum2(char *buf, int32 len, char *sum) if (protocol_version >= 30) { uchar seedbuf[4]; md5_begin(&m); - md5_update(&m, (uchar *)buf, len); - if (checksum_seed) { - SIVALu(seedbuf, 0, checksum_seed); - md5_update(&m, seedbuf, 4); + if (proper_seed_order) { + if (checksum_seed) { + SIVALu(seedbuf, 0, checksum_seed); + md5_update(&m, seedbuf, 4); + } + md5_update(&m, (uchar *)buf, len); + } else { + md5_update(&m, (uchar *)buf, len); + if (checksum_seed) { + SIVALu(seedbuf, 0, checksum_seed); + md5_update(&m, seedbuf, 4); + } } md5_result(&m, (uchar *)sum); } else { @@ -2,7 +2,7 @@ * Implement the core of the --chmod option. * * Copyright (C) 2002 Scott Howard - * Copyright (C) 2005-2014 Wayne Davison + * Copyright (C) 2005-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -4,7 +4,7 @@ * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2002 Martin Pool - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/clientname.c b/clientname.c index ccd43d72..89ce2a81 100644 --- a/clientname.c +++ b/clientname.c @@ -3,7 +3,7 @@ * * Copyright (C) 1992-2001 Andrew Tridgell <tridge@samba.org> * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2002-2014 Wayne Davison + * Copyright (C) 2002-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/clientserver.c b/clientserver.c index d9b5bb0c..27f8cd38 100644 --- a/clientserver.c +++ b/clientserver.c @@ -3,7 +3,7 @@ * * Copyright (C) 1998-2001 Andrew Tridgell <tridge@samba.org> * Copyright (C) 2001-2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2002-2014 Wayne Davison + * Copyright (C) 2002-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,8 +60,6 @@ extern char *iconv_opt; extern iconv_t ic_send, ic_recv; #endif -#define MAX_GID_LIST 32 - char *auth_user; int read_only = 0; int module_id = -1; @@ -81,8 +79,7 @@ static int rl_nulls = 0; static struct sigaction sigact; #endif -static gid_t gid_list[MAX_GID_LIST]; -static int gid_count = 0; +static item_list gid_list = EMPTY_ITEM_LIST; /* Used when "reverse lookup" is off. */ const char undetermined_hostname[] = "UNDETERMINED"; @@ -438,18 +435,14 @@ static int path_failure(int f_out, const char *dir, BOOL was_chdir) static int add_a_group(int f_out, const char *gname) { - gid_t gid; + gid_t gid, *gid_p; if (!group_to_gid(gname, &gid, True)) { rprintf(FLOG, "Invalid gid %s\n", gname); io_printf(f_out, "@ERROR: invalid gid %s\n", gname); return -1; } - if (gid_count == MAX_GID_LIST) { - rprintf(FLOG, "Too many groups specified via gid parameter.\n"); - io_printf(f_out, "@ERROR: too many groups\n"); - return -1; - } - gid_list[gid_count++] = gid; + gid_p = EXPAND_ITEM_LIST(&gid_list, gid_t, -32); + *gid_p = gid; return 0; } @@ -457,8 +450,7 @@ static int add_a_group(int f_out, const char *gname) static int want_all_groups(int f_out, uid_t uid) { const char *err; - gid_count = MAX_GID_LIST; - if ((err = getallgroups(uid, gid_list, &gid_count)) != NULL) { + if ((err = getallgroups(uid, &gid_list)) != NULL) { rsyserr(FLOG, errno, "%s", err); io_printf(f_out, "@ERROR: %s\n", err); return -1; @@ -469,14 +461,15 @@ static int want_all_groups(int f_out, uid_t uid) static struct passwd *want_all_groups(int f_out, uid_t uid) { struct passwd *pw; + gid_t *gid_p; if ((pw = getpwuid(uid)) == NULL) { rsyserr(FLOG, errno, "getpwuid failed"); io_printf(f_out, "@ERROR: getpwuid failed\n"); return NULL; } - /* Start with the default group and initgroups() will add the reset. */ - gid_count = 1; - gid_list[0] = pw->pw_gid; + /* Start with the default group and initgroups() will add the rest. */ + gid_p = EXPAND_ITEM_LIST(&gid_list, gid_t, -32); + *gid_p = pw->pw_gid; return pw; } #endif @@ -818,15 +811,16 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char } } - if (gid_count) { - if (setgid(gid_list[0])) { - rsyserr(FLOG, errno, "setgid %ld failed", (long)gid_list[0]); + if (gid_list.count) { + gid_t *gid_array = gid_list.items; + if (setgid(gid_array[0])) { + rsyserr(FLOG, errno, "setgid %ld failed", (long)gid_array[0]); io_printf(f_out, "@ERROR: setgid failed\n"); return -1; } #ifdef HAVE_SETGROUPS /* Set the group(s) we want to be active. */ - if (setgroups(gid_count, gid_list)) { + if (setgroups(gid_list.count, gid_array)) { rsyserr(FLOG, errno, "setgroups failed"); io_printf(f_out, "@ERROR: setgroups failed\n"); return -1; @@ -3,7 +3,7 @@ * * Copyright (C) Andrew Tridgell 1996 * Copyright (C) Paul Mackerras 1996 - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,6 +27,7 @@ int inc_recurse = 0; int compat_flags = 0; int use_safe_inc_flist = 0; int want_xattr_optim = 0; +int proper_seed_order = 0; extern int am_server; extern int am_sender; @@ -78,6 +79,7 @@ int filesfrom_convert = 0; #define CF_SYMLINK_ICONV (1<<2) #define CF_SAFE_FLIST (1<<3) #define CF_AVOID_XATTR_OPTIM (1<<4) +#define CF_CHKSUM_SEED_FIX (1<<5) static const char *client_info; @@ -271,12 +273,15 @@ void setup_protocol(int f_out,int f_in) compat_flags |= CF_SAFE_FLIST; if (local_server || strchr(client_info, 'x') != NULL) compat_flags |= CF_AVOID_XATTR_OPTIM; + if (local_server || strchr(client_info, 'C') != NULL) + compat_flags |= CF_CHKSUM_SEED_FIX; write_byte(f_out, compat_flags); } else compat_flags = read_byte(f_in); /* The inc_recurse var MUST be set to 0 or 1. */ inc_recurse = compat_flags & CF_INC_RECURSE ? 1 : 0; want_xattr_optim = protocol_version >= 31 && !(compat_flags & CF_AVOID_XATTR_OPTIM); + proper_seed_order = compat_flags & CF_CHKSUM_SEED_FIX ? 1 : 0; if (am_sender) { receiver_symlink_times = am_server ? strchr(client_info, 'L') != NULL @@ -328,7 +333,7 @@ void setup_protocol(int f_out,int f_in) if (am_server) { if (!checksum_seed) - checksum_seed = time(NULL); + checksum_seed = time(NULL) ^ (getpid() << 6); write_int(f_out, checksum_seed); } else { checksum_seed = read_int(f_in); diff --git a/config.h.in b/config.h.in new file mode 100644 index 00000000..026c5dc6 --- /dev/null +++ b/config.h.in @@ -0,0 +1,774 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to 1 if link() can hard-link special files. */ +#undef CAN_HARDLINK_SPECIAL + +/* Define to 1 if link() can hard-link symlinks. */ +#undef CAN_HARDLINK_SYMLINK + +/* Define to 1 if chown modifies symlinks. */ +#undef CHOWN_MODIFIES_SYMLINK + +/* Undefine if you do not want locale features. By default this is defined. */ +#undef CONFIG_LOCALE + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define to 1 if using external zlib */ +#undef EXTERNAL_ZLIB + +/* Used to make "checker" understand that FD_ZERO() clears memory. */ +#undef FORCE_FD_ZERO_MEMSET + +/* Define to the type of elements in the array set by `getgroups'. Usually + this is either `int' or `gid_t'. */ +#undef GETGROUPS_T + +/* Define to 1 if the `getpgrp' function requires zero arguments. */ +#undef GETPGRP_VOID + +/* Define to 1 if you have the `aclsort' function. */ +#undef HAVE_ACLSORT + +/* true if you have acl_get_perm_np */ +#undef HAVE_ACL_GET_PERM_NP + +/* Define to 1 if you have the <acl/libacl.h> header file. */ +#undef HAVE_ACL_LIBACL_H + +/* true if you have AIX ACLs */ +#undef HAVE_AIX_ACLS + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if you have the <arpa/nameser.h> header file. */ +#undef HAVE_ARPA_NAMESER_H + +/* Define to 1 if you have the `asprintf' function. */ +#undef HAVE_ASPRINTF + +/* Define to 1 if you have the `attropen' function. */ +#undef HAVE_ATTROPEN + +/* Define to 1 if you have the <attr/xattr.h> header file. */ +#undef HAVE_ATTR_XATTR_H + +/* Define to 1 if readdir() is broken */ +#undef HAVE_BROKEN_READDIR + +/* Define to 1 if vsprintf has a C99-compatible return value */ +#undef HAVE_C99_VSNPRINTF + +/* Define to 1 if you have the `chmod' function. */ +#undef HAVE_CHMOD + +/* Define to 1 if you have the `chown' function. */ +#undef HAVE_CHOWN + +/* Define to 1 if you have the <compat.h> header file. */ +#undef HAVE_COMPAT_H + +/* Define to 1 if you have the "connect" function */ +#undef HAVE_CONNECT + +/* Define to 1 if you have the <ctype.h> header file. */ +#undef HAVE_CTYPE_H + +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ +#undef HAVE_DIRENT_H + +/* Define if posix_fallocate is efficient (Cygwin) */ +#undef HAVE_EFFICIENT_POSIX_FALLOCATE + +/* Define to 1 if errno is declared in errno.h */ +#undef HAVE_ERRNO_DECL + +/* Define to 1 if you have the `extattr_get_link' function. */ +#undef HAVE_EXTATTR_GET_LINK + +/* Define to 1 if you have the fallocate function and it compiles and links + without error */ +#undef HAVE_FALLOCATE + +/* Define to 1 if you have the `fchmod' function. */ +#undef HAVE_FCHMOD + +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the <float.h> header file. */ +#undef HAVE_FLOAT_H + +/* True if you have FreeBSD xattrs */ +#undef HAVE_FREEBSD_XATTRS + +/* Define to 1 if you have the `fstat' function. */ +#undef HAVE_FSTAT + +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have the "getaddrinfo" function and required types. */ +#undef HAVE_GETADDRINFO + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* Define to 1 if you have the `getegid' function. */ +#undef HAVE_GETEGID + +/* Define to 1 if you have the `geteuid' function. */ +#undef HAVE_GETEUID + +/* Define to 1 if you have the `getgrouplist' function. */ +#undef HAVE_GETGROUPLIST + +/* Define to 1 if you have the `getgroups' function. */ +#undef HAVE_GETGROUPS + +/* Define to 1 if you have the `getpass' function. */ +#undef HAVE_GETPASS + +/* Define to 1 if you have the `getpgrp' function. */ +#undef HAVE_GETPGRP + +/* Define to 1 if gettimeofday() takes a time-zone arg */ +#undef HAVE_GETTIMEOFDAY_TZ + +/* Define to 1 if you have the `getxattr' function. */ +#undef HAVE_GETXATTR + +/* Define to 1 if you have the <grp.h> header file. */ +#undef HAVE_GRP_H + +/* true if you have HPUX ACLs */ +#undef HAVE_HPUX_ACLS + +/* Define to 1 if you have the <iconv.h> header file. */ +#undef HAVE_ICONV_H + +/* Define to 1 if you have the `iconv_open' function. */ +#undef HAVE_ICONV_OPEN + +/* Define to 1 if the system has the type `id_t'. */ +#undef HAVE_ID_T + +/* Define to 1 if you have the `inet_ntop' function. */ +#undef HAVE_INET_NTOP + +/* Define to 1 if you have the `inet_pton' function. */ +#undef HAVE_INET_PTON + +/* Define to 1 if you have the `initgroups' function. */ +#undef HAVE_INITGROUPS + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* true if you have IRIX ACLs */ +#undef HAVE_IRIX_ACLS + +/* Define to 1 if you have the <langinfo.h> header file. */ +#undef HAVE_LANGINFO_H + +/* Define to 1 if you have the `lchmod' function. */ +#undef HAVE_LCHMOD + +/* Define to 1 if you have the `lchown' function. */ +#undef HAVE_LCHOWN + +/* Define to 1 if you have the `acl' library (-lacl). */ +#undef HAVE_LIBACL + +/* Define to 1 if you have the `attr' library (-lattr). */ +#undef HAVE_LIBATTR + +/* Define to 1 if you have the <libcharset.h> header file. */ +#undef HAVE_LIBCHARSET_H + +/* Define to 1 if you have the `inet' library (-linet). */ +#undef HAVE_LIBINET + +/* Define to 1 if you have the `nsl' library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define to 1 if you have the `nsl_s' library (-lnsl_s). */ +#undef HAVE_LIBNSL_S + +/* Define to 1 if you have the `popt' library (-lpopt). */ +#undef HAVE_LIBPOPT + +/* Define to 1 if you have the `resolv' library (-lresolv). */ +#undef HAVE_LIBRESOLV + +/* Define to 1 if you have the `sec' library (-lsec). */ +#undef HAVE_LIBSEC + +/* Define to 1 if you have the `socket' library (-lsocket). */ +#undef HAVE_LIBSOCKET + +/* Define to 1 if you have the `z' library (-lz). */ +#undef HAVE_LIBZ + +/* Define to 1 if you have the <limits.h> header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the `link' function. */ +#undef HAVE_LINK + +/* Define to 1 if you have the <linux/falloc.h> header file. */ +#undef HAVE_LINUX_FALLOC_H + +/* True if you have Linux xattrs (or equivalent) */ +#undef HAVE_LINUX_XATTRS + +/* Define to 1 if you have the `locale_charset' function. */ +#undef HAVE_LOCALE_CHARSET + +/* Define to 1 if you have the <locale.h> header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if the type `long double' works and has more range or precision + than `double'. */ +#undef HAVE_LONG_DOUBLE + +/* Define to 1 if the type `long double' works and has more range or precision + than `double'. */ +#undef HAVE_LONG_DOUBLE_WIDER + +/* Define to 1 if you have the `lseek64' function. */ +#undef HAVE_LSEEK64 + +/* Define to 1 if you have the `lutimes' function. */ +#undef HAVE_LUTIMES + +/* Define to 1 if you have the `mallinfo' function. */ +#undef HAVE_MALLINFO + +/* Define to 1 if you have the <malloc.h> header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the <mcheck.h> header file. */ +#undef HAVE_MCHECK_H + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkfifo' function. */ +#undef HAVE_MKFIFO + +/* Define to 1 if you have the `mknod' function. */ +#undef HAVE_MKNOD + +/* Define to 1 if you have the `mkstemp64' function. */ +#undef HAVE_MKSTEMP64 + +/* Define to 1 if the system has the type `mode_t'. */ +#undef HAVE_MODE_T + +/* Define to 1 if you have the `mtrace' function. */ +#undef HAVE_MTRACE + +/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if you have the <netdb.h> header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the <netinet/in_systm.h> header file. */ +#undef HAVE_NETINET_IN_SYSTM_H + +/* Define to 1 if you have the <netinet/ip.h> header file. */ +#undef HAVE_NETINET_IP_H + +/* Define to 1 if you have the `nl_langinfo' function. */ +#undef HAVE_NL_LANGINFO + +/* Define to 1 if the system has the type `off_t'. */ +#undef HAVE_OFF_T + +/* Define to 1 if you have the `open64' function. */ +#undef HAVE_OPEN64 + +/* true if you have Mac OS X ACLs */ +#undef HAVE_OSX_ACLS + +/* True if you have Mac OS X xattrs */ +#undef HAVE_OSX_XATTRS + +/* Define to 1 if the system has the type `pid_t'. */ +#undef HAVE_PID_T + +/* Define to 1 if you have the <popt.h> header file. */ +#undef HAVE_POPT_H + +/* Define to 1 if you have the <popt/popt.h> header file. */ +#undef HAVE_POPT_POPT_H + +/* true if you have posix ACLs */ +#undef HAVE_POSIX_ACLS + +/* Define to 1 if you have the `posix_fallocate' function. */ +#undef HAVE_POSIX_FALLOCATE + +/* Define to 1 if you have the `putenv' function. */ +#undef HAVE_PUTENV + +/* Define to 1 if you have the `readlink' function. */ +#undef HAVE_READLINK + +/* Define to 1 if remote shell is remsh, not rsh */ +#undef HAVE_REMSH + +/* Define to 1 if mkstemp() is available and works right */ +#undef HAVE_SECURE_MKSTEMP + +/* Define to 1 if you have the `setattrlist' function. */ +#undef HAVE_SETATTRLIST + +/* Define to 1 if you have the `seteuid' function. */ +#undef HAVE_SETEUID + +/* Define to 1 if you have the `setgroups' function. */ +#undef HAVE_SETGROUPS + +/* Define to 1 if you have the `setlocale' function. */ +#undef HAVE_SETLOCALE + +/* Define to 1 if you have the `setmode' function. */ +#undef HAVE_SETMODE + +/* Define to 1 if you have the `setsid' function. */ +#undef HAVE_SETSID + +/* Define to 1 if you have the `setvbuf' function. */ +#undef HAVE_SETVBUF + +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if you have the `sigprocmask' function. */ +#undef HAVE_SIGPROCMASK + +/* Define to 1 if the system has the type `size_t'. */ +#undef HAVE_SIZE_T + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* Do we have sockaddr_in6.sin6_scope_id? */ +#undef HAVE_SOCKADDR_IN6_SCOPE_ID + +/* Do we have sockaddr_in.sin_len? */ +#undef HAVE_SOCKADDR_IN_LEN + +/* Do we have sockaddr.sa_len? */ +#undef HAVE_SOCKADDR_LEN + +/* Do we have sockaddr_un.sun_len? */ +#undef HAVE_SOCKADDR_UN_LEN + +/* Define to 1 if you have the "socketpair" function */ +#undef HAVE_SOCKETPAIR + +/* true if you have solaris ACLs */ +#undef HAVE_SOLARIS_ACLS + +/* True if you have Solaris xattrs */ +#undef HAVE_SOLARIS_XATTRS + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strdup' function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the `strftime' function. */ +#undef HAVE_STRFTIME + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strlcat' function. */ +#undef HAVE_STRLCAT + +/* Define to 1 if you have the `strlcpy' function. */ +#undef HAVE_STRLCPY + +/* Define to 1 if you have the `strpbrk' function. */ +#undef HAVE_STRPBRK + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if the system has the type `struct addrinfo'. */ +#undef HAVE_STRUCT_ADDRINFO + +/* Define to 1 if the system has the type `struct sockaddr_storage'. */ +#undef HAVE_STRUCT_SOCKADDR_STORAGE + +/* Define to 1 if the system has the type `struct stat64'. */ +#undef HAVE_STRUCT_STAT64 + +/* Define to 1 if `st_mtimensec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_MTIMENSEC + +/* Define to 1 if `st_mtim.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC + +/* Define to 1 if `st_rdev' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_RDEV + +/* Define to 1 if you have the "struct utimbuf" type */ +#undef HAVE_STRUCT_UTIMBUF + +/* Define to 1 if you have the <sys/acl.h> header file. */ +#undef HAVE_SYS_ACL_H + +/* Define to 1 if you have the <sys/attr.h> header file. */ +#undef HAVE_SYS_ATTR_H + +/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the <sys/extattr.h> header file. */ +#undef HAVE_SYS_EXTATTR_H + +/* Define to 1 if you have the SYS_fallocate syscall number */ +#undef HAVE_SYS_FALLOCATE + +/* Define to 1 if you have the <sys/fcntl.h> header file. */ +#undef HAVE_SYS_FCNTL_H + +/* Define to 1 if you have the <sys/filio.h> header file. */ +#undef HAVE_SYS_FILIO_H + +/* Define to 1 if you have the <sys/ioctl.h> header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the <sys/mode.h> header file. */ +#undef HAVE_SYS_MODE_H + +/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + +/* Define to 1 if you have the <sys/param.h> header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <sys/unistd.h> header file. */ +#undef HAVE_SYS_UNISTD_H + +/* Define to 1 if you have the <sys/un.h> header file. */ +#undef HAVE_SYS_UN_H + +/* Define to 1 if you have the <sys/wait.h> header file. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the <sys/xattr.h> header file. */ +#undef HAVE_SYS_XATTR_H + +/* Define to 1 if you have the `tcgetpgrp' function. */ +#undef HAVE_TCGETPGRP + +/* true if you have Tru64 ACLs */ +#undef HAVE_TRU64_ACLS + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* true if you have UnixWare ACLs */ +#undef HAVE_UNIXWARE_ACLS + +/* Define to 1 if you have the `usleep' function. */ +#undef HAVE_USLEEP + +/* Define to 1 if you have the `utime' function. */ +#undef HAVE_UTIME + +/* Define to 1 if you have the `utimensat' function. */ +#undef HAVE_UTIMENSAT + +/* Define to 1 if you have the `utimes' function. */ +#undef HAVE_UTIMES + +/* Define to 1 if you have the <utime.h> header file. */ +#undef HAVE_UTIME_H + +/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */ +#undef HAVE_UTIME_NULL + +/* Define to 1 if you have the `vasprintf' function. */ +#undef HAVE_VASPRINTF + +/* Define to 1 if you have the `va_copy' function. */ +#undef HAVE_VA_COPY + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF + +/* Define to 1 if you have the `wait4' function. */ +#undef HAVE_WAIT4 + +/* Define to 1 if you have the `waitpid' function. */ +#undef HAVE_WAITPID + +/* Define to 1 if you have the <zlib.h> header file. */ +#undef HAVE_ZLIB_H + +/* Define to 1 if you have the `_acl' function. */ +#undef HAVE__ACL + +/* Define to 1 if you have the `_facl' function. */ +#undef HAVE__FACL + +/* Define to 1 if you have the `__acl' function. */ +#undef HAVE___ACL + +/* Define to 1 if you have the `__facl' function. */ +#undef HAVE___FACL + +/* Define to 1 if you have the `__va_copy' function. */ +#undef HAVE___VA_COPY + +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST + +/* Define if you want the --iconv option. Specifing a value will set the + default iconv setting (a NULL means no --iconv processing by default). */ +#undef ICONV_OPTION + +/* true if you have IPv6 */ +#undef INET6 + +/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>. + */ +#undef MAJOR_IN_MKDEV + +/* Define to 1 if `major', `minor', and `makedev' are declared in + <sysmacros.h>. */ +#undef MAJOR_IN_SYSMACROS + +/* Define to 1 if makedev() takes 3 args */ +#undef MAKEDEV_TAKES_3_ARGS + +/* Define to 1 if mknod() can create FIFOs. */ +#undef MKNOD_CREATES_FIFOS + +/* Define to 1 if mknod() can create sockets. */ +#undef MKNOD_CREATES_SOCKETS + +/* unprivileged group for unprivileged user */ +#undef NOBODY_GROUP + +/* unprivileged user--e.g. nobody */ +#undef NOBODY_USER + +/* True if device files do not support xattrs */ +#undef NO_DEVICE_XATTRS + +/* True if special files do not support xattrs */ +#undef NO_SPECIAL_XATTRS + +/* True if symlinks do not support user xattrs */ +#undef NO_SYMLINK_USER_XATTRS + +/* True if symlinks do not support xattrs */ +#undef NO_SYMLINK_XATTRS + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* location of configuration file for rsync server */ +#undef RSYNCD_SYSCONF + +/* location of rsync on remote machine */ +#undef RSYNC_PATH + +/* default -e command */ +#undef RSYNC_RSH + +/* Define to 1 if --protected-args should be the default */ +#undef RSYNC_USE_PROTECTED_ARGS + +/* rsync release version */ +#undef RSYNC_VERSION + +/* Define to 1 if sockets need to be shutdown */ +#undef SHUTDOWN_ALL_SOCKETS + +/* Define to 1 if "signed char" is a valid type */ +#undef SIGNED_CHAR_OK + +/* The size of `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of `int16_t', as computed by sizeof. */ +#undef SIZEOF_INT16_T + +/* The size of `int32_t', as computed by sizeof. */ +#undef SIZEOF_INT32_T + +/* The size of `int64_t', as computed by sizeof. */ +#undef SIZEOF_INT64_T + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `long long', as computed by sizeof. */ +#undef SIZEOF_LONG_LONG + +/* The size of `off64_t', as computed by sizeof. */ +#undef SIZEOF_OFF64_T + +/* The size of `off_t', as computed by sizeof. */ +#undef SIZEOF_OFF_T + +/* The size of `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + +/* The size of `uint16_t', as computed by sizeof. */ +#undef SIZEOF_UINT16_T + +/* The size of `uint32_t', as computed by sizeof. */ +#undef SIZEOF_UINT32_T + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 to add support for ACLs */ +#undef SUPPORT_ACLS + +/* Define to 1 to add support for extended attributes */ +#undef SUPPORT_XATTRS + +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#undef TIME_WITH_SYS_TIME + +/* Define to 1 if you want rsync to make use of iconv_open() */ +#undef USE_ICONV_OPEN + +/* String to pass to iconv() for the UTF-8 charset. */ +#undef UTF8_CHARSET + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define _GNU_SOURCE so that we get all necessary prototypes */ +#undef _GNU_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef gid_t + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#undef size_t + +/* type to use in place of socklen_t if not defined */ +#undef socklen_t + +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef uid_t diff --git a/configure.ac b/configure.ac index 70381f70..1b32dfbb 100644 --- a/configure.ac +++ b/configure.ac @@ -1,20 +1,25 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT() +AC_INIT([rsync],[3.1.2],[http://rsync.samba.org/bugzilla.html]) + +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([byteorder.h]) AC_CONFIG_HEADER(config.h) -AC_PREREQ(2.60) +AC_PREREQ([2.69]) -RSYNC_VERSION=3.1.2dev -AC_SUBST(RSYNC_VERSION) -AC_MSG_NOTICE([Configuring rsync $RSYNC_VERSION]) +AC_SUBST(RSYNC_VERSION, $PACKAGE_VERSION) +AC_MSG_NOTICE([Configuring rsync $PACKAGE_VERSION]) -AC_DEFINE_UNQUOTED(RSYNC_VERSION, ["$RSYNC_VERSION"], [rsync release version]) +AC_DEFINE_UNQUOTED(RSYNC_VERSION, ["$PACKAGE_VERSION"], [rsync release version]) LDFLAGS=${LDFLAGS-""} AC_CANONICAL_HOST +dnl define the directory for replacement function since AC_LIBOBJ does not +dnl officially support subdirs and fails with automake +AC_CONFIG_LIBOBJ_DIR([lib]) + # We must decide this before testing the compiler. # Please allow this to default to yes, so that your users have more @@ -22,8 +27,7 @@ AC_CANONICAL_HOST AC_MSG_CHECKING([whether to include debugging symbols]) AC_ARG_ENABLE(debug, - AC_HELP_STRING([--disable-debug], - [disable debugging symbols and features])) + AS_HELP_STRING([--disable-debug],[disable debugging symbols and features])) if test x"$enable_debug" = x"no"; then AC_MSG_RESULT(no) @@ -42,6 +46,7 @@ AC_PROG_INSTALL AC_PROG_MKDIR_P AC_PROG_CC_STDC AC_SUBST(SHELL) +AC_PATH_PROG([PERL], [perl]) AC_DEFINE([_GNU_SOURCE], 1, [Define _GNU_SOURCE so that we get all necessary prototypes]) @@ -51,8 +56,7 @@ if test x"$ac_cv_prog_cc_stdc" = x"no"; then fi AC_ARG_ENABLE(profile, - AC_HELP_STRING([--enable-profile], - [turn on CPU profiling])) + AS_HELP_STRING([--enable-profile],[turn on CPU profiling])) if test x"$enable_profile" = x"yes"; then CFLAGS="$CFLAGS -pg" fi @@ -60,8 +64,7 @@ fi # Specifically, this turns on panic_action handling. AC_ARG_ENABLE(maintainer-mode, - AC_HELP_STRING([--enable-maintainer-mode], - [turn on extra debug features])) + AS_HELP_STRING([--enable-maintainer-mode],[turn on extra debug features])) if test x"$enable_maintainer_mode" = x"yes"; then CFLAGS="$CFLAGS -DMAINTAINER_MODE" fi @@ -77,26 +80,26 @@ if test x"$GCC" = x"yes"; then fi AC_ARG_WITH(included-popt, - AC_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])) + AS_HELP_STRING([--with-included-popt],[use bundled popt library, not from system])) AC_ARG_WITH(included-zlib, - AC_HELP_STRING([--with-included-zlib], [use bundled zlib library, not from system])) + AS_HELP_STRING([--with-included-zlib],[use bundled zlib library, not from system])) AC_ARG_WITH(protected-args, - AC_HELP_STRING([--with-protected-args], [make --protected-args option the default])) + AS_HELP_STRING([--with-protected-args],[make --protected-args option the default])) if test x"$with_protected_args" = x"yes"; then AC_DEFINE_UNQUOTED(RSYNC_USE_PROTECTED_ARGS, 1, [Define to 1 if --protected-args should be the default]) fi AC_ARG_WITH(rsync-path, - AC_HELP_STRING([--with-rsync-path=PATH], [set default --rsync-path to PATH (default: rsync)]), + AS_HELP_STRING([--with-rsync-path=PATH],[set default --rsync-path to PATH (default: rsync)]), [ RSYNC_PATH="$with_rsync_path" ], [ RSYNC_PATH="rsync" ]) AC_DEFINE_UNQUOTED(RSYNC_PATH, "$RSYNC_PATH", [location of rsync on remote machine]) AC_ARG_WITH(rsyncd-conf, - AC_HELP_STRING([--with-rsyncd-conf=PATH], [set configuration file for rsync server to PATH (default: /etc/rsyncd.conf)]), + AS_HELP_STRING([--with-rsyncd-conf=PATH],[set configuration file for rsync server to PATH (default: /etc/rsyncd.conf)]), [ if test ! -z "$with_rsyncd_conf" ; then case $with_rsyncd_conf in yes|no) @@ -117,7 +120,7 @@ AC_ARG_WITH(rsyncd-conf, AC_DEFINE_UNQUOTED(RSYNCD_SYSCONF, "$RSYNCD_SYSCONF", [location of configuration file for rsync server]) AC_ARG_WITH(rsh, - AC_HELP_STRING([--with-rsh=CMD], [set remote shell command to CMD (default: ssh)])) + AS_HELP_STRING([--with-rsh=CMD],[set remote shell command to CMD (default: ssh)])) AC_CHECK_PROG(HAVE_REMSH, remsh, 1, 0) if test x$HAVE_REMSH = x1; then @@ -143,8 +146,7 @@ AC_PATH_PROG(SHELL_PATH, sh, /bin/sh, [/usr/xpg4/bin$PATH_SEPARATOR$PATH]) AC_PATH_PROG(FAKEROOT_PATH, fakeroot, /usr/bin/fakeroot, [/usr/xpg4/bin$PATH_SEPARATOR$PATH]) AC_ARG_WITH(nobody-group, - AC_HELP_STRING([--with-nobody-group=GROUP], - [set the default unprivileged group (default nobody or nogroup)]), + AS_HELP_STRING([--with-nobody-group=GROUP],[set the default unprivileged group (default nobody or nogroup)]), [ NOBODY_GROUP="$with_nobody_group" ]) if test x"$with_nobody_group" = x; then @@ -165,7 +167,7 @@ AC_DEFINE_UNQUOTED(NOBODY_GROUP, "$NOBODY_GROUP", [unprivileged group for unpriv # arrgh. libc in some old debian version screwed up the largefile # stuff, getting byte range locking wrong AC_CACHE_CHECK([for broken largefile support],rsync_cv_HAVE_BROKEN_LARGEFILE,[ -AC_TRY_RUN([ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ #define _FILE_OFFSET_BITS 64 #include <stdio.h> #include <fcntl.h> @@ -197,8 +199,7 @@ int main(void) unlink(tpl); exit(WEXITSTATUS(status)); } -], -rsync_cv_HAVE_BROKEN_LARGEFILE=yes,rsync_cv_HAVE_BROKEN_LARGEFILE=no,rsync_cv_HAVE_BROKEN_LARGEFILE=cross)]) +]])],[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 @@ -208,8 +209,7 @@ ipv6lib=none ipv6trylibc=yes AC_ARG_ENABLE(ipv6, - AC_HELP_STRING([--disable-ipv6], - [do not even try to use IPv6])) + AS_HELP_STRING([--disable-ipv6],[do not even try to use IPv6])) if test x"$enable_ipv6" != x"no"; then AC_MSG_CHECKING([ipv6 stack type]) for i in inria kame linux-glibc linux-inet6 solaris toshiba v6d zeta cygwin; do @@ -320,8 +320,7 @@ fi dnl Do you want to disable use of locale functions AC_ARG_ENABLE([locale], - AC_HELP_STRING([--disable-locale], - [disable locale features])) + AS_HELP_STRING([--disable-locale],[disable locale features])) AH_TEMPLATE([CONFIG_LOCALE], [Undefine if you do not want locale features. By default this is defined.]) if test x"$enable_locale" != x"no"; then @@ -352,7 +351,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ AC_HEADER_MAJOR AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[ -AC_TRY_RUN([ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #ifdef MAJOR_IN_MKDEV #include <sys/mkdev.h> @@ -370,8 +369,7 @@ int main(void) exit(1); return 0; } -], -rsync_cv_MAKEDEV_TAKES_3_ARGS=yes,rsync_cv_MAKEDEV_TAKES_3_ARGS=no,rsync_cv_MAKEDEV_TAKES_3_ARGS=no)]) +]])],[rsync_cv_MAKEDEV_TAKES_3_ARGS=yes],[rsync_cv_MAKEDEV_TAKES_3_ARGS=no],[rsync_cv_MAKEDEV_TAKES_3_ARGS=no])]) if test x"$rsync_cv_MAKEDEV_TAKES_3_ARGS" = x"yes"; then AC_DEFINE(MAKEDEV_TAKES_3_ARGS, 1, [Define to 1 if makedev() takes 3 args]) fi @@ -390,9 +388,13 @@ AC_CHECK_SIZEOF(off64_t) AC_CHECK_SIZEOF(time_t) AC_C_INLINE -AC_C_LONG_DOUBLE -AC_TYPE_SIGNAL +AC_TYPE_LONG_DOUBLE_WIDER +ac_cv_c_long_double=$ac_cv_type_long_double_wider +if test $ac_cv_c_long_double = yes; then + AC_DEFINE([HAVE_LONG_DOUBLE],[1],[Define to 1 if the type `long double' works and has more range or precision than `double'.]) +fi + AC_TYPE_UID_T AC_CHECK_TYPES([mode_t,off_t,size_t,pid_t,id_t]) AC_TYPE_GETGROUPS @@ -412,8 +414,7 @@ AC_CHECK_MEMBERS([struct stat.st_rdev, TYPE_SOCKLEN_T AC_CACHE_CHECK([for errno in errno.h],rsync_cv_errno, [ - AC_TRY_COMPILE([#include <errno.h>],[int i = errno], - rsync_cv_errno=yes,rsync_cv_have_errno_decl=no)]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]], [[int i = errno]])],[rsync_cv_errno=yes],[rsync_cv_have_errno_decl=no])]) if test x"$rsync_cv_errno" = x"yes"; then AC_DEFINE(HAVE_ERRNO_DECL, 1, [Define to 1 if errno is declared in errno.h]) fi @@ -464,7 +465,7 @@ AC_SEARCH_LIBS(libiconv_open, iconv) AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ - AC_TRY_COMPILE([ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <iconv.h> extern @@ -476,7 +477,7 @@ size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, si #else size_t iconv(); #endif -], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") +]], [[]])],[am_cv_proto_iconv_arg1=""],[am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- @@ -486,8 +487,7 @@ AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, 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_REPLACE_FUNCS([inet_ntop inet_pton]) AC_HAVE_TYPE([struct addrinfo], [#include <netdb.h>]) AC_HAVE_TYPE([struct sockaddr_storage], [#include <sys/types.h> @@ -506,23 +506,19 @@ 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" -a x"$ac_cv_type_struct_addrinfo" = x"yes"; then +AS_IF([test x"$rsync_cv_HAVE_GETADDR_DEFINES" = x"yes" -a x"$ac_cv_type_struct_addrinfo" = x"yes"],[ # Tru64 UNIX has getaddrinfo() but has it renamed in libc as # something else so we must include <netdb.h> to get the # redefinition. AC_CHECK_FUNCS(getaddrinfo, , [AC_MSG_CHECKING([for getaddrinfo by including <netdb.h>]) - AC_TRY_LINK([#include <sys/types.h> + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #include <sys/socket.h> - #include <netdb.h>],[getaddrinfo(NULL, NULL, NULL, NULL);], - [AC_MSG_RESULT([yes]) + #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 and required types.])], - [AC_MSG_RESULT([no]) - AC_LIBOBJ(lib/getaddrinfo)])]) -else - AC_LIBOBJ(lib/getaddrinfo) -fi + [Define to 1 if you have the "getaddrinfo" function and required types.])],[AC_MSG_RESULT([no]) + AC_LIBOBJ([getaddrinfo])])]) + ],[AC_LIBOBJ([getaddrinfo])]) AC_CHECK_MEMBER([struct sockaddr.sa_len], [ AC_DEFINE(HAVE_SOCKADDR_LEN, 1, [Do we have sockaddr.sa_len?]) ], @@ -602,7 +598,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \ extattr_get_link sigaction sigprocmask setattrlist getgrouplist \ - initgroups utimensat posix_fallocate attropen setvbuf) + initgroups utimensat posix_fallocate attropen setvbuf usleep) dnl cygwin iconv.h defines iconv_open as libiconv_open if test x"$ac_cv_func_iconv_open" != x"yes"; then @@ -612,19 +608,15 @@ fi dnl Preallocation stuff (also fallocate, posix_fallocate function tests above): AC_CACHE_CHECK([for useable fallocate],rsync_cv_have_fallocate,[ -AC_TRY_LINK([#include <fcntl.h> -#include <sys/types.h>], -[fallocate(0, 0, 0, 0);], -rsync_cv_have_fallocate=yes,rsync_cv_have_fallocate=no)]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <fcntl.h> +#include <sys/types.h>]], [[fallocate(0, 0, 0, 0);]])],[rsync_cv_have_fallocate=yes],[rsync_cv_have_fallocate=no])]) if test x"$rsync_cv_have_fallocate" = x"yes"; then AC_DEFINE(HAVE_FALLOCATE, 1, [Define to 1 if you have the fallocate function and it compiles and links without error]) fi AC_CACHE_CHECK([for SYS_fallocate],rsync_cv_have_sys_fallocate,[ -AC_TRY_COMPILE([#include <sys/syscall.h> -#include <sys/types.h>], -[syscall(SYS_fallocate, 0, 0, (loff_t)0, (loff_t)0);], -rsync_cv_have_sys_fallocate=yes,rsync_cv_have_sys_fallocate=no)]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/syscall.h> +#include <sys/types.h>]], [[syscall(SYS_fallocate, 0, 0, (loff_t)0, (loff_t)0);]])],[rsync_cv_have_sys_fallocate=yes],[rsync_cv_have_sys_fallocate=no])]) if test x"$rsync_cv_have_sys_fallocate" = x"yes"; then AC_DEFINE(HAVE_SYS_FALLOCATE, 1, [Define to 1 if you have the SYS_fallocate syscall number]) fi @@ -651,8 +643,7 @@ if test $ac_cv_func_getpgrp = yes; then fi AC_ARG_ENABLE(iconv-open, - AC_HELP_STRING([--disable-iconv-open], - [disable all use of iconv_open() function]), + AS_HELP_STRING([--disable-iconv-open],[disable all use of iconv_open() function]), [], [enable_iconv_open=$ac_cv_func_iconv_open]) if test x"$enable_iconv_open" != x"no"; then @@ -660,8 +651,7 @@ if test x"$enable_iconv_open" != x"no"; then fi AC_ARG_ENABLE(iconv, - AC_HELP_STRING([--disable-iconv], - [disable rsync's --iconv option]), + AS_HELP_STRING([--disable-iconv],[disable rsync's --iconv option]), [], [enable_iconv=$enable_iconv_open]) AH_TEMPLATE([ICONV_OPTION], [Define if you want the --iconv option. Specifing a value will set the @@ -676,7 +666,7 @@ if test x"$enable_iconv" != x"no"; then fi AC_CACHE_CHECK([whether chown() modifies symlinks],rsync_cv_chown_modifies_symlink,[ - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #if HAVE_UNISTD_H # include <unistd.h> #endif @@ -688,14 +678,13 @@ AC_CACHE_CHECK([whether chown() modifies symlinks],rsync_cv_chown_modifies_symli if (symlink("conftest.no-such", dangling_symlink) < 0) abort(); if (chown(dangling_symlink, getuid(), getgid()) < 0 && errno == ENOENT) exit(1); exit(0); - }], - rsync_cv_chown_modifies_symlink=yes,rsync_cv_chown_modifies_symlink=no,rsync_cv_chown_modifies_symlink=no)]) + }]])],[rsync_cv_chown_modifies_symlink=yes],[rsync_cv_chown_modifies_symlink=no],[rsync_cv_chown_modifies_symlink=no])]) if test $rsync_cv_chown_modifies_symlink = yes; then AC_DEFINE(CHOWN_MODIFIES_SYMLINK, 1, [Define to 1 if chown modifies symlinks.]) fi AC_CACHE_CHECK([whether link() can hard-link symlinks],rsync_cv_can_hardlink_symlink,[ - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #if HAVE_UNISTD_H # include <unistd.h> #endif @@ -708,14 +697,13 @@ AC_CACHE_CHECK([whether link() can hard-link symlinks],rsync_cv_can_hardlink_sym unlink(FILENAME "2"); if (link(FILENAME, FILENAME "2") < 0) exit(1); exit(0); - }], - rsync_cv_can_hardlink_symlink=yes,rsync_cv_can_hardlink_symlink=no,rsync_cv_can_hardlink_symlink=no)]) + }]])],[rsync_cv_can_hardlink_symlink=yes],[rsync_cv_can_hardlink_symlink=no],[rsync_cv_can_hardlink_symlink=no])]) if test $rsync_cv_can_hardlink_symlink = yes; then AC_DEFINE(CAN_HARDLINK_SYMLINK, 1, [Define to 1 if link() can hard-link symlinks.]) fi AC_CACHE_CHECK([whether link() can hard-link special files],rsync_cv_can_hardlink_special,[ - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #if HAVE_UNISTD_H # include <unistd.h> #endif @@ -728,27 +716,25 @@ AC_CACHE_CHECK([whether link() can hard-link special files],rsync_cv_can_hardlin unlink(FILENAME "2"); if (link(FILENAME, FILENAME "2") < 0) exit(1); exit(0); - }], - rsync_cv_can_hardlink_special=yes,rsync_cv_can_hardlink_special=no,rsync_cv_can_hardlink_special=no)]) + }]])],[rsync_cv_can_hardlink_special=yes],[rsync_cv_can_hardlink_special=no],[rsync_cv_can_hardlink_special=no])]) if test $rsync_cv_can_hardlink_special = yes; then AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.]) fi AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[ -AC_TRY_RUN([ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <sys/socket.h> main() { int fd[2]; exit((socketpair(AF_UNIX, SOCK_STREAM, 0, fd) != -1) ? 0 : 1); -}], -rsync_cv_HAVE_SOCKETPAIR=yes,rsync_cv_HAVE_SOCKETPAIR=no,rsync_cv_HAVE_SOCKETPAIR=cross)]) +}]])],[rsync_cv_HAVE_SOCKETPAIR=yes],[rsync_cv_HAVE_SOCKETPAIR=no],[rsync_cv_HAVE_SOCKETPAIR=cross])]) if test x"$rsync_cv_HAVE_SOCKETPAIR" = x"yes"; then AC_DEFINE(HAVE_SOCKETPAIR, 1, [Define to 1 if you have the "socketpair" function]) fi -AC_CHECK_FUNCS(getpass, , [AC_LIBOBJ(lib/getpass)]) +AC_REPLACE_FUNCS([getpass]) if test x"$with_included_popt" != x"yes"; then AC_CHECK_LIB(popt, poptGetContext, , [with_included_popt=yes]) @@ -799,43 +785,37 @@ else fi AC_CACHE_CHECK([for unsigned char],rsync_cv_SIGNED_CHAR_OK,[ -AC_TRY_COMPILE([],[signed char *s = ""], -rsync_cv_SIGNED_CHAR_OK=yes,rsync_cv_SIGNED_CHAR_OK=no)]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[signed char *s = ""]])],[rsync_cv_SIGNED_CHAR_OK=yes],[rsync_cv_SIGNED_CHAR_OK=no])]) if test x"$rsync_cv_SIGNED_CHAR_OK" = x"yes"; then AC_DEFINE(SIGNED_CHAR_OK, 1, [Define to 1 if "signed char" is a valid type]) fi AC_CACHE_CHECK([for broken readdir],rsync_cv_HAVE_BROKEN_READDIR,[ -AC_TRY_RUN([#include <sys/types.h> +AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <sys/types.h> #include <dirent.h> main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && -di->d_name[0] == 0) exit(0); exit(1);} ], -rsync_cv_HAVE_BROKEN_READDIR=yes,rsync_cv_HAVE_BROKEN_READDIR=no,rsync_cv_HAVE_BROKEN_READDIR=cross)]) +di->d_name[0] == 0) exit(0); exit(1);} ]])],[rsync_cv_HAVE_BROKEN_READDIR=yes],[rsync_cv_HAVE_BROKEN_READDIR=no],[rsync_cv_HAVE_BROKEN_READDIR=cross])]) 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_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_STRUCT_UTIMBUF=yes,rsync_cv_HAVE_STRUCT_UTIMBUF=no)]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> +#include <utime.h>]], [[struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));]])],[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,[ -AC_TRY_COMPILE([#include <sys/time.h> -#include <unistd.h>], -[struct timeval tv; exit(gettimeofday(&tv, NULL));], -rsync_cv_HAVE_GETTIMEOFDAY_TZ=yes,rsync_cv_HAVE_GETTIMEOFDAY_TZ=no)]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/time.h> +#include <unistd.h>]], [[struct timeval tv; exit(gettimeofday(&tv, NULL));]])],[rsync_cv_HAVE_GETTIMEOFDAY_TZ=yes],[rsync_cv_HAVE_GETTIMEOFDAY_TZ=no])]) if test x"$rsync_cv_HAVE_GETTIMEOFDAY_TZ" != x"no"; then AC_DEFINE(HAVE_GETTIMEOFDAY_TZ, 1, [Define to 1 if gettimeofday() takes a time-zone arg]) fi AC_CACHE_CHECK([for C99 vsnprintf],rsync_cv_HAVE_C99_VSNPRINTF,[ -AC_TRY_RUN([ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <stdarg.h> void foo(const char *format, ...) { @@ -853,15 +833,14 @@ void foo(const char *format, ...) { exit(0); } main() { foo("hello"); } -], -rsync_cv_HAVE_C99_VSNPRINTF=yes,rsync_cv_HAVE_C99_VSNPRINTF=no,rsync_cv_HAVE_C99_VSNPRINTF=cross)]) +]])],[rsync_cv_HAVE_C99_VSNPRINTF=yes],[rsync_cv_HAVE_C99_VSNPRINTF=no],[rsync_cv_HAVE_C99_VSNPRINTF=cross])]) if test x"$rsync_cv_HAVE_C99_VSNPRINTF" = x"yes"; then AC_DEFINE(HAVE_C99_VSNPRINTF, 1, [Define to 1 if vsprintf has a C99-compatible return value]) fi AC_CACHE_CHECK([for secure mkstemp],rsync_cv_HAVE_SECURE_MKSTEMP,[ -AC_TRY_RUN([#include <stdlib.h> +AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> @@ -874,10 +853,7 @@ main() { if (fstat(fd, &st) != 0) exit(1); if ((st.st_mode & 0777) != 0600) exit(1); exit(0); -}], -rsync_cv_HAVE_SECURE_MKSTEMP=yes, -rsync_cv_HAVE_SECURE_MKSTEMP=no, -rsync_cv_HAVE_SECURE_MKSTEMP=cross)]) +}]])],[rsync_cv_HAVE_SECURE_MKSTEMP=yes],[rsync_cv_HAVE_SECURE_MKSTEMP=no],[rsync_cv_HAVE_SECURE_MKSTEMP=cross])]) if test x"$rsync_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then case $host_os in hpux*) @@ -894,29 +870,27 @@ fi AC_CACHE_CHECK([if mknod creates FIFOs],rsync_cv_MKNOD_CREATES_FIFOS,[ -AC_TRY_RUN([ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <sys/stat.h> #include <errno.h> main() { int rc, ec; char *fn = "fifo-test"; unlink(fn); rc = mknod(fn,S_IFIFO,0600); ec = errno; unlink(fn); if (rc) {printf("(%d %d) ",rc,ec); return ec;} -return 0;}], - rsync_cv_MKNOD_CREATES_FIFOS=yes,rsync_cv_MKNOD_CREATES_FIFOS=no,rsync_cv_MKNOD_CREATES_FIFOS=cross)]) +return 0;}]])],[rsync_cv_MKNOD_CREATES_FIFOS=yes],[rsync_cv_MKNOD_CREATES_FIFOS=no],[rsync_cv_MKNOD_CREATES_FIFOS=cross])]) if test x"$rsync_cv_MKNOD_CREATES_FIFOS" = x"yes"; then AC_DEFINE(MKNOD_CREATES_FIFOS, 1, [Define to 1 if mknod() can create FIFOs.]) fi AC_CACHE_CHECK([if mknod creates sockets],rsync_cv_MKNOD_CREATES_SOCKETS,[ -AC_TRY_RUN([ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <sys/stat.h> #include <errno.h> main() { int rc, ec; char *fn = "sock-test"; unlink(fn); rc = mknod(fn,S_IFSOCK,0600); ec = errno; unlink(fn); if (rc) {printf("(%d %d) ",rc,ec); return ec;} -return 0;}], - rsync_cv_MKNOD_CREATES_SOCKETS=yes,rsync_cv_MKNOD_CREATES_SOCKETS=no,rsync_cv_MKNOD_CREATES_SOCKETS=cross)]) +return 0;}]])],[rsync_cv_MKNOD_CREATES_SOCKETS=yes],[rsync_cv_MKNOD_CREATES_SOCKETS=no],[rsync_cv_MKNOD_CREATES_SOCKETS=cross])]) if test x"$rsync_cv_MKNOD_CREATES_SOCKETS" = x"yes"; then AC_DEFINE(MKNOD_CREATES_SOCKETS, 1, [Define to 1 if mknod() can create sockets.]) fi @@ -963,8 +937,7 @@ AC_CHECK_FUNCS(_acl __acl _facl __facl) AC_MSG_CHECKING([whether to support ACLs]) AC_ARG_ENABLE(acl-support, - AC_HELP_STRING([--disable-acl-support], - [disable ACL support])) + AS_HELP_STRING([--disable-acl-support],[disable ACL support])) if test x"$enable_acl_support" = x"no"; then AC_MSG_RESULT(no) @@ -1010,20 +983,16 @@ else 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_LINK_IFELSE([AC_LANG_PROGRAM([[#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)]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#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 @@ -1042,8 +1011,7 @@ 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]), + AS_HELP_STRING([--disable-xattr-support],[disable extended attributes]), [], [case "$ac_cv_func_getxattr$ac_cv_func_extattr_get_link$ac_cv_func_attropen" in *yes*) enable_xattr_support=maybe ;; *) enable_xattr_support=no ;; @@ -1054,9 +1022,9 @@ if test x"$enable_xattr_support" = x"no"; then AC_MSG_RESULT(no) else case "$host_os" in - *linux*) + *linux*|*netbsd*) AC_MSG_RESULT(Using Linux xattrs) - AC_DEFINE(HAVE_LINUX_XATTRS, 1, [True if you have Linux xattrs]) + AC_DEFINE(HAVE_LINUX_XATTRS, 1, [True if you have Linux xattrs (or equivalent)]) AC_DEFINE(SUPPORT_XATTRS, 1) AC_DEFINE(NO_SYMLINK_USER_XATTRS, 1, [True if symlinks do not support user xattrs]) AC_CHECK_LIB(attr,getxattr) @@ -1093,7 +1061,7 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x" AC_MSG_CHECKING([whether $CC supports -Wno-unused-parameter]) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wno-unused-parameter" - AC_TRY_LINK([#include <stdio.h>], [printf("hello\n");], [rsync_warn_flag=yes], [rsync_warn_flag=no]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[printf("hello\n");]])],[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" diff --git a/configure.sh b/configure.sh new file mode 100755 index 00000000..d6e9c8db --- /dev/null +++ b/configure.sh @@ -0,0 +1,10350 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for rsync 3.1.2. +# +# Report bugs to <http://rsync.samba.org/bugzilla.html>. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: http://rsync.samba.org/bugzilla.html about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='rsync' +PACKAGE_TARNAME='rsync' +PACKAGE_VERSION='3.1.2' +PACKAGE_STRING='rsync 3.1.2' +PACKAGE_BUGREPORT='http://rsync.samba.org/bugzilla.html' +PACKAGE_URL='' + +ac_unique_file="byteorder.h" +ac_config_libobj_dir=lib +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_header_list= +ac_subst_vars='LTLIBOBJS +STUNNEL4 +STUNNEL +MAKE_MAN +BUILD_ZLIB +BUILD_POPT +CC_SHOBJ_FLAG +OBJ_RESTORE +OBJ_SAVE +ALLOCA +LIBOBJS +FAKEROOT_PATH +SHELL_PATH +HAVE_YODL2MAN +HAVE_REMSH +PERL +MKDIR_P +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +EGREP +GREP +CPP +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +RSYNC_VERSION +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_debug +enable_profile +enable_maintainer_mode +with_included_popt +with_included_zlib +with_protected_args +with_rsync_path +with_rsyncd_conf +with_rsh +with_nobody_group +enable_largefile +enable_ipv6 +enable_locale +enable_iconv_open +enable_iconv +enable_acl_support +enable_xattr_support +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures rsync 3.1.2 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/rsync] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of rsync 3.1.2:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-debug disable debugging symbols and features + --enable-profile turn on CPU profiling + --enable-maintainer-mode + turn on extra debug features + --disable-largefile omit support for large files + --disable-ipv6 do not even try to use IPv6 + --disable-locale disable locale features + --disable-iconv-open disable all use of iconv_open() function + --disable-iconv disable rsync's --iconv option + --disable-acl-support disable ACL support + --disable-xattr-support disable extended attributes + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-included-popt use bundled popt library, not from system + --with-included-zlib use bundled zlib library, not from system + --with-protected-args make --protected-args option the default + --with-rsync-path=PATH set default --rsync-path to PATH (default: rsync) + --with-rsyncd-conf=PATH set configuration file for rsync server to PATH + (default: /etc/rsyncd.conf) + --with-rsh=CMD set remote shell command to CMD (default: ssh) + --with-nobody-group=GROUP + set the default unprivileged group (default nobody + or nogroup) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to <http://rsync.samba.org/bugzilla.html>. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +rsync configure 3.1.2 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## --------------------------------------------------- ## +## Report this to http://rsync.samba.org/bugzilla.html ## +## --------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include <stdio.h> +#include <stdlib.h> +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 <conftest.val; ac_retval=0 +else + ac_retval=1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.val + + fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_compute_int + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by rsync $as_me 3.1.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +as_fn_append ac_header_list " utime.h" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + +ac_config_headers="$ac_config_headers config.h" + + + +RSYNC_VERSION=$PACKAGE_VERSION + +{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring rsync $PACKAGE_VERSION" >&5 +$as_echo "$as_me: Configuring rsync $PACKAGE_VERSION" >&6;} + + +cat >>confdefs.h <<_ACEOF +#define RSYNC_VERSION "$PACKAGE_VERSION" +_ACEOF + + +LDFLAGS=${LDFLAGS-""} + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + + +# We must decide this before testing the compiler. + +# Please allow this to default to yes, so that your users have more +# chance of getting a useful stack trace if problems occur. + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include debugging symbols" >&5 +$as_echo_n "checking whether to include debugging symbols... " >&6; } +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; +fi + + +if test x"$enable_debug" = x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ac_cv_prog_cc_g=no +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + # leave ac_cv_prog_cc_g alone; AC_PROG_CC will try to include -g if it can +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdbool.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + +if test x"$ac_cv_prog_cc_stdc" = x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: rsync requires an ANSI C compiler and you do not seem to have one" >&5 +$as_echo "$as_me: WARNING: rsync requires an ANSI C compiler and you do not seem to have one" >&2;} +fi + +# Check whether --enable-profile was given. +if test "${enable_profile+set}" = set; then : + enableval=$enable_profile; +fi + +if test x"$enable_profile" = x"yes"; then + CFLAGS="$CFLAGS -pg" +fi + + +# Specifically, this turns on panic_action handling. +# Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; +fi + +if test x"$enable_maintainer_mode" = x"yes"; then + CFLAGS="$CFLAGS -DMAINTAINER_MODE" +fi + + +# This is needed for our included version of popt. Kind of silly, but +# I don't want our version too far out of sync. +CFLAGS="$CFLAGS -DHAVE_CONFIG_H" + +# If GCC, turn on warnings. +if test x"$GCC" = x"yes"; then + CFLAGS="$CFLAGS -Wall -W" +fi + + +# Check whether --with-included-popt was given. +if test "${with_included_popt+set}" = set; then : + withval=$with_included_popt; +fi + + + +# Check whether --with-included-zlib was given. +if test "${with_included_zlib+set}" = set; then : + withval=$with_included_zlib; +fi + + + +# Check whether --with-protected-args was given. +if test "${with_protected_args+set}" = set; then : + withval=$with_protected_args; +fi + +if test x"$with_protected_args" = x"yes"; then + +cat >>confdefs.h <<_ACEOF +#define RSYNC_USE_PROTECTED_ARGS 1 +_ACEOF + +fi + + +# Check whether --with-rsync-path was given. +if test "${with_rsync_path+set}" = set; then : + withval=$with_rsync_path; RSYNC_PATH="$with_rsync_path" +else + RSYNC_PATH="rsync" +fi + + + +cat >>confdefs.h <<_ACEOF +#define RSYNC_PATH "$RSYNC_PATH" +_ACEOF + + + +# Check whether --with-rsyncd-conf was given. +if test "${with_rsyncd_conf+set}" = set; then : + withval=$with_rsyncd_conf; if test ! -z "$with_rsyncd_conf" ; then + case $with_rsyncd_conf in + yes|no) + RSYNCD_SYSCONF="/etc/rsyncd.conf" + ;; + /*) + RSYNCD_SYSCONF="$with_rsyncd_conf" + ;; + *) + as_fn_error $? "You must specify an absolute path to --with-rsyncd-conf=PATH" "$LINENO" 5 + ;; + esac + else + RSYNCD_SYSCONF="/etc/rsyncd.conf" + fi +else + RSYNCD_SYSCONF="/etc/rsyncd.conf" +fi + + + +cat >>confdefs.h <<_ACEOF +#define RSYNCD_SYSCONF "$RSYNCD_SYSCONF" +_ACEOF + + + +# Check whether --with-rsh was given. +if test "${with_rsh+set}" = set; then : + withval=$with_rsh; +fi + + +# Extract the first word of "remsh", so it can be a program name with args. +set dummy remsh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_HAVE_REMSH+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_REMSH"; then + ac_cv_prog_HAVE_REMSH="$HAVE_REMSH" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_HAVE_REMSH="1" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_HAVE_REMSH" && ac_cv_prog_HAVE_REMSH="0" +fi +fi +HAVE_REMSH=$ac_cv_prog_HAVE_REMSH +if test -n "$HAVE_REMSH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_REMSH" >&5 +$as_echo "$HAVE_REMSH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test x$HAVE_REMSH = x1; then + +$as_echo "#define HAVE_REMSH 1" >>confdefs.h + +fi + +if test x"$with_rsh" != x; then + RSYNC_RSH="$with_rsh" +else + RSYNC_RSH="ssh" +fi + +cat >>confdefs.h <<_ACEOF +#define RSYNC_RSH "$RSYNC_RSH" +_ACEOF + + +# Extract the first word of "yodl2man", so it can be a program name with args. +set dummy yodl2man; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_HAVE_YODL2MAN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_YODL2MAN"; then + ac_cv_prog_HAVE_YODL2MAN="$HAVE_YODL2MAN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_HAVE_YODL2MAN="1" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_HAVE_YODL2MAN" && ac_cv_prog_HAVE_YODL2MAN="0" +fi +fi +HAVE_YODL2MAN=$ac_cv_prog_HAVE_YODL2MAN +if test -n "$HAVE_YODL2MAN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_YODL2MAN" >&5 +$as_echo "$HAVE_YODL2MAN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test x$HAVE_YODL2MAN = x1; then + MAKE_MAN=man +else + MAKE_MAN=man-copy +fi + +# Some programs on solaris are only found in /usr/xpg4/bin (or work better than others versions). +# Extract the first word of "sh", so it can be a program name with args. +set dummy sh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SHELL_PATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SHELL_PATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SHELL_PATH="$SHELL_PATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /usr/xpg4/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SHELL_PATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_SHELL_PATH" && ac_cv_path_SHELL_PATH="/bin/sh" + ;; +esac +fi +SHELL_PATH=$ac_cv_path_SHELL_PATH +if test -n "$SHELL_PATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHELL_PATH" >&5 +$as_echo "$SHELL_PATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "fakeroot", so it can be a program name with args. +set dummy fakeroot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FAKEROOT_PATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FAKEROOT_PATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_FAKEROOT_PATH="$FAKEROOT_PATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /usr/xpg4/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FAKEROOT_PATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_FAKEROOT_PATH" && ac_cv_path_FAKEROOT_PATH="/usr/bin/fakeroot" + ;; +esac +fi +FAKEROOT_PATH=$ac_cv_path_FAKEROOT_PATH +if test -n "$FAKEROOT_PATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FAKEROOT_PATH" >&5 +$as_echo "$FAKEROOT_PATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +# Check whether --with-nobody-group was given. +if test "${with_nobody_group+set}" = set; then : + withval=$with_nobody_group; NOBODY_GROUP="$with_nobody_group" +fi + + +if test x"$with_nobody_group" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking the group for user \"nobody\"" >&5 +$as_echo_n "checking the group for user \"nobody\"... " >&6; } + if grep '^nobody:' /etc/group >/dev/null 2>&1; then + NOBODY_GROUP=nobody + elif grep '^nogroup:' /etc/group >/dev/null 2>&1; then + NOBODY_GROUP=nogroup + else + NOBODY_GROUP=nobody # test for others? + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NOBODY_GROUP" >&5 +$as_echo "$NOBODY_GROUP" >&6; } +fi + + +cat >>confdefs.h <<_ACEOF +#define NOBODY_USER "nobody" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define NOBODY_GROUP "$NOBODY_GROUP" +_ACEOF + + +# arrgh. libc in some old debian version screwed up the largefile +# stuff, getting byte range locking wrong + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken largefile support" >&5 +$as_echo_n "checking for broken largefile support... " >&6; } +if ${rsync_cv_HAVE_BROKEN_LARGEFILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_HAVE_BROKEN_LARGEFILE=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#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; + char tpl[32] = "/tmp/locktest.XXXXXX"; + int fd = mkstemp(tpl); + if (fd < 0) { + strcpy(tpl, "conftest.dat"); + fd = open(tpl, 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(tpl); + exit(WEXITSTATUS(status)); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_HAVE_BROKEN_LARGEFILE=yes +else + rsync_cv_HAVE_BROKEN_LARGEFILE=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_BROKEN_LARGEFILE" >&5 +$as_echo "$rsync_cv_HAVE_BROKEN_LARGEFILE" >&6; } +if test x"$rsync_cv_HAVE_BROKEN_LARGEFILE" != x"yes"; then + # Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + +fi + +ipv6type=unknown +ipv6lib=none +ipv6trylibc=yes + +# Check whether --enable-ipv6 was given. +if test "${enable_ipv6+set}" = set; then : + enableval=$enable_ipv6; +fi + +if test x"$enable_ipv6" != x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5 +$as_echo_n "checking ipv6 stack type... " >&6; } + for i in inria kame linux-glibc linux-inet6 solaris toshiba v6d zeta cygwin; do + case $i in + inria) + # http://www.kame.net/ + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <netinet/in.h> +#ifdef IPV6_INRIA_VERSION +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + +$as_echo "#define INET6 1" >>confdefs.h + + +fi +rm -f conftest* + + ;; + kame) + # http://www.kame.net/ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <netinet/in.h> +#ifdef __KAME__ +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + +$as_echo "#define INET6 1" >>confdefs.h + +fi +rm -f conftest* + + ;; + linux-glibc) + # http://www.v6.linux.or.jp/ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + +$as_echo "#define INET6 1" >>confdefs.h + +fi +rm -f conftest* + + ;; + 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; + +$as_echo "#define INET6 1" >>confdefs.h + + CFLAGS="-I/usr/inet6/include $CFLAGS" + fi + ;; + solaris) + # http://www.sun.com + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <netinet/ip6.h> +#ifdef __sun +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + +$as_echo "#define INET6 1" >>confdefs.h + +fi +rm -f conftest* + + ;; + toshiba) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/param.h> +#ifdef _TOSHIBA_INET6 +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + ipv6lib=inet6; + ipv6libdir=/usr/local/v6/lib; + +$as_echo "#define INET6 1" >>confdefs.h + +fi +rm -f conftest* + + ;; + v6d) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include </usr/local/v6/include/sys/v6config.h> +#ifdef __V6D__ +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + ipv6lib=v6; + ipv6libdir=/usr/local/v6/lib; + +$as_echo "#define INET6 1" >>confdefs.h + +fi +rm -f conftest* + + ;; + zeta) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/param.h> +#ifdef _ZETA_MINAMI_INET6 +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + ipv6lib=inet6; + ipv6libdir=/usr/local/v6/lib; + +$as_echo "#define INET6 1" >>confdefs.h + +fi +rm -f conftest* + + ;; + cygwin) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <netinet/in.h> +#ifdef _CYGWIN_IN6_H +yes +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ipv6type=$i; + +$as_echo "#define INET6 1" >>confdefs.h + +fi +rm -f conftest* + + ;; + esac + if test "$ipv6type" != "unknown"; then + break + fi + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5 +$as_echo "$ipv6type" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getaddrinfo" >&5 +$as_echo_n "checking for library containing getaddrinfo... " >&6; } +if ${ac_cv_search_getaddrinfo+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getaddrinfo (); +int +main () +{ +return getaddrinfo (); + ; + return 0; +} +_ACEOF +for ac_lib in '' inet6; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_getaddrinfo=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_getaddrinfo+:} false; then : + break +fi +done +if ${ac_cv_search_getaddrinfo+:} false; then : + +else + ac_cv_search_getaddrinfo=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getaddrinfo" >&5 +$as_echo "$ac_cv_search_getaddrinfo" >&6; } +ac_res=$ac_cv_search_getaddrinfo +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + +# Check whether --enable-locale was given. +if test "${enable_locale+set}" = set; then : + enableval=$enable_locale; +fi + + +if test x"$enable_locale" != x"no"; then + $as_echo "#define CONFIG_LOCALE 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to call shutdown on all sockets" >&5 +$as_echo_n "checking whether to call shutdown on all sockets... " >&6; } +case $host_os in + *cygwin* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define SHUTDOWN_ALL_SOCKETS 1" >>confdefs.h + + ;; + * ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; };; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/time.h> +#include <time.h> + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/wait.h> +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +for ac_header in 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 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 linux/falloc.h netinet/in_systm.h netinet/ip.h \ + zlib.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 +$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } +if ${ac_cv_header_sys_types_h_makedev+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +int +main () +{ +return makedev(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_header_sys_types_h_makedev=yes +else + ac_cv_header_sys_types_h_makedev=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 +$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } + +if test $ac_cv_header_sys_types_h_makedev = no; then +ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = xyes; then : + +$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h + +fi + + + + if test $ac_cv_header_sys_mkdev_h = no; then + ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then : + +$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h + +fi + + + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if makedev takes 3 args" >&5 +$as_echo_n "checking if makedev takes 3 args... " >&6; } +if ${rsync_cv_MAKEDEV_TAKES_3_ARGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_MAKEDEV_TAKES_3_ARGS=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> +#ifdef MAJOR_IN_MKDEV +#include <sys/mkdev.h> +# if !defined makedev && (defined mkdev || defined _WIN32 || defined __WIN32__) +# define makedev mkdev +# endif +#elif defined MAJOR_IN_SYSMACROS +#include <sys/sysmacros.h> +#endif + +int main(void) +{ + dev_t dev = makedev(0, 5, 7); + if (major(dev) != 5 || minor(dev) != 7) + exit(1); + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_MAKEDEV_TAKES_3_ARGS=yes +else + rsync_cv_MAKEDEV_TAKES_3_ARGS=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_MAKEDEV_TAKES_3_ARGS" >&5 +$as_echo "$rsync_cv_MAKEDEV_TAKES_3_ARGS" >&6; } +if test x"$rsync_cv_MAKEDEV_TAKES_3_ARGS" = x"yes"; then + +$as_echo "#define MAKEDEV_TAKES_3_ARGS 1" >>confdefs.h + +fi + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if ${ac_cv_sizeof_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if ${ac_cv_sizeof_short+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_short" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (short) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_short=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int16_t" >&5 +$as_echo_n "checking size of int16_t... " >&6; } +if ${ac_cv_sizeof_int16_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int16_t))" "ac_cv_sizeof_int16_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int16_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int16_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int16_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int16_t" >&5 +$as_echo "$ac_cv_sizeof_int16_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT16_T $ac_cv_sizeof_int16_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint16_t" >&5 +$as_echo_n "checking size of uint16_t... " >&6; } +if ${ac_cv_sizeof_uint16_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint16_t))" "ac_cv_sizeof_uint16_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_uint16_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (uint16_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_uint16_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint16_t" >&5 +$as_echo "$ac_cv_sizeof_uint16_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UINT16_T $ac_cv_sizeof_uint16_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int32_t" >&5 +$as_echo_n "checking size of int32_t... " >&6; } +if ${ac_cv_sizeof_int32_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int32_t))" "ac_cv_sizeof_int32_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int32_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int32_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int32_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int32_t" >&5 +$as_echo "$ac_cv_sizeof_int32_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT32_T $ac_cv_sizeof_int32_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint32_t" >&5 +$as_echo_n "checking size of uint32_t... " >&6; } +if ${ac_cv_sizeof_uint32_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint32_t))" "ac_cv_sizeof_uint32_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_uint32_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (uint32_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_uint32_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint32_t" >&5 +$as_echo "$ac_cv_sizeof_uint32_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UINT32_T $ac_cv_sizeof_uint32_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int64_t" >&5 +$as_echo_n "checking size of int64_t... " >&6; } +if ${ac_cv_sizeof_int64_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int64_t))" "ac_cv_sizeof_int64_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int64_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int64_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int64_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int64_t" >&5 +$as_echo "$ac_cv_sizeof_int64_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT64_T $ac_cv_sizeof_int64_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 +$as_echo_n "checking size of off_t... " >&6; } +if ${ac_cv_sizeof_off_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_off_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (off_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_off_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 +$as_echo "$ac_cv_sizeof_off_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_OFF_T $ac_cv_sizeof_off_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off64_t" >&5 +$as_echo_n "checking size of off64_t... " >&6; } +if ${ac_cv_sizeof_off64_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off64_t))" "ac_cv_sizeof_off64_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_off64_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (off64_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_off64_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off64_t" >&5 +$as_echo "$ac_cv_sizeof_off64_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_OFF64_T $ac_cv_sizeof_off64_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +$as_echo_n "checking size of time_t... " >&6; } +if ${ac_cv_sizeof_time_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_time_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (time_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_time_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +$as_echo "$ac_cv_sizeof_time_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_TIME_T $ac_cv_sizeof_time_t +_ACEOF + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 +$as_echo_n "checking for long double with more range or precision than double... " >&6; } +if ${ac_cv_type_long_double_wider+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> + long double const a[] = + { + 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, + LDBL_MIN, LDBL_MAX, LDBL_EPSILON + }; + long double + f (long double x) + { + return ((x + (unsigned long int) 10) * (-1 / x) + a[0] + + (x ? f (x) : 'c')); + } + +int +main () +{ +static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + + (DBL_MANT_DIG < LDBL_MANT_DIG) + - (LDBL_MAX_EXP < DBL_MAX_EXP) + - (LDBL_MANT_DIG < DBL_MANT_DIG))) + && (int) LDBL_EPSILON == 0 + )]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_long_double_wider=yes +else + ac_cv_type_long_double_wider=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 +$as_echo "$ac_cv_type_long_double_wider" >&6; } + if test $ac_cv_type_long_double_wider = yes; then + +$as_echo "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h + + fi + +ac_cv_c_long_double=$ac_cv_type_long_double_wider +if test $ac_cv_c_long_double = yes; then + +$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if ${ac_cv_type_uid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "uid_t" >/dev/null 2>&1; then : + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } +if test $ac_cv_type_uid_t = no; then + +$as_echo "#define uid_t int" >>confdefs.h + + +$as_echo "#define gid_t int" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_MODE_T 1 +_ACEOF + + +fi +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_OFF_T 1 +_ACEOF + + +fi +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SIZE_T 1 +_ACEOF + + +fi +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_PID_T 1 +_ACEOF + + +fi +ac_fn_c_check_type "$LINENO" "id_t" "ac_cv_type_id_t" "$ac_includes_default" +if test "x$ac_cv_type_id_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_ID_T 1 +_ACEOF + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 +$as_echo_n "checking type of array argument to getgroups... " >&6; } +if ${ac_cv_type_getgroups+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_type_getgroups=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Mike Rendell for this test. */ +$ac_includes_default +#define NGID 256 +#undef MAX +#define MAX(x, y) ((x) > (y) ? (x) : (y)) + +int +main () +{ + gid_t gidset[NGID]; + int i, n; + union { gid_t gval; long int lval; } val; + + val.lval = -1; + for (i = 0; i < NGID; i++) + gidset[i] = val.gval; + n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, + gidset); + /* Exit non-zero if getgroups seems to require an array of ints. This + happens when gid_t is short int but getgroups modifies an array + of ints. */ + return n > 0 && gidset[n] != val.gval; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_type_getgroups=gid_t +else + ac_cv_type_getgroups=int +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +if test $ac_cv_type_getgroups = cross; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then : + ac_cv_type_getgroups=gid_t +else + ac_cv_type_getgroups=int +fi +rm -f conftest* + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 +$as_echo "$ac_cv_type_getgroups" >&6; } + +cat >>confdefs.h <<_ACEOF +#define GETGROUPS_T $ac_cv_type_getgroups +_ACEOF + + +ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" " +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_rdev" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_RDEV 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_mtimensec" "ac_cv_member_struct_stat_st_mtimensec" " +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_mtimensec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_MTIMENSEC 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim.tv_nsec" "ac_cv_member_struct_stat_st_mtim_tv_nsec" " +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_mtim_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 +_ACEOF + + +fi + + + + ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h> +#include <sys/socket.h> +" +if test "x$ac_cv_type_socklen_t" = xyes; then : + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t equivalent" >&5 +$as_echo_n "checking for socklen_t equivalent... " >&6; } + if ${rsync_cv_socklen_t_equiv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + # Systems have either "struct sockaddr *" or + # "void *" as the second argument to getpeername + rsync_cv_socklen_t_equiv= + for arg2 in "struct sockaddr" void; do + for t in int size_t unsigned long "unsigned long"; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> +#include <sys/socket.h> + + int getpeername (int, $arg2 *, $t *); + +int +main () +{ + + $t len; + getpeername(0,0,&len); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + rsync_cv_socklen_t_equiv="$t" + break + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done + + if test "x$rsync_cv_socklen_t_equiv" = x; then + as_fn_error $? "Cannot find a type to use in place of socklen_t" "$LINENO" 5 + fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_socklen_t_equiv" >&5 +$as_echo "$rsync_cv_socklen_t_equiv" >&6; } + +cat >>confdefs.h <<_ACEOF +#define socklen_t $rsync_cv_socklen_t_equiv +_ACEOF + +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for errno in errno.h" >&5 +$as_echo_n "checking for errno in errno.h... " >&6; } +if ${rsync_cv_errno+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <errno.h> +int +main () +{ +int i = errno + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + rsync_cv_errno=yes +else + rsync_cv_have_errno_decl=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_errno" >&5 +$as_echo "$rsync_cv_errno" >&6; } +if test x"$rsync_cv_errno" = x"yes"; then + +$as_echo "#define HAVE_ERRNO_DECL 1" >>confdefs.h + +fi + +# The following test taken from the cvs sources +# If we can't find connect, try looking in -lsocket, -lnsl, and -linet. +# These need checks to be before checks for any other functions that +# might be in the same libraries. +# The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has +# libsocket.so which has a bad implementation of gethostbyname (it +# only looks in /etc/hosts), so we only look for -lsocket if we need +# it. +for ac_func in connect +do : + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CONNECT 1 +_ACEOF + +fi +done + +if test x"$ac_cv_func_connect" = x"no"; then + case "$LIBS" in + *-lnsl*) ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for printf in -lnsl_s" >&5 +$as_echo_n "checking for printf in -lnsl_s... " >&6; } +if ${ac_cv_lib_nsl_s_printf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl_s $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char printf (); +int +main () +{ +return printf (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_s_printf=yes +else + ac_cv_lib_nsl_s_printf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_s_printf" >&5 +$as_echo "$ac_cv_lib_nsl_s_printf" >&6; } +if test "x$ac_cv_lib_nsl_s_printf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNSL_S 1 +_ACEOF + + LIBS="-lnsl_s $LIBS" + +fi + ;; + esac + case "$LIBS" in + *-lnsl*) ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for printf in -lnsl" >&5 +$as_echo_n "checking for printf in -lnsl... " >&6; } +if ${ac_cv_lib_nsl_printf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char printf (); +int +main () +{ +return printf (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_printf=yes +else + ac_cv_lib_nsl_printf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_printf" >&5 +$as_echo "$ac_cv_lib_nsl_printf" >&6; } +if test "x$ac_cv_lib_nsl_printf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNSL 1 +_ACEOF + + LIBS="-lnsl $LIBS" + +fi + ;; + esac + case "$LIBS" in + *-lsocket*) ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if ${ac_cv_lib_socket_connect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSOCKET 1 +_ACEOF + + LIBS="-lsocket $LIBS" + +fi + ;; + esac + case "$LIBS" in + *-linet*) ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -linet" >&5 +$as_echo_n "checking for connect in -linet... " >&6; } +if ${ac_cv_lib_inet_connect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-linet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_inet_connect=yes +else + ac_cv_lib_inet_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_connect" >&5 +$as_echo "$ac_cv_lib_inet_connect" >&6; } +if test "x$ac_cv_lib_inet_connect" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBINET 1 +_ACEOF + + LIBS="-linet $LIBS" + +fi + ;; + esac + if test x"$ac_cv_lib_socket_connect" = x"yes" || + test x"$ac_cv_lib_inet_connect" = x"yes"; then + # ac_cv_func_connect=yes + # don't! it would cause AC_CHECK_FUNC to succeed next time configure is run + +$as_echo "#define HAVE_CONNECT 1" >>confdefs.h + + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop" >&5 +$as_echo_n "checking for library containing inet_ntop... " >&6; } +if ${ac_cv_search_inet_ntop+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_ntop (); +int +main () +{ +return inet_ntop (); + ; + return 0; +} +_ACEOF +for ac_lib in '' resolv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_inet_ntop=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_inet_ntop+:} false; then : + break +fi +done +if ${ac_cv_search_inet_ntop+:} false; then : + +else + ac_cv_search_inet_ntop=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntop" >&5 +$as_echo "$ac_cv_search_inet_ntop" >&6; } +ac_res=$ac_cv_search_inet_ntop +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + +# For OS X, Solaris, HP-UX, etc.: figure out if -liconv is needed. We'll +# accept either iconv_open or libiconv_open, since some include files map +# the former to the latter. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv_open" >&5 +$as_echo_n "checking for library containing iconv_open... " >&6; } +if ${ac_cv_search_iconv_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char iconv_open (); +int +main () +{ +return iconv_open (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_iconv_open=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_iconv_open+:} false; then : + break +fi +done +if ${ac_cv_search_iconv_open+:} false; then : + +else + ac_cv_search_iconv_open=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv_open" >&5 +$as_echo "$ac_cv_search_iconv_open" >&6; } +ac_res=$ac_cv_search_iconv_open +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv_open" >&5 +$as_echo_n "checking for library containing libiconv_open... " >&6; } +if ${ac_cv_search_libiconv_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char libiconv_open (); +int +main () +{ +return libiconv_open (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_libiconv_open=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_libiconv_open+:} false; then : + break +fi +done +if ${ac_cv_search_libiconv_open+:} false; then : + +else + ac_cv_search_libiconv_open=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv_open" >&5 +$as_echo "$ac_cv_search_libiconv_open" >&6; } +ac_res=$ac_cv_search_libiconv_open +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 +$as_echo_n "checking for iconv declaration... " >&6; } +if ${am_cv_proto_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdlib.h> +#include <iconv.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + am_cv_proto_iconv_arg1="" +else + am_cv_proto_iconv_arg1="const" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- + }$am_cv_proto_iconv" >&5 +$as_echo "${ac_t:- + }$am_cv_proto_iconv" >&6; } + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + + +ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" +if test "x$ac_cv_func_inet_ntop" = xyes; then : + $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" inet_ntop.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS inet_ntop.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" +if test "x$ac_cv_func_inet_pton" = xyes; then : + $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" inet_pton.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS inet_pton.$ac_objext" + ;; +esac + +fi + + + + + +cv=`echo "struct addrinfo" | sed 'y%./+- %__p__%'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct addrinfo" >&5 +$as_echo_n "checking for struct addrinfo... " >&6; } +if eval \${ac_cv_type_$cv+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +$ac_includes_default +#include <netdb.h> +int +main () +{ +struct addrinfo foo; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "ac_cv_type_$cv=yes" +else + eval "ac_cv_type_$cv=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_foo=`eval echo \\$ac_cv_type_$cv` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_foo" >&5 +$as_echo "$ac_foo" >&6; } +if test "$ac_foo" = yes; then + ac_tr_hdr=HAVE_`echo struct addrinfo | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'` +if false; then + ac_fn_c_check_type "$LINENO" "struct addrinfo" "ac_cv_type_struct_addrinfo" "$ac_includes_default" +if test "x$ac_cv_type_struct_addrinfo" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_ADDRINFO 1 +_ACEOF + + +fi + +fi + +cat >>confdefs.h <<_ACEOF +#define $ac_tr_hdr 1 +_ACEOF + +fi + + + +cv=`echo "struct sockaddr_storage" | sed 'y%./+- %__p__%'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sockaddr_storage" >&5 +$as_echo_n "checking for struct sockaddr_storage... " >&6; } +if eval \${ac_cv_type_$cv+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +$ac_includes_default +#include <sys/types.h> +#include <sys/socket.h> +int +main () +{ +struct sockaddr_storage foo; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "ac_cv_type_$cv=yes" +else + eval "ac_cv_type_$cv=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_foo=`eval echo \\$ac_cv_type_$cv` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_foo" >&5 +$as_echo "$ac_foo" >&6; } +if test "$ac_foo" = yes; then + ac_tr_hdr=HAVE_`echo struct sockaddr_storage | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'` +if false; then + ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" "$ac_includes_default" +if test "x$ac_cv_type_struct_sockaddr_storage" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_STORAGE 1 +_ACEOF + + +fi + +fi + +cat >>confdefs.h <<_ACEOF +#define $ac_tr_hdr 1 +_ACEOF + +fi + + +# Irix 6.5 has getaddrinfo but not the corresponding defines, so use +# builtin getaddrinfo if one of the defines don't exist +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether defines needed by getaddrinfo exist" >&5 +$as_echo_n "checking whether defines needed by getaddrinfo exist... " >&6; } +if ${rsync_cv_HAVE_GETADDR_DEFINES+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <sys/types.h> + #include <sys/socket.h> + #include <netdb.h> + #ifdef AI_PASSIVE + yes + #endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + rsync_cv_HAVE_GETADDR_DEFINES=yes +else + rsync_cv_HAVE_GETADDR_DEFINES=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_GETADDR_DEFINES" >&5 +$as_echo "$rsync_cv_HAVE_GETADDR_DEFINES" >&6; } +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. + for ac_func in getaddrinfo +do : + ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" +if test "x$ac_cv_func_getaddrinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETADDRINFO 1 +_ACEOF + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo by including <netdb.h>" >&5 +$as_echo_n "checking for getaddrinfo by including <netdb.h>... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/socket.h> + #include <netdb.h> +int +main () +{ +getaddrinfo(NULL, NULL, NULL, NULL); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + case " $LIBOBJS " in + *" getaddrinfo.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getaddrinfo.$ac_objext" + ;; +esac + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +done + + +else + case " $LIBOBJS " in + *" getaddrinfo.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getaddrinfo.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" " +#include <sys/types.h> +#include <sys/socket.h> + +" +if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then : + +$as_echo "#define HAVE_SOCKADDR_LEN 1" >>confdefs.h + +fi + + +ac_fn_c_check_member "$LINENO" "struct sockaddr_in" "sin_len" "ac_cv_member_struct_sockaddr_in_sin_len" " +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> + +" +if test "x$ac_cv_member_struct_sockaddr_in_sin_len" = xyes; then : + +$as_echo "#define HAVE_SOCKADDR_IN_LEN 1" >>confdefs.h + +fi + + +ac_fn_c_check_member "$LINENO" "struct sockaddr_un" "sun_len" "ac_cv_member_struct_sockaddr_un_sun_len" " +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> + +" +if test "x$ac_cv_member_struct_sockaddr_un_sun_len" = xyes; then : + +$as_echo "#define HAVE_SOCKADDR_UN_LEN 1" >>confdefs.h + +fi + + +ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_scope_id" "ac_cv_member_struct_sockaddr_in6_sin6_scope_id" " +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> + +" +if test "x$ac_cv_member_struct_sockaddr_in6_sin6_scope_id" = xyes; then : + +$as_echo "#define HAVE_SOCKADDR_IN6_SCOPE_ID 1" >>confdefs.h + +fi + + + + +cv=`echo "struct stat64" | sed 'y%./+- %__p__%'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5 +$as_echo_n "checking for struct stat64... " >&6; } +if eval \${ac_cv_type_$cv+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +$ac_includes_default +#include <stdio.h> +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#if HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#if STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# if HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif + +int +main () +{ +struct stat64 foo; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "ac_cv_type_$cv=yes" +else + eval "ac_cv_type_$cv=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_foo=`eval echo \\$ac_cv_type_$cv` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_foo" >&5 +$as_echo "$ac_foo" >&6; } +if test "$ac_foo" = yes; then + ac_tr_hdr=HAVE_`echo struct stat64 | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'` +if false; then + ac_fn_c_check_type "$LINENO" "struct stat64" "ac_cv_type_struct_stat64" "$ac_includes_default" +if test "x$ac_cv_type_struct_stat64" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT64 1 +_ACEOF + + +fi + +fi + +cat >>confdefs.h <<_ACEOF +#define $ac_tr_hdr 1 +_ACEOF + +fi + + +# if we can't find strcasecmp, look in -lresolv (for Unixware at least) +# +for ac_func in strcasecmp +do : + ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" +if test "x$ac_cv_func_strcasecmp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCASECMP 1 +_ACEOF + +fi +done + +if test x"$ac_cv_func_strcasecmp" = x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lresolv" >&5 +$as_echo_n "checking for strcasecmp in -lresolv... " >&6; } +if ${ac_cv_lib_resolv_strcasecmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lresolv $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strcasecmp (); +int +main () +{ +return strcasecmp (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_resolv_strcasecmp=yes +else + ac_cv_lib_resolv_strcasecmp=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_strcasecmp" >&5 +$as_echo "$ac_cv_lib_resolv_strcasecmp" >&6; } +if test "x$ac_cv_lib_resolv_strcasecmp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBRESOLV 1 +_ACEOF + + LIBS="-lresolv $LIBS" + +fi + +fi + +for ac_func in aclsort +do : + ac_fn_c_check_func "$LINENO" "aclsort" "ac_cv_func_aclsort" +if test "x$ac_cv_func_aclsort" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ACLSORT 1 +_ACEOF + +fi +done + +if test x"$ac_cv_func_aclsort" = x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for aclsort in -lsec" >&5 +$as_echo_n "checking for aclsort in -lsec... " >&6; } +if ${ac_cv_lib_sec_aclsort+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsec $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char aclsort (); +int +main () +{ +return aclsort (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_sec_aclsort=yes +else + ac_cv_lib_sec_aclsort=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_aclsort" >&5 +$as_echo "$ac_cv_lib_sec_aclsort" >&6; } +if test "x$ac_cv_lib_sec_aclsort" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEC 1 +_ACEOF + + LIBS="-lsec $LIBS" + +fi + +fi + + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether utime accepts a null argument" >&5 +$as_echo_n "checking whether utime accepts a null argument... " >&6; } +if ${ac_cv_func_utime_null+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.data; >conftest.data +# Sequent interprets utime(file, 0) to mean use start of epoch. Wrong. +if test "$cross_compiling" = yes; then : + ac_cv_func_utime_null='guessing yes' +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + #ifdef HAVE_UTIME_H + # include <utime.h> + #endif +int +main () +{ +struct stat s, t; + return ! (stat ("conftest.data", &s) == 0 + && utime ("conftest.data", 0) == 0 + && stat ("conftest.data", &t) == 0 + && t.st_mtime >= s.st_mtime + && t.st_mtime - s.st_mtime < 120); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_utime_null=yes +else + ac_cv_func_utime_null=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_utime_null" >&5 +$as_echo "$ac_cv_func_utime_null" >&6; } +if test "x$ac_cv_func_utime_null" != xno; then + ac_cv_func_utime_null=yes + +$as_echo "#define HAVE_UTIME_NULL 1" >>confdefs.h + +fi +rm -f conftest.data + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <alloca.h> +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + +for ac_func in 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 strpbrk \ + strlcat strlcpy strtol mallinfo getgroups setgroups geteuid getegid \ + setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ + seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \ + extattr_get_link sigaction sigprocmask setattrlist getgrouplist \ + initgroups utimensat posix_fallocate attropen setvbuf usleep +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +if test x"$ac_cv_func_iconv_open" != x"yes"; then + ac_fn_c_check_func "$LINENO" "libiconv_open" "ac_cv_func_libiconv_open" +if test "x$ac_cv_func_libiconv_open" = xyes; then : + ac_cv_func_iconv_open=yes; $as_echo "#define HAVE_ICONV_OPEN 1" >>confdefs.h + +fi + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for useable fallocate" >&5 +$as_echo_n "checking for useable fallocate... " >&6; } +if ${rsync_cv_have_fallocate+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fcntl.h> +#include <sys/types.h> +int +main () +{ +fallocate(0, 0, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + rsync_cv_have_fallocate=yes +else + rsync_cv_have_fallocate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_have_fallocate" >&5 +$as_echo "$rsync_cv_have_fallocate" >&6; } +if test x"$rsync_cv_have_fallocate" = x"yes"; then + +$as_echo "#define HAVE_FALLOCATE 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYS_fallocate" >&5 +$as_echo_n "checking for SYS_fallocate... " >&6; } +if ${rsync_cv_have_sys_fallocate+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/syscall.h> +#include <sys/types.h> +int +main () +{ +syscall(SYS_fallocate, 0, 0, (loff_t)0, (loff_t)0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + rsync_cv_have_sys_fallocate=yes +else + rsync_cv_have_sys_fallocate=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_have_sys_fallocate" >&5 +$as_echo "$rsync_cv_have_sys_fallocate" >&6; } +if test x"$rsync_cv_have_sys_fallocate" = x"yes"; then + +$as_echo "#define HAVE_SYS_FALLOCATE 1" >>confdefs.h + +fi + +if test x"$ac_cv_func_posix_fallocate" = x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_fallocate is efficient" >&5 +$as_echo_n "checking whether posix_fallocate is efficient... " >&6; } + case $host_os in + *cygwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_EFFICIENT_POSIX_FALLOCATE 1" >>confdefs.h + + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + +for ac_func in getpgrp tcgetpgrp +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test $ac_cv_func_getpgrp = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpgrp requires zero arguments" >&5 +$as_echo_n "checking whether getpgrp requires zero arguments... " >&6; } +if ${ac_cv_func_getpgrp_void+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Use it with a single arg. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +getpgrp (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_getpgrp_void=no +else + ac_cv_func_getpgrp_void=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5 +$as_echo "$ac_cv_func_getpgrp_void" >&6; } +if test $ac_cv_func_getpgrp_void = yes; then + +$as_echo "#define GETPGRP_VOID 1" >>confdefs.h + +fi + +fi + +# Check whether --enable-iconv-open was given. +if test "${enable_iconv_open+set}" = set; then : + enableval=$enable_iconv_open; +else + enable_iconv_open=$ac_cv_func_iconv_open +fi + + +if test x"$enable_iconv_open" != x"no"; then + +$as_echo "#define USE_ICONV_OPEN 1" >>confdefs.h + +fi + +# Check whether --enable-iconv was given. +if test "${enable_iconv+set}" = set; then : + enableval=$enable_iconv; +else + enable_iconv=$enable_iconv_open +fi + + +if test x"$enable_iconv" != x"no"; then + if test x"$enable_iconv" = x"yes"; then + $as_echo "#define ICONV_OPTION NULL" >>confdefs.h + + else + cat >>confdefs.h <<_ACEOF +#define ICONV_OPTION "$enable_iconv" +_ACEOF + + fi + +$as_echo "#define UTF8_CHARSET \"UTF-8\"" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether chown() modifies symlinks" >&5 +$as_echo_n "checking whether chown() modifies symlinks... " >&6; } +if ${rsync_cv_chown_modifies_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + rsync_cv_chown_modifies_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +#include <stdlib.h> +#include <errno.h> + main() { + char const *dangling_symlink = "conftest.dangle"; + unlink(dangling_symlink); + if (symlink("conftest.no-such", dangling_symlink) < 0) abort(); + if (chown(dangling_symlink, getuid(), getgid()) < 0 && errno == ENOENT) exit(1); + exit(0); + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_chown_modifies_symlink=yes +else + rsync_cv_chown_modifies_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_chown_modifies_symlink" >&5 +$as_echo "$rsync_cv_chown_modifies_symlink" >&6; } +if test $rsync_cv_chown_modifies_symlink = yes; then + +$as_echo "#define CHOWN_MODIFIES_SYMLINK 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether link() can hard-link symlinks" >&5 +$as_echo_n "checking whether link() can hard-link symlinks... " >&6; } +if ${rsync_cv_can_hardlink_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + rsync_cv_can_hardlink_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +#include <stdlib.h> +#include <errno.h> +#define FILENAME "conftest.dangle" + main() { + unlink(FILENAME); + if (symlink("conftest.no-such", FILENAME) < 0) abort(); + unlink(FILENAME "2"); + if (link(FILENAME, FILENAME "2") < 0) exit(1); + exit(0); + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_can_hardlink_symlink=yes +else + rsync_cv_can_hardlink_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_can_hardlink_symlink" >&5 +$as_echo "$rsync_cv_can_hardlink_symlink" >&6; } +if test $rsync_cv_can_hardlink_symlink = yes; then + +$as_echo "#define CAN_HARDLINK_SYMLINK 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether link() can hard-link special files" >&5 +$as_echo_n "checking whether link() can hard-link special files... " >&6; } +if ${rsync_cv_can_hardlink_special+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + rsync_cv_can_hardlink_special=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +#include <stdlib.h> +#include <errno.h> +#define FILENAME "conftest.fifi" + main() { + unlink(FILENAME); + if (mkfifo(FILENAME, 0777) < 0) abort(); + unlink(FILENAME "2"); + if (link(FILENAME, FILENAME "2") < 0) exit(1); + exit(0); + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_can_hardlink_special=yes +else + rsync_cv_can_hardlink_special=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_can_hardlink_special" >&5 +$as_echo "$rsync_cv_can_hardlink_special" >&6; } +if test $rsync_cv_can_hardlink_special = yes; then + +$as_echo "#define CAN_HARDLINK_SPECIAL 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working socketpair" >&5 +$as_echo_n "checking for working socketpair... " >&6; } +if ${rsync_cv_HAVE_SOCKETPAIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_HAVE_SOCKETPAIR=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> +#include <sys/socket.h> + +main() { + int fd[2]; + exit((socketpair(AF_UNIX, SOCK_STREAM, 0, fd) != -1) ? 0 : 1); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_HAVE_SOCKETPAIR=yes +else + rsync_cv_HAVE_SOCKETPAIR=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_SOCKETPAIR" >&5 +$as_echo "$rsync_cv_HAVE_SOCKETPAIR" >&6; } +if test x"$rsync_cv_HAVE_SOCKETPAIR" = x"yes"; then + +$as_echo "#define HAVE_SOCKETPAIR 1" >>confdefs.h + +fi + +ac_fn_c_check_func "$LINENO" "getpass" "ac_cv_func_getpass" +if test "x$ac_cv_func_getpass" = xyes; then : + $as_echo "#define HAVE_GETPASS 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" getpass.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getpass.$ac_objext" + ;; +esac + +fi + + + +if test x"$with_included_popt" != x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for poptGetContext in -lpopt" >&5 +$as_echo_n "checking for poptGetContext in -lpopt... " >&6; } +if ${ac_cv_lib_popt_poptGetContext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpopt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char poptGetContext (); +int +main () +{ +return poptGetContext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_popt_poptGetContext=yes +else + ac_cv_lib_popt_poptGetContext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptGetContext" >&5 +$as_echo "$ac_cv_lib_popt_poptGetContext" >&6; } +if test "x$ac_cv_lib_popt_poptGetContext" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPOPT 1 +_ACEOF + + LIBS="-lpopt $LIBS" + +else + with_included_popt=yes +fi + +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 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use included libpopt" >&5 +$as_echo_n "checking whether to use included libpopt... " >&6; } +if test x"$with_included_popt" = x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $srcdir/popt" >&5 +$as_echo "$srcdir/popt" >&6; } + BUILD_POPT='$(popt_OBJS)' + CFLAGS="-I$srcdir/popt $CFLAGS" + if test x"$ALLOCA" != x + then + # this can be removed when/if we add an included alloca.c; + # see autoconf documentation on AC_FUNC_ALLOCA + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: included libpopt will use malloc, not alloca (which wastes a small amount of memory)" >&5 +$as_echo "$as_me: WARNING: included libpopt will use malloc, not alloca (which wastes a small amount of memory)" >&2;} + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# We default to using our zlib unless --with-included-zlib=no is given. +if test x"$with_included_zlib" != x"no"; then + with_included_zlib=yes +elif test x"$ac_cv_header_zlib_h" != x"yes"; then + with_included_zlib=yes +fi +if test x"$with_included_zlib" != x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflateParams in -lz" >&5 +$as_echo_n "checking for deflateParams in -lz... " >&6; } +if ${ac_cv_lib_z_deflateParams+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char deflateParams (); +int +main () +{ +return deflateParams (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_deflateParams=yes +else + ac_cv_lib_z_deflateParams=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflateParams" >&5 +$as_echo "$ac_cv_lib_z_deflateParams" >&6; } +if test "x$ac_cv_lib_z_deflateParams" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBZ 1 +_ACEOF + + LIBS="-lz $LIBS" + +else + with_included_zlib=yes +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use included zlib" >&5 +$as_echo_n "checking whether to use included zlib... " >&6; } +if test x"$with_included_zlib" = x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $srcdir/zlib" >&5 +$as_echo "$srcdir/zlib" >&6; } + BUILD_ZLIB='$(zlib_OBJS)' + CFLAGS="-I$srcdir/zlib $CFLAGS" +else + +$as_echo "#define EXTERNAL_ZLIB 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned char" >&5 +$as_echo_n "checking for unsigned char... " >&6; } +if ${rsync_cv_SIGNED_CHAR_OK+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +signed char *s = "" + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + rsync_cv_SIGNED_CHAR_OK=yes +else + rsync_cv_SIGNED_CHAR_OK=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_SIGNED_CHAR_OK" >&5 +$as_echo "$rsync_cv_SIGNED_CHAR_OK" >&6; } +if test x"$rsync_cv_SIGNED_CHAR_OK" = x"yes"; then + +$as_echo "#define SIGNED_CHAR_OK 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken readdir" >&5 +$as_echo_n "checking for broken readdir... " >&6; } +if ${rsync_cv_HAVE_BROKEN_READDIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_HAVE_BROKEN_READDIR=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <dirent.h> +main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); +if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && +di->d_name[0] == 0) exit(0); exit(1);} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_HAVE_BROKEN_READDIR=yes +else + rsync_cv_HAVE_BROKEN_READDIR=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_BROKEN_READDIR" >&5 +$as_echo "$rsync_cv_HAVE_BROKEN_READDIR" >&6; } +if test x"$rsync_cv_HAVE_BROKEN_READDIR" = x"yes"; then + +$as_echo "#define HAVE_BROKEN_READDIR 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for utimbuf" >&5 +$as_echo_n "checking for utimbuf... " >&6; } +if ${rsync_cv_HAVE_STRUCT_UTIMBUF+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <utime.h> +int +main () +{ +struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + rsync_cv_HAVE_STRUCT_UTIMBUF=yes +else + rsync_cv_HAVE_STRUCT_UTIMBUF=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_STRUCT_UTIMBUF" >&5 +$as_echo "$rsync_cv_HAVE_STRUCT_UTIMBUF" >&6; } +if test x"$rsync_cv_HAVE_STRUCT_UTIMBUF" = x"yes"; then + +$as_echo "#define HAVE_STRUCT_UTIMBUF 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if gettimeofday takes tz argument" >&5 +$as_echo_n "checking if gettimeofday takes tz argument... " >&6; } +if ${rsync_cv_HAVE_GETTIMEOFDAY_TZ+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> +#include <unistd.h> +int +main () +{ +struct timeval tv; exit(gettimeofday(&tv, NULL)); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + rsync_cv_HAVE_GETTIMEOFDAY_TZ=yes +else + rsync_cv_HAVE_GETTIMEOFDAY_TZ=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_GETTIMEOFDAY_TZ" >&5 +$as_echo "$rsync_cv_HAVE_GETTIMEOFDAY_TZ" >&6; } +if test x"$rsync_cv_HAVE_GETTIMEOFDAY_TZ" != x"no"; then + +$as_echo "#define HAVE_GETTIMEOFDAY_TZ 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C99 vsnprintf" >&5 +$as_echo_n "checking for C99 vsnprintf... " >&6; } +if ${rsync_cv_HAVE_C99_VSNPRINTF+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_HAVE_C99_VSNPRINTF=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> +#include <stdarg.h> +void foo(const char *format, ...) { + va_list ap; + int len; + char buf[5]; + + va_start(ap, format); + len = vsnprintf(0, 0, format, ap); + va_end(ap); + if (len != 5) exit(1); + + if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1); + + exit(0); +} +main() { foo("hello"); } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_HAVE_C99_VSNPRINTF=yes +else + rsync_cv_HAVE_C99_VSNPRINTF=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_C99_VSNPRINTF" >&5 +$as_echo "$rsync_cv_HAVE_C99_VSNPRINTF" >&6; } +if test x"$rsync_cv_HAVE_C99_VSNPRINTF" = x"yes"; then + +$as_echo "#define HAVE_C99_VSNPRINTF 1" >>confdefs.h + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for secure mkstemp" >&5 +$as_echo_n "checking for secure mkstemp... " >&6; } +if ${rsync_cv_HAVE_SECURE_MKSTEMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_HAVE_SECURE_MKSTEMP=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +main() { + struct stat st; + char tpl[20]="/tmp/test.XXXXXX"; + int fd = mkstemp(tpl); + if (fd == -1) exit(1); + unlink(tpl); + if (fstat(fd, &st) != 0) exit(1); + if ((st.st_mode & 0777) != 0600) exit(1); + exit(0); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_HAVE_SECURE_MKSTEMP=yes +else + rsync_cv_HAVE_SECURE_MKSTEMP=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_HAVE_SECURE_MKSTEMP" >&5 +$as_echo "$rsync_cv_HAVE_SECURE_MKSTEMP" >&6; } +if test x"$rsync_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then + case $host_os in + hpux*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Skipping broken HP-UX mkstemp() -- using mktemp() instead" >&5 +$as_echo "$as_me: WARNING: Skipping broken HP-UX mkstemp() -- using mktemp() instead" >&2;} + ;; + *) + +$as_echo "#define HAVE_SECURE_MKSTEMP 1" >>confdefs.h + + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if mknod creates FIFOs" >&5 +$as_echo_n "checking if mknod creates FIFOs... " >&6; } +if ${rsync_cv_MKNOD_CREATES_FIFOS+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_MKNOD_CREATES_FIFOS=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <sys/stat.h> +#include <errno.h> +main() { int rc, ec; char *fn = "fifo-test"; +unlink(fn); rc = mknod(fn,S_IFIFO,0600); ec = errno; unlink(fn); +if (rc) {printf("(%d %d) ",rc,ec); return ec;} +return 0;} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_MKNOD_CREATES_FIFOS=yes +else + rsync_cv_MKNOD_CREATES_FIFOS=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_MKNOD_CREATES_FIFOS" >&5 +$as_echo "$rsync_cv_MKNOD_CREATES_FIFOS" >&6; } +if test x"$rsync_cv_MKNOD_CREATES_FIFOS" = x"yes"; then + +$as_echo "#define MKNOD_CREATES_FIFOS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if mknod creates sockets" >&5 +$as_echo_n "checking if mknod creates sockets... " >&6; } +if ${rsync_cv_MKNOD_CREATES_SOCKETS+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + rsync_cv_MKNOD_CREATES_SOCKETS=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <sys/stat.h> +#include <errno.h> +main() { int rc, ec; char *fn = "sock-test"; +unlink(fn); rc = mknod(fn,S_IFSOCK,0600); ec = errno; unlink(fn); +if (rc) {printf("(%d %d) ",rc,ec); return ec;} +return 0;} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + rsync_cv_MKNOD_CREATES_SOCKETS=yes +else + rsync_cv_MKNOD_CREATES_SOCKETS=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_MKNOD_CREATES_SOCKETS" >&5 +$as_echo "$rsync_cv_MKNOD_CREATES_SOCKETS" >&6; } +if test x"$rsync_cv_MKNOD_CREATES_SOCKETS" = x"yes"; then + +$as_echo "#define MKNOD_CREATES_SOCKETS 1" >>confdefs.h + +fi + +# +# The following test was mostly taken from the tcl/tk plus patches +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -c -o works" >&5 +$as_echo_n "checking whether -c -o works... " >&6; } +if ${rsync_cv_DASHC_WORKS_WITH_DASHO+:} false; then : + $as_echo_n "(cached) " >&6 +else + +rm -rf conftest* +cat > conftest.$ac_ext <<EOF +int main() { return 0; } +EOF +${CC-cc} -c -o conftest..o conftest.$ac_ext +if test -f conftest..o; then + rsync_cv_DASHC_WORKS_WITH_DASHO=yes +else + rsync_cv_DASHC_WORKS_WITH_DASHO=no +fi +rm -rf conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_cv_DASHC_WORKS_WITH_DASHO" >&5 +$as_echo "$rsync_cv_DASHC_WORKS_WITH_DASHO" >&6; } +if test x"$rsync_cv_DASHC_WORKS_WITH_DASHO" = x"yes"; then + OBJ_SAVE="#" + OBJ_RESTORE="#" + CC_SHOBJ_FLAG='-o $@' +else + OBJ_SAVE=' @b=`basename $@ .o`;rm -f $$b.o.sav;if test -f $$b.o; then mv $$b.o $$b.o.sav;fi;' + OBJ_RESTORE=' @b=`basename $@ .o`;if test "$$b.o" != "$@"; then mv $$b.o $@; if test -f $$b.o.sav; then mv $$b.o.sav $$b.o; fi; fi' + CC_SHOBJ_FLAG="" +fi + + + + + + + + +# Extract the first word of "stunnel", so it can be a program name with args. +set dummy stunnel; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STUNNEL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STUNNEL in + [\\/]* | ?:[\\/]*) + ac_cv_path_STUNNEL="$STUNNEL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STUNNEL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_STUNNEL" && ac_cv_path_STUNNEL="stunnel" + ;; +esac +fi +STUNNEL=$ac_cv_path_STUNNEL +if test -n "$STUNNEL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STUNNEL" >&5 +$as_echo "$STUNNEL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "stunnel4", so it can be a program name with args. +set dummy stunnel4; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STUNNEL4+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STUNNEL4 in + [\\/]* | ?:[\\/]*) + ac_cv_path_STUNNEL4="$STUNNEL4" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STUNNEL4="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_STUNNEL4" && ac_cv_path_STUNNEL4="$STUNNEL" + ;; +esac +fi +STUNNEL4=$ac_cv_path_STUNNEL4 +if test -n "$STUNNEL4"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STUNNEL4" >&5 +$as_echo "$STUNNEL4" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +for ac_func in _acl __acl _facl __facl +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +################################################# +# check for ACL support + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support ACLs" >&5 +$as_echo_n "checking whether to support ACLs... " >&6; } +# Check whether --enable-acl-support was given. +if test "${enable_acl_support+set}" = set; then : + enableval=$enable_acl_support; +fi + + +if test x"$enable_acl_support" = x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + case "$host_os" in + *sysv5*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using UnixWare ACLs" >&5 +$as_echo "Using UnixWare ACLs" >&6; } + +$as_echo "#define HAVE_UNIXWARE_ACLS 1" >>confdefs.h + + +$as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + ;; + solaris*|*cygwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using solaris ACLs" >&5 +$as_echo "Using solaris ACLs" >&6; } + +$as_echo "#define HAVE_SOLARIS_ACLS 1" >>confdefs.h + + $as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + ;; + *hpux*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using HPUX ACLs" >&5 +$as_echo "Using HPUX ACLs" >&6; } + +$as_echo "#define HAVE_HPUX_ACLS 1" >>confdefs.h + + $as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + ;; + *irix*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using IRIX ACLs" >&5 +$as_echo "Using IRIX ACLs" >&6; } + +$as_echo "#define HAVE_IRIX_ACLS 1" >>confdefs.h + + $as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + ;; + *aix*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using AIX ACLs" >&5 +$as_echo "Using AIX ACLs" >&6; } + +$as_echo "#define HAVE_AIX_ACLS 1" >>confdefs.h + + $as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + ;; + *osf*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using Tru64 ACLs" >&5 +$as_echo "Using Tru64 ACLs" >&6; } + +$as_echo "#define HAVE_TRU64_ACLS 1" >>confdefs.h + + $as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + LIBS="$LIBS -lpacl" + ;; + darwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using OS X ACLs" >&5 +$as_echo "Using OS X ACLs" >&6; } + +$as_echo "#define HAVE_OSX_ACLS 1" >>confdefs.h + + $as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: running tests:" >&5 +$as_echo "running tests:" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get_file in -lacl" >&5 +$as_echo_n "checking for acl_get_file in -lacl... " >&6; } +if ${ac_cv_lib_acl_acl_get_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lacl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char acl_get_file (); +int +main () +{ +return acl_get_file (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_acl_acl_get_file=yes +else + ac_cv_lib_acl_acl_get_file=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_acl_get_file" >&5 +$as_echo "$ac_cv_lib_acl_acl_get_file" >&6; } +if test "x$ac_cv_lib_acl_acl_get_file" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBACL 1 +_ACEOF + + LIBS="-lacl $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ACL support" >&5 +$as_echo_n "checking for ACL support... " >&6; } +if ${samba_cv_HAVE_POSIX_ACLS+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/acl.h> +int +main () +{ + acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + samba_cv_HAVE_POSIX_ACLS=yes +else + samba_cv_HAVE_POSIX_ACLS=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $samba_cv_HAVE_POSIX_ACLS" >&5 +$as_echo "$samba_cv_HAVE_POSIX_ACLS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking ACL test results" >&5 +$as_echo_n "checking ACL test results... " >&6; } + if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using posix ACLs" >&5 +$as_echo "Using posix ACLs" >&6; } + +$as_echo "#define HAVE_POSIX_ACLS 1" >>confdefs.h + + $as_echo "#define SUPPORT_ACLS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get_perm_np" >&5 +$as_echo_n "checking for acl_get_perm_np... " >&6; } +if ${samba_cv_HAVE_ACL_GET_PERM_NP+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/acl.h> +int +main () +{ + acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + samba_cv_HAVE_ACL_GET_PERM_NP=yes +else + samba_cv_HAVE_ACL_GET_PERM_NP=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $samba_cv_HAVE_ACL_GET_PERM_NP" >&5 +$as_echo "$samba_cv_HAVE_ACL_GET_PERM_NP" >&6; } + if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then + +$as_echo "#define HAVE_ACL_GET_PERM_NP 1" >>confdefs.h + + fi + else + if test x"$enable_acl_support" = x"yes"; then + as_fn_error $? "Failed to find ACL support" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: No ACL support found" >&5 +$as_echo "No ACL support found" >&6; } + fi + fi + ;; + esac +fi + +################################################# +# check for extended attribute support +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support extended attributes" >&5 +$as_echo_n "checking whether to support extended attributes... " >&6; } +# Check whether --enable-xattr-support was given. +if test "${enable_xattr_support+set}" = set; then : + enableval=$enable_xattr_support; +else + case "$ac_cv_func_getxattr$ac_cv_func_extattr_get_link$ac_cv_func_attropen" in + *yes*) enable_xattr_support=maybe ;; + *) enable_xattr_support=no ;; + esac +fi + + +if test x"$enable_xattr_support" = x"no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + case "$host_os" in + *linux*|*netbsd*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using Linux xattrs" >&5 +$as_echo "Using Linux xattrs" >&6; } + +$as_echo "#define HAVE_LINUX_XATTRS 1" >>confdefs.h + + $as_echo "#define SUPPORT_XATTRS 1" >>confdefs.h + + +$as_echo "#define NO_SYMLINK_USER_XATTRS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getxattr in -lattr" >&5 +$as_echo_n "checking for getxattr in -lattr... " >&6; } +if ${ac_cv_lib_attr_getxattr+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lattr $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getxattr (); +int +main () +{ +return getxattr (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_attr_getxattr=yes +else + ac_cv_lib_attr_getxattr=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_getxattr" >&5 +$as_echo "$ac_cv_lib_attr_getxattr" >&6; } +if test "x$ac_cv_lib_attr_getxattr" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBATTR 1 +_ACEOF + + LIBS="-lattr $LIBS" + +fi + + ;; + darwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using OS X xattrs" >&5 +$as_echo "Using OS X xattrs" >&6; } + +$as_echo "#define HAVE_OSX_XATTRS 1" >>confdefs.h + + $as_echo "#define SUPPORT_XATTRS 1" >>confdefs.h + + +$as_echo "#define NO_DEVICE_XATTRS 1" >>confdefs.h + + +$as_echo "#define NO_SPECIAL_XATTRS 1" >>confdefs.h + + ;; + freebsd*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using FreeBSD extattrs" >&5 +$as_echo "Using FreeBSD extattrs" >&6; } + +$as_echo "#define HAVE_FREEBSD_XATTRS 1" >>confdefs.h + + $as_echo "#define SUPPORT_XATTRS 1" >>confdefs.h + + ;; + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using Solaris xattrs" >&5 +$as_echo "Using Solaris xattrs" >&6; } + +$as_echo "#define HAVE_SOLARIS_XATTRS 1" >>confdefs.h + + $as_echo "#define SUPPORT_XATTRS 1" >>confdefs.h + + +$as_echo "#define NO_SYMLINK_XATTRS 1" >>confdefs.h + + ;; + *) + if test x"$enable_xattr_support" = x"yes"; then + as_fn_error $? "Failed to find extended attribute support" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: No extended attribute support found" >&5 +$as_echo "No extended attribute support found" >&6; } + 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wno-unused-parameter" >&5 +$as_echo_n "checking whether $CC supports -Wno-unused-parameter... " >&6; } + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-unused-parameter" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +printf("hello\n"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + rsync_warn_flag=yes +else + rsync_warn_flag=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rsync_warn_flag" >&5 +$as_echo "$rsync_warn_flag" >&6; } + if test x"$rsync_warn_flag" = x"no"; then + CFLAGS="$OLD_CFLAGS" + fi +fi + +case "$CC" in +' checker'*|checker*) + +$as_echo "#define FORCE_FD_ZERO_MEMSET 1" >>confdefs.h + + ;; +esac + +ac_config_files="$ac_config_files Makefile lib/dummy zlib/dummy popt/dummy shconfig" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by rsync $as_me 3.1.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to <http://rsync.samba.org/bugzilla.html>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +rsync config.status 3.1.2 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "lib/dummy") CONFIG_FILES="$CONFIG_FILES lib/dummy" ;; + "zlib/dummy") CONFIG_FILES="$CONFIG_FILES zlib/dummy" ;; + "popt/dummy") CONFIG_FILES="$CONFIG_FILES popt/dummy" ;; + "shconfig") CONFIG_FILES="$CONFIG_FILES shconfig" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: rsync ${RSYNC_VERSION} configuration successful" >&5 +$as_echo " rsync ${RSYNC_VERSION} configuration successful" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } +if test x$HAVE_YODL2MAN != x1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Note that yodl2man was not found, so pre-existing manpage files will be" >&5 +$as_echo " Note that yodl2man was not found, so pre-existing manpage files will be" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: used w/o change (if available) -- no .yo file changes will be used." >&5 +$as_echo " used w/o change (if available) -- no .yo file changes will be used." >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } +fi @@ -4,7 +4,7 @@ * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -2,7 +2,7 @@ * Error codes returned by rsync. * * Copyright (C) 1998-2000 Andrew Tridgell - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -4,7 +4,7 @@ * Copyright (C) 1996-2001 Andrew Tridgell <tridge@samba.org> * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2002 Martin Pool - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -100,52 +100,44 @@ static int mergelist_size = 0; static void teardown_mergelist(filter_rule *ex) { + int j; + + if (!ex->u.mergelist) + return; + if (DEBUG_GTE(FILTER, 2)) { rprintf(FINFO, "[%s] deactivating mergelist #%d%s\n", who_am_i(), mergelist_cnt - 1, ex->u.mergelist->debug_type); } - /* We should deactivate mergelists in LIFO order. */ - assert(mergelist_cnt > 0); - assert(ex == mergelist_parents[mergelist_cnt - 1]); - - /* The parent_dirscan filters should have been freed. */ - assert(ex->u.mergelist->parent_dirscan_head == NULL); - free(ex->u.mergelist->debug_type); free(ex->u.mergelist); - mergelist_cnt--; + + for (j = 0; j < mergelist_cnt; j++) { + if (mergelist_parents[j] == ex) { + mergelist_parents[j] = NULL; + break; + } + } + while (mergelist_cnt && mergelist_parents[mergelist_cnt-1] == NULL) + mergelist_cnt--; } static void free_filter(filter_rule *ex) { + if (ex->rflags & FILTRULE_PERDIR_MERGE) + teardown_mergelist(ex); free(ex->pattern); free(ex); } -static void free_filters(filter_rule *head) +static void free_filters(filter_rule *ent) { - filter_rule *rev_head = NULL; - - /* Reverse the list so we deactivate mergelists in the proper LIFO - * order. */ - while (head) { - filter_rule *next = head->next; - head->next = rev_head; - rev_head = head; - head = next; - } - - while (rev_head) { - filter_rule *prev = rev_head->next; - /* Tear down mergelists here, not in free_filter, so that we - * affect only real filter lists and not temporarily allocated - * filters. */ - if (rev_head->rflags & FILTRULE_PERDIR_MERGE) - teardown_mergelist(rev_head); - free_filter(rev_head); - rev_head = prev; + while (ent) { + filter_rule *next = ent->next; + free_filter(ent); + ent = next; } } @@ -252,7 +244,10 @@ static void add_rule(filter_rule_list *listp, const char *pat, unsigned int pat_ * add it again. */ for (i = 0; i < mergelist_cnt; i++) { filter_rule *ex = mergelist_parents[i]; - const char *s = strrchr(ex->pattern, '/'); + const char *s; + if (!ex) + continue; + s = strrchr(ex->pattern, '/'); if (s) s++; else @@ -264,9 +259,8 @@ static void add_rule(filter_rule_list *listp, const char *pat, unsigned int pat_ } } - if (!(lp = new_array(filter_rule_list, 1))) + if (!(lp = new_array0(filter_rule_list, 1))) out_of_memory("add_rule"); - lp->head = lp->tail = lp->parent_dirscan_head = NULL; if (asprintf(&lp->debug_type, " [per-dir %s]", cp) < 0) out_of_memory("add_rule"); rule->u.mergelist = lp; @@ -297,16 +291,23 @@ static void add_rule(filter_rule_list *listp, const char *pat, unsigned int pat_ } } -static void clear_filter_list(filter_rule_list *listp) +/* This frees any non-inherited items, leaving just inherited items on the list. */ +static void pop_filter_list(filter_rule_list *listp) { - if (listp->tail) { - /* Truncate any inherited items from the local list. */ - listp->tail->next = NULL; - /* Now free everything that is left. */ - free_filters(listp->head); - } + filter_rule *inherited; + + if (!listp->tail) + return; - listp->head = listp->tail = NULL; + inherited = listp->tail->next; + + /* Truncate any inherited items from the local list. */ + listp->tail->next = NULL; + /* Now free everything that is left. */ + free_filters(listp->head); + + listp->head = inherited; + listp->tail = NULL; } /* This returns an expanded (absolute) filename for the merge-file name if @@ -457,8 +458,6 @@ static BOOL setup_merge_file(int mergelist_num, filter_rule *ex, strlcpy(y, save, MAXPATHLEN); while ((*x++ = *y++) != '/') {} } - /* Save current head for freeing when the mergelist becomes inactive. */ - lp->parent_dirscan_head = lp->head; parent_dirscan = False; if (DEBUG_GTE(FILTER, 2)) { rprintf(FINFO, "[%s] completed parent_dirscan for mergelist #%d%s\n", @@ -501,15 +500,20 @@ void *push_local_filters(const char *dir, unsigned int dirlen) push->mergelist_cnt = mergelist_cnt; for (i = 0; i < mergelist_cnt; i++) { - memcpy(&push->mergelists[i], mergelist_parents[i]->u.mergelist, - sizeof (filter_rule_list)); + filter_rule *ex = mergelist_parents[i]; + if (!ex) + continue; + memcpy(&push->mergelists[i], ex->u.mergelist, sizeof (filter_rule_list)); } /* Note: parse_filter_file() might increase mergelist_cnt, so keep * this loop separate from the above loop. */ for (i = 0; i < mergelist_cnt; i++) { filter_rule *ex = mergelist_parents[i]; - filter_rule_list *lp = ex->u.mergelist; + filter_rule_list *lp; + if (!ex) + continue; + lp = ex->u.mergelist; if (DEBUG_GTE(FILTER, 2)) { rprintf(FINFO, "[%s] pushing mergelist #%d%s\n", @@ -553,44 +557,38 @@ void pop_local_filters(void *mem) for (i = mergelist_cnt; i-- > 0; ) { filter_rule *ex = mergelist_parents[i]; - filter_rule_list *lp = ex->u.mergelist; + filter_rule_list *lp; + if (!ex) + continue; + lp = ex->u.mergelist; if (DEBUG_GTE(FILTER, 2)) { rprintf(FINFO, "[%s] popping mergelist #%d%s\n", who_am_i(), i, lp->debug_type); } - clear_filter_list(lp); - - if (i >= old_mergelist_cnt) { - /* This mergelist does not exist in the state to be - * restored. Free its parent_dirscan list to clean up - * any per-dir mergelists defined there so we don't - * crash trying to restore nonexistent state for them - * below. (Counterpart to setup_merge_file call in - * push_local_filters. Must be done here, not in - * free_filter, for LIFO order.) */ + pop_filter_list(lp); + if (i >= old_mergelist_cnt && lp->head) { + /* This mergelist does not exist in the state to be restored, but it + * still has inherited rules. This can sometimes happen if a per-dir + * merge file calls setup_merge_file() in push_local_filters() and that + * leaves some inherited rules that aren't in the pushed list state. */ if (DEBUG_GTE(FILTER, 2)) { rprintf(FINFO, "[%s] freeing parent_dirscan filters of mergelist #%d%s\n", who_am_i(), i, ex->u.mergelist->debug_type); } - free_filters(lp->parent_dirscan_head); - lp->parent_dirscan_head = NULL; + pop_filter_list(lp); } } - /* If we cleaned things up properly, the only still-active mergelists - * should be those with a state to be restored. */ - assert(mergelist_cnt == old_mergelist_cnt); - - if (!pop) { - /* No state to restore. */ - return; - } + if (!pop) + return; /* No state to restore. */ - for (i = 0; i < mergelist_cnt; i++) { - memcpy(mergelist_parents[i]->u.mergelist, &pop->mergelists[i], - sizeof (filter_rule_list)); + for (i = 0; i < old_mergelist_cnt; i++) { + filter_rule *ex = mergelist_parents[i]; + if (!ex) + continue; + memcpy(ex->u.mergelist, &pop->mergelists[i], sizeof (filter_rule_list)); } free(pop); @@ -872,7 +870,7 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr, switch (ch) { case ':': rule->rflags |= FILTRULE_PERDIR_MERGE - | FILTRULE_FINISH_SETUP; + | FILTRULE_FINISH_SETUP; /* FALL THROUGH */ case '.': rule->rflags |= FILTRULE_MERGE_FILE; @@ -1093,7 +1091,8 @@ void parse_filter_str(filter_rule_list *listp, const char *rulestr, "[%s] clearing filter list%s\n", who_am_i(), listp->debug_type); } - clear_filter_list(listp); + pop_filter_list(listp); + listp->head = NULL; goto free_continue; } @@ -3,7 +3,7 @@ * * Copyright (C) 1998 Andrew Tridgell * Copyright (C) 2002 Martin Pool - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -4,7 +4,7 @@ * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2002-2014 Wayne Davison + * Copyright (C) 2002-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -2435,8 +2435,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) return flist; } -struct file_list *recv_file_list(int f) +struct file_list *recv_file_list(int f, int dir_ndx) { + const char *good_dirname = NULL; struct file_list *flist; int dstart, flags; int64 start_read; @@ -2492,6 +2493,23 @@ struct file_list *recv_file_list(int f) flist_expand(flist, 1); file = recv_file_entry(f, flist, flags); + if (inc_recurse) { + static const char empty_dir[] = "\0"; + const char *cur_dir = file->dirname ? file->dirname : empty_dir; + if (relative_paths && *cur_dir == '/') + cur_dir++; + if (cur_dir != good_dirname) { + const char *d = dir_ndx >= 0 ? f_name(dir_flist->files[dir_ndx], NULL) : empty_dir; + if (strcmp(cur_dir, d) != 0) { + rprintf(FERROR, + "ABORTING due to invalid path from sender: %s/%s\n", + cur_dir, file->basename); + exit_cleanup(RERR_PROTOCOL); + } + good_dirname = cur_dir; + } + } + if (S_ISREG(file->mode)) { /* Already counted */ } else if (S_ISDIR(file->mode)) { @@ -2615,7 +2633,7 @@ void recv_additional_file_list(int f) rprintf(FINFO, "[%s] receiving flist for dir %d\n", who_am_i(), ndx); } - flist = recv_file_list(f); + flist = recv_file_list(f, ndx); flist->parent_ndx = ndx; } } @@ -2671,6 +2689,34 @@ int flist_find(struct file_list *flist, struct file_struct *f) return -1; } +/* Search for a name in the file list. You must specify want_dir_match as: + * 1=match directories, 0=match non-directories, or -1=match either. */ +int flist_find_name(struct file_list *flist, const char *fname, int want_dir_match) +{ + struct { /* We have to create a temporary file_struct for the search. */ + struct file_struct f; + char name_space[MAXPATHLEN]; + } t; + char fbuf[MAXPATHLEN]; + const char *slash = strrchr(fname, '/'); + const char *basename = slash ? slash+1 : fname; + + memset(&t.f, 0, FILE_STRUCT_LEN); + memcpy((void *)t.f.basename, basename, strlen(basename)+1); + + if (slash) { + strlcpy(fbuf, fname, slash - fname + 1); + t.f.dirname = fbuf; + } else + t.f.dirname = NULL; + + t.f.mode = want_dir_match > 0 ? S_IFDIR : S_IFREG; + + if (want_dir_match < 0) + return flist_find_ignore_dirness(flist, &t.f); + return flist_find(flist, &t.f); +} + /* Search for an identically-named item in the file list. Differs from * flist_find in that an item that agrees with "f" in directory-ness is * preferred but one that does not is still found. */ diff --git a/generator.c b/generator.c index 91009a53..ddf44a02 100644 --- a/generator.c +++ b/generator.c @@ -4,7 +4,7 @@ * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -895,23 +895,21 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, } while (basis_dir[++j] != NULL); if (!match_level) - return -1; + goto got_nothing_for_ya; if (j != best_match) { j = best_match; pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname); if (link_stat(cmpbuf, &sxp->st, 0) < 0) - return -1; + goto got_nothing_for_ya; } if (match_level == 3 && !copy_dest) { if (find_exact_for_existing) { if (link_dest && real_st.st_dev == sxp->st.st_dev && real_st.st_ino == sxp->st.st_ino) return -1; - if (do_unlink(fname) < 0 && errno != ENOENT) { - sxp->st = real_st; - return -1; - } + if (do_unlink(fname) < 0 && errno != ENOENT) + goto got_nothing_for_ya; } #ifdef SUPPORT_HARD_LINKS if (link_dest) { @@ -935,10 +933,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, return -2; } - if (find_exact_for_existing) { - sxp->st = real_st; - return -1; - } + if (find_exact_for_existing) + goto got_nothing_for_ya; if (match_level >= 2) { #ifdef SUPPORT_HARD_LINKS @@ -946,7 +942,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, #endif if (!dry_run && copy_altdest_file(cmpbuf, fname, file) < 0) { if (find_exact_for_existing) /* Can get here via hard-link failure */ - sxp->st = real_st; + goto got_nothing_for_ya; return -1; } if (itemizing) @@ -966,6 +962,10 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, } return FNAMECMP_BASIS_DIR_LOW + j; + +got_nothing_for_ya: + sxp->st = real_st; + return -1; } /* This is only called for non-regular files. We return -2 if we've finished @@ -1177,6 +1177,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, int itemizing, enum logcode code, int f_out) { static const char *parent_dirname = ""; + static struct file_struct *prior_dir_file = NULL; /* Missing dir not created due to --dry-run; will still be scanned. */ static struct file_struct *dry_missing_dir = NULL; /* Missing dir whose contents are skipped altogether due to @@ -1256,6 +1257,18 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, const char *dn = file->dirname ? file->dirname : "."; dry_missing_dir = NULL; if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) { + /* Each parent dir must be in the file list or the flist data is bad. + * Optimization: most of the time the parent dir will be the last dir + * this function was asked to process in the file list. */ + if (!inc_recurse + && (*dn != '.' || dn[1]) /* Avoid an issue with --relative and the "." dir. */ + && (prior_dir_file && strcmp(dn, f_name(prior_dir_file, NULL)) != 0) + && flist_find_name(cur_flist, dn, 1) < 0) { + rprintf(FERROR, + "ABORTING due to invalid path from sender: %s/%s\n", + dn, file->basename); + exit_cleanup(RERR_PROTOCOL); + } if (relative_paths && !implied_dirs && do_stat(dn, &sx.st) < 0) { if (dry_run) @@ -1467,6 +1480,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, else change_local_filter_dir(fname, strlen(fname), F_DEPTH(file)); } + prior_dir_file = file; goto cleanup; } diff --git a/getgroups.c b/getgroups.c index bacb21b3..b2139b49 100644 --- a/getgroups.c +++ b/getgroups.c @@ -3,7 +3,7 @@ * `id -G` on Linux, but it's too hard to find a portable equivalent. * * Copyright (C) 2002 Martin Pool - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as diff --git a/hashtable.c b/hashtable.c index 5cdcf614..f0fbe518 100644 --- a/hashtable.c +++ b/hashtable.c @@ -1,7 +1,7 @@ /* * Routines to provide a memory-efficient hashtable. * - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -4,7 +4,7 @@ * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1,6 +1,6 @@ /* Inline functions for rsync. * - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1,6 +1,6 @@ /* Inline functions for rsync. * - * Copyright (C) 2008-2014 Wayne Davison + * Copyright (C) 2008-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -4,7 +4,7 @@ * Copyright (C) 1996-2001 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1685,7 +1685,7 @@ void wait_for_receiver(void) rprintf(FINFO, "[%s] receiving flist for dir %d\n", who_am_i(), ndx); } - flist = recv_file_list(iobuf.in_fd); + flist = recv_file_list(iobuf.in_fd, ndx); flist->parent_ndx = ndx; #ifdef SUPPORT_HARD_LINKS if (preserve_hard_links) @@ -2283,7 +2283,7 @@ void io_printf(int fd, const char *format, ...) if (len < 0) exit_cleanup(RERR_PROTOCOL); - if (len > (int)sizeof buf) { + if (len >= (int)sizeof buf) { rprintf(FERROR, "io_printf() was too long for the buffer.\n"); exit_cleanup(RERR_PROTOCOL); } @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1,6 +1,6 @@ /* Inline functions for rsync. * - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/compat.c b/lib/compat.c index dfe963cc..44b2c54d 100644 --- a/lib/compat.c +++ b/lib/compat.c @@ -3,7 +3,7 @@ * * Copyright (C) 1998 Andrew Tridgell * Copyright (C) 2002 Martin Pool - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/mdfour.c b/lib/mdfour.c index 16b2358e..fd2760ac 100644 --- a/lib/mdfour.c +++ b/lib/mdfour.c @@ -4,7 +4,7 @@ * An implementation of MD4 designed for use in the SMB authentication protocol. * * Copyright (C) 1997-1998 Andrew Tridgell - * Copyright (C) 2005-2014 Wayne Davison + * Copyright (C) 2005-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/permstring.c b/lib/permstring.c index 7b2414d5..a3a9d1c3 100644 --- a/lib/permstring.c +++ b/lib/permstring.c @@ -4,7 +4,7 @@ * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/sysacls.c b/lib/sysacls.c index 6ccfe434..e11a9884 100644 --- a/lib/sysacls.c +++ b/lib/sysacls.c @@ -2,7 +2,7 @@ * Unix SMB/CIFS implementation. * Based on the Samba ACL support code. * Copyright (C) Jeremy Allison 2000. - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * The permission functions have been changed to get/set all bits via * one call. Some functions that rsync doesn't need were also removed. diff --git a/lib/sysacls.h b/lib/sysacls.h index 31c49093..68ea9834 100644 --- a/lib/sysacls.h +++ b/lib/sysacls.h @@ -3,7 +3,7 @@ * Version 2.2.x * Portable SMB ACL interface * Copyright (C) Jeremy Allison 2000 - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/sysxattrs.c b/lib/sysxattrs.c index f02802ac..e22467dd 100644 --- a/lib/sysxattrs.c +++ b/lib/sysxattrs.c @@ -2,7 +2,7 @@ * Extended attribute support for rsync. * * Copyright (C) 2004 Red Hat, Inc. - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * Written by Jay Fenlason. * * This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ * and Karl Auer. Some of the changes are: * * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison <wayned@samba.org> + * Copyright (C) 2003-2015 Wayne Davison <wayned@samba.org> */ /* Load parameters. @@ -3,7 +3,7 @@ * * Copyright (C) 1998-2001 Andrew Tridgell <tridge@samba.org> * Copyright (C) 2000-2001 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -656,21 +656,10 @@ static void log_formatted(enum logcode code, const char *format, const char *op, n = auth_user; break; case 'b': - if (!(iflags & ITEM_TRANSFER)) - b = 0; - else if (am_sender) - b = total_data_written - initial_data_written; - else - b = total_data_read - initial_data_read; - strlcat(fmt, "s", sizeof fmt); - snprintf(buf2, sizeof buf2, fmt, - do_big_num(b, humanize, NULL)); - n = buf2; - break; case 'c': if (!(iflags & ITEM_TRANSFER)) b = 0; - else if (!am_sender) + else if ((!!am_sender) ^ (*p == 'c')) b = total_data_written - initial_data_written; else b = total_data_read - initial_data_read; diff --git a/m4/have_type.m4 b/m4/have_type.m4 new file mode 100644 index 00000000..704ca33b --- /dev/null +++ b/m4/have_type.m4 @@ -0,0 +1,22 @@ +dnl AC_HAVE_TYPE(TYPE,INCLUDES) +AC_DEFUN([AC_HAVE_TYPE], [ +AC_REQUIRE([AC_HEADER_STDC]) +cv=`echo "$1" | sed 'y%./+- %__p__%'` +AC_MSG_CHECKING(for $1) +AC_CACHE_VAL([ac_cv_type_$cv], +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +AC_INCLUDES_DEFAULT +$2]], +[[$1 foo;]])], +[eval "ac_cv_type_$cv=yes"], +[eval "ac_cv_type_$cv=no"]))dnl +ac_foo=`eval echo \\$ac_cv_type_$cv` +AC_MSG_RESULT($ac_foo) +if test "$ac_foo" = yes; then + ac_tr_hdr=HAVE_`echo $1 | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'` +if false; then + AC_CHECK_TYPES($1) +fi + AC_DEFINE_UNQUOTED($ac_tr_hdr, 1, [Define if you have type `$1']) +fi +]) diff --git a/m4/socklen_t.m4 b/m4/socklen_t.m4 new file mode 100644 index 00000000..831820ca --- /dev/null +++ b/m4/socklen_t.m4 @@ -0,0 +1,45 @@ +dnl Check for socklen_t: historically on BSD it is an int, and in +dnl POSIX 1g it is a type of its own, but some platforms use different +dnl types for the argument to getsockopt, getpeername, etc. So we +dnl have to test to find something that will work. + +dnl This is no good, because passing the wrong pointer on C compilers is +dnl likely to only generate a warning, not an error. We don't call this at +dnl the moment. + +AC_DEFUN([TYPE_SOCKLEN_T], +[ + AC_CHECK_TYPE([socklen_t], ,[ + AC_MSG_CHECKING([for socklen_t equivalent]) + AC_CACHE_VAL([rsync_cv_socklen_t_equiv], + [ + # Systems have either "struct sockaddr *" or + # "void *" as the second argument to getpeername + rsync_cv_socklen_t_equiv= + for arg2 in "struct sockaddr" void; do + for t in int size_t unsigned long "unsigned long"; do + AC_TRY_COMPILE([ +#include <sys/types.h> +#include <sys/socket.h> + + int getpeername (int, $arg2 *, $t *); + ],[ + $t len; + getpeername(0,0,&len); + ],[ + rsync_cv_socklen_t_equiv="$t" + break + ]) + done + done + + if test "x$rsync_cv_socklen_t_equiv" = x; then + AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) + fi + ]) + AC_MSG_RESULT($rsync_cv_socklen_t_equiv) + AC_DEFINE_UNQUOTED(socklen_t, $rsync_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined])], + [#include <sys/types.h> +#include <sys/socket.h>]) +]) diff --git a/m4/validate_cache_system_type.m4 b/m4/validate_cache_system_type.m4 new file mode 100644 index 00000000..dcb3b547 --- /dev/null +++ b/m4/validate_cache_system_type.m4 @@ -0,0 +1,23 @@ +dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)] +dnl if the cache file is inconsistent with the current host, +dnl target and build system types, execute CMD or print a default +dnl error message. +AC_DEFUN([AC_VALIDATE_CACHE_SYSTEM_TYPE], [ + AC_REQUIRE([AC_CANONICAL_SYSTEM]) + AC_MSG_CHECKING([config.cache system type]) + if { test x"${ac_cv_host_system_type+set}" = x"set" && + test x"$ac_cv_host_system_type" != x"$host"; } || + { test x"${ac_cv_build_system_type+set}" = x"set" && + test x"$ac_cv_build_system_type" != x"$build"; } || + { test x"${ac_cv_target_system_type+set}" = x"set" && + test x"$ac_cv_target_system_type" != x"$target"; }; then + AC_MSG_RESULT([different]) + ifelse($#, 1, [$1], + [AC_MSG_ERROR(["you must remove config.cache and restart configure"])]) + else + AC_MSG_RESULT([same]) + fi + ac_cv_host_system_type="$host" + ac_cv_build_system_type="$build" + ac_cv_target_system_type="$target" +]) @@ -4,7 +4,7 @@ * Copyright (C) 1996-2001 Andrew Tridgell <tridge@samba.org> * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -76,6 +76,7 @@ extern size_t bwlimit_writemax; extern unsigned int module_dirlen; extern BOOL flist_receiving_enabled; extern BOOL shutting_down; +extern int backup_dir_len; extern int basis_dir_cnt; extern struct stats stats; extern char *stdout_format; @@ -850,13 +851,25 @@ static int do_recv(int f_in, int f_out, char *local_name) } if (backup_dir) { - int ret = make_path(backup_dir_buf, MKP_DROP_NAME); /* drops trailing slash */ - if (ret < 0) - exit_cleanup(RERR_SYNTAX); - if (ret) - rprintf(FINFO, "Created backup_dir %s\n", backup_dir_buf); - else if (INFO_GTE(BACKUP, 1)) + STRUCT_STAT st; + int ret; + if (backup_dir_len > 1) + backup_dir_buf[backup_dir_len-1] = '\0'; + ret = do_stat(backup_dir_buf, &st); + if (ret != 0 || !S_ISDIR(st.st_mode)) { + if (ret == 0) { + rprintf(FERROR, "The backup-dir is not a directory: %s\n", backup_dir_buf); + exit_cleanup(RERR_SYNTAX); + } + if (errno != ENOENT) { + rprintf(FERROR, "Failed to stat %s: %s\n", backup_dir_buf, strerror(errno)); + exit_cleanup(RERR_FILEIO); + } + rprintf(FINFO, "(new) backup_dir is %s\n", backup_dir_buf); + } else if (INFO_GTE(BACKUP, 1)) rprintf(FINFO, "backup_dir is %s\n", backup_dir_buf); + if (backup_dir_len > 1) + backup_dir_buf[backup_dir_len-1] = '/'; } io_flush(FULL_FLUSH); @@ -1009,7 +1022,7 @@ static void do_server_recv(int f_in, int f_out, int argc, char *argv[]) filesfrom_fd = -1; } - flist = recv_file_list(f_in); + flist = recv_file_list(f_in, -1); if (!flist) { rprintf(FERROR,"server_recv: recv_file_list error\n"); exit_cleanup(RERR_FILESELECT); @@ -1183,7 +1196,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) if (write_batch && !am_server) start_write_batch(f_in); - flist = recv_file_list(f_in); + flist = recv_file_list(f_in, -1); if (inc_recurse && file_total == 1) recv_additional_file_list(f_in); @@ -1411,12 +1424,12 @@ static int start_client(int argc, char *argv[]) } -static RETSIGTYPE sigusr1_handler(UNUSED(int val)) +static void sigusr1_handler(UNUSED(int val)) { exit_cleanup(RERR_SIGNAL1); } -static RETSIGTYPE sigusr2_handler(UNUSED(int val)) +static void sigusr2_handler(UNUSED(int val)) { if (!am_server) output_summary(); @@ -1426,7 +1439,7 @@ static RETSIGTYPE sigusr2_handler(UNUSED(int val)) _exit(0); } -RETSIGTYPE remember_children(UNUSED(int val)) +void remember_children(UNUSED(int val)) { #ifdef WNOHANG int cnt, status; @@ -1487,7 +1500,7 @@ const char *get_panic_action(void) * should just look at the environment variable, but I'm a bit leery * of a signal sending us into a busy loop. **/ -static RETSIGTYPE rsync_panic_handler(UNUSED(int whatsig)) +static void rsync_panic_handler(UNUSED(int whatsig)) { char cmd_buf[300]; int ret, pid_int = getpid(); @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3,7 +3,7 @@ * * Copyright (C) 1998-2001 Andrew Tridgell <tridge@samba.org> * Copyright (C) 2000, 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2002-2014 Wayne Davison + * Copyright (C) 2002-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -411,16 +411,17 @@ static void parse_output_words(struct output_struct *words, short *levels, const char *s; int j, len, lev; - if (!str) - return; - - while (*str) { + for ( ; str; str = s) { if ((s = strchr(str, ',')) != NULL) len = s++ - str; else len = strlen(str); - while (len && isDigit(str+len-1)) - len--; + if (!len) + continue; + if (!isDigit(str)) { + while (len && isDigit(str+len-1)) + len--; + } lev = isDigit(str+len) ? atoi(str+len) : 1; if (lev > MAX_OUT_LEVEL) lev = MAX_OUT_LEVEL; @@ -448,9 +449,6 @@ static void parse_output_words(struct output_struct *words, short *levels, words[j].help, len, str); exit_cleanup(RERR_SYNTAX); } - if (!s) - break; - str = s; } } @@ -613,7 +611,7 @@ static void print_rsync_version(enum logcode f) rprintf(f, "%s version %s protocol version %d%s\n", RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol); - rprintf(f, "Copyright (C) 1996-2014 by Andrew Tridgell, Wayne Davison, and others.\n"); + rprintf(f, "Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.\n"); rprintf(f, "Web site: http://rsync.samba.org/\n"); rprintf(f, "Capabilities:\n"); rprintf(f, " %d-bit files, %d-bit inums, %d-bit timestamps, %d-bit long ints,\n", @@ -2503,6 +2501,7 @@ void server_options(char **args, int *argc_p) #endif eFlags[x++] = 'f'; /* flist I/O-error safety support */ eFlags[x++] = 'x'; /* xattr hardlink optimization not desired */ + eFlags[x++] = 'C'; /* support checksum seed order fix */ #undef eFlags } diff --git a/packaging/lsb/rsync.spec b/packaging/lsb/rsync.spec index d9c3196f..8eff53cd 100644 --- a/packaging/lsb/rsync.spec +++ b/packaging/lsb/rsync.spec @@ -1,6 +1,6 @@ Summary: A fast, versatile, remote (and local) file-copying tool Name: rsync -Version: 3.1.1 +Version: 3.1.2 %define fullversion %{version} Release: 1 %define srcdir src @@ -91,8 +91,8 @@ rm -rf $RPM_BUILD_ROOT %dir /etc/rsync-ssl/certs %changelog -* Sun Jun 22 2014 Wayne Davison <wayned@samba.org> -Released 3.1.1. +* Mon Dec 21 2015 Wayne Davison <wayned@samba.org> +Released 3.1.2. * Fri Mar 21 2008 Wayne Davison <wayned@samba.org> Added installation of /etc/xinetd.d/rsync file and some commented-out diff --git a/packaging/nightly-rsync b/packaging/nightly-rsync index 44e85587..23451ca7 100755 --- a/packaging/nightly-rsync +++ b/packaging/nightly-rsync @@ -16,6 +16,7 @@ use Date::Format; # Where the local copy of /home/ftp/pub/rsync/dev/nightly should be updated. our $dest = $ENV{HOME} . '/samba-rsync-ftp/dev/nightly'; +our $samba_host = $ENV{SAMBA_HOST} || 'samba.org'; our $nightly_symlink = "$dest/rsync-HEAD.tar.gz"; our($make_tar, $upload, $help_opt); @@ -59,13 +60,13 @@ if ($make_tar) { my $confversion; open(IN, '<', 'configure.ac') or die "Unable to open configure.ac: $!\n"; while (<IN>) { - if (/^RSYNC_VERSION=(.*)/) { + if (/^AC_INIT\(\[rsync\],\s*\[(\d.+?)\]/) { $confversion = $1; last; } } close IN; - die "Unable to find RSYNC_VERSION in configure.ac\n" unless defined $confversion; + die "Unable to find AC_INIT with version in configure.ac\n" unless defined $confversion; open(IN, '<', 'OLDNEWS') or die "Unable to open OLDNEWS: $!\n"; $_ = <IN>; @@ -156,7 +157,7 @@ if ($upload) { if (defined $ENV{RSYNC_PARTIAL_DIR}) { $opt = " -f 'R $ENV{RSYNC_PARTIAL_DIR}'"; } - system "rsync$opt -aviHP --delete-after . samba.org:/home/ftp/pub/rsync/dev/nightly"; + system "rsync$opt -aviHP --delete-after . $samba_host\:/home/ftp/pub/rsync/dev/nightly"; } exit; diff --git a/packaging/release-rsync b/packaging/release-rsync index b15aae1f..94818831 100755 --- a/packaging/release-rsync +++ b/packaging/release-rsync @@ -67,13 +67,13 @@ check_git_state($master_branch, 1, 1); my $confversion; open(IN, '<', 'configure.ac') or die $!; while (<IN>) { - if (/^RSYNC_VERSION=(.*)/) { + if (/^AC_INIT\(\[rsync\],\s*\[(\d.+?)\]/) { $confversion = $1; last; } } close IN; -die "Unable to find RSYNC_VERSION in configure.ac\n" unless defined $confversion; +die "Unable to find AC_INIT with version in configure.ac\n" unless defined $confversion; open(IN, '<', 'OLDNEWS') or die $!; $_ = <IN>; @@ -202,8 +202,8 @@ foreach my $fn (@tweak_files) { undef $/; $_ = <IN>; $/ = "\n"; close IN; if ($fn =~ /configure/) { - s/^RSYNC_VERSION=.*/RSYNC_VERSION=$version/m - or die "Unable to update RSYNC_VERSION in $fn\n"; + s/^(AC_INIT\(\[rsync\],\s*\[)\d.+?(\])/$1$version$2/m + or die "Unable to update AC_INIT with version in $fn\n"; } elsif ($fn =~ /\.spec/) { while (my($str, $val) = each %specvars) { s/^\Q$str\E .*/$str $val/m @@ -4,7 +4,7 @@ * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/prepare-source b/prepare-source index 0e73138d..b1e76282 100755 --- a/prepare-source +++ b/prepare-source @@ -27,9 +27,9 @@ for action in "${@}"; do ;; fetch) if perl --version >/dev/null 2>/dev/null; then - files='c*' + files='[ca]*' else - files='[cp]*' + files='[cap]*' fi rsync -pvz rsync://rsync.samba.org/rsyncftp/generated-files/"$files" . ;; diff --git a/prepare-source.mak b/prepare-source.mak index 054bab70..ad291feb 100644 --- a/prepare-source.mak +++ b/prepare-source.mak @@ -1,5 +1,8 @@ conf: configure.sh config.h.in +aclocal.m4: + aclocal -I m4 + configure.sh: configure.ac aclocal.m4 autoconf -o configure.sh @@ -4,7 +4,7 @@ * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/proto.h b/proto.h new file mode 100644 index 00000000..24253958 --- /dev/null +++ b/proto.h @@ -0,0 +1,424 @@ +/* This file is automatically generated with "make proto". DO NOT EDIT */ + +int allow_access(const char *addr, const char **host_ptr, int i); +void free_acl(stat_x *sxp); +int get_acl(const char *fname, stat_x *sxp); +void send_acl(int f, stat_x *sxp); +void receive_acl(int f, struct file_struct *file); +void cache_tmp_acl(struct file_struct *file, stat_x *sxp); +void uncache_tmp_acls(void); +int set_acl(const char *fname, const struct file_struct *file, stat_x *sxp, mode_t new_mode); +void match_acl_ids(void); +int default_perms_for_dir(const char *dir); +void base64_encode(const char *buf, int len, char *out, int pad); +char *auth_server(int f_in, int f_out, int module, const char *host, + const char *addr, const char *leader); +void auth_client(int fd, const char *user, const char *challenge); +char *get_backup_name(const char *fname); +int make_backup(const char *fname, BOOL prefer_rename); +void write_stream_flags(int fd); +void read_stream_flags(int fd); +void check_batch_flags(void); +void write_batch_shell_file(int argc, char *argv[], int file_arg_cnt); +uint32 get_checksum1(char *buf1, int32 len); +void get_checksum2(char *buf, int32 len, char *sum); +void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum); +void sum_init(int seed); +void sum_update(const char *p, int32 len); +int sum_end(char *sum); +struct chmod_mode_struct *parse_chmod(const char *modestr, + struct chmod_mode_struct **root_mode_ptr); +int tweak_mode(int mode, struct chmod_mode_struct *chmod_modes); +int free_chmod_mode(struct chmod_mode_struct *chmod_modes); +void close_all(void); +NORETURN void _exit_cleanup(int code, const char *file, int line); +void cleanup_disable(void); +void cleanup_set(const char *fnametmp, const char *fname, struct file_struct *file, + int fd_r, int fd_w); +void cleanup_set_pid(pid_t pid); +char *client_addr(int fd); +char *client_name(int fd); +void client_sockaddr(int fd, + struct sockaddr_storage *ss, + socklen_t *ss_len); +int lookup_name(int fd, const struct sockaddr_storage *ss, + socklen_t ss_len, + char *name_buf, size_t name_buf_size, + char *port_buf, size_t port_buf_size); +int compare_addrinfo_sockaddr(const struct addrinfo *ai, + const struct sockaddr_storage *ss); +int check_name(int fd, + const struct sockaddr_storage *ss, + char *name_buf, size_t name_buf_size); +int start_socket_client(char *host, int remote_argc, char *remote_argv[], + int argc, char *argv[]); +int start_inband_exchange(int f_in, int f_out, const char *user, int argc, char *argv[]); +int start_daemon(int f_in, int f_out); +int daemon_main(void); +void set_allow_inc_recurse(void); +void setup_protocol(int f_out,int f_in); +int claim_connection(char *fname, int max_connections); +enum delret delete_item(char *fbuf, uint16 mode, uint16 flags); +uint16 get_del_for_flag(uint16 mode); +void set_filter_dir(const char *dir, unsigned int dirlen); +void *push_local_filters(const char *dir, unsigned int dirlen); +void pop_local_filters(void *mem); +void change_local_filter_dir(const char *dname, int dlen, int dir_depth); +int check_filter(filter_rule_list *listp, enum logcode code, + const char *name, int name_is_dir); +const filter_rule *rule_template(uint32 rflags); +void parse_filter_str(filter_rule_list *listp, const char *rulestr, + const filter_rule *template, int xflags); +void parse_filter_file(filter_rule_list *listp, const char *fname, const filter_rule *template, int xflags); +char *get_rule_prefix(filter_rule *rule, const char *pat, int for_xfer, + unsigned int *plen_ptr); +void send_filter_list(int f_out); +void recv_filter_list(int f_in); +int sparse_end(int f, OFF_T size); +int flush_write_file(int f); +int write_file(int f, char *buf, int len); +struct map_struct *map_file(int fd, OFF_T len, int32 read_size, int32 blk_size); +char *map_ptr(struct map_struct *map, OFF_T offset, int32 len); +int unmap_file(struct map_struct *map); +void init_flist(void); +void show_flist_stats(void); +int link_stat(const char *path, STRUCT_STAT *stp, int follow_dirlinks); +int change_pathname(struct file_struct *file, const char *dir, int dirlen); +struct file_struct *make_file(const char *fname, struct file_list *flist, + STRUCT_STAT *stp, int flags, int filter_level); +void unmake_file(struct file_struct *file); +void send_extra_file_list(int f, int at_least); +struct file_list *send_file_list(int f, int argc, char *argv[]); +struct file_list *recv_file_list(int f, int dir_ndx); +void recv_additional_file_list(int f); +int flist_find(struct file_list *flist, struct file_struct *f); +int flist_find_name(struct file_list *flist, const char *fname, int want_dir_match); +int flist_find_ignore_dirness(struct file_list *flist, struct file_struct *f); +void clear_file(struct file_struct *file); +struct file_list *flist_new(int flags, char *msg); +void flist_free(struct file_list *flist); +int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2); +int f_name_has_prefix(const struct file_struct *f1, const struct file_struct *f2); +char *f_name_buf(void); +char *f_name(const struct file_struct *f, char *fbuf); +struct file_list *get_dirlist(char *dirname, int dlen, int flags); +int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp); +void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statret, + stat_x *sxp, int32 iflags, uchar fnamecmp_type, + const char *xname); +int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st); +int atomic_create(struct file_struct *file, char *fname, const char *slnk, const char *hlnk, + dev_t rdev, stat_x *sxp, int del_for_flag); +void check_for_finished_files(int itemizing, enum logcode code, int check_redo); +void generate_files(int f_out, const char *local_name); +struct hashtable *hashtable_create(int size, int key64); +void hashtable_destroy(struct hashtable *tbl); +void *hashtable_find(struct hashtable *tbl, int64 key, int allocate_if_missing); +void init_hard_links(void); +struct ht_int64_node *idev_find(int64 dev, int64 ino); +void idev_destroy(void); +void match_hard_links(struct file_list *flist); +int hard_link_check(struct file_struct *file, int ndx, char *fname, + int statret, stat_x *sxp, int itemizing, + enum logcode code); +int hard_link_one(struct file_struct *file, const char *fname, + const char *oldname, int terse); +void finish_hard_link(struct file_struct *file, const char *fname, int fin_ndx, + STRUCT_STAT *stp, int itemizing, enum logcode code, + int alt_dest); +int skip_hard_link(struct file_struct *file, struct file_list **flist_p); +void reduce_iobuf_size(xbuf *out, size_t new_size); +void restore_iobuf_size(xbuf *out); +void noop_io_until_death(void); +int send_msg(enum msgcode code, const char *buf, size_t len, int convert); +void send_msg_int(enum msgcode code, int num); +void io_set_sock_fds(int f_in, int f_out); +void set_io_timeout(int secs); +void increment_active_files(int ndx, int itemizing, enum logcode code); +int get_redo_num(void); +int get_hlink_num(void); +void start_filesfrom_forwarding(int fd); +int read_line(int fd, char *buf, size_t bufsiz, int flags); +void read_args(int f_in, char *mod_name, char *buf, size_t bufsiz, int rl_nulls, + char ***argv_p, int *argc_p, char **request_p); +BOOL io_start_buffering_out(int f_out); +BOOL io_start_buffering_in(int f_in); +void io_end_buffering_in(BOOL free_buffers); +void io_end_buffering_out(BOOL free_buffers); +void maybe_flush_socket(int important); +void maybe_send_keepalive(time_t now, int flags); +void start_flist_forward(int ndx); +void stop_flist_forward(void); +void wait_for_receiver(void); +unsigned short read_shortint(int f); +int32 read_int(int f); +int32 read_varint(int f); +int64 read_varlong(int f, uchar min_bytes); +int64 read_longint(int f); +void read_buf(int f, char *buf, size_t len); +void read_sbuf(int f, char *buf, size_t len); +uchar read_byte(int f); +int read_vstring(int f, char *buf, int bufsize); +void read_sum_head(int f, struct sum_struct *sum); +void write_sum_head(int f, struct sum_struct *sum); +void io_flush(int flush_it_all); +void write_shortint(int f, unsigned short x); +void write_int(int f, int32 x); +void write_varint(int f, int32 x); +void write_varlong(int f, int64 x, uchar min_bytes); +void write_longint(int f, int64 x); +void write_bigbuf(int f, const char *buf, size_t len); +void write_buf(int f, const char *buf, size_t len); +void write_sbuf(int f, const char *buf); +void write_byte(int f, uchar c); +void write_vstring(int f, const char *str, int len); +void write_ndx(int f, int32 ndx); +int32 read_ndx(int f); +int read_line_old(int fd, char *buf, size_t bufsiz, int eof_ok); +void io_printf(int fd, const char *format, ...); +void io_start_multiplex_out(int fd); +void io_start_multiplex_in(int fd); +int io_end_multiplex_in(int mode); +int io_end_multiplex_out(int mode); +void start_write_batch(int fd); +void stop_write_batch(void); +char *lp_bind_address(void); +char *lp_motd_file(void); +char *lp_pid_file(void); +char *lp_socket_options(void); +int lp_listen_backlog(void); +int lp_rsync_port(void); +char *lp_auth_users(int module_id); +char *lp_charset(int module_id); +char *lp_comment(int module_id); +char *lp_dont_compress(int module_id); +char *lp_exclude(int module_id); +char *lp_exclude_from(int module_id); +char *lp_filter(int module_id); +char *lp_gid(int module_id); +char *lp_hosts_allow(int module_id); +char *lp_hosts_deny(int module_id); +char *lp_include(int module_id); +char *lp_include_from(int module_id); +char *lp_incoming_chmod(int module_id); +char *lp_lock_file(int module_id); +char *lp_log_file(int module_id); +char *lp_log_format(int module_id); +char *lp_name(int module_id); +char *lp_outgoing_chmod(int module_id); +char *lp_path(int module_id); +char *lp_postxfer_exec(int module_id); +char *lp_prexfer_exec(int module_id); +char *lp_refuse_options(int module_id); +char *lp_secrets_file(int module_id); +char *lp_temp_dir(int module_id); +char *lp_uid(int module_id); +int lp_max_connections(int module_id); +int lp_max_verbosity(int module_id); +int lp_syslog_facility(int module_id); +int lp_timeout(int module_id); +BOOL lp_fake_super(int module_id); +BOOL lp_forward_lookup(int module_id); +BOOL lp_ignore_errors(int module_id); +BOOL lp_ignore_nonreadable(int module_id); +BOOL lp_list(int module_id); +BOOL lp_munge_symlinks(int module_id); +BOOL lp_numeric_ids(int module_id); +BOOL lp_read_only(int module_id); +BOOL lp_reverse_lookup(int module_id); +BOOL lp_strict_modes(int module_id); +BOOL lp_transfer_logging(int module_id); +BOOL lp_use_chroot(int module_id); +BOOL lp_write_only(int module_id); +int lp_load(char *pszFname, int globals_only); +BOOL set_dparams(int syntax_check_only); +int lp_num_modules(void); +int lp_number(char *name); +void log_init(int restart); +void logfile_close(void); +void logfile_reopen(void); +void rwrite(enum logcode code, const char *buf, int len, int is_utf8); +void rprintf(enum logcode code, const char *format, ...); +void rsyserr(enum logcode code, int errcode, const char *format, ...); +void rflush(enum logcode code); +void remember_initial_stats(void); +int log_format_has(const char *format, char esc); +void log_item(enum logcode code, struct file_struct *file, int iflags, const char *hlink); +void maybe_log_item(struct file_struct *file, int iflags, int itemizing, + const char *buf); +void log_delete(const char *fname, int mode); +void log_exit(int code, const char *file, int line); +pid_t wait_process(pid_t pid, int *status_ptr, int flags); +void write_del_stats(int f); +void read_del_stats(int f); +int child_main(int argc, char *argv[]); +void start_server(int f_in, int f_out, int argc, char *argv[]); +int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]); +void remember_children(UNUSED(int val)); +const char *get_panic_action(void); +int main(int argc,char *argv[]); +void match_sums(int f, struct sum_struct *s, struct map_struct *buf, OFF_T len); +void match_report(void); +void limit_output_verbosity(int level); +void reset_output_levels(void); +void negate_output_levels(void); +void usage(enum logcode F); +void option_error(void); +int parse_arguments(int *argc_p, const char ***argv_p); +void server_options(char **args, int *argc_p); +char *check_for_hostspec(char *s, char **host_ptr, int *port_ptr); +int pm_process( char *FileName, + BOOL (*sfunc)(char *), + BOOL (*pfunc)(char *, char *) ); +pid_t piped_child(char **command, int *f_in, int *f_out); +pid_t local_child(int argc, char **argv, int *f_in, int *f_out, + int (*child_main)(int, char*[])); +void set_current_file_index(struct file_struct *file, int ndx); +void end_progress(OFF_T size); +void show_progress(OFF_T ofs, OFF_T size); +int get_tmpname(char *fnametmp, const char *fname, BOOL make_unique); +int open_tmpfile(char *fnametmp, const char *fname, struct file_struct *file); +int recv_files(int f_in, int f_out, char *local_name); +void setup_iconv(void); +int iconvbufs(iconv_t ic, xbuf *in, xbuf *out, int flags); +void send_protected_args(int fd, char *args[]); +int read_ndx_and_attrs(int f_in, int f_out, int *iflag_ptr, uchar *type_ptr, + char *buf, int *len_ptr); +void free_sums(struct sum_struct *s); +mode_t dest_mode(mode_t flist_mode, mode_t stat_mode, int dflt_perms, + int exists); +int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, + const char *fnamecmp, int flags); +void sig_int(int sig_num); +int finish_transfer(const char *fname, const char *fnametmp, + const char *fnamecmp, const char *partialptr, + struct file_struct *file, int ok_to_set_time, + int overwriting_basis); +struct file_list *flist_for_ndx(int ndx, const char *fatal_error_loc); +const char *who_am_i(void); +void successful_send(int ndx); +void send_files(int f_in, int f_out); +int try_bind_local(int s, int ai_family, int ai_socktype, + const char *bind_addr); +int open_socket_out(char *host, int port, const char *bind_addr, + int af_hint); +int open_socket_out_wrapped(char *host, int port, const char *bind_addr, + int af_hint); +int is_a_socket(int fd); +void start_accept_loop(int port, int (*fn)(int, int)); +void set_socket_options(int fd, char *options); +int do_unlink(const char *fname); +int do_symlink(const char *lnk, const char *fname); +ssize_t do_readlink(const char *path, char *buf, size_t bufsiz); +int do_link(const char *fname1, const char *fname2); +int do_lchown(const char *path, uid_t owner, gid_t group); +int do_mknod(const char *pathname, mode_t mode, dev_t dev); +int do_rmdir(const char *pathname); +int do_open(const char *pathname, int flags, mode_t mode); +int do_chmod(const char *path, mode_t mode); +int do_rename(const char *fname1, const char *fname2); +int do_ftruncate(int fd, OFF_T size); +void trim_trailing_slashes(char *name); +int do_mkdir(char *fname, mode_t mode); +int do_mkstemp(char *template, mode_t perms); +int do_stat(const char *fname, STRUCT_STAT *st); +int do_lstat(const char *fname, STRUCT_STAT *st); +int do_fstat(int fd, STRUCT_STAT *st); +OFF_T do_lseek(int fd, OFF_T offset, int whence); +int do_utimensat(const char *fname, time_t modtime, uint32 mod_nsec); +int do_lutimes(const char *fname, time_t modtime, uint32 mod_nsec); +int do_utimes(const char *fname, time_t modtime, uint32 mod_nsec); +int do_utime(const char *fname, time_t modtime, UNUSED(uint32 mod_nsec)); +int do_fallocate(int fd, OFF_T offset, OFF_T length); +int do_open_nofollow(const char *pathname, int flags); +void set_compression(const char *fname); +void send_token(int f, int32 token, struct map_struct *buf, OFF_T offset, + int32 n, int32 toklen); +int32 recv_token(int f, char **data); +void see_token(char *data, int32 toklen); +char *uid_to_user(uid_t uid); +char *gid_to_group(gid_t gid); +int user_to_uid(const char *name, uid_t *uid_p, BOOL num_ok); +int group_to_gid(const char *name, gid_t *gid_p, BOOL num_ok); +uid_t match_uid(uid_t uid); +gid_t match_gid(gid_t gid, uint16 *flags_ptr); +const char *add_uid(uid_t uid); +const char *add_gid(gid_t gid); +void send_id_list(int f); +uid_t recv_user_name(int f, uid_t uid); +gid_t recv_group_name(int f, gid_t gid, uint16 *flags_ptr); +void recv_id_list(int f, struct file_list *flist); +void parse_name_map(char *map, BOOL usernames); +const char *getallgroups(uid_t uid, item_list *gid_list); +void set_nonblocking(int fd); +void set_blocking(int fd); +int fd_pair(int fd[2]); +void print_child_argv(const char *prefix, char **cmd); +int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode); +int make_path(char *fname, int flags); +int full_write(int desc, const char *ptr, size_t len); +int copy_file(const char *source, const char *dest, int ofd, mode_t mode); +int robust_unlink(const char *fname); +int robust_rename(const char *from, const char *to, const char *partialptr, + int mode); +pid_t do_fork(void); +void kill_all(int sig); +int lock_range(int fd, int offset, int len); +int glob_expand(const char *arg, char ***argv_p, int *argc_p, int *maxargs_p); +void glob_expand_module(char *base1, char *arg, char ***argv_p, int *argc_p, int *maxargs_p); +void strlower(char *s); +size_t pathjoin(char *dest, size_t destsize, const char *p1, const char *p2); +size_t stringjoin(char *dest, size_t destsize, ...); +int count_dir_elements(const char *p); +int clean_fname(char *name, int flags); +char *sanitize_path(char *dest, const char *p, const char *rootdir, int depth, + int flags); +int change_dir(const char *dir, int set_path_only); +char *normalize_path(char *path, BOOL force_newbuf, unsigned int *len_ptr); +char *full_fname(const char *fn); +char *partial_dir_fname(const char *fname); +int handle_partial_dir(const char *fname, int create); +int unsafe_symlink(const char *dest, const char *src); +char *timestring(time_t t); +int cmp_time(time_t file1, time_t file2); +int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6); +const char *find_filename_suffix(const char *fn, int fn_len, int *len_ptr); +uint32 fuzzy_distance(const char *s1, unsigned len1, const char *s2, unsigned len2); +struct bitbag *bitbag_create(int max_ndx); +void bitbag_set_bit(struct bitbag *bb, int ndx); +void bitbag_clear_bit(struct bitbag *bb, int ndx); +int bitbag_check_bit(struct bitbag *bb, int ndx); +int bitbag_next_bit(struct bitbag *bb, int after); +void flist_ndx_push(flist_ndx_list *lp, int ndx); +int flist_ndx_pop(flist_ndx_list *lp); +void *expand_item_list(item_list *lp, size_t item_size, + const char *desc, int incr); +int msleep(int t); +void *_new_array(unsigned long num, unsigned int size, int use_calloc); +void *_realloc_array(void *ptr, unsigned int size, size_t num); +const char *sum_as_hex(const char *sum); +NORETURN void out_of_memory(const char *str); +NORETURN void overflow_exit(const char *str); +void free_xattr(stat_x *sxp); +int get_xattr(const char *fname, stat_x *sxp); +int copy_xattrs(const char *source, const char *dest); +int send_xattr(int f, stat_x *sxp); +int xattr_diff(struct file_struct *file, stat_x *sxp, int find_all); +void send_xattr_request(const char *fname, struct file_struct *file, int f_out); +int recv_xattr_request(struct file_struct *file, int f_in); +void receive_xattr(int f, struct file_struct *file); +void cache_tmp_xattr(struct file_struct *file, stat_x *sxp); +void uncache_tmp_xattrs(void); +int set_xattr(const char *fname, const struct file_struct *file, + const char *fnamecmp, stat_x *sxp); +char *get_xattr_acl(const char *fname, int is_access_acl, size_t *len_p); +int set_xattr_acl(const char *fname, int is_access_acl, const char *buf, size_t buf_len); +int del_def_xattr_acl(const char *fname); +int get_stat_xattr(const char *fname, int fd, STRUCT_STAT *fst, STRUCT_STAT *xst); +int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode); +int x_stat(const char *fname, STRUCT_STAT *fst, STRUCT_STAT *xst); +int x_lstat(const char *fname, STRUCT_STAT *fst, STRUCT_STAT *xst); +int x_fstat(int fd, STRUCT_STAT *fst, STRUCT_STAT *xst); +int sys_gettimeofday(struct timeval *tv); +char *do_big_num(int64 num, int human_flag, const char *fract); +char *do_big_dnum(double dnum, int human_flag, int decimal_digits); diff --git a/proto.h-tstamp b/proto.h-tstamp new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/proto.h-tstamp @@ -3,7 +3,7 @@ * * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -672,8 +672,7 @@ int recv_files(int f_in, int f_out, char *local_name) } } - if (!log_before_transfer) - remember_initial_stats(); + remember_initial_stats(); if (!do_xfers) { /* log the transfer */ log_item(FCLIENT, file, iflags, NULL); @@ -1,7 +1,7 @@ /* * A pre-compilation helper program to aid in the creation of rounding.h. * - * Copyright (C) 2007-2014 Wayne Davison + * Copyright (C) 2007-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rsync.1 b/rsync.1 new file mode 100644 index 00000000..da4f68d7 --- /dev/null +++ b/rsync.1 @@ -0,0 +1,4007 @@ +.TH "rsync" "1" "21 Dec 2015" "" "" +.SH "NAME" +rsync \- a fast, versatile, remote (and local) file\-copying tool +.SH "SYNOPSIS" + +.PP +.nf +Local: rsync [OPTION...] SRC... [DEST] + +Access via remote shell: + Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] + Push: rsync [OPTION...] SRC... [USER@]HOST:DEST + +Access via rsync daemon: + Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] + rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] + Push: rsync [OPTION...] SRC... [USER@]HOST::DEST + rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST +.fi + +.PP +Usages with just one SRC arg and no DEST arg will list the source files +instead of copying. +.PP +.SH "DESCRIPTION" + +.PP +Rsync is a fast and extraordinarily versatile file copying tool. It can +copy locally, to/from another host over any remote shell, or to/from a +remote rsync daemon. It offers a large number of options that control +every aspect of its behavior and permit very flexible specification of the +set of files to be copied. It is famous for its delta\-transfer algorithm, +which reduces the amount of data sent over the network by sending only the +differences between the source files and the existing files in the +destination. Rsync is widely used for backups and mirroring and as an +improved copy command for everyday use. +.PP +Rsync finds files that need to be transferred using a \(dq\&quick check\(dq\& +algorithm (by default) that looks for files that have changed in size or +in last\-modified time. Any changes in the other preserved attributes (as +requested by options) are made on the destination file directly when the +quick check indicates that the file\(cq\&s data does not need to be updated. +.PP +Some of the additional features of rsync are: +.PP +.IP o +support for copying links, devices, owners, groups, and permissions +.IP o +exclude and exclude\-from options similar to GNU tar +.IP o +a CVS exclude mode for ignoring the same files that CVS would ignore +.IP o +can use any transparent remote shell, including ssh or rsh +.IP o +does not require super\-user privileges +.IP o +pipelining of file transfers to minimize latency costs +.IP o +support for anonymous or authenticated rsync daemons (ideal for +mirroring) + +.PP +.SH "GENERAL" + +.PP +Rsync copies files either to or from a remote host, or locally on the +current host (it does not support copying files between two remote hosts). +.PP +There are two different ways for rsync to contact a remote system: using a +remote\-shell program as the transport (such as ssh or rsh) or contacting an +rsync daemon directly via TCP. The remote\-shell transport is used whenever +the source or destination path contains a single colon (:) separator after +a host specification. Contacting an rsync daemon directly happens when the +source or destination path contains a double colon (::) separator after a +host specification, OR when an rsync:// URL is specified (see also the +\(dq\&USING RSYNC\-DAEMON FEATURES VIA A REMOTE\-SHELL CONNECTION\(dq\& section for +an exception to this latter rule). +.PP +As a special case, if a single source arg is specified without a +destination, the files are listed in an output format similar to \(dq\&ls \-l\(dq\&. +.PP +As expected, if neither the source or destination path specify a remote +host, the copy occurs locally (see also the \fB\-\-list\-only\fP option). +.PP +Rsync refers to the local side as the \(dq\&client\(dq\& and the remote side as the +\(dq\&server\(dq\&. Don\(cq\&t confuse \(dq\&server\(dq\& with an rsync daemon \-\- a daemon is always a +server, but a server can be either a daemon or a remote\-shell spawned process. +.PP +.SH "SETUP" + +.PP +See the file README for installation instructions. +.PP +Once installed, you can use rsync to any machine that you can access via +a remote shell (as well as some that you can access using the rsync +daemon\-mode protocol). For remote transfers, a modern rsync uses ssh +for its communications, but it may have been configured to use a +different remote shell by default, such as rsh or remsh. +.PP +You can also specify any remote shell you like, either by using the \fB\-e\fP +command line option, or by setting the RSYNC_RSH environment variable. +.PP +Note that rsync must be installed on both the source and destination +machines. +.PP +.SH "USAGE" + +.PP +You use rsync in the same way you use rcp. You must specify a source +and a destination, one of which may be remote. +.PP +Perhaps the best way to explain the syntax is with some examples: +.PP +.RS +\f(CWrsync \-t *.c foo:src/\fP +.RE + +.PP +This would transfer all files matching the pattern *.c from the +current directory to the directory src on the machine foo. If any of +the files already exist on the remote system then the rsync +remote\-update protocol is used to update the file by sending only the +differences in the data. Note that the expansion of wildcards on the +commandline (*.c) into a list of files is handled by the shell before +it runs rsync and not by rsync itself (exactly the same as all other +posix\-style programs). +.PP +.RS +\f(CWrsync \-avz foo:src/bar /data/tmp\fP +.RE + +.PP +This would recursively transfer all files from the directory src/bar on the +machine foo into the /data/tmp/bar directory on the local machine. The +files are transferred in \(dq\&archive\(dq\& mode, which ensures that symbolic +links, devices, attributes, permissions, ownerships, etc. are preserved +in the transfer. Additionally, compression will be used to reduce the +size of data portions of the transfer. +.PP +.RS +\f(CWrsync \-avz foo:src/bar/ /data/tmp\fP +.RE + +.PP +A trailing slash on the source changes this behavior to avoid creating an +additional directory level at the destination. You can think of a trailing +/ on a source as meaning \(dq\© the contents of this directory\(dq\& as opposed +to \(dq\© the directory by name\(dq\&, but in both cases the attributes of the +containing directory are transferred to the containing directory on the +destination. In other words, each of the following commands copies the +files in the same way, including their setting of the attributes of +/dest/foo: +.PP +.RS +\f(CWrsync \-av /src/foo /dest\fP +.br +\f(CWrsync \-av /src/foo/ /dest/foo\fP +.br +.RE + +.PP +Note also that host and module references don\(cq\&t require a trailing slash to +copy the contents of the default directory. For example, both of these +copy the remote directory\(cq\&s contents into \(dq\&/dest\(dq\&: +.PP +.RS +\f(CWrsync \-av host: /dest\fP +.br +\f(CWrsync \-av host::module /dest\fP +.br +.RE + +.PP +You can also use rsync in local\-only mode, where both the source and +destination don\(cq\&t have a \(cq\&:\(cq\& in the name. In this case it behaves like +an improved copy command. +.PP +Finally, you can list all the (listable) modules available from a +particular rsync daemon by leaving off the module name: +.PP +.RS +\f(CWrsync somehost.mydomain.com::\fP +.RE + +.PP +See the following section for more details. +.PP +.SH "ADVANCED USAGE" + +.PP +The syntax for requesting multiple files from a remote host is done by +specifying additional remote\-host args in the same style as the first, +or with the hostname omitted. For instance, all these work: +.PP +.RS +\f(CWrsync \-av host:file1 :file2 host:file{3,4} /dest/\fP +.br +\f(CWrsync \-av host::modname/file{1,2} host::modname/file3 /dest/\fP +.br +\f(CWrsync \-av host::modname/file1 ::modname/file{3,4}\fP +.RE + +.PP +Older versions of rsync required using quoted spaces in the SRC, like these +examples: +.PP +.RS +\f(CWrsync \-av host:'\&dir1/file1 dir2/file2'\& /dest\fP +.br +\f(CWrsync host::'\&modname/dir1/file1 modname/dir2/file2'\& /dest\fP +.RE + +.PP +This word\-splitting still works (by default) in the latest rsync, but is +not as easy to use as the first method. +.PP +If you need to transfer a filename that contains whitespace, you can either +specify the \fB\-\-protect\-args\fP (\fB\-s\fP) option, or you\(cq\&ll need to escape +the whitespace in a way that the remote shell will understand. For +instance: +.PP +.RS +\f(CWrsync \-av host:'\&file\e name\e with\e spaces'\& /dest\fP +.RE + +.PP +.SH "CONNECTING TO AN RSYNC DAEMON" + +.PP +It is also possible to use rsync without a remote shell as the transport. +In this case you will directly connect to a remote rsync daemon, typically +using TCP port 873. (This obviously requires the daemon to be running on +the remote system, so refer to the STARTING AN RSYNC DAEMON TO ACCEPT +CONNECTIONS section below for information on that.) +.PP +Using rsync in this way is the same as using it with a remote shell except +that: +.PP +.IP o +you either use a double colon :: instead of a single colon to +separate the hostname from the path, or you use an rsync:// URL. +.IP o +the first word of the \(dq\&path\(dq\& is actually a module name. +.IP o +the remote daemon may print a message of the day when you +connect. +.IP o +if you specify no path name on the remote daemon then the +list of accessible paths on the daemon will be shown. +.IP o +if you specify no local destination then a listing of the +specified files on the remote daemon is provided. +.IP o +you must not specify the \fB\-\-rsh\fP (\fB\-e\fP) option. + +.PP +An example that copies all the files in a remote module named \(dq\&src\(dq\&: +.PP +.nf + rsync \-av host::src /dest +.fi + +.PP +Some modules on the remote daemon may require authentication. If so, +you will receive a password prompt when you connect. You can avoid the +password prompt by setting the environment variable RSYNC_PASSWORD to +the password you want to use or using the \fB\-\-password\-file\fP option. This +may be useful when scripting rsync. +.PP +WARNING: On some systems environment variables are visible to all +users. On those systems using \fB\-\-password\-file\fP is recommended. +.PP +You may establish the connection via a web proxy by setting the +environment variable RSYNC_PROXY to a hostname:port pair pointing to +your web proxy. Note that your web proxy\(cq\&s configuration must support +proxy connections to port 873. +.PP +You may also establish a daemon connection using a program as a proxy by +setting the environment variable RSYNC_CONNECT_PROG to the commands you +wish to run in place of making a direct socket connection. The string may +contain the escape \(dq\&%H\(dq\& to represent the hostname specified in the rsync +command (so use \(dq\&%%\(dq\& if you need a single \(dq\&%\(dq\& in your string). For +example: +.PP +.nf + export RSYNC_CONNECT_PROG='\&ssh proxyhost nc %H 873'\& + rsync \-av targethost1::module/src/ /dest/ + rsync \-av rsync:://targethost2/module/src/ /dest/ +.fi + +.PP +The command specified above uses ssh to run nc (netcat) on a proxyhost, +which forwards all data to port 873 (the rsync daemon) on the targethost +(%H). +.PP +.SH "USING RSYNC\-DAEMON FEATURES VIA A REMOTE\-SHELL CONNECTION" + +.PP +It is sometimes useful to use various features of an rsync daemon (such as +named modules) without actually allowing any new socket connections into a +system (other than what is already required to allow remote\-shell access). +Rsync supports connecting to a host using a remote shell and then spawning +a single\-use \(dq\&daemon\(dq\& server that expects to read its config file in the +home dir of the remote user. This can be useful if you want to encrypt a +daemon\-style transfer\(cq\&s data, but since the daemon is started up fresh by +the remote user, you may not be able to use features such as chroot or +change the uid used by the daemon. (For another way to encrypt a daemon +transfer, consider using ssh to tunnel a local port to a remote machine and +configure a normal rsync daemon on that remote host to only allow +connections from \(dq\&localhost\(dq\&.) +.PP +From the user\(cq\&s perspective, a daemon transfer via a remote\-shell +connection uses nearly the same command\-line syntax as a normal +rsync\-daemon transfer, with the only exception being that you must +explicitly set the remote shell program on the command\-line with the +\fB\-\-rsh=COMMAND\fP option. (Setting the RSYNC_RSH in the environment +will not turn on this functionality.) For example: +.PP +.nf + rsync \-av \-\-rsh=ssh host::module /dest +.fi + +.PP +If you need to specify a different remote\-shell user, keep in mind that the +user@ prefix in front of the host is specifying the rsync\-user value (for a +module that requires user\-based authentication). This means that you must +give the \(cq\&\-l user\(cq\& option to ssh when specifying the remote\-shell, as in +this example that uses the short version of the \fB\-\-rsh\fP option: +.PP +.nf + rsync \-av \-e \(dq\&ssh \-l ssh\-user\(dq\& rsync\-user@host::module /dest +.fi + +.PP +The \(dq\&ssh\-user\(dq\& will be used at the ssh level; the \(dq\&rsync\-user\(dq\& will be +used to log\-in to the \(dq\&module\(dq\&. +.PP +.SH "STARTING AN RSYNC DAEMON TO ACCEPT CONNECTIONS" + +.PP +In order to connect to an rsync daemon, the remote system needs to have a +daemon already running (or it needs to have configured something like inetd +to spawn an rsync daemon for incoming connections on a particular port). +For full information on how to start a daemon that will handling incoming +socket connections, see the \fBrsyncd.conf\fP(5) man page \-\- that is the config +file for the daemon, and it contains the full details for how to run the +daemon (including stand\-alone and inetd configurations). +.PP +If you\(cq\&re using one of the remote\-shell transports for the transfer, there is +no need to manually start an rsync daemon. +.PP +.SH "SORTED TRANSFER ORDER" + +.PP +Rsync always sorts the specified filenames into its internal transfer list. +This handles the merging together of the contents of identically named +directories, makes it easy to remove duplicate filenames, and may confuse +someone when the files are transferred in a different order than what was +given on the command\-line. +.PP +If you need a particular file to be transferred prior to another, either +separate the files into different rsync calls, or consider using +\fB\-\-delay\-updates\fP (which doesn\(cq\&t affect the sorted transfer order, but +does make the final file\-updating phase happen much more rapidly). +.PP +.SH "EXAMPLES" + +.PP +Here are some examples of how I use rsync. +.PP +To backup my wife\(cq\&s home directory, which consists of large MS Word +files and mail folders, I use a cron job that runs +.PP +.RS +\f(CWrsync \-Cavz . arvidsjaur:backup\fP +.RE + +.PP +each night over a PPP connection to a duplicate directory on my machine +\(dq\&arvidsjaur\(dq\&. +.PP +To synchronize my samba source trees I use the following Makefile +targets: +.PP +.nf + get: + rsync \-avuzb \-\-exclude '\&*~'\& samba:samba/ . + put: + rsync \-Cavuzb . samba:samba/ + sync: get put +.fi + +.PP +this allows me to sync with a CVS directory at the other end of the +connection. I then do CVS operations on the remote machine, which saves a +lot of time as the remote CVS protocol isn\(cq\&t very efficient. +.PP +I mirror a directory between my \(dq\&old\(dq\& and \(dq\&new\(dq\& ftp sites with the +command: +.PP +\f(CWrsync \-az \-e ssh \-\-delete ~ftp/pub/samba nimbus:\(dq\&~ftp/pub/tridge\(dq\&\fP +.PP +This is launched from cron every few hours. +.PP +.SH "OPTIONS SUMMARY" + +.PP +Here is a short summary of the options available in rsync. Please refer +to the detailed description below for a complete description. +.nf + + \-v, \-\-verbose increase verbosity + \-\-info=FLAGS fine\-grained informational verbosity + \-\-debug=FLAGS fine\-grained debug verbosity + \-\-msgs2stderr special output handling for debugging + \-q, \-\-quiet suppress non\-error messages + \-\-no\-motd suppress daemon\-mode MOTD (see caveat) + \-c, \-\-checksum skip based on checksum, not mod\-time & size + \-a, \-\-archive archive mode; equals \-rlptgoD (no \-H,\-A,\-X) + \-\-no\-OPTION turn off an implied OPTION (e.g. \-\-no\-D) + \-r, \-\-recursive recurse into directories + \-R, \-\-relative use relative path names + \-\-no\-implied\-dirs don'\&t send implied dirs with \-\-relative + \-b, \-\-backup make backups (see \-\-suffix & \-\-backup\-dir) + \-\-backup\-dir=DIR make backups into hierarchy based in DIR + \-\-suffix=SUFFIX backup suffix (default ~ w/o \-\-backup\-dir) + \-u, \-\-update skip files that are newer on the receiver + \-\-inplace update destination files in\-place + \-\-append append data onto shorter files + \-\-append\-verify \-\-append w/old data in file checksum + \-d, \-\-dirs transfer directories without recursing + \-l, \-\-links copy symlinks as symlinks + \-L, \-\-copy\-links transform symlink into referent file/dir + \-\-copy\-unsafe\-links only \(dq\&unsafe\(dq\& symlinks are transformed + \-\-safe\-links ignore symlinks that point outside the tree + \-\-munge\-links munge symlinks to make them safer + \-k, \-\-copy\-dirlinks transform symlink to dir into referent dir + \-K, \-\-keep\-dirlinks treat symlinked dir on receiver as dir + \-H, \-\-hard\-links preserve hard links + \-p, \-\-perms preserve permissions + \-E, \-\-executability preserve executability + \-\-chmod=CHMOD affect file and/or directory permissions + \-A, \-\-acls preserve ACLs (implies \-p) + \-X, \-\-xattrs preserve extended attributes + \-o, \-\-owner preserve owner (super\-user only) + \-g, \-\-group preserve group + \-\-devices preserve device files (super\-user only) + \-\-specials preserve special files + \-D same as \-\-devices \-\-specials + \-t, \-\-times preserve modification times + \-O, \-\-omit\-dir\-times omit directories from \-\-times + \-J, \-\-omit\-link\-times omit symlinks from \-\-times + \-\-super receiver attempts super\-user activities + \-\-fake\-super store/recover privileged attrs using xattrs + \-S, \-\-sparse handle sparse files efficiently + \-\-preallocate allocate dest files before writing + \-n, \-\-dry\-run perform a trial run with no changes made + \-W, \-\-whole\-file copy files whole (w/o delta\-xfer algorithm) + \-x, \-\-one\-file\-system don'\&t cross filesystem boundaries + \-B, \-\-block\-size=SIZE force a fixed checksum block\-size + \-e, \-\-rsh=COMMAND specify the remote shell to use + \-\-rsync\-path=PROGRAM specify the rsync to run on remote machine + \-\-existing skip creating new files on receiver + \-\-ignore\-existing skip updating files that exist on receiver + \-\-remove\-source\-files sender removes synchronized files (non\-dir) + \-\-del an alias for \-\-delete\-during + \-\-delete delete extraneous files from dest dirs + \-\-delete\-before receiver deletes before xfer, not during + \-\-delete\-during receiver deletes during the transfer + \-\-delete\-delay find deletions during, delete after + \-\-delete\-after receiver deletes after transfer, not during + \-\-delete\-excluded also delete excluded files from dest dirs + \-\-ignore\-missing\-args ignore missing source args without error + \-\-delete\-missing\-args delete missing source args from destination + \-\-ignore\-errors delete even if there are I/O errors + \-\-force force deletion of dirs even if not empty + \-\-max\-delete=NUM don'\&t delete more than NUM files + \-\-max\-size=SIZE don'\&t transfer any file larger than SIZE + \-\-min\-size=SIZE don'\&t transfer any file smaller than SIZE + \-\-partial keep partially transferred files + \-\-partial\-dir=DIR put a partially transferred file into DIR + \-\-delay\-updates put all updated files into place at end + \-m, \-\-prune\-empty\-dirs prune empty directory chains from file\-list + \-\-numeric\-ids don'\&t map uid/gid values by user/group name + \-\-usermap=STRING custom username mapping + \-\-groupmap=STRING custom groupname mapping + \-\-chown=USER:GROUP simple username/groupname mapping + \-\-timeout=SECONDS set I/O timeout in seconds + \-\-contimeout=SECONDS set daemon connection timeout in seconds + \-I, \-\-ignore\-times don'\&t skip files that match size and time + \-\-size\-only skip files that match in size + \-\-modify\-window=NUM compare mod\-times with reduced accuracy + \-T, \-\-temp\-dir=DIR create temporary files in directory DIR + \-y, \-\-fuzzy find similar file for basis if no dest file + \-\-compare\-dest=DIR also compare received files relative to DIR + \-\-copy\-dest=DIR ... and include copies of unchanged files + \-\-link\-dest=DIR hardlink to files in DIR when unchanged + \-z, \-\-compress compress file data during the transfer + \-\-compress\-level=NUM explicitly set compression level + \-\-skip\-compress=LIST skip compressing files with suffix in LIST + \-C, \-\-cvs\-exclude auto\-ignore files in the same way CVS does + \-f, \-\-filter=RULE add a file\-filtering RULE + \-F same as \-\-filter='\&dir\-merge /.rsync\-filter'\& + repeated: \-\-filter='\&\- .rsync\-filter'\& + \-\-exclude=PATTERN exclude files matching PATTERN + \-\-exclude\-from=FILE read exclude patterns from FILE + \-\-include=PATTERN don'\&t exclude files matching PATTERN + \-\-include\-from=FILE read include patterns from FILE + \-\-files\-from=FILE read list of source\-file names from FILE + \-0, \-\-from0 all *from/filter files are delimited by 0s + \-s, \-\-protect\-args no space\-splitting; wildcard chars only + \-\-address=ADDRESS bind address for outgoing socket to daemon + \-\-port=PORT specify double\-colon alternate port number + \-\-sockopts=OPTIONS specify custom TCP options + \-\-blocking\-io use blocking I/O for the remote shell + \-\-outbuf=N|L|B set out buffering to None, Line, or Block + \-\-stats give some file\-transfer stats + \-8, \-\-8\-bit\-output leave high\-bit chars unescaped in output + \-h, \-\-human\-readable output numbers in a human\-readable format + \-\-progress show progress during transfer + \-P same as \-\-partial \-\-progress + \-i, \-\-itemize\-changes output a change\-summary for all updates + \-M, \-\-remote\-option=OPTION send OPTION to the remote side only + \-\-out\-format=FORMAT output updates using the specified FORMAT + \-\-log\-file=FILE log what we'\&re doing to the specified FILE + \-\-log\-file\-format=FMT log updates using the specified FMT + \-\-password\-file=FILE read daemon\-access password from FILE + \-\-list\-only list the files instead of copying them + \-\-bwlimit=RATE limit socket I/O bandwidth + \-\-write\-batch=FILE write a batched update to FILE + \-\-only\-write\-batch=FILE like \-\-write\-batch but w/o updating dest + \-\-read\-batch=FILE read a batched update from FILE + \-\-protocol=NUM force an older protocol version to be used + \-\-iconv=CONVERT_SPEC request charset conversion of filenames + \-\-checksum\-seed=NUM set block/file checksum seed (advanced) + \-4, \-\-ipv4 prefer IPv4 + \-6, \-\-ipv6 prefer IPv6 + \-\-version print version number +(\-h) \-\-help show this help (see below for \-h comment) +.fi + +.PP +Rsync can also be run as a daemon, in which case the following options are +accepted: +.nf + + \-\-daemon run as an rsync daemon + \-\-address=ADDRESS bind to the specified address + \-\-bwlimit=RATE limit socket I/O bandwidth + \-\-config=FILE specify alternate rsyncd.conf file + \-M, \-\-dparam=OVERRIDE override global daemon config parameter + \-\-no\-detach do not detach from the parent + \-\-port=PORT listen on alternate port number + \-\-log\-file=FILE override the \(dq\&log file\(dq\& setting + \-\-log\-file\-format=FMT override the \(dq\&log format\(dq\& setting + \-\-sockopts=OPTIONS specify custom TCP options + \-v, \-\-verbose increase verbosity + \-4, \-\-ipv4 prefer IPv4 + \-6, \-\-ipv6 prefer IPv6 + \-h, \-\-help show this help (if used after \-\-daemon) +.fi + +.PP +.SH "OPTIONS" + +.PP +Rsync accepts both long (double\-dash + word) and short (single\-dash + letter) +options. The full list of the available options are described below. If an +option can be specified in more than one way, the choices are comma\-separated. +Some options only have a long variant, not a short. If the option takes a +parameter, the parameter is only listed after the long variant, even though it +must also be specified for the short. When specifying a parameter, you can +either use the form \-\-option=param or replace the \(cq\&=\(cq\& with whitespace. The +parameter may need to be quoted in some manner for it to survive the shell\(cq\&s +command\-line parsing. Keep in mind that a leading tilde (~) in a filename is +substituted by your shell, so \-\-option=~/foo will not change the tilde into +your home directory (remove the \(cq\&=\(cq\& for that). +.PP +.IP "\fB\-\-help\fP" +Print a short help page describing the options +available in rsync and exit. For backward\-compatibility with older +versions of rsync, the help will also be output if you use the \fB\-h\fP +option without any other args. +.IP +.IP "\fB\-\-version\fP" +print the rsync version number and exit. +.IP +.IP "\fB\-v, \-\-verbose\fP" +This option increases the amount of information you +are given during the transfer. By default, rsync works silently. A +single \fB\-v\fP will give you information about what files are being +transferred and a brief summary at the end. Two \fB\-v\fP options will give you +information on what files are being skipped and slightly more +information at the end. More than two \fB\-v\fP options should only be used if +you are debugging rsync. +.IP +In a modern rsync, the \fB\-v\fP option is equivalent to the setting of groups +of \fB\-\-info\fP and \fB\-\-debug\fP options. You can choose to use these newer +options in addition to, or in place of using \fB\-\-verbose\fP, as any +fine\-grained settings override the implied settings of \fB\-v\fP. Both +\fB\-\-info\fP and \fB\-\-debug\fP have a way to ask for help that tells you +exactly what flags are set for each increase in verbosity. +.IP +However, do keep in mind that a daemon\(cq\&s \(dq\&max verbosity\(dq\& setting will limit how +high of a level the various individual flags can be set on the daemon side. +For instance, if the max is 2, then any info and/or debug flag that is set to +a higher value than what would be set by \fB\-vv\fP will be downgraded to the +\fB\-vv\fP level in the daemon\(cq\&s logging. +.IP +.IP "\fB\-\-info=FLAGS\fP" +This option lets you have fine\-grained control over the +information +output you want to see. An individual flag name may be followed by a level +number, with 0 meaning to silence that output, 1 being the default output +level, and higher numbers increasing the output of that flag (for those +that support higher levels). Use +\fB\-\-info=help\fP +to see all the available flag names, what they output, and what flag names +are added for each increase in the verbose level. Some examples: +.IP +.nf + rsync \-a \-\-info=progress2 src/ dest/ + rsync \-avv \-\-info=stats2,misc1,flist0 src/ dest/ +.fi + +.IP +Note that \fB\-\-info=name\fP\(cq\&s output is affected by the \fB\-\-out\-format\fP and +\fB\-\-itemize\-changes\fP (\fB\-i\fP) options. See those options for more +information on what is output and when. +.IP +This option was added to 3.1.0, so an older rsync on the server side might +reject your attempts at fine\-grained control (if one or more flags needed +to be send to the server and the server was too old to understand them). +See also the \(dq\&max verbosity\(dq\& caveat above when dealing with a daemon. +.IP +.IP "\fB\-\-debug=FLAGS\fP" +This option lets you have fine\-grained control over the debug +output you want to see. An individual flag name may be followed by a level +number, with 0 meaning to silence that output, 1 being the default output +level, and higher numbers increasing the output of that flag (for those +that support higher levels). Use +\fB\-\-debug=help\fP +to see all the available flag names, what they output, and what flag names +are added for each increase in the verbose level. Some examples: +.IP +.nf + rsync \-avvv \-\-debug=none src/ dest/ + rsync \-avA \-\-del \-\-debug=del2,acl src/ dest/ +.fi + +.IP +Note that some debug messages will only be output when \fB\-\-msgs2stderr\fP is +specified, especially those pertaining to I/O and buffer debugging. +.IP +This option was added to 3.1.0, so an older rsync on the server side might +reject your attempts at fine\-grained control (if one or more flags needed +to be send to the server and the server was too old to understand them). +See also the \(dq\&max verbosity\(dq\& caveat above when dealing with a daemon. +.IP +.IP "\fB\-\-msgs2stderr\fP" +This option changes rsync to send all its output +directly to stderr rather than to send messages to the client side via the +protocol (which normally outputs info messages via stdout). This is mainly +intended for debugging in order to avoid changing the data sent via the +protocol, since the extra protocol data can change what is being tested. +The option does not affect the remote side of a transfer without using +\fB\-\-remote\-option\fP \-\- e.g. \fB\-M\-\-msgs2stderr\fP. +Also keep in mind that a daemon connection does not have a stderr channel to send +messages back to the client side, so if you are doing any daemon\-transfer +debugging using this option, you should start up a daemon using \fB\-\-no\-detach\fP +so that you can see the stderr output on the daemon side. +.IP +This option has the side\-effect of making stderr output get line\-buffered so +that the merging of the output of 3 programs happens in a more readable manner. +.IP +.IP "\fB\-q, \-\-quiet\fP" +This option decreases the amount of information you +are given during the transfer, notably suppressing information messages +from the remote server. This option is useful when invoking rsync from +cron. +.IP +.IP "\fB\-\-no\-motd\fP" +This option affects the information that is output +by the client at the start of a daemon transfer. This suppresses the +message\-of\-the\-day (MOTD) text, but it also affects the list of modules +that the daemon sends in response to the \(dq\&rsync host::\(dq\& request (due to +a limitation in the rsync protocol), so omit this option if you want to +request the list of modules from the daemon. +.IP +.IP "\fB\-I, \-\-ignore\-times\fP" +Normally rsync will skip any files that are +already the same size and have the same modification timestamp. +This option turns off this \(dq\&quick check\(dq\& behavior, causing all files to +be updated. +.IP +.IP "\fB\-\-size\-only\fP" +This modifies rsync\(cq\&s \(dq\&quick check\(dq\& algorithm for +finding files that need to be transferred, changing it from the default of +transferring files with either a changed size or a changed last\-modified +time to just looking for files that have changed in size. This is useful +when starting to use rsync after using another mirroring system which may +not preserve timestamps exactly. +.IP +.IP "\fB\-\-modify\-window\fP" +When comparing two timestamps, rsync treats the +timestamps as being equal if they differ by no more than the modify\-window +value. This is normally 0 (for an exact match), but you may find it useful +to set this to a larger value in some situations. In particular, when +transferring to or from an MS Windows FAT filesystem (which represents +times with a 2\-second resolution), \fB\-\-modify\-window=1\fP is useful +(allowing times to differ by up to 1 second). +.IP +.IP "\fB\-c, \-\-checksum\fP" +This changes the way rsync checks if the files have +been changed and are in need of a transfer. Without this option, rsync +uses a \(dq\&quick check\(dq\& that (by default) checks if each file\(cq\&s size and time +of last modification match between the sender and receiver. This option +changes this to compare a 128\-bit checksum for each file that has a +matching size. Generating the checksums means that both sides will expend +a lot of disk I/O reading all the data in the files in the transfer (and +this is prior to any reading that will be done to transfer changed files), +so this can slow things down significantly. +.IP +The sending side generates its checksums while it is doing the file\-system +scan that builds the list of the available files. The receiver generates +its checksums when it is scanning for changed files, and will checksum any +file that has the same size as the corresponding sender\(cq\&s file: files with +either a changed size or a changed checksum are selected for transfer. +.IP +Note that rsync always verifies that each \fItransferred\fP file was +correctly reconstructed on the receiving side by checking a whole\-file +checksum that is generated as the file is transferred, but that +automatic after\-the\-transfer verification has nothing to do with this +option\(cq\&s before\-the\-transfer \(dq\&Does this file need to be updated?\(dq\& check. +.IP +For protocol 30 and beyond (first supported in 3.0.0), the checksum used is +MD5. For older protocols, the checksum used is MD4. +.IP +.IP "\fB\-a, \-\-archive\fP" +This is equivalent to \fB\-rlptgoD\fP. It is a quick +way of saying you want recursion and want to preserve almost +everything (with \-H being a notable omission). +The only exception to the above equivalence is when \fB\-\-files\-from\fP is +specified, in which case \fB\-r\fP is not implied. +.IP +Note that \fB\-a\fP \fBdoes not preserve hardlinks\fP, because +finding multiply\-linked files is expensive. You must separately +specify \fB\-H\fP. +.IP +.IP "\-\-no\-OPTION" +You may turn off one or more implied options by prefixing +the option name with \(dq\&no\-\(dq\&. Not all options may be prefixed with a \(dq\&no\-\(dq\&: +only options that are implied by other options (e.g. \fB\-\-no\-D\fP, +\fB\-\-no\-perms\fP) or have different defaults in various circumstances +(e.g. \fB\-\-no\-whole\-file\fP, \fB\-\-no\-blocking\-io\fP, \fB\-\-no\-dirs\fP). You may +specify either the short or the long option name after the \(dq\&no\-\(dq\& prefix +(e.g. \fB\-\-no\-R\fP is the same as \fB\-\-no\-relative\fP). +.IP +For example: if you want to use \fB\-a\fP (\fB\-\-archive\fP) but don\(cq\&t want +\fB\-o\fP (\fB\-\-owner\fP), instead of converting \fB\-a\fP into \fB\-rlptgD\fP, you +could specify \fB\-a \-\-no\-o\fP (or \fB\-a \-\-no\-owner\fP). +.IP +The order of the options is important: if you specify \fB\-\-no\-r \-a\fP, the +\fB\-r\fP option would end up being turned on, the opposite of \fB\-a \-\-no\-r\fP. +Note also that the side\-effects of the \fB\-\-files\-from\fP option are NOT +positional, as it affects the default state of several options and slightly +changes the meaning of \fB\-a\fP (see the \fB\-\-files\-from\fP option for more +details). +.IP +.IP "\fB\-r, \-\-recursive\fP" +This tells rsync to copy directories +recursively. See also \fB\-\-dirs\fP (\fB\-d\fP). +.IP +Beginning with rsync 3.0.0, the recursive algorithm used is now an +incremental scan that uses much less memory than before and begins the +transfer after the scanning of the first few directories have been +completed. This incremental scan only affects our recursion algorithm, and +does not change a non\-recursive transfer. It is also only possible when +both ends of the transfer are at least version 3.0.0. +.IP +Some options require rsync to know the full file list, so these options +disable the incremental recursion mode. These include: \fB\-\-delete\-before\fP, +\fB\-\-delete\-after\fP, \fB\-\-prune\-empty\-dirs\fP, and \fB\-\-delay\-updates\fP. +Because of this, the default delete mode when you specify \fB\-\-delete\fP is now +\fB\-\-delete\-during\fP when both ends of the connection are at least 3.0.0 +(use \fB\-\-del\fP or \fB\-\-delete\-during\fP to request this improved deletion mode +explicitly). See also the \fB\-\-delete\-delay\fP option that is a better choice +than using \fB\-\-delete\-after\fP. +.IP +Incremental recursion can be disabled using the \fB\-\-no\-inc\-recursive\fP +option or its shorter \fB\-\-no\-i\-r\fP alias. +.IP +.IP "\fB\-R, \-\-relative\fP" +Use relative paths. This means that the full path +names specified on the command line are sent to the server rather than +just the last parts of the filenames. This is particularly useful when +you want to send several different directories at the same time. For +example, if you used this command: +.IP +.RS +\f(CW rsync \-av /foo/bar/baz.c remote:/tmp/\fP +.RE + +.IP +\&... this would create a file named baz.c in /tmp/ on the remote +machine. If instead you used +.IP +.RS +\f(CW rsync \-avR /foo/bar/baz.c remote:/tmp/\fP +.RE + +.IP +then a file named /tmp/foo/bar/baz.c would be created on the remote +machine, preserving its full path. These extra path elements are called +\(dq\&implied directories\(dq\& (i.e. the \(dq\&foo\(dq\& and the \(dq\&foo/bar\(dq\& directories in the +above example). +.IP +Beginning with rsync 3.0.0, rsync always sends these implied directories as +real directories in the file list, even if a path element is really a +symlink on the sending side. This prevents some really unexpected +behaviors when copying the full path of a file that you didn\(cq\&t realize had +a symlink in its path. If you want to duplicate a server\-side symlink, +include both the symlink via its path, and referent directory via its real +path. If you\(cq\&re dealing with an older rsync on the sending side, you may +need to use the \fB\-\-no\-implied\-dirs\fP option. +.IP +It is also possible to limit the amount of path information that is sent as +implied directories for each path you specify. With a modern rsync on the +sending side (beginning with 2.6.7), you can insert a dot and a slash into +the source path, like this: +.IP +.RS +\f(CW rsync \-avR /foo/./bar/baz.c remote:/tmp/\fP +.RE + +.IP +That would create /tmp/bar/baz.c on the remote machine. (Note that the +dot must be followed by a slash, so \(dq\&/foo/.\(dq\& would not be abbreviated.) +For older rsync versions, you would need to use a chdir to limit the +source path. For example, when pushing files: +.IP +.RS +\f(CW (cd /foo; rsync \-avR bar/baz.c remote:/tmp/) \fP +.RE + +.IP +(Note that the parens put the two commands into a sub\-shell, so that the +\(dq\&cd\(dq\& command doesn\(cq\&t remain in effect for future commands.) +If you\(cq\&re pulling files from an older rsync, use this idiom (but only +for a non\-daemon transfer): +.IP +.RS +\f(CW rsync \-avR \-\-rsync\-path=\(dq\&cd /foo; rsync\(dq\& \e \fP +.br +\f(CW remote:bar/baz.c /tmp/\fP +.RE + +.IP +.IP "\fB\-\-no\-implied\-dirs\fP" +This option affects the default behavior of the +\fB\-\-relative\fP option. When it is specified, the attributes of the implied +directories from the source names are not included in the transfer. This +means that the corresponding path elements on the destination system are +left unchanged if they exist, and any missing implied directories are +created with default attributes. This even allows these implied path +elements to have big differences, such as being a symlink to a directory on +the receiving side. +.IP +For instance, if a command\-line arg or a files\-from entry told rsync to +transfer the file \(dq\&path/foo/file\(dq\&, the directories \(dq\&path\(dq\& and \(dq\&path/foo\(dq\& +are implied when \fB\-\-relative\fP is used. If \(dq\&path/foo\(dq\& is a symlink to +\(dq\&bar\(dq\& on the destination system, the receiving rsync would ordinarily +delete \(dq\&path/foo\(dq\&, recreate it as a directory, and receive the file into +the new directory. With \fB\-\-no\-implied\-dirs\fP, the receiving rsync updates +\(dq\&path/foo/file\(dq\& using the existing path elements, which means that the file +ends up being created in \(dq\&path/bar\(dq\&. Another way to accomplish this link +preservation is to use the \fB\-\-keep\-dirlinks\fP option (which will also +affect symlinks to directories in the rest of the transfer). +.IP +When pulling files from an rsync older than 3.0.0, you may need to use this +option if the sending side has a symlink in the path you request and you +wish the implied directories to be transferred as normal directories. +.IP +.IP "\fB\-b, \-\-backup\fP" +With this option, preexisting destination files are +renamed as each file is transferred or deleted. You can control where the +backup file goes and what (if any) suffix gets appended using the +\fB\-\-backup\-dir\fP and \fB\-\-suffix\fP options. +.IP +Note that if you don\(cq\&t specify \fB\-\-backup\-dir\fP, (1) the +\fB\-\-omit\-dir\-times\fP option will be implied, and (2) if \fB\-\-delete\fP is +also in effect (without \fB\-\-delete\-excluded\fP), rsync will add a \(dq\&protect\(dq\& +filter\-rule for the backup suffix to the end of all your existing excludes +(e.g. \fB\-f \(dq\&P *~\(dq\&\fP). This will prevent previously backed\-up files from being +deleted. Note that if you are supplying your own filter rules, you may +need to manually insert your own exclude/protect rule somewhere higher up +in the list so that it has a high enough priority to be effective (e.g., if +your rules specify a trailing inclusion/exclusion of \(cq\&*\(cq\&, the auto\-added +rule would never be reached). +.IP +.IP "\fB\-\-backup\-dir=DIR\fP" +In combination with the \fB\-\-backup\fP option, this +tells rsync to store all backups in the specified directory on the receiving +side. This can be used for incremental backups. You can additionally +specify a backup suffix using the \fB\-\-suffix\fP option +(otherwise the files backed up in the specified directory +will keep their original filenames). +.IP +Note that if you specify a relative path, the backup directory will be +relative to the destination directory, so you probably want to specify +either an absolute path or a path that starts with \(dq\&../\(dq\&. If an rsync +daemon is the receiver, the backup dir cannot go outside the module\(cq\&s path +hierarchy, so take extra care not to delete it or copy into it. +.IP +.IP "\fB\-\-suffix=SUFFIX\fP" +This option allows you to override the default +backup suffix used with the \fB\-\-backup\fP (\fB\-b\fP) option. The default suffix is a ~ +if no \-\fB\-backup\-dir\fP was specified, otherwise it is an empty string. +.IP +.IP "\fB\-u, \-\-update\fP" +This forces rsync to skip any files which exist on +the destination and have a modified time that is newer than the source +file. (If an existing destination file has a modification time equal to the +source file\(cq\&s, it will be updated if the sizes are different.) +.IP +Note that this does not affect the copying of dirs, symlinks, or other special +files. Also, a difference of file format between the sender and receiver +is always considered to be important enough for an update, no matter what +date is on the objects. In other words, if the source has a directory +where the destination has a file, the transfer would occur regardless of +the timestamps. +.IP +This option is a transfer rule, not an exclude, so it doesn\(cq\&t affect the +data that goes into the file\-lists, and thus it doesn\(cq\&t affect deletions. +It just limits the files that the receiver requests to be transferred. +.IP +.IP "\fB\-\-inplace\fP" +This option changes how rsync transfers a file when +its data needs to be updated: instead of the default method of creating +a new copy of the file and moving it into place when it is complete, rsync +instead writes the updated data directly to the destination file. +.IP +This has several effects: +.IP +.RS +.IP o +Hard links are not broken. This means the new data will be visible +through other hard links to the destination file. Moreover, attempts to +copy differing source files onto a multiply\-linked destination file will +result in a \(dq\&tug of war\(dq\& with the destination data changing back and forth. +.IP o +In\-use binaries cannot be updated (either the OS will prevent this from +happening, or binaries that attempt to swap\-in their data will misbehave or +crash). +.IP o +The file\(cq\&s data will be in an inconsistent state during the transfer +and will be left that way if the transfer is interrupted or if an update +fails. +.IP o +A file that rsync cannot write to cannot be updated. While a super user +can update any file, a normal user needs to be granted write permission for +the open of the file for writing to be successful. +.IP o +The efficiency of rsync\(cq\&s delta\-transfer algorithm may be reduced if +some data in the destination file is overwritten before it can be copied to +a position later in the file. This does not apply if you use \fB\-\-backup\fP, +since rsync is smart enough to use the backup file as the basis file for the +transfer. +.RE + +.IP +WARNING: you should not use this option to update files that are being +accessed by others, so be careful when choosing to use this for a copy. +.IP +This option is useful for transferring large files with block\-based changes +or appended data, and also on systems that are disk bound, not network +bound. It can also help keep a copy\-on\-write filesystem snapshot from +diverging the entire contents of a file that only has minor changes. +.IP +The option implies \fB\-\-partial\fP (since an interrupted transfer does not delete +the file), but conflicts with \fB\-\-partial\-dir\fP and \fB\-\-delay\-updates\fP. +Prior to rsync 2.6.4 \fB\-\-inplace\fP was also incompatible with \fB\-\-compare\-dest\fP +and \fB\-\-link\-dest\fP. +.IP +.IP "\fB\-\-append\fP" +This causes rsync to update a file by appending data onto +the end of the file, which presumes that the data that already exists on +the receiving side is identical with the start of the file on the sending +side. If a file needs to be transferred and its size on the receiver is +the same or longer than the size on the sender, the file is skipped. This +does not interfere with the updating of a file\(cq\&s non\-content attributes +(e.g. permissions, ownership, etc.) when the file does not need to be +transferred, nor does it affect the updating of any non\-regular files. +Implies \fB\-\-inplace\fP, +but does not conflict with \fB\-\-sparse\fP (since it is always extending a +file\(cq\&s length). +.IP +The use of \fB\-\-append\fP can be dangerous if you aren\(cq\&t 100% sure that the files +that are longer have only grown by the appending of data onto the end. You +should thus use include/exclude/filter rules to ensure that such a transfer is +only affecting files that you know to be growing via appended data. +.IP +.IP "\fB\-\-append\-verify\fP" +This works just like the \fB\-\-append\fP option, but +the existing data on the receiving side is included in the full\-file +checksum verification step, which will cause a file to be resent if the +final verification step fails (rsync uses a normal, non\-appending +\fB\-\-inplace\fP transfer for the resend). +.IP +Note: prior to rsync 3.0.0, the \fB\-\-append\fP option worked like +\fB\-\-append\-verify\fP, so if you are interacting with an older rsync (or the +transfer is using a protocol prior to 30), specifying either append option +will initiate an \fB\-\-append\-verify\fP transfer. +.IP +.IP "\fB\-d, \-\-dirs\fP" +Tell the sending side to include any directories that +are encountered. Unlike \fB\-\-recursive\fP, a directory\(cq\&s contents are not copied +unless the directory name specified is \(dq\&.\(dq\& or ends with a trailing slash +(e.g. \(dq\&.\(dq\&, \(dq\&dir/.\(dq\&, \(dq\&dir/\(dq\&, etc.). Without this option or the +\fB\-\-recursive\fP option, rsync will skip all directories it encounters (and +output a message to that effect for each one). If you specify both +\fB\-\-dirs\fP and \fB\-\-recursive\fP, \fB\-\-recursive\fP takes precedence. +.IP +The \fB\-\-dirs\fP option is implied by the \fB\-\-files\-from\fP option +or the \fB\-\-list\-only\fP option (including an implied +\fB\-\-list\-only\fP usage) if \fB\-\-recursive\fP wasn\(cq\&t specified (so that +directories are seen in the listing). Specify \fB\-\-no\-dirs\fP (or \fB\-\-no\-d\fP) +if you want to turn this off. +.IP +There is also a backward\-compatibility helper option, \fB\-\-old\-dirs\fP (or +\fB\-\-old\-d\fP) that tells rsync to use a hack of \(dq\&\-r \-\-exclude=\(cq\&/*/*\(cq\&\(dq\& to get +an older rsync to list a single directory without recursing. +.IP +.IP "\fB\-l, \-\-links\fP" +When symlinks are encountered, recreate the +symlink on the destination. +.IP +.IP "\fB\-L, \-\-copy\-links\fP" +When symlinks are encountered, the item that +they point to (the referent) is copied, rather than the symlink. In older +versions of rsync, this option also had the side\-effect of telling the +receiving side to follow symlinks, such as symlinks to directories. In a +modern rsync such as this one, you\(cq\&ll need to specify \fB\-\-keep\-dirlinks\fP (\fB\-K\fP) +to get this extra behavior. The only exception is when sending files to +an rsync that is too old to understand \fB\-K\fP \-\- in that case, the \fB\-L\fP option +will still have the side\-effect of \fB\-K\fP on that older receiving rsync. +.IP +.IP "\fB\-\-copy\-unsafe\-links\fP" +This tells rsync to copy the referent of +symbolic links that point outside the copied tree. Absolute symlinks +are also treated like ordinary files, and so are any symlinks in the +source path itself when \fB\-\-relative\fP is used. This option has no +additional effect if \fB\-\-copy\-links\fP was also specified. +.IP +.IP "\fB\-\-safe\-links\fP" +This tells rsync to ignore any symbolic links +which point outside the copied tree. All absolute symlinks are +also ignored. Using this option in conjunction with \fB\-\-relative\fP may +give unexpected results. +.IP +.IP "\fB\-\-munge\-links\fP" +This option tells rsync to (1) modify all symlinks on +the receiving side in a way that makes them unusable but recoverable (see +below), or (2) to unmunge symlinks on the sending side that had been stored in +a munged state. This is useful if you don\(cq\&t quite trust the source of the data +to not try to slip in a symlink to a unexpected place. +.IP +The way rsync disables the use of symlinks is to prefix each one with the +string \(dq\&/rsyncd\-munged/\(dq\&. This prevents the links from being used as long as +that directory does not exist. When this option is enabled, rsync will refuse +to run if that path is a directory or a symlink to a directory. +.IP +The option only affects the client side of the transfer, so if you need it to +affect the server, specify it via \fB\-\-remote\-option\fP. (Note that in a local +transfer, the client side is the sender.) +.IP +This option has no affect on a daemon, since the daemon configures whether it +wants munged symlinks via its \(dq\&munge symlinks\(dq\& parameter. See also the +\(dq\&munge\-symlinks\(dq\& perl script in the support directory of the source code. +.IP +.IP "\fB\-k, \-\-copy\-dirlinks\fP" +This option causes the sending side to treat +a symlink to a directory as though it were a real directory. This is +useful if you don\(cq\&t want symlinks to non\-directories to be affected, as +they would be using \fB\-\-copy\-links\fP. +.IP +Without this option, if the sending side has replaced a directory with a +symlink to a directory, the receiving side will delete anything that is in +the way of the new symlink, including a directory hierarchy (as long as +\fB\-\-force\fP or \fB\-\-delete\fP is in effect). +.IP +See also \fB\-\-keep\-dirlinks\fP for an analogous option for the receiving +side. +.IP +\fB\-\-copy\-dirlinks\fP applies to all symlinks to directories in the source. If +you want to follow only a few specified symlinks, a trick you can use is to +pass them as additional source args with a trailing slash, using \fB\-\-relative\fP +to make the paths match up right. For example: +.IP +.RS +\f(CWrsync \-r \-\-relative src/./ src/./follow\-me/ dest/\fP +.RE + +.IP +This works because rsync calls \fBlstat\fP(2) on the source arg as given, and the +trailing slash makes \fBlstat\fP(2) follow the symlink, giving rise to a directory +in the file\-list which overrides the symlink found during the scan of \(dq\&src/./\(dq\&. +.IP +.IP "\fB\-K, \-\-keep\-dirlinks\fP" +This option causes the receiving side to treat +a symlink to a directory as though it were a real directory, but only if it +matches a real directory from the sender. Without this option, the +receiver\(cq\&s symlink would be deleted and replaced with a real directory. +.IP +For example, suppose you transfer a directory \(dq\&foo\(dq\& that contains a file +\(dq\&file\(dq\&, but \(dq\&foo\(dq\& is a symlink to directory \(dq\&bar\(dq\& on the receiver. Without +\fB\-\-keep\-dirlinks\fP, the receiver deletes symlink \(dq\&foo\(dq\&, recreates it as a +directory, and receives the file into the new directory. With +\fB\-\-keep\-dirlinks\fP, the receiver keeps the symlink and \(dq\&file\(dq\& ends up in +\(dq\&bar\(dq\&. +.IP +One note of caution: if you use \fB\-\-keep\-dirlinks\fP, you must trust all +the symlinks in the copy! If it is possible for an untrusted user to +create their own symlink to any directory, the user could then (on a +subsequent copy) replace the symlink with a real directory and affect the +content of whatever directory the symlink references. For backup copies, +you are better off using something like a bind mount instead of a symlink +to modify your receiving hierarchy. +.IP +See also \fB\-\-copy\-dirlinks\fP for an analogous option for the sending side. +.IP +.IP "\fB\-H, \-\-hard\-links\fP" +This tells rsync to look for hard\-linked files in +the source and link together the corresponding files on the destination. +Without this option, hard\-linked files in the source are treated +as though they were separate files. +.IP +This option does NOT necessarily ensure that the pattern of hard links on the +destination exactly matches that on the source. Cases in which the +destination may end up with extra hard links include the following: +.IP +.RS +.IP o +If the destination contains extraneous hard\-links (more linking than +what is present in the source file list), the copying algorithm will not +break them explicitly. However, if one or more of the paths have content +differences, the normal file\-update process will break those extra links +(unless you are using the \fB\-\-inplace\fP option). +.IP o +If you specify a \fB\-\-link\-dest\fP directory that contains hard links, +the linking of the destination files against the \fB\-\-link\-dest\fP files can +cause some paths in the destination to become linked together due to the +\fB\-\-link\-dest\fP associations. +.RE + +.IP +Note that rsync can only detect hard links between files that are inside +the transfer set. If rsync updates a file that has extra hard\-link +connections to files outside the transfer, that linkage will be broken. If +you are tempted to use the \fB\-\-inplace\fP option to avoid this breakage, be +very careful that you know how your files are being updated so that you are +certain that no unintended changes happen due to lingering hard links (and +see the \fB\-\-inplace\fP option for more caveats). +.IP +If incremental recursion is active (see \fB\-\-recursive\fP), rsync may transfer +a missing hard\-linked file before it finds that another link for that contents +exists elsewhere in the hierarchy. This does not affect the accuracy of +the transfer (i.e. which files are hard\-linked together), just its efficiency +(i.e. copying the data for a new, early copy of a hard\-linked file that could +have been found later in the transfer in another member of the hard\-linked +set of files). One way to avoid this inefficiency is to disable +incremental recursion using the \fB\-\-no\-inc\-recursive\fP option. +.IP +.IP "\fB\-p, \-\-perms\fP" +This option causes the receiving rsync to set the +destination permissions to be the same as the source permissions. (See +also the \fB\-\-chmod\fP option for a way to modify what rsync considers to +be the source permissions.) +.IP +When this option is \fIoff\fP, permissions are set as follows: +.IP +.RS +.IP o +Existing files (including updated files) retain their existing +permissions, though the \fB\-\-executability\fP option might change just +the execute permission for the file. +.IP o +New files get their \(dq\&normal\(dq\& permission bits set to the source +file\(cq\&s permissions masked with the receiving directory\(cq\&s default +permissions (either the receiving process\(cq\&s umask, or the permissions +specified via the destination directory\(cq\&s default ACL), and +their special permission bits disabled except in the case where a new +directory inherits a setgid bit from its parent directory. +.RE + +.IP +Thus, when \fB\-\-perms\fP and \fB\-\-executability\fP are both disabled, +rsync\(cq\&s behavior is the same as that of other file\-copy utilities, +such as \fBcp\fP(1) and \fBtar\fP(1). +.IP +In summary: to give destination files (both old and new) the source +permissions, use \fB\-\-perms\fP. To give new files the destination\-default +permissions (while leaving existing files unchanged), make sure that the +\fB\-\-perms\fP option is off and use \fB\-\-chmod=ugo=rwX\fP (which ensures that +all non\-masked bits get enabled). If you\(cq\&d care to make this latter +behavior easier to type, you could define a popt alias for it, such as +putting this line in the file ~/.popt (the following defines the \fB\-Z\fP option, +and includes \-\-no\-g to use the default group of the destination dir): +.IP +.RS +\f(CW rsync alias \-Z \-\-no\-p \-\-no\-g \-\-chmod=ugo=rwX\fP +.RE + +.IP +You could then use this new option in a command such as this one: +.IP +.RS +\f(CW rsync \-avZ src/ dest/\fP +.RE + +.IP +(Caveat: make sure that \fB\-a\fP does not follow \fB\-Z\fP, or it will re\-enable +the two \(dq\&\-\-no\-*\(dq\& options mentioned above.) +.IP +The preservation of the destination\(cq\&s setgid bit on newly\-created +directories when \fB\-\-perms\fP is off was added in rsync 2.6.7. Older rsync +versions erroneously preserved the three special permission bits for +newly\-created files when \fB\-\-perms\fP was off, while overriding the +destination\(cq\&s setgid bit setting on a newly\-created directory. Default ACL +observance was added to the ACL patch for rsync 2.6.7, so older (or +non\-ACL\-enabled) rsyncs use the umask even if default ACLs are present. +(Keep in mind that it is the version of the receiving rsync that affects +these behaviors.) +.IP +.IP "\fB\-E, \-\-executability\fP" +This option causes rsync to preserve the +executability (or non\-executability) of regular files when \fB\-\-perms\fP is +not enabled. A regular file is considered to be executable if at least one +\(cq\&x\(cq\& is turned on in its permissions. When an existing destination file\(cq\&s +executability differs from that of the corresponding source file, rsync +modifies the destination file\(cq\&s permissions as follows: +.IP +.RS +.IP o +To make a file non\-executable, rsync turns off all its \(cq\&x\(cq\& +permissions. +.IP o +To make a file executable, rsync turns on each \(cq\&x\(cq\& permission that +has a corresponding \(cq\&r\(cq\& permission enabled. +.RE + +.IP +If \fB\-\-perms\fP is enabled, this option is ignored. +.IP +.IP "\fB\-A, \-\-acls\fP" +This option causes rsync to update the destination +ACLs to be the same as the source ACLs. +The option also implies \fB\-\-perms\fP. +.IP +The source and destination systems must have compatible ACL entries for this +option to work properly. See the \fB\-\-fake\-super\fP option for a way to backup +and restore ACLs that are not compatible. +.IP +.IP "\fB\-X, \-\-xattrs\fP" +This option causes rsync to update the destination +extended attributes to be the same as the source ones. +.IP +For systems that support extended\-attribute namespaces, a copy being done by a +super\-user copies all namespaces except system.*. A normal user only copies +the user.* namespace. To be able to backup and restore non\-user namespaces as +a normal user, see the \fB\-\-fake\-super\fP option. +.IP +Note that this option does not copy rsyncs special xattr values (e.g. those +used by \fB\-\-fake\-super\fP) unless you repeat the option (e.g. \-XX). This +\(dq\© all xattrs\(dq\& mode cannot be used with \fB\-\-fake\-super\fP. +.IP +.IP "\fB\-\-chmod\fP" +This option tells rsync to apply one or more +comma\-separated \(dq\&chmod\(dq\& modes to the permission of the files in the +transfer. The resulting value is treated as though it were the permissions +that the sending side supplied for the file, which means that this option +can seem to have no effect on existing files if \fB\-\-perms\fP is not enabled. +.IP +In addition to the normal parsing rules specified in the \fBchmod\fP(1) +manpage, you can specify an item that should only apply to a directory by +prefixing it with a \(cq\&D\(cq\&, or specify an item that should only apply to a +file by prefixing it with a \(cq\&F\(cq\&. For example, the following will ensure +that all directories get marked set\-gid, that no files are other\-writable, +that both are user\-writable and group\-writable, and that both have +consistent executability across all bits: +.IP +.RS +\-\-chmod=Dg+s,ug+w,Fo\-w,+X +.RE + +.IP +Using octal mode numbers is also allowed: +.IP +.RS +\-\-chmod=D2775,F664 +.RE + +.IP +It is also legal to specify multiple \fB\-\-chmod\fP options, as each +additional option is just appended to the list of changes to make. +.IP +See the \fB\-\-perms\fP and \fB\-\-executability\fP options for how the resulting +permission value can be applied to the files in the transfer. +.IP +.IP "\fB\-o, \-\-owner\fP" +This option causes rsync to set the owner of the +destination file to be the same as the source file, but only if the +receiving rsync is being run as the super\-user (see also the \fB\-\-super\fP +and \fB\-\-fake\-super\fP options). +Without this option, the owner of new and/or transferred files are set to +the invoking user on the receiving side. +.IP +The preservation of ownership will associate matching names by default, but +may fall back to using the ID number in some circumstances (see also the +\fB\-\-numeric\-ids\fP option for a full discussion). +.IP +.IP "\fB\-g, \-\-group\fP" +This option causes rsync to set the group of the +destination file to be the same as the source file. If the receiving +program is not running as the super\-user (or if \fB\-\-no\-super\fP was +specified), only groups that the invoking user on the receiving side +is a member of will be preserved. +Without this option, the group is set to the default group of the invoking +user on the receiving side. +.IP +The preservation of group information will associate matching names by +default, but may fall back to using the ID number in some circumstances +(see also the \fB\-\-numeric\-ids\fP option for a full discussion). +.IP +.IP "\fB\-\-devices\fP" +This option causes rsync to transfer character and +block device files to the remote system to recreate these devices. +This option has no effect if the receiving rsync is not run as the +super\-user (see also the \fB\-\-super\fP and \fB\-\-fake\-super\fP options). +.IP +.IP "\fB\-\-specials\fP" +This option causes rsync to transfer special files +such as named sockets and fifos. +.IP +.IP "\fB\-D\fP" +The \fB\-D\fP option is equivalent to \fB\-\-devices\fP \fB\-\-specials\fP. +.IP +.IP "\fB\-t, \-\-times\fP" +This tells rsync to transfer modification times along +with the files and update them on the remote system. Note that if this +option is not used, the optimization that excludes files that have not been +modified cannot be effective; in other words, a missing \fB\-t\fP or \fB\-a\fP will +cause the next transfer to behave as if it used \fB\-I\fP, causing all files to be +updated (though rsync\(cq\&s delta\-transfer algorithm will make the update fairly efficient +if the files haven\(cq\&t actually changed, you\(cq\&re much better off using \fB\-t\fP). +.IP +.IP "\fB\-O, \-\-omit\-dir\-times\fP" +This tells rsync to omit directories when +it is preserving modification times (see \fB\-\-times\fP). If NFS is sharing +the directories on the receiving side, it is a good idea to use \fB\-O\fP. +This option is inferred if you use \fB\-\-backup\fP without \fB\-\-backup\-dir\fP. +.IP +This option also has the side\-effect of avoiding early creation of directories +in incremental recursion copies. The default \fB\-\-inc\-recursive\fP copying +normally does an early\-create pass of all the sub\-directories in a parent +directory in order for it to be able to then set the modify time of the parent +directory right away (without having to delay that until a bunch of recursive +copying has finished). This early\-create idiom is not necessary if directory +modify times are not being preserved, so it is skipped. Since early\-create +directories don\(cq\&t have accurate mode, mtime, or ownership, the use of this +option can help when someone wants to avoid these partially\-finished +directories. +.IP +.IP "\fB\-J, \-\-omit\-link\-times\fP" +This tells rsync to omit symlinks when +it is preserving modification times (see \fB\-\-times\fP). +.IP +.IP "\fB\-\-super\fP" +This tells the receiving side to attempt super\-user +activities even if the receiving rsync wasn\(cq\&t run by the super\-user. These +activities include: preserving users via the \fB\-\-owner\fP option, preserving +all groups (not just the current user\(cq\&s groups) via the \fB\-\-groups\fP +option, and copying devices via the \fB\-\-devices\fP option. This is useful +for systems that allow such activities without being the super\-user, and +also for ensuring that you will get errors if the receiving side isn\(cq\&t +being run as the super\-user. To turn off super\-user activities, the +super\-user can use \fB\-\-no\-super\fP. +.IP +.IP "\fB\-\-fake\-super\fP" +When this option is enabled, rsync simulates +super\-user activities by saving/restoring the privileged attributes via +special extended attributes that are attached to each file (as needed). This +includes the file\(cq\&s owner and group (if it is not the default), the file\(cq\&s +device info (device & special files are created as empty text files), and +any permission bits that we won\(cq\&t allow to be set on the real file (e.g. +the real file gets u\-s,g\-s,o\-t for safety) or that would limit the owner\(cq\&s +access (since the real super\-user can always access/change a file, the +files we create can always be accessed/changed by the creating user). +This option also handles ACLs (if \fB\-\-acls\fP was specified) and non\-user +extended attributes (if \fB\-\-xattrs\fP was specified). +.IP +This is a good way to backup data without using a super\-user, and to store +ACLs from incompatible systems. +.IP +The \fB\-\-fake\-super\fP option only affects the side where the option is used. +To affect the remote side of a remote\-shell connection, use the +\fB\-\-remote\-option\fP (\fB\-M\fP) option: +.IP +.RS +\f(CW rsync \-av \-M\-\-fake\-super /src/ host:/dest/\fP +.RE + +.IP +For a local copy, this option affects both the source and the destination. +If you wish a local copy to enable this option just for the destination +files, specify \fB\-M\-\-fake\-super\fP. If you wish a local copy to enable +this option just for the source files, combine \fB\-\-fake\-super\fP with +\fB\-M\-\-super\fP. +.IP +This option is overridden by both \fB\-\-super\fP and \fB\-\-no\-super\fP. +.IP +See also the \(dq\&fake super\(dq\& setting in the daemon\(cq\&s rsyncd.conf file. +.IP +.IP "\fB\-S, \-\-sparse\fP" +Try to handle sparse files efficiently so they take +up less space on the destination. Conflicts with \fB\-\-inplace\fP because it\(cq\&s +not possible to overwrite data in a sparse fashion. +.IP +.IP "\fB\-\-preallocate\fP" +This tells the receiver to allocate each destination +file to its eventual size before writing data to the file. Rsync will only use +the real filesystem\-level preallocation support provided by Linux\(cq\&s +\fBfallocate\fP(2) system call or Cygwin\(cq\&s \fBposix_fallocate\fP(3), not the slow +glibc implementation that writes a zero byte into each block. +.IP +Without this option, larger files may not be entirely contiguous on the +filesystem, but with this option rsync will probably copy more slowly. If the +destination is not an extent\-supporting filesystem (such as ext4, xfs, NTFS, +etc.), this option may have no positive effect at all. +.IP +.IP "\fB\-n, \-\-dry\-run\fP" +This makes rsync perform a trial run that doesn\(cq\&t +make any changes (and produces mostly the same output as a real run). It +is most commonly used in combination with the \fB\-v, \-\-verbose\fP and/or +\fB\-i, \-\-itemize\-changes\fP options to see what an rsync command is going +to do before one actually runs it. +.IP +The output of \fB\-\-itemize\-changes\fP is supposed to be exactly the same on a +dry run and a subsequent real run (barring intentional trickery and system +call failures); if it isn\(cq\&t, that\(cq\&s a bug. Other output should be mostly +unchanged, but may differ in some areas. Notably, a dry run does not +send the actual data for file transfers, so \fB\-\-progress\fP has no effect, +the \(dq\&bytes sent\(dq\&, \(dq\&bytes received\(dq\&, \(dq\&literal data\(dq\&, and \(dq\&matched data\(dq\& +statistics are too small, and the \(dq\&speedup\(dq\& value is equivalent to a run +where no file transfers were needed. +.IP +.IP "\fB\-W, \-\-whole\-file\fP" +With this option rsync\(cq\&s delta\-transfer algorithm +is not used and the whole file is sent as\-is instead. The transfer may be +faster if this option is used when the bandwidth between the source and +destination machines is higher than the bandwidth to disk (especially when the +\(dq\&disk\(dq\& is actually a networked filesystem). This is the default when both +the source and destination are specified as local paths, but only if no +batch\-writing option is in effect. +.IP +.IP "\fB\-x, \-\-one\-file\-system\fP" +This tells rsync to avoid crossing a +filesystem boundary when recursing. This does not limit the user\(cq\&s ability +to specify items to copy from multiple filesystems, just rsync\(cq\&s recursion +through the hierarchy of each directory that the user specified, and also +the analogous recursion on the receiving side during deletion. Also keep +in mind that rsync treats a \(dq\&bind\(dq\& mount to the same device as being on the +same filesystem. +.IP +If this option is repeated, rsync omits all mount\-point directories from +the copy. Otherwise, it includes an empty directory at each mount\-point it +encounters (using the attributes of the mounted directory because those of +the underlying mount\-point directory are inaccessible). +.IP +If rsync has been told to collapse symlinks (via \fB\-\-copy\-links\fP or +\fB\-\-copy\-unsafe\-links\fP), a symlink to a directory on another device is +treated like a mount\-point. Symlinks to non\-directories are unaffected +by this option. +.IP +.IP "\fB\-\-existing, \-\-ignore\-non\-existing\fP" +This tells rsync to skip +creating files (including directories) that do not exist +yet on the destination. If this option is +combined with the \fB\-\-ignore\-existing\fP option, no files will be updated +(which can be useful if all you want to do is delete extraneous files). +.IP +This option is a transfer rule, not an exclude, so it doesn\(cq\&t affect the +data that goes into the file\-lists, and thus it doesn\(cq\&t affect deletions. +It just limits the files that the receiver requests to be transferred. +.IP +.IP "\fB\-\-ignore\-existing\fP" +This tells rsync to skip updating files that +already exist on the destination (this does \fInot\fP ignore existing +directories, or nothing would get done). See also \fB\-\-existing\fP. +.IP +This option is a transfer rule, not an exclude, so it doesn\(cq\&t affect the +data that goes into the file\-lists, and thus it doesn\(cq\&t affect deletions. +It just limits the files that the receiver requests to be transferred. +.IP +This option can be useful for those doing backups using the \fB\-\-link\-dest\fP +option when they need to continue a backup run that got interrupted. Since +a \fB\-\-link\-dest\fP run is copied into a new directory hierarchy (when it is +used properly), using \fB\-\-ignore existing\fP will ensure that the +already\-handled files don\(cq\&t get tweaked (which avoids a change in +permissions on the hard\-linked files). This does mean that this option +is only looking at the existing files in the destination hierarchy itself. +.IP +.IP "\fB\-\-remove\-source\-files\fP" +This tells rsync to remove from the sending +side the files (meaning non\-directories) that are a part of the transfer +and have been successfully duplicated on the receiving side. +.IP +Note that you should only use this option on source files that are quiescent. +If you are using this to move files that show up in a particular directory over +to another host, make sure that the finished files get renamed into the source +directory, not directly written into it, so that rsync can\(cq\&t possibly transfer +a file that is not yet fully written. If you can\(cq\&t first write the files into +a different directory, you should use a naming idiom that lets rsync avoid +transferring files that are not yet finished (e.g. name the file \(dq\&foo.new\(dq\& when +it is written, rename it to \(dq\&foo\(dq\& when it is done, and then use the option +\fB\-\-exclude='\&*.new'\&\fP for the rsync transfer). +.IP +Starting with 3.1.0, rsync will skip the sender\-side removal (and output an +error) if the file\(cq\&s size or modify time has not stayed unchanged. +.IP +.IP "\fB\-\-delete\fP" +This tells rsync to delete extraneous files from the +receiving side (ones that aren\(cq\&t on the sending side), but only for the +directories that are being synchronized. You must have asked rsync to +send the whole directory (e.g. \(dq\&dir\(dq\& or \(dq\&dir/\(dq\&) without using a wildcard +for the directory\(cq\&s contents (e.g. \(dq\&dir/*\(dq\&) since the wildcard is expanded +by the shell and rsync thus gets a request to transfer individual files, not +the files\(cq\& parent directory. Files that are excluded from the transfer are +also excluded from being deleted unless you use the \fB\-\-delete\-excluded\fP +option or mark the rules as only matching on the sending side (see the +include/exclude modifiers in the FILTER RULES section). +.IP +Prior to rsync 2.6.7, this option would have no effect unless \fB\-\-recursive\fP +was enabled. Beginning with 2.6.7, deletions will also occur when \fB\-\-dirs\fP +(\fB\-d\fP) is enabled, but only for directories whose contents are being copied. +.IP +This option can be dangerous if used incorrectly! It is a very good idea to +first try a run using the \fB\-\-dry\-run\fP option (\fB\-n\fP) to see what files are +going to be deleted. +.IP +If the sending side detects any I/O errors, then the deletion of any +files at the destination will be automatically disabled. This is to +prevent temporary filesystem failures (such as NFS errors) on the +sending side from causing a massive deletion of files on the +destination. You can override this with the \fB\-\-ignore\-errors\fP option. +.IP +The \fB\-\-delete\fP option may be combined with one of the \-\-delete\-WHEN options +without conflict, as well as \fB\-\-delete\-excluded\fP. However, if none of the +\-\-delete\-WHEN options are specified, rsync will choose the +\fB\-\-delete\-during\fP algorithm when talking to rsync 3.0.0 or newer, and +the \fB\-\-delete\-before\fP algorithm when talking to an older rsync. See also +\fB\-\-delete\-delay\fP and \fB\-\-delete\-after\fP. +.IP +.IP "\fB\-\-delete\-before\fP" +Request that the file\-deletions on the receiving +side be done before the transfer starts. +See \fB\-\-delete\fP (which is implied) for more details on file\-deletion. +.IP +Deleting before the transfer is helpful if the filesystem is tight for space +and removing extraneous files would help to make the transfer possible. +However, it does introduce a delay before the start of the transfer, +and this delay might cause the transfer to timeout (if \fB\-\-timeout\fP was +specified). It also forces rsync to use the old, non\-incremental recursion +algorithm that requires rsync to scan all the files in the transfer into +memory at once (see \fB\-\-recursive\fP). +.IP +.IP "\fB\-\-delete\-during, \-\-del\fP" +Request that the file\-deletions on the +receiving side be done incrementally as the transfer happens. The +per\-directory delete scan is done right before each directory is checked +for updates, so it behaves like a more efficient \fB\-\-delete\-before\fP, +including doing the deletions prior to any per\-directory filter files +being updated. This option was first added in rsync version 2.6.4. +See \fB\-\-delete\fP (which is implied) for more details on file\-deletion. +.IP +.IP "\fB\-\-delete\-delay\fP" +Request that the file\-deletions on the receiving +side be computed during the transfer (like \fB\-\-delete\-during\fP), and then +removed after the transfer completes. This is useful when combined with +\fB\-\-delay\-updates\fP and/or \fB\-\-fuzzy\fP, and is more efficient than using +\fB\-\-delete\-after\fP (but can behave differently, since \fB\-\-delete\-after\fP +computes the deletions in a separate pass after all updates are done). +If the number of removed files overflows an internal buffer, a +temporary file will be created on the receiving side to hold the names (it +is removed while open, so you shouldn\(cq\&t see it during the transfer). If +the creation of the temporary file fails, rsync will try to fall back to +using \fB\-\-delete\-after\fP (which it cannot do if \fB\-\-recursive\fP is doing an +incremental scan). +See \fB\-\-delete\fP (which is implied) for more details on file\-deletion. +.IP +.IP "\fB\-\-delete\-after\fP" +Request that the file\-deletions on the receiving +side be done after the transfer has completed. This is useful if you +are sending new per\-directory merge files as a part of the transfer and +you want their exclusions to take effect for the delete phase of the +current transfer. It also forces rsync to use the old, non\-incremental +recursion algorithm that requires rsync to scan all the files in the +transfer into memory at once (see \fB\-\-recursive\fP). +See \fB\-\-delete\fP (which is implied) for more details on file\-deletion. +.IP +.IP "\fB\-\-delete\-excluded\fP" +In addition to deleting the files on the +receiving side that are not on the sending side, this tells rsync to also +delete any files on the receiving side that are excluded (see \fB\-\-exclude\fP). +See the FILTER RULES section for a way to make individual exclusions behave +this way on the receiver, and for a way to protect files from +\fB\-\-delete\-excluded\fP. +See \fB\-\-delete\fP (which is implied) for more details on file\-deletion. +.IP +.IP "\fB\-\-ignore\-missing\-args\fP" +When rsync is first processing the explicitly +requested source files (e.g. command\-line arguments or \fB\-\-files\-from\fP +entries), it is normally an error if the file cannot be found. This option +suppresses that error, and does not try to transfer the file. This does not +affect subsequent vanished\-file errors if a file was initially found to be +present and later is no longer there. +.IP +.IP "\fB\-\-delete\-missing\-args\fP" +This option takes the behavior of (the implied) +\fB\-\-ignore\-missing\-args\fP option a step farther: each missing arg will become +a deletion request of the corresponding destination file on the receiving side +(should it exist). If the destination file is a non\-empty directory, it will +only be successfully deleted if \-\-force or \-\-delete are in effect. Other than +that, this option is independent of any other type of delete processing. +.IP +The missing source files are represented by special file\-list entries which +display as a \(dq\&*missing\(dq\& entry in the \fB\-\-list\-only\fP output. +.IP +.IP "\fB\-\-ignore\-errors\fP" +Tells \fB\-\-delete\fP to go ahead and delete files +even when there are I/O errors. +.IP +.IP "\fB\-\-force\fP" +This option tells rsync to delete a non\-empty directory +when it is to be replaced by a non\-directory. This is only relevant if +deletions are not active (see \fB\-\-delete\fP for details). +.IP +Note for older rsync versions: \fB\-\-force\fP used to still be required when +using \fB\-\-delete\-after\fP, and it used to be non\-functional unless the +\fB\-\-recursive\fP option was also enabled. +.IP +.IP "\fB\-\-max\-delete=NUM\fP" +This tells rsync not to delete more than NUM +files or directories. If that limit is exceeded, all further deletions are +skipped through the end of the transfer. At the end, rsync outputs a warning +(including a count of the skipped deletions) and exits with an error code +of 25 (unless some more important error condition also occurred). +.IP +Beginning with version 3.0.0, you may specify \fB\-\-max\-delete=0\fP to be warned +about any extraneous files in the destination without removing any of them. +Older clients interpreted this as \(dq\&unlimited\(dq\&, so if you don\(cq\&t know what +version the client is, you can use the less obvious \fB\-\-max\-delete=\-1\fP as +a backward\-compatible way to specify that no deletions be allowed (though +really old versions didn\(cq\&t warn when the limit was exceeded). +.IP +.IP "\fB\-\-max\-size=SIZE\fP" +This tells rsync to avoid transferring any +file that is larger than the specified SIZE. The SIZE value can be +suffixed with a string to indicate a size multiplier, and +may be a fractional value (e.g. \(dq\&\fB\-\-max\-size=1.5m\fP\(dq\&). +.IP +This option is a transfer rule, not an exclude, so it doesn\(cq\&t affect the +data that goes into the file\-lists, and thus it doesn\(cq\&t affect deletions. +It just limits the files that the receiver requests to be transferred. +.IP +The suffixes are as follows: \(dq\&K\(dq\& (or \(dq\&KiB\(dq\&) is a kibibyte (1024), +\(dq\&M\(dq\& (or \(dq\&MiB\(dq\&) is a mebibyte (1024*1024), and \(dq\&G\(dq\& (or \(dq\&GiB\(dq\&) is a +gibibyte (1024*1024*1024). +If you want the multiplier to be 1000 instead of 1024, use \(dq\&KB\(dq\&, +\(dq\&MB\(dq\&, or \(dq\&GB\(dq\&. (Note: lower\-case is also accepted for all values.) +Finally, if the suffix ends in either \(dq\&+1\(dq\& or \(dq\&\-1\(dq\&, the value will +be offset by one byte in the indicated direction. +.IP +Examples: \-\-max\-size=1.5mb\-1 is 1499999 bytes, and \-\-max\-size=2g+1 is +2147483649 bytes. +.IP +Note that rsync versions prior to 3.1.0 did not allow \fB\-\-max\-size=0\fP. +.IP +.IP "\fB\-\-min\-size=SIZE\fP" +This tells rsync to avoid transferring any +file that is smaller than the specified SIZE, which can help in not +transferring small, junk files. +See the \fB\-\-max\-size\fP option for a description of SIZE and other information. +.IP +Note that rsync versions prior to 3.1.0 did not allow \fB\-\-min\-size=0\fP. +.IP +.IP "\fB\-B, \-\-block\-size=BLOCKSIZE\fP" +This forces the block size used in +rsync\(cq\&s delta\-transfer algorithm to a fixed value. It is normally selected based on +the size of each file being updated. See the technical report for details. +.IP +.IP "\fB\-e, \-\-rsh=COMMAND\fP" +This option allows you to choose an alternative +remote shell program to use for communication between the local and +remote copies of rsync. Typically, rsync is configured to use ssh by +default, but you may prefer to use rsh on a local network. +.IP +If this option is used with \fB[user@]host::module/path\fP, then the +remote shell \fICOMMAND\fP will be used to run an rsync daemon on the +remote host, and all data will be transmitted through that remote +shell connection, rather than through a direct socket connection to a +running rsync daemon on the remote host. See the section \(dq\&USING +RSYNC\-DAEMON FEATURES VIA A REMOTE\-SHELL CONNECTION\(dq\& above. +.IP +Command\-line arguments are permitted in COMMAND provided that COMMAND is +presented to rsync as a single argument. You must use spaces (not tabs +or other whitespace) to separate the command and args from each other, +and you can use single\- and/or double\-quotes to preserve spaces in an +argument (but not backslashes). Note that doubling a single\-quote +inside a single\-quoted string gives you a single\-quote; likewise for +double\-quotes (though you need to pay attention to which quotes your +shell is parsing and which quotes rsync is parsing). Some examples: +.IP +.RS +\f(CW \-e '\&ssh \-p 2234'\&\fP +.br +\f(CW \-e '\&ssh \-o \(dq\&ProxyCommand nohup ssh firewall nc \-w1 %h %p\(dq\&'\&\fP +.br +.RE + +.IP +(Note that ssh users can alternately customize site\-specific connect +options in their .ssh/config file.) +.IP +You can also choose the remote shell program using the RSYNC_RSH +environment variable, which accepts the same range of values as \fB\-e\fP. +.IP +See also the \fB\-\-blocking\-io\fP option which is affected by this option. +.IP +.IP "\fB\-\-rsync\-path=PROGRAM\fP" +Use this to specify what program is to be run +on the remote machine to start\-up rsync. Often used when rsync is not in +the default remote\-shell\(cq\&s path (e.g. \-\-rsync\-path=/usr/local/bin/rsync). +Note that PROGRAM is run with the help of a shell, so it can be any +program, script, or command sequence you\(cq\&d care to run, so long as it does +not corrupt the standard\-in & standard\-out that rsync is using to +communicate. +.IP +One tricky example is to set a different default directory on the remote +machine for use with the \fB\-\-relative\fP option. For instance: +.IP +.RS +\f(CW rsync \-avR \-\-rsync\-path=\(dq\&cd /a/b && rsync\(dq\& host:c/d /e/\fP +.RE + +.IP +.IP "\fB\-M, \-\-remote\-option=OPTION\fP" +This option is used for more advanced +situations where you want certain effects to be limited to one side of the +transfer only. For instance, if you want to pass \fB\-\-log\-file=FILE\fP and +\fB\-\-fake\-super\fP to the remote system, specify it like this: +.IP +.RS +\f(CW rsync \-av \-M \-\-log\-file=foo \-M\-\-fake\-super src/ dest/\fP +.RE + +.IP +If you want to have an option affect only the local side of a transfer when +it normally affects both sides, send its negation to the remote side. Like +this: +.IP +.RS +\f(CW rsync \-av \-x \-M\-\-no\-x src/ dest/\fP +.RE + +.IP +Be cautious using this, as it is possible to toggle an option that will cause +rsync to have a different idea about what data to expect next over the socket, +and that will make it fail in a cryptic fashion. +.IP +Note that it is best to use a separate \fB\-\-remote\-option\fP for each option you +want to pass. This makes your useage compatible with the \fB\-\-protect\-args\fP +option. If that option is off, any spaces in your remote options will be split +by the remote shell unless you take steps to protect them. +.IP +When performing a local transfer, the \(dq\&local\(dq\& side is the sender and the +\(dq\&remote\(dq\& side is the receiver. +.IP +Note some versions of the popt option\-parsing library have a bug in them that +prevents you from using an adjacent arg with an equal in it next to a short +option letter (e.g. \f(CW\-M\-\-log\-file=/tmp/foo\fP. If this bug affects your +version of popt, you can use the version of popt that is included with rsync. +.IP +.IP "\fB\-C, \-\-cvs\-exclude\fP" +This is a useful shorthand for excluding a +broad range of files that you often don\(cq\&t want to transfer between +systems. It uses a similar algorithm to CVS to determine if +a file should be ignored. +.IP +The exclude list is initialized to exclude the following items (these +initial items are marked as perishable \-\- see the FILTER RULES section): +.IP +.RS +.RS +\f(CWRCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state +\&.nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del\-* +*.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/\fP +.RE +.RE + +.IP +then, files listed in a $HOME/.cvsignore are added to the list and any +files listed in the CVSIGNORE environment variable (all cvsignore names +are delimited by whitespace). +.IP +Finally, any file is ignored if it is in the same directory as a +\&.cvsignore file and matches one of the patterns listed therein. Unlike +rsync\(cq\&s filter/exclude files, these patterns are split on whitespace. +See the \fBcvs\fP(1) manual for more information. +.IP +If you\(cq\&re combining \fB\-C\fP with your own \fB\-\-filter\fP rules, you should +note that these CVS excludes are appended at the end of your own rules, +regardless of where the \fB\-C\fP was placed on the command\-line. This makes them +a lower priority than any rules you specified explicitly. If you want to +control where these CVS excludes get inserted into your filter rules, you +should omit the \fB\-C\fP as a command\-line option and use a combination of +\fB\-\-filter=:C\fP and \fB\-\-filter=\-C\fP (either on your command\-line or by +putting the \(dq\&:C\(dq\& and \(dq\&\-C\(dq\& rules into a filter file with your other rules). +The first option turns on the per\-directory scanning for the .cvsignore +file. The second option does a one\-time import of the CVS excludes +mentioned above. +.IP +.IP "\fB\-f, \-\-filter=RULE\fP" +This option allows you to add rules to selectively +exclude certain files from the list of files to be transferred. This is +most useful in combination with a recursive transfer. +.IP +You may use as many \fB\-\-filter\fP options on the command line as you like +to build up the list of files to exclude. If the filter contains whitespace, +be sure to quote it so that the shell gives the rule to rsync as a single +argument. The text below also mentions that you can use an underscore to +replace the space that separates a rule from its arg. +.IP +See the FILTER RULES section for detailed information on this option. +.IP +.IP "\fB\-F\fP" +The \fB\-F\fP option is a shorthand for adding two \fB\-\-filter\fP rules to +your command. The first time it is used is a shorthand for this rule: +.IP +.RS +\f(CW \-\-filter='\&dir\-merge /.rsync\-filter'\&\fP +.RE + +.IP +This tells rsync to look for per\-directory .rsync\-filter files that have +been sprinkled through the hierarchy and use their rules to filter the +files in the transfer. If \fB\-F\fP is repeated, it is a shorthand for this +rule: +.IP +.RS +\f(CW \-\-filter='\&exclude .rsync\-filter'\&\fP +.RE + +.IP +This filters out the .rsync\-filter files themselves from the transfer. +.IP +See the FILTER RULES section for detailed information on how these options +work. +.IP +.IP "\fB\-\-exclude=PATTERN\fP" +This option is a simplified form of the +\fB\-\-filter\fP option that defaults to an exclude rule and does not allow +the full rule\-parsing syntax of normal filter rules. +.IP +See the FILTER RULES section for detailed information on this option. +.IP +.IP "\fB\-\-exclude\-from=FILE\fP" +This option is related to the \fB\-\-exclude\fP +option, but it specifies a FILE that contains exclude patterns (one per line). +Blank lines in the file and lines starting with \(cq\&;\(cq\& or \(cq\&#\(cq\& are ignored. +If \fIFILE\fP is \fB\-\fP, the list will be read from standard input. +.IP +.IP "\fB\-\-include=PATTERN\fP" +This option is a simplified form of the +\fB\-\-filter\fP option that defaults to an include rule and does not allow +the full rule\-parsing syntax of normal filter rules. +.IP +See the FILTER RULES section for detailed information on this option. +.IP +.IP "\fB\-\-include\-from=FILE\fP" +This option is related to the \fB\-\-include\fP +option, but it specifies a FILE that contains include patterns (one per line). +Blank lines in the file and lines starting with \(cq\&;\(cq\& or \(cq\&#\(cq\& are ignored. +If \fIFILE\fP is \fB\-\fP, the list will be read from standard input. +.IP +.IP "\fB\-\-files\-from=FILE\fP" +Using this option allows you to specify the +exact list of files to transfer (as read from the specified FILE or \fB\-\fP +for standard input). It also tweaks the default behavior of rsync to make +transferring just the specified files and directories easier: +.IP +.RS +.IP o +The \fB\-\-relative\fP (\fB\-R\fP) option is implied, which preserves the path +information that is specified for each item in the file (use +\fB\-\-no\-relative\fP or \fB\-\-no\-R\fP if you want to turn that off). +.IP o +The \fB\-\-dirs\fP (\fB\-d\fP) option is implied, which will create directories +specified in the list on the destination rather than noisily skipping +them (use \fB\-\-no\-dirs\fP or \fB\-\-no\-d\fP if you want to turn that off). +.IP o +The \fB\-\-archive\fP (\fB\-a\fP) option\(cq\&s behavior does not imply \fB\-\-recursive\fP +(\fB\-r\fP), so specify it explicitly, if you want it. +.IP o +These side\-effects change the default state of rsync, so the position +of the \fB\-\-files\-from\fP option on the command\-line has no bearing on how +other options are parsed (e.g. \fB\-a\fP works the same before or after +\fB\-\-files\-from\fP, as does \fB\-\-no\-R\fP and all other options). +.RE + +.IP +The filenames that are read from the FILE are all relative to the +source dir \-\- any leading slashes are removed and no \(dq\&..\(dq\& references are +allowed to go higher than the source dir. For example, take this +command: +.IP +.RS +\f(CW rsync \-a \-\-files\-from=/tmp/foo /usr remote:/backup\fP +.RE + +.IP +If /tmp/foo contains the string \(dq\&bin\(dq\& (or even \(dq\&/bin\(dq\&), the /usr/bin +directory will be created as /backup/bin on the remote host. If it +contains \(dq\&bin/\(dq\& (note the trailing slash), the immediate contents of +the directory would also be sent (without needing to be explicitly +mentioned in the file \-\- this began in version 2.6.4). In both cases, +if the \fB\-r\fP option was enabled, that dir\(cq\&s entire hierarchy would +also be transferred (keep in mind that \fB\-r\fP needs to be specified +explicitly with \fB\-\-files\-from\fP, since it is not implied by \fB\-a\fP). +Also note +that the effect of the (enabled by default) \fB\-\-relative\fP option is to +duplicate only the path info that is read from the file \-\- it does not +force the duplication of the source\-spec path (/usr in this case). +.IP +In addition, the \fB\-\-files\-from\fP file can be read from the remote host +instead of the local host if you specify a \(dq\&host:\(dq\& in front of the file +(the host must match one end of the transfer). As a short\-cut, you can +specify just a prefix of \(dq\&:\(dq\& to mean \(dq\&use the remote end of the +transfer\(dq\&. For example: +.IP +.RS +\f(CW rsync \-a \-\-files\-from=:/path/file\-list src:/ /tmp/copy\fP +.RE + +.IP +This would copy all the files specified in the /path/file\-list file that +was located on the remote \(dq\&src\(dq\& host. +.IP +If the \fB\-\-iconv\fP and \fB\-\-protect\-args\fP options are specified and the +\fB\-\-files\-from\fP filenames are being sent from one host to another, the +filenames will be translated from the sending host\(cq\&s charset to the +receiving host\(cq\&s charset. +.IP +NOTE: sorting the list of files in the \-\-files\-from input helps rsync to be +more efficient, as it will avoid re\-visiting the path elements that are shared +between adjacent entries. If the input is not sorted, some path elements +(implied directories) may end up being scanned multiple times, and rsync will +eventually unduplicate them after they get turned into file\-list elements. +.IP +.IP "\fB\-0, \-\-from0\fP" +This tells rsync that the rules/filenames it reads from a +file are terminated by a null (\(cq\&\e0\(cq\&) character, not a NL, CR, or CR+LF. +This affects \fB\-\-exclude\-from\fP, \fB\-\-include\-from\fP, \fB\-\-files\-from\fP, and any +merged files specified in a \fB\-\-filter\fP rule. +It does not affect \fB\-\-cvs\-exclude\fP (since all names read from a .cvsignore +file are split on whitespace). +.IP +.IP "\fB\-s, \-\-protect\-args\fP" +This option sends all filenames and most options to +the remote rsync without allowing the remote shell to interpret them. This +means that spaces are not split in names, and any non\-wildcard special +characters are not translated (such as ~, $, ;, &, etc.). Wildcards are +expanded on the remote host by rsync (instead of the shell doing it). +.IP +If you use this option with \fB\-\-iconv\fP, the args related to the remote +side will also be translated +from the local to the remote character\-set. The translation happens before +wild\-cards are expanded. See also the \fB\-\-files\-from\fP option. +.IP +You may also control this option via the RSYNC_PROTECT_ARGS environment +variable. If this variable has a non\-zero value, this option will be enabled +by default, otherwise it will be disabled by default. Either state is +overridden by a manually specified positive or negative version of this option +(note that \fB\-\-no\-s\fP and \fB\-\-no\-protect\-args\fP are the negative versions). +Since this option was first introduced in 3.0.0, you\(cq\&ll need to make sure it\(cq\&s +disabled if you ever need to interact with a remote rsync that is older than +that. +.IP +Rsync can also be configured (at build time) to have this option enabled by +default (with is overridden by both the environment and the command\-line). +This option will eventually become a new default setting at some +as\-yet\-undetermined point in the future. +.IP +.IP "\fB\-T, \-\-temp\-dir=DIR\fP" +This option instructs rsync to use DIR as a +scratch directory when creating temporary copies of the files transferred +on the receiving side. The default behavior is to create each temporary +file in the same directory as the associated destination file. +Beginning with rsync 3.1.1, the temp\-file names inside the specified DIR will +not be prefixed with an extra dot (though they will still have a random suffix +added). +.IP +This option is most often used when the receiving disk partition does not +have enough free space to hold a copy of the largest file in the transfer. +In this case (i.e. when the scratch directory is on a different disk +partition), rsync will not be able to rename each received temporary file +over the top of the associated destination file, but instead must copy it +into place. Rsync does this by copying the file over the top of the +destination file, which means that the destination file will contain +truncated data during this copy. If this were not done this way (even if +the destination file were first removed, the data locally copied to a +temporary file in the destination directory, and then renamed into place) +it would be possible for the old file to continue taking up disk space (if +someone had it open), and thus there might not be enough room to fit the +new version on the disk at the same time. +.IP +If you are using this option for reasons other than a shortage of disk +space, you may wish to combine it with the \fB\-\-delay\-updates\fP option, +which will ensure that all copied files get put into subdirectories in the +destination hierarchy, awaiting the end of the transfer. If you don\(cq\&t +have enough room to duplicate all the arriving files on the destination +partition, another way to tell rsync that you aren\(cq\&t overly concerned +about disk space is to use the \fB\-\-partial\-dir\fP option with a relative +path; because this tells rsync that it is OK to stash off a copy of a +single file in a subdir in the destination hierarchy, rsync will use the +partial\-dir as a staging area to bring over the copied file, and then +rename it into place from there. (Specifying a \fB\-\-partial\-dir\fP with +an absolute path does not have this side\-effect.) +.IP +.IP "\fB\-y, \-\-fuzzy\fP" +This option tells rsync that it should look for a +basis file for any destination file that is missing. The current algorithm +looks in the same directory as the destination file for either a file that +has an identical size and modified\-time, or a similarly\-named file. If +found, rsync uses the fuzzy basis file to try to speed up the transfer. +.IP +If the option is repeated, the fuzzy scan will also be done in any matching +alternate destination directories that are specified via \fB\-\-compare\-dest\fP, +\fB\-\-copy\-dest\fP, or \fB\-\-link\-dest\fP. +.IP +Note that the use of the \fB\-\-delete\fP option might get rid of any potential +fuzzy\-match files, so either use \fB\-\-delete\-after\fP or specify some +filename exclusions if you need to prevent this. +.IP +.IP "\fB\-\-compare\-dest=DIR\fP" +This option instructs rsync to use \fIDIR\fP on +the destination machine as an additional hierarchy to compare destination +files against doing transfers (if the files are missing in the destination +directory). If a file is found in \fIDIR\fP that is identical to the +sender\(cq\&s file, the file will NOT be transferred to the destination +directory. This is useful for creating a sparse backup of just files that +have changed from an earlier backup. +This option is typically used to copy into an empty (or newly created) +directory. +.IP +Beginning in version 2.6.4, multiple \fB\-\-compare\-dest\fP directories may be +provided, which will cause rsync to search the list in the order specified +for an exact match. +If a match is found that differs only in attributes, a local copy is made +and the attributes updated. +If a match is not found, a basis file from one of the \fIDIR\fPs will be +selected to try to speed up the transfer. +.IP +If \fIDIR\fP is a relative path, it is relative to the destination directory. +See also \fB\-\-copy\-dest\fP and \fB\-\-link\-dest\fP. +.IP +NOTE: beginning with version 3.1.0, rsync will remove a file from a non\-empty +destination hierarchy if an exact match is found in one of the compare\-dest +hierarchies (making the end result more closely match a fresh copy). +.IP +.IP "\fB\-\-copy\-dest=DIR\fP" +This option behaves like \fB\-\-compare\-dest\fP, but +rsync will also copy unchanged files found in \fIDIR\fP to the destination +directory using a local copy. +This is useful for doing transfers to a new destination while leaving +existing files intact, and then doing a flash\-cutover when all files have +been successfully transferred. +.IP +Multiple \fB\-\-copy\-dest\fP directories may be provided, which will cause +rsync to search the list in the order specified for an unchanged file. +If a match is not found, a basis file from one of the \fIDIR\fPs will be +selected to try to speed up the transfer. +.IP +If \fIDIR\fP is a relative path, it is relative to the destination directory. +See also \fB\-\-compare\-dest\fP and \fB\-\-link\-dest\fP. +.IP +.IP "\fB\-\-link\-dest=DIR\fP" +This option behaves like \fB\-\-copy\-dest\fP, but +unchanged files are hard linked from \fIDIR\fP to the destination directory. +The files must be identical in all preserved attributes (e.g. permissions, +possibly ownership) in order for the files to be linked together. +An example: +.IP +.RS +\f(CW rsync \-av \-\-link\-dest=$PWD/prior_dir host:src_dir/ new_dir/\fP +.RE + +.IP +If file\(cq\&s aren\(cq\&t linking, double\-check their attributes. Also check if some +attributes are getting forced outside of rsync\(cq\&s control, such a mount option +that squishes root to a single user, or mounts a removable drive with generic +ownership (such as OS X\(cq\&s \(dq\&Ignore ownership on this volume\(dq\& option). +.IP +Beginning in version 2.6.4, multiple \fB\-\-link\-dest\fP directories may be +provided, which will cause rsync to search the list in the order specified +for an exact match. +If a match is found that differs only in attributes, a local copy is made +and the attributes updated. +If a match is not found, a basis file from one of the \fIDIR\fPs will be +selected to try to speed up the transfer. +.IP +This option works best when copying into an empty destination hierarchy, as +existing files may get their attributes tweaked, and that can affect alternate +destination files via hard\-links. Also, itemizing of changes can get a bit +muddled. Note that prior to version 3.1.0, an alternate\-directory exact match +would never be found (nor linked into the destination) when a destination file +already exists. +.IP +Note that if you combine this option with \fB\-\-ignore\-times\fP, rsync will not +link any files together because it only links identical files together as a +substitute for transferring the file, never as an additional check after the +file is updated. +.IP +If \fIDIR\fP is a relative path, it is relative to the destination directory. +See also \fB\-\-compare\-dest\fP and \fB\-\-copy\-dest\fP. +.IP +Note that rsync versions prior to 2.6.1 had a bug that could prevent +\fB\-\-link\-dest\fP from working properly for a non\-super\-user when \fB\-o\fP was +specified (or implied by \fB\-a\fP). You can work\-around this bug by avoiding +the \fB\-o\fP option when sending to an old rsync. +.IP +.IP "\fB\-z, \-\-compress\fP" +With this option, rsync compresses the file data +as it is sent to the destination machine, which reduces the amount of data +being transmitted \-\- something that is useful over a slow connection. +.IP +Note that this option typically achieves better compression ratios than can +be achieved by using a compressing remote shell or a compressing transport +because it takes advantage of the implicit information in the matching data +blocks that are not explicitly sent over the connection. This matching\-data +compression comes at a cost of CPU, though, and can be disabled by repeating +the \fB\-z\fP option, but only if both sides are at least version 3.1.1. +.IP +Note that if your version of rsync was compiled with an external zlib (instead +of the zlib that comes packaged with rsync) then it will not support the +old\-style compression, only the new\-style (repeated\-option) compression. In +the future this new\-style compression will likely become the default. +.IP +The client rsync requests new\-style compression on the server via the +\fB\-\-new\-compress\fP option, so if you see that option rejected it means that +the server is not new enough to support \fB\-zz\fP. Rsync also accepts the +\fB\-\-old\-compress\fP option for a future time when new\-style compression +becomes the default. +.IP +See the \fB\-\-skip\-compress\fP option for the default list of file suffixes +that will not be compressed. +.IP +.IP "\fB\-\-compress\-level=NUM\fP" +Explicitly set the compression level to use +(see \fB\-\-compress\fP) instead of letting it default. If NUM is non\-zero, +the \fB\-\-compress\fP option is implied. +.IP +.IP "\fB\-\-skip\-compress=LIST\fP" +Override the list of file suffixes that will +not be compressed. The \fBLIST\fP should be one or more file suffixes +(without the dot) separated by slashes (/). +.IP +You may specify an empty string to indicate that no file should be skipped. +.IP +Simple character\-class matching is supported: each must consist of a list +of letters inside the square brackets (e.g. no special classes, such as +\(dq\&[:alpha:]\(dq\&, are supported, and \(cq\&\-\(cq\& has no special meaning). +.IP +The characters asterisk (*) and question\-mark (?) have no special meaning. +.IP +Here\(cq\&s an example that specifies 6 suffixes to skip (since 1 of the 5 rules +matches 2 suffixes): +.IP +.nf + \-\-skip\-compress=gz/jpg/mp[34]/7z/bz2 +.fi + +.IP +The default list of suffixes that will not be compressed is this (in this +version of rsync): +.IP +\fB7z\fP +\fBace\fP +\fBavi\fP +\fBbz2\fP +\fBdeb\fP +\fBgpg\fP +\fBgz\fP +\fBiso\fP +\fBjpeg\fP +\fBjpg\fP +\fBlz\fP +\fBlzma\fP +\fBlzo\fP +\fBmov\fP +\fBmp3\fP +\fBmp4\fP +\fBogg\fP +\fBpng\fP +\fBrar\fP +\fBrpm\fP +\fBrzip\fP +\fBtbz\fP +\fBtgz\fP +\fBtlz\fP +\fBtxz\fP +\fBxz\fP +\fBz\fP +\fBzip\fP +.IP +This list will be replaced by your \fB\-\-skip\-compress\fP list in all but one +situation: a copy from a daemon rsync will add your skipped suffixes to +its list of non\-compressing files (and its list may be configured to a +different default). +.IP +.IP "\fB\-\-numeric\-ids\fP" +With this option rsync will transfer numeric group +and user IDs rather than using user and group names and mapping them +at both ends. +.IP +By default rsync will use the username and groupname to determine +what ownership to give files. The special uid 0 and the special group +0 are never mapped via user/group names even if the \fB\-\-numeric\-ids\fP +option is not specified. +.IP +If a user or group has no name on the source system or it has no match +on the destination system, then the numeric ID +from the source system is used instead. See also the comments on the +\(dq\&use chroot\(dq\& setting in the rsyncd.conf manpage for information on how +the chroot setting affects rsync\(cq\&s ability to look up the names of the +users and groups and what you can do about it. +.IP +.IP "\fB\-\-usermap=STRING, \-\-groupmap=STRING\fP" +These options allow you to +specify users and groups that should be mapped to other values by the +receiving side. The \fBSTRING\fP is one or more \fBFROM\fP:\fBTO\fP pairs of +values separated by commas. Any matching \fBFROM\fP value from the sender is +replaced with a \fBTO\fP value from the receiver. You may specify usernames +or user IDs for the \fBFROM\fP and \fBTO\fP values, and the \fBFROM\fP value may +also be a wild\-card string, which will be matched against the sender\(cq\&s +names (wild\-cards do NOT match against ID numbers, though see below for +why a \(cq\&*\(cq\& matches everything). You may instead specify a range of ID +numbers via an inclusive range: LOW\-HIGH. For example: +.IP +.nf + \-\-usermap=0\-99:nobody,wayne:admin,*:normal \-\-groupmap=usr:1,1:usr +.fi + +.IP +The first match in the list is the one that is used. You should specify +all your user mappings using a single \fB\-\-usermap\fP option, and/or all +your group mappings using a single \fB\-\-groupmap\fP option. +.IP +Note that the sender\(cq\&s name for the 0 user and group are not transmitted +to the receiver, so you should either match these values using a 0, or use +the names in effect on the receiving side (typically \(dq\&root\(dq\&). All other +\fBFROM\fP names match those in use on the sending side. All \fBTO\fP names +match those in use on the receiving side. +.IP +Any IDs that do not have a name on the sending side are treated as having an +empty name for the purpose of matching. This allows them to be matched via +a \(dq\&*\(dq\& or using an empty name. For instance: +.IP +.nf + \-\-usermap=:nobody \-\-groupmap=*:nobody +.fi + +.IP +When the \fB\-\-numeric\-ids\fP option is used, the sender does not send any +names, so all the IDs are treated as having an empty name. This means that +you will need to specify numeric \fBFROM\fP values if you want to map these +nameless IDs to different values. +.IP +For the \fB\-\-usermap\fP option to have any effect, the \fB\-o\fP (\fB\-\-owner\fP) +option must be used (or implied), and the receiver will need to be running +as a super\-user (see also the \fB\-\-fake\-super\fP option). For the \fB\-\-groupmap\fP +option to have any effect, the \fB\-g\fP (\fB\-\-groups\fP) option must be used +(or implied), and the receiver will need to have permissions to set that +group. +.IP +.IP "\fB\-\-chown=USER:GROUP\fP" +This option forces all files to be owned by USER +with group GROUP. This is a simpler interface than using \fB\-\-usermap\fP and +\fB\-\-groupmap\fP directly, but it is implemented using those options internally, +so you cannot mix them. If either the USER or GROUP is empty, no mapping for +the omitted user/group will occur. If GROUP is empty, the trailing colon may +be omitted, but if USER is empty, a leading colon must be supplied. +.IP +If you specify \(dq\&\-\-chown=foo:bar, this is exactly the same as specifying +\(dq\&\-\-usermap=*:foo \-\-groupmap=*:bar\(dq\&, only easier. +.IP +.IP "\fB\-\-timeout=TIMEOUT\fP" +This option allows you to set a maximum I/O +timeout in seconds. If no data is transferred for the specified time +then rsync will exit. The default is 0, which means no timeout. +.IP +.IP "\fB\-\-contimeout\fP" +This option allows you to set the amount of time +that rsync will wait for its connection to an rsync daemon to succeed. +If the timeout is reached, rsync exits with an error. +.IP +.IP "\fB\-\-address\fP" +By default rsync will bind to the wildcard address when +connecting to an rsync daemon. The \fB\-\-address\fP option allows you to +specify a specific IP address (or hostname) to bind to. See also this +option in the \fB\-\-daemon\fP mode section. +.IP +.IP "\fB\-\-port=PORT\fP" +This specifies an alternate TCP port number to use +rather than the default of 873. This is only needed if you are using the +double\-colon (::) syntax to connect with an rsync daemon (since the URL +syntax has a way to specify the port as a part of the URL). See also this +option in the \fB\-\-daemon\fP mode section. +.IP +.IP "\fB\-\-sockopts\fP" +This option can provide endless fun for people +who like to tune their systems to the utmost degree. You can set all +sorts of socket options which may make transfers faster (or +slower!). Read the man page for the +\f(CWsetsockopt()\fP +system call for +details on some of the options you may be able to set. By default no +special socket options are set. This only affects direct socket +connections to a remote rsync daemon. This option also exists in the +\fB\-\-daemon\fP mode section. +.IP +.IP "\fB\-\-blocking\-io\fP" +This tells rsync to use blocking I/O when launching +a remote shell transport. If the remote shell is either rsh or remsh, +rsync defaults to using +blocking I/O, otherwise it defaults to using non\-blocking I/O. (Note that +ssh prefers non\-blocking I/O.) +.IP +.IP "\fB\-\-outbuf=MODE\fP" +This sets the output buffering mode. The mode can be +None (aka Unbuffered), Line, or Block (aka Full). You may specify as little +as a single letter for the mode, and use upper or lower case. +.IP +The main use of this option is to change Full buffering to Line buffering +when rsync\(cq\&s output is going to a file or pipe. +.IP +.IP "\fB\-i, \-\-itemize\-changes\fP" +Requests a simple itemized list of the +changes that are being made to each file, including attribute changes. +This is exactly the same as specifying \fB\-\-out\-format='\&%i %n%L'\&\fP. +If you repeat the option, unchanged files will also be output, but only +if the receiving rsync is at least version 2.6.7 (you can use \fB\-vv\fP +with older versions of rsync, but that also turns on the output of other +verbose messages). +.IP +The \(dq\&%i\(dq\& escape has a cryptic output that is 11 letters long. The general +format is like the string \fBYXcstpoguax\fP, where \fBY\fP is replaced by the +type of update being done, \fBX\fP is replaced by the file\-type, and the +other letters represent attributes that may be output if they are being +modified. +.IP +The update types that replace the \fBY\fP are as follows: +.IP +.RS +.IP o +A \fB<\fP means that a file is being transferred to the remote host +(sent). +.IP o +A \fB>\fP means that a file is being transferred to the local host +(received). +.IP o +A \fBc\fP means that a local change/creation is occurring for the item +(such as the creation of a directory or the changing of a symlink, etc.). +.IP o +A \fBh\fP means that the item is a hard link to another item (requires +\fB\-\-hard\-links\fP). +.IP o +A \fB.\fP means that the item is not being updated (though it might +have attributes that are being modified). +.IP o +A \fB*\fP means that the rest of the itemized\-output area contains +a message (e.g. \(dq\&deleting\(dq\&). +.RE + +.IP +The file\-types that replace the \fBX\fP are: \fBf\fP for a file, a \fBd\fP for a +directory, an \fBL\fP for a symlink, a \fBD\fP for a device, and a \fBS\fP for a +special file (e.g. named sockets and fifos). +.IP +The other letters in the string above are the actual letters that +will be output if the associated attribute for the item is being updated or +a \(dq\&.\(dq\& for no change. Three exceptions to this are: (1) a newly created +item replaces each letter with a \(dq\&+\(dq\&, (2) an identical item replaces the +dots with spaces, and (3) an unknown attribute replaces each letter with +a \(dq\&?\(dq\& (this can happen when talking to an older rsync). +.IP +The attribute that is associated with each letter is as follows: +.IP +.RS +.IP o +A \fBc\fP means either that a regular file has a different checksum +(requires \fB\-\-checksum\fP) or that a symlink, device, or special file has +a changed value. +Note that if you are sending files to an rsync prior to 3.0.1, this +change flag will be present only for checksum\-differing regular files. +.IP o +A \fBs\fP means the size of a regular file is different and will be updated +by the file transfer. +.IP o +A \fBt\fP means the modification time is different and is being updated +to the sender\(cq\&s value (requires \fB\-\-times\fP). An alternate value of \fBT\fP +means that the modification time will be set to the transfer time, which happens +when a file/symlink/device is updated without \fB\-\-times\fP and when a +symlink is changed and the receiver can\(cq\&t set its time. +(Note: when using an rsync 3.0.0 client, you might see the \fBs\fP flag combined +with \fBt\fP instead of the proper \fBT\fP flag for this time\-setting failure.) +.IP o +A \fBp\fP means the permissions are different and are being updated to +the sender\(cq\&s value (requires \fB\-\-perms\fP). +.IP o +An \fBo\fP means the owner is different and is being updated to the +sender\(cq\&s value (requires \fB\-\-owner\fP and super\-user privileges). +.IP o +A \fBg\fP means the group is different and is being updated to the +sender\(cq\&s value (requires \fB\-\-group\fP and the authority to set the group). +.IP o +The \fBu\fP slot is reserved for future use. +.IP o +The \fBa\fP means that the ACL information changed. +.IP o +The \fBx\fP means that the extended attribute information changed. +.RE + +.IP +One other output is possible: when deleting files, the \(dq\&%i\(dq\& will output +the string \(dq\&*deleting\(dq\& for each item that is being removed (assuming that +you are talking to a recent enough rsync that it logs deletions instead of +outputting them as a verbose message). +.IP +.IP "\fB\-\-out\-format=FORMAT\fP" +This allows you to specify exactly what the +rsync client outputs to the user on a per\-update basis. The format is a +text string containing embedded single\-character escape sequences prefixed +with a percent (%) character. A default format of \(dq\&%n%L\(dq\& is assumed if +either \fB\-\-info=name\fP or \fB\-v\fP is specified (this tells you just the name +of the file and, if the item is a link, where it points). For a full list +of the possible escape characters, see the \(dq\&log format\(dq\& setting in the +rsyncd.conf manpage. +.IP +Specifying the \fB\-\-out\-format\fP option implies the \fB\-\-info=name\fP option, +which will mention each file, dir, etc. that gets updated in a significant +way (a transferred file, a recreated symlink/device, or a touched +directory). In addition, if the itemize\-changes escape (%i) is included in +the string (e.g. if the \fB\-\-itemize\-changes\fP option was used), the logging +of names increases to mention any item that is changed in any way (as long +as the receiving side is at least 2.6.4). See the \fB\-\-itemize\-changes\fP +option for a description of the output of \(dq\&%i\(dq\&. +.IP +Rsync will output the out\-format string prior to a file\(cq\&s transfer unless +one of the transfer\-statistic escapes is requested, in which case the +logging is done at the end of the file\(cq\&s transfer. When this late logging +is in effect and \fB\-\-progress\fP is also specified, rsync will also output +the name of the file being transferred prior to its progress information +(followed, of course, by the out\-format output). +.IP +.IP "\fB\-\-log\-file=FILE\fP" +This option causes rsync to log what it is doing +to a file. This is similar to the logging that a daemon does, but can be +requested for the client side and/or the server side of a non\-daemon +transfer. If specified as a client option, transfer logging will be +enabled with a default format of \(dq\&%i %n%L\(dq\&. See the \fB\-\-log\-file\-format\fP +option if you wish to override this. +.IP +Here\(cq\&s a example command that requests the remote side to log what is +happening: +.IP +.nf + rsync \-av \-\-remote\-option=\-\-log\-file=/tmp/rlog src/ dest/ +.fi + +.IP +This is very useful if you need to debug why a connection is closing +unexpectedly. +.IP +.IP "\fB\-\-log\-file\-format=FORMAT\fP" +This allows you to specify exactly what +per\-update logging is put into the file specified by the \fB\-\-log\-file\fP option +(which must also be specified for this option to have any effect). If you +specify an empty string, updated files will not be mentioned in the log file. +For a list of the possible escape characters, see the \(dq\&log format\(dq\& setting +in the rsyncd.conf manpage. +.IP +The default FORMAT used if \fB\-\-log\-file\fP is specified and this option is not +is \(cq\&%i %n%L\(cq\&. +.IP +.IP "\fB\-\-stats\fP" +This tells rsync to print a verbose set of statistics +on the file transfer, allowing you to tell how effective rsync\(cq\&s delta\-transfer +algorithm is for your data. This option is equivalent to \fB\-\-info=stats2\fP +if combined with 0 or 1 \fB\-v\fP options, or \fB\-\-info=stats3\fP if combined +with 2 or more \fB\-v\fP options. +.IP +The current statistics are as follows: +.RS +.IP o +\fBNumber of files\fP is the count of all \(dq\&files\(dq\& (in the generic +sense), which includes directories, symlinks, etc. The total count will +be followed by a list of counts by filetype (if the total is non\-zero). +For example: \(dq\&(reg: 5, dir: 3, link: 2, dev: 1, special: 1)\(dq\& lists the +totals for regular files, directories, symlinks, devices, and special +files. If any of value is 0, it is completely omitted from the list. +.IP o +\fBNumber of created files\fP is the count of how many \(dq\&files\(dq\& (generic +sense) were created (as opposed to updated). The total count will be +followed by a list of counts by filetype (if the total is non\-zero). +.IP o +\fBNumber of deleted files\fP is the count of how many \(dq\&files\(dq\& (generic +sense) were created (as opposed to updated). The total count will be +followed by a list of counts by filetype (if the total is non\-zero). +Note that this line is only output if deletions are in effect, and only +if protocol 31 is being used (the default for rsync 3.1.x). +.IP o +\fBNumber of regular files transferred\fP is the count of normal files +that were updated via rsync\(cq\&s delta\-transfer algorithm, which does not +include dirs, symlinks, etc. Note that rsync 3.1.0 added the word +\(dq\®ular\(dq\& into this heading. +.IP o +\fBTotal file size\fP is the total sum of all file sizes in the transfer. +This does not count any size for directories or special files, but does +include the size of symlinks. +.IP o +\fBTotal transferred file size\fP is the total sum of all files sizes +for just the transferred files. +.IP o +\fBLiteral data\fP is how much unmatched file\-update data we had to +send to the receiver for it to recreate the updated files. +.IP o +\fBMatched data\fP is how much data the receiver got locally when +recreating the updated files. +.IP o +\fBFile list size\fP is how big the file\-list data was when the sender +sent it to the receiver. This is smaller than the in\-memory size for the +file list due to some compressing of duplicated data when rsync sends the +list. +.IP o +\fBFile list generation time\fP is the number of seconds that the +sender spent creating the file list. This requires a modern rsync on the +sending side for this to be present. +.IP o +\fBFile list transfer time\fP is the number of seconds that the sender +spent sending the file list to the receiver. +.IP o +\fBTotal bytes sent\fP is the count of all the bytes that rsync sent +from the client side to the server side. +.IP o +\fBTotal bytes received\fP is the count of all non\-message bytes that +rsync received by the client side from the server side. \(dq\&Non\-message\(dq\& +bytes means that we don\(cq\&t count the bytes for a verbose message that the +server sent to us, which makes the stats more consistent. +.RE + +.IP +.IP "\fB\-8, \-\-8\-bit\-output\fP" +This tells rsync to leave all high\-bit characters +unescaped in the output instead of trying to test them to see if they\(cq\&re +valid in the current locale and escaping the invalid ones. All control +characters (but never tabs) are always escaped, regardless of this option\(cq\&s +setting. +.IP +The escape idiom that started in 2.6.7 is to output a literal backslash (\e) +and a hash (#), followed by exactly 3 octal digits. For example, a newline +would output as \(dq\&\e#012\(dq\&. A literal backslash that is in a filename is not +escaped unless it is followed by a hash and 3 digits (0\-9). +.IP +.IP "\fB\-h, \-\-human\-readable\fP" +Output numbers in a more human\-readable format. +There are 3 possible levels: (1) output numbers with a separator between each +set of 3 digits (either a comma or a period, depending on if the decimal point +is represented by a period or a comma); (2) output numbers in units of 1000 +(with a character suffix for larger units \-\- see below); (3) output numbers in +units of 1024. +.IP +The default is human\-readable level 1. Each \fB\-h\fP option increases the level +by one. You can take the level down to 0 (to output numbers as pure digits) by +specifing the \fB\-\-no\-human\-readable\fP (\fB\-\-no\-h\fP) option. +.IP +The unit letters that are appended in levels 2 and 3 are: K (kilo), M (mega), +G (giga), or T (tera). For example, a 1234567\-byte file would output as 1.23M +in level\-2 (assuming that a period is your local decimal point). +.IP +Backward compatibility note: versions of rsync prior to 3.1.0 do not support +human\-readable level 1, and they default to level 0. Thus, specifying one or +two \fB\-h\fP options will behave in a comparable manner in old and new versions +as long as you didn\(cq\&t specify a \fB\-\-no\-h\fP option prior to one or more \fB\-h\fP +options. See the \fB\-\-list\-only\fP option for one difference. +.IP +.IP "\fB\-\-partial\fP" +By default, rsync will delete any partially +transferred file if the transfer is interrupted. In some circumstances +it is more desirable to keep partially transferred files. Using the +\fB\-\-partial\fP option tells rsync to keep the partial file which should +make a subsequent transfer of the rest of the file much faster. +.IP +.IP "\fB\-\-partial\-dir=DIR\fP" +A better way to keep partial files than the +\fB\-\-partial\fP option is to specify a \fIDIR\fP that will be used to hold the +partial data (instead of writing it out to the destination file). +On the next transfer, rsync will use a file found in this +dir as data to speed up the resumption of the transfer and then delete it +after it has served its purpose. +.IP +Note that if \fB\-\-whole\-file\fP is specified (or implied), any partial\-dir +file that is found for a file that is being updated will simply be removed +(since +rsync is sending files without using rsync\(cq\&s delta\-transfer algorithm). +.IP +Rsync will create the \fIDIR\fP if it is missing (just the last dir \-\- not +the whole path). This makes it easy to use a relative path (such as +\(dq\&\fB\-\-partial\-dir=.rsync\-partial\fP\(dq\&) to have rsync create the +partial\-directory in the destination file\(cq\&s directory when needed, and then +remove it again when the partial file is deleted. +.IP +If the partial\-dir value is not an absolute path, rsync will add an exclude +rule at the end of all your existing excludes. This will prevent the +sending of any partial\-dir files that may exist on the sending side, and +will also prevent the untimely deletion of partial\-dir items on the +receiving side. An example: the above \fB\-\-partial\-dir\fP option would add +the equivalent of \(dq\&\fB\-f '\&\-p .rsync\-partial/'\&\fP\(dq\& at the end of any other +filter rules. +.IP +If you are supplying your own exclude rules, you may need to add your own +exclude/hide/protect rule for the partial\-dir because (1) the auto\-added +rule may be ineffective at the end of your other rules, or (2) you may wish +to override rsync\(cq\&s exclude choice. For instance, if you want to make +rsync clean\-up any left\-over partial\-dirs that may be lying around, you +should specify \fB\-\-delete\-after\fP and add a \(dq\&risk\(dq\& filter rule, e.g. +\fB\-f '\&R .rsync\-partial/'\&\fP. (Avoid using \fB\-\-delete\-before\fP or +\fB\-\-delete\-during\fP unless you don\(cq\&t need rsync to use any of the +left\-over partial\-dir data during the current run.) +.IP +IMPORTANT: the \fB\-\-partial\-dir\fP should not be writable by other users or it +is a security risk. E.g. AVOID \(dq\&/tmp\(dq\&. +.IP +You can also set the partial\-dir value the RSYNC_PARTIAL_DIR environment +variable. Setting this in the environment does not force \fB\-\-partial\fP to be +enabled, but rather it affects where partial files go when \fB\-\-partial\fP is +specified. For instance, instead of using \fB\-\-partial\-dir=.rsync\-tmp\fP +along with \fB\-\-progress\fP, you could set RSYNC_PARTIAL_DIR=.rsync\-tmp in your +environment and then just use the \fB\-P\fP option to turn on the use of the +\&.rsync\-tmp dir for partial transfers. The only times that the \fB\-\-partial\fP +option does not look for this environment value are (1) when \fB\-\-inplace\fP was +specified (since \fB\-\-inplace\fP conflicts with \fB\-\-partial\-dir\fP), and (2) when +\fB\-\-delay\-updates\fP was specified (see below). +.IP +For the purposes of the daemon\-config\(cq\&s \(dq\&refuse options\(dq\& setting, +\fB\-\-partial\-dir\fP does \fInot\fP imply \fB\-\-partial\fP. This is so that a +refusal of the \fB\-\-partial\fP option can be used to disallow the overwriting +of destination files with a partial transfer, while still allowing the +safer idiom provided by \fB\-\-partial\-dir\fP. +.IP +.IP "\fB\-\-delay\-updates\fP" +This option puts the temporary file from each +updated file into a holding directory until the end of the +transfer, at which time all the files are renamed into place in rapid +succession. This attempts to make the updating of the files a little more +atomic. By default the files are placed into a directory named \(dq\&.~tmp~\(dq\& in +each file\(cq\&s destination directory, but if you\(cq\&ve specified the +\fB\-\-partial\-dir\fP option, that directory will be used instead. See the +comments in the \fB\-\-partial\-dir\fP section for a discussion of how this +\(dq\&.~tmp~\(dq\& dir will be excluded from the transfer, and what you can do if +you want rsync to cleanup old \(dq\&.~tmp~\(dq\& dirs that might be lying around. +Conflicts with \fB\-\-inplace\fP and \fB\-\-append\fP. +.IP +This option uses more memory on the receiving side (one bit per file +transferred) and also requires enough free disk space on the receiving +side to hold an additional copy of all the updated files. Note also that +you should not use an absolute path to \fB\-\-partial\-dir\fP unless (1) +there is no +chance of any of the files in the transfer having the same name (since all +the updated files will be put into a single directory if the path is +absolute) +and (2) there are no mount points in the hierarchy (since the +delayed updates will fail if they can\(cq\&t be renamed into place). +.IP +See also the \(dq\&atomic\-rsync\(dq\& perl script in the \(dq\&support\(dq\& subdir for an +update algorithm that is even more atomic (it uses \fB\-\-link\-dest\fP and a +parallel hierarchy of files). +.IP +.IP "\fB\-m, \-\-prune\-empty\-dirs\fP" +This option tells the receiving rsync to get +rid of empty directories from the file\-list, including nested directories +that have no non\-directory children. This is useful for avoiding the +creation of a bunch of useless directories when the sending rsync is +recursively scanning a hierarchy of files using include/exclude/filter +rules. +.IP +Note that the use of transfer rules, such as the \fB\-\-min\-size\fP option, does +not affect what goes into the file list, and thus does not leave directories +empty, even if none of the files in a directory match the transfer rule. +.IP +Because the file\-list is actually being pruned, this option also affects +what directories get deleted when a delete is active. However, keep in +mind that excluded files and directories can prevent existing items from +being deleted due to an exclude both hiding source files and protecting +destination files. See the perishable filter\-rule option for how to avoid +this. +.IP +You can prevent the pruning of certain empty directories from the file\-list +by using a global \(dq\&protect\(dq\& filter. For instance, this option would ensure +that the directory \(dq\&emptydir\(dq\& was kept in the file\-list: +.IP +.RS +\-\-filter \(cq\&protect emptydir/\(cq\& +.RE + +.IP +Here\(cq\&s an example that copies all .pdf files in a hierarchy, only creating +the necessary destination directories to hold the .pdf files, and ensures +that any superfluous files and directories in the destination are removed +(note the hide filter of non\-directories being used instead of an exclude): +.IP +.RS +rsync \-avm \-\-del \-\-include=\(cq\&*.pdf\(cq\& \-f \(cq\&hide,! */\(cq\& src/ dest +.RE + +.IP +If you didn\(cq\&t want to remove superfluous destination files, the more +time\-honored options of \(dq\&\fB\-\-include='\&*/'\& \-\-exclude='\&*'\&\fP\(dq\& would work fine +in place of the hide\-filter (if that is more natural to you). +.IP +.IP "\fB\-\-progress\fP" +This option tells rsync to print information +showing the progress of the transfer. This gives a bored user +something to watch. +With a modern rsync this is the same as specifying +\fB\-\-info=flist2,name,progress\fP, but any user\-supplied settings for those +info flags takes precedence (e.g. \(dq\&\-\-info=flist0 \-\-progress\(dq\&). +.IP +While rsync is transferring a regular file, it updates a progress line that +looks like this: +.IP +.nf + 782448 63% 110.64kB/s 0:00:04 +.fi + +.IP +In this example, the receiver has reconstructed 782448 bytes or 63% of the +sender\(cq\&s file, which is being reconstructed at a rate of 110.64 kilobytes +per second, and the transfer will finish in 4 seconds if the current rate +is maintained until the end. +.IP +These statistics can be misleading if rsync\(cq\&s delta\-transfer algorithm is +in use. For example, if the sender\(cq\&s file consists of the basis file +followed by additional data, the reported rate will probably drop +dramatically when the receiver gets to the literal data, and the transfer +will probably take much longer to finish than the receiver estimated as it +was finishing the matched part of the file. +.IP +When the file transfer finishes, rsync replaces the progress line with a +summary line that looks like this: +.IP +.nf + 1,238,099 100% 146.38kB/s 0:00:08 (xfr#5, to\-chk=169/396) +.fi + +.IP +In this example, the file was 1,238,099 bytes long in total, the average rate +of transfer for the whole file was 146.38 kilobytes per second over the 8 +seconds that it took to complete, it was the 5th transfer of a regular file +during the current rsync session, and there are 169 more files for the +receiver to check (to see if they are up\-to\-date or not) remaining out of +the 396 total files in the file\-list. +.IP +In an incremental recursion scan, rsync won\(cq\&t know the total number of files +in the file\-list until it reaches the ends of the scan, but since it starts to +transfer files during the scan, it will display a line with the text \(dq\&ir\-chk\(dq\& +(for incremental recursion check) instead of \(dq\&to\-chk\(dq\& until the point that it +knows the full size of the list, at which point it will switch to using +\(dq\&to\-chk\(dq\&. Thus, seeing \(dq\&ir\-chk\(dq\& lets you know that the total count of files +in the file list is still going to increase (and each time it does, the count +of files left to check will increase by the number of the files added to the +list). +.IP +.IP "\fB\-P\fP" +The \fB\-P\fP option is equivalent to \fB\-\-partial\fP \fB\-\-progress\fP. Its +purpose is to make it much easier to specify these two options for a long +transfer that may be interrupted. +.IP +There is also a \fB\-\-info=progress2\fP option that outputs statistics based +on the whole transfer, rather than individual files. Use this flag without +outputting a filename (e.g. avoid \fB\-v\fP or specify \fB\-\-info=name0\fP) if you +want to see how the transfer is doing without scrolling the screen with a +lot of names. (You don\(cq\&t need to specify the \fB\-\-progress\fP option in +order to use \fB\-\-info=progress2\fP.) +.IP +.IP "\fB\-\-password\-file=FILE\fP" +This option allows you to provide a password for +accessing an rsync daemon via a file or via standard input if \fBFILE\fP is +\fB\-\fP. The file should contain just the password on the first line (all other +lines are ignored). Rsync will exit with an error if \fBFILE\fP is world +readable or if a root\-run rsync command finds a non\-root\-owned file. +.IP +This option does not supply a password to a remote shell transport such as +ssh; to learn how to do that, consult the remote shell\(cq\&s documentation. +When accessing an rsync daemon using a remote shell as the transport, this +option only comes into effect after the remote shell finishes its +authentication (i.e. if you have also specified a password in the daemon\(cq\&s +config file). +.IP +.IP "\fB\-\-list\-only\fP" +This option will cause the source files to be listed +instead of transferred. This option is inferred if there is a single source +arg and no destination specified, so its main uses are: (1) to turn a copy +command that includes a +destination arg into a file\-listing command, or (2) to be able to specify +more than one source arg (note: be sure to include the destination). +Caution: keep in mind that a source arg with a wild\-card is expanded by the +shell into multiple args, so it is never safe to try to list such an arg +without using this option. For example: +.IP +.nf + rsync \-av \-\-list\-only foo* dest/ +.fi + +.IP +Starting with rsync 3.1.0, the sizes output by \fB\-\-list\-only\fP are affected +by the \fB\-\-human\-readable\fP option. By default they will contain digit +separators, but higher levels of readability will output the sizes with +unit suffixes. Note also that the column width for the size output has +increased from 11 to 14 characters for all human\-readable levels. Use +\fB\-\-no\-h\fP if you want just digits in the sizes, and the old column width +of 11 characters. +.IP +Compatibility note: when requesting a remote listing of files from an rsync +that is version 2.6.3 or older, you may encounter an error if you ask for a +non\-recursive listing. This is because a file listing implies the \fB\-\-dirs\fP +option w/o \fB\-\-recursive\fP, and older rsyncs don\(cq\&t have that option. To +avoid this problem, either specify the \fB\-\-no\-dirs\fP option (if you don\(cq\&t +need to expand a directory\(cq\&s content), or turn on recursion and exclude +the content of subdirectories: \fB\-r \-\-exclude='\&/*/*'\&\fP. +.IP +.IP "\fB\-\-bwlimit=RATE\fP" +This option allows you to specify the maximum transfer +rate for the data sent over the socket, specified in units per second. The +RATE value can be suffixed with a string to indicate a size multiplier, and may +be a fractional value (e.g. \(dq\&\fB\-\-bwlimit=1.5m\fP\(dq\&). If no suffix is specified, +the value will be assumed to be in units of 1024 bytes (as if \(dq\&K\(dq\& or \(dq\&KiB\(dq\& had +been appended). See the \fB\-\-max\-size\fP option for a description of all the +available suffixes. A value of zero specifies no limit. +.IP +For backward\-compatibility reasons, the rate limit will be rounded to the +nearest KiB unit, so no rate smaller than 1024 bytes per second is possible. +.IP +Rsync writes data over the socket in blocks, and this option both limits the +size of the blocks that rsync writes, and tries to keep the average transfer +rate at the requested limit. Some \(dq\&burstiness\(dq\& may be seen where rsync writes +out a block of data and then sleeps to bring the average rate into compliance. +.IP +Due to the internal buffering of data, the \fB\-\-progress\fP option may not be an +accurate reflection on how fast the data is being sent. This is because some +files can show up as being rapidly sent when the data is quickly buffered, +while other can show up as very slow when the flushing of the output buffer +occurs. This may be fixed in a future version. +.IP +.IP "\fB\-\-write\-batch=FILE\fP" +Record a file that can later be applied to +another identical destination with \fB\-\-read\-batch\fP. See the \(dq\&BATCH MODE\(dq\& +section for details, and also the \fB\-\-only\-write\-batch\fP option. +.IP +.IP "\fB\-\-only\-write\-batch=FILE\fP" +Works like \fB\-\-write\-batch\fP, except that +no updates are made on the destination system when creating the batch. +This lets you transport the changes to the destination system via some +other means and then apply the changes via \fB\-\-read\-batch\fP. +.IP +Note that you can feel free to write the batch directly to some portable +media: if this media fills to capacity before the end of the transfer, you +can just apply that partial transfer to the destination and repeat the +whole process to get the rest of the changes (as long as you don\(cq\&t mind a +partially updated destination system while the multi\-update cycle is +happening). +.IP +Also note that you only save bandwidth when pushing changes to a remote +system because this allows the batched data to be diverted from the sender +into the batch file without having to flow over the wire to the receiver +(when pulling, the sender is remote, and thus can\(cq\&t write the batch). +.IP +.IP "\fB\-\-read\-batch=FILE\fP" +Apply all of the changes stored in FILE, a +file previously generated by \fB\-\-write\-batch\fP. +If \fIFILE\fP is \fB\-\fP, the batch data will be read from standard input. +See the \(dq\&BATCH MODE\(dq\& section for details. +.IP +.IP "\fB\-\-protocol=NUM\fP" +Force an older protocol version to be used. This +is useful for creating a batch file that is compatible with an older +version of rsync. For instance, if rsync 2.6.4 is being used with the +\fB\-\-write\-batch\fP option, but rsync 2.6.3 is what will be used to run the +\fB\-\-read\-batch\fP option, you should use \(dq\&\-\-protocol=28\(dq\& when creating the +batch file to force the older protocol version to be used in the batch +file (assuming you can\(cq\&t upgrade the rsync on the reading system). +.IP +.IP "\fB\-\-iconv=CONVERT_SPEC\fP" +Rsync can convert filenames between character +sets using this option. Using a CONVERT_SPEC of \(dq\&.\(dq\& tells rsync to look up +the default character\-set via the locale setting. Alternately, you can +fully specify what conversion to do by giving a local and a remote charset +separated by a comma in the order \fB\-\-iconv=LOCAL,REMOTE\fP, e.g. +\fB\-\-iconv=utf8,iso88591\fP. This order ensures that the option +will stay the same whether you\(cq\&re pushing or pulling files. +Finally, you can specify either \fB\-\-no\-iconv\fP or a CONVERT_SPEC of \(dq\&\-\(dq\& +to turn off any conversion. +The default setting of this option is site\-specific, and can also be +affected via the RSYNC_ICONV environment variable. +.IP +For a list of what charset names your local iconv library supports, you can +run \(dq\&iconv \-\-list\(dq\&. +.IP +If you specify the \fB\-\-protect\-args\fP option (\fB\-s\fP), rsync will translate +the filenames you specify on the command\-line that are being sent to the +remote host. See also the \fB\-\-files\-from\fP option. +.IP +Note that rsync does not do any conversion of names in filter files +(including include/exclude files). It is up to you to ensure that you\(cq\&re +specifying matching rules that can match on both sides of the transfer. +For instance, you can specify extra include/exclude rules if there are +filename differences on the two sides that need to be accounted for. +.IP +When you pass an \fB\-\-iconv\fP option to an rsync daemon that allows it, the +daemon uses the charset specified in its \(dq\&charset\(dq\& configuration parameter +regardless of the remote charset you actually pass. Thus, you may feel free to +specify just the local charset for a daemon transfer (e.g. \fB\-\-iconv=utf8\fP). +.IP +.IP "\fB\-4, \-\-ipv4\fP or \fB\-6, \-\-ipv6\fP" +Tells rsync to prefer IPv4/IPv6 +when creating sockets. This only affects sockets that rsync has direct +control over, such as the outgoing socket when directly contacting an +rsync daemon. See also these options in the \fB\-\-daemon\fP mode section. +.IP +If rsync was complied without support for IPv6, the \fB\-\-ipv6\fP option +will have no effect. The \fB\-\-version\fP output will tell you if this +is the case. +.IP +.IP "\fB\-\-checksum\-seed=NUM\fP" +Set the checksum seed to the integer NUM. This 4 +byte checksum seed is included in each block and MD4 file checksum calculation +(the more modern MD5 file checksums don\(cq\&t use a seed). By default the checksum +seed is generated by the server and defaults to the current +\f(CWtime()\fP +\&. This +option is used to set a specific checksum seed, which is useful for +applications that want repeatable block checksums, or in the case where the +user wants a more random checksum seed. Setting NUM to 0 causes rsync to use +the default of +\f(CWtime()\fP +for checksum seed. +.IP +.SH "DAEMON OPTIONS" + +.PP +The options allowed when starting an rsync daemon are as follows: +.PP +.IP "\fB\-\-daemon\fP" +This tells rsync that it is to run as a daemon. The +daemon you start running may be accessed using an rsync client using +the \fBhost::module\fP or \fBrsync://host/module/\fP syntax. +.IP +If standard input is a socket then rsync will assume that it is being +run via inetd, otherwise it will detach from the current terminal and +become a background daemon. The daemon will read the config file +(rsyncd.conf) on each connect made by a client and respond to +requests accordingly. See the \fBrsyncd.conf\fP(5) man page for more +details. +.IP +.IP "\fB\-\-address\fP" +By default rsync will bind to the wildcard address when +run as a daemon with the \fB\-\-daemon\fP option. The \fB\-\-address\fP option +allows you to specify a specific IP address (or hostname) to bind to. This +makes virtual hosting possible in conjunction with the \fB\-\-config\fP option. +See also the \(dq\&address\(dq\& global option in the rsyncd.conf manpage. +.IP +.IP "\fB\-\-bwlimit=RATE\fP" +This option allows you to specify the maximum transfer +rate for the data the daemon sends over the socket. The client can still +specify a smaller \fB\-\-bwlimit\fP value, but no larger value will be allowed. +See the client version of this option (above) for some extra details. +.IP +.IP "\fB\-\-config=FILE\fP" +This specifies an alternate config file than +the default. This is only relevant when \fB\-\-daemon\fP is specified. +The default is /etc/rsyncd.conf unless the daemon is running over +a remote shell program and the remote user is not the super\-user; in that case +the default is rsyncd.conf in the current directory (typically $HOME). +.IP +.IP "\fB\-M, \-\-dparam=OVERRIDE\fP" +This option can be used to set a daemon\-config +parameter when starting up rsync in daemon mode. It is equivalent to adding +the parameter at the end of the global settings prior to the first module\(cq\&s +definition. The parameter names can be specified without spaces, if you so +desire. For instance: +.IP +.nf + rsync \-\-daemon \-M pidfile=/path/rsync.pid +.fi + +.IP +.IP "\fB\-\-no\-detach\fP" +When running as a daemon, this option instructs +rsync to not detach itself and become a background process. This +option is required when running as a service on Cygwin, and may also +be useful when rsync is supervised by a program such as +\fBdaemontools\fP or AIX\(cq\&s \fBSystem Resource Controller\fP. +\fB\-\-no\-detach\fP is also recommended when rsync is run under a +debugger. This option has no effect if rsync is run from inetd or +sshd. +.IP +.IP "\fB\-\-port=PORT\fP" +This specifies an alternate TCP port number for the +daemon to listen on rather than the default of 873. See also the \(dq\&port\(dq\& +global option in the rsyncd.conf manpage. +.IP +.IP "\fB\-\-log\-file=FILE\fP" +This option tells the rsync daemon to use the +given log\-file name instead of using the \(dq\&log file\(dq\& setting in the config +file. +.IP +.IP "\fB\-\-log\-file\-format=FORMAT\fP" +This option tells the rsync daemon to use the +given FORMAT string instead of using the \(dq\&log format\(dq\& setting in the config +file. It also enables \(dq\&transfer logging\(dq\& unless the string is empty, in which +case transfer logging is turned off. +.IP +.IP "\fB\-\-sockopts\fP" +This overrides the \fBsocket options\fP setting in the +rsyncd.conf file and has the same syntax. +.IP +.IP "\fB\-v, \-\-verbose\fP" +This option increases the amount of information the +daemon logs during its startup phase. After the client connects, the +daemon\(cq\&s verbosity level will be controlled by the options that the client +used and the \(dq\&max verbosity\(dq\& setting in the module\(cq\&s config section. +.IP +.IP "\fB\-4, \-\-ipv4\fP or \fB\-6, \-\-ipv6\fP" +Tells rsync to prefer IPv4/IPv6 +when creating the incoming sockets that the rsync daemon will use to +listen for connections. One of these options may be required in older +versions of Linux to work around an IPv6 bug in the kernel (if you see +an \(dq\&address already in use\(dq\& error when nothing else is using the port, +try specifying \fB\-\-ipv6\fP or \fB\-\-ipv4\fP when starting the daemon). +.IP +If rsync was complied without support for IPv6, the \fB\-\-ipv6\fP option +will have no effect. The \fB\-\-version\fP output will tell you if this +is the case. +.IP +.IP "\fB\-h, \-\-help\fP" +When specified after \fB\-\-daemon\fP, print a short help +page describing the options available for starting an rsync daemon. + +.PP +.SH "FILTER RULES" + +.PP +The filter rules allow for flexible selection of which files to transfer +(include) and which files to skip (exclude). The rules either directly +specify include/exclude patterns or they specify a way to acquire more +include/exclude patterns (e.g. to read them from a file). +.PP +As the list of files/directories to transfer is built, rsync checks each +name to be transferred against the list of include/exclude patterns in +turn, and the first matching pattern is acted on: if it is an exclude +pattern, then that file is skipped; if it is an include pattern then that +filename is not skipped; if no matching pattern is found, then the +filename is not skipped. +.PP +Rsync builds an ordered list of filter rules as specified on the +command\-line. Filter rules have the following syntax: +.PP +.RS +\f(CWRULE [PATTERN_OR_FILENAME]\fP +.br +\f(CWRULE,MODIFIERS [PATTERN_OR_FILENAME]\fP +.br +.RE + +.PP +You have your choice of using either short or long RULE names, as described +below. If you use a short\-named rule, the \(cq\&,\(cq\& separating the RULE from the +MODIFIERS is optional. The PATTERN or FILENAME that follows (when present) +must come after either a single space or an underscore (_). +Here are the available rule prefixes: +.PP +.RS +\fBexclude, \-\fP specifies an exclude pattern. +.br +\fBinclude, +\fP specifies an include pattern. +.br +\fBmerge, .\fP specifies a merge\-file to read for more rules. +.br +\fBdir\-merge, :\fP specifies a per\-directory merge\-file. +.br +\fBhide, H\fP specifies a pattern for hiding files from the transfer. +.br +\fBshow, S\fP files that match the pattern are not hidden. +.br +\fBprotect, P\fP specifies a pattern for protecting files from deletion. +.br +\fBrisk, R\fP files that match the pattern are not protected. +.br +\fBclear, !\fP clears the current include/exclude list (takes no arg) +.br +.RE + +.PP +When rules are being read from a file, empty lines are ignored, as are +comment lines that start with a \(dq\&#\(dq\&. +.PP +Note that the \fB\-\-include\fP/\fB\-\-exclude\fP command\-line options do not allow the +full range of rule parsing as described above \-\- they only allow the +specification of include/exclude patterns plus a \(dq\&!\(dq\& token to clear the +list (and the normal comment parsing when rules are read from a file). +If a pattern +does not begin with \(dq\&\- \(dq\& (dash, space) or \(dq\&+ \(dq\& (plus, space), then the +rule will be interpreted as if \(dq\&+ \(dq\& (for an include option) or \(dq\&\- \(dq\& (for +an exclude option) were prefixed to the string. A \fB\-\-filter\fP option, on +the other hand, must always contain either a short or long rule name at the +start of the rule. +.PP +Note also that the \fB\-\-filter\fP, \fB\-\-include\fP, and \fB\-\-exclude\fP options take one +rule/pattern each. To add multiple ones, you can repeat the options on +the command\-line, use the merge\-file syntax of the \fB\-\-filter\fP option, or +the \fB\-\-include\-from\fP/\fB\-\-exclude\-from\fP options. +.PP +.SH "INCLUDE/EXCLUDE PATTERN RULES" + +.PP +You can include and exclude files by specifying patterns using the \(dq\&+\(dq\&, +\(dq\&\-\(dq\&, etc. filter rules (as introduced in the FILTER RULES section above). +The include/exclude rules each specify a pattern that is matched against +the names of the files that are going to be transferred. These patterns +can take several forms: +.PP +.IP o +if the pattern starts with a / then it is anchored to a +particular spot in the hierarchy of files, otherwise it is matched +against the end of the pathname. This is similar to a leading ^ in +regular expressions. +Thus \(dq\&/foo\(dq\& would match a name of \(dq\&foo\(dq\& at either the \(dq\&root of the +transfer\(dq\& (for a global rule) or in the merge\-file\(cq\&s directory (for a +per\-directory rule). +An unqualified \(dq\&foo\(dq\& would match a name of \(dq\&foo\(dq\& anywhere in the +tree because the algorithm is applied recursively from the +top down; it behaves as if each path component gets a turn at being the +end of the filename. Even the unanchored \(dq\&sub/foo\(dq\& would match at +any point in the hierarchy where a \(dq\&foo\(dq\& was found within a directory +named \(dq\&sub\(dq\&. See the section on ANCHORING INCLUDE/EXCLUDE PATTERNS for +a full discussion of how to specify a pattern that matches at the root +of the transfer. +.IP o +if the pattern ends with a / then it will only match a +directory, not a regular file, symlink, or device. +.IP o +rsync chooses between doing a simple string match and wildcard +matching by checking if the pattern contains one of these three wildcard +characters: \(cq\&*\(cq\&, \(cq\&?\(cq\&, and \(cq\&[\(cq\& . +.IP o +a \(cq\&*\(cq\& matches any path component, but it stops at slashes. +.IP o +use \(cq\&**\(cq\& to match anything, including slashes. +.IP o +a \(cq\&?\(cq\& matches any character except a slash (/). +.IP o +a \(cq\&[\(cq\& introduces a character class, such as [a\-z] or [[:alpha:]]. +.IP o +in a wildcard pattern, a backslash can be used to escape a wildcard +character, but it is matched literally when no wildcards are present. +This means that there is an extra level of backslash removal when a +pattern contains wildcard characters compared to a pattern that has none. +e.g. if you add a wildcard to \(dq\&foo\ebar\(dq\& (which matches the backslash) you +would need to use \(dq\&foo\e\ebar*\(dq\& to avoid the \(dq\&\eb\(dq\& becoming just \(dq\&b\(dq\&. +.IP o +if the pattern contains a / (not counting a trailing /) or a \(dq\&**\(dq\&, +then it is matched against the full pathname, including any leading +directories. If the pattern doesn\(cq\&t contain a / or a \(dq\&**\(dq\&, then it is +matched only against the final component of the filename. +(Remember that the algorithm is applied recursively so \(dq\&full filename\(dq\& +can actually be any portion of a path from the starting directory on +down.) +.IP o +a trailing \(dq\&dir_name/***\(dq\& will match both the directory (as if +\(dq\&dir_name/\(dq\& had been specified) and everything in the directory +(as if \(dq\&dir_name/**\(dq\& had been specified). This behavior was added in +version 2.6.7. + +.PP +Note that, when using the \fB\-\-recursive\fP (\fB\-r\fP) option (which is implied by +\fB\-a\fP), every subcomponent of every path is visited from the top down, so +include/exclude patterns get applied recursively to each subcomponent\(cq\&s +full name (e.g. to include \(dq\&/foo/bar/baz\(dq\& the subcomponents \(dq\&/foo\(dq\& and +\(dq\&/foo/bar\(dq\& must not be excluded). +The exclude patterns actually short\-circuit the directory traversal stage +when rsync finds the files to send. If a pattern excludes a particular +parent directory, it can render a deeper include pattern ineffectual +because rsync did not descend through that excluded section of the +hierarchy. This is particularly important when using a trailing \(cq\&*\(cq\& rule. +For instance, this won\(cq\&t work: +.PP +.RS +\f(CW+ /some/path/this\-file\-will\-not\-be\-found\fP +.br +\f(CW+ /file\-is\-included\fP +.br +\f(CW\- *\fP +.br +.RE + +.PP +This fails because the parent directory \(dq\&some\(dq\& is excluded by the \(cq\&*\(cq\& +rule, so rsync never visits any of the files in the \(dq\&some\(dq\& or \(dq\&some/path\(dq\& +directories. One solution is to ask for all directories in the hierarchy +to be included by using a single rule: \(dq\&+ */\(dq\& (put it somewhere before the +\(dq\&\- *\(dq\& rule), and perhaps use the \fB\-\-prune\-empty\-dirs\fP option. Another +solution is to add specific include rules for all +the parent dirs that need to be visited. For instance, this set of rules +works fine: +.PP +.RS +\f(CW+ /some/\fP +.br +\f(CW+ /some/path/\fP +.br +\f(CW+ /some/path/this\-file\-is\-found\fP +.br +\f(CW+ /file\-also\-included\fP +.br +\f(CW\- *\fP +.br +.RE + +.PP +Here are some examples of exclude/include matching: +.PP +.IP o +\(dq\&\- *.o\(dq\& would exclude all names matching *.o +.IP o +\(dq\&\- /foo\(dq\& would exclude a file (or directory) named foo in the +transfer\-root directory +.IP o +\(dq\&\- foo/\(dq\& would exclude any directory named foo +.IP o +\(dq\&\- /foo/*/bar\(dq\& would exclude any file named bar which is at two +levels below a directory named foo in the transfer\-root directory +.IP o +\(dq\&\- /foo/**/bar\(dq\& would exclude any file named bar two +or more levels below a directory named foo in the transfer\-root directory +.IP o +The combination of \(dq\&+ */\(dq\&, \(dq\&+ *.c\(dq\&, and \(dq\&\- *\(dq\& would include all +directories and C source files but nothing else (see also the +\fB\-\-prune\-empty\-dirs\fP option) +.IP o +The combination of \(dq\&+ foo/\(dq\&, \(dq\&+ foo/bar.c\(dq\&, and \(dq\&\- *\(dq\& would include +only the foo directory and foo/bar.c (the foo directory must be +explicitly included or it would be excluded by the \(dq\&*\(dq\&) + +.PP +The following modifiers are accepted after a \(dq\&+\(dq\& or \(dq\&\-\(dq\&: +.PP +.IP o +A \fB/\fP specifies that the include/exclude rule should be matched +against the absolute pathname of the current item. For example, +\(dq\&\-/ /etc/passwd\(dq\& would exclude the passwd file any time the transfer +was sending files from the \(dq\&/etc\(dq\& directory, and \(dq\&\-/ subdir/foo\(dq\& +would always exclude \(dq\&foo\(dq\& when it is in a dir named \(dq\&subdir\(dq\&, even +if \(dq\&foo\(dq\& is at the root of the current transfer. +.IP o +A \fB!\fP specifies that the include/exclude should take effect if +the pattern fails to match. For instance, \(dq\&\-! */\(dq\& would exclude all +non\-directories. +.IP o +A \fBC\fP is used to indicate that all the global CVS\-exclude rules +should be inserted as excludes in place of the \(dq\&\-C\(dq\&. No arg should +follow. +.IP o +An \fBs\fP is used to indicate that the rule applies to the sending +side. When a rule affects the sending side, it prevents files from +being transferred. The default is for a rule to affect both sides +unless \fB\-\-delete\-excluded\fP was specified, in which case default rules +become sender\-side only. See also the hide (H) and show (S) rules, +which are an alternate way to specify sending\-side includes/excludes. +.IP o +An \fBr\fP is used to indicate that the rule applies to the receiving +side. When a rule affects the receiving side, it prevents files from +being deleted. See the \fBs\fP modifier for more info. See also the +protect (P) and risk (R) rules, which are an alternate way to +specify receiver\-side includes/excludes. +.IP o +A \fBp\fP indicates that a rule is perishable, meaning that it is +ignored in directories that are being deleted. For instance, the \fB\-C\fP +option\(cq\&s default rules that exclude things like \(dq\&CVS\(dq\& and \(dq\&*.o\(dq\& are +marked as perishable, and will not prevent a directory that was removed +on the source from being deleted on the destination. + +.PP +.SH "MERGE\-FILE FILTER RULES" + +.PP +You can merge whole files into your filter rules by specifying either a +merge (.) or a dir\-merge (:) filter rule (as introduced in the FILTER RULES +section above). +.PP +There are two kinds of merged files \-\- single\-instance (\(cq\&.\(cq\&) and +per\-directory (\(cq\&:\(cq\&). A single\-instance merge file is read one time, and +its rules are incorporated into the filter list in the place of the \(dq\&.\(dq\& +rule. For per\-directory merge files, rsync will scan every directory that +it traverses for the named file, merging its contents when the file exists +into the current list of inherited rules. These per\-directory rule files +must be created on the sending side because it is the sending side that is +being scanned for the available files to transfer. These rule files may +also need to be transferred to the receiving side if you want them to +affect what files don\(cq\&t get deleted (see PER\-DIRECTORY RULES AND DELETE +below). +.PP +Some examples: +.PP +.RS +\f(CWmerge /etc/rsync/default.rules\fP +.br +\f(CW. /etc/rsync/default.rules\fP +.br +\f(CWdir\-merge .per\-dir\-filter\fP +.br +\f(CWdir\-merge,n\- .non\-inherited\-per\-dir\-excludes\fP +.br +\f(CW:n\- .non\-inherited\-per\-dir\-excludes\fP +.br +.RE + +.PP +The following modifiers are accepted after a merge or dir\-merge rule: +.PP +.IP o +A \fB\-\fP specifies that the file should consist of only exclude +patterns, with no other rule\-parsing except for in\-file comments. +.IP o +A \fB+\fP specifies that the file should consist of only include +patterns, with no other rule\-parsing except for in\-file comments. +.IP o +A \fBC\fP is a way to specify that the file should be read in a +CVS\-compatible manner. This turns on \(cq\&n\(cq\&, \(cq\&w\(cq\&, and \(cq\&\-\(cq\&, but also +allows the list\-clearing token (!) to be specified. If no filename is +provided, \(dq\&.cvsignore\(dq\& is assumed. +.IP o +A \fBe\fP will exclude the merge\-file name from the transfer; e.g. +\(dq\&dir\-merge,e .rules\(dq\& is like \(dq\&dir\-merge .rules\(dq\& and \(dq\&\- .rules\(dq\&. +.IP o +An \fBn\fP specifies that the rules are not inherited by subdirectories. +.IP o +A \fBw\fP specifies that the rules are word\-split on whitespace instead +of the normal line\-splitting. This also turns off comments. Note: the +space that separates the prefix from the rule is treated specially, so +\(dq\&\- foo + bar\(dq\& is parsed as two rules (assuming that prefix\-parsing wasn\(cq\&t +also disabled). +.IP o +You may also specify any of the modifiers for the \(dq\&+\(dq\& or \(dq\&\-\(dq\& rules +(above) in order to have the rules that are read in from the file +default to having that modifier set (except for the \fB!\fP modifier, which +would not be useful). For instance, \(dq\&merge,\-/ .excl\(dq\& would +treat the contents of .excl as absolute\-path excludes, +while \(dq\&dir\-merge,s .filt\(dq\& and \(dq\&:sC\(dq\& would each make all their +per\-directory rules apply only on the sending side. If the merge rule +specifies sides to affect (via the \fBs\fP or \fBr\fP modifier or both), +then the rules in the file must not specify sides (via a modifier or +a rule prefix such as \fBhide\fP). + +.PP +Per\-directory rules are inherited in all subdirectories of the directory +where the merge\-file was found unless the \(cq\&n\(cq\& modifier was used. Each +subdirectory\(cq\&s rules are prefixed to the inherited per\-directory rules +from its parents, which gives the newest rules a higher priority than the +inherited rules. The entire set of dir\-merge rules are grouped together in +the spot where the merge\-file was specified, so it is possible to override +dir\-merge rules via a rule that got specified earlier in the list of global +rules. When the list\-clearing rule (\(dq\&!\(dq\&) is read from a per\-directory +file, it only clears the inherited rules for the current merge file. +.PP +Another way to prevent a single rule from a dir\-merge file from being inherited is to +anchor it with a leading slash. Anchored rules in a per\-directory +merge\-file are relative to the merge\-file\(cq\&s directory, so a pattern \(dq\&/foo\(dq\& +would only match the file \(dq\&foo\(dq\& in the directory where the dir\-merge filter +file was found. +.PP +Here\(cq\&s an example filter file which you\(cq\&d specify via \fB\-\-filter=\(dq\&. file\(dq\&:\fP +.PP +.RS +\f(CWmerge /home/user/.global\-filter\fP +.br +\f(CW\- *.gz\fP +.br +\f(CWdir\-merge .rules\fP +.br +\f(CW+ *.[ch]\fP +.br +\f(CW\- *.o\fP +.br +.RE + +.PP +This will merge the contents of the /home/user/.global\-filter file at the +start of the list and also turns the \(dq\&.rules\(dq\& filename into a per\-directory +filter file. All rules read in prior to the start of the directory scan +follow the global anchoring rules (i.e. a leading slash matches at the root +of the transfer). +.PP +If a per\-directory merge\-file is specified with a path that is a parent +directory of the first transfer directory, rsync will scan all the parent +dirs from that starting point to the transfer directory for the indicated +per\-directory file. For instance, here is a common filter (see \fB\-F\fP): +.PP +.RS +\f(CW\-\-filter='\&: /.rsync\-filter'\&\fP +.RE + +.PP +That rule tells rsync to scan for the file .rsync\-filter in all +directories from the root down through the parent directory of the +transfer prior to the start of the normal directory scan of the file in +the directories that are sent as a part of the transfer. (Note: for an +rsync daemon, the root is always the same as the module\(cq\&s \(dq\&path\(dq\&.) +.PP +Some examples of this pre\-scanning for per\-directory files: +.PP +.RS +\f(CWrsync \-avF /src/path/ /dest/dir\fP +.br +\f(CWrsync \-av \-\-filter='\&: ../../.rsync\-filter'\& /src/path/ /dest/dir\fP +.br +\f(CWrsync \-av \-\-filter='\&: .rsync\-filter'\& /src/path/ /dest/dir\fP +.br +.RE + +.PP +The first two commands above will look for \(dq\&.rsync\-filter\(dq\& in \(dq\&/\(dq\& and +\(dq\&/src\(dq\& before the normal scan begins looking for the file in \(dq\&/src/path\(dq\& +and its subdirectories. The last command avoids the parent\-dir scan +and only looks for the \(dq\&.rsync\-filter\(dq\& files in each directory that is +a part of the transfer. +.PP +If you want to include the contents of a \(dq\&.cvsignore\(dq\& in your patterns, +you should use the rule \(dq\&:C\(dq\&, which creates a dir\-merge of the .cvsignore +file, but parsed in a CVS\-compatible manner. You can +use this to affect where the \fB\-\-cvs\-exclude\fP (\fB\-C\fP) option\(cq\&s inclusion of the +per\-directory .cvsignore file gets placed into your rules by putting the +\(dq\&:C\(dq\& wherever you like in your filter rules. Without this, rsync would +add the dir\-merge rule for the .cvsignore file at the end of all your other +rules (giving it a lower priority than your command\-line rules). For +example: +.PP +.RS +\f(CWcat <<EOT | rsync \-avC \-\-filter='\&. \-'\& a/ b\fP +.br +\f(CW+ foo.o\fP +.br +\f(CW:C\fP +.br +\f(CW\- *.old\fP +.br +\f(CWEOT\fP +.br +\f(CWrsync \-avC \-\-include=foo.o \-f :C \-\-exclude='\&*.old'\& a/ b\fP +.br +.RE + +.PP +Both of the above rsync commands are identical. Each one will merge all +the per\-directory .cvsignore rules in the middle of the list rather than +at the end. This allows their dir\-specific rules to supersede the rules +that follow the :C instead of being subservient to all your rules. To +affect the other CVS exclude rules (i.e. the default list of exclusions, +the contents of $HOME/.cvsignore, and the value of $CVSIGNORE) you should +omit the \fB\-C\fP command\-line option and instead insert a \(dq\&\-C\(dq\& rule into +your filter rules; e.g. \(dq\&\fB\-\-filter=\-C\fP\(dq\&. +.PP +.SH "LIST\-CLEARING FILTER RULE" + +.PP +You can clear the current include/exclude list by using the \(dq\&!\(dq\& filter +rule (as introduced in the FILTER RULES section above). The \(dq\¤t\(dq\& +list is either the global list of rules (if the rule is encountered while +parsing the filter options) or a set of per\-directory rules (which are +inherited in their own sub\-list, so a subdirectory can use this to clear +out the parent\(cq\&s rules). +.PP +.SH "ANCHORING INCLUDE/EXCLUDE PATTERNS" + +.PP +As mentioned earlier, global include/exclude patterns are anchored at the +\(dq\&root of the transfer\(dq\& (as opposed to per\-directory patterns, which are +anchored at the merge\-file\(cq\&s directory). If you think of the transfer as +a subtree of names that are being sent from sender to receiver, the +transfer\-root is where the tree starts to be duplicated in the destination +directory. This root governs where patterns that start with a / match. +.PP +Because the matching is relative to the transfer\-root, changing the +trailing slash on a source path or changing your use of the \fB\-\-relative\fP +option affects the path you need to use in your matching (in addition to +changing how much of the file tree is duplicated on the destination +host). The following examples demonstrate this. +.PP +Let\(cq\&s say that we want to match two source files, one with an absolute +path of \(dq\&/home/me/foo/bar\(dq\&, and one with a path of \(dq\&/home/you/bar/baz\(dq\&. +Here is how the various command choices differ for a 2\-source transfer: +.PP +.RS +Example cmd: rsync \-a /home/me /home/you /dest +.br ++/\- pattern: /me/foo/bar +.br ++/\- pattern: /you/bar/baz +.br +Target file: /dest/me/foo/bar +.br +Target file: /dest/you/bar/baz +.br +.RE + +.PP +.RS +Example cmd: rsync \-a /home/me/ /home/you/ /dest +.br ++/\- pattern: /foo/bar (note missing \(dq\&me\(dq\&) +.br ++/\- pattern: /bar/baz (note missing \(dq\&you\(dq\&) +.br +Target file: /dest/foo/bar +.br +Target file: /dest/bar/baz +.br +.RE + +.PP +.RS +Example cmd: rsync \-a \-\-relative /home/me/ /home/you /dest +.br ++/\- pattern: /home/me/foo/bar (note full path) +.br ++/\- pattern: /home/you/bar/baz (ditto) +.br +Target file: /dest/home/me/foo/bar +.br +Target file: /dest/home/you/bar/baz +.br +.RE + +.PP +.RS +Example cmd: cd /home; rsync \-a \-\-relative me/foo you/ /dest +.br ++/\- pattern: /me/foo/bar (starts at specified path) +.br ++/\- pattern: /you/bar/baz (ditto) +.br +Target file: /dest/me/foo/bar +.br +Target file: /dest/you/bar/baz +.br +.RE + +.PP +The easiest way to see what name you should filter is to just +look at the output when using \fB\-\-verbose\fP and put a / in front of the name +(use the \fB\-\-dry\-run\fP option if you\(cq\&re not yet ready to copy any files). +.PP +.SH "PER\-DIRECTORY RULES AND DELETE" + +.PP +Without a delete option, per\-directory rules are only relevant on the +sending side, so you can feel free to exclude the merge files themselves +without affecting the transfer. To make this easy, the \(cq\&e\(cq\& modifier adds +this exclude for you, as seen in these two equivalent commands: +.PP +.RS +\f(CWrsync \-av \-\-filter='\&: .excl'\& \-\-exclude=.excl host:src/dir /dest\fP +.br +\f(CWrsync \-av \-\-filter='\&:e .excl'\& host:src/dir /dest\fP +.br +.RE + +.PP +However, if you want to do a delete on the receiving side AND you want some +files to be excluded from being deleted, you\(cq\&ll need to be sure that the +receiving side knows what files to exclude. The easiest way is to include +the per\-directory merge files in the transfer and use \fB\-\-delete\-after\fP, +because this ensures that the receiving side gets all the same exclude +rules as the sending side before it tries to delete anything: +.PP +.RS +\f(CWrsync \-avF \-\-delete\-after host:src/dir /dest\fP +.RE + +.PP +However, if the merge files are not a part of the transfer, you\(cq\&ll need to +either specify some global exclude rules (i.e. specified on the command +line), or you\(cq\&ll need to maintain your own per\-directory merge files on +the receiving side. An example of the first is this (assume that the +remote .rules files exclude themselves): +.PP +.nf +rsync \-av \-\-filter=\(cq\&: .rules\(cq\& \-\-filter=\(cq\&. /my/extra.rules\(cq\& + \-\-delete host:src/dir /dest +.fi + +.PP +In the above example the extra.rules file can affect both sides of the +transfer, but (on the sending side) the rules are subservient to the rules +merged from the .rules files because they were specified after the +per\-directory merge rule. +.PP +In one final example, the remote side is excluding the .rsync\-filter +files from the transfer, but we want to use our own .rsync\-filter files +to control what gets deleted on the receiving side. To do this we must +specifically exclude the per\-directory merge files (so that they don\(cq\&t get +deleted) and then put rules into the local files to control what else +should not get deleted. Like one of these commands: +.PP +.nf + rsync \-av \-\-filter='\&:e /.rsync\-filter'\& \-\-delete \e + host:src/dir /dest + rsync \-avFF \-\-delete host:src/dir /dest +.fi + +.PP +.SH "BATCH MODE" + +.PP +Batch mode can be used to apply the same set of updates to many +identical systems. Suppose one has a tree which is replicated on a +number of hosts. Now suppose some changes have been made to this +source tree and those changes need to be propagated to the other +hosts. In order to do this using batch mode, rsync is run with the +write\-batch option to apply the changes made to the source tree to one +of the destination trees. The write\-batch option causes the rsync +client to store in a \(dq\&batch file\(dq\& all the information needed to repeat +this operation against other, identical destination trees. +.PP +Generating the batch file once saves having to perform the file +status, checksum, and data block generation more than once when +updating multiple destination trees. Multicast transport protocols can +be used to transfer the batch update files in parallel to many hosts +at once, instead of sending the same data to every host individually. +.PP +To apply the recorded changes to another destination tree, run rsync +with the read\-batch option, specifying the name of the same batch +file, and the destination tree. Rsync updates the destination tree +using the information stored in the batch file. +.PP +For your convenience, a script file is also created when the write\-batch +option is used: it will be named the same as the batch file with \(dq\&.sh\(dq\& +appended. This script file contains a command\-line suitable for updating a +destination tree using the associated batch file. It can be executed using +a Bourne (or Bourne\-like) shell, optionally passing in an alternate +destination tree pathname which is then used instead of the original +destination path. This is useful when the destination tree path on the +current host differs from the one used to create the batch file. +.PP +Examples: +.PP +.RS +\f(CW$ rsync \-\-write\-batch=foo \-a host:/source/dir/ /adest/dir/\fP +.br +\f(CW$ scp foo* remote:\fP +.br +\f(CW$ ssh remote ./foo.sh /bdest/dir/\fP +.br +.RE + +.PP +.RS +\f(CW$ rsync \-\-write\-batch=foo \-a /source/dir/ /adest/dir/\fP +.br +\f(CW$ ssh remote rsync \-\-read\-batch=\- \-a /bdest/dir/ <foo\fP +.br +.RE + +.PP +In these examples, rsync is used to update /adest/dir/ from /source/dir/ +and the information to repeat this operation is stored in \(dq\&foo\(dq\& and +\(dq\&foo.sh\(dq\&. The host \(dq\&remote\(dq\& is then updated with the batched data going +into the directory /bdest/dir. The differences between the two examples +reveals some of the flexibility you have in how you deal with batches: +.PP +.IP o +The first example shows that the initial copy doesn\(cq\&t have to be +local \-\- you can push or pull data to/from a remote host using either the +remote\-shell syntax or rsync daemon syntax, as desired. +.IP o +The first example uses the created \(dq\&foo.sh\(dq\& file to get the right +rsync options when running the read\-batch command on the remote host. +.IP o +The second example reads the batch data via standard input so that +the batch file doesn\(cq\&t need to be copied to the remote machine first. +This example avoids the foo.sh script because it needed to use a modified +\fB\-\-read\-batch\fP option, but you could edit the script file if you wished to +make use of it (just be sure that no other option is trying to use +standard input, such as the \(dq\&\fB\-\-exclude\-from=\-\fP\(dq\& option). + +.PP +Caveats: +.PP +The read\-batch option expects the destination tree that it is updating +to be identical to the destination tree that was used to create the +batch update fileset. When a difference between the destination trees +is encountered the update might be discarded with a warning (if the file +appears to be up\-to\-date already) or the file\-update may be attempted +and then, if the file fails to verify, the update discarded with an +error. This means that it should be safe to re\-run a read\-batch operation +if the command got interrupted. If you wish to force the batched\-update to +always be attempted regardless of the file\(cq\&s size and date, use the \fB\-I\fP +option (when reading the batch). +If an error occurs, the destination tree will probably be in a +partially updated state. In that case, rsync can +be used in its regular (non\-batch) mode of operation to fix up the +destination tree. +.PP +The rsync version used on all destinations must be at least as new as the +one used to generate the batch file. Rsync will die with an error if the +protocol version in the batch file is too new for the batch\-reading rsync +to handle. See also the \fB\-\-protocol\fP option for a way to have the +creating rsync generate a batch file that an older rsync can understand. +(Note that batch files changed format in version 2.6.3, so mixing versions +older than that with newer versions will not work.) +.PP +When reading a batch file, rsync will force the value of certain options +to match the data in the batch file if you didn\(cq\&t set them to the same +as the batch\-writing command. Other options can (and should) be changed. +For instance \fB\-\-write\-batch\fP changes to \fB\-\-read\-batch\fP, +\fB\-\-files\-from\fP is dropped, and the +\fB\-\-filter\fP/\fB\-\-include\fP/\fB\-\-exclude\fP options are not needed unless +one of the \fB\-\-delete\fP options is specified. +.PP +The code that creates the BATCH.sh file transforms any filter/include/exclude +options into a single list that is appended as a \(dq\&here\(dq\& document to the +shell script file. An advanced user can use this to modify the exclude +list if a change in what gets deleted by \fB\-\-delete\fP is desired. A normal +user can ignore this detail and just use the shell script as an easy way +to run the appropriate \fB\-\-read\-batch\fP command for the batched data. +.PP +The original batch mode in rsync was based on \(dq\&rsync+\(dq\&, but the latest +version uses a new implementation. +.PP +.SH "SYMBOLIC LINKS" + +.PP +Three basic behaviors are possible when rsync encounters a symbolic +link in the source directory. +.PP +By default, symbolic links are not transferred at all. A message +\(dq\&skipping non\-regular\(dq\& file is emitted for any symlinks that exist. +.PP +If \fB\-\-links\fP is specified, then symlinks are recreated with the same +target on the destination. Note that \fB\-\-archive\fP implies +\fB\-\-links\fP. +.PP +If \fB\-\-copy\-links\fP is specified, then symlinks are \(dq\&collapsed\(dq\& by +copying their referent, rather than the symlink. +.PP +Rsync can also distinguish \(dq\&safe\(dq\& and \(dq\&unsafe\(dq\& symbolic links. An +example where this might be used is a web site mirror that wishes to +ensure that the rsync module that is copied does not include symbolic links to +\fB/etc/passwd\fP in the public section of the site. Using +\fB\-\-copy\-unsafe\-links\fP will cause any links to be copied as the file +they point to on the destination. Using \fB\-\-safe\-links\fP will cause +unsafe links to be omitted altogether. (Note that you must specify +\fB\-\-links\fP for \fB\-\-safe\-links\fP to have any effect.) +.PP +Symbolic links are considered unsafe if they are absolute symlinks +(start with \fB/\fP), empty, or if they contain enough \(dq\&..\(dq\& +components to ascend from the directory being copied. +.PP +Here\(cq\&s a summary of how the symlink options are interpreted. The list is +in order of precedence, so if your combination of options isn\(cq\&t mentioned, +use the first line that is a complete subset of your options: +.PP +.IP "\fB\-\-copy\-links\fP" +Turn all symlinks into normal files (leaving no +symlinks for any other options to affect). +.PP +.IP "\fB\-\-links \-\-copy\-unsafe\-links\fP" +Turn all unsafe symlinks into files +and duplicate all safe symlinks. +.PP +.IP "\fB\-\-copy\-unsafe\-links\fP" +Turn all unsafe symlinks into files, noisily +skip all safe symlinks. +.PP +.IP "\fB\-\-links \-\-safe\-links\fP" +Duplicate safe symlinks and skip unsafe +ones. +.PP +.IP "\fB\-\-links\fP" +Duplicate all symlinks. +.PP +.SH "DIAGNOSTICS" + +.PP +rsync occasionally produces error messages that may seem a little +cryptic. The one that seems to cause the most confusion is \(dq\&protocol +version mismatch \-\- is your shell clean?\(dq\&. +.PP +This message is usually caused by your startup scripts or remote shell +facility producing unwanted garbage on the stream that rsync is using +for its transport. The way to diagnose this problem is to run your +remote shell like this: +.PP +.RS +\f(CWssh remotehost /bin/true > out.dat\fP +.RE + +.PP +then look at out.dat. If everything is working correctly then out.dat +should be a zero length file. If you are getting the above error from +rsync then you will probably find that out.dat contains some text or +data. Look at the contents and try to work out what is producing +it. The most common cause is incorrectly configured shell startup +scripts (such as .cshrc or .profile) that contain output statements +for non\-interactive logins. +.PP +If you are having trouble debugging filter patterns, then +try specifying the \fB\-vv\fP option. At this level of verbosity rsync will +show why each individual file is included or excluded. +.PP +.SH "EXIT VALUES" + +.PP +.IP "\fB0\fP" +Success +.IP "\fB1\fP" +Syntax or usage error +.IP "\fB2\fP" +Protocol incompatibility +.IP "\fB3\fP" +Errors selecting input/output files, dirs +.IP "\fB4\fP" +Requested action not supported: an attempt +was made to manipulate 64\-bit files on a platform that cannot support +them; or an option was specified that is supported by the client and +not by the server. +.IP "\fB5\fP" +Error starting client\-server protocol +.IP "\fB6\fP" +Daemon unable to append to log\-file +.IP "\fB10\fP" +Error in socket I/O +.IP "\fB11\fP" +Error in file I/O +.IP "\fB12\fP" +Error in rsync protocol data stream +.IP "\fB13\fP" +Errors with program diagnostics +.IP "\fB14\fP" +Error in IPC code +.IP "\fB20\fP" +Received SIGUSR1 or SIGINT +.IP "\fB21\fP" +Some error returned by +\f(CWwaitpid()\fP +.IP "\fB22\fP" +Error allocating core memory buffers +.IP "\fB23\fP" +Partial transfer due to error +.IP "\fB24\fP" +Partial transfer due to vanished source files +.IP "\fB25\fP" +The \-\-max\-delete limit stopped deletions +.IP "\fB30\fP" +Timeout in data send/receive +.IP "\fB35\fP" +Timeout waiting for daemon connection + +.PP +.SH "ENVIRONMENT VARIABLES" + +.PP +.IP "\fBCVSIGNORE\fP" +The CVSIGNORE environment variable supplements any +ignore patterns in .cvsignore files. See the \fB\-\-cvs\-exclude\fP option for +more details. +.IP "\fBRSYNC_ICONV\fP" +Specify a default \fB\-\-iconv\fP setting using this +environment variable. (First supported in 3.0.0.) +.IP "\fBRSYNC_PROTECT_ARGS\fP" +Specify a non\-zero numeric value if you want the +\fB\-\-protect\-args\fP option to be enabled by default, or a zero value to make +sure that it is disabled by default. (First supported in 3.1.0.) +.IP "\fBRSYNC_RSH\fP" +The RSYNC_RSH environment variable allows you to +override the default shell used as the transport for rsync. Command line +options are permitted after the command name, just as in the \fB\-e\fP option. +.IP "\fBRSYNC_PROXY\fP" +The RSYNC_PROXY environment variable allows you to +redirect your rsync client to use a web proxy when connecting to a +rsync daemon. You should set RSYNC_PROXY to a hostname:port pair. +.IP "\fBRSYNC_PASSWORD\fP" +Setting RSYNC_PASSWORD to the required +password allows you to run authenticated rsync connections to an rsync +daemon without user intervention. Note that this does not supply a +password to a remote shell transport such as ssh; to learn how to do that, +consult the remote shell\(cq\&s documentation. +.IP "\fBUSER\fP or \fBLOGNAME\fP" +The USER or LOGNAME environment variables +are used to determine the default username sent to an rsync daemon. +If neither is set, the username defaults to \(dq\&nobody\(dq\&. +.IP "\fBHOME\fP" +The HOME environment variable is used to find the user\(cq\&s +default .cvsignore file. + +.PP +.SH "FILES" + +.PP +/etc/rsyncd.conf or rsyncd.conf +.PP +.SH "SEE ALSO" + +.PP +\fBrsyncd.conf\fP(5) +.PP +.SH "BUGS" + +.PP +times are transferred as *nix time_t values +.PP +When transferring to FAT filesystems rsync may re\-sync +unmodified files. +See the comments on the \fB\-\-modify\-window\fP option. +.PP +file permissions, devices, etc. are transferred as native numerical +values +.PP +see also the comments on the \fB\-\-delete\fP option +.PP +Please report bugs! See the web site at +http://rsync.samba.org/ +.PP +.SH "VERSION" + +.PP +This man page is current for version 3.1.2 of rsync. +.PP +.SH "INTERNAL OPTIONS" + +.PP +The options \fB\-\-server\fP and \fB\-\-sender\fP are used internally by rsync, +and should never be typed by a user under normal circumstances. Some +awareness of these options may be needed in certain scenarios, such as +when setting up a login that can only run an rsync command. For instance, +the support directory of the rsync distribution has an example script +named rrsync (for restricted rsync) that can be used with a restricted +ssh login. +.PP +.SH "CREDITS" + +.PP +rsync is distributed under the GNU General Public License. See the file +COPYING for details. +.PP +A WEB site is available at +http://rsync.samba.org/. The site +includes an FAQ\-O\-Matic which may cover questions unanswered by this +manual page. +.PP +The primary ftp site for rsync is +ftp://rsync.samba.org/pub/rsync. +.PP +We would be delighted to hear from you if you like this program. +Please contact the mailing\-list at rsync@lists.samba.org. +.PP +This program uses the excellent zlib compression library written by +Jean\-loup Gailly and Mark Adler. +.PP +.SH "THANKS" + +.PP +Special thanks go out to: John Van Essen, Matt McCutchen, Wesley W. Terpstra, +David Dykstra, Jos Backus, Sebastian Krahmer, Martin Pool, and our +gone\-but\-not\-forgotten compadre, J.W. Schultz. +.PP +Thanks also to Richard Brent, Brendan Mackay, Bill Waite, Stephen Rothwell +and David Bell. I\(cq\&ve probably missed some people, my apologies if I have. +.PP +.SH "AUTHOR" + +.PP +rsync was originally written by Andrew Tridgell and Paul Mackerras. +Many people have later contributed to it. It is currently maintained +by Wayne Davison. +.PP +Mailing lists for support and development are available at +http://lists.samba.org @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -364,7 +364,7 @@ int read_ndx_and_attrs(int f_in, int f_out, int *iflag_ptr, uchar *type_ptr, } /* Send all the data we read for this flist to the generator. */ start_flist_forward(ndx); - flist = recv_file_list(f_in); + flist = recv_file_list(f_in, ndx); flist->parent_ndx = ndx; stop_flist_forward(); } @@ -548,7 +548,11 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, || (!(preserve_times & PRESERVE_LINK_TIMES) && S_ISLNK(sxp->st.st_mode))) flags |= ATTRS_SKIP_MTIME; if (!(flags & ATTRS_SKIP_MTIME) - && cmp_time(sxp->st.st_mtime, file->modtime) != 0) { + && (sxp->st.st_mtime != file->modtime +#ifdef ST_MTIME_NSEC + || (NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file)) +#endif + )) { int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode); if (ret < 0) { rsyserr(FERROR_XFER, errno, "failed to set times on %s", @@ -601,7 +605,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, } /* This is only called for SIGINT, SIGHUP, and SIGTERM. */ -RETSIGTYPE sig_int(int sig_num) +void sig_int(int sig_num) { /* KLUGE: if the user hits Ctrl-C while ssh is prompting * for a password, then our cleanup's sending of a SIGUSR1 @@ -2,7 +2,7 @@ * Copyright (C) 1996, 2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -892,7 +892,6 @@ typedef struct filter_struct { typedef struct filter_list_struct { filter_rule *head; filter_rule *tail; - filter_rule *parent_dirscan_head; char *debug_type; } filter_rule_list; @@ -1,5 +1,5 @@ mailto(rsync-bugs@samba.org) -manpage(rsync)(1)(22 Jun 2014)()() +manpage(rsync)(1)(21 Dec 2015)()() manpagename(rsync)(a fast, versatile, remote (and local) file-copying tool) manpagesynopsis() @@ -571,7 +571,9 @@ directly to stderr rather than to send messages to the client side via the protocol (which normally outputs info messages via stdout). This is mainly intended for debugging in order to avoid changing the data sent via the protocol, since the extra protocol data can change what is being tested. -Keep in mind that a daemon connection does not have a stderr channel to send +The option does not affect the remote side of a transfer without using +bf(--remote-option) -- e.g. bf(-M--msgs2stderr). +Also keep in mind that a daemon connection does not have a stderr channel to send messages back to the client side, so if you are doing any daemon-transfer debugging using this option, you should start up a daemon using bf(--no-detach) so that you can see the stderr output on the daemon side. @@ -864,6 +866,11 @@ Implies bf(--inplace), but does not conflict with bf(--sparse) (since it is always extending a file's length). +The use of bf(--append) can be dangerous if you aren't 100% sure that the files +that are longer have only grown by the appending of data onto the end. You +should thus use include/exclude/filter rules to ensure that such a transfer is +only affecting files that you know to be growing via appended data. + dit(bf(--append-verify)) This works just like the bf(--append) option, but the existing data on the receiving side is included in the full-file checksum verification step, which will cause a file to be resent if the @@ -3403,7 +3410,7 @@ url(http://rsync.samba.org/)(http://rsync.samba.org/) manpagesection(VERSION) -This man page is current for version 3.1.1 of rsync. +This man page is current for version 3.1.2 of rsync. manpagesection(INTERNAL OPTIONS) diff --git a/rsyncd.conf.5 b/rsyncd.conf.5 new file mode 100644 index 00000000..272f20b5 --- /dev/null +++ b/rsyncd.conf.5 @@ -0,0 +1,1085 @@ +.TH "rsyncd.conf" "5" "21 Dec 2015" "" "" +.SH "NAME" +rsyncd.conf \- configuration file for rsync in daemon mode +.SH "SYNOPSIS" + +.PP +rsyncd.conf +.PP +.SH "DESCRIPTION" + +.PP +The rsyncd.conf file is the runtime configuration file for rsync when +run as an rsync daemon. +.PP +The rsyncd.conf file controls authentication, access, logging and +available modules. +.PP +.SH "FILE FORMAT" + +.PP +The file consists of modules and parameters. A module begins with the +name of the module in square brackets and continues until the next +module begins. Modules contain parameters of the form \(dq\&name = value\(dq\&. +.PP +The file is line\-based \-\- that is, each newline\-terminated line represents +either a comment, a module name or a parameter. +.PP +Only the first equals sign in a parameter is significant. Whitespace before +or after the first equals sign is discarded. Leading, trailing and internal +whitespace in module and parameter names is irrelevant. Leading and +trailing whitespace in a parameter value is discarded. Internal whitespace +within a parameter value is retained verbatim. +.PP +Any line \fBbeginning\fP with a hash (#) is ignored, as are lines containing +only whitespace. (If a hash occurs after anything other than leading +whitespace, it is considered a part of the line\(cq\&s content.) +.PP +Any line ending in a \e is \(dq\&continued\(dq\& on the next line in the +customary UNIX fashion. +.PP +The values following the equals sign in parameters are all either a string +(no quotes needed) or a boolean, which may be given as yes/no, 0/1 or +true/false. Case is not significant in boolean values, but is preserved +in string values. +.PP +.SH "LAUNCHING THE RSYNC DAEMON" + +.PP +The rsync daemon is launched by specifying the \fB\-\-daemon\fP option to +rsync. +.PP +The daemon must run with root privileges if you wish to use chroot, to +bind to a port numbered under 1024 (as is the default 873), or to set +file ownership. Otherwise, it must just have permission to read and +write the appropriate data, log, and lock files. +.PP +You can launch it either via inetd, as a stand\-alone daemon, or from +an rsync client via a remote shell. If run as a stand\-alone daemon then +just run the command \(dq\&\fBrsync \-\-daemon\fP\(dq\& from a suitable startup script. +.PP +When run via inetd you should add a line like this to /etc/services: +.PP +.nf + rsync 873/tcp +.fi + +.PP +and a single line something like this to /etc/inetd.conf: +.PP +.nf + rsync stream tcp nowait root /usr/bin/rsync rsyncd \-\-daemon +.fi + +.PP +Replace \(dq\&/usr/bin/rsync\(dq\& with the path to where you have rsync installed on +your system. You will then need to send inetd a HUP signal to tell it to +reread its config file. +.PP +Note that you should \fBnot\fP send the rsync daemon a HUP signal to force +it to reread the \f(CWrsyncd.conf\fP file. The file is re\-read on each client +connection. +.PP +.SH "GLOBAL PARAMETERS" + +.PP +The first parameters in the file (before a [module] header) are the +global parameters. +Rsync also allows for the use of a \(dq\&[global]\(dq\& module name to indicate the +start of one or more global\-parameter sections (the name must be lower case). +.PP +You may also include any module parameters in the global part of the +config file in which case the supplied value will override the +default for that parameter. +.PP +You may use references to environment variables in the values of parameters. +String parameters will have %VAR% references expanded as late as possible (when +the string is used in the program), allowing for the use of variables that +rsync sets at connection time, such as RSYNC_USER_NAME. Non\-string parameters +(such as true/false settings) are expanded when read from the config file. If +a variable does not exist in the environment, or if a sequence of characters is +not a valid reference (such as an un\-paired percent sign), the raw characters +are passed through unchanged. This helps with backward compatibility and +safety (e.g. expanding a non\-existent %VAR% to an empty string in a path could +result in a very unsafe path). The safest way to insert a literal % into a +value is to use %%. +.PP +.IP "\fBmotd file\fP" +This parameter allows you to specify a +\(dq\&message of the day\(dq\& to display to clients on each connect. This +usually contains site information and any legal notices. The default +is no motd file. +This can be overridden by the \fB\-\-dparam=motdfile=FILE\fP +command\-line option when starting the daemon. +.IP +.IP "\fBpid file\fP" +This parameter tells the rsync daemon to write +its process ID to that file. If the file already exists, the rsync +daemon will abort rather than overwrite the file. +This can be overridden by the \fB\-\-dparam=pidfile=FILE\fP +command\-line option when starting the daemon. +.IP +.IP "\fBport\fP" +You can override the default port the daemon will listen on +by specifying this value (defaults to 873). This is ignored if the daemon +is being run by inetd, and is superseded by the \fB\-\-port\fP command\-line option. +.IP +.IP "\fBaddress\fP" +You can override the default IP address the daemon +will listen on by specifying this value. This is ignored if the daemon is +being run by inetd, and is superseded by the \fB\-\-address\fP command\-line option. +.IP +.IP "\fBsocket options\fP" +This parameter can provide endless fun for people +who like to tune their systems to the utmost degree. You can set all +sorts of socket options which may make transfers faster (or +slower!). Read the man page for the +\f(CWsetsockopt()\fP +system call for +details on some of the options you may be able to set. By default no +special socket options are set. These settings can also be specified +via the \fB\-\-sockopts\fP command\-line option. +.IP +.IP "\fBlisten backlog\fP" +You can override the default backlog value when the +daemon listens for connections. It defaults to 5. +.IP +.SH "MODULE PARAMETERS" + +.PP +After the global parameters you should define a number of modules, each +module exports a directory tree as a symbolic name. Modules are +exported by specifying a module name in square brackets [module] +followed by the parameters for that module. +The module name cannot contain a slash or a closing square bracket. If the +name contains whitespace, each internal sequence of whitespace will be +changed into a single space, while leading or trailing whitespace will be +discarded. +Also, the name cannot be \(dq\&global\(dq\& as that exact name indicates that +global parameters follow (see above). +.PP +As with GLOBAL PARAMETERS, you may use references to environment variables in +the values of parameters. See the GLOBAL PARAMETERS section for more details. +.PP +.IP "\fBcomment\fP" +This parameter specifies a description string +that is displayed next to the module name when clients obtain a list +of available modules. The default is no comment. +.IP +.IP "\fBpath\fP" +This parameter specifies the directory in the daemon\(cq\&s +filesystem to make available in this module. You must specify this parameter +for each module in \f(CWrsyncd.conf\fP. +.IP +You may base the path\(cq\&s value off of an environment variable by surrounding +the variable name with percent signs. You can even reference a variable +that is set by rsync when the user connects. +For example, this would use the authorizing user\(cq\&s name in the path: +.IP +.nf + path = /home/%RSYNC_USER_NAME% +.fi + +.IP +It is fine if the path includes internal spaces \-\- they will be retained +verbatim (which means that you shouldn\(cq\&t try to escape them). If your final +directory has a trailing space (and this is somehow not something you wish to +fix), append a trailing slash to the path to avoid losing the trailing +whitespace. +.IP +.IP "\fBuse chroot\fP" +If \(dq\&use chroot\(dq\& is true, the rsync daemon will chroot +to the \(dq\&path\(dq\& before starting the file transfer with the client. This has +the advantage of extra protection against possible implementation security +holes, but it has the disadvantages of requiring super\-user privileges, +of not being able to follow symbolic links that are either absolute or outside +of the new root path, and of complicating the preservation of users and groups +by name (see below). +.IP +As an additional safety feature, you can specify a dot\-dir in the module\(cq\&s +\(dq\&path\(dq\& to indicate the point where the chroot should occur. This allows rsync +to run in a chroot with a non\-\(dq\&/\(dq\& path for the top of the transfer hierarchy. +Doing this guards against unintended library loading (since those absolute +paths will not be inside the transfer hierarchy unless you have used an unwise +pathname), and lets you setup libraries for the chroot that are outside of the +transfer. For example, specifying \(dq\&/var/rsync/./module1\(dq\& will chroot to the +\(dq\&/var/rsync\(dq\& directory and set the inside\-chroot path to \(dq\&/module1\(dq\&. If you +had omitted the dot\-dir, the chroot would have used the whole path, and the +inside\-chroot path would have been \(dq\&/\(dq\&. +.IP +When \(dq\&use chroot\(dq\& is false or the inside\-chroot path is not \(dq\&/\(dq\&, rsync will: +(1) munge symlinks by +default for security reasons (see \(dq\&munge symlinks\(dq\& for a way to turn this +off, but only if you trust your users), (2) substitute leading slashes in +absolute paths with the module\(cq\&s path (so that options such as +\fB\-\-backup\-dir\fP, \fB\-\-compare\-dest\fP, etc. interpret an absolute path as +rooted in the module\(cq\&s \(dq\&path\(dq\& dir), and (3) trim \(dq\&..\(dq\& path elements from +args if rsync believes they would escape the module hierarchy. +The default for \(dq\&use chroot\(dq\& is true, and is the safer choice (especially +if the module is not read\-only). +.IP +When this parameter is enabled, the \(dq\&numeric\-ids\(dq\& option will also default to +being enabled (disabling name lookups). See below for what a chroot needs in +order for name lookups to succeed. +.IP +If you copy library resources into the module\(cq\&s chroot area, you +should protect them through your OS\(cq\&s normal user/group or ACL settings (to +prevent the rsync module\(cq\&s user from being able to change them), and then +hide them from the user\(cq\&s view via \(dq\&exclude\(dq\& (see how in the discussion of +that parameter). At that point it will be safe to enable the mapping of users +and groups by name using this \(dq\&numeric ids\(dq\& daemon parameter. +.IP +Note also that you are free to setup custom user/group information in the +chroot area that is different from your normal system. For example, you +could abbreviate the list of users and groups. +.IP +.IP "\fBnumeric ids\fP" +Enabling this parameter disables the mapping +of users and groups by name for the current daemon module. This prevents +the daemon from trying to load any user/group\-related files or libraries. +This enabling makes the transfer behave as if the client had passed +the \fB\-\-numeric\-ids\fP command\-line option. By default, this parameter is +enabled for chroot modules and disabled for non\-chroot modules. +Also keep in mind that uid/gid preservation requires the module to be +running as root (see \(dq\&uid\(dq\&) or for \(dq\&fake super\(dq\& to be configured. +.IP +A chroot\-enabled module should not have this parameter enabled unless you\(cq\&ve +taken steps to ensure that the module has the necessary resources it needs +to translate names, and that it is not possible for a user to change those +resources. That includes being the code being able to call functions like +\f(CWgetpwuid()\fP +, +\f(CWgetgrgid()\fP +, +\f(CWgetpwname()\fP +, and +\f(CWgetgrnam()\fP +). +You should test what libraries and config files are required for your OS +and get those setup before starting to test name mapping in rsync. +.IP +.IP "\fBmunge symlinks\fP" +This parameter tells rsync to modify +all symlinks in the same way as the (non\-daemon\-affecting) +\fB\-\-munge\-links\fP command\-line option (using a method described below). +This should help protect your files from user trickery when +your daemon module is writable. The default is disabled when \(dq\&use chroot\(dq\& +is on and the inside\-chroot path is \(dq\&/\(dq\&, otherwise it is enabled. +.IP +If you disable this parameter on a daemon that is not read\-only, there +are tricks that a user can play with uploaded symlinks to access +daemon\-excluded items (if your module has any), and, if \(dq\&use chroot\(dq\& +is off, rsync can even be tricked into showing or changing data that +is outside the module\(cq\&s path (as access\-permissions allow). +.IP +The way rsync disables the use of symlinks is to prefix each one with +the string \(dq\&/rsyncd\-munged/\(dq\&. This prevents the links from being used +as long as that directory does not exist. When this parameter is enabled, +rsync will refuse to run if that path is a directory or a symlink to +a directory. When using the \(dq\&munge symlinks\(dq\& parameter in a chroot area +that has an inside\-chroot path of \(dq\&/\(dq\&, you should add \(dq\&/rsyncd\-munged/\(dq\& +to the exclude setting for the module so that +a user can\(cq\&t try to create it. +.IP +Note: rsync makes no attempt to verify that any pre\-existing symlinks in +the module\(cq\&s hierarchy are as safe as you want them to be (unless, of +course, it just copied in the whole hierarchy). If you setup an rsync +daemon on a new area or locally add symlinks, you can manually protect your +symlinks from being abused by prefixing \(dq\&/rsyncd\-munged/\(dq\& to the start of +every symlink\(cq\&s value. There is a perl script in the support directory +of the source code named \(dq\&munge\-symlinks\(dq\& that can be used to add or remove +this prefix from your symlinks. +.IP +When this parameter is disabled on a writable module and \(dq\&use chroot\(dq\& is off +(or the inside\-chroot path is not \(dq\&/\(dq\&), +incoming symlinks will be modified to drop a leading slash and to remove \(dq\&..\(dq\& +path elements that rsync believes will allow a symlink to escape the module\(cq\&s +hierarchy. There are tricky ways to work around this, though, so you had +better trust your users if you choose this combination of parameters. +.IP +.IP "\fBcharset\fP" +This specifies the name of the character set in which the +module\(cq\&s filenames are stored. If the client uses an \fB\-\-iconv\fP option, +the daemon will use the value of the \(dq\&charset\(dq\& parameter regardless of the +character set the client actually passed. This allows the daemon to +support charset conversion in a chroot module without extra files in the +chroot area, and also ensures that name\-translation is done in a consistent +manner. If the \(dq\&charset\(dq\& parameter is not set, the \fB\-\-iconv\fP option is +refused, just as if \(dq\&iconv\(dq\& had been specified via \(dq\&refuse options\(dq\&. +.IP +If you wish to force users to always use \fB\-\-iconv\fP for a particular +module, add \(dq\&no\-iconv\(dq\& to the \(dq\&refuse options\(dq\& parameter. Keep in mind +that this will restrict access to your module to very new rsync clients. +.IP +.IP "\fBmax connections\fP" +This parameter allows you to +specify the maximum number of simultaneous connections you will allow. +Any clients connecting when the maximum has been reached will receive a +message telling them to try later. The default is 0, which means no limit. +A negative value disables the module. +See also the \(dq\&lock file\(dq\& parameter. +.IP +.IP "\fBlog file\fP" +When the \(dq\&log file\(dq\& parameter is set to a non\-empty +string, the rsync daemon will log messages to the indicated file rather +than using syslog. This is particularly useful on systems (such as AIX) +where +\f(CWsyslog()\fP +doesn\(cq\&t work for chrooted programs. The file is +opened before +\f(CWchroot()\fP +is called, allowing it to be placed outside +the transfer. If this value is set on a per\-module basis instead of +globally, the global log will still contain any authorization failures +or config\-file error messages. +.IP +If the daemon fails to open the specified file, it will fall back to +using syslog and output an error about the failure. (Note that the +failure to open the specified log file used to be a fatal error.) +.IP +This setting can be overridden by using the \fB\-\-log\-file=FILE\fP or +\fB\-\-dparam=logfile=FILE\fP command\-line options. The former overrides +all the log\-file parameters of the daemon and all module settings. +The latter sets the daemon\(cq\&s log file and the default for all the +modules, which still allows modules to override the default setting. +.IP +.IP "\fBsyslog facility\fP" +This parameter allows you to +specify the syslog facility name to use when logging messages from the +rsync daemon. You may use any standard syslog facility name which is +defined on your system. Common names are auth, authpriv, cron, daemon, +ftp, kern, lpr, mail, news, security, syslog, user, uucp, local0, +local1, local2, local3, local4, local5, local6 and local7. The default +is daemon. This setting has no effect if the \(dq\&log file\(dq\& setting is a +non\-empty string (either set in the per\-modules settings, or inherited +from the global settings). +.IP +.IP "\fBmax verbosity\fP" +This parameter allows you to control +the maximum amount of verbose information that you\(cq\&ll allow the daemon to +generate (since the information goes into the log file). The default is 1, +which allows the client to request one level of verbosity. +.IP +This also affects the user\(cq\&s ability to request higher levels of \fB\-\-info\fP and +\fB\-\-debug\fP logging. If the max value is 2, then no info and/or debug value +that is higher than what would be set by \fB\-vv\fP will be honored by the daemon +in its logging. To see how high of a verbosity level you need to accept for a +particular info/debug level, refer to \(dq\&rsync \-\-info=help\(dq\& and \(dq\&rsync \-\-debug=help\(dq\&. +For instance, it takes max\-verbosity 4 to be able to output debug TIME2 and FLIST3. +.IP +.IP "\fBlock file\fP" +This parameter specifies the file to use to +support the \(dq\&max connections\(dq\& parameter. The rsync daemon uses record +locking on this file to ensure that the max connections limit is not +exceeded for the modules sharing the lock file. +The default is \f(CW/var/run/rsyncd.lock\fP. +.IP +.IP "\fBread only\fP" +This parameter determines whether clients +will be able to upload files or not. If \(dq\&read only\(dq\& is true then any +attempted uploads will fail. If \(dq\&read only\(dq\& is false then uploads will +be possible if file permissions on the daemon side allow them. The default +is for all modules to be read only. +.IP +Note that \(dq\&auth users\(dq\& can override this setting on a per\-user basis. +.IP +.IP "\fBwrite only\fP" +This parameter determines whether clients +will be able to download files or not. If \(dq\&write only\(dq\& is true then any +attempted downloads will fail. If \(dq\&write only\(dq\& is false then downloads +will be possible if file permissions on the daemon side allow them. The +default is for this parameter to be disabled. +.IP +.IP "\fBlist\fP" +This parameter determines whether this module is +listed when the client asks for a listing of available modules. In addition, +if this is false, the daemon will pretend the module does not exist +when a client denied by \(dq\&hosts allow\(dq\& or \(dq\&hosts deny\(dq\& attempts to access it. +Realize that if \(dq\&reverse lookup\(dq\& is disabled globally but enabled for the +module, the resulting reverse lookup to a potentially client\-controlled DNS +server may still reveal to the client that it hit an existing module. +The default is for modules to be listable. +.IP +.IP "\fBuid\fP" +This parameter specifies the user name or user ID that +file transfers to and from that module should take place as when the daemon +was run as root. In combination with the \(dq\&gid\(dq\& parameter this determines what +file permissions are available. The default when run by a super\-user is to +switch to the system\(cq\&s \(dq\&nobody\(dq\& user. The default for a non\-super\-user is to +not try to change the user. See also the \(dq\&gid\(dq\& parameter. +.IP +The RSYNC_USER_NAME environment variable may be used to request that rsync run +as the authorizing user. For example, if you want a rsync to run as the same +user that was received for the rsync authentication, this setup is useful: +.IP +.nf + uid = %RSYNC_USER_NAME% + gid = * +.fi + +.IP +.IP "\fBgid\fP" +This parameter specifies one or more group names/IDs that will be +used when accessing the module. The first one will be the default group, and +any extra ones be set as supplemental groups. You may also specify a \(dq\&*\(dq\& as +the first gid in the list, which will be replaced by all the normal groups for +the transfer\(cq\&s user (see \(dq\&uid\(dq\&). The default when run by a super\-user is to +switch to your OS\(cq\&s \(dq\&nobody\(dq\& (or perhaps \(dq\&nogroup\(dq\&) group with no other +supplementary groups. The default for a non\-super\-user is to not change any +group attributes (and indeed, your OS may not allow a non\-super\-user to try to +change their group settings). +.IP +.IP "\fBfake super\fP" +Setting \(dq\&fake super = yes\(dq\& for a module causes the +daemon side to behave as if the \fB\-\-fake\-super\fP command\-line option had +been specified. This allows the full attributes of a file to be stored +without having to have the daemon actually running as root. +.IP +.IP "\fBfilter\fP" +The daemon has its own filter chain that determines what files +it will let the client access. This chain is not sent to the client and is +independent of any filters the client may have specified. Files excluded by +the daemon filter chain (\fBdaemon\-excluded\fP files) are treated as non\-existent +if the client tries to pull them, are skipped with an error message if the +client tries to push them (triggering exit code 23), and are never deleted from +the module. You can use daemon filters to prevent clients from downloading or +tampering with private administrative files, such as files you may add to +support uid/gid name translations. +.IP +The daemon filter chain is built from the \(dq\&filter\(dq\&, \(dq\&include from\(dq\&, \(dq\&include\(dq\&, +\(dq\&exclude from\(dq\&, and \(dq\&exclude\(dq\& parameters, in that order of priority. Anchored +patterns are anchored at the root of the module. To prevent access to an +entire subtree, for example, \(dq\&/secret\(dq\&, you \fImust\fP exclude everything in the +subtree; the easiest way to do this is with a triple\-star pattern like +\(dq\&/secret/***\(dq\&. +.IP +The \(dq\&filter\(dq\& parameter takes a space\-separated list of daemon filter rules, +though it is smart enough to know not to split a token at an internal space in +a rule (e.g. \(dq\&\- /foo \- /bar\(dq\& is parsed as two rules). You may specify one or +more merge\-file rules using the normal syntax. Only one \(dq\&filter\(dq\& parameter can +apply to a given module in the config file, so put all the rules you want in a +single parameter. Note that per\-directory merge\-file rules do not provide as +much protection as global rules, but they can be used to make \fB\-\-delete\fP work +better during a client download operation if the per\-dir merge files are +included in the transfer and the client requests that they be used. +.IP +.IP "\fBexclude\fP" +This parameter takes a space\-separated list of daemon +exclude patterns. As with the client \fB\-\-exclude\fP option, patterns can be +qualified with \(dq\&\- \(dq\& or \(dq\&+ \(dq\& to explicitly indicate exclude/include. Only one +\(dq\&exclude\(dq\& parameter can apply to a given module. See the \(dq\&filter\(dq\& parameter +for a description of how excluded files affect the daemon. +.IP +.IP "\fBinclude\fP" +Use an \(dq\&include\(dq\& to override the effects of the \(dq\&exclude\(dq\& +parameter. Only one \(dq\&include\(dq\& parameter can apply to a given module. See the +\(dq\&filter\(dq\& parameter for a description of how excluded files affect the daemon. +.IP +.IP "\fBexclude from\fP" +This parameter specifies the name of a file +on the daemon that contains daemon exclude patterns, one per line. Only one +\(dq\&exclude from\(dq\& parameter can apply to a given module; if you have multiple +exclude\-from files, you can specify them as a merge file in the \(dq\&filter\(dq\& +parameter. See the \(dq\&filter\(dq\& parameter for a description of how excluded files +affect the daemon. +.IP +.IP "\fBinclude from\fP" +Analogue of \(dq\&exclude from\(dq\& for a file of daemon include +patterns. Only one \(dq\&include from\(dq\& parameter can apply to a given module. See +the \(dq\&filter\(dq\& parameter for a description of how excluded files affect the +daemon. +.IP +.IP "\fBincoming chmod\fP" +This parameter allows you to specify a set of +comma\-separated chmod strings that will affect the permissions of all +incoming files (files that are being received by the daemon). These +changes happen after all other permission calculations, and this will +even override destination\-default and/or existing permissions when the +client does not specify \fB\-\-perms\fP. +See the description of the \fB\-\-chmod\fP rsync option and the \fBchmod\fP(1) +manpage for information on the format of this string. +.IP +.IP "\fBoutgoing chmod\fP" +This parameter allows you to specify a set of +comma\-separated chmod strings that will affect the permissions of all +outgoing files (files that are being sent out from the daemon). These +changes happen first, making the sent permissions appear to be different +than those stored in the filesystem itself. For instance, you could +disable group write permissions on the server while having it appear to +be on to the clients. +See the description of the \fB\-\-chmod\fP rsync option and the \fBchmod\fP(1) +manpage for information on the format of this string. +.IP +.IP "\fBauth users\fP" +This parameter specifies a comma and/or space\-separated +list of authorization rules. In its simplest form, you list the usernames +that will be allowed to connect to +this module. The usernames do not need to exist on the local +system. The rules may contain shell wildcard characters that will be matched +against the username provided by the client for authentication. If +\(dq\&auth users\(dq\& is set then the client will be challenged to supply a +username and password to connect to the module. A challenge response +authentication protocol is used for this exchange. The plain text +usernames and passwords are stored in the file specified by the +\(dq\&secrets file\(dq\& parameter. The default is for all users to be able to +connect without a password (this is called \(dq\&anonymous rsync\(dq\&). +.IP +In addition to username matching, you can specify groupname matching via a \(cq\&@\(cq\& +prefix. When using groupname matching, the authenticating username must be a +real user on the system, or it will be assumed to be a member of no groups. +For example, specifying \(dq\&@rsync\(dq\& will match the authenticating user if the +named user is a member of the rsync group. +.IP +Finally, options may be specified after a colon (:). The options allow you to +\(dq\&deny\(dq\& a user or a group, set the access to \(dq\&ro\(dq\& (read\-only), or set the access +to \(dq\&rw\(dq\& (read/write). Setting an auth\-rule\-specific ro/rw setting overrides +the module\(cq\&s \(dq\&read only\(dq\& setting. +.IP +Be sure to put the rules in the order you want them to be matched, because the +checking stops at the first matching user or group, and that is the only auth +that is checked. For example: +.IP +.nf + auth users = joe:deny @guest:deny admin:rw @rsync:ro susan joe sam +.fi + +.IP +In the above rule, user joe will be denied access no matter what. Any user +that is in the group \(dq\&guest\(dq\& is also denied access. The user \(dq\&admin\(dq\& gets +access in read/write mode, but only if the admin user is not in group \(dq\&guest\(dq\& +(because the admin user\-matching rule would never be reached if the user is in +group \(dq\&guest\(dq\&). Any other user who is in group \(dq\&rsync\(dq\& will get read\-only +access. Finally, users susan, joe, and sam get the ro/rw setting of the +module, but only if the user didn\(cq\&t match an earlier group\-matching rule. +.IP +See the description of the secrets file for how you can have per\-user passwords +as well as per\-group passwords. It also explains how a user can authenticate +using their user password or (when applicable) a group password, depending on +what rule is being authenticated. +.IP +See also the section entitled \(dq\&USING RSYNC\-DAEMON FEATURES VIA A REMOTE +SHELL CONNECTION\(dq\& in \fBrsync\fP(1) for information on how handle an +rsyncd.conf\-level username that differs from the remote\-shell\-level +username when using a remote shell to connect to an rsync daemon. +.IP +.IP "\fBsecrets file\fP" +This parameter specifies the name of a file that contains +the username:password and/or @groupname:password pairs used for authenticating +this module. This file is only consulted if the \(dq\&auth users\(dq\& parameter is +specified. The file is line\-based and contains one name:password pair per +line. Any line has a hash (#) as the very first character on the line is +considered a comment and is skipped. The passwords can contain any characters +but be warned that many operating systems limit the length of passwords that +can be typed at the client end, so you may find that passwords longer than 8 +characters don\(cq\&t work. +.IP +The use of group\-specific lines are only relevant when the module is being +authorized using a matching \(dq\&@groupname\(dq\& rule. When that happens, the user +can be authorized via either their \(dq\&username:password\(dq\& line or the +\(dq\&@groupname:password\(dq\& line for the group that triggered the authentication. +.IP +It is up to you what kind of password entries you want to include, either +users, groups, or both. The use of group rules in \(dq\&auth users\(dq\& does not +require that you specify a group password if you do not want to use shared +passwords. +.IP +There is no default for the \(dq\&secrets file\(dq\& parameter, you must choose a name +(such as \f(CW/etc/rsyncd.secrets\fP). The file must normally not be readable +by \(dq\&other\(dq\&; see \(dq\&strict modes\(dq\&. If the file is not found or is rejected, no +logins for a \(dq\&user auth\(dq\& module will be possible. +.IP +.IP "\fBstrict modes\fP" +This parameter determines whether or not +the permissions on the secrets file will be checked. If \(dq\&strict modes\(dq\& is +true, then the secrets file must not be readable by any user ID other +than the one that the rsync daemon is running under. If \(dq\&strict modes\(dq\& is +false, the check is not performed. The default is true. This parameter +was added to accommodate rsync running on the Windows operating system. +.IP +.IP "\fBhosts allow\fP" +This parameter allows you to specify a +list of patterns that are matched against a connecting clients +hostname and IP address. If none of the patterns match then the +connection is rejected. +.IP +Each pattern can be in one of five forms: +.IP +.RS +.IP o +a dotted decimal IPv4 address of the form a.b.c.d, or an IPv6 address +of the form a:b:c::d:e:f. In this case the incoming machine\(cq\&s IP address +must match exactly. +.IP o +an address/mask in the form ipaddr/n where ipaddr is the IP address +and n is the number of one bits in the netmask. All IP addresses which +match the masked IP address will be allowed in. +.IP o +an address/mask in the form ipaddr/maskaddr where ipaddr is the +IP address and maskaddr is the netmask in dotted decimal notation for IPv4, +or similar for IPv6, e.g. ffff:ffff:ffff:ffff:: instead of /64. All IP +addresses which match the masked IP address will be allowed in. +.IP o +a hostname pattern using wildcards. If the hostname of the connecting IP +(as determined by a reverse lookup) matches the wildcarded name (using the +same rules as normal unix filename matching), the client is allowed in. This +only works if \(dq\&reverse lookup\(dq\& is enabled (the default). +.IP o +a hostname. A plain hostname is matched against the reverse DNS of the +connecting IP (if \(dq\&reverse lookup\(dq\& is enabled), and/or the IP of the given +hostname is matched against the connecting IP (if \(dq\&forward lookup\(dq\& is +enabled, as it is by default). Any match will be allowed in. +.RE + +.IP +Note IPv6 link\-local addresses can have a scope in the address specification: +.IP +.RS +\f(CW fe80::1%link1\fP +.br +\f(CW fe80::%link1/64\fP +.br +\f(CW fe80::%link1/ffff:ffff:ffff:ffff::\fP +.br +.RE + +.IP +You can also combine \(dq\&hosts allow\(dq\& with a separate \(dq\&hosts deny\(dq\& +parameter. If both parameters are specified then the \(dq\&hosts allow\(dq\& parameter is +checked first and a match results in the client being able to +connect. The \(dq\&hosts deny\(dq\& parameter is then checked and a match means +that the host is rejected. If the host does not match either the +\(dq\&hosts allow\(dq\& or the \(dq\&hosts deny\(dq\& patterns then it is allowed to +connect. +.IP +The default is no \(dq\&hosts allow\(dq\& parameter, which means all hosts can connect. +.IP +.IP "\fBhosts deny\fP" +This parameter allows you to specify a +list of patterns that are matched against a connecting clients +hostname and IP address. If the pattern matches then the connection is +rejected. See the \(dq\&hosts allow\(dq\& parameter for more information. +.IP +The default is no \(dq\&hosts deny\(dq\& parameter, which means all hosts can connect. +.IP +.IP "\fBreverse lookup\fP" +Controls whether the daemon performs a reverse lookup +on the client\(cq\&s IP address to determine its hostname, which is used for +\(dq\&hosts allow\(dq\&/\(dq\&hosts deny\(dq\& checks and the \(dq\&%h\(dq\& log escape. This is enabled by +default, but you may wish to disable it to save time if you know the lookup will +not return a useful result, in which case the daemon will use the name +\(dq\&UNDETERMINED\(dq\& instead. +.IP +If this parameter is enabled globally (even by default), rsync performs the +lookup as soon as a client connects, so disabling it for a module will not +avoid the lookup. Thus, you probably want to disable it globally and then +enable it for modules that need the information. +.IP +.IP "\fBforward lookup\fP" +Controls whether the daemon performs a forward lookup +on any hostname specified in an hosts allow/deny setting. By default this is +enabled, allowing the use of an explicit hostname that would not be returned +by reverse DNS of the connecting IP. +.IP +.IP "\fBignore errors\fP" +This parameter tells rsyncd to +ignore I/O errors on the daemon when deciding whether to run the delete +phase of the transfer. Normally rsync skips the \fB\-\-delete\fP step if any +I/O errors have occurred in order to prevent disastrous deletion due +to a temporary resource shortage or other I/O error. In some cases this +test is counter productive so you can use this parameter to turn off this +behavior. +.IP +.IP "\fBignore nonreadable\fP" +This tells the rsync daemon to completely +ignore files that are not readable by the user. This is useful for +public archives that may have some non\-readable files among the +directories, and the sysadmin doesn\(cq\&t want those files to be seen at all. +.IP +.IP "\fBtransfer logging\fP" +This parameter enables per\-file +logging of downloads and uploads in a format somewhat similar to that +used by ftp daemons. The daemon always logs the transfer at the end, so +if a transfer is aborted, no mention will be made in the log file. +.IP +If you want to customize the log lines, see the \(dq\&log format\(dq\& parameter. +.IP +.IP "\fBlog format\fP" +This parameter allows you to specify the +format used for logging file transfers when transfer logging is enabled. +The format is a text string containing embedded single\-character escape +sequences prefixed with a percent (%) character. An optional numeric +field width may also be specified between the percent and the escape +letter (e.g. \(dq\&\fB%\-50n %8l %07p\fP\(dq\&). +In addition, one or more apostrophes may be specified prior to a numerical +escape to indicate that the numerical value should be made more human\-readable. +The 3 supported levels are the same as for the \fB\-\-human\-readable\fP +command\-line option, though the default is for human\-readability to be off. +Each added apostrophe increases the level (e.g. \(dq\&\fB%'\&'\&l %'\&b %f\fP\(dq\&). +.IP +The default log format is \(dq\&%o %h [%a] %m (%u) %f %l\(dq\&, and a \(dq\&%t [%p] \(dq\& +is always prefixed when using the \(dq\&log file\(dq\& parameter. +(A perl script that will summarize this default log format is included +in the rsync source code distribution in the \(dq\&support\(dq\& subdirectory: +rsyncstats.) +.IP +The single\-character escapes that are understood are as follows: +.IP +.RS +.IP o +%a the remote IP address (only available for a daemon) +.IP o +%b the number of bytes actually transferred +.IP o +%B the permission bits of the file (e.g. rwxrwxrwt) +.IP o +%c the total size of the block checksums received for the basis file (only when sending) +.IP o +%C the full\-file MD5 checksum if \fB\-\-checksum\fP is enabled or a file was transferred (only for protocol 30 or above). +.IP o +%f the filename (long form on sender; no trailing \(dq\&/\(dq\&) +.IP o +%G the gid of the file (decimal) or \(dq\&DEFAULT\(dq\& +.IP o +%h the remote host name (only available for a daemon) +.IP o +%i an itemized list of what is being updated +.IP o +%l the length of the file in bytes +.IP o +%L the string \(dq\& \-> SYMLINK\(dq\&, \(dq\& => HARDLINK\(dq\&, or \(dq\&\(dq\& (where \fBSYMLINK\fP or \fBHARDLINK\fP is a filename) +.IP o +%m the module name +.IP o +%M the last\-modified time of the file +.IP o +%n the filename (short form; trailing \(dq\&/\(dq\& on dir) +.IP o +%o the operation, which is \(dq\&send\(dq\&, \(dq\&recv\(dq\&, or \(dq\&del.\(dq\& (the latter includes the trailing period) +.IP o +%p the process ID of this rsync session +.IP o +%P the module path +.IP o +%t the current date time +.IP o +%u the authenticated username or an empty string +.IP o +%U the uid of the file (decimal) +.RE + +.IP +For a list of what the characters mean that are output by \(dq\&%i\(dq\&, see the +\fB\-\-itemize\-changes\fP option in the rsync manpage. +.IP +Note that some of the logged output changes when talking with older +rsync versions. For instance, deleted files were only output as verbose +messages prior to rsync 2.6.4. +.IP +.IP "\fBtimeout\fP" +This parameter allows you to override the +clients choice for I/O timeout for this module. Using this parameter you +can ensure that rsync won\(cq\&t wait on a dead client forever. The timeout +is specified in seconds. A value of zero means no timeout and is the +default. A good choice for anonymous rsync daemons may be 600 (giving +a 10 minute timeout). +.IP +.IP "\fBrefuse options\fP" +This parameter allows you to +specify a space\-separated list of rsync command line options that will +be refused by your rsync daemon. +You may specify the full option name, its one\-letter abbreviation, or a +wild\-card string that matches multiple options. +For example, this would refuse \fB\-\-checksum\fP (\fB\-c\fP) and all the various +delete options: +.IP +.RS +\f(CW refuse options = c delete\fP +.RE + +.IP +The reason the above refuses all delete options is that the options imply +\fB\-\-delete\fP, and implied options are refused just like explicit options. +As an additional safety feature, the refusal of \(dq\&delete\(dq\& also refuses +\fBremove\-source\-files\fP when the daemon is the sender; if you want the latter +without the former, instead refuse \(dq\&delete\-*\(dq\& \-\- that refuses all the +delete modes without affecting \fB\-\-remove\-source\-files\fP. +.IP +When an option is refused, the daemon prints an error message and exits. +To prevent all compression when serving files, +you can use \(dq\&dont compress = *\(dq\& (see below) +instead of \(dq\&refuse options = compress\(dq\& to avoid returning an error to a +client that requests compression. +.IP +.IP "\fBdont compress\fP" +This parameter allows you to select +filenames based on wildcard patterns that should not be compressed +when pulling files from the daemon (no analogous parameter exists to +govern the pushing of files to a daemon). +Compression is expensive in terms of CPU usage, so it +is usually good to not try to compress files that won\(cq\&t compress well, +such as already compressed files. +.IP +The \(dq\&dont compress\(dq\& parameter takes a space\-separated list of +case\-insensitive wildcard patterns. Any source filename matching one +of the patterns will not be compressed during transfer. +.IP +See the \fB\-\-skip\-compress\fP parameter in the \fBrsync\fP(1) manpage for the list +of file suffixes that are not compressed by default. Specifying a value +for the \(dq\&dont compress\(dq\& parameter changes the default when the daemon is +the sender. +.IP +.IP "\fBpre\-xfer exec\fP, \fBpost\-xfer exec\fP" +You may specify a command to be run +before and/or after the transfer. If the \fBpre\-xfer exec\fP command fails, the +transfer is aborted before it begins. Any output from the script on stdout (up +to several KB) will be displayed to the user when aborting, but is NOT +displayed if the script returns success. Any output from the script on stderr +goes to the daemon\(cq\&s stderr, which is typically discarded (though see +\-\-no\-detatch option for a way to see the stderr output, which can assist with +debugging). +.IP +The following environment variables will be set, though some are +specific to the pre\-xfer or the post\-xfer environment: +.IP +.RS +.IP o +\fBRSYNC_MODULE_NAME\fP: The name of the module being accessed. +.IP o +\fBRSYNC_MODULE_PATH\fP: The path configured for the module. +.IP o +\fBRSYNC_HOST_ADDR\fP: The accessing host\(cq\&s IP address. +.IP o +\fBRSYNC_HOST_NAME\fP: The accessing host\(cq\&s name. +.IP o +\fBRSYNC_USER_NAME\fP: The accessing user\(cq\&s name (empty if no user). +.IP o +\fBRSYNC_PID\fP: A unique number for this transfer. +.IP o +\fBRSYNC_REQUEST\fP: (pre\-xfer only) The module/path info specified +by the user. Note that the user can specify multiple source files, +so the request can be something like \(dq\&mod/path1 mod/path2\(dq\&, etc. +.IP o +\fBRSYNC_ARG#\fP: (pre\-xfer only) The pre\-request arguments are set +in these numbered values. RSYNC_ARG0 is always \(dq\&rsyncd\(dq\&, followed by +the options that were used in RSYNC_ARG1, and so on. There will be a +value of \(dq\&.\(dq\& indicating that the options are done and the path args +are beginning \-\- these contain similar information to RSYNC_REQUEST, +but with values separated and the module name stripped off. +.IP o +\fBRSYNC_EXIT_STATUS\fP: (post\-xfer only) the server side\(cq\&s exit value. +This will be 0 for a successful run, a positive value for an error that the +server generated, or a \-1 if rsync failed to exit properly. Note that an +error that occurs on the client side does not currently get sent to the +server side, so this is not the final exit status for the whole transfer. +.IP o +\fBRSYNC_RAW_STATUS\fP: (post\-xfer only) the raw exit value from +\f(CWwaitpid()\fP +\&. +.RE + +.IP +Even though the commands can be associated with a particular module, they +are run using the permissions of the user that started the daemon (not the +module\(cq\&s uid/gid setting) without any chroot restrictions. +.IP +.SH "CONFIG DIRECTIVES" + +.PP +There are currently two config directives available that allow a config file to +incorporate the contents of other files: \fB&include\fP and \fB&merge\fP. Both +allow a reference to either a file or a directory. They differ in how +segregated the file\(cq\&s contents are considered to be. +.PP +The \fB&include\fP directive treats each file as more distinct, with each one +inheriting the defaults of the parent file, starting the parameter parsing +as globals/defaults, and leaving the defaults unchanged for the parsing of +the rest of the parent file. +.PP +The \fB&merge\fP directive, on the other hand, treats the file\(cq\&s contents as +if it were simply inserted in place of the directive, and thus it can set +parameters in a module started in another file, can affect the defaults for +other files, etc. +.PP +When an \fB&include\fP or \fB&merge\fP directive refers to a directory, it will read +in all the \fB*.conf\fP or \fB*.inc\fP files (respectively) that are contained inside +that directory (without any +recursive scanning), with the files sorted into alpha order. So, if you have a +directory named \(dq\&rsyncd.d\(dq\& with the files \(dq\&foo.conf\(dq\&, \(dq\&bar.conf\(dq\&, and +\(dq\&baz.conf\(dq\& inside it, this directive: +.PP +.nf + &include /path/rsyncd.d +.fi + +.PP +would be the same as this set of directives: +.PP +.nf + &include /path/rsyncd.d/bar.conf + &include /path/rsyncd.d/baz.conf + &include /path/rsyncd.d/foo.conf +.fi + +.PP +except that it adjusts as files are added and removed from the directory. +.PP +The advantage of the \fB&include\fP directive is that you can define one or more +modules in a separate file without worrying about unintended side\-effects +between the self\-contained module files. +.PP +The advantage of the \fB&merge\fP directive is that you can load config snippets +that can be included into multiple module definitions, and you can also set +global values that will affect connections (such as \fBmotd file\fP), or globals +that will affect other include files. +.PP +For example, this is a useful /etc/rsyncd.conf file: +.PP +.nf + port = 873 + log file = /var/log/rsync.log + pid file = /var/lock/rsync.lock + + &merge /etc/rsyncd.d + &include /etc/rsyncd.d +.fi + +.PP +This would merge any /etc/rsyncd.d/*.inc files (for global values that should +stay in effect), and then include any /etc/rsyncd.d/*.conf files (defining +modules without any global\-value cross\-talk). +.PP +.SH "AUTHENTICATION STRENGTH" + +.PP +The authentication protocol used in rsync is a 128 bit MD4 based +challenge response system. This is fairly weak protection, though (with +at least one brute\-force hash\-finding algorithm publicly available), so +if you want really top\-quality security, then I recommend that you run +rsync over ssh. (Yes, a future version of rsync will switch over to a +stronger hashing method.) +.PP +Also note that the rsync daemon protocol does not currently provide any +encryption of the data that is transferred over the connection. Only +authentication is provided. Use ssh as the transport if you want +encryption. +.PP +Future versions of rsync may support SSL for better authentication and +encryption, but that is still being investigated. +.PP +.SH "EXAMPLES" + +.PP +A simple rsyncd.conf file that allow anonymous rsync to a ftp area at +\f(CW/home/ftp\fP would be: +.PP +.nf + +[ftp] + path = /home/ftp + comment = ftp export area + +.fi + +.PP +A more sophisticated example would be: +.PP +.nf + +uid = nobody +gid = nobody +use chroot = yes +max connections = 4 +syslog facility = local5 +pid file = /var/run/rsyncd.pid + +[ftp] + path = /var/ftp/./pub + comment = whole ftp area (approx 6.1 GB) + +[sambaftp] + path = /var/ftp/./pub/samba + comment = Samba ftp area (approx 300 MB) + +[rsyncftp] + path = /var/ftp/./pub/rsync + comment = rsync ftp area (approx 6 MB) + +[sambawww] + path = /public_html/samba + comment = Samba WWW pages (approx 240 MB) + +[cvs] + path = /data/cvs + comment = CVS repository (requires authentication) + auth users = tridge, susan + secrets file = /etc/rsyncd.secrets + +.fi + +.PP +The /etc/rsyncd.secrets file would look something like this: +.PP +.RS +\f(CWtridge:mypass\fP +.br +\f(CWsusan:herpass\fP +.br +.RE + +.PP +.SH "FILES" + +.PP +/etc/rsyncd.conf or rsyncd.conf +.PP +.SH "SEE ALSO" + +.PP +\fBrsync\fP(1) +.PP +.SH "DIAGNOSTICS" + +.PP +.SH "BUGS" + +.PP +Please report bugs! The rsync bug tracking system is online at +http://rsync.samba.org/ +.PP +.SH "VERSION" + +.PP +This man page is current for version 3.1.2 of rsync. +.PP +.SH "CREDITS" + +.PP +rsync is distributed under the GNU General Public License. See the file +COPYING for details. +.PP +The primary ftp site for rsync is +ftp://rsync.samba.org/pub/rsync. +.PP +A WEB site is available at +http://rsync.samba.org/ +.PP +We would be delighted to hear from you if you like this program. +.PP +This program uses the zlib compression library written by Jean\-loup +Gailly and Mark Adler. +.PP +.SH "THANKS" + +.PP +Thanks to Warren Stanley for his original idea and patch for the rsync +daemon. Thanks to Karsten Thygesen for his many suggestions and +documentation! +.PP +.SH "AUTHOR" + +.PP +rsync was written by Andrew Tridgell and Paul Mackerras. +Many people have later contributed to it. +.PP +Mailing lists for support and development are available at +http://lists.samba.org diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo index 9f9f6ac0..69154071 100644 --- a/rsyncd.conf.yo +++ b/rsyncd.conf.yo @@ -1,5 +1,5 @@ mailto(rsync-bugs@samba.org) -manpage(rsyncd.conf)(5)(22 Jun 2014)()() +manpage(rsyncd.conf)(5)(21 Dec 2015)()() manpagename(rsyncd.conf)(configuration file for rsync in daemon mode) manpagesynopsis() @@ -74,6 +74,8 @@ manpagesection(GLOBAL PARAMETERS) The first parameters in the file (before a [module] header) are the global parameters. +Rsync also allows for the use of a "[global]" module name to indicate the +start of one or more global-parameter sections (the name must be lower case). You may also include any module parameters in the global part of the config file in which case the supplied value will override the @@ -136,6 +138,8 @@ The module name cannot contain a slash or a closing square bracket. If the name contains whitespace, each internal sequence of whitespace will be changed into a single space, while leading or trailing whitespace will be discarded. +Also, the name cannot be "global" as that exact name indicates that +global parameters follow (see above). As with GLOBAL PARAMETERS, you may use references to environment variables in the values of parameters. See the GLOBAL PARAMETERS section for more details. @@ -193,22 +197,16 @@ args if rsync believes they would escape the module hierarchy. The default for "use chroot" is true, and is the safer choice (especially if the module is not read-only). -When this parameter is enabled, rsync will not attempt to map users and groups -by name (by default), but instead copy IDs as though bf(--numeric-ids) had -been specified. In order to enable name-mapping, rsync needs to be able to -use the standard library functions for looking up names and IDs (i.e. -code(getpwuid()), code(getgrgid()), code(getpwname()), and code(getgrnam())). -This means the rsync -process in the chroot hierarchy will need to have access to the resources -used by these library functions (traditionally /etc/passwd and -/etc/group, but perhaps additional dynamic libraries as well). +When this parameter is enabled, the "numeric-ids" option will also default to +being enabled (disabling name lookups). See below for what a chroot needs in +order for name lookups to succeed. -If you copy the necessary resources into the module's chroot area, you +If you copy library resources into the module's chroot area, you should protect them through your OS's normal user/group or ACL settings (to prevent the rsync module's user from being able to change them), and then hide them from the user's view via "exclude" (see how in the discussion of that parameter). At that point it will be safe to enable the mapping of users -and groups by name using the "numeric ids" daemon parameter (see below). +and groups by name using this "numeric ids" daemon parameter. Note also that you are free to setup custom user/group information in the chroot area that is different from your normal system. For example, you @@ -220,11 +218,16 @@ the daemon from trying to load any user/group-related files or libraries. This enabling makes the transfer behave as if the client had passed the bf(--numeric-ids) command-line option. By default, this parameter is enabled for chroot modules and disabled for non-chroot modules. +Also keep in mind that uid/gid preservation requires the module to be +running as root (see "uid") or for "fake super" to be configured. A chroot-enabled module should not have this parameter enabled unless you've taken steps to ensure that the module has the necessary resources it needs to translate names, and that it is not possible for a user to change those -resources. +resources. That includes being the code being able to call functions like +code(getpwuid()), code(getgrgid()), code(getpwname()), and code(getgrnam())). +You should test what libraries and config files are required for your OS +and get those setup before starting to test name mapping in rsync. dit(bf(munge symlinks)) This parameter tells rsync to modify all symlinks in the same way as the (non-daemon-affecting) @@ -901,7 +904,7 @@ url(http://rsync.samba.org/)(http://rsync.samba.org/) manpagesection(VERSION) -This man page is current for version 3.1.1 of rsync. +This man page is current for version 3.1.2 of rsync. manpagesection(CREDITS) @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -143,11 +143,12 @@ void successful_send(int ndx) goto failed; } - if (st.st_size != F_LENGTH(file) || st.st_mtime != file->modtime + if (S_ISREG(file->mode) /* Symlinks & devices don't need this check: */ + && (st.st_size != F_LENGTH(file) || st.st_mtime != file->modtime #ifdef ST_MTIME_NSEC || (NSEC_BUMP(file) && (uint32)st.ST_MTIME_NSEC != F_MOD_NSEC(file)) #endif - ) { + )) { rprintf(FERROR_XFER, "ERROR: Skipping sender remove for changed file: %s\n", fname); return; } @@ -319,8 +320,7 @@ void send_files(int f_in, int f_out) stats.xferred_files++; stats.total_transferred_size += F_LENGTH(file); - if (!log_before_transfer) - remember_initial_stats(); + remember_initial_stats(); if (!do_xfers) { /* log the transfer */ log_item(FCLIENT, file, iflags, NULL); @@ -3,7 +3,7 @@ * * Copyright (C) 1992-2001 Andrew Tridgell <tridge@samba.org> * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -161,7 +161,7 @@ int try_bind_local(int s, int ai_family, int ai_socktype, } /* connect() timeout handler based on alarm() */ -static RETSIGTYPE contimeout_handler(UNUSED(int val)) +static void contimeout_handler(UNUSED(int val)) { connect_timeout = -1; } @@ -529,7 +529,7 @@ int is_a_socket(int fd) } -static RETSIGTYPE sigchld_handler(UNUSED(int val)) +static void sigchld_handler(UNUSED(int val)) { #ifdef WNOHANG while (waitpid(-1, NULL, WNOHANG) > 0) {} diff --git a/support/rrsync b/support/rrsync index 5d2b8ae0..9195aa2f 100644 --- a/support/rrsync +++ b/support/rrsync @@ -15,11 +15,21 @@ use constant RSYNC => '/usr/bin/rsync'; use constant LOGFILE => 'rrsync.log'; my $Usage = <<EOM; -Use 'command="$0 [-ro] SUBDIR"' +Use 'command="$0 [-ro|-wo] SUBDIR"' in front of lines in $ENV{HOME}/.ssh/authorized_keys EOM -our $ro = (@ARGV && $ARGV[0] eq '-ro') ? shift : ''; # -ro = Read-Only +# Handle the -ro and -wo options. +our $only = ''; +while (@ARGV && $ARGV[0] =~ /^-([rw])o$/) { + my $r_or_w = $1; + if ($only && $only ne $r_or_w) { + die "$0: the -ro and -wo options conflict.\n"; + } + $only = $r_or_w; + shift; +} + our $subdir = shift; die "$0: No subdirectory specified\n$Usage" unless defined $subdir; $subdir = abs_path($subdir); @@ -41,7 +51,8 @@ die "$0: Not invoked via sshd\n$Usage" unless defined $command; die "$0: SSH_ORIGINAL_COMMAND='$command' is not rsync\n" unless $command =~ s/^rsync\s+//; die "$0: --server option is not first\n" unless $command =~ /^--server\s/; our $am_sender = $command =~ /^--server\s+--sender\s/; # Restrictive on purpose! -die "$0 -ro: sending to read-only server not allowed\n" if $ro && !$am_sender; +die "$0 sending to read-only server not allowed\n" if $only eq 'r' && !$am_sender; +die "$0 reading from write-only server not allowed\n" if $only eq 'w' && $am_sender; ### START of options data produced by the cull_options script. ### @@ -116,8 +127,8 @@ our %long_opt = ( 'perms' => 0, 'preallocate' => 0, 'recursive' => 0, - 'remove-sent-files' => $ro ? -1 : 0, - 'remove-source-files' => $ro ? -1 : 0, + 'remove-sent-files' => $only eq 'r' ? -1 : 0, + 'remove-source-files' => $only eq 'r' ? -1 : 0, 'safe-links' => 0, 'sender' => 0, 'server' => 0, @@ -4,7 +4,7 @@ * * Copyright (C) 1998 Andrew Tridgell * Copyright (C) 2002 Martin Pool - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3,7 +3,7 @@ * functions, so that module test harnesses can run standalone. * * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -2,7 +2,7 @@ * Test harness for unsafe_symlink(). Not linked into rsync itself. * * Copyright (C) 2002 Martin Pool - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/testsuite/chgrp.test b/testsuite/chgrp.test index 0c1f05c2..8cd6c107 100644 --- a/testsuite/chgrp.test +++ b/testsuite/chgrp.test @@ -13,14 +13,14 @@ # Build some hardlinks -mygrps="`rsync_getgroups`" || fail "Can't get groups" +mygrps="`rsync_getgroups`" || test_fail "Can't get groups" mkdir "$fromdir" for g in $mygrps do name="$fromdir/foo-$g" date > "$name" - chgrp "$g" "$name" || fail "Can't chgrp" + chgrp "$g" "$name" || test_fail "Can't chgrp" done sleep 2 diff --git a/testsuite/duplicates.test b/testsuite/duplicates.test index 3b4ebab0..e64b8083 100644 --- a/testsuite/duplicates.test +++ b/testsuite/duplicates.test @@ -27,7 +27,7 @@ mkdir "$fromdir" name1="$fromdir/name1" name2="$fromdir/name2" echo "This is the file" > "$name1" -ln -s "$name1" "$name2" || fail "can't create symlink" +ln -s "$name1" "$name2" || test_fail "can't create symlink" outfile="$scratchdir/rsync.out" diff --git a/testsuite/hardlinks.test b/testsuite/hardlinks.test index c7c5314e..740d725f 100644 --- a/testsuite/hardlinks.test +++ b/testsuite/hardlinks.test @@ -29,8 +29,8 @@ name3="$fromdir/name3" name4="$fromdir/name4" echo "This is the file" > "$name1" ln "$name1" "$name2" || test_skipped "Can't create hardlink" -ln "$name2" "$name3" || fail "Can't create hardlink" -cp "$name2" "$name4" || fail "Can't copy file" +ln "$name2" "$name3" || test_fail "Can't create hardlink" +cp "$name2" "$name4" || test_fail "Can't copy file" cat $srcdir/*.c >"$fromdir/text" checkit "$RSYNC -aHivv --debug=HLINK5 '$fromdir/' '$todir/'" "$fromdir" "$todir" @@ -67,7 +67,7 @@ checkit "$RSYNC -aHivv --debug=HLINK5 --copy-dest='$todir' '$fromdir/' '$chkdir/ # Create a hard link that has only one part in the hierarchy. echo "This is another file" >"$fromdir/solo" -ln "$fromdir/solo" "$chkdir/solo" || fail "Can't create hardlink" +ln "$fromdir/solo" "$chkdir/solo" || test_fail "Can't create hardlink" # Make sure that the checksum data doesn't slide due to an HLINK_BUMP() change. $RSYNC -aHivc --debug=HLINK5 "$fromdir/" "$chkdir/" | tee "$outfile" diff --git a/testsuite/relative.test b/testsuite/relative.test index 4d578ed1..686399e4 100644 --- a/testsuite/relative.test +++ b/testsuite/relative.test @@ -33,6 +33,8 @@ runtest "basic relative" 'checkit "$RSYNC -avR ./$deepstr \"$todir\"" "$chkdir" ln $deepstr/filelist $deepstr/dir ln ../chk/$deepstr/filelist ../chk/$deepstr/dir +# Work around time rounding/truncating issue by touching both dirs. +touch -r $deepstr/dir $deepstr/dir ../chk/$deepstr/dir runtest "hard links" 'checkit "$RSYNC -avHR ./$deepstr/ \"$todir\"" "$chkdir" "$todir"' cp "$deepdir/text" "$todir/$deepstr/ThisShouldGo" @@ -2,7 +2,7 @@ * Trivial ls for comparing two directories after running an rsync. * * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/trimslash.c b/trimslash.c index 8ee4766f..207eaf2e 100644 --- a/trimslash.c +++ b/trimslash.c @@ -2,7 +2,7 @@ * Simple utility used only by the test harness. * * Copyright (C) 2002 Martin Pool - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2004-2014 Wayne Davison + * Copyright (C) 2004-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -524,25 +524,49 @@ void parse_name_map(char *map, BOOL usernames) } #ifdef HAVE_GETGROUPLIST -const char *getallgroups(uid_t uid, gid_t *gid_list, int *size_ptr) +const char *getallgroups(uid_t uid, item_list *gid_list) { struct passwd *pw; + gid_t *gid_array; + int size; + if ((pw = getpwuid(uid)) == NULL) return "getpwuid failed"; + + gid_list->count = 0; /* We're overwriting any items in the list */ + EXPAND_ITEM_LIST(gid_list, gid_t, 32); + size = gid_list->malloced; + /* Get all the process's groups, with the pw_gid group first. */ - if (getgrouplist(pw->pw_name, pw->pw_gid, gid_list, size_ptr) < 0) - return "getgrouplist failed"; + if (getgrouplist(pw->pw_name, pw->pw_gid, gid_list->items, &size) < 0) { + if (size > (int)gid_list->malloced) { + gid_list->count = gid_list->malloced; + EXPAND_ITEM_LIST(gid_list, gid_t, size); + if (getgrouplist(pw->pw_name, pw->pw_gid, gid_list->items, &size) < 0) + size = -1; + } else + size = -1; + if (size < 0) + return "getgrouplist failed"; + } + gid_list->count = size; + gid_array = gid_list->items; + /* Paranoia: is the default group not first in the list? */ - if (gid_list[0] != pw->pw_gid) { + if (gid_array[0] != pw->pw_gid) { int j; - for (j = 0; j < *size_ptr; j++) { - if (gid_list[j] == pw->pw_gid) { - gid_list[j] = gid_list[0]; - gid_list[0] = pw->pw_gid; + for (j = 1; j < size; j++) { + if (gid_array[j] == pw->pw_gid) break; - } } + if (j == size) { /* The default group wasn't found! */ + EXPAND_ITEM_LIST(gid_list, gid_t, size+1); + gid_array = gid_list->items; + } + gid_array[j] = gid_array[0]; + gid_array[0] = pw->pw_gid; } + return NULL; } #endif @@ -4,7 +4,7 @@ * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -190,7 +190,7 @@ int make_path(char *fname, int flags) if (flags & MKP_DROP_NAME) { end = strrchr(fname, '/'); - if (!end) + if (!end || end == fname) return 0; *end = '\0'; } else @@ -210,8 +210,10 @@ int make_path(char *fname, int flags) ret++; break; } + if (errno != ENOENT) { - if (errno != EEXIST) + STRUCT_STAT st; + if (errno != EEXIST || (do_stat(fname, &st) == 0 && !S_ISDIR(st.st_mode))) ret = -ret - 1; break; } @@ -1603,6 +1605,14 @@ int flist_ndx_pop(flist_ndx_list *lp) return ndx; } +/* Make sure there is room for one more item in the item list. If there + * is not, expand the list as indicated by the value of "incr": + * - if incr < 0 then increase the malloced size by -1 * incr + * - if incr >= 0 then either make the malloced size equal to "incr" + * or (if that's not large enough) double the malloced size + * After the size check, the list's count is incremented by 1 and a pointer + * to the "new" list item is returned. + */ void *expand_item_list(item_list *lp, size_t item_size, const char *desc, int incr) { @@ -1613,10 +1623,12 @@ void *expand_item_list(item_list *lp, size_t item_size, if (incr < 0) new_size += -incr; /* increase slowly */ else if (new_size < (size_t)incr) - new_size += incr; - else + new_size = incr; + else if (new_size) new_size *= 2; - if (new_size < lp->malloced) + else + new_size = 1; + if (new_size <= lp->malloced) overflow_exit("expand_item_list"); /* Using _realloc_array() lets us pass the size, not a type. */ new_ptr = _realloc_array(lp->items, item_size, new_size); @@ -4,7 +4,7 @@ * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,6 +35,9 @@ extern int checksum_len; **/ int msleep(int t) { +#ifdef HAVE_USLEEP + usleep(t*1000); +#else int tdiff = 0; struct timeval tval, t1, t2; @@ -48,11 +51,12 @@ int msleep(int t) select(0,NULL,NULL, NULL, &tval); gettimeofday(&t2, NULL); - if (t2.tv_sec < t1.tv_sec) - t1 = t2; /* Time went backwards, so start over. */ tdiff = (t2.tv_sec - t1.tv_sec)*1000 + (t2.tv_usec - t1.tv_usec)/1000; + if (tdiff < 0) + t1 = t2; /* Time went backwards, so start over. */ } +#endif return True; } @@ -1,7 +1,7 @@ /* * Test suite for the wildmatch code. * - * Copyright (C) 2003-2014 Wayne Davison + * Copyright (C) 2003-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3,7 +3,7 @@ * Written by Jay Fenlason, vaguely based on the ACLs patch. * * Copyright (C) 2004 Red Hat, Inc. - * Copyright (C) 2006-2014 Wayne Davison + * Copyright (C) 2006-2015 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by |