This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: [PATCH] perlreguts.pod: use the unicode name for ß and show the codepoint
[perl5.git] / Porting / checkcfgvar.pl
CommitLineData
522c08cc
RGS
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#
a0e39d89
AT
9# VMS is probably not handled properly here, due to their own
10# rather elaborate DCL scripting.
522c08cc
RGS
11#
12
13use strict;
14
15my $MASTER_CFG = "config_h.SH";
16my %MASTER_CFG;
17
18my @CFG = (
19 # This list contains both 5.8.x and 5.9.x files,
20 # we check from MANIFEST whether they are expected to be present.
21 "Cross/config.sh-arm-linux",
22 "epoc/config.sh",
23 "NetWare/config.wc",
24 "symbian/config.sh",
25 "uconfig.sh",
26 "plan9/config_sh.sample",
27 "vos/config.alpha.def",
28 "vos/config.ga.def",
29 "win32/config.bc",
30 "win32/config.gc",
31 "win32/config.vc",
6ab0e26e 32 "win32/config.vc64",
26d21fa1 33 "win32/config.ce",
522c08cc 34 "wince/config.ce",
a0e39d89 35 "configure.com",
522c08cc
RGS
36 );
37
38sub read_file {
39 my ($fn, $sub) = @_;
40 if (open(my $fh, $fn)) {
41 local $_;
42 while (<$fh>) {
43 &$sub;
44 }
45 } else {
46 die "$0: Failed to open '$fn' for reading: $!\n";
47 }
48}
49
50sub config_h_SH_reader {
51 my $cfg = shift;
52 return sub {
2eacba2f 53 while (/[^\\]\$([a-z]\w+)/g) {
522c08cc
RGS
54 my $v = $1;
55 next if $v =~ /^(CONFIG_H|CONFIG_SH)$/;
56 $cfg->{$v}++;
57 }
58 }
59}
60
61read_file($MASTER_CFG,
62 config_h_SH_reader(\%MASTER_CFG));
63
64my %MANIFEST;
65
66read_file("MANIFEST",
67 sub {
68 $MANIFEST{$1}++ if /^(.+?)\t/;
69 });
70
71my @MASTER_CFG = sort keys %MASTER_CFG;
72
73sub check_cfg {
74 my ($fn, $cfg) = @_;
75 for my $v (@MASTER_CFG) {
76 print "$fn: missing '$v'\n" unless exists $cfg->{$v};
77 }
78}
79
80for my $cfg (@CFG) {
81 unless (exists $MANIFEST{$cfg}) {
82 print "[skipping not-expected '$cfg']\n";
83 next;
84 }
85 my %cfg;
86 read_file($cfg,
87 sub {
88 return if /^\#/ || /^\s*$/;
0ae3ae8f 89 if ($cfg eq 'configure.com') {
c526aa63 90 s/(\s*!.*|\s*)$//; # remove trailing comments or whitespace
0ae3ae8f
CB
91 return if ! /^\$\s+WC "(\w+)='(.*)'"$/;
92 }
522c08cc
RGS
93 # foo='bar'
94 # foo=bar
95 # $foo='bar' # VOS 5.8.x specialty
96 # $foo=bar # VOS 5.8.x specialty
97 if (/^\$?(\w+)='(.*)'$/) {
98 $cfg{$1}++;
99 }
100 elsif (/^\$?(\w+)=(.*)$/) {
101 $cfg{$1}++;
a0e39d89 102 }
b89d399a 103 elsif (/^\$\s+WC "(\w+)='(.*)'"$/) {
a0e39d89 104 $cfg{$1}++;
522c08cc
RGS
105 } else {
106 warn "$cfg:$.:$_";
107 }
108 });
fe817649
JH
109 if ($cfg eq 'configure.com') {
110 $cfg{startperl}++; # Cheat.
111 }
522c08cc
RGS
112 check_cfg($cfg, \%cfg);
113}