# -*- perl -*-
# Crude template instantiation hack.
#
# The template named on the command line maps to a perl module t_$foo
# which defines certain methods including variable processing and
# output generation. It can also suck in additional template modules
# for internal use. One output file is generated, which typically
# contains structures and inline functions, and should be included by
# other files which will define, for example, the typedefname
# parameters supplied to this script.
# To do:
# Find a way to make dependency generation automatic.
# Make it less gross.
sub usage {
print STDERR "usage: $0 TemplateName [-oOutputFile] PARM=value ...\n";
print STDERR " where acceptable PARM values depend on the template\n";
exit(1);
}
my $orig_args = join(" ", @ARGV);
my $templatename = shift @ARGV || &usage;
my $outfile = shift @ARGV || &usage;
my $x;
eval "require t_$templatename;" || die;
eval "\$x = new t_$templatename;" || die;
sub getparms {
my $arg;
my $outfile;
my %allowed_parms = ();
foreach $arg (@ARGV) {
my @words = split '=', $arg;
if ($#words != 1) {
print STDERR "$0: $arg : #words = $#words\n";
&usage;
}
$x->setparm($words[0], $words[1]);
}
}
sub generate {
open OUTFILE, ">$outfile" || die;
print OUTFILE "/*\n";
print OUTFILE " * This file is generated, please don't edit it.\n";
print OUTFILE " * script: $0\n";
print OUTFILE " * args: $orig_args\n";
print OUTFILE " * The rest of this file is copied from a template, with\n";
print OUTFILE " * substitutions. See the template for copyright info.\n";
print OUTFILE " */\n";
$x->output(\*OUTFILE);
close OUTFILE;
}
&getparms;
&generate;
exit (0);