From d3d0811e23787b5c66edf94b3351a1555eb5010f Mon Sep 17 00:00:00 2001 From: root Date: Fri, 21 Oct 2011 23:14:54 +0000 Subject: Fri Oct 21 23:14:53 UTC 2011 --- core/libarchive/PKGBUILD | 28 ++-- core/libarchive/release-2.8-fixes.patch | 234 ++++++++++++++++++++++++++++++++ 2 files changed, 252 insertions(+), 10 deletions(-) create mode 100644 core/libarchive/release-2.8-fixes.patch (limited to 'core/libarchive') diff --git a/core/libarchive/PKGBUILD b/core/libarchive/PKGBUILD index 218d6f3e1..a64e19690 100644 --- a/core/libarchive/PKGBUILD +++ b/core/libarchive/PKGBUILD @@ -1,30 +1,38 @@ -# $Id: PKGBUILD 137228 2011-09-06 21:10:41Z dan $ +# $Id: PKGBUILD 140981 2011-10-20 13:56:51Z dan $ # Maintainer: Dan McGee -# Maintainer: Aaron Griffin pkgname=libarchive pkgver=2.8.5 -pkgrel=1 +pkgrel=2 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=('9caf51dcf6213e9c9f5a1c27448b9c90') -sha256sums=('13993e0ffbd121ccda46ea226b1f8eac218de0fa8da7d8b1f998093d5c32a72d') +source=("http://libarchive.googlecode.com/files/libarchive-${pkgver}.tar.gz" + release-2.8-fixes.patch) +md5sums=('9caf51dcf6213e9c9f5a1c27448b9c90' + '14dbbf2d31d68d8eedb93ec5531f3b0c') +sha256sums=('13993e0ffbd121ccda46ea226b1f8eac218de0fa8da7d8b1f998093d5c32a72d' + 'fcadc5ac3020a9fab5922d343baca28f067cc051e9b6f59e480349ba5b0a5060') # keep an upgrade path for older installations PKGEXT='.pkg.tar.gz' build() { - cd $srcdir/$pkgname-$pkgver + cd "$srcdir/$pkgname-$pkgver" + patch -Np0 < ../release-2.8-fixes.patch ./configure --prefix=/usr --without-xml2 make } +check() { + cd "$srcdir/$pkgname-$pkgver" + make check +} + package() { - cd $srcdir/$pkgname-$pkgver - make DESTDIR=$pkgdir install + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install - install -D -m644 COPYING $pkgdir/usr/share/licenses/libarchive/COPYING + install -D -m644 COPYING "$pkgdir"/usr/share/licenses/libarchive/COPYING } diff --git a/core/libarchive/release-2.8-fixes.patch b/core/libarchive/release-2.8-fixes.patch new file mode 100644 index 000000000..c21eeaa7b --- /dev/null +++ b/core/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 \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 + -- cgit v1.2.3-54-g00ecf