Commit | Line | Data |
---|---|---|
95318fb6 JH |
1 | #!/usr/bin/perl -w |
2 | ||
3 | # | |
4 | # checkcfguse.pl | |
5 | # | |
6 | # (1) finds all the Configure/config symbols | |
7 | # | |
8 | # (2) greps for their use in the core files and shows which ones. | |
9 | # | |
10 | ||
11 | use strict; | |
12 | use warnings; | |
13 | ||
14 | my %SYM; | |
15 | ||
16 | my @PAT = | |
17 | ( | |
18 | [ | |
19 | # The format is: | |
20 | # (1) aref of filename glob patterns | |
21 | # (2) aref of qr patterns, the submatch $1 is the symbol name | |
22 | [ | |
23 | "config_h.SH", | |
24 | ], | |
25 | [ | |
26 | qr/^#\$(\w+)\s+(\w+)/, | |
27 | ], | |
28 | ], | |
29 | [ | |
30 | [ | |
95318fb6 JH |
31 | "Porting/config.sh", |
32 | "plan9/config_h.sample", | |
33 | "win32/config_H.??", | |
34 | ], | |
35 | qr{^(?:\Q/*\E)?#(?:define|undef)\s+(\w+)}, | |
36 | ], | |
37 | [ | |
38 | [ | |
39 | "configure.com", | |
40 | ], | |
41 | qr{^(\w+)="(?:define|undef)"}, | |
42 | ], | |
43 | ); | |
44 | ||
45 | { | |
46 | print STDERR "$0: Looking for symbols...\n"; | |
47 | for my $pat (@PAT) { | |
48 | for my $fn (map { glob($_) } @{ $pat->[0] }) { | |
1ae6ead9 | 49 | if (open(my $fh, '<', $fn)) { |
95318fb6 JH |
50 | while (<$fh>) { |
51 | for my $p (@$pat) { | |
52 | for my $sym (/$p/g) { | |
53 | $SYM{$sym}{$fn}++; | |
54 | } | |
55 | } | |
56 | } | |
57 | } | |
58 | } | |
59 | } | |
60 | } | |
61 | ||
62 | printf(STDERR "$0: Found %d symbols\n", scalar keys %SYM); | |
63 | ||
64 | print STDERR "$0: Looking for their uses...\n"; | |
65 | ||
66 | # Much too noisy grepping. | |
67 | delete $SYM{'_'}; | |
68 | delete $SYM{'const'}; | |
69 | ||
70 | my $SYM = join("|", sort { length($b) <=> length($a) || $a cmp $b } keys %SYM); | |
71 | ||
1ae6ead9 | 72 | open(my $mani, '<', "MANIFEST") or die "$0: Failed to open MANIFEST\n"; |
95318fb6 JH |
73 | |
74 | my %found; | |
75 | while (<$mani>) { | |
76 | if (/^(\S+)\s+/) { | |
77 | my $fn = $1; | |
78 | # Skip matches from the config files themselves, | |
79 | # from metaconfig generated files that refer to | |
80 | # the config symbols, and from pods. | |
2eb109a4 | 81 | next if $fn =~ m{^(?:config_h.SH|Configure|configure\.com|Porting/(?:config|Glossary)|(?:plan9|win32)/(?:config|(?:GNU)?[Mm]akefile)|uconfig)|\.pod$}; |
1ae6ead9 | 82 | open my $fh, '<', $fn or die qq[$0: Failed to open $fn: $!]; |
95318fb6 JH |
83 | while (<$fh>) { |
84 | while (/\b($SYM)\b/go) { | |
85 | $found{$1}{$fn}++; | |
86 | } | |
87 | } | |
88 | } | |
89 | } | |
90 | ||
91 | for my $sym (sort keys %SYM) { | |
92 | if (exists $found{$sym}) { | |
93 | my @found = keys %{$found{$sym}}; | |
94 | print "$sym\t", join(" ", sort @found), "\n"; | |
95 | } else { | |
96 | print "$sym\n"; | |
97 | } | |
98 | } |