Skip to content

Commit

Permalink
[util] config-local.h to avoid accidental commits
Browse files Browse the repository at this point in the history
During development it is often handy to change the config.h options from
their defaults, for example to enable debugging features.

To prevent accidental commits of debugging config.h changes, mdc
suggested having a config-local.h that is excluded from source control.
This file acts as a temporary config.h and can override any of the
defaults.

This commit is an attempt to implement the config-local.h feature.

The config.h file now has the following as its last line:
/* @TRYSOURCE config-local.h */

The @TRYSOURCE directive causes config-local.h to be included at that
point in the file.  If config-local.h does not exist, no error will be
printed and parsing will continue as normal.  Therefore, mkconfig.pl is
"trying" to "source" config-local.h.
  • Loading branch information
stefanha authored and Michael Brown committed Jun 4, 2008
1 parent 842165e commit f866b17
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 12 deletions.
1 change: 1 addition & 0 deletions src/.gitignore
Expand Up @@ -2,3 +2,4 @@
.echocheck
TAGS*
bin*
config-local.h
4 changes: 2 additions & 2 deletions src/Makefile.housekeeping
Expand Up @@ -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.
Expand Down
2 changes: 2 additions & 0 deletions src/config.h
Expand Up @@ -166,3 +166,5 @@
#undef NULL_TRAP /* Attempt to catch NULL function calls */

/* @END general.h */

/* @TRYSOURCE config-local.h */
37 changes: 27 additions & 10 deletions src/util/mkconfig.pl
Expand Up @@ -7,6 +7,7 @@

my $cfgdir = "config";
my $config_h = shift || "config.h";
my @input_files;

# Read in a whole file
#
Expand Down Expand Up @@ -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)(.*)$/ ) {
Expand All @@ -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 );
}

Expand Down Expand Up @@ -180,9 +195,11 @@ sub new_config {
}

# 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";
}
}

0 comments on commit f866b17

Please sign in to comment.