source: trunk/third/perl/vms/writemain.pl @ 14545

Revision 14545, 1.9 KB checked in by ghudson, 25 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
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
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>) {
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
34print OUT <<'EOH';
35
36static void
37xs_init(pTHX)
38{
39EOH
40
41if (@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
48if (@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
72print OUT "}\n";
73close OUT;
Note: See TracBrowser for help on using the repository browser.