This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Correct POD formatting error
[perl5.git] / Porting / checkcfguse.pl
CommitLineData
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
11use strict;
12use warnings;
13
14my %SYM;
15
16my @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
62printf(STDERR "$0: Found %d symbols\n", scalar keys %SYM);
63
64print STDERR "$0: Looking for their uses...\n";
65
66# Much too noisy grepping.
67delete $SYM{'_'};
68delete $SYM{'const'};
69
70my $SYM = join("|", sort { length($b) <=> length($a) || $a cmp $b } keys %SYM);
71
1ae6ead9 72open(my $mani, '<', "MANIFEST") or die "$0: Failed to open MANIFEST\n";
95318fb6
JH
73
74my %found;
75while (<$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
91for 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}