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
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.
9 # Rev. 13-Dec-1995 Charles Bailey bailey@genetics.upenn.edu
12 unshift(@INC,'lib'); # In case someone didn't define Perl_Root
15 if (-f "config.vms") { $infile = "config.vms"; $outdir = "[-]"; }
16 elsif (-f "[.vms]config.vms") { $infile = "[.vms]config.vms"; $outdir = "[]"; }
17 elsif (-f "config.h") { $infile = "config.h"; $outdir = "[]";}
19 if ($infile) { print "Generating Config.sh from $infile . . .\n"; }
20 else { die <<EndOfGasp;
21 Can'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.
27 open(IN,"$infile") || die "Can't open $infile: $!\n";
28 open(OUT,">${outdir}Config.sh") || die "Can't open ${outdir}Config.sh: $!\n";
31 print OUT <<EndOfIntro;
32 # This file generated by GenConfig.pl on a VMS system.
33 # Input obtained from:
55 $cf_by = (getpwuid($<))[0];
56 print OUT "cf_by='$cf_by'\nperladmin='$cf_by'\n";
58 $hw_model = `Write Sys\$Output F\$GetSyi("HW_MODEL")`;
60 if ($hw_model > 1024) {
61 print OUT "arch='VMS_AXP'\n";
62 print OUT "archname='VMS_AXP'\n";
66 print OUT "arch='VMS_VAX'\n";
67 print OUT "archname='VMS_VAX'\n";
70 $osvers = `Write Sys\$Output F\$GetSyi("VERSION")`;
71 $osvers =~ s/^V(\S+)\s*\n?$/$1/;
72 print OUT "osvers='$osvers'\n";
74 ($key,$val) = split('=',$_,2);
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";
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";
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';;
94 print OUT "$key=\'$val\'\n";
95 if ($val =~/VMS_DO_SOCKETS/i) {
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'};
102 ($myname) = `hostname` =~ /^(\S+)/;
103 if ($myname =~ /IVVERB/) {
104 warn "Can't determine TCP/IP hostname; skipping \$Config{'myhostname'}";
107 print OUT "myhostname='$myname'\n" if $myname;
110 if (!$dosock) { print OUT "myhostname='$ENV{'SYS$NODE'}'\n"; }
112 while (<IN>) { # roll through the comment header in Config.VMS
113 last if /config-start/;
118 while (/\\\s*$/) { # pick up contination lines
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/;
129 $token =~ s/_exp$/exp/; # Config.pm has 'privlibexp' etc. where config.h
130 # has 'privlib_exp' etc.
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
134 if ($val) { print OUT "$token=\'$val\'\n"; }
136 $token = "d_$token" unless $token =~ /^i_/;
137 print OUT "$token='$state'\n";
143 next if /^\s*#/ or /^\s*$/;
145 ($key,$val) = split('=',$_,2);
146 print OUT "$key='$val'\n";
147 eval "\$$key = '$val'";
149 # Add in some of the architecture-dependent stuff which has to be consistent
150 print OUT "d_vms_do_sockets=",$dosock ? "'define'\n" : "'undef'\n";
151 print OUT "d_has_sockets=",$dosock ? "'define'\n" : "'undef'\n";
152 $archlib = &VMS::Filespec::vmspath($privlib);
153 $archlib =~ s#\]#.VMS_$archsufx\]#;
154 $installarchlib = &VMS::Filespec::vmspath($installprivlib);
155 $installarchlib =~ s#\]#.VMS_$archsufx\]#;
156 print OUT "archlib='$archlib'\n";
157 print OUT "archlibexp='$archlib'\n";
158 print OUT "installarchlib='$installarchlib'\n";
160 if (open(OPT,"${outdir}crtl.opt")) {
162 next unless m#/(sha|lib)#i;
167 print OUT "libs='",join(' ',@libs),"'\n";
169 else { warn "Can't read ${outdir}crtl.opt - skipping \$Config{'libs'}"; }
171 # simple pager support for perldoc
172 if (`most nl:` =~ /IVVERB/) {
174 if (`more nl:` =~ /IVVERB/) { $pager = 'type/page'; }
176 else { $pager = 'most'; }
177 print OUT "pager='$pager'\n";
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.
187 # The definitions in this block are constant across most systems, and
188 # should only rarely need to be changed.
198 libpth=/sys$share /sys$library
202 d_castneg=define # should be same as d_castnegfloat from config.vms
205 builddir=perl_root:[000000]
207 installprivlib=perl_root:[lib]
208 privlib=perl_root:[lib]
209 installbin=perl_root:[000000]
210 installman1dir=perl_root:[man.man1]
211 installman3dir=perl_root:[man.man3]
214 binexp=perl_root:[000000] # should be same as installbin