summaryrefslogtreecommitdiff
path: root/djgpp/fixpmain
diff options
context:
space:
mode:
Diffstat (limited to 'djgpp/fixpmain')
-rw-r--r--djgpp/fixpmain30
1 files changed, 30 insertions, 0 deletions
diff --git a/djgpp/fixpmain b/djgpp/fixpmain
new file mode 100644
index 0000000000..6db6555ecf
--- /dev/null
+++ b/djgpp/fixpmain
@@ -0,0 +1,30 @@
+#!perl -w
+# Fix perlmain.c under DOS (short & case insensitive filenames).
+# Called from Makefile.aperl when needed.
+# You don't need this when LFN=y.
+
+use Config;
+
+open (PERLM,"<perlmain.c") or die "Can't load perlmain.c: $!";
+open (MAKEFILE,"<makefile.pl") or die "Can't load makefile.pl: $!";
+undef $/;
+$perlmain=<PERLM>;
+$makefile=<MAKEFILE>;
+
+($_) = $makefile =~ /\bNAME\b.*=>\W*([\w\:]+)/; # extract module name
+$badname=join ("__",map {lc substr ($_,0,8)} split /:+/); # dosify
+$perlmain =~ s/^.*boot_$badname.*$//gm if $badname; # delete bad lines
+
+@exts=split (" ",$Config{known_extensions});
+for $realname (@exts,'DynaLoader')
+{
+ $dosname=substr (lc $realname,0,8);
+ $perlmain =~ s/boot_$dosname/boot_$realname/gm;
+ $perlmain =~ s/$dosname(::bootstrap)/$realname$1/gm;
+}
+
+#DynaLoader is special
+$perlmain =~ s/(DynaLoader:\:boot)strap/$1_DynaLoader/gm;
+
+open (PERLM,">perlmain.c") or die "Can't write perlmain.c: $!";
+print PERLM $perlmain;