Commit | Line | Data |
a0d0e21e |
1 | #!./miniperl |
2 | # |
3 | # Create perlmain.c from miniperlmain.c, adding code to boot the |
4 | # extensions listed on the command line. |
5 | # |
6 | |
7 | if (-f 'miniperlmain.c') { $dir = ''; } |
8 | elsif (-f '../miniperlmain.c') { $dir = '../'; } |
9 | else { die "$0: Can't find miniperlmain.c\n"; } |
10 | |
11 | open (IN,"${dir}miniperlmain.c") |
12 | || die "$0: Can't open ${dir}miniperlmain.c: $!\n"; |
13 | open (OUT,">${dir}perlmain.c") |
14 | || die "$0: Can't open ${dir}perlmain.c: $!\n"; |
15 | |
16 | while (<IN>) { |
17 | s/INTERN\.h/EXTERN\.h/; |
18 | print OUT; |
19 | last if /Do not delete this line--writemain depends on it/; |
20 | } |
21 | $ok = !eof(IN); |
22 | close IN; |
23 | |
24 | if (!$ok) { |
25 | close OUT; |
26 | unlink "${dir}perlmain.c"; |
27 | die "$0: Can't find marker line in ${dir}miniperlmain.c - aborting\n"; |
28 | } |
29 | |
30 | |
31 | if ($#ARGV > -1) { |
32 | print OUT " char *file = __FILE__;\n"; |
33 | } |
34 | |
35 | foreach $ext (@ARGV) { |
36 | print OUT "extern void boot_${ext} _((CV* cv));\n" |
37 | } |
38 | |
39 | foreach $ext (@ARGV) { |
40 | print "Adding $ext . . .\n"; |
41 | if ($ext eq 'DynaLoader') { |
42 | # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'! |
43 | # boot_DynaLoader is called directly in DynaLoader.pm |
44 | print OUT " newXS(\"${ext}::boot_${ext}\", boot_${ext}, file);\n" |
45 | } |
46 | else { |
47 | print OUT " newXS(\"${ext}::bootstrap\", boot_${ext}, file);\n" |
48 | } |
49 | } |
50 | |
51 | print OUT "}\n"; |
52 | close OUT; |