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 [ 31 "NetWare/config_H.??", 32 "Porting/config.sh", 33 "plan9/config_h.sample", 34 "win32/config_H.??", 35 ], 36 qr{^(?:\Q/*\E)?#(?:define|undef)\s+(\w+)}, 37 ], 38 [ 39 [ 40 "configure.com", 41 ], 42 qr{^(\w+)="(?:define|undef)"}, 43 ], 44 ); 45 46{ 47 print STDERR "$0: Looking for symbols...\n"; 48 for my $pat (@PAT) { 49 for my $fn (map { glob($_) } @{ $pat->[0] }) { 50 if (open(my $fh, '<', $fn)) { 51 while (<$fh>) { 52 for my $p (@$pat) { 53 for my $sym (/$p/g) { 54 $SYM{$sym}{$fn}++; 55 } 56 } 57 } 58 } 59 } 60 } 61} 62 63printf(STDERR "$0: Found %d symbols\n", scalar keys %SYM); 64 65print STDERR "$0: Looking for their uses...\n"; 66 67# Much too noisy grepping. 68delete $SYM{'_'}; 69delete $SYM{'const'}; 70 71my $SYM = join("|", sort { length($b) <=> length($a) || $a cmp $b } keys %SYM); 72 73open(my $mani, '<', "MANIFEST") or die "$0: Failed to open MANIFEST\n"; 74 75my %found; 76while (<$mani>) { 77 if (/^(\S+)\s+/) { 78 my $fn = $1; 79 # Skip matches from the config files themselves, 80 # from metaconfig generated files that refer to 81 # the config symbols, and from pods. 82 next if $fn =~ m{^(?:config_h.SH|Configure|configure\.com|Porting/(?:config|Glossary)|(?:NetWare|plan9|win32)/(?:config|(?:GNU)?[Mm]akefile)|uconfig)|\.pod$}; 83 open my $fh, '<', $fn or die qq[$0: Failed to open $fn: $!]; 84 while (<$fh>) { 85 while (/\b($SYM)\b/go) { 86 $found{$1}{$fn}++; 87 } 88 } 89 } 90} 91 92for my $sym (sort keys %SYM) { 93 if (exists $found{$sym}) { 94 my @found = keys %{$found{$sym}}; 95 print "$sym\t", join(" ", sort @found), "\n"; 96 } else { 97 print "$sym\n"; 98 } 99} 100