If a module has no path setting, return an error.
[rsync/rsync.git] / mkproto.pl
CommitLineData
0c270e48 1# generate prototypes for rsync
0c270e48 2
4da09a65 3$old_protos = '';
ab966109 4if (open(IN, 'proto.h')) {
0c270e48
WD
5 $old_protos = join('', <IN>);
6 close IN;
7}
8
4da09a65 9%FN_MAP = (
0c270e48
WD
10 BOOL => 'BOOL ',
11 CHAR => 'char ',
12 INTEGER => 'int ',
13 STRING => 'char *',
14);
15
4da09a65
WD
16$inheader = 0;
17$protos = qq|/* This file is automatically generated with "make proto". DO NOT EDIT */\n\n|;
0c270e48
WD
18
19while (<>) {
20 if ($inheader) {
21 if (/[)][ \t]*$/) {
22 $inheader = 0;
23 s/$/;/;
24 }
25 $protos .= $_;
4da09a65
WD
26 } elsif (/^FN_(LOCAL|GLOBAL)_([^(]+)\(([^,()]+)/) {
27 $ret = $FN_MAP{$2};
28 $func = $3;
62282398 29 $arg = $1 eq 'LOCAL' ? 'int module_id' : 'void';
0c270e48 30 $protos .= "$ret$func($arg);\n";
4da09a65 31 } elsif (/^static|^extern/ || /[;]/ || !/^[A-Za-z][A-Za-z0-9_]* /) {
0c270e48
WD
32 ;
33 } elsif (/[(].*[)][ \t]*$/) {
34 s/$/;/;
35 $protos .= $_;
36 } elsif (/[(]/) {
37 $inheader = 1;
38 $protos .= $_;
39 }
40}
41
42if ($old_protos ne $protos) {
ab966109 43 open(OUT, '>proto.h') or die $!;
0c270e48
WD
44 print OUT $protos;
45 close OUT;
46}
613c2d44
WD
47
48open(OUT, '>proto.h-tstamp') and close OUT;