This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Special mkdir() for VMS
[perl5.git] / vms / writemain.pl
index 38b6670..5f1c8bf 100644 (file)
@@ -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@genetics.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 (<IN>) {
-  s/INTERN\.h/EXTERN\.h/;
   print OUT;
   last if /Do not delete this line--writemain depends on it/;
 }
@@ -28,23 +31,40 @@ 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()
+{
+    dXSUB_SYS;
+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} _((CV* cv));\n"
   }
-  else {
-    print OUT "    newXS(\"${ext}::bootstrap\", boot_${ext}, file);\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"
+    }
   }
 }