commit:     2724e477dbeef81ed5f8ad995e738c776379485c
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Mon Sep  2 07:07:21 2019 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Mon Sep  2 07:07:21 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2724e477

app-arch/libarchive: Fixed build with USE="-zlib"

Thanks-to: Albert W. Hopkins <marduk <AT> letterboxes.org>
Thanks-to: Stephan Hartmann <stha09 <AT> 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 <AT> gentoo.org>

 .../libarchive-3.4.0-without_zlib_build_fix.patch  | 160 +++++++++++++++++++++
 app-arch/libarchive/libarchive-3.4.0.ebuild        |   1 +
 2 files changed, 161 insertions(+)

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 00000000000..e0a3167390f
--- /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 <[email protected]>
+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 6780bc9cabe..47f77c61efd 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

Reply via email to