#!/usr/bin/perl -w $flavour = shift; $prev_abidir = shift; $abidir = shift; $skipmodule = shift; print "II: Checking modules for $flavour..."; if (-f "$prev_abidir/ignore.modules" or -f "$prev_abidir/$flavour.ignore.modules") { print "explicitly ignoring modules\n"; exit(0); } if (not -f "$abidir/$flavour.modules" or not -f "$prev_abidir/$flavour.modules") { print "previous or current modules file missing!\n"; print " $abidir/$flavour.modules\n"; print " $prev_abidir/$flavour.modules\n"; if (defined($skipmodule)) { exit(0); } else { exit(1); } } print "\n"; my %modules; my %modules_ignore; my $missing = 0; my $new = 0; my $errors = 0; # See if we have any ignores if (-f "$prev_abidir/../modules.ignore") { my $ignore = 0; open(IGNORE, "< $prev_abidir/../modules.ignore") or die "Could not open $prev_abidir/../modules.ignore"; print " reading modules to ignore..."; while () { chomp; next if /\s*#/; $modules_ignore{$_} = 1; $ignore++; } close(IGNORE); print "read $ignore modules.\n"; } # Read new modules first print " reading new modules..."; $new_count = 0; open(NEW, "< $abidir/$flavour.modules") or die "Could not open $abidir/$flavour.modules"; while () { chomp; $modules{$_} = 1; $new_count++; } close(NEW); print "read $new_count modules.\n"; # Now the old modules, checking for missing ones print " reading old modules..."; $old_count = 0; open(OLD, "< $prev_abidir/$flavour.modules") or die "Could not open $prev_abidir/$flavour.modules"; while () { chomp; if (not defined($modules{$_})) { print "\n" if not $missing; $missing++; if (not defined($modules_ignore{$_})) { print " MISS: $_\n"; $errors++; } else { print " MISS: $_ (ignored)\n"; } } else { $modules{$_}++; } $old_count++; } close(OLD); # Check for new modules foreach $mod (keys(%modules)) { if ($modules{$mod} < 2) { print "\n" if not $missing and not $new; print " NEW : $mod\n"; $new++; } } if ($new or $missing) { print " read $old_count modules : new($new) missing($missing)\n"; } else { print "read $old_count modules.\n"; } # Let's see where we stand... if ($errors) { if (defined($skipmodule)) { print "WW: Explicitly asked to ignore failures (probably not good)\n"; } else { print "EE: Missing modules (start begging for mercy)\n"; exit 1 } } if ($new) { print "II: New modules (you've been busy, wipe the poop off your nose)\n"; } else { print "II: No new modules (hope you're happy, slacker)\n"; } print "II: Done\n"; exit(0);