Files
heimdal/cf/make-proto.pl
Assar Westerlund c08ea286e9 fix __P for stone age mode
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3270 ec53bebd-3082-4978-b11e-865c3cabbd6b
1997-08-29 01:13:17 +00:00

92 lines
1.4 KiB
Perl

# Make prototypes from .c files
# $Id$
$brace = 0;
$line = "";
$debug = 0;
while(<>) {
print $brace, " ", $_ if($debug);
if(/^\#if 0/) {
$if_0 = 1;
}
if($if_0 && /^\#endif/) {
$if_0 = 0;
}
if($if_0) { next }
if(/^\s*\#/) {
next;
}
if(/^\s*$/) {
$line = "";
next;
}
if(/\{/){
if($line =~ /\)\s$/){
$_ = $line;
s/^\s*//;
s/\s$//;
s/\s+/ /g;
if(!/^static/){
# remove outer ()
s/\s*\(/@/;
s/\)$/@/;
# remove , within ()
while(s/\(([^()]*),(.*)\)/($1\$$2)/g){}
s/,\s*/,\n\t/g;
# fix removed ,
s/\$/,/g;
# match function name
/([a-zA-Z0-9_]+)\s*@/;
$f = $1;
# only add newline if more than one parameter
if(/,/){
s/@/ __P((\n\t/;
}else{
s/@/ __P((/;
}
s/@/))/;
$_ = $_ . ";";
# insert newline before function name
s/(.*)\s([a-zA-Z0-9_]+ __P)/$1\n$2/;
$funcs{$f} = $_;
}
}
$line = "";
$brace++;
}
if(/\}/){
$brace--;
}
if(/^\}/){
$brace = 0;
}
if($brace == 0) {
$line = $line . " " . $_;
}
}
print '/* This is a generated file */
#ifndef __krb5_protos_h__
#define __krb5_protos_h__
#ifdef __STDC__
#include <stdarg.h>
#ifndef __P
#define __P(x) x
#endif
#else
#ifndef __P
#define __P(x) ()
#endif
#endif
';
foreach(sort keys %funcs){
if(/^(main)$/) { next }
print $funcs{$_}, "\n\n";
}
print "#endif /* __krb5_protos_h__ */\n";