# Generate code for perperl_perl.c to fill in the perlvars array.
my @vars = (
#
# Perl-type
# Part of our package (PersistentPerl)
# Perl Name
# Our name, optional
#
['SVt_PVHV', 0, 'ENV'],
['SVt_PVAV', 0, 'ARGV'],
['SVt_PVIO', 0, 'STDIN'],
['SVt_PVIO', 0, 'STDOUT'],
['SVt_PVIO', 0, 'STDERR'],
['SVt_PV', 0, '0', 'PROGRAM_NAME'],
['SVt_PV', 0, '@', 'EVAL_ERROR'],
['SVt_PVCV', 0, 'CGI::_reset_globals'],
['SVt_IV', 1, '_opts_changed'],
['SVt_PVHV', 1, '_opts'],
['SVt_PVCV', 1, '_run_shutdown'],
['SVt_PV', 1, '_sub'],
['SVt_IV', 1, 'i_am_perperl'],
['SVt_PVCV', 1, '_run_cleanup'],
['SVt_PVCV', 1, '_fork'],
);
my $myname = 'util/perlvars';
print "/* Generated by $myname */\n\n";
sub def { my($name, $value) = @_;
printf("#define %-25s %s\n", uc($name), $value);
}
my $i = 0;
foreach (@vars) {
my($type, $ours, $plname, $name) = @$_;
my $cast = 'SV';
if ($type =~ /SVt_PV(..)/) {
$cast = $1;
$cast = 'GV' if ($cast eq 'IO');
}
$name ||= $plname;
$name =~ s/.*::_*//;
$name =~ s/^_+//;
&def("PERLVAR_$name", "(PersistentPerlVars[$i])");
&def("PERLVAL_$name", "((${cast}*)(PersistentPerlVars[$i].ptr))");
++$i;
}
&def('PERLVAR_COUNT', $i);
print "\nstatic PersistentPerlVar PersistentPerlVars[] = {\n";
foreach (@vars) {
my($type, $ours, $plname) = @$_;
printf(" {NULL, %-8s , %s%s},\n",
$type, $ours ? "PERPERL_PKG(\"$plname\")" : "\"$plname\""
);
}
print "};\n\n";
print "/* End of generated section */\n";