From 0a8a898fbec5a66b3d1978d4db857a82d623f546 Mon Sep 17 00:00:00 2001 From: Gijs van Tulder Date: Wed, 11 Jan 2012 15:27:06 +0100 Subject: [PATCH] Fix a linker error if zlib is not found. --- ChangeLog | 4 ++++ configure.ac | 7 +++++++ src/ChangeLog | 7 +++++++ src/init.c | 6 ++++++ src/main.c | 4 ++++ src/warc.c | 14 ++++++++++++++ 6 files changed, 42 insertions(+) diff --git a/ChangeLog b/ChangeLog index 39f591fe..a391a786 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-01-09 Gijs van Tulder + + * configure.ac: Always try to use libz, even without SSL. + 2011-12-12 Giuseppe Scrivano * Makefile.am (EXTRA_DIST): Add build-aux/bzr-version-gen. diff --git a/configure.ac b/configure.ac index 360f6c91..647e44e3 100644 --- a/configure.ac +++ b/configure.ac @@ -65,6 +65,9 @@ AC_ARG_WITH(ssl, [[ --without-ssl disable SSL autodetection --with-ssl={gnutls,openssl} specify the SSL backend. GNU TLS is the default.]]) +AC_ARG_WITH(zlib, +[[ --without-zlib disable zlib ]]) + AC_ARG_ENABLE(opie, [ --disable-opie disable support for opie or s/key FTP login], ENABLE_OPIE=$enableval, ENABLE_OPIE=yes) @@ -234,6 +237,10 @@ dnl dnl Checks for libraries. dnl +AS_IF([test x"$with_zlib" != xno], [ + AC_CHECK_LIB(z, compress) +]) + AS_IF([test x"$with_ssl" = xopenssl], [ dnl some versions of openssl use zlib compression AC_CHECK_LIB(z, compress) diff --git a/src/ChangeLog b/src/ChangeLog index e58decb5..141a47d4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-01-09 Gijs van Tulder + + * init.c: Disable WARC compression if zlib is disabled. + * main.c: Do not show the 'no-warc-compression' option if zlib is + disabled. + * warc.c: Do not compress WARC files if zlib is disabled. + 2012-01-09 Sasikantha Babu (tiny change) * connect.c (connect_to_ip): properly formatted ipv6 address display. (socket_family): New function - returns socket family type. diff --git a/src/init.c b/src/init.c index 47fdea06..d2fba82c 100644 --- a/src/init.c +++ b/src/init.c @@ -267,7 +267,9 @@ static const struct { { "waitretry", &opt.waitretry, cmd_time }, { "warccdx", &opt.warc_cdx_enabled, cmd_boolean }, { "warccdxdedup", &opt.warc_cdx_dedup_filename, cmd_file }, +#ifdef HAVE_LIBZ { "warccompression", &opt.warc_compression_enabled, cmd_boolean }, +#endif { "warcdigests", &opt.warc_digests_enabled, cmd_boolean }, { "warcfile", &opt.warc_filename, cmd_file }, { "warcheader", NULL, cmd_spec_warc_header }, @@ -374,7 +376,11 @@ defaults (void) opt.show_all_dns_entries = false; opt.warc_maxsize = 0; /* 1024 * 1024 * 1024; */ +#ifdef HAVE_LIBZ opt.warc_compression_enabled = true; +#else + opt.warc_compression_enabled = false; +#endif opt.warc_digests_enabled = true; opt.warc_cdx_enabled = false; opt.warc_cdx_dedup_filename = NULL; diff --git a/src/main.c b/src/main.c index 28467359..5aa528de 100644 --- a/src/main.c +++ b/src/main.c @@ -289,7 +289,9 @@ static struct cmdline_option option_data[] = { "wait", 'w', OPT_VALUE, "wait", -1 }, { "waitretry", 0, OPT_VALUE, "waitretry", -1 }, { "warc-cdx", 0, OPT_BOOLEAN, "warccdx", -1 }, +#ifdef HAVE_LIBZ { "warc-compression", 0, OPT_BOOLEAN, "warccompression", -1 }, +#endif { "warc-dedup", 0, OPT_VALUE, "warccdxdedup", -1 }, { "warc-digests", 0, OPT_BOOLEAN, "warcdigests", -1 }, { "warc-file", 0, OPT_VALUE, "warcfile", -1 }, @@ -674,8 +676,10 @@ WARC options:\n"), --warc-cdx write CDX index files.\n"), N_("\ --warc-dedup=FILENAME do not store records listed in this CDX file.\n"), +#ifdef HAVE_LIBZ N_("\ --no-warc-compression do not compress WARC files with GZIP.\n"), +#endif N_("\ --no-warc-digests do not calculate SHA1 digests.\n"), N_("\ diff --git a/src/warc.c b/src/warc.c index 680ac997..a3cc8184 100644 --- a/src/warc.c +++ b/src/warc.c @@ -14,7 +14,9 @@ #include #include #include +#ifdef HAVE_LIBZ #include +#endif #ifdef HAVE_LIBUUID #include #endif @@ -42,6 +44,7 @@ static FILE *warc_manifest_fp; /* The current WARC file (or NULL, if WARC is disabled). */ static FILE *warc_current_file; +#ifdef HAVE_LIBZ /* The gzip stream for the current WARC file (or NULL, if WARC or gzip is disabled). */ static gzFile *warc_current_gzfile; @@ -51,6 +54,7 @@ static size_t warc_current_gzfile_offset; /* The uncompressed size (so far) of the current record. */ static size_t warc_current_gzfile_uncompressed_size; +# endif /* This is true until a warc_write_* method fails. */ static bool warc_write_ok; @@ -105,12 +109,14 @@ warc_cmp_sha1_digest (const void *digest1, const void *digest2) static size_t warc_write_buffer (const char *buffer, size_t size) { +#ifdef HAVE_LIBZ if (warc_current_gzfile) { warc_current_gzfile_uncompressed_size += size; return gzwrite (warc_current_gzfile, buffer, size); } else +#endif return fwrite (buffer, 1, size, warc_current_file); } @@ -155,6 +161,7 @@ warc_write_start_record () if (opt.warc_maxsize > 0 && ftell (warc_current_file) >= opt.warc_maxsize) warc_start_new_file (false); +#ifdef HAVE_LIBZ /* Start a GZIP stream, if required. */ if (opt.warc_compression_enabled) { @@ -179,6 +186,7 @@ warc_write_start_record () return false; } } +#endif warc_write_string ("WARC/1.0\r\n"); return warc_write_ok; @@ -247,6 +255,7 @@ warc_write_end_record () { warc_write_buffer ("\r\n\r\n", 4); +#ifdef HAVE_LIBZ /* We start a new gzip stream for each record. */ if (warc_write_ok && warc_current_gzfile) { @@ -325,6 +334,7 @@ warc_write_end_record () fflush (warc_current_file); fseek (warc_current_file, 0, SEEK_END); } +#endif /* HAVE_LIBZ */ return warc_write_ok; } @@ -687,7 +697,11 @@ warc_start_new_file (bool meta) char *new_filename = malloc (base_filename_length + 1 + 5 + 8 + 1); warc_current_filename = new_filename; +#ifdef HAVE_LIBZ char *extension = (opt.warc_compression_enabled ? "warc.gz" : "warc"); +#else + char *extension = "warc"; +#endif /* If max size is enabled, we add a serial number to the file names. */ if (meta)