note about undocumented caller() return value (from M.J.T. Guy);
[p5sagit/p5-mst-13.2.git] / vos / config.pl
1 # This file fills in a config_h.SH template based on the data
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]
6
7 #
8 # Read in the definitions file
9 #
10
11 if (open(CONFIG_DEF, "config.def")) {
12     while (<CONFIG_DEF>) {
13         if (/^([^=]+)='(.*)'$/) {
14             my ($var, $val) = ($1, $2);
15             $define{$var} = $val;
16         } else {
17             warn "config.def: $.: illegal line: $_";
18         }
19     }
20 } else {
21     die "$0: Cannot open config.def: $!";
22 }
23
24 close (CONFIG_DEF);
25
26 #
27 # Open the template input file.
28 #
29
30 unless (open(CONFIG_SH, "config_h.SH_orig")) {
31     die "$0: Cannot open config_h.SH_orig: $!";
32 }
33
34 #
35 # Open the output file.
36 #
37
38 unless (open(CONFIG_H, ">config.h.new")) {
39     die "$0: Cannot open config.h.new for output: $!";
40 }
41
42 #
43 #   Skip lines before the first !GROK!THIS!
44 #
45
46 while (<CONFIG_SH>) {
47     last if /^sed <<!GROK!THIS!/;
48 }
49
50 #
51 #   Process the rest of the file, a line at a time.
52 #   Stop when the next !GROK!THIS! is found.
53 #
54
55 while (<CONFIG_SH>) {
56     last if /^!GROK!THIS!/;
57 #
58 #   The case of #$d_foo at the BOL has to be handled carefully.
59 #   If $d_foo is "undef", then we must first comment out the entire line.
60 #
61     if (/^#\$\w+/) {
62         s@^#(\$\w+)@("$define{$1}" eq "undef")?"/*#define":"#$define{$1}"@e;
63     }
64 #
65 #   There could be multiple $variables on this line.
66 #   Find and replace all of them.
67 #
68     if (/(\$\w+)/) {
69         s/(\$\w+)/(exists $define{$1}) ? $define{$1} : $1/ge;
70         print CONFIG_H;
71     }
72 #
73 #   There are no variables, just print the line out.
74 #
75     else {
76         print CONFIG_H;
77     }
78 }
79
80 unless (close (CONFIG_H)) {
81     die "$0: Cannot close config.h.new: $!";
82     }
83
84 close (CONFIG_SH);