]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_compress
r1596: * Remove duplicate packages from DOPACKAGES after argument processing.
[debhelper.git] / dh_compress
index c90ce637668fafb751fc09879243a1e6fecb7b13..cbdf627c55e72205efd1d75f328e5ccc7bb3b3f6 100755 (executable)
@@ -12,7 +12,7 @@ use Debian::Debhelper::Dh_Lib;
 
 =head1 SYNOPSIS
 
-  dh_compress [debhelper options] [-Xitem] [-A] [file ...]
+B<dh_compress> [S<I<debhelper options>>] [B<-X>I<item>] [B<-A>] [S<I<file ...>>]
 
 =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;
                `);
        }
 
@@ -164,21 +166,29 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        chdir($olddir);
 
        # Fix up symlinks that were pointing to the uncompressed files.
-       open (FIND,"find $tmp -type l |");
-       while (<FIND>) {
-               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<debhelper(1)>
+L<debhelper(7)>
 
 This program is a part of debhelper.