This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Don't clobber $1 et al in debugger's DB::sub()
[perl5.git] / vms / writemain.pl
CommitLineData
a0d0e21e
LW
1#!./miniperl
2#
3# Create perlmain.c from miniperlmain.c, adding code to boot the
748a9306
LW
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@genetics.upenn.edu
a0d0e21e
LW
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>) {
a0d0e21e
LW
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
e518068a 34print OUT <<'EOH';
35
36static void
37xs_init()
38{
9be963dd 39 dXSUB_SYS;
e518068a 40EOH
41
748a9306 42if (@ARGV) {
07f049cb 43 $names = join(' ',@ARGV);
44 $names =~ tr/"//d; # Plan9 doesn't remove "" on command line
748a9306 45 # Allow for multiple names in one quoted group
07f049cb 46 @exts = split(/\s+/,$names);
a0d0e21e
LW
47}
48
748a9306
LW
49if (@exts) {
50 print OUT " char *file = __FILE__;\n";
51 foreach $ext (@exts) {
52 my($subname) = $ext;
53 $subname =~ s/::/__/g;
54 print OUT "extern void boot_${subname} _((CV* cv));\n"
a0d0e21e 55 }
748a9306
LW
56 foreach $ext (@exts) {
57 my($subname) = $ext;
58 $subname =~ s/::/__/g;
59 print "Adding $ext . . .\n";
60 if ($ext eq 'DynaLoader') {
61 # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
62 # boot_DynaLoader is called directly in DynaLoader.pm
63 print OUT " newXS(\"${ext}::boot_${ext}\", boot_${subname}, file);\n"
64 }
65 else {
66 print OUT " newXS(\"${ext}::bootstrap\", boot_${subname}, file);\n"
67 }
a0d0e21e
LW
68 }
69}
70
71print OUT "}\n";
72close OUT;