]> git.ipfire.org Git - thirdparty/rsync.git/commitdiff
Add compatibility with an unmodified zlib.
authorWayne Davison <wayned@samba.org>
Mon, 21 Nov 2011 17:22:14 +0000 (09:22 -0800)
committerWayne Davison <wayned@samba.org>
Mon, 21 Nov 2011 17:22:14 +0000 (09:22 -0800)
Makefile.in
batch.c
configure.ac
options.c
token.c

index 946a742ac75f0aac70d5f1ebd9d23f915f06f2dd..1b603b5367591cf825dfaff4b35e65d86e9e2c70 100644 (file)
@@ -31,7 +31,7 @@ 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 \
        lib/permstring.o lib/pool_alloc.o lib/sysacls.o lib/sysxattrs.o @LIBOBJS@
-ZLIBOBJ=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
+zlib_OBJS=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
        zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o
 OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
        util.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
@@ -41,7 +41,7 @@ OBJS3=progress.o pipe.o
 DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
 popt_OBJS=popt/findme.o  popt/popt.o  popt/poptconfig.o \
        popt/popthelp.o popt/poptparse.o
-OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) $(ZLIBOBJ) @BUILD_POPT@
+OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
 
 TLS_OBJ = tls.o syscall.o lib/compat.o lib/snprintf.o lib/permstring.o lib/sysxattrs.o @BUILD_POPT@
 
diff --git a/batch.c b/batch.c
index b63f0c54de03ddec3262afabaed9257a9aa98016..78d567dcdae47b820d982bdae4672daea63c98f6 100644 (file)
--- a/batch.c
+++ b/batch.c
@@ -20,7 +20,7 @@
  */
 
 #include "rsync.h"
-#include "zlib/zlib.h"
+#include <zlib.h>
 #include <time.h>
 
 extern int eol_nulls;
index 58aeea0fb087764b73e14185652b90b1c117d62f..9e6b5552de84b4c3ab953a437ca63015ee8754db 100644 (file)
@@ -78,6 +78,9 @@ fi
 AC_ARG_WITH(included-popt,
         AC_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]))
+
 AC_ARG_WITH(protected-args,
         AC_HELP_STRING([--with-protected-args], [make --protected-args option the default]))
 if test x"$with_protected_args" = x"yes"; then
@@ -343,7 +346,8 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.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)
+    popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netinet/ip.h \
+    zlib.h)
 AC_HEADER_MAJOR
 
 AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[
@@ -773,6 +777,25 @@ else
     AC_MSG_RESULT(no)
 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
+    AC_CHECK_LIB(z, deflateParams, , [with_included_zlib=yes])
+fi
+
+AC_MSG_CHECKING([whether to use included zlib])
+if test x"$with_included_zlib" = x"yes"; then
+    AC_MSG_RESULT($srcdir/zlib)
+    BUILD_ZLIB='$(zlib_OBJS)'
+    CFLAGS="$CFLAGS -I$srcdir/zlib"
+else
+    AC_MSG_RESULT(no)
+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)])
@@ -926,6 +949,7 @@ AC_SUBST(OBJ_SAVE)
 AC_SUBST(OBJ_RESTORE)
 AC_SUBST(CC_SHOBJ_FLAG)
 AC_SUBST(BUILD_POPT)
+AC_SUBST(BUILD_ZLIB)
 AC_SUBST(MAKE_MAN)
 
 AC_CHECK_FUNCS(_acl __acl _facl __facl)
index d32376ff76d11133f5a17c38b1b0477876c08b30..e8db07cf515cb0ccf5231db84f2e70288c14ccbf 100644 (file)
--- a/options.c
+++ b/options.c
@@ -22,7 +22,7 @@
 #include "rsync.h"
 #include "itypes.h"
 #include <popt.h>
-#include "zlib/zlib.h"
+#include <zlib.h>
 
 extern int module_id;
 extern int local_server;
diff --git a/token.c b/token.c
index 381d5c1f99e4fcf6824441792d1847a179923d92..7628e2ee585e805a7078979186a8cec22601fbcd 100644 (file)
--- a/token.c
+++ b/token.c
 
 #include "rsync.h"
 #include "itypes.h"
-#include "zlib/zlib.h"
+#include <zlib.h>
+
+#ifndef Z_INSERT_ONLY
+#define Z_INSERT_ONLY Z_SYNC_FLUSH
+#endif
 
 extern int do_compression;
 extern int protocol_version;
@@ -414,14 +418,16 @@ send_deflated_token(int f, int32 token, struct map_struct *buf, OFF_T offset,
                        tx_strm.avail_in = n1;
                        if (protocol_version >= 31) /* Newer protocols avoid a data-duplicating bug */
                                offset += n1;
-                       tx_strm.next_out = (Bytef *) obuf;
-                       tx_strm.avail_out = AVAIL_OUT_SIZE(CHUNK_SIZE);
-                       r = deflate(&tx_strm, Z_INSERT_ONLY);
-                       if (r != Z_OK || tx_strm.avail_in != 0) {
-                               rprintf(FERROR, "deflate on token returned %d (%d bytes left)\n",
-                                       r, tx_strm.avail_in);
-                               exit_cleanup(RERR_STREAMIO);
-                       }
+                       do {
+                               tx_strm.next_out = (Bytef *) obuf;
+                               tx_strm.avail_out = AVAIL_OUT_SIZE(CHUNK_SIZE);
+                               r = deflate(&tx_strm, Z_INSERT_ONLY);
+                               if (r != Z_OK) {
+                                       rprintf(FERROR, "deflate on token returned %d (%d bytes left)\n",
+                                               r, tx_strm.avail_in);
+                                       exit_cleanup(RERR_STREAMIO);
+                               }
+                       } while (tx_strm.avail_in != 0);
                } while (toklen > 0);
        }
 }