perl 5.002beta2 patch: toke.c
[p5sagit/p5-mst-13.2.git] / vms / genconfig.pl
CommitLineData
a0d0e21e 1#!/usr/bin/perl
2# Habit . . .
3#
4# Extract info from Config.VMS, and add extra data here, to generate Config.sh
5# Edit the static information after __END__ to reflect your site and options
748a9306 6# that went into your perl binary. In addition, values which change from run
7# to run may be supplied on the command line as key=val pairs.
a0d0e21e 8#
e518068a 9# Rev. 13-Dec-1995 Charles Bailey bailey@genetics.upenn.edu
a0d0e21e 10#
11
12unshift(@INC,'lib'); # In case someone didn't define Perl_Root
13 # before the build
a0d0e21e 14
15if (-f "config.vms") { $infile = "config.vms"; $outdir = "[-]"; }
16elsif (-f "[.vms]config.vms") { $infile = "[.vms]config.vms"; $outdir = "[]"; }
17elsif (-f "config.h") { $infile = "config.h"; $outdir = "[]";}
18
19if ($infile) { print "Generating Config.sh from $infile . . .\n"; }
20else { die <<EndOfGasp;
21Can't find config.vms or config.h to read!
22 Please run this script from the perl source directory or
23 the VMS subdirectory in the distribution.
24EndOfGasp
25}
26$outdir = '';
27open(IN,"$infile") || die "Can't open $infile: $!\n";
28open(OUT,">${outdir}Config.sh") || die "Can't open ${outdir}Config.sh: $!\n";
a0d0e21e 29
e518068a 30$time = localtime;
748a9306 31print OUT <<EndOfIntro;
a0d0e21e 32# This file generated by GenConfig.pl on a VMS system.
33# Input obtained from:
34# $infile
35# $0
36# Time: $time
37
e518068a 38package='perl5'
39CONFIG='true'
40cf_time='$time'
41osname='VMS'
42ld='Link'
43lddlflags='/Share'
44libc=''
45ranlib=''
46ar=''
47eunicefix=':'
48hintfile=''
49intsize='4'
50alignbytes='8'
51shrplib='define'
52usemymalloc='n'
a0d0e21e 53EndOfIntro
54
e518068a 55$cf_by = (getpwuid($<))[0];
56print OUT "cf_by='$cf_by'\nperladmin='$cf_by'\n";
57
58$hw_model = `Write Sys\$Output F\$GetSyi("HW_MODEL")`;
59chomp $hw_model;
60if ($hw_model > 1024) {
61 print OUT "arch='VMS_AXP'\n";
62 print OUT "archname='VMS_AXP'\n";
63 $archsufx = "AXP";
64}
65else {
66 print OUT "arch='VMS_VAX'\n";
67 print OUT "archname='VMS_VAX'\n";
68 $archsufx = 'VAX';
69}
70$osvers = `Write Sys\$Output F\$GetSyi("VERSION")`;
71$osvers =~ s/^V(\S+)\s*\n?$/$1/;
72print OUT "osvers='$osvers'\n";
748a9306 73foreach (@ARGV) {
74 ($key,$val) = split('=',$_,2);
e518068a 75 if ($key eq 'cc') { # Figure out which C compiler we're using
76 if (`$val/NoObject/NoList _nla0:/Version` =~ /GNU/) {
77 print OUT "vms_cc_type='gcc'\n";
78 print OUT "d_attribut='define'\n";
79 }
80 elsif ($archsufx eq 'VAX' &&
81 `$val/NoObject/NoList /prefix=all _nla0:` =~ /IVQUAL/) {
82 print OUT "vms_cc_type='vaxc'\n";
83 print OUT "d_attribut='undef'\n";
84 }
85 else {
86 print OUT "vms_cc_type='decc'\n";
87 print OUT "d_attribut='undef'\n";
88 # DECC for VAX requires filename in /object qualifier, so we
89 # have to remove it here. Alas, this means we lose the user's
90 # object file suffix if it's not .obj.
91 $val =~ s#/obj(?:ect)?=[^/\s]+##i if $archsufx eq 'VAX';;
92 }
93 }
748a9306 94 print OUT "$key=\'$val\'\n";
e518068a 95 if ($val =~/VMS_DO_SOCKETS/i) {
96 $dosock = 1;
97 # Are there any other logicals which TCP/IP stacks use for the host name?
98 $myname = $ENV{'ARPANET_HOST_NAME'} || $ENV{'INTERNET_HOST_NAME'} ||
99 $ENV{'MULTINET_HOST_NAME'} || $ENV{'UCX$INET_HOST'} ||
100 $ENV{'TCPWARE_DOMAINNAME'} || $ENV{'NEWS_ADDRESS'};
101 if (!$myname) {
102 ($myname) = `hostname` =~ /^(\S+)/;
103 if ($myname =~ /IVVERB/) {
104 warn "Can't determine TCP/IP hostname; skipping \$Config{'myhostname'}";
105 }
106 }
107 print OUT "myhostname='$myname'\n" if $myname;
108 }
748a9306 109}
e518068a 110if (!$dosock) { print OUT "myhostname='$ENV{'SYS$NODE'}'\n"; }
748a9306 111
a0d0e21e 112while (<IN>) { # roll through the comment header in Config.VMS
e518068a 113 last if /config-start/;
a0d0e21e 114}
115
116while (<IN>) {
117 chop;
118 while (/\\\s*$/) { # pick up contination lines
119 my $line = $_;
120 $line =~ s/\\\s*$//;
121 $_ = <IN>;
122 s/^\s*//;
123 $_ = $line . $_;
124 }
125 next unless my ($blocked,$un,$token,$val) = m%(\/\*)?\s*\#\s*(un)?def\w*\s*([A-za-z0-9]\w+)\S*\s*(.*)%;
126 next if /config-skip/;
127 $state = ($blocked || $un) ? 'undef' : 'define';
128 $token =~ tr/A-Z/a-z/;
e518068a 129 $token =~ s/_exp$/exp/; # Config.pm has 'privlibexp' etc. where config.h
130 # has 'privlib_exp' etc.
a0d0e21e 131 $val =~ s%/\*.*\*/\s*%%g; $val =~ s/\s*$//; # strip off trailing comment
132 $val =~ s/^"//; $val =~ s/"$//; # remove end quotes
133 $val =~ s/","/ /g; # make signal list look nice
748a9306 134 if ($val) { print OUT "$token=\'$val\'\n"; }
a0d0e21e 135 else {
136 $token = "d_$token" unless $token =~ /^i_/;
e518068a 137 print OUT "$token='$state'\n";
748a9306 138 }
a0d0e21e 139}
140close IN;
141
142while (<DATA>) {
143 next if /^\s*#/ or /^\s*$/;
144 s/#.*$//; s/\s*$//;
145 ($key,$val) = split('=',$_,2);
748a9306 146 print OUT "$key='$val'\n";
147 eval "\$$key = '$val'";
148}
149# Add in some of the architecture-dependent stuff which has to be consistent
150print OUT "d_vms_do_sockets=",$dosock ? "'define'\n" : "'undef'\n";
151print OUT "d_has_sockets=",$dosock ? "'define'\n" : "'undef'\n";
748a9306 152$archlib = &VMS::Filespec::vmspath($privlib);
153$archlib =~ s#\]#.VMS_$archsufx\]#;
154$installarchlib = &VMS::Filespec::vmspath($installprivlib);
155$installarchlib =~ s#\]#.VMS_$archsufx\]#;
156print OUT "archlib='$archlib'\n";
e518068a 157print OUT "archlibexp='$archlib'\n";
748a9306 158print OUT "installarchlib='$installarchlib'\n";
a0d0e21e 159
e518068a 160if (open(OPT,"${outdir}crtl.opt")) {
161 while (<OPT>) {
162 next unless m#/(sha|lib)#i;
163 chomp;
164 push(@libs,$_);
165 }
166 close OPT;
167 print OUT "libs='",join(' ',@libs),"'\n";
168}
169else { warn "Can't read ${outdir}crtl.opt - skipping \$Config{'libs'}"; }
170
171# simple pager support for perldoc
172if (`most nl:` =~ /IVVERB/) {
173 $pager = 'more';
174 if (`more nl:` =~ /IVVERB/) { $pager = 'type/page'; }
175}
176else { $pager = 'most'; }
177print OUT "pager='$pager'\n";
178
179close OUT;
a0d0e21e 180__END__
181
182# This list is incomplete in comparison to what ends up in config.sh, but
183# should contain the essentials. Some of these definitions reflect
184# options chosen when building perl or site-specific data; these should
185# be hand-edited appropriately. Someday, perhaps, we'll get this automated.
186
187# The definitions in this block are constant across most systems, and
188# should only rarely need to be changed.
e518068a 189PATCHLEVEL=002
748a9306 190ccdlflags=
191cccdlflags=
748a9306 192usedl=true
a0d0e21e 193dlobj=dl_vms.obj
194dlsrc=dl_vms.c
e518068a 195d_dlsymun=undef
a0d0e21e 196so=exe
197dlext=exe
198libpth=/sys$share /sys$library
e518068a 199d_stdstdio=undef
200usevfork=false
201castflags=0
202d_castneg=define # should be same as d_castnegfloat from config.vms
a0d0e21e 203signal_t=void
204timetype=long
a0d0e21e 205builddir=perl_root:[000000]
e518068a 206prefix=perl_root
748a9306 207installprivlib=perl_root:[lib]
208privlib=perl_root:[lib]
209installbin=perl_root:[000000]
e518068a 210installman1dir=perl_root:[man.man1]
211installman3dir=perl_root:[man.man3]
212man1ext=.rno
213man3ext=.rno
214binexp=perl_root:[000000] # should be same as installbin