# generate prototypes for rsync use strict; my $old_protos = ''; if (open(IN, '<', 'proto.h')) { $old_protos = join('', ); 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; }