Blame src/util/ktemplate.pm

Packit fd8b60
# -*- perl -*-
Packit fd8b60
Packit fd8b60
sub usage {
Packit fd8b60
    print STDERR "usage: $0 -oOutputFile PARM=value ...\n";
Packit fd8b60
    print STDERR "  where acceptable PARM values are:\n";
Packit fd8b60
    print STDERR "\t", join(' ', @parms), "\n";
Packit fd8b60
    exit(1);
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
%parm = ();
Packit fd8b60
sub run {
Packit fd8b60
    my $arg;
Packit fd8b60
    my $outfile;
Packit fd8b60
    my %allowed_parms = ();
Packit fd8b60
Packit fd8b60
    foreach $arg (@parms) { $allowed_parms{$arg} = 1; }
Packit fd8b60
Packit fd8b60
    foreach $arg (@ARGV) {
Packit fd8b60
	if ($arg =~ /^-o./) {
Packit fd8b60
	    if (defined $outfile) {
Packit fd8b60
		die "$0: Output file specified multiple times\n";
Packit fd8b60
	    }
Packit fd8b60
	    $outfile = substr($arg, 2);
Packit fd8b60
	} else {
Packit fd8b60
	    my @words = split '=', $arg;
Packit fd8b60
	    if ($#words != 1) {
Packit fd8b60
		print STDERR "$0: $arg : #words = $#words\n";
Packit fd8b60
		&usage;
Packit fd8b60
	    }
Packit fd8b60
	    if (!defined $allowed_parms{$words[0]}) {
Packit fd8b60
		print STDERR "$0: Unknown parameter $words[0]\n";
Packit fd8b60
		&usage;
Packit fd8b60
	    }
Packit fd8b60
	    $parm{$words[0]} = $words[1];
Packit fd8b60
	}
Packit fd8b60
    }
Packit fd8b60
    my $p;
Packit fd8b60
    my $subst = "";
Packit fd8b60
    #print "Keys defined: ", join(' ', keys %parm), "\n";
Packit fd8b60
    foreach $p (@parms) {
Packit fd8b60
	if (!defined $parm{$p}) {
Packit fd8b60
	    die "$0: No value supplied for parameter $p\n";
Packit fd8b60
	}
Packit fd8b60
	# XXX More careful quoting of supplied value!
Packit fd8b60
	$subst .= "\t\$a =~ s|<$p>|$parm{$p}|go;\n";
Packit fd8b60
    }
Packit fd8b60
    $subst = "sub do_substitution {\n"
Packit fd8b60
	. "\tmy(\$a) = \@_;\n"
Packit fd8b60
	. $subst
Packit fd8b60
	. "\treturn \$a;\n"
Packit fd8b60
	. "}\n"
Packit fd8b60
	. "1;";
Packit fd8b60
    eval $subst || die;
Packit fd8b60
    if (defined $outfile) {
Packit fd8b60
	open OUTFILE, ">$outfile" || die;
Packit fd8b60
    } else {
Packit fd8b60
	print STDERR "$0: No output file specified.\n";
Packit fd8b60
	&usage;
Packit fd8b60
    }
Packit fd8b60
    print OUTFILE "/*\n";
Packit fd8b60
    print OUTFILE " * This file is generated, please don't edit it.\n";
Packit fd8b60
    print OUTFILE " * script: $0\n";
Packit fd8b60
    print OUTFILE " * args:\n *\t", join("\n *\t", @ARGV), "\n";
Packit fd8b60
    print OUTFILE " * The rest of this file is copied from a template, with\n";
Packit fd8b60
    print OUTFILE " * substitutions.  See the template for copyright info.\n";
Packit fd8b60
    print OUTFILE " */\n";
Packit fd8b60
    while (<DATA>) {
Packit fd8b60
	print OUTFILE &do_substitution($_);
Packit fd8b60
    }
Packit fd8b60
    close OUTFILE;
Packit fd8b60
    exit (0);
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
1;