summaryrefslogtreecommitdiff
path: root/vos/config.pl
diff options
context:
space:
mode:
Diffstat (limited to 'vos/config.pl')
-rw-r--r--vos/config.pl108
1 files changed, 72 insertions, 36 deletions
diff --git a/vos/config.pl b/vos/config.pl
index 33629d7081..c6014ade9a 100644
--- a/vos/config.pl
+++ b/vos/config.pl
@@ -1,48 +1,84 @@
# This file fills in a config_h.SH template based on the data
-# of the file config.def and outputs a config.sh.
+# of the file config.def and outputs a config.h.
+#
+# Written January 24, 2000 by Jarkko Hietaniemi [jhi@iki.fi]
+# Modified February 2, 2000 by Paul Green [Paul_Green@stratus.com]
+
+#
+# Read in the definitions file
+#
if (open(CONFIG_DEF, "config.def")) {
while (<CONFIG_DEF>) {
- if (/^([^=]+)='(.+)'$/) {
- my ($var, $val) = ($1, $2);
- $define{$var} = $val;
- } else {
- warn "config.def: $.: illegal line: $_";
- }
+ if (/^([^=]+)='(.*)'$/) {
+ my ($var, $val) = ($1, $2);
+ $define{$var} = $val;
+ } else {
+ warn "config.def: $.: illegal line: $_";
+ }
}
} else {
die "$0: Cannot open config.def: $!";
}
-if (open(CONFIG_SH, "config_h.SH_orig")) {
- while (<CONFIG_SH>) {
- last if /^sed <<!GROK!THIS!/;
+close (CONFIG_DEF);
+
+#
+# Open the template input file.
+#
+
+unless (open(CONFIG_SH, "config_h.SH_orig")) {
+ die "$0: Cannot open config_h.SH_orig: $!";
+}
+
+#
+# Open the output file.
+#
+
+unless (open(CONFIG_H, ">config.h.new")) {
+ die "$0: Cannot open config.h.new for output: $!";
+}
+
+#
+# Skip lines before the first !GROK!THIS!
+#
+
+while (<CONFIG_SH>) {
+ last if /^sed <<!GROK!THIS!/;
+}
+
+#
+# Process the rest of the file, a line at a time.
+# Stop when the next !GROK!THIS! is found.
+#
+
+while (<CONFIG_SH>) {
+ last if /^!GROK!THIS!/;
+#
+# The case of #$d_foo at the BOL has to be handled carefully.
+# If $d_foo is "undef", then we must first comment out the entire line.
+#
+ if (/^#\$\w+/) {
+ s@^#(\$\w+)@("$define{$1}" eq "undef")?"/*#define":"#$define{$1}"@e;
}
- while (<CONFIG_SH>) {
- last if /^!GROK!THIS!/;
- s/\\\$Id:/\$Id:/;
- s/\$package/perl5/;
- s/\$cf_time/localtime/e;
- s/\$myuname/$define{OSNAME}/;
- s/\$seedfunc/$define{seedfunc}/;
- if (/^#\$\w+\s+(\w+)/) {
- if (exists $define{$1}) {
- if ($define{$1} eq 'define') {
- print "#define $1\t/**/\n";
- } else {
- print "#define $1 $define{$1}\n";
- }
- } else {
- print "/*#define $1\t/**/\n";
- }
- } elsif (/^#define\s+(\S+)/) {
- print "#define $1 $define{$1}\n";
- } elsif (s/\$cpp_stuff/$define{cpp_stuff}/g) {
- print;
- } else {
- print;
- }
+#
+# There could be multiple $variables on this line.
+# Find and replace all of them.
+#
+ if (/(\$\w+)/) {
+ s/(\$\w+)/(exists $define{$1}) ? $define{$1} : $1/ge;
+ print CONFIG_H;
+ }
+#
+# There are no variables, just print the line out.
+#
+ else {
+ print CONFIG_H;
}
-} else {
- die "$0: Cannot open config_h.SH_orig: $!";
}
+
+unless (close (CONFIG_H)) {
+ die "$0: Cannot close config.h.new: $!";
+ }
+
+close (CONFIG_SH);