X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_compress;h=cbdf627c55e72205efd1d75f328e5ccc7bb3b3f6;hb=2bc0d0368dc148a3507d285bad9bc845f8bf382d;hp=504d0a24d58401c660b10a8a545e243c73ecbb4e;hpb=8b21a3c92ca26438bb925da9a5a280fc4bfd1182;p=debhelper.git diff --git a/dh_compress b/dh_compress index 504d0a2..cbdf627 100755 --- a/dh_compress +++ b/dh_compress @@ -12,7 +12,7 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS - dh_compress [debhelper options] [-Xitem] [-A] [file ...] +B [S>] [B<-X>I] [B<-A>] [S>] =head1 DESCRIPTION @@ -23,10 +23,10 @@ to the new files. By default, dh_compress compresses files that debian policy mandates should be compressed, namely all files in usr/share/info, usr/share/man, -usr/X11R6/man, and all files in usr/share/doc that are larger than 4k in size, -(except the copyright file, .html files and .gif files), and all changelog -files. It skips any files that appear to be already compressed (based on their -extensions). +usr/X11R6/man, files in usr/share/doc that are larger than 4k in size, +(except the copyright file, .html and .css files, and files that appear to be +already compressed based on their extensions), and all changelog files. Plus +PCF fonts underneath usr/X11R6/lib/X11/fonts/ If a debian/package.compress file exists, however, it will be ran as a shell script, and all filenames that the shell script outputs will be compressed @@ -88,20 +88,22 @@ foreach my $package (@{$dh{DOPACKAGES}}) { push @files, split(/\n/,`sh $olddir/$compress 2>/dev/null`); } else { - # By default, fall back to what the policy manual says to - # compress. Note that all the excludes of odd things like _z + # Note that all the excludes of odd things like _z # are because gzip refuses to compress such files, assumming # they are zip files. I looked at the gzip source to get the # complete list of such extensions: ".gz", ".z", ".taz", # ".tgz", "-gz", "-z", "_z" push @files, split(/\n/,` find usr/info usr/share/info usr/man usr/share/man usr/X11*/man -type f ! -name "*.gz" 2>/dev/null || true; - find usr/doc usr/share/doc -type f \\( -size +4k -or -name "changelog*" \\) \\ + find usr/share/doc -type f \\( -size +4k -or -name "changelog*" -or -name "NEWS*" \\) \\ \\( -name changelog.html -or ! -iname "*.htm*" \\) \\ - ! -iname "*.gif" ! -iname "*.png" ! -iname "*.jpg" ! -iname "*.jpeg" ! -iname "*.gz" \\ - ! -iname "*.taz" ! -iname "*.tgz" ! -iname "*.z" \\ - ! -iname "*-gz" ! -iname "*-z" ! -iname "*_z" \\ - ! -name "copyright" 2>/dev/null || true + ! -iname "*.gif" ! -iname "*.png" ! -iname "*.jpg" \\ + ! -iname "*.jpeg" ! -iname "*.gz" ! -iname "*.taz" \\ + ! -iname "*.tgz" ! -iname "*.z" ! -iname "*.bz2" \\ + ! -iname "*-gz" ! -iname "*-z" ! -iname "*_z" \\ + ! -iname "*.jar" ! -iname "*.zip" ! -iname "*.css" \\ + ! -name "copyright" 2>/dev/null || true; + find usr/X11R6/lib/X11/fonts -type f -name "*.pcf" 2>/dev/null || true; `); } @@ -160,25 +162,33 @@ foreach my $package (@{$dh{DOPACKAGES}}) { doit("ln","$hardlinks{$_}.gz","$_.gz"); } - verbose_print("cd $olddir"); + verbose_print("cd '$olddir'"); chdir($olddir); # Fix up symlinks that were pointing to the uncompressed files. - open (FIND,"find $tmp -type l |"); - while () { - chomp; - my ($directory)=m:(.*)/:; - my $linkval=readlink($_); - if (! -e "$directory/$linkval" && -e "$directory/$linkval.gz") { - doit("rm","-f",$_); - doit("ln","-sf","$linkval.gz","$_.gz"); + my %links = map { chomp; $_ => 1 } `find $tmp -type l`; + my $changed; + # Keep looping through looking for broken links until no more + # changes are made. This is done in case there are links pointing + # to links, pointing to compressed files. + do { + $changed = 0; + foreach my $link (keys %links) { + my ($directory) = $link =~ m:(.*)/:; + my $linkval = readlink($link); + if (! -e "$directory/$linkval" && -e "$directory/$linkval.gz") { + doit("rm","-f",$link); + doit("ln","-sf","$linkval.gz","$link.gz"); + delete $links{$link}; + $changed++; + } } - } + } while $changed; } =head1 SEE ALSO -L +L This program is a part of debhelper.