diff options
author | Lars Wendler <polynomial-c@gentoo.org> | 2019-09-02 09:07:21 +0200 |
---|---|---|
committer | Lars Wendler <polynomial-c@gentoo.org> | 2019-09-02 09:07:21 +0200 |
commit | 2724e477dbeef81ed5f8ad995e738c776379485c (patch) | |
tree | 11c684008a0dec04cc3b9b59a7dcc169fca6526f | |
parent | www-client/seamonkey: Depend on <x11-plugins/enigmail-2.1.0 for now (diff) | |
download | gentoo-2724e477dbeef81ed5f8ad995e738c776379485c.tar.gz gentoo-2724e477dbeef81ed5f8ad995e738c776379485c.tar.bz2 gentoo-2724e477dbeef81ed5f8ad995e738c776379485c.zip |
app-arch/libarchive: Fixed build with USE="-zlib"
Thanks-to: Albert W. Hopkins <marduk@letterboxes.org>
Thanks-to: Stephan Hartmann <stha09@googlemail.com>
Closes: https://bugs.gentoo.org/693202
Package-Manager: Portage-2.3.75, Repoman-2.3.17
Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
-rw-r--r-- | app-arch/libarchive/files/libarchive-3.4.0-without_zlib_build_fix.patch | 160 | ||||
-rw-r--r-- | app-arch/libarchive/libarchive-3.4.0.ebuild | 1 |
2 files changed, 161 insertions, 0 deletions
diff --git a/app-arch/libarchive/files/libarchive-3.4.0-without_zlib_build_fix.patch b/app-arch/libarchive/files/libarchive-3.4.0-without_zlib_build_fix.patch new file mode 100644 index 000000000000..e0a3167390f0 --- /dev/null +++ b/app-arch/libarchive/files/libarchive-3.4.0-without_zlib_build_fix.patch @@ -0,0 +1,160 @@ +From 64333cef68d7bcc67bef6ecf177fbeaa549b9139 Mon Sep 17 00:00:00 2001 +From: Martin Matuska <martin@matuska.org> +Date: Sat, 29 Jun 2019 00:20:58 +0200 +Subject: [PATCH] Unbreak compilation without zlib + +Fixes #1214 +--- + libarchive/archive_read_support_filter_gzip.c | 54 ++++++++++++------- + libarchive/test/test_read_format_raw.c | 4 ++ + 2 files changed, 39 insertions(+), 19 deletions(-) + +diff --git a/libarchive/archive_read_support_filter_gzip.c b/libarchive/archive_read_support_filter_gzip.c +index 458b6f729..9fa9e2b0d 100644 +--- a/libarchive/archive_read_support_filter_gzip.c ++++ b/libarchive/archive_read_support_filter_gzip.c +@@ -131,12 +131,20 @@ archive_read_support_filter_gzip(struct archive *_a) + */ + static ssize_t + peek_at_header(struct archive_read_filter *filter, int *pbits, +- struct private_data *state) ++#ifdef HAVE_ZLIB_H ++ struct private_data *state ++#else ++ void *state ++#endif ++ ) + { + const unsigned char *p; + ssize_t avail, len; + int bits = 0; + int header_flags; ++#ifndef HAVE_ZLIB_H ++ (void)state; /* UNUSED */ ++#endif + + /* Start by looking at the first ten bytes of the header, which + * is all fixed layout. */ +@@ -153,8 +161,10 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, + bits += 3; + header_flags = p[3]; + /* Bytes 4-7 are mod time in little endian. */ ++#ifdef HAVE_ZLIB_H + if (state) + state->mtime = archive_le32dec(p + 4); ++#endif + /* Byte 8 is deflate flags. */ + /* XXXX TODO: return deflate flags back to consume_header for use + in initializing the decompressor. */ +@@ -171,7 +181,9 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, + + /* Null-terminated optional filename. */ + if (header_flags & 8) { ++#ifdef HAVE_ZLIB_H + ssize_t file_start = len; ++#endif + do { + ++len; + if (avail < len) +@@ -181,11 +193,13 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, + return (0); + } while (p[len - 1] != 0); + ++#ifdef HAVE_ZLIB_H + if (state) { + /* Reset the name in case of repeat header reads. */ + free(state->name); + state->name = strdup((const char *)&p[file_start]); + } ++#endif + } + + /* Null-terminated optional comment. */ +@@ -236,24 +250,6 @@ gzip_bidder_bid(struct archive_read_filter_bidder *self, + return (0); + } + +-static int +-gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry) +-{ +- struct private_data *state; +- +- state = (struct private_data *)self->data; +- +- /* A mtime of 0 is considered invalid/missing. */ +- if (state->mtime != 0) +- archive_entry_set_mtime(entry, state->mtime, 0); +- +- /* If the name is available, extract it. */ +- if (state->name) +- archive_entry_set_pathname(entry, state->name); +- +- return (ARCHIVE_OK); +-} +- + #ifndef HAVE_ZLIB_H + + /* +@@ -277,6 +273,24 @@ gzip_bidder_init(struct archive_read_filter *self) + + #else + ++static int ++gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry) ++{ ++ struct private_data *state; ++ ++ state = (struct private_data *)self->data; ++ ++ /* A mtime of 0 is considered invalid/missing. */ ++ if (state->mtime != 0) ++ archive_entry_set_mtime(entry, state->mtime, 0); ++ ++ /* If the name is available, extract it. */ ++ if (state->name) ++ archive_entry_set_pathname(entry, state->name); ++ ++ return (ARCHIVE_OK); ++} ++ + /* + * Initialize the filter object. + */ +@@ -306,7 +320,9 @@ gzip_bidder_init(struct archive_read_filter *self) + self->read = gzip_filter_read; + self->skip = NULL; /* not supported */ + self->close = gzip_filter_close; ++#ifdef HAVE_ZLIB_H + self->read_header = gzip_read_header; ++#endif + + state->in_stream = 0; /* We're not actually within a stream yet. */ + +diff --git a/libarchive/test/test_read_format_raw.c b/libarchive/test/test_read_format_raw.c +index 0dac8bfba..3961723b4 100644 +--- a/libarchive/test/test_read_format_raw.c ++++ b/libarchive/test/test_read_format_raw.c +@@ -36,7 +36,9 @@ DEFINE_TEST(test_read_format_raw) + const char *reffile1 = "test_read_format_raw.data"; + const char *reffile2 = "test_read_format_raw.data.Z"; + const char *reffile3 = "test_read_format_raw.bufr"; ++#ifdef HAVE_ZLIB_H + const char *reffile4 = "test_read_format_raw.data.gz"; ++#endif + + /* First, try pulling data out of an uninterpretable file. */ + extract_reference_file(reffile1); +@@ -119,6 +121,7 @@ DEFINE_TEST(test_read_format_raw) + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); + ++#ifdef HAVE_ZLIB_H + /* Fourth, try with gzip which has metadata. */ + extract_reference_file(reffile4); + assert((a = archive_read_new()) != NULL); +@@ -144,4 +147,5 @@ DEFINE_TEST(test_read_format_raw) + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); ++#endif + } diff --git a/app-arch/libarchive/libarchive-3.4.0.ebuild b/app-arch/libarchive/libarchive-3.4.0.ebuild index 6780bc9cabe1..47f77c61efdd 100644 --- a/app-arch/libarchive/libarchive-3.4.0.ebuild +++ b/app-arch/libarchive/libarchive-3.4.0.ebuild @@ -38,6 +38,7 @@ DEPEND="${RDEPEND} PATCHES=( "${FILESDIR}"/${PN}-3.3.3-libressl.patch + "${FILESDIR}"/${P}-without_zlib_build_fix.patch #693202 ) # Various test problems, starting with the fact that sandbox |