summaryrefslogtreecommitdiff
path: root/vms/writemain.pl
blob: 38b6670b10f81fc6807ece69c7c66be041ed8195 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!./miniperl
#
# Create perlmain.c from miniperlmain.c, adding code to boot the
# extensions listed on the command line.
#

if (-f 'miniperlmain.c') { $dir = ''; }
elsif (-f '../miniperlmain.c') { $dir = '../'; }
else { die "$0: Can't find miniperlmain.c\n"; }

open (IN,"${dir}miniperlmain.c")
  || die "$0: Can't open ${dir}miniperlmain.c: $!\n";
open (OUT,">${dir}perlmain.c")
  || die "$0: Can't open ${dir}perlmain.c: $!\n";

while (<IN>) {
  s/INTERN\.h/EXTERN\.h/;
  print OUT;
  last if /Do not delete this line--writemain depends on it/;
}
$ok = !eof(IN);
close IN;

if (!$ok) {
  close OUT;
  unlink "${dir}perlmain.c";
  die "$0: Can't find marker line in ${dir}miniperlmain.c - aborting\n";
}


if ($#ARGV > -1) {
  print OUT "    char *file = __FILE__;\n";
}

foreach $ext (@ARGV) {
  print OUT "extern void	boot_${ext} _((CV* cv));\n"
}

foreach $ext (@ARGV) {
  print "Adding $ext . . .\n";
  if ($ext eq 'DynaLoader') {
    # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
    # boot_DynaLoader is called directly in DynaLoader.pm
    print OUT "    newXS(\"${ext}::boot_${ext}\", boot_${ext}, file);\n"
  }
  else {
    print OUT "    newXS(\"${ext}::bootstrap\", boot_${ext}, file);\n"
  }
}

print OUT "}\n";
close OUT;