summaryrefslogtreecommitdiff
path: root/staging/libarchive
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-01-03 23:14:43 +0000
committerroot <root@rshg054.dnsready.net>2012-01-03 23:14:43 +0000
commitd1d68784dc66793601c239fa64cc0e02ebd9444e (patch)
tree15179b96ec3e632fad3cc528115d83c0fe47e5bd /staging/libarchive
parent48c96871761a4aad193d814e87ddb87c322e17d2 (diff)
Tue Jan 3 23:14:42 UTC 2012
Diffstat (limited to 'staging/libarchive')
-rw-r--r--staging/libarchive/PKGBUILD36
-rw-r--r--staging/libarchive/release-2.8-fixes.patch234
2 files changed, 270 insertions, 0 deletions
diff --git a/staging/libarchive/PKGBUILD b/staging/libarchive/PKGBUILD
new file mode 100644
index 000000000..ace8bb47e
--- /dev/null
+++ b/staging/libarchive/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 145831 2012-01-02 19:21:38Z dreisner $
+# Maintainer: Dan McGee <dan@archlinux.org>
+pkgname=libarchive
+pkgver=3.0.2
+pkgrel=1
+pkgdesc="library that can create and read several streaming archive formats"
+arch=('i686' 'x86_64')
+url="http://libarchive.googlecode.com/"
+license=('BSD')
+depends=('zlib' 'bzip2' 'xz>=5.0.0' 'acl' 'openssl>=1.0.0' 'expat')
+source=("http://libarchive.googlecode.com/files/libarchive-${pkgver}.tar.gz")
+md5sums=('4df33cb107c9702c80473e0794ddf833')
+sha256sums=('b27a10182f4fc3f69d01419a59ddb16fccf5df8c4b166008c04f41905e29fd74')
+
+# keep an upgrade path for older installations
+PKGEXT='.pkg.tar.gz'
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+ ./configure --prefix=/usr --without-xml2
+ make
+}
+
+check() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ # currently fails in a minor test involving atime updates (#60)
+ make check || :
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
+
+ install -D -m644 COPYING "$pkgdir"/usr/share/licenses/libarchive/COPYING
+}
diff --git a/staging/libarchive/release-2.8-fixes.patch b/staging/libarchive/release-2.8-fixes.patch
new file mode 100644
index 000000000..c21eeaa7b
--- /dev/null
+++ b/staging/libarchive/release-2.8-fixes.patch
@@ -0,0 +1,234 @@
+Index: build/cmake/config.h.in
+===================================================================
+--- build/cmake/config.h.in (revision 3670)
++++ build/cmake/config.h.in (revision 3737)
+@@ -1,5 +1,8 @@
+ /* config.h. Generated from config.h.cmake by cmake configure */
+
++/* Define ZLIB_WINAPI if zlib was built on Visual Studio. */
++#cmakedefine ZLIB_WINAPI 1
++
+ /* MD5 via ARCHIVE_HASH_MD5_LIBC supported. */
+ #cmakedefine ARCHIVE_HASH_MD5_LIBC
+
+Index: libarchive/archive_read_support_format_all.c
+===================================================================
+--- libarchive/archive_read_support_format_all.c (revision 3670)
++++ libarchive/archive_read_support_format_all.c (revision 3737)
+@@ -1,5 +1,5 @@
+ /*-
+- * Copyright (c) 2003-2007 Tim Kientzle
++ * Copyright (c) 2003-2011 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+@@ -39,5 +39,13 @@
+ archive_read_support_format_tar(a);
+ archive_read_support_format_xar(a);
+ archive_read_support_format_zip(a);
++
++ /* Note: We always return ARCHIVE_OK here, even if some of the
++ * above return ARCHIVE_WARN. The intent here is to enable
++ * "as much as possible." Clients who need specific
++ * compression should enable those individually so they can
++ * verify the level of support. */
++ /* Clear any warning messages set by the above functions. */
++ archive_clear_error(a);
+ return (ARCHIVE_OK);
+ }
+Index: libarchive/archive_write_disk.c
+===================================================================
+--- libarchive/archive_write_disk.c (revision 3670)
++++ libarchive/archive_write_disk.c (revision 3737)
+@@ -1513,6 +1513,22 @@
+ }
+
+ #if defined(_WIN32) || defined(__CYGWIN__)
++static int
++guidword(const char *p, int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++) {
++ if ((*p >= '0' && *p <= '9') ||
++ (*p >= 'a' && *p <= 'f') ||
++ (*p >= 'A' && *p <= 'F'))
++ p++;
++ else
++ return (-1);
++ }
++ return (0);
++}
++
+ /*
+ * 1. Convert a path separator from '\' to '/' .
+ * We shouldn't check multi-byte character directly because some
+@@ -1521,26 +1537,92 @@
+ * 2. Replace unusable characters in Windows with underscore('_').
+ * See also : http://msdn.microsoft.com/en-us/library/aa365247.aspx
+ */
+-static void
++static int
+ cleanup_pathname_win(struct archive_write_disk *a)
+ {
+ wchar_t wc;
+ char *p;
+ size_t alen, l;
+
+- alen = 0;
+- l = 0;
+- for (p = a->name; *p != '\0'; p++) {
+- ++alen;
+- if (*p == '\\')
+- l = 1;
++ p = a->name;
++ /* Skip leading "\\.\" or "\\?\" or "\\?\UNC\" or
++ * "\\?\Volume{GUID}\"
++ * (absolute path prefixes used by Windows API) */
++ if ((p[0] == '\\' || p[0] == '/') && (p[1] == '\\' || p[1] == '/' ) &&
++ (p[2] == '.' || p[2] == '?') && (p[3] == '\\' || p[3] == '/'))
++ {
++ /* A path begin with "\\?\UNC\" */
++ if (p[2] == '?' &&
++ (p[4] == 'U' || p[4] == 'u') &&
++ (p[5] == 'N' || p[5] == 'n') &&
++ (p[6] == 'C' || p[6] == 'c') &&
++ (p[7] == '\\' || p[7] == '/'))
++ p += 8;
++ /* A path begin with "\\?\Volume{GUID}\" */
++ else if (p[2] == '?' &&
++ (p[4] == 'V' || p[4] == 'v') &&
++ (p[5] == 'O' || p[5] == 'o') &&
++ (p[6] == 'L' || p[6] == 'l') &&
++ (p[7] == 'U' || p[7] == 'u') &&
++ (p[8] == 'M' || p[8] == 'm') &&
++ (p[9] == 'E' || p[9] == 'e') &&
++ p[10] == '{') {
++ if (guidword(p+11, 8) == 0 && p[19] == '-' &&
++ guidword(p+20, 4) == 0 && p[24] == '-' &&
++ guidword(p+25, 4) == 0 && p[29] == '-' &&
++ guidword(p+30, 4) == 0 && p[34] == '-' &&
++ guidword(p+35, 12) == 0 && p[47] == '}' &&
++ (p[48] == '\\' || p[48] == '/'))
++ p += 49;
++ else
++ p += 4;
++ /* A path begin with "\\.\PhysicalDriveX" */
++ } else if (p[2] == '.' &&
++ (p[4] == 'P' || p[4] == 'p') &&
++ (p[5] == 'H' || p[5] == 'h') &&
++ (p[6] == 'Y' || p[6] == 'y') &&
++ (p[7] == 'S' || p[7] == 's') &&
++ (p[8] == 'I' || p[8] == 'i') &&
++ (p[9] == 'C' || p[9] == 'c') &&
++ (p[9] == 'A' || p[9] == 'a') &&
++ (p[9] == 'L' || p[9] == 'l') &&
++ (p[9] == 'D' || p[9] == 'd') &&
++ (p[9] == 'R' || p[9] == 'r') &&
++ (p[9] == 'I' || p[9] == 'i') &&
++ (p[9] == 'V' || p[9] == 'v') &&
++ (p[9] == 'E' || p[9] == 'e') &&
++ (p[10] >= '0' && p[10] <= '9') &&
++ p[11] == '\0') {
++ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
++ "Path is a physical drive name");
++ return (ARCHIVE_FAILED);
++ } else
++ p += 4;
++ }
++
++ /* Skip leading drive letter from archives created
++ * on Windows. */
++ if (((p[0] >= 'a' && p[0] <= 'z') ||
++ (p[0] >= 'A' && p[0] <= 'Z')) &&
++ p[1] == ':') {
++ if (p[2] == '\0') {
++ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
++ "Path is a drive name");
++ return (ARCHIVE_FAILED);
++ }
++ if (p[2] == '\\' || p[2] == '/')
++ p += 3;
++ }
++
++ for (; *p != '\0'; p++) {
+ /* Rewrite the path name if its character is a unusable. */
+ if (*p == ':' || *p == '*' || *p == '?' || *p == '"' ||
+ *p == '<' || *p == '>' || *p == '|')
+ *p = '_';
+ }
+- if (alen == 0 || l == 0)
+- return;
++ alen = p - a->name;
++ if (alen == 0 || strchr(a->name, '\\') == NULL)
++ return (ARCHIVE_OK);
+ /*
+ * Convert path separator.
+ */
+@@ -1560,6 +1642,7 @@
+ p += l;
+ alen -= l;
+ }
++ return (ARCHIVE_OK);
+ }
+ #endif
+
+@@ -1583,7 +1666,8 @@
+ }
+
+ #if defined(_WIN32) || defined(__CYGWIN__)
+- cleanup_pathname_win(a);
++ if (cleanup_pathname_win(a) != ARCHIVE_OK)
++ return (ARCHIVE_FAILED);
+ #endif
+ /* Skip leading '/'. */
+ if (*src == '/')
+Index: libarchive/archive_util.c
+===================================================================
+--- libarchive/archive_util.c (revision 3670)
++++ libarchive/archive_util.c (revision 3737)
+@@ -155,6 +155,7 @@
+ {
+ archive_string_empty(&a->error_string);
+ a->error = NULL;
++ a->archive_error_number = 0;
+ }
+
+ void
+Index: libarchive/archive_read_extract.c
+===================================================================
+--- libarchive/archive_read_extract.c (revision 3670)
++++ libarchive/archive_read_extract.c (revision 3737)
+@@ -108,7 +108,7 @@
+ if (r != ARCHIVE_OK)
+ /* If _write_header failed, copy the error. */
+ archive_copy_error(&a->archive, ad);
+- else if (archive_entry_size(entry) > 0)
++ else if (!archive_entry_size_is_set(entry) || archive_entry_size(entry) > 0)
+ /* Otherwise, pour data into the entry. */
+ r = copy_data(_a, ad);
+ r2 = archive_write_finish_entry(ad);
+Index: CMakeLists.txt
+===================================================================
+--- CMakeLists.txt (revision 3670)
++++ CMakeLists.txt (revision 3737)
+@@ -154,6 +154,13 @@
+ SET(HAVE_ZLIB_H 1)
+ INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
+ LIST(APPEND ADDITIONAL_LIBS ${ZLIB_LIBRARIES})
++ IF(WIN32 AND NOT CYGWIN)
++ SET(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
++ SET(CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARIES})
++ CHECK_C_SOURCE_Runs(
++ "#ifndef ZLIB_WINAPI\n#define ZLIB_WINAPI\n#endif\n#include <zlib.h>\nint main() {uLong f = zlibCompileFlags(); return (f&(1U<<10))?0:-1; }"
++ ZLIB_WINAPI)
++ ENDIF(WIN32 AND NOT CYGWIN)
+ ENDIF(ZLIB_FOUND)
+ MARK_AS_ADVANCED(CLEAR ZLIB_INCLUDE_DIR)
+ MARK_AS_ADVANCED(CLEAR ZLIB_LIBRARY)
+
+Property changes on: .
+___________________________________________________________________
+Modified: svn:mergeinfo
+ Merged /trunk:r1989,3247,3722
+