Let's try using perl for building proto.h.

This commit is contained in:
Wayne Davison
2007-11-09 17:40:56 +00:00
parent 8aeac05d98
commit 0c270e48af
2 changed files with 52 additions and 6 deletions

51
mkproto.pl Normal file
View File

@@ -0,0 +1,51 @@
# generate prototypes for rsync
use strict;
my $old_protos = '';
if (open(IN, '<', 'proto.h')) {
$old_protos = join('', <IN>);
close IN;
}
my %FN_MAP = (
BOOL => 'BOOL ',
CHAR => 'char ',
INTEGER => 'int ',
STRING => 'char *',
);
my $inheader = 0;
my $protos = qq|/* This file is automatically generated with "make proto". DO NOT EDIT */\n\n|;
while (<>) {
if ($inheader) {
if (/[)][ \t]*$/) {
$inheader = 0;
s/$/;/;
}
$protos .= $_;
}
if (/^FN_(LOCAL|GLOBAL)_([^(]+)\(([^,()]+)/) {
my $ret = $FN_MAP{$2};
my $func = $3;
my $arg = $1 eq 'LOCAL' ? 'int ' : 'void';
$protos .= "$ret$func($arg);\n";
} elsif (/^static|^extern/ || /[;]/) {
;
} elsif (!/^[A-Za-z][A-Za-z0-9_]* /) {
;
} elsif (/[(].*[)][ \t]*$/) {
s/$/;/;
$protos .= $_;
} elsif (/[(]/) {
$inheader = 1;
$protos .= $_;
}
}
if ($old_protos ne $protos) {
open(OUT, '>', 'proto.h') or die $!;
print OUT $protos;
close OUT;
}

View File

@@ -9,12 +9,7 @@ config.h.in: configure.in aclocal.m4
autoheader && touch config.h.in
proto.h: *.c lib/compat.c
cat *.c lib/compat.c | awk -f mkproto.awk >proto.h.new
if diff proto.h proto.h.new >/dev/null 2>&1; then \
rm proto.h.new; \
else \
mv proto.h.new proto.h; \
fi
perl mkproto.pl *.c lib/compat.c
man: rsync.1 rsyncd.conf.5