1 | #!/usr/bin/perl -w
|
---|
2 |
|
---|
3 | #
|
---|
4 | # Check that the various config.sh-clones have (at least) all the
|
---|
5 | # same symbols as the top-level config_h.SH so that the (potentially)
|
---|
6 | # needed symbols are not lagging after how Configure thinks the world
|
---|
7 | # is laid out.
|
---|
8 | #
|
---|
9 | # VMS is not handled here, due to their own rather elaborate DCL scripting.
|
---|
10 | #
|
---|
11 |
|
---|
12 | use strict;
|
---|
13 |
|
---|
14 | my $MASTER_CFG = "config_h.SH";
|
---|
15 | my %MASTER_CFG;
|
---|
16 |
|
---|
17 | my @CFG = (
|
---|
18 | # This list contains both 5.8.x and 5.9.x files,
|
---|
19 | # we check from MANIFEST whether they are expected to be present.
|
---|
20 | "Cross/config.sh-arm-linux",
|
---|
21 | "epoc/config.sh",
|
---|
22 | "NetWare/config.wc",
|
---|
23 | "symbian/config.sh",
|
---|
24 | "uconfig.sh",
|
---|
25 | "plan9/config_sh.sample",
|
---|
26 | "vos/config.alpha.def",
|
---|
27 | "vos/config.ga.def",
|
---|
28 | "win32/config.bc",
|
---|
29 | "win32/config.gc",
|
---|
30 | "win32/config.vc",
|
---|
31 | "win32/config.vc64",
|
---|
32 | "wince/config.ce",
|
---|
33 | );
|
---|
34 |
|
---|
35 | sub read_file {
|
---|
36 | my ($fn, $sub) = @_;
|
---|
37 | if (open(my $fh, $fn)) {
|
---|
38 | local $_;
|
---|
39 | while (<$fh>) {
|
---|
40 | &$sub;
|
---|
41 | }
|
---|
42 | } else {
|
---|
43 | die "$0: Failed to open '$fn' for reading: $!\n";
|
---|
44 | }
|
---|
45 | }
|
---|
46 |
|
---|
47 | sub config_h_SH_reader {
|
---|
48 | my $cfg = shift;
|
---|
49 | return sub {
|
---|
50 | return if 1../^echo \"Extracting \$CONFIG_H/;
|
---|
51 | while (/[^\\]\$(\w+)/g) {
|
---|
52 | my $v = $1;
|
---|
53 | next if $v =~ /^(CONFIG_H|CONFIG_SH)$/;
|
---|
54 | $cfg->{$v}++;
|
---|
55 | }
|
---|
56 | }
|
---|
57 | }
|
---|
58 |
|
---|
59 | read_file($MASTER_CFG,
|
---|
60 | config_h_SH_reader(\%MASTER_CFG));
|
---|
61 |
|
---|
62 | my %MANIFEST;
|
---|
63 |
|
---|
64 | read_file("MANIFEST",
|
---|
65 | sub {
|
---|
66 | $MANIFEST{$1}++ if /^(.+?)\t/;
|
---|
67 | });
|
---|
68 |
|
---|
69 | my @MASTER_CFG = sort keys %MASTER_CFG;
|
---|
70 |
|
---|
71 | sub check_cfg {
|
---|
72 | my ($fn, $cfg) = @_;
|
---|
73 | for my $v (@MASTER_CFG) {
|
---|
74 | print "$fn: missing '$v'\n" unless exists $cfg->{$v};
|
---|
75 | }
|
---|
76 | }
|
---|
77 |
|
---|
78 | for my $cfg (@CFG) {
|
---|
79 | unless (exists $MANIFEST{$cfg}) {
|
---|
80 | print "[skipping not-expected '$cfg']\n";
|
---|
81 | next;
|
---|
82 | }
|
---|
83 | my %cfg;
|
---|
84 | read_file($cfg,
|
---|
85 | sub {
|
---|
86 | return if /^\#/ || /^\s*$/;
|
---|
87 | # foo='bar'
|
---|
88 | # foo=bar
|
---|
89 | # $foo='bar' # VOS 5.8.x specialty
|
---|
90 | # $foo=bar # VOS 5.8.x specialty
|
---|
91 | if (/^\$?(\w+)='(.*)'$/) {
|
---|
92 | $cfg{$1}++;
|
---|
93 | }
|
---|
94 | elsif (/^\$?(\w+)=(.*)$/) {
|
---|
95 | $cfg{$1}++;
|
---|
96 | } else {
|
---|
97 | warn "$cfg:$.:$_";
|
---|
98 | }
|
---|
99 | });
|
---|
100 | check_cfg($cfg, \%cfg);
|
---|
101 | }
|
---|