summaryrefslogtreecommitdiff
path: root/win32/genmk95.pl
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1999-10-10 04:28:38 +0000
committerGurusamy Sarathy <gsar@cpan.org>1999-10-10 04:28:38 +0000
commit8ec448833410aa8e65370beaffc968d46272417a (patch)
treef0954fc25b65478a13e22e0c70ba7778ab2c4c14 /win32/genmk95.pl
parent0655b981bb492c08abff4ec3ef984eda8c2af724 (diff)
downloadperl-8ec448833410aa8e65370beaffc968d46272417a.tar.gz
rudimentary support for building under Windows 95/98 (from
Benjamin Stuhl <sho_pi@hotmail.com>) p4raw-id: //depot/perl@4329
Diffstat (limited to 'win32/genmk95.pl')
-rw-r--r--win32/genmk95.pl81
1 files changed, 81 insertions, 0 deletions
diff --git a/win32/genmk95.pl b/win32/genmk95.pl
new file mode 100644
index 0000000000..74788ff3cb
--- /dev/null
+++ b/win32/genmk95.pl
@@ -0,0 +1,81 @@
+# genmk95.pl - uses miniperl to generate a makefile that command.com
+# (and dmake) will understand given one that cmd.exe will understand
+
+# Author: Benjamin K. Stuhl
+# Date: 8-18-1999
+
+# how it works:
+# dmake supports an alternative form for its recipes, called "group
+# recipes", in which all elements of a recipe are run with only one
+# shell. This program converts the standard dmake makefile.mk to
+# one using group recipes. This is done so that lines using && or
+# || (which command.com doesn't understand) may be split into two
+# lines.
+
+my ($filein, $fileout) = @ARGV;
+
+chomp (my $loc = `cd`);
+
+open my $in, $filein or die "Error opening input file: $!";
+open my $out, "> $fileout" or die "Error opening output file: $!";
+
+print $out <<_EOH_;
+# *** Warning: this file is autogenerated from $filein by $0 ***
+# *** Do not edit this file - edit $filein instead ***
+
+_EOH_
+
+my $inrec = 0;
+
+while (<$in>)
+{
+ chomp;
+ if (/^[^#.\t][^#=]*?:/)
+ {
+ if (! $inrec)
+ {
+ print $out "$_\n";
+ while (/\\$/)
+ {
+ chomp($_ = <$in>);
+ print $out "$_\n";
+ }
+ print $out "@[\n";
+ $inrec = 1;
+ next;
+ }
+ else {
+ seek ($out, -3, 2); # no recipe, so back up and undo grouping
+ print $out "$_\n";
+ $inrec = 0;
+ next;
+ }
+ }
+ if ((/^\s*$/ || /^[^#.\t][^#=]*?:/) && $inrec)
+ {
+ print $out "]\n";
+ print $out "$_\n";
+ $inrec = 0;
+ next;
+ }
+ if (/^(.*?)(&&|\|\|)(.*)$/) # two commands separated by && or ||
+ {
+ my ($one, $sep, $two) = ($1, $2, $3);
+LINE_CONT:
+ if ($two =~ /\\\s*$/)
+ {
+ chomp ($two .= "\n" . scalar <$in>);
+ goto LINE_CONT;
+ }
+ s/^\s*// for ($one, $two);
+ print $out "\t$one\n\t$two\n" if ($sep eq "&&");
+ print $out "\t$one\n\tif errorlevel 1 $two\n" if ($sep eq "||");
+ print $out "\tcd $loc\n";
+ next;
+ }
+ # fall through - no need for special handling
+ print $out "$_\n";
+}
+print $out "]\n" if ($inrec);
+
+close $in; close $out;