source: vendor/perl/5.8.8/vms/mms2make.pl@ 3951

Last change on this file since 3951 was 3181, checked in by bird, 19 years ago

perl 5.8.8

File size: 3.7 KB
RevLine 
[3181]1#!/usr/bin/perl
2#
3# mms2make.pl - convert Descrip.MMS file to Makefile
4# Version 2.2 29-Jan-1996
5# David Denholm <[email protected]>
6#
7# 1.0 06-Aug-1994 Charles Bailey [email protected]
8# - original version
9# 2.0 29-Sep-1994 David Denholm <[email protected]>
10# - take action based on MMS .if / .else / .endif
11# any command line options after filenames are set in an assoc array %macros
12# maintain "@condition as a stack of current conditions
13# we unshift a 0 or 1 to front of @conditions at an .ifdef
14# we invert top of stack at a .else
15# we pop at a .endif
16# we deselect any other line if $conditions[0] is 0
17# I'm being very lazy - push a 1 at start, then dont need to check for
18# an empty @conditions [assume nesting in descrip.mms is correct]
19# 2.1 26-Feb-1995 Charles Bailey [email protected]
20# - handle MMS macros generated by MakeMaker
21# 2.2 29-Jan-1996 Charles Bailey [email protected]
22# - Fix output file name to work under Unix
23
24if ($#ARGV > -1 && $ARGV[0] =~ /^[\-\/]trim/i) {
25 $do_trim = 1;
26 shift @ARGV;
27}
28$infile = $#ARGV > -1 ? shift(@ARGV) : "Descrip.MMS";
29$outfile = $#ARGV > -1 ? shift(@ARGV) : "Makefile";
30
31# set any other args in %macros - set VAXC by default
32foreach (@ARGV) { $macros{"\U$_"}=1 }
33
34# consistency check
35$macros{"DECC"} = 1 if $macros{"__AXP__"};
36
37# set conditions as if there was a .if 1 around whole file
38# [lazy - saves having to check for empty array - just test [0]==1]
39@conditions = (1);
40
41open(INFIL,$infile) || die "Can't open $infile: $!\n";
42open(OUTFIL,">$outfile") || die "Can't open $outfile: $!\n";
43
44print OUTFIL "#> This file produced from $infile by $0\n";
45print OUTFIL "#> Lines beginning with \"#>\" were commented out during the\n";
46print OUTFIL "#> conversion process. For more information, see $0\n";
47print OUTFIL "#>\n";
48
49while (<INFIL>) {
50 s/$infile/$outfile/eoi;
51 if (/^\#/) {
52 if (!/^\#\:/) {print OUTFIL;}
53 next;
54 }
55
56# look for ".ifdef macro" and push 1 or 0 to head of @conditions
57# push 0 if we are in false branch of another if
58 if (/^\.ifdef\s*(.+)/i)
59 {
60 print OUTFIL "#> ",$_ unless $do_trim;
61 unshift @conditions, ($macros{"\U$1"} ? $conditions[0] : 0);
62 next;
63 }
64
65# reverse $conditions[0] for .else provided surrounding if is active
66 if (/^\.else/i)
67 {
68 print OUTFIL "#> ",$_ unless $do_trim;
69 $conditions[0] = $conditions[1] && !$conditions[0];
70 next;
71 }
72
73# pop top condition for .endif