Add mani(fest) check(ing) utility.
[p5sagit/p5-mst-13.2.git] / Porting / manicheck
CommitLineData
93209f39 1#!/usr/bin/perl -ws
2
3#
4# manicheck - check files against the MANIFEST
5#
6# Without options prints out (possibly) two lines:
7#
8# extra: a b c
9# missing: d
10#
11# With option -x prints out only the missing files (and without the "extra: ")
12# With option -m prints out only the extra files (and without the "missing: ")
13#
14
15BEGIN {
16 $SIG{__WARN__} = sub {
17 help() if $_[0] =~ /"main::\w" used only once: possible typo at /;
18 };
19}
20
21use strict;
22
23sub help {
24 die <<EOF;
25$0: Usage: $0 [-x|-m|-h]
26-x show only the extra files
27-m show only the missing files
28-h show only this help
29EOF
30}
31
32use vars qw($x $m $h);
33
34help() if $h;
35
36open(MANIFEST, "MANIFEST") or die "MANIFEST: $!";
37
38my %mani;
39
40while (<MANIFEST>) {
41 if (/^(\S+)\t+(.+)$/) {
42 $mani{$1}++;
43 } else {
44 warn "MANIFEST:$.:$_";
45 }
46}
47
48close(MANIFEST);
49
50my %find;
51use File::Find;
52find(sub {
53 if(-f $_) {
54 my $f = $File::Find::name;
55 $f =~ s:^\./::;
56 $find{$f}++;
57 }
58 }, '.' );
59
60my @xtra;
61my @miss;
62
63for (sort keys %find) {
64 push @xtra, $_ unless $mani{$_};
65}
66
67for (sort keys %mani) {
68 push @miss, $_ unless $find{$_};
69}
70
71printf("%s@xtra\n", $x || $m ? "" : "extra: ") if @xtra && !$m;
72printf("%s@miss\n", $x || $m ? "" : "missing: ") if @miss && !$x;
73
74exit 0;
75