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;
|
---|