From 6f159dfc4f328b32bb3d19f7ce0fde1638492d74 Mon Sep 17 00:00:00 2001 From: geos_one Date: Fri, 24 Jun 2011 14:26:26 +0000 Subject: [PATCH] app-arch/gzip: add rsyncable patch (Portage version: 2.2.0_alpha41/svn/Linux x86_64, RepoMan options: --force) git-svn-id: https://svn.disconnected-by-peer.at/svn/linamh/trunk/opsi@2973 6952d904-891a-0410-993b-d76249ca496b --- app-arch/gzip/ChangeLog | 12 + app-arch/gzip/Manifest | 7 + .../files/gzip-1.3.8-install-symlinks.patch | 11 + app-arch/gzip/files/gzip-1.4-assembler.patch | 52 ++++ app-arch/gzip/files/patch-gzip-rsyncable.diff | 279 ++++++++++++++++++ app-arch/gzip/gzip-1.4.ebuild | 48 +++ app-arch/gzip/metadata.xml | 8 + 7 files changed, 417 insertions(+) create mode 100644 app-arch/gzip/ChangeLog create mode 100644 app-arch/gzip/Manifest create mode 100644 app-arch/gzip/files/gzip-1.3.8-install-symlinks.patch create mode 100644 app-arch/gzip/files/gzip-1.4-assembler.patch create mode 100644 app-arch/gzip/files/patch-gzip-rsyncable.diff create mode 100644 app-arch/gzip/gzip-1.4.ebuild create mode 100644 app-arch/gzip/metadata.xml diff --git a/app-arch/gzip/ChangeLog b/app-arch/gzip/ChangeLog new file mode 100644 index 0000000..29abdf7 --- /dev/null +++ b/app-arch/gzip/ChangeLog @@ -0,0 +1,12 @@ +# ChangeLog for app-arch/gzip +# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 +# $Header: $ + +*gzip-1.4 (24 Jun 2011) + + 24 Jun 2011; Mario Fetka + +files/gzip-1.3.8-install-symlinks.patch, +gzip-1.4.ebuild, + +files/gzip-1.4-assembler.patch, +files/patch-gzip-rsyncable.diff, + +metadata.xml: + add rsyncable patch + diff --git a/app-arch/gzip/Manifest b/app-arch/gzip/Manifest new file mode 100644 index 0000000..1f01395 --- /dev/null +++ b/app-arch/gzip/Manifest @@ -0,0 +1,7 @@ +AUX gzip-1.3.8-install-symlinks.patch 280 RMD160 31a85a5adbc91fd664f3c5f3635483b5b39a6f0e SHA1 4019708174e1cf3b80df3413c478148d10e9d8c2 SHA256 f8b8c8548ae32975ba8e5bbc79add0f951954e1b4a21de55575274de177925d1 +AUX gzip-1.4-assembler.patch 1703 RMD160 807f1428cdf9342f912422ce0b0afec628d0ec6b SHA1 16311f87fb8e13881b04a38447ee7e820f000731 SHA256 4d05f0c6df2fcca0dcc6f72f4545ea89e0cdcb92d1f6b9e9e2bd1942da46cf81 +AUX patch-gzip-rsyncable.diff 10256 RMD160 3f4990c15adfd8ac339fc5172d2dd3429af0526c SHA1 d01ba51a6d539daf18a38222c146512c61e76b56 SHA256 8487d91ad4c843aa6248d0d0697cb7bff7f08accb8451711f4078355f6a5ff6e +DIST gzip-1.4.tar.gz 907411 RMD160 a74f782960387e3f05373acc258becb564eda82d SHA1 1d398dac6a7920a7de6e2685fe472a840eb2ce6e SHA256 d166cfd3da380da1bd535633e8890bfb5664f9e68870a611d1dc01a3e9f711ee +EBUILD gzip-1.4.ebuild 1306 RMD160 46b319508c67b12a0c053dd390ac324a1cade374 SHA1 c92de77d6be97dc947f0aaaa51326b0de3388261 SHA256 d2155fc82b27169677be174beedafadbd08be96315cd4f86c96efa5ebdbaa501 +MISC ChangeLog 361 RMD160 e2d06aa14e55655fbce94abd7ab93d5ba5400e74 SHA1 f84943a30a5f2e39fd54d94f5df80276c5d65379 SHA256 da3a15979556f07a5423abf08818ecd5e507f168d324f7322301680a30c69037 +MISC metadata.xml 258 RMD160 fb52cbd38f7a8c9d7fee81f2db5dde7e3b17e045 SHA1 27fbcb42e87ac32af5f2a864ffc330b23b7b9f70 SHA256 3e8d2c98025402bd29168f46db0e4ed14ae2d64ee8e75508d87b136d06ba044c diff --git a/app-arch/gzip/files/gzip-1.3.8-install-symlinks.patch b/app-arch/gzip/files/gzip-1.3.8-install-symlinks.patch new file mode 100644 index 0000000..8d92b60 --- /dev/null +++ b/app-arch/gzip/files/gzip-1.3.8-install-symlinks.patch @@ -0,0 +1,11 @@ +--- Makefile.in ++++ Makefile.in +@@ -926,7 +926,7 @@ + rm -f "$$dest" && \ + case $@ in \ + install-exec-hook) \ +- ln "$$source" "$$dest" || $(LN_S) "$$source" "$$dest";; \ ++ $(LN_S) "$$source" "$$dest";; \ + esac \ + ) || exit; \ + done; \ diff --git a/app-arch/gzip/files/gzip-1.4-assembler.patch b/app-arch/gzip/files/gzip-1.4-assembler.patch new file mode 100644 index 0000000..76aade5 --- /dev/null +++ b/app-arch/gzip/files/gzip-1.4-assembler.patch @@ -0,0 +1,52 @@ +http://bugs.gentoo.org/309079 +http://lists.gnu.org/archive/html/bug-gzip/2010-02/msg00032.html + +From 61af16213a488af3a8e994399ebd0859d390edb6 Mon Sep 17 00:00:00 2001 +From: Jim Meyering +Date: Sat, 20 Mar 2010 13:05:58 +0100 +Subject: [PATCH] use assembly code matcher when possible + +* configure.ac (ASCPPPOST): Backslash-escape "#" in AC_SUBST'd +variable, to keep make from seeing it as a comment-introducer. +Based on a patch by Petr Pisar. +* lib/Makefile.am (match.$(OBJEXT)): Use AM_V_GEN and AM_V_at. +* lib/match.c: Don't include . +It would impede configure-time assembler test. +* .x-sc_require_config_h: Exempt lib/match.c from syntax-check. +* .x-sc_require_config_h_first: Likewise. +--- + .x-sc_require_config_h | 1 + + .x-sc_require_config_h_first | 1 + + THANKS | 1 + + configure.ac | 2 +- + lib/Makefile.am | 12 ++++++------ + lib/match.c | 2 -- + 6 files changed, 10 insertions(+), 9 deletions(-) + create mode 100644 .x-sc_require_config_h + create mode 100644 .x-sc_require_config_h_first + +--- a/configure ++++ b/configure +@@ -22588,5 +22588,5 @@ + + # cc -E produces incorrect asm files on SVR4, so postprocess it. +-ASCPPPOST="sed '/^ *#/d; s,//.*,,; s/% /%/g; s/\\. /./g'" ++ASCPPPOST="sed '/^ *\\#/d; s,//.*,,; s/% /%/g; s/\\. /./g'" + + +diff --git a/lib/match.c b/lib/match.c +index 4ef6128..5dd8d64 100644 +--- a/lib/match.c ++++ b/lib/match.c +@@ -28,8 +28,6 @@ + * David Mosberger-Tang . + */ + +-#include +- + /* Preprocess with -DNO_UNDERLINE if your C compiler does not prefix + * external symbols with an underline character '_'. + */ +-- +1.7.1.1 + diff --git a/app-arch/gzip/files/patch-gzip-rsyncable.diff b/app-arch/gzip/files/patch-gzip-rsyncable.diff new file mode 100644 index 0000000..3f5978e --- /dev/null +++ b/app-arch/gzip/files/patch-gzip-rsyncable.diff @@ -0,0 +1,279 @@ +diff -u -r ../gzip-1.3.12.orig/deflate.c ./deflate.c +--- ../gzip-1.3.12.orig/deflate.c 2006-12-07 17:53:00.000000000 -0600 ++++ ./deflate.c 2008-09-01 20:49:37.000000000 -0500 +@@ -135,6 +135,14 @@ + #endif + /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + ++#ifndef RSYNC_WIN ++# define RSYNC_WIN 4096 ++#endif ++/* Size of rsync window, must be < MAX_DIST */ ++ ++#define RSYNC_SUM_MATCH(sum) ((sum) % RSYNC_WIN == 0) ++/* Whether window sum matches magic value */ ++ + /* =========================================================================== + * Local data used by the "longest match" routines. + */ +@@ -216,6 +224,8 @@ + unsigned near good_match; + /* Use a faster search when the previous match is longer than this */ + ++local ulg rsync_sum; /* rolling sum of rsync window */ ++local ulg rsync_chunk_end; /* next rsync sequence point */ + + /* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to +@@ -314,6 +324,10 @@ + #endif + /* prev will be initialized on the fly */ + ++ /* rsync params */ ++ rsync_chunk_end = 0xFFFFFFFFUL; ++ rsync_sum = 0; ++ + /* Set the default configuration parameters: + */ + max_lazy_match = configuration_table[pack_level].max_lazy; +@@ -550,6 +564,8 @@ + memcpy((char*)window, (char*)window+WSIZE, (unsigned)WSIZE); + match_start -= WSIZE; + strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */ ++ if (rsync_chunk_end != 0xFFFFFFFFUL) ++ rsync_chunk_end -= WSIZE; + + block_start -= (long) WSIZE; + +@@ -577,13 +593,46 @@ + } + } + ++local void rsync_roll(start, num) ++ unsigned start; ++ unsigned num; ++{ ++ unsigned i; ++ ++ if (start < RSYNC_WIN) { ++ /* before window fills. */ ++ for (i = start; i < RSYNC_WIN; i++) { ++ if (i == start + num) return; ++ rsync_sum += (ulg)window[i]; ++ } ++ num -= (RSYNC_WIN - start); ++ start = RSYNC_WIN; ++ } ++ ++ /* buffer after window full */ ++ for (i = start; i < start+num; i++) { ++ /* New character in */ ++ rsync_sum += (ulg)window[i]; ++ /* Old character out */ ++ rsync_sum -= (ulg)window[i - RSYNC_WIN]; ++ if (rsync_chunk_end == 0xFFFFFFFFUL && RSYNC_SUM_MATCH(rsync_sum)) ++ rsync_chunk_end = i; ++ } ++} ++ ++/* =========================================================================== ++ * Set rsync_chunk_end if window sum matches magic value. ++ */ ++#define RSYNC_ROLL(s, n) \ ++ do { if (rsync) rsync_roll((s), (n)); } while(0) ++ + /* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ + #define FLUSH_BLOCK(eof) \ + flush_block(block_start >= 0L ? (char*)&window[(unsigned)block_start] : \ +- (char*)NULL, (long)strstart - block_start, (eof)) ++ (char*)NULL, (long)strstart - block_start, flush-1, (eof)) + + /* =========================================================================== + * Processes a new input file and return its compressed length. This +@@ -594,7 +643,7 @@ + local off_t deflate_fast() + { + IPos hash_head; /* head of the hash chain */ +- int flush; /* set if current block must be flushed */ ++ int flush; /* set if current block must be flushed, 2=>and padded */ + unsigned match_length = 0; /* length of best match */ + + prev_length = MIN_MATCH-1; +@@ -624,6 +673,7 @@ + + lookahead -= match_length; + ++ RSYNC_ROLL(strstart, match_length); + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +@@ -652,9 +702,14 @@ + /* No match, output a literal byte */ + Tracevv((stderr,"%c",window[strstart])); + flush = ct_tally (0, window[strstart]); ++ RSYNC_ROLL(strstart, 1); + lookahead--; + strstart++; + } ++ if (rsync && strstart > rsync_chunk_end) { ++ rsync_chunk_end = 0xFFFFFFFFUL; ++ flush = 2; ++ } + if (flush) FLUSH_BLOCK(0), block_start = strstart; + + /* Make sure that we always have enough lookahead, except +@@ -728,6 +783,7 @@ + */ + lookahead -= prev_length-1; + prev_length -= 2; ++ RSYNC_ROLL(strstart, prev_length+1); + do { + strstart++; + INSERT_STRING(strstart, hash_head); +@@ -740,24 +796,39 @@ + match_available = 0; + match_length = MIN_MATCH-1; + strstart++; +- if (flush) FLUSH_BLOCK(0), block_start = strstart; + ++ if (rsync && strstart > rsync_chunk_end) { ++ rsync_chunk_end = 0xFFFFFFFFUL; ++ flush = 2; ++ } ++ if (flush) FLUSH_BLOCK(0), block_start = strstart; + } else if (match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c",window[strstart-1])); +- if (ct_tally (0, window[strstart-1])) { +- FLUSH_BLOCK(0), block_start = strstart; +- } ++ flush = ct_tally (0, window[strstart-1]); ++ if (rsync && strstart > rsync_chunk_end) { ++ rsync_chunk_end = 0xFFFFFFFFUL; ++ flush = 2; ++ } ++ if (flush) FLUSH_BLOCK(0), block_start = strstart; ++ RSYNC_ROLL(strstart, 1); + strstart++; + lookahead--; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ ++ if (rsync && strstart > rsync_chunk_end) { ++ /* Reset huffman tree */ ++ rsync_chunk_end = 0xFFFFFFFFUL; ++ flush = 2; ++ FLUSH_BLOCK(0), block_start = strstart; ++ } + match_available = 1; ++ RSYNC_ROLL(strstart, 1); + strstart++; + lookahead--; + } +diff -u -r ../gzip-1.3.12.orig/doc/gzip.texi ./doc/gzip.texi +--- ../gzip-1.3.12.orig/doc/gzip.texi 2007-02-05 17:29:04.000000000 -0600 ++++ ./doc/gzip.texi 2008-09-01 20:55:58.000000000 -0500 +@@ -350,6 +350,14 @@ + into the directory and compress all the files it finds there (or + decompress them in the case of @command{gunzip}). + ++@item --rsyncable ++While compressing, synchronize the output occasionally based on the ++input. This reduces compression by about 1 percent most cases, but ++means that the @command{rsync} program can take advantage of similarities ++in the uncompressed input when syncronizing two files compressed with ++this flag. @command{gunzip} cannot tell the difference between a ++compressed file created with this option, and one created without it. ++ + @item --suffix @var{suf} + @itemx -S @var{suf} + Use suffix @var{suf} instead of @samp{.gz}. Any suffix can be +diff -u -r ../gzip-1.3.12.orig/gzip.c ./gzip.c +--- ../gzip-1.3.12.orig/gzip.c 2007-03-20 00:09:51.000000000 -0500 ++++ ./gzip.c 2008-09-01 20:45:28.000000000 -0500 +@@ -231,6 +231,7 @@ + unsigned insize; /* valid bytes in inbuf */ + unsigned inptr; /* index of next byte to be processed in inbuf */ + unsigned outcnt; /* bytes in output buffer */ ++int rsync = 0; /* make ryncable chunks */ + + struct option longopts[] = + { +@@ -260,6 +261,7 @@ + {"best", 0, 0, '9'}, /* compress better */ + {"lzw", 0, 0, 'Z'}, /* make output compatible with old compress */ + {"bits", 1, 0, 'b'}, /* max number of bits per code (implies -Z) */ ++ {"rsyncable", 0, 0, 'R'}, /* make rsync-friendly archive */ + { 0, 0, 0, 0 } + }; + +@@ -341,6 +343,7 @@ + " -Z, --lzw produce output compatible with old compress", + " -b, --bits=BITS max number of bits per code (implies -Z)", + #endif ++ " --rsyncable Make rsync-friendly archive", + "", + "With no FILE, or when FILE is -, read standard input.", + "", +@@ -469,6 +472,8 @@ + recursive = 1; + #endif + break; ++ case 'R': ++ rsync = 1; break; + case 'S': + #ifdef NO_MULTIPLE_DOTS + if (*optarg == '.') optarg++; +diff -u -r ../gzip-1.3.12.orig/gzip.h ./gzip.h +--- ../gzip-1.3.12.orig/gzip.h 2007-03-20 00:09:51.000000000 -0500 ++++ ./gzip.h 2008-09-01 20:43:35.000000000 -0500 +@@ -158,6 +158,7 @@ + extern unsigned insize; /* valid bytes in inbuf */ + extern unsigned inptr; /* index of next byte to be processed in inbuf */ + extern unsigned outcnt; /* bytes in output buffer */ ++extern int rsync; /* deflate into rsyncable chunks */ + + extern off_t bytes_in; /* number of input bytes */ + extern off_t bytes_out; /* number of output bytes */ +@@ -306,7 +307,7 @@ + /* in trees.c */ + void ct_init OF((ush *attr, int *method)); + int ct_tally OF((int dist, int lc)); +-off_t flush_block OF((char *buf, ulg stored_len, int eof)); ++off_t flush_block OF((char *buf, ulg stored_len, int pad, int eof)); + + /* in bits.c */ + void bi_init OF((file_t zipfile)); +diff -u -r ../gzip-1.3.12.orig/trees.c ./trees.c +--- ../gzip-1.3.12.orig/trees.c 2006-11-20 02:40:33.000000000 -0600 ++++ ./trees.c 2008-09-01 20:53:37.000000000 -0500 +@@ -860,9 +860,10 @@ + * trees or store, and output the encoded block to the zip file. This function + * returns the total compressed length for the file so far. + */ +-off_t flush_block(buf, stored_len, eof) ++off_t flush_block(buf, stored_len, pad, eof) + char *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ ++ int pad; /* pad output to byte boundary */ + int eof; /* true if this is the last block for a file */ + { + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ +@@ -955,6 +956,10 @@ + Assert (input_len == bytes_in, "bad input size"); + bi_windup(); + compressed_len += 7; /* align on byte boundary */ ++ } else if (pad && (compressed_len % 8) != 0) { ++ send_bits((STORED_BLOCK<<1)+eof, 3); /* send block type */ ++ compressed_len = (compressed_len + 3 + 7) & ~7L; ++ copy_block(buf, 0, 1); /* with header */ + } + + return compressed_len >> 3; diff --git a/app-arch/gzip/gzip-1.4.ebuild b/app-arch/gzip/gzip-1.4.ebuild new file mode 100644 index 0000000..7052892 --- /dev/null +++ b/app-arch/gzip/gzip-1.4.ebuild @@ -0,0 +1,48 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-arch/gzip/gzip-1.4.ebuild,v 1.8 2011/04/03 11:15:56 ulm Exp $ + +inherit eutils flag-o-matic + +DESCRIPTION="Standard GNU compressor" +HOMEPAGE="http://www.gnu.org/software/gzip/" +SRC_URI="ftp://alpha.gnu.org/gnu/gzip/${P}.tar.gz + mirror://gnu/gzip/${P}.tar.gz + mirror://gentoo/${P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd" +IUSE="nls pic static" + +RDEPEND="" +DEPEND="${RDEPEND} + nls? ( sys-devel/gettext )" + +src_unpack() { + unpack ${A} + cd "${S}" + epatch "${FILESDIR}"/patch-gzip-rsyncable.diff + epatch "${FILESDIR}"/${PN}-1.3.8-install-symlinks.patch + epatch "${FILESDIR}"/${P}-assembler.patch #309079 +} + +src_compile() { + use static && append-flags -static + # avoid text relocation in gzip + use pic && export DEFS="NO_ASM" + econf || die + emake || die +} + +src_install() { + emake install DESTDIR="${D}" || die + dodoc ChangeLog NEWS README THANKS TODO + docinto txt + dodoc algorithm.doc gzip.doc + + # keep most things in /usr, just the fun stuff in / + dodir /bin + mv "${D}"/usr/bin/{gunzip,gzip,uncompress,zcat} "${D}"/bin/ || die + sed -e 's:/usr::' -i "${D}"/bin/gunzip || die +} diff --git a/app-arch/gzip/metadata.xml b/app-arch/gzip/metadata.xml new file mode 100644 index 0000000..f8ea417 --- /dev/null +++ b/app-arch/gzip/metadata.xml @@ -0,0 +1,8 @@ + + + +base-system + +disable optimized assembly code that is not PIC friendly + +