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.
8 # Last modified 29-Nov-1994 by Charles Bailey bailey@newman.upenn.edu
11 if (-f 'miniperlmain.c') { $dir = ''; }
12 elsif (-f '../miniperlmain.c') { $dir = '../'; }
13 else { die "$0: Can't find miniperlmain.c\n"; }
15 open (IN,"${dir}miniperlmain.c")
16 || die "$0: Can't open ${dir}miniperlmain.c: $!\n";
17 open (OUT,">${dir}perlmain.c")
18 || die "$0: Can't open ${dir}perlmain.c: $!\n";
22 last if /Do not delete this line--writemain depends on it/;
29 unlink "${dir}perlmain.c";
30 die "$0: Can't find marker line in ${dir}miniperlmain.c - aborting\n";
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);
49 print OUT " char *file = __FILE__;\n";
50 foreach $ext (@exts) {
52 $subname =~ s/::/__/g;
53 print OUT "extern void boot_${subname} (pTHX_ CV* cv);\n"
55 # May not actually be a declaration, so put after other declarations
56 print OUT " dXSUB_SYS;\n";
57 foreach $ext (@exts) {
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"
67 print OUT " newXS(\"${ext}::bootstrap\", boot_${subname}, file);\n"