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 | |
---|
11 | if (-f 'miniperlmain.c') { $dir = ''; } |
---|
12 | elsif (-f '../miniperlmain.c') { $dir = '../'; } |
---|
13 | else { die "$0: Can't find miniperlmain.c\n"; } |
---|
14 | |
---|
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"; |
---|
19 | |
---|
20 | while (<IN>) { |
---|
21 | print OUT; |
---|
22 | last if /Do not delete this line--writemain depends on it/; |
---|
23 | } |
---|
24 | $ok = !eof(IN); |
---|
25 | close IN; |
---|
26 | |
---|
27 | if (!$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 | |
---|
34 | print OUT <<'EOH'; |
---|
35 | |
---|
36 | static void |
---|
37 | xs_init(pTHX) |
---|
38 | { |
---|
39 | EOH |
---|
40 | |
---|
41 | if (@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 | |
---|
48 | if (@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 | |
---|
72 | print OUT "}\n"; |
---|
73 | close OUT; |
---|