X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=vms%2Fwritemain.pl;h=1843b3020654244d54da579bd92fcb6ed63d8d59;hb=410be5dba347e0340059d489e15d034982d73278;hp=38b6670b10f81fc6807ece69c7c66be041ed8195;hpb=a0d0e21ea6ea90a22318550944fe6cb09ae10cda;p=p5sagit%2Fp5-mst-13.2.git diff --git a/vms/writemain.pl b/vms/writemain.pl index 38b6670..1843b30 100644 --- a/vms/writemain.pl +++ b/vms/writemain.pl @@ -1,7 +1,11 @@ #!./miniperl # # Create perlmain.c from miniperlmain.c, adding code to boot the -# extensions listed on the command line. +# extensions listed on the command line. In addition, create a +# linker options file which causes the bootstrap routines for +# these extension to be universal symbols in PerlShr.Exe. +# +# Last modified 29-Nov-1994 by Charles Bailey bailey@newman.upenn.edu # if (-f 'miniperlmain.c') { $dir = ''; } @@ -14,7 +18,6 @@ open (OUT,">${dir}perlmain.c") || die "$0: Can't open ${dir}perlmain.c: $!\n"; while () { - s/INTERN\.h/EXTERN\.h/; print OUT; last if /Do not delete this line--writemain depends on it/; } @@ -28,23 +31,41 @@ if (!$ok) { } -if ($#ARGV > -1) { - print OUT " char *file = __FILE__;\n"; -} +print OUT <<'EOH'; -foreach $ext (@ARGV) { - print OUT "extern void boot_${ext} _((CV* cv));\n" +static void +xs_init(pTHX) +{ +EOH + +if (@ARGV) { + $names = join(' ',@ARGV); + $names =~ tr/"//d; # Plan9 doesn't remove "" on command line + # Allow for multiple names in one quoted group + @exts = split(/\s+/,$names); } -foreach $ext (@ARGV) { - print "Adding $ext . . .\n"; - if ($ext eq 'DynaLoader') { - # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'! - # boot_DynaLoader is called directly in DynaLoader.pm - print OUT " newXS(\"${ext}::boot_${ext}\", boot_${ext}, file);\n" +if (@exts) { + print OUT " char *file = __FILE__;\n"; + foreach $ext (@exts) { + my($subname) = $ext; + $subname =~ s/::/__/g; + print OUT "extern void boot_${subname} (pTHX_ CV* cv);\n" } - else { - print OUT " newXS(\"${ext}::bootstrap\", boot_${ext}, file);\n" + # May not actually be a declaration, so put after other declarations + print OUT " dXSUB_SYS;\n"; + foreach $ext (@exts) { + my($subname) = $ext; + $subname =~ s/::/__/g; + print "Adding $ext . . .\n"; + if ($ext eq 'DynaLoader') { + # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'! + # boot_DynaLoader is called directly in DynaLoader.pm + print OUT " newXS(\"${ext}::boot_${ext}\", boot_${subname}, file);\n" + } + else { + print OUT " newXS(\"${ext}::bootstrap\", boot_${subname}, file);\n" + } } }