3 # Compresses files and makes sure that symlinks pointing to the
4 # compressed files get fixed.
7 BEGIN { push @INC, "debian", "/usr/lib/debhelper" }
11 foreach $PACKAGE (@{$dh{DOPACKAGES}}) {
12 $TMP=tmpdir($PACKAGE);
13 $compress=pkgfile($PACKAGE,"compress");
15 # Run the file name gathering commands from within the directory
16 # structure that will be effected.
18 verbose_print("cd $TMP");
19 chdir($TMP) || error("Can't cd to $TMP: $!");
21 # Figure out what files to compress.
23 # First of all, deal with any files specified right on the command line.
24 if (($PACKAGE eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
28 # The config file is a sh script that outputs the files to be compressed
29 # (typically using find).
30 push @files, split(/\n/,`sh $olddir/$compress 2>/dev/null`);
33 # By default, fall back to what the policy manual says to compress.
34 push @files, split(/\n/,`
35 find usr/info usr/man usr/X11*/man -type f ! -name "*.gz" 2>/dev/null || true;
36 find usr/doc -type f \\( -size +4k -or -name "changelog*" \\) \\
37 ! -name "*.htm*" ! -name "*.gif" ! -name "*.gz" \\
38 ! -name "copyright" 2>/dev/null || true
42 # Exclude files from compression.
43 if (@files && defined($dh{EXCLUDE}) && $dh{EXCLUDE}) {
47 foreach $x (@{$dh{EXCLUDE}}) {
58 # Look for files with hard links. If we are going to compress both,
59 # we can preserve the hard link across the compression and save
64 ($dev, $inode, undef, $nlink)=stat($_);
66 if (! $seen{"$inode.$dev"}) {
67 $seen{"$inode.$dev"}=$_;
72 $hardlinks{$_}=$seen{"$inode.$dev"};
81 xargs(\@f,"gzip","-9f");
84 # Now change over any files we can that used to be hard links so
86 foreach (keys %hardlinks) {
90 doit("ln","$hardlinks{$_}.gz","$_.gz");
93 verbose_print("cd $olddir");
96 # Fix up symlinks that were pointing to the uncompressed files.
97 open (FIND,"find $TMP -type l |");
100 ($directory)=m:(.*)/:;
101 $linkval=readlink($_);
102 if (! -e "$directory/$linkval" && -e "$directory/$linkval.gz") {
104 doit("ln","-sf","$linkval.gz","$_.gz");