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;
74