summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/.gitignore1
-rw-r--r--src/Makefile.housekeeping4
-rw-r--r--src/config.h2
-rwxr-xr-xsrc/util/mkconfig.pl37
4 files changed, 32 insertions, 12 deletions
diff --git a/src/.gitignore b/src/.gitignore
index cc8e33e2..413f8141 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -2,3 +2,4 @@
.echocheck
TAGS*
bin*
+config-local.h
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
index 216f29ec..bbea2a56 100644
--- a/src/Makefile.housekeeping
+++ b/src/Makefile.housekeeping
@@ -121,8 +121,8 @@ CFLAGS += $(SP_FLAGS)
CFLAGS += -include compiler.h
# config/%.h files are generated from config.h using mkconfig.pl
-config/%.h : config.h
- $(MKCONFIG) $<
+config/%.h : config*.h
+ $(MKCONFIG) config.h
CLEANUP += config/*.h
# SRCDIRS lists all directories containing source files.
diff --git a/src/config.h b/src/config.h
index 2d8faa68..cec832c3 100644
--- a/src/config.h
+++ b/src/config.h
@@ -166,3 +166,5 @@
#undef NULL_TRAP /* Attempt to catch NULL function calls */
/* @END general.h */
+
+/* @TRYSOURCE config-local.h */
diff --git a/src/util/mkconfig.pl b/src/util/mkconfig.pl
index 6a9c2f14..e55c2ca8 100755
--- a/src/util/mkconfig.pl
+++ b/src/util/mkconfig.pl
@@ -7,6 +7,7 @@ use warnings;
my $cfgdir = "config";
my $config_h = shift || "config.h";
+my @input_files;
# Read in a whole file
#
@@ -110,15 +111,15 @@ sub postamble {
return "\n#endif /* $guard */\n";
}
-# Get the new configuration by splitting config.h file using the
-# @BEGIN/@END tags
+# Parse one config.h file into an existing configuration
#
-sub new_config {
+sub parse_config {
my $file = shift;
-
- my $cfg = {};
+ my $cfg = shift;
my $cursor = "";
+ push ( @input_files, $file );
+
open my $fh, "<$file" or die "Could not open $file: $!\n";
while ( <$fh> ) {
if ( ( my $newcursor, my $suffix ) = /\@BEGIN\s+(\w+\.h)(.*)$/ ) {
@@ -133,14 +134,28 @@ sub new_config {
." at $file line $.\n" unless $cursor eq $oldcursor;
$cfg->{$cursor} .= $prefix."*/\n";
$cursor = "";
+ } elsif ( ( my $newfile ) = /\@TRYSOURCE\s+([\w\-]+\.h)/ ) {
+ die "Missing \"\@END $cursor\" before \"\@TRYSOURCE $newfile\""
+ ." at $file line $.\n" if $cursor;
+ parse_config ( $newfile, $cfg ) if -e $newfile;
} else {
$cfg->{$cursor} .= $_ if $cursor;
}
}
close $fh;
die "Missing \"\@END $cursor\" in $file\n" if $cursor;
+}
- foreach $cursor ( keys %$cfg ) {
+# Get the new configuration by splitting config.h file using the
+# @BEGIN/@END tags
+#
+sub new_config {
+ my $file = shift;
+ my $cfg = {};
+
+ parse_config ( $file, $cfg );
+
+ foreach my $cursor ( keys %$cfg ) {
$cfg->{$cursor} .= postamble ( $cursor );
}
@@ -180,9 +195,11 @@ foreach my $file ( keys %$new ) {
}
# If we now have fragments that are older than config.h, set the
-# timestamp on config.h to match the oldest fragment, to prevent make
-# from always attempting to rebuild the fragments.
+# timestamp on each input file to match the oldest fragment, to
+# prevent make from always attempting to rebuild the fragments.
#
-if ( $oldest < file_mtime ( $config_h ) ) {
- utime time(), $oldest, $config_h or die "Could not touch $config_h: $!\n";
+foreach my $file ( @input_files ) {
+ if ( $oldest < file_mtime ( $file ) ) {
+ utime time(), $oldest, $file or die "Could not touch $file: $!\n";
+ }
}