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 | # Modified October 23, 2000 by Paul Green [Paul_Green@stratus.com]
|
---|
7 |
|
---|
8 | #
|
---|
9 | # Read in the definitions file
|
---|
10 | #
|
---|
11 |
|
---|
12 | if (open(CONFIG_DEF, "config.def")) {
|
---|
13 | while (<CONFIG_DEF>) {
|
---|
14 | if (/^([^=]+)='(.*)'$/) {
|
---|
15 | my ($var, $val) = ($1, $2);
|
---|
16 | $define{$var} = $val;
|
---|
17 | $used{$var} = 0;
|
---|
18 | } else {
|
---|
19 | warn "config.def: $.: illegal line: $_";
|
---|
20 | }
|
---|
21 | }
|
---|
22 | } else {
|
---|
23 | die "$0: Cannot open config.def: $!";
|
---|
24 | }
|
---|
25 |
|
---|
26 | close (CONFIG_DEF);
|
---|
27 |
|
---|
28 | #
|
---|
29 | # Open the template input file.
|
---|
30 | #
|
---|
31 |
|
---|
32 | $lineno = 0;
|
---|
33 | unless (open(CONFIG_SH, "../config_h.SH")) {
|
---|
34 | die "$0: Cannot open ../config_h.SH: $!";
|
---|
35 | }
|
---|
36 |
|
---|
37 | #
|
---|
38 | # Open the output file.
|
---|
39 | #
|
---|
40 |
|
---|
41 | unless (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 |
|
---|
49 | while (<CONFIG_SH>) {
|
---|
50 | $lineno = $lineno + 1;
|
---|
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 |
|
---|
59 | while (<CONFIG_SH>) {
|
---|
60 | $lineno = $lineno + 1;
|
---|
61 | last if /^!GROK!THIS!/;
|
---|
62 | #
|
---|
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 | #
|
---|
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 | #
|
---|
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 | }
|
---|
79 | }
|
---|
80 | #
|
---|
81 | # There could be multiple $variables on this line.
|
---|
82 | # Find and replace all of them.
|
---|
83 | #
|
---|
84 | if (/(\$\w+)/) {
|
---|
85 | s/(\$\w+)/(exists $define{$1}) ?
|
---|
86 | (($used{$1}=1),$define{$1}) :
|
---|
87 | ((print "Undefined keyword $1 on line $lineno\n"),$1)/ge;
|
---|
88 | print CONFIG_H;
|
---|
89 | }
|
---|
90 | #
|
---|
91 | # There are no variables, just print the line out.
|
---|
92 | #
|
---|
93 | else {
|
---|
94 | print CONFIG_H;
|
---|
95 | }
|
---|
96 | }
|
---|
97 |
|
---|
98 | unless (close (CONFIG_H)) {
|
---|
99 | die "$0: Cannot close config.h.new: $!";
|
---|
100 | }
|
---|
101 |
|
---|
102 | close (CONFIG_SH);
|
---|
103 |
|
---|
104 | while (($key,$value) = each %used) {
|
---|
105 | if ($value == 0 && $key ne '$undef') {
|
---|
106 | print "Unused keyword definition: $key\n";
|
---|
107 | }
|
---|
108 | }
|
---|
109 |
|
---|