#!/usr/local/bin/perl

# extern $B@k8@$N<+F0@8@.!#(B
# Usage: extern.pl [cc flags ...] C file
# $B0l2s$N=hM}$G(B $B0l$D$N(B C file $B$r(B cc -E $B$9$k!#(B
# $B%=!<%9Cf$K(B PUBLIC $B$H=$>~$5$l$?$b$N$r(B extern $B@k8@$N7A$GH4$-=P$9!#(B

# $B%=!<%9%U%!%$%kL>$rBgJ8;z$K$7$F(B
# $B!V%U%!%$%kL>$G$O;H$$$=$&$@$1$I!"<1JL;R$K$O;H$($J$$!WJ8;z$r(B
# '_' $B$KCV$-49$($k!#(B
$SOURCE = uc ($ARGV[$#ARGV]);
$SOURCE =~ tr[-./:()^~][_];

# cc -E -DSKIP_PARSE -DPUBLIC=_PUBLIC $* | awk -f extern.awk extfile=$lastarg

print '/* from ', $ARGV[$#ARGV], ' */', "\n",
    '#ifndef __', $SOURCE, "\n";

open CPPOUT, "cc -E -DSKIP_PARSE -DPUBLIC=_PUBLIC @ARGV |"
    or die "failed: execute cc -E";
while (<CPPOUT>) {
    next unless /^_PUBLIC/;

# extern $B@k8@$N=PNO$N85$H$J$k(B PUBLIC $B=$>~$5$l$?9T$K$O$$$m$$$m$J(B
# $B%P%j%(!<%7%g%s$,$"$k!#(B
# _PUBLIC u8 *ks_get_memblock(u32 size, char *purpose) --> ; $B$rIU$1$k!#(B
# _PUBLIC OSTask my_task[10]; --> $B$=$N$^$^$G$h$$!#(B
# _PUBLIC int i =
# 10; --> $B$J$I!"J#?t9T$KJL$l$F$$$k$H$-(B ( int i $B$G2~9T$5$l$F$$$k$N$OL5;k!#(B)
# $B4JC1$K!"9TCf$N(B '=' $B0J9_$r<h$j=|$/!#$G$O(B $B$I$&(B ?
# ';' $B0J9_$r(B($B$"$l$P(B)$B<h$j=|$$$F(B $B:G8e$KDI2C!#(B

    chomp;
    $_ =~ s/=.*//;
    $_ =~ s/\;.*//;
    $_ =~ s/_PUBLIC/extern/;
    print $_, ";\n" ;
}
close CPPOUT;

print '#endif /* __', $SOURCE, ' */', "\n";
