File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / mkproto.pl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Feb 17 15:09:30 2012 UTC (12 years, 3 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_1_2p5, rsync3_0_9p0, RSYNC3_1_0, RSYNC3_0_9, HEAD
rsync

# generate prototypes for rsync

$old_protos = '';
if (open(IN, 'proto.h')) {
    $old_protos = join('', <IN>);
    close IN;
}

%FN_MAP = (
    BOOL => 'BOOL ',
    CHAR => 'char ',
    INTEGER => 'int ',
    STRING => 'char *',
);

$inheader = 0;
$protos = qq|/* This file is automatically generated with "make proto". DO NOT EDIT */\n\n|;

while (<>) {
    if ($inheader) {
	if (/[)][ \t]*$/) {
	    $inheader = 0;
	    s/$/;/;
	}
	$protos .= $_;
    } elsif (/^FN_(LOCAL|GLOBAL)_([^(]+)\(([^,()]+)/) {
	$ret = $FN_MAP{$2};
	$func = $3;
	$arg = $1 eq 'LOCAL' ? 'int module_id' : 'void';
	$protos .= "$ret$func($arg);\n";
    } elsif (/^static|^extern/ || /[;]/ || !/^[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;
}

open(OUT, '>proto.h-tstamp') and close OUT;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>