This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[inseparable changes from match from perl-5.003_97j to perl-5.003_98]
[perl5.git] / vms / vms_yfix.pl
CommitLineData
4633a7c4
LW
1# This script takes the output produced from perly.y by byacc and
2# the perly.fixer shell script (i.e. the perly.c and perly.h built
3# for Unix systems) and patches them to produce copies containing
4# appropriate declarations for VMS handling of global symbols.
5#
6# If it finds that the input files are already patches for VMS,
7# it just copies the input to the output.
8#
71be2cbc 9# Revised 20-Dec-1996 by Charles Bailey bailey@genetics.upenn.edu
c07a80fd 10
71be2cbc 11$VERSION = '1.11';
4633a7c4 12
71be2cbc 13push(@ARGV,(qw[ perly.c perly.h vms/perly_c.vms vms/perly_h.vms])[@ARGV..4])
14 if @ARGV < 4;
4633a7c4
LW
15($cinfile,$hinfile,$coutfile,$houtfile) = @ARGV;
16
17open C,$cinfile or die "Can't read $cinfile: $!\n";
18open COUT, ">$coutfile" or die "Can't create $coutfile: $!\n";
c07a80fd 19print COUT <<EOH;
20/* Postprocessed by vms_yfix.pl $VERSION to add VMS declarations of globals */
21EOH
4633a7c4 22while (<C>) {
c07a80fd 23 # "y.tab.c" is illegal as a VMS filename; DECC 5.2/VAX preprocessor
24 # doesn't like this.
25 if ( s/^#line\s+(\d+)\s+"y.tab.c"/#line $1 "y_tab.c"/ ) { 1; }
9607fc9c 26 elsif (/char \*getenv/) {
27 # accomodate old VAXC's macro susbstitution pecularities
28 $_ = "# ifndef getenv\n$_# endif\n";
29 }
c07a80fd 30 else {
31 # add the dEXT tag to definitions of global vars, so we'll insert
32 # a globaldef when perly.c is compiled
33 s/^(short|int|YYSTYPE|char \*)\s*yy/dEXT $1 yy/;
4633a7c4 34 }
4633a7c4
LW
35 print COUT;
36}
37close C;
38close COUT;
39
40open H,$hinfile or die "Can't read $hinfile: $!\n";
41open HOUT, ">$houtfile" or die "Can't create $houtfile: $!\n";
c07a80fd 42print HOUT <<EOH;
43/* Postprocessed by vms_yfix.pl $VERSION to add VMS declarations of globals */
44EOH
4633a7c4
LW
45$hfixed = 0; # keep -w happy
46while (<H>) {
47 $hfixed = /globalref/ unless $hfixed; # we've already got a fixed copy
48 next if /^extern YYSTYPE yylval/; # we've got a Unix version, and this
49 # is what we want to replace
50 print HOUT;
51}
52close H;
53
54print HOUT <<'EODECL' unless $hfixed;
55#ifndef vax11c
56 extern YYSTYPE yylval;
57#else
58 globalref YYSTYPE yylval;
59#endif
60EODECL
61
62close HOUT;