1# -*- perl -*- 2 3# Crude template instantiation hack. 4# 5# The template named on the command line maps to a perl module t_$foo 6# which defines certain methods including variable processing and 7# output generation. It can also suck in additional template modules 8# for internal use. One output file is generated, which typically 9# contains structures and inline functions, and should be included by 10# other files which will define, for example, the typedefname 11# parameters supplied to this script. 12 13# To do: 14# Find a way to make dependency generation automatic. 15# Make it less gross. 16 17sub usage { 18 print STDERR "usage: $0 TemplateName [-oOutputFile] PARM=value ...\n"; 19 print STDERR " where acceptable PARM values depend on the template\n"; 20 exit(1); 21} 22 23my $orig_args = join(" ", @ARGV); 24my $templatename = shift @ARGV || &usage; 25my $outfile = shift @ARGV || &usage; 26my $x; 27 28eval "require t_$templatename;" || die; 29eval "\$x = new t_$templatename;" || die; 30 31sub getparms { 32 my $arg; 33 my $outfile; 34 my %allowed_parms = (); 35 36 foreach $arg (@ARGV) { 37 my @words = split '=', $arg; 38 if ($#words != 1) { 39 print STDERR "$0: $arg : #words = $#words\n"; 40 &usage; 41 } 42 $x->setparm($words[0], $words[1]); 43 } 44} 45 46sub generate { 47 open OUTFILE, ">$outfile" || die; 48 print OUTFILE "/*\n"; 49 print OUTFILE " * This file is generated, please don't edit it.\n"; 50 print OUTFILE " * script: $0\n"; 51 print OUTFILE " * args: $orig_args\n"; 52 print OUTFILE " * The rest of this file is copied from a template, with\n"; 53 print OUTFILE " * substitutions. See the template for copyright info.\n"; 54 print OUTFILE " */\n"; 55 $x->output(\*OUTFILE); 56 close OUTFILE; 57} 58 59&getparms; 60&generate; 61exit (0); 62