1#!./miniperl 2# 3# Create perlmain.c from miniperlmain.c, adding code to boot the 4# extensions listed on the command line. In addition, create a 5# linker options file which causes the bootstrap routines for 6# these extension to be universal symbols in PerlShr.Exe. 7# 8# Last modified 29-Nov-1994 by Charles Bailey bailey@newman.upenn.edu 9# 10 11if (-f 'miniperlmain.c') { $dir = ''; } 12elsif (-f '../miniperlmain.c') { $dir = '../'; } 13else { die "$0: Can't find miniperlmain.c\n"; } 14 15open (IN,"${dir}miniperlmain.c") 16 || die "$0: Can't open ${dir}miniperlmain.c: $!\n"; 17open (OUT,">${dir}perlmain.c") 18 || die "$0: Can't open ${dir}perlmain.c: $!\n"; 19 20while (<IN>) { 21 print OUT; 22 last if /Do not delete this line--writemain depends on it/; 23} 24$ok = !eof(IN); 25close IN; 26 27if (!$ok) { 28 close OUT; 29 unlink "${dir}perlmain.c"; 30 die "$0: Can't find marker line in ${dir}miniperlmain.c - aborting\n"; 31} 32 33 34print OUT <<'EOH'; 35 36static void 37xs_init(pTHX) 38{ 39EOH 40 41if (@ARGV) { 42 $names = join(' ',@ARGV); 43 $names =~ tr/"//d; # Plan9 doesn't remove "" on command line 44 # Allow for multiple names in one quoted group 45 @exts = split(/\s+/,$names); 46} 47 48if (@exts) { 49 print OUT " char *file = __FILE__;\n"; 50 foreach $ext (@exts) { 51 my($subname) = $ext; 52 $subname =~ s/::/__/g; 53 print OUT "extern void boot_${subname} (pTHX_ CV* cv);\n" 54 } 55 # May not actually be a declaration, so put after other declarations 56 print OUT " dXSUB_SYS;\n"; 57 foreach $ext (@exts) { 58 my($subname) = $ext; 59 $subname =~ s/::/__/g; 60 print "Adding $ext . . .\n"; 61 if ($ext eq 'DynaLoader') { 62 # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'! 63 # boot_DynaLoader is called directly in DynaLoader.pm 64 print OUT " newXS(\"${ext}::boot_${ext}\", boot_${subname}, file);\n" 65 } 66 else { 67 print OUT " newXS(\"${ext}::bootstrap\", boot_${subname}, file);\n" 68 } 69 } 70} 71 72print OUT "}\n"; 73close OUT; 74