diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1999-10-10 04:28:38 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1999-10-10 04:28:38 +0000 |
commit | 8ec448833410aa8e65370beaffc968d46272417a (patch) | |
tree | f0954fc25b65478a13e22e0c70ba7778ab2c4c14 /win32/genmk95.pl | |
parent | 0655b981bb492c08abff4ec3ef984eda8c2af724 (diff) | |
download | perl-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.pl | 81 |
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; |