I can see the future. It is cloudy.
[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;
6501254e 39my %mand = qw(. 1);
40use File::Basename qw(dirname);
93209f39 41
42while (<MANIFEST>) {
43 if (/^(\S+)\t+(.+)$/) {
44 $mani{$1}++;
6501254e 45 my $d = dirname($1);
46 while($d ne '.') {
47 $mand{$d}++;
48 $d = dirname($d);
49 }
93209f39 50 } else {
51 warn "MANIFEST:$.:$_";
52 }
53}
54
55close(MANIFEST);
56
57my %find;
58use File::Find;
59find(sub {
6501254e 60 my $n = $File::Find::name;
61 $n =~ s:^\./::;
62 $find{$n}++;
93209f39 63 }, '.' );
64
65my @xtra;
66my @miss;
67
68for (sort keys %find) {
6501254e 69 push @xtra, $_ unless $mani{$_} || $mand{$_};
93209f39 70}
71
72for (sort keys %mani) {
73 push @miss, $_ unless $find{$_};
74}
75
76printf("%s@xtra\n", $x || $m ? "" : "extra: ") if @xtra && !$m;
77printf("%s@miss\n", $x || $m ? "" : "missing: ") if @miss && !$x;
78
79exit 0;
80