chiark / gitweb /
packaging fixes
[xfonts-traditional.git] / update-xfonts-traditional
index d34157fb3c315549eaab2b922528c64f64de364f..e2fb14fb762f90a696bb07a60dcd647151a6b1e4 100755 (executable)
@@ -20,12 +20,17 @@ our $mode;
 our %foundrymap;
 our $verbose=0;
 our $reportfh;
+our $foundryinfo;
 
 sub reportloaded {
     return unless $verbose;
     print $reportfh @_,"\n" or die $!;
 }
 
+sub statsummary () {
+    return join ' ', ((stat _)[1,7,9,10]);
+}
+
 sub loadrules ($) {
     my ($key) = @_;
     our %cache;
@@ -119,7 +124,14 @@ sub processbdf ($$$$) {
 }
 
 sub loadfoundries () {
+    $foundryinfo = '';
     foreach my $path (@rulespath) {
+       if (!stat $path) {
+           die "$path $!" unless $!==&ENOENT;
+           next;
+       }
+       $foundryinfo .= statsummary().' '.$path."\0\n";
+
        my $p = "$path/foundries";
        my $f = new IO::File $p;
        if (!$f) {
@@ -127,6 +139,7 @@ sub loadfoundries () {
            print $reportfh "foundries: none in $p\n" or die $! if $verbose;
            next;
        }
+       stat $f or die $!;
        while (<$f>) {
            s/^\s*//; s/\s+$//;
            next if m/^\#/;
@@ -148,7 +161,7 @@ sub processpcfgz ($$$$) {
     my ($usread,$uswrite);
     my ($reader,$writer);
     my @children;
-    foreach my $proc (['zcat'], ['pcf2bdf'], [],
+    foreach my $proc (['gunzip'], ['pcf2bdf'], [],
                      ['bdftopcf'],['',qw(gzip -1)]) {
        my $isfinal = (@$proc && $proc->[0] eq '');
        if (!$isfinal) {
@@ -218,10 +231,17 @@ sub processfontdir ($) {
     my $olddone = do "$fontdir/$donefile";
     if (!$olddone) {
        die "$fontdir $! $@ " unless $!==&ENOENT;
+    } elsif ($olddone->{''} ne $foundryinfo) {
+       our $repro_reported;
+       print $reportfh "reprocessing fonts (rules updated)\n" or die $!
+           unless $repro_reported++;
+       $olddone = undef;
+    }
+    if (!$olddone) {
        $olddone = { };
        $changed = 1;
     }
-    my $newdone = { };
+    my $newdone = { '' => $foundryinfo };
     my $log = new IO::File "$fontdir/$logfile", "w" 
        or die "$fontdir/$logfile $!";
     my %outfiles; # bitmask: 1 /*exists*/ | 2 /*wanted*/
@@ -249,7 +269,7 @@ sub processfontdir ($) {
        die "$fontdir $dent" unless -f _;
        $anypcfs++;
 
-       my $stats = join ' ', ((stat _)[1,7,9,10]);
+       my $stats = statsummary();
        my $tdone = $olddone->{$dent};
        my $outdent = $fontprefix.$dent;
        if (defined $tdone && $tdone eq $stats) {
@@ -282,13 +302,18 @@ sub processfontdir ($) {
        }
        unlink "$fontdir/$olddent" or die "$fontdir $olddent $!";
        $changed = 1;
+       $updated++;
+    }
+    if (!stat "$fontdir/fonts.dir") {
+       $!==&ENOENT or die "$fontdir $!";
+    } else {
+       $!=0; $?=0; system 'mkfontdir',$fontdir;
+       die "$fontdir $? $!" if $? or $!;
     }
     if (!$anypcfs) {
        unlink "$fontdir/$logfile" or die "$fontdir $!";
        unlink "$fontdir/$donefile" or $!==&ENOENT or die "$fontdir $!";
     } elsif ($changed) {
-       $!=0; $?=0; system 'mkfontdir',$fontdir;
-       die "$fontdir $? $!" if $? or $!;
        my $newdoneh = new IO::File "$fontdir/$donefile.new", 'w' 
            or die "$fontdir $!";
        print $newdoneh Dumper($newdone) or die "$fontdir $!";