]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_compress
Fix build system auto-selection breakage.
[debhelper.git] / dh_compress
index de6a97b9502ffa31a844ca620538cdef305e6e7b..4e208b4f170cb085e00ca78a297a01ffd93aedbf 100755 (executable)
@@ -24,16 +24,25 @@ 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, 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/
+(except the copyright file, .html and .css files, image 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/ and
+usr/share/fonts/X11/
 
-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
-instead of the default files. The shell script will be run from
-inside the package build directory. Note though that using -X is a much
-better idea in general; you should only use a debian/package.compress file
-if you really have to.
+=head1 FILES
+
+=over 4
+
+=item debian/I<package>.compress
+
+If this file exists, the default files are not compressed. Instead, the
+file is ran as a shell script, and all filenames that the shell script
+outputs will be compressed. The shell script will be run from inside the
+package build directory. Note though that using -X is a much better idea in
+general; you should only use a debian/package.compress file if you really
+need to.
+
+=back
 
 =head1 OPTIONS
 
@@ -42,7 +51,7 @@ if you really have to.
 =item B<-X>I<item>, B<--exclude=>I<item>
 
 Exclude files that contain "item" anywhere in their filename from being
-compressed. For example, -X.jpeg will exclude jpeg's from compression.
+compressed. For example, -X.tiff will exclude tiff files from compression.
 You may use this option multiple times to build up a list of things to
 exclude. You can accomplish the same thing by using a debian/compress file,
 but this is easier.
@@ -102,8 +111,10 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                                ! -iname "*.tgz" ! -iname "*.z" ! -iname "*.bz2" \\
                                ! -iname "*-gz"  ! -iname "*-z" ! -iname "*_z" \\
                                ! -iname "*.jar" ! -iname "*.zip" ! -iname "*.css" \\
+                               ! -iname "*.svg" ! -iname "*.svgz" \\
+                               ! -name "index.sgml" \\
                                ! -name "copyright" 2>/dev/null || true;
-                       find usr/X11R6/lib/X11/fonts -type f -name "*.pcf" 2>/dev/null || true;
+                       find usr/X11R6/lib/X11/fonts usr/share/fonts/X11 -type f -name "*.pcf" 2>/dev/null || true;
                `);
        }
 
@@ -150,7 +161,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                # Make executables not be anymore.
                xargs(\@f,"chmod","a-x");
                
-               xargs(\@f,"gzip","-9f");
+               xargs(\@f,"gzip","-9nf");
        }
        
        # Now change over any files we can that used to be hard links so
@@ -166,21 +177,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.