Update copyright year to 2009.
[perl.git] / vms / writemain.pl
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;