I don't think trying to bracket the hires time with lores
[p5sagit/p5-mst-13.2.git] / vos / config.pl
CommitLineData
c287c78d 1# This file fills in a config_h.SH template based on the data
24e8e380 2# of the file config.def and outputs a config.h.
3#
4# Written January 24, 2000 by Jarkko Hietaniemi [jhi@iki.fi]
5# Modified February 2, 2000 by Paul Green [Paul_Green@stratus.com]
5b8c1387 6# Modified October 23, 2000 by Paul Green [Paul_Green@stratus.com]
24e8e380 7
8#
9# Read in the definitions file
10#
c287c78d 11
12if (open(CONFIG_DEF, "config.def")) {
13 while (<CONFIG_DEF>) {
24e8e380 14 if (/^([^=]+)='(.*)'$/) {
15 my ($var, $val) = ($1, $2);
16 $define{$var} = $val;
5b8c1387 17 $used{$var} = 0;
24e8e380 18 } else {
19 warn "config.def: $.: illegal line: $_";
20 }
c287c78d 21 }
22} else {
23 die "$0: Cannot open config.def: $!";
24}
25
24e8e380 26close (CONFIG_DEF);
27
28#
29# Open the template input file.
30#
31
5b8c1387 32$lineno = 0;
33unless (open(CONFIG_SH, "../config_h.SH")) {
34 die "$0: Cannot open ../config_h.SH: $!";
24e8e380 35}
36
37#
38# Open the output file.
39#
40
41unless (open(CONFIG_H, ">config.h.new")) {
42 die "$0: Cannot open config.h.new for output: $!";
43}
44
45#
46# Skip lines before the first !GROK!THIS!
47#
48
49while (<CONFIG_SH>) {
5b8c1387 50 $lineno = $lineno + 1;
24e8e380 51 last if /^sed <<!GROK!THIS!/;
52}
53
54#
55# Process the rest of the file, a line at a time.
56# Stop when the next !GROK!THIS! is found.
57#
58
59while (<CONFIG_SH>) {
5b8c1387 60 $lineno = $lineno + 1;
24e8e380 61 last if /^!GROK!THIS!/;
62#
5b8c1387 63# The definition of SITEARCH and SITEARCH_EXP has to be commented-out.
64# The easiest way to do this is to special-case it here.
65#
66 if (/^#define SITEARCH*/) {
67 s@(^.*$)@/*$1@;
68 }
69#
24e8e380 70# The case of #$d_foo at the BOL has to be handled carefully.
71# If $d_foo is "undef", then we must first comment out the entire line.
72#
5b8c1387 73 if (/^#(\$\w+)/) {
74 if (exists $define{$1}) {
75 $used{$1}=1;
76 s@^#(\$\w+)@("$define{$1}" eq "undef") ?
77 "/*#define":"#$define{$1}"@e;
78 }
c287c78d 79 }
24e8e380 80#
81# There could be multiple $variables on this line.
82# Find and replace all of them.
83#
84 if (/(\$\w+)/) {
5b8c1387 85 s/(\$\w+)/(exists $define{$1}) ?
86 (($used{$1}=1),$define{$1}) :
87 ((print "Undefined keyword $1 on line $lineno\n"),$1)/ge;
24e8e380 88 print CONFIG_H;
89 }
90#
91# There are no variables, just print the line out.
92#
93 else {
94 print CONFIG_H;
c287c78d 95 }
c287c78d 96}
24e8e380 97
98unless (close (CONFIG_H)) {
99 die "$0: Cannot close config.h.new: $!";
100 }
101
102close (CONFIG_SH);
5b8c1387 103
104while (($key,$value) = each %used) {
105 if ($value == 0) {
106 print "Unused keyword definition: $key\n";
107 }
108}
109