This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
A configuration system for VMS perl
authorHans Mulder <hansmu@xs4all.nl>
Mon, 8 Jun 1998 15:38:28 +0000 (08:38 -0700)
committerGurusamy Sarathy <gsar@cpan.org>
Wed, 10 Jun 1998 05:38:11 +0000 (05:38 +0000)
Message-Id: <3.0.5.32.19980608153828.00a81ea0@ous.edu>

p4raw-id: //depot/perl@1084

MANIFEST
README.vms
configure.com [new file with mode: 0644]
lib/ExtUtils/MM_VMS.pm
vms/config.vms [deleted file]
vms/descrip_mms.template [new file with mode: 0644]
vms/fndvers.com [deleted file]
vms/munchconfig.c [new file with mode: 0644]
vms/subconfigure.com [new file with mode: 0644]

index 8a9690e..72d82be 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -50,6 +50,7 @@ compat3.sym           List of symbols for binary-compatibility with 5.003
 config_h.SH            Produces config.h
 configpm               Produces lib/Config.pm
 configure.gnu          Crude emulation of GNU configure
 config_h.SH            Produces config.h
 configpm               Produces lib/Config.pm
 configure.gnu          Crude emulation of GNU configure
+configure.com   Configure-equivalent for VMS
 cop.h                  Control operator header
 cv.h                   Code value header
 cygwin32/cw32imp.h     Cygwin32 port
 cop.h                  Control operator header
 cv.h                   Code value header
 cygwin32/cw32imp.h     Cygwin32 port
@@ -934,8 +935,7 @@ utils/perlcc.PL             Front-end for compiler
 utils/perldoc.PL       A simple tool to find & display perl's documentation
 utils/pl2pm.PL         A pl to pm translator
 utils/splain.PL                Stand-alone version of diagnostics.pm
 utils/perldoc.PL       A simple tool to find & display perl's documentation
 utils/pl2pm.PL         A pl to pm translator
 utils/splain.PL                Stand-alone version of diagnostics.pm
-vms/config.vms         default config.h for VMS
-vms/descrip.mms                MM[SK] description file for build
+vms/descrip_mms.template               Template MM[SK] description file for build
 vms/ext/DCLsym/0README.txt     ReadMe file for VMS::DCLsym
 vms/ext/DCLsym/DCLsym.pm       Perl access to CLI symbols
 vms/ext/DCLsym/DCLsym.xs       Perl access to CLI symbols
 vms/ext/DCLsym/0README.txt     ReadMe file for VMS::DCLsym
 vms/ext/DCLsym/DCLsym.pm       Perl access to CLI symbols
 vms/ext/DCLsym/DCLsym.xs       Perl access to CLI symbols
@@ -957,12 +957,14 @@ vms/genconfig.pl  retcon config.sh from config.h
 vms/genopt.com         hack to write options files in case of broken makes
 vms/make_command.com   record MM[SK] command used to build Perl
 vms/mms2make.pl                convert descrip.mms to make syntax
 vms/genopt.com         hack to write options files in case of broken makes
 vms/make_command.com   record MM[SK] command used to build Perl
 vms/mms2make.pl                convert descrip.mms to make syntax
+vms/munchconfig.c   performs shell $var substitution for VMS
 vms/myconfig.com       record local configuration info for bug report
 vms/perlvms.pod                VMS-specific additions to Perl documentation
 vms/perly_c.vms                perly.c with fixed declarations for global syms
 vms/perly_h.vms                perly.h with fixed declarations for global syms
 vms/sockadapt.c                glue for SockshShr socket support
 vms/sockadapt.h                glue for SockshShr socket support
 vms/myconfig.com       record local configuration info for bug report
 vms/perlvms.pod                VMS-specific additions to Perl documentation
 vms/perly_c.vms                perly.c with fixed declarations for global syms
 vms/perly_h.vms                perly.h with fixed declarations for global syms
 vms/sockadapt.c                glue for SockshShr socket support
 vms/sockadapt.h                glue for SockshShr socket support
+vms/subconfigure.com    performs compiler checks and writes config.sh, config.h, and descrip.mms
 vms/test.com           DCL driver for regression tests
 vms/vms.c              VMS-specific C code for Perl core
 vms/vms_yfix.pl                convert Unix perly.[ch] to VMS perly_[ch].vms
 vms/test.com           DCL driver for regression tests
 vms/vms.c              VMS-specific C code for Perl core
 vms/vms_yfix.pl                convert Unix perly.[ch] to VMS perly_[ch].vms
index 21efaa0..aa3111e 100644 (file)
@@ -1,6 +1,11 @@
-Last Revised 11-September-1997 by Dan Sugalski <sugalsd@lbcc.cc.or.us>
+Last Revised 02-June-1998 by Dan Sugalski <sugalskd@ous.edu>
 Originally by Charles Bailey <bailey@newman.upenn.edu>
 
 Originally by Charles Bailey <bailey@newman.upenn.edu>
 
+* Important safety tip
+
+The build procedure has changed significantly from the 5.004 releases! Make
+sure you read the "Building Perl" section before you build.
+
 * Intro
 
 The VMS port of Perl is as functionally complete as any other Perl port
 * Intro
 
 The VMS port of Perl is as functionally complete as any other Perl port
@@ -38,72 +43,44 @@ In addition to VMS, you'll need:
 If you want to include socket support, you'll need a TCP stack and either
 Dec C, or socket libraries. See the Socket Support topic for more details.
 
 If you want to include socket support, you'll need a TCP stack and either
 Dec C, or socket libraries. See the Socket Support topic for more details.
 
-* Compiling Perl
-
->From the top level of the Perl source directory, do this:
-
-MMS/DESCRIP=[.VMS]DESCRIP.MMS
-
-If you're on an Alpha, add /Macro=("__AXP__=1","decc=1")
-If you're using Dec C as your C compiler (you are on all alphas), add
-/Macro=("decc=1")
-If Vac C is your default C compiler and you want to use Dec C, add
-/Macro=("CC=CC/DECC") (Don't forget the /macro=("decc=1")
-If Dec C is your default C compiler and you want to use Vax C, add
-/Macro=("CC=CC/VAXC")
-If you want Socket support and are using the SOCKETSHR socket library, add
-/Macro=("SOCKETSHR_SOCKETS=1")
-If you want Socket support and are using the Dec C RTL socket interface
-(You must be using Dec C for this), add /Macro=("DECC_SOCKETS=1")
-
-If you have multiple /macro= items, combine them together in one /Macro=()
-switch, with all the options inside the parentheses separated by commas.
-
-Samples:
-
-VMS AXP, with Socketshr sockets:
-
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("decc=1","__AXP__=1","SOCKETSHR_SOCKETS=1")
-
-VMS AXP with no sockets
+* Building Perl
 
 
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("decc=1","__AXP__=1")
+Building perl has two steps, configuration and compilation.
 
 
-VMS AXP with the Dec C RTL sockets
+To configure perl (a necessary first step), issue the command
 
 
-$MMS/DESCRIP=[.VMS]/Macro=("decc=1","__AXP__=1","DECC_SOCKETS=1")
+@CONFIGURE
 
 
-VMS VAX with default system compiler, no sockets
+from the top of an unpacked perl directory. You'll be asked a series of
+questions, and the answers to them (along with the capabilities of your C
+compiler and network stack) will determine how perl's built.
 
 
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS
-
-VMS VAX with Dec C compiler, no sockets
-
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("CC=CC/DECC","decc=1")
-
-VMS VAX with Dec C compiler, Dec C RTL sockets
-
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("CC=CC/DECC","decc=1","DECC_SOCKETS=1")
-
-VMS VAX with Dec C compiler, Socketshr sockets
-
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("CC=CC/DECC","decc=1","SOCKETSHR_SOCKETS=1")
-
-Using Dec C is recommended over Vax C. The compiler is newer, and
-supported. (Vax C was decommisioned around 1993) Various older versions had
-some gotchas, so if you're using a version older than 5.2, check the Dec C
-Issues section.
+If you've got multiple C compilers installed, you'll have your choice of
+which one to use. Using Dec C is recommended over Vax C--the compiler is
+newer, and supported. (Vax C was decommisioned around 1993) Various older
+versions had some gotchas, so if you're using a version older than 5.2,
+check the Dec C Issues section.
 
 We'll also point out that Dec C will get you at least a ten-fold increase
 in line-oriented IO over Vax C. The optimizer is amazingly better, too. If
 you can use Dec C, then you *really*, *really* should.
 
 
 We'll also point out that Dec C will get you at least a ten-fold increase
 in line-oriented IO over Vax C. The optimizer is amazingly better, too. If
 you can use Dec C, then you *really*, *really* should.
 
+The configuration script will print out, at the very end, the MMS or MMK
+command you need to compile perl. Issue it (exactly as printed) to start
+the build.
 
 Once you issue your MMS command, sit back and wait. Perl should build and
 link without a problem. If it doesn't, check the Gotchas to watch out for
 section. If that doesn't help, send some mail to the VMSPERL mailing list.
 Instructions are in the Mailing Lists section.
 
 
 Once you issue your MMS command, sit back and wait. Perl should build and
 link without a problem. If it doesn't, check the Gotchas to watch out for
 section. If that doesn't help, send some mail to the VMSPERL mailing list.
 Instructions are in the Mailing Lists section.
 
+As a handy shortcut, the command:
+
+@CONFIGURE "-des"
+
+(note the quotes and case) will choose reasonable defaults. (It takes Dec C
+over Vax C, Dec C sockets over SOCKETSHR sockets, and either over no sockets)
+
 * Testing Perl
 
 Once Perl has built cleanly, you need to test it to make sure things work.
 * Testing Perl
 
 Once Perl has built cleanly, you need to test it to make sure things work.
@@ -116,11 +93,11 @@ compile Perl and add the word "test" to the end, like this:
 
 Compile Command:
 
 
 Compile Command:
 
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1")
+$MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1")
 
 Test Command:
 
 
 Test Command:
 
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1") test
+$MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1") test
 
 MMS will run all the tests. This may take some time, as there are a lot of
 tests. If any tests fail, there will be a note made on-screen. At the end
 
 MMS will run all the tests. This may take some time, as there are a lot of
 tests. If any tests fail, there will be a note made on-screen. At the end
@@ -137,16 +114,14 @@ confident you are, make a bug report to the VMSPerl mailing list.
 If one or more tests fail, you can get more info on the failure by issuing
 this command sequence:
 
 If one or more tests fail, you can get more info on the failure by issuing
 this command sequence:
 
-$ SET DEFAULT [.T]
-$ @[-.VMS]TEST .typ -v [.subdir]test.T
+$ @[.VMS]TEST .typ "-v" [.subdir]test.T
 
 where ".typ" is the file type of the Perl images you just built (if you
 didn't do anything special, use .EXE), and "[.subdir]test.T" is the test
 that failed. For example, with a normal Perl build, if the test indicated
 that [.op]time failed, then you'd do this:
 
 
 where ".typ" is the file type of the Perl images you just built (if you
 didn't do anything special, use .EXE), and "[.subdir]test.T" is the test
 that failed. For example, with a normal Perl build, if the test indicated
 that [.op]time failed, then you'd do this:
 
-$ SET DEFAULT [.T]
-$ @[-.VMS]TEST .EXE -v [.OP]TIME.T
+$ @[.VMS]TEST .EXE "-v" [.OP]TIME.T
 
 When you send in a bug report for failed tests, please include the output
 from this command, which is run from the main source directory:
 
 When you send in a bug report for failed tests, please include the output
 from this command, which is run from the main source directory:
@@ -164,11 +139,11 @@ compile and add "realclean" at the end, like this:
 
 Compile Command:
 
 
 Compile Command:
 
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1")
+$MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1")
 
 Cleanup Command:
 
 
 Cleanup Command:
 
-$MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1") realclean
+$MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1") realclean
 
 If you don't do this, things may behave erratically. They might not, too,
 so it's best to be sure and do it.
 
 If you don't do this, things may behave erratically. They might not, too,
 so it's best to be sure and do it.
@@ -299,17 +274,16 @@ PERLBUG@PERL.COM.
 * Gotchas to watch out for
 
 Probably the single biggest gotcha in compiling Perl is giving the wrong
 * Gotchas to watch out for
 
 Probably the single biggest gotcha in compiling Perl is giving the wrong
-switches to MMS/MMK when you build. If Perl's building oddly, double-check
-your switches. If you're on a VAX, be sure to add a /Macro=("decc=1") if
-you're using Dec C, and if you're on an alpha and using MMS, you'll need a
-/Macro=("__AXP__=1")
+switches to MMS/MMK when you build. Use *exactly* what the configure script
+prints!
 
 The next big gotcha is directory depth. Perl can create directories four
 and five levels deep during the build, so you don't have to be too deep to
 start to hit the RMS 8 level point. It's best to do a
 $DEFINE/TRANS=(CONC,TERM) PERLSRC disk:[dir.dir.dir.perldir.]"  (note the
 trailing period) and $SET DEFAULT PERLSRC:[000000] before building. Perl
 
 The next big gotcha is directory depth. Perl can create directories four
 and five levels deep during the build, so you don't have to be too deep to
 start to hit the RMS 8 level point. It's best to do a
 $DEFINE/TRANS=(CONC,TERM) PERLSRC disk:[dir.dir.dir.perldir.]"  (note the
 trailing period) and $SET DEFAULT PERLSRC:[000000] before building. Perl
-modules can be just as bad (or worse), so watch out for them, too.
+modules can be just as bad (or worse), so watch out for them, too. The
+configuration script will warn if it thinks you're too deep.
 
 Finally, the third thing that bites people is leftover pieces from a failed
 build. If things go wrong, make sure you do a "(MMK|MMS|make) realclean"
 
 Finally, the third thing that bites people is leftover pieces from a failed
 build. If things go wrong, make sure you do a "(MMK|MMS|make) realclean"
diff --git a/configure.com b/configure.com
new file mode 100644 (file)
index 0000000..57fb5c5
--- /dev/null
@@ -0,0 +1,1952 @@
+$ sav_ver = 'F$VERIFY(0)'
+$! SET VERIFY
+$!
+$! Installation and usage: COPY this file into you perl source tree - at or 
+$! below where the main MANIFEST. file is located.
+$!
+$! For example, if you unpacked perl into: [USER.PERL5_00n...] then you will 
+$! want to:
+$!
+$! $ COPY Configure.com [USER.PERL5_00n.VMS] 
+$!
+$! Now cd into the tree and execute Configure:
+$!
+$! $ SET DEFAULT [USER.PERL5_00n]
+$! $ @[.vms]Configure 
+$!
+$! or
+$!
+$! $ SET DEFAULT [USER.PERL5_00n]
+$! $ @[.vms]Configure "-des"
+$!
+$! That's it. If you get into a bind trying to build perl on VMS then 
+$! definitely read through the README.VMS file as well as the top of the 
+$! [.VMS]DESCRIP.MMS file.  
+$! Beyond that send email to VMSPerl@cor.newman.upenn.edu 
+$!
+$! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+$!
+$! This CONFIGURE.COM prototype is available from:
+$! http://w4.lns.cornell.edu/~pvhp/perl/vms/devel/configure.com
+$! send suggestions to: 
+$!  Peter Prymmer pvhp@lns62.lns.cornell.edu or pvhp@forte.com
+$! Thank you!!!!
+$!
+$! Adapted and converted from Larry Wall & Andy Dougherty's
+$! "Configure generated by metaconfig 3.0 PL60."
+$! (a Bourne sh[ell] script for configuring the installation of perl on VMS)
+$! in the perl5.002|3 epoch (spring/summer 1996)
+$! with much valuable help from Charles Bailey & 
+$! the whole VMSPerl crew.
+$!
+$! SET NOVERIFY
+$ sav_ver = F$VERIFY(sav_ver)
+$!
+$! VMS-isms we will need:
+$ echo = "write sys$output "
+$ cat  = "type"
+$ gcc_symbol = "gcc"
+$ ans = ""
+$ macros = ""
+$ C_Compiler_Replace = "CC="
+$ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
+$! max_allowed_dir_depth = 3  ! e.g. [A.B.PERL5_00n] not [A.B.C.PERL5_00n]
+$ max_allowed_dir_depth = 2  ! e.g. [FOO.PERL5_00n] not [FOO.BAR.PERL5_00n]
+$!
+$ vms_filcnt = F$GETJPI ("","FILCNT")
+$!
+$!: compute my invocation name
+$ me = F$ENVIRONMENT("PROCEDURE")
+$!
+$! Many null statements (begin with colon ':') in the Bourne shell version of
+$! this script serve as comments/placeholders. I have retained some of the ones
+$! that will help you compare this .COM file to the sh version - as well as
+$! leave placeholders for future improvements to this .COM file.
+$! sfn = VMS "skipped for now"
+$!
+$!: Proper PATH separator                              !sfn
+$!: Proper PATH setting                                !sfn
+$!: Sanity checks                                      !sfn "Say '@''$me''"
+$!: On HP-UX, large Configure scripts may exercise a bug in /bin/sh !sfn
+$!: Configure runs within the UU subdirectory          !->after find MANIFEST
+$!   <big long list of default values (mostly null)>
+$!: We must find out about Eunice early                !(?)
+$!: list of known cpp symbols, sorted alphabetically   !sfn
+$!   al = al + "..."
+$!: default library list                               !sfn
+$!   <no hints files in use (yet?)>
+$!: Extra object files, if any, needed on this platform. !sfn
+$!: Possible local include directories to search.      !sfn
+$!: Set locincpth to "" in a hint file to defeat local include searches. !sfn
+$!locincpth="/usr/local/include /opt/local/include /usr/gnu/include" !sfn
+$!locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
+$!: no include file wanted by default                  !sfn
+$!inclwanted=''                                        !sfn
+$!: Possible local library directories to search.      !sfn
+$!loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib" !sfn
+$!loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib" !sfn
+$!: general looking path for locating libraries        !sfn
+$!glibpth="/lib/pa1.1 /usr/shlib /usr/lib/large /lib /usr/lib" !sfn
+$!glibpth="$glibpth $xlibpth /lib/large /usr/lib/small /lib/small" !sfn
+$!glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/shlib" !sfn
+$!: Private path used by Configure to find libraries.  Its value !sfn
+$!: is prepended to libpth. This variable takes care of special !sfn
+$!: machines, like the mips.  Usually, it should be empty. !sfn
+$!plibpth=''                                           !sfn
+$!: full support for void wanted by default            !sfn
+$!defvoidused=15                                       !sfn
+$!: List of libraries we want.                         !sfn
+$!libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl' !sfn
+$!libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt" !sfn
+$!libswanted="$libswanted ucb bsd BSD PW x"            !sfn
+$!: We probably want to search /usr/shlib before most other libraries. !sfn
+$!: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist. !sfn
+$!glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'` !sfn
+$!glibpth="/usr/shlib $glibpth"                        !sfn
+$!: Do not use vfork unless overridden by a hint file. !sfn
+$!usevfork=false                                       !sfn
+$!: script used to extract .SH files with variable substitutions !sfn
+$!: produce awk script to parse command line options   !sfn
+$!sfn (assume no sed awk) see below
+$!: process the command line options         
+$!
+$!: set up default values
+$ fastread=""
+$ reuseval="false"
+$ config_sh=""
+$ alldone=""
+$ error=""
+$ silent=""
+$ extractsh=""
+$ override=""
+$ knowitall=""
+$ Using_Dec_C = ""
+$ Using_Vax_C = ""
+$ Using_Gnu_C = ""
+$ Dec_C_Version = ""
+$ use_threads = "F"
+$!
+$!: option parsing
+$ IF (P1 .NES. "")
+$ THEN            !one or more switches was thrown
+$   i = 1
+$   bang = 0
+$Param_loop:
+$   IF (P'i'.NES."") THEN bang = bang + 1
+$   i = i + 1
+$   IF (i.LT.9) THEN GOTO Param_loop !DCL allows P1..P8
+$!
+$   i = 1
+$Opt_loop:
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "-") THEN P'i' = P'i' - "-"
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "/") THEN P'i' = P'i' - "/"
+$Remove_quotation_mark:
+$   P'i' = P'i' - """"
+$   IF F$LOCATE("""",P'i') .LT. F$LENGTH(P'i') THEN GOTO Remove_quotation_mark
+$   gotopt      = "f" !"alse"
+$   gotshortopt = "f" !"alse"
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "d")
+$   THEN
+$     fastread    = "yes"
+$     gotopt      = "t" !"rue"
+$     P'i'        = P'i' - "d"
+$     gotshortopt = "t" !"rue"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "e")
+$   THEN
+$     alldone = "cont"
+$     gotopt = "t"
+$     P'i' = P'i' - "e"
+$     gotshortopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "f") !"-f")
+$   THEN
+$     P'i' = P'i' - "f"
+$     config_sh = P'i'
+$     IF (F$SEARCH(config_sh).NES."")
+$     THEN
+$       test = F$FILE_ATTRIBUTES(config_sh,"PRO")
+$       IF (F$LOCATE("R",test).NE.F$LENGTH(test)) 
+$       THEN
+$         CONTINUE !at this point check UIC && if test allows...
+$                  !to be continued ?
+$       ELSE
+$         echo "''me': cannot read config file ''config_sh'."
+$         error="true"
+$       ENDIF
+$     ELSE
+$       echo "''me': cannot read config file ''config_sh'."
+$       error="true"
+$     ENDIF
+$     gotopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "h")
+$   THEN
+$     error = "true"
+$     gotopt = "t"
+$     P'i' = P'i' - "h"
+$     gotshortopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "r")
+$   THEN
+$     reuseval = "true"
+$     gotopt = "t"
+$     P'i' = P'i' - "r"
+$     gotshortopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "s")
+$   THEN
+$     silent = "true"
+$     gotopt = "t"
+$     P'i' = P'i' - "s"
+$     gotshortopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "E") !"-E")
+$   THEN
+$     alldone = "exit"
+$     gotopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "K") !"-K")
+$   THEN
+$     knowitall = "true"
+$     gotopt = "t"
+$     P'i' = P'i' - "K"
+$     gotshortopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "O")
+$   THEN
+$     override = "true"
+$     gotopt = "t"
+$     P'i' = P'i' - "O"
+$     gotshortopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "S") !"-S")
+$   THEN
+$     extractsh = "true" !VMS?
+$     gotopt = "t"
+$     P'i' = P'i' - "S"
+$     gotshortopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "D") !"-D")
+$   THEN
+$     P'i' = P'i' - "D"
+$!Hmm.. this part needs work
+$!       P'i'
+$     IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
+$     THEN
+$       P'i' = "define"
+$     ELSE 
+$       IF (F$LOCATE("=",P'i') .EQ. (F$LENGTH(P'i') - 1))
+$       THEN
+$         me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
+$         echo "''me': use '-Usymbol=val' not '-Dsymbol='."
+$         echo "''me': ignoring -D",P'i'
+$       ELSE
+$!Hmm.. this part needs work
+$!           'F$EXTRACT(0,F$LOCATE("=",P'i'),P'i')' = -
+$! 'F$EXTRACT(F$LOCATE("=",P'i'),P'i'),F$LENGTH(P'i'),P'i')'
+$       ENDIF
+$     ENDIF
+$     ECHO "P''i' =>",P'i',"<="  !Diag
+$     gotopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "U") !"-U")
+$   THEN
+$     P'i' = P'i' - "U"
+$     IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
+$     THEN
+$       P'i' = ""
+$     ELSE 
+$       IF (F$LOCATE("=",P'i') .LT. (F$LENGTH(P'i') - 1))
+$       THEN
+$         me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
+$         echo "''me': use '-Dsymbol=val' not '-Usymbol=val'."
+$         echo "''me': ignoring -U",P'i'
+$       ELSE
+$         P'i' = "undef"
+$       ENDIF
+$     ENDIF
+$     ECHO "P''i' =>",P'i',"<="  !Diag
+$     gotopt = "t"
+$   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "V")
+$   THEN
+$     me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
+$     echo "''me' generated by an unknown version of EDT."
+$     STOP
+$     EXIT !0
+$   ENDIF
+$   IF .NOT.gotopt 
+$   THEN
+$     echo "''me': unknown option ",P'i'
+$     error = "true"
+$   ENDIF
+$   IF (F$LENGTH(P'i').GT.0).AND.(gotshortopt) THEN i = i - 1 !clustered switch
+$   i = i + 1 
+$   IF (i .LT. (bang + 1)) THEN GOTO Opt_loop
+$!
+$ ENDIF  ! (P1 .NES. "")
+$!
+$ IF (error)
+$ THEN
+$   me = F$PARSE(me,,,"DIRECTORY")+ F$PARSE(me,,,"NAME")
+$   echo "Usage: @''me' [-dehrEKOSV] [-fconfig.sh] [-Dsymbol] [-Dsymbol=value]"
+$   echo "                [-Usymbol] [-Usymbol=]"
+$   TYPE SYS$INPUT
+ "-d" : use defaults for all answers.
+ "-e" : go on without questioning past the production of config.sh.    *
+ "-f" : specify an alternate default configuration file.
+ "-h" : print this help message and exit (with an error status).
+ "-r" : reuse C symbols value if possible (skips costly nm extraction).*
+ "-s" : silent mode, only echoes questions and essential information.
+ -"D" : define symbol to have some value:                              *
+         -"Dsymbol"         symbol gets the value 'define'
+         -"Dsymbol=value"   symbol gets the value 'value'
+  -E  : stop at the end of questions, after having produced config.sh. *
+  -K  : do not use unless you know what you are doing.
+  -O  : let -D and -U override definitions from loaded configuration file. *
+  -S  : perform variable substitutions on all .SH files (can mix with -f) *
+ -"U" : undefine symbol:                                               *
+         -"Usymbol"    symbol gets the value 'undef'
+         -"Usymbol="   symbol gets completely empty
+  -V  : print version number and exit (with a zero status).
+$   echo "%Config-I-VMS, lower case switches must be enclosed"
+$   echo "-Config-I-VMS, in double quotation marks, e.g.:"
+$   echo "-Config-I-VMS,   @Configure ""-des"""
+$   echo "-Config-I-VMS, * indicates switch may not be fully implemented for VMS."
+$   SET DEFAULT 'vms_default_directory_name' !be kind rewind
+$   STOP
+$   EXIT 3 ! $STATUS = "%X00000003" (informational)
+$ ENDIF
+$!
+$ GOTO Check_silence
+$!
+$Shut_up:
+$ STDOUT = F$TRNLNM("SYS$OUTPUT")
+$ DEFINE SYS$OUTPUT "_NLA0:"
+$ echo4 = "write STDOUT "
+$ cat4 = "TYPE/OUTPUT=''STDOUT'"
+$ open/write STDOUT 'STDOUT'
+$ RETURN
+$!
+$Check_silence:
+$ IF (silent) 
+$ THEN
+$   GOSUB Shut_up
+$ ELSE
+$   echo4 = "write SYS$OUTPUT "
+$   cat4 = "TYPE"
+$ ENDIF
+$!
+$!: run the defines and the undefines, if any, but leave the file out there...
+$! Unfortunately Configure.COM in DCL is not yet set up to do this - 
+$! maybe someday
+$!
+$!: set package name
+$ package = "perl5"
+$!
+$!: Eunice requires " " instead of "", can you believe it
+$ echo ""
+$!: Here we go...
+$ echo "Beginning of configuration questions for ''package'."
+$ echo ""
+$!
+$!: Some greps do not return status, grrr.
+$ contains = "SEARCH"
+$!
+$!: first determine how to suppress newline on echo command !cant DCL is record oriented
+$! echo "Checking ''echo' to see how to suppress newlines..."
+$! echo "giving up..."
+$! echo "The star should be here-->*"
+$!
+$!: Now test for existence of everything in MANIFEST
+$ echo ""
+$ echo4 "First let's make sure your kit is complete.  Checking..."
+$ manifestfound = "" 
+$ miss_list = "" 
+$! Here I assume we are in the [foo.PERL5xxx.VMS...] tree
+$! because the search routine simply does set def [-] if necessary.
+$ file_2_find = "MANIFEST" !I hope this one is not in [foo.PERL5xxx.VMS...] 
+$Research_manifest:
+$ manifestfound = F$SEARCH(file_2_find)
+$ IF (manifestfound .EQS. "")
+$ THEN
+$   IF F$PARSE(F$ENVIRONMENT("DEFAULT"),,,"DIRECTORY",).NES."[000000]"
+$   THEN
+$     SET DEFAULT [-]
+$     GOTO Research_manifest
+$   ELSE
+$     echo ""
+$     echo "There is no MANIFEST file.  I hope your kit is complete !"
+$     miss_list = ""
+$     GOTO Beyond_manifest
+$   ENDIF
+$ ELSE
+$! MANIFEST. has been found and we have set def'ed there - 
+$! time to bail out before it's too late.
+$   IF (F$ELEMENT(max_allowed_dir_depth,".",F$ENVIRONMENT("Default")).nes.".")
+$   THEN
+$     TYPE SYS$INPUT:
+%Config-E-VMS, ERROR:
+ Sorry! It apears as though your perl build sub-directory is already too
+ deep into the VMS file system. Please try moving stuff into a shallower 
+ directory (or altering the "max_allowed_dir_depth" parameter).
+$     echo4 "ABORTING..."
+$     SET DEFAULT 'vms_default_directory_name' !be kind rewind
+$     STOP
+$     EXIT !2 !$STATUS = "%X00000002" (error)
+$   ENDIF
+$!
+$! after finding MANIFEST let's create (but not yet enter) the UU subdirectory
+$!
+$   IF (manifestfound .NES. "")
+$   THEN
+$     IF ( F$SEARCH("UU.DIR").EQS."" )
+$     THEN
+$       CREATE/DIRECTORY [.UU]
+$     ELSE
+$       IF ( F$SEARCH("[.UU]*.*").NES."" ) THEN DELETE/NOLOG [.UU]*.*;*
+$     ENDIF
+$!: Configure runs within the UU subdirectory
+$     SET DEFAULT [.UU]
+$!
+$! a little redundancy never hurt anybody?
+$     file_2_find = "[-]" + file_2_find
+$     manifestfound = F$SEARCH(file_2_find)
+$!
+$     OPEN/WRITE MISSING MISSING.
+$!change to "FALSE" if you wish to skip the manifest search 
+$!(which after all is rather slow in DCL :-)
+$     IF ("TRUE")      
+$     THEN
+$       OPEN/READ CONFIG 'manifestfound'
+$Read_loop_manifest:
+$       READ/END_OF_FILE = Done_manifest CONFIG line
+$! This algorithm turns "foo/bar/baz.c" into "[.foo.bar]baz.c"
+$! pvhp@lns62.lns.cornell.edu 10-JUN-1996 20:31:46
+$! 2-MAR-1998 15:46:11 Improved to turn "foo/bar/baz.c.buz"
+$! into "[.foo.bar]baz.c_buz as happens with vmstar and unzip
+$       line = F$EDIT(line,"TRIM, COMPRESS")
+$       file_2_find = F$EXTRACT(0,F$LOCATE(" ",line),line) 
+$       IF F$LOCATE("/",file_2_find) .NE. F$LENGTH(file_2_find) 
+$       THEN 
+$Re_strip_line_manifest:
+$         loca = F$LOCATE("/",file_2_find)
+$         ante = F$EXTRACT(0,loca,file_2_find)
+$         post = F$EXTRACT(loca,F$LENGTH(file_2_find),file_2_find)
+$         test_this = ante + "." + (post - "/")
+$         IF F$LOCATE("/",test_this) .NE. F$LENGTH(test_this)
+$         THEN 
+$           file_2_find = ante + "." + (post - "/")
+$           GOTO Re_strip_line_manifest
+$         ELSE
+$           file_2_find = ante + "]" + (post - "/")
+$         ENDIF
+$           file_2_find = "[-."+file_2_find
+$       ELSE
+$         file_2_find = "[-]" + file_2_find
+$       ENDIF
+$!
+$       dirname = F$EXTRACT(0,F$LOCATE("]",file_2_find),file_2_find) + "]"
+$       file_2_find = file_2_find - dirname
+$       dots = 0
+$Dot_loop:
+$       dot_ele = F$ELEMENT(dots,".",file_2_find)
+$       IF dot_ele .EQS. "." THEN GOTO Eo_dot_loop
+$       IF dots .eq. 0
+$       THEN basename = f$extract(0,f$locate(".",file_2_find),file_2_find) + "."
+$       ELSE basename = basename + dot_ele + "_"
+$       ENDIF
+$       dots = dots + 1
+$       GOTO dot_loop
+$Eo_dot_loop:
+$       IF (((f$length(file_2_find)+1) .eq. f$length(basename)) .and. -
+             (f$extract(f$length(basename)-1,1,basename) .eqs. "_")) THEN -
+          basename = f$extract(0,f$length(basename)-1,basename)
+$       file_2_find = dirname + basename
+$!
+$       found = F$SEARCH(file_2_find)
+$       IF (found .EQS. "")
+$       THEN
+$         WRITE MISSING file_2_find
+$         IF ((F$LENGTH(miss_list)+F$LENGTH(file_2_find)).LT.250)
+$         THEN
+$           miss_list = miss_list + "," + file_2_find
+$         ENDIF
+$       ENDIF
+$       GOTO Read_loop_manifest
+$Done_manifest:
+$       CLOSE CONFIG
+$     ENDIF  !"TRUE"
+$     CLOSE MISSING
+$   ENDIF ! (manifestfound .NES. "")
+$Beyond_manifest:
+$   IF (miss_list .NES. "")
+$   THEN
+$     echo "Some of the files not found include:"
+$     cat4 MISSING.
+$   ENDIF
+$   IF ((miss_list .NES. "").OR.(manifestfound .EQS. ""))
+$   THEN
+$     TYPE SYS$INPUT:
+
+THIS PACKAGE SEEMS TO BE INCOMPLETE.
+
+You have the option of continuing the configuration process, despite the
+distinct possibility that your kit is damaged, by typing 'y'es.  If you
+do, don't blame me if something goes wrong.  I advise you to type 'n'o
+and contact the author (pvhp@lns62.lns.cornell.edu).
+
+$     READ SYS$COMMAND/PROMPT="Continue? [n] " ans
+$     IF ans
+$     THEN
+$       echo4 "Continuing..."
+$     ELSE
+$       echo4 "ABORTING..."
+$       GOTO Clean_up
+$     ENDIF
+$   ELSE
+$     echo4 "Looks good..."
+$     DELETE/NOLOG MISSING.;
+$   ENDIF ! (miss_list .NES. "")
+$ ENDIF   ! (manifestfound .EQS. "") ELSE 
+$!
+$! after finding MANIFEST (see above)
+$!: Configure runs within the UU subdirectory 
+$!
+$!: compute the number of columns on the terminal for proper question formatting
+$! (sfn, will assume 80-ish)
+$!
+$!: set up the echo used in my read              !sfn
+$!: now set up to do reads with possible shell escape and default assignment !sfn
+$ GOTO Beyond_myread
+$!
+$myread:
+$ ans = ""
+$ If (fastread)
+$ Then
+$   echo4 "''rp'"
+$ Else
+$   If (silent)
+$   Then
+$     READ SYS$COMMAND/PROMPT="''rp'" ans
+$   Else
+$     echo ""
+$     READ SYS$COMMAND/PROMPT="''rp'" ans
+$   Endif
+$ Endif
+$ RETURN
+$!
+$Beyond_myread:
+$!
+$!: create .config dir to save info across Configure sessions
+$ IF ( F$SEARCH("[-]CONFIG.DIR").EQS."" )
+$ THEN
+$   CREATE/DIRECTORY [-.CONFIG]
+$   OPEN/WRITE CONFIG [-.CONFIG]README.
+$   WRITE CONFIG -
+      "This directory created by Configure to save information that should"
+$   WRITE CONFIG -
+      "persist across sessions."
+$   WRITE CONFIG ""
+$   WRITE CONFIG -
+      "You may safely delete it if you wish."
+$   CLOSE CONFIG
+$ ENDIF
+$!
+$!: general instructions
+$ needman = "true"
+$ firsttime = "true"
+$ user = F$EDIT(F$GETJPI("","USERNAME"),"TRIM,COLLAPSE")
+$ IF .NOT.(F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
+$ THEN
+$   messages = F$ENVIRONMENT("MESSAGE")
+$   SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT !sorry :-(
+$   contains /NOOUTPUT [-.CONFIG]INSTRUCT. 'user'
+$   IF .NOT.($status.EQ.%X08D78053)
+$   THEN
+$     firsttime=""
+$     dflt = "n"
+$     rp = "Would you like to see the instructions? [''dflt'] "
+$     GOSUB myread
+$     if .NOT.ans THEN needman=""
+$   ENDIF
+$   SET MESSAGE 'messages'                 !hope you made it here :-)
+$ ENDIF
+$ if (fastread.AND.silent.AND.(alldone.eqs."cont")) THEN needman=""
+$!
+$ IF (needman)
+$ THEN
+$   TYPE SYS$INPUT:
+
+This installation shell script will examine your system and ask you questions
+to determine how the perl5 package should be installed. If you get
+stuck on a question, you may use a ^C or ^Y shell escape to STOP this
+process, edit something, then restart this process as you just did.
+Many of the questions will have default answers in square
+brackets; typing carriage return will give you the default.
+
+$   READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$   TYPE SYS$INPUT:
+
+In a hurry? You may run '@Configure -d'.  This will bypass nearly all
+the questions and use the computed defaults (or the previous answers provided 
+there was already a config.sh file). Type '@Configure -h' for a list of 
+options.
+
+$   READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$   TYPE SYS$INPUT:
+
+Much effort has been expended to ensure that this shell script will
+run on any VMS system.  If despite that it blows up on yours, your
+best bet is to edit Configure.com and @ it again.  Whatever problems
+you have with Configure.com, let me (sugalskd@ous.edu) know how I blew
+it.
+
+$!This installation script affects things in two ways:
+$!
+$!1) it may do direct variable substitutions on some of the files included
+$!   in this kit.
+$!2) it builds a config.h file for inclusion in C programs.  You may edit
+$!   any of these files as the need arises after running this script.
+$!
+$!If you make a mistake on a question, there is no easy way to back up to it
+$!currently.
+$!
+$   READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$   IF (F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
+$   THEN
+$     OPEN/WRITE CONFIG [-.CONFIG]INSTRUCT.
+$     WRITE CONFIG user 
+$     CLOSE CONFIG
+$   ENDIF
+$ ENDIF  !(needman .EQS. "true")
+$!
+$!: see if sh knows # comments             !sfn
+$ sharpbang = "$ "
+$!: figure out how to guarantee sh startup !sfn
+$!: find out where common programs are     !sfn
+$!loclist="awk/cat/comm/cp/echo/expr/find/grep/ln/ls/mkdir/rm/sed/sort/touch/tr/uniq"
+$!trylist="Mcc/byacc/cpp/csh/date/egrep/less/line/more/nroff/perl/pg/sendmail/test/uname"
+$! echo "I don't know where '$file' is, and my life depends on it."
+$! echo "Go find a public domain implementation or fix your PATH setting!"
+$! echo ""
+$! echo "Don't worry if any of the following aren't found..."
+$!: determine whether symbolic links are supported !sfn
+$!: see whether [:lower:] and [:upper:] are supported character classes !sfn
+$!: set up the translation script tr, must be called with ./tr of course !sfn
+$!
+$!: Try to determine whether config.sh was made on this system
+$!: Get old answers from old config file if Configure was run on the
+$!: same system, otherwise use the hints.
+$ config_sh_es = "''config_sh'/[-]config.sh/[-.vms]config.vms/"
+$ i = 0
+$ max = 3
+$Config_sh_look:
+$ config_sh = F$ELEMENT(i,"/",config_sh_es)
+$ i = i + 1
+$ IF (config_sh.NES."/").AND.(config_sh.NES."")
+$ THEN
+$   configshfound = F$SEARCH(config_sh)
+$   IF (configshfound.NES."") THEN GOTO Config_sh_found
+$ ENDIF
+$ IF (i.LT.max) THEN GOTO Config_sh_look
+$ IF (configshfound.EQS."") THEN GOTO Beyond_config_sh
+$Config_sh_found:
+$ echo ""
+$ echo "Fetching default answers from ''config_sh'..."
+$!we actually do not have "hints/" for VMS
+$!     TYPE SYS$INPUT:
+$!
+$!First time through, eh?  I have some defaults handy for the following systems:
+$!
+$!     echo "     ","VMS_VAX"
+$!     echo "     ","VMS_AXP"
+$!        : Now look for a hint file osname_osvers, unless one has been
+$!        : specified already.
+$!     TYPE SYS$INPUT:
+$!
+$!You may give one or more space-separated answers, or "none" if appropriate.
+$!If your OS version has no hints, DO NOT give a wrong version -- say "none".
+$!
+$!     READ SYS$COMMAND/PROMPT="Which of these apply, if any? " ans
+$!
+$Beyond_config_sh:
+$!
+$!: Restore computed paths          !sfn
+$!
+$! genconfig.pl has "osname='VMS'"
+$ osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE") 
+$! %Config-I-VMS, a necessary error trap (could be PC running VCL)
+$!
+$ IF (osname .NES. "VMS")
+$ THEN
+$   echo4 "Hmm.. I wonder what ''osname' is (?)"
+$   TYPE SYS$INPUT:
+
+%Config-E-VMS, ERROR:
+
+           Err, you do not appear to be running VMS!
+ This package is intended to Configure the building of Perl for VMS.
+
+$   READ SYS$COMMAND/PROMPT="Continue anyway? [n] " ans
+$   IF ans
+$   THEN
+$     echo4 "Continuing..."
+$   ELSE
+$     echo4 "ABORTING..."
+$     SET DEFAULT 'vms_default_directory_name' !be kind rewind
+$     STOP
+$     EXIT 2 !$STATUS = "%X00000002" (error)
+$   ENDIF
+$ ELSE           !we are on VMS huzzah!
+$   IF .NOT.silent 
+$   THEN TYPE SYS$INPUT:
+
+Configure uses the operating system name and version to set some defaults.
+The default value is probably right if the name rings a bell. Otherwise,
+since spelling matters for me, either accept the default or answer "none"
+to leave it blank.
+$   ENDIF
+$   rp = "Operating system name? [''osname'] "
+$   GOSUB myread
+$   IF ans.nes.""
+$   THEN
+$     IF (ans.NES.osname) !.AND.knowitall
+$     THEN
+$       echo4 "I'll go with ''osname' anyway..."
+$     ENDIF
+$   ENDIF
+$ ENDIF !(osname .NES./.EQS. "VMS")
+$!
+$!: who configured the system
+$! see 'user' above.
+$ cf_by = F$EDIT(user,"LOWERCASE")
+$! cf_time = F$CVTIME()                 !superceded by procedure below
+$ osvers = F$GETSYI("VERSION")
+$!
+$! Peter Prymmer has seen:
+$!  "SYS$TIMEZONE_DIFFERENTIAL" = "-46800"  (sic)
+$!  "SYS$TIME_ZONE" = "EDT"
+$!
+$! Charles Lane recommended:
+$!  "SYS$TIMEZONE_DIFFERENTIAL" = "-14400"
+$!  "NEWS_TIMEZONE" = "-0500"
+$!  "ST_TIMEZONE" = "EDT"
+$!  "JAN_TIME_ZONE" = "EST  "
+$!  "MULTINET_TIMEZONE" = "EST"
+$!  "DAYLIGHT_SAVINGS"  = "1"
+$!
+$! Charles Bailey recommends (in ANU NEWS Doc Jan 1995):
+$!   "PMDF_Timezone"
+$!   "Multinet_Timezone"
+$!   "TCPware_Timezone"
+$!   "WIN$Time_Zone"
+$!
+$! This snippet o' DCL returns a string in default Unix `date` format,
+$! and it will prompt to set SYS$TIMEZONE_DIFFERENTIAL.
+$! Peter Prymmer pvhp@lns62.lns.cornell.edu
+$!
+$ MIN_TZO = -840  !units are minutes here
+$ MAX_TZO =  840
+$!
+$ wkday  = F$EXTRACT(0,3,F$CVTIME(,,"WEEKDAY"))
+$ monn   = F$CVTIME(,,"MONTH")
+$ mday   = F$EXTRACT(8,2,F$CVTIME(,,"DATE"))
+$ hour   = F$CVTIME(,,"HOUR")
+$ min    = F$CVTIME(,,"MINUTE")
+$ sec    = F$CVTIME(,,"SECOND")
+$ year   = F$CVTIME(,,"YEAR")
+$!
+$ months = "/Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec/"
+$ i = 0
+$Mon_loop:
+$ i = i + 1
+$ mon = F$ELEMENT(i,"/",months)
+$ IF i.LT.monn THEN GOTO Mon_loop
+$!
+$ tzneedset = "t"
+$ systz = F$TRNLNM("SYS$TIMEZONE_DIFFERENTIAL")
+$ IF systz.NES.""
+$ THEN
+$   tzhour = F$INTEGER(systz)/3600
+$   tzmins = F$INTEGER(systz)/60
+$   tzminrem = tzmins - tzhour*60
+$   IF tzminrem.lt.0 THEN tzminrem = -1*tzminrem  !keeps !2ZL happy
+$   IF tzhour.ge.0 
+$   THEN signothetime = "+" 
+$     IF tzhour.EQ.0.AND.tzminrem.EQ.0 
+$     THEN direction = "on GMT/"
+$     ELSE direction = "east of "
+$     ENDIF
+$   ELSE signothetime = "-"
+$     tzhour = -1*tzhour                          !keeps !UL happy
+$     direction = "west of "
+$   ENDIF
+$   echo ""
+$   echo "%Config-I-VMS,"
+$   echo "According to the setting of your ""SYS$TIMEZONE_DIFFERENTIAL"" (= ''systz')"
+$   IF tzminrem.ne.0
+$   THEN
+$     tzspan = "''tzhour' hours & ''tzminrem' minutes"
+$   ELSE
+$     tzspan = "''tzhour' hours"
+$   ENDIF
+$   dflt = "y"
+$   echo "Your system is ''tzspan' ''direction'UTC in England."
+$   rp = "%Config-I-VMS, (''systz') Is this UTC Time Zone Offset correct? [''dflt'] "
+$   GOSUB myread
+$   IF ans.OR.(ans.EQS."") 
+$   THEN 
+$     tzneedset = "f"
+$     tzd = systz
+$     GOTO Beyond_TimeZone
+$   ENDIF
+$ ELSE
+$   echo ""
+$   echo4 "%Config-I-VMS,"
+$   echo4 """SYS$TIMEZONE_DIFFERENTIAL"" does not appear to be DEFINEd on your system"
+$ ENDIF
+$!
+$TZSet:
+$ echo ""
+$ echo "Please tell me in hh:mm form what time offset from GMT/UTC in England"
+$ echo "you are. As an example Eastern (US) Standard Time is -5:00 offset, but"
+$ echo "Eastern Daylight Time (summer) is -4:00 offset."
+$ dflt = "0:00"
+$ rp = "Enter the Time Zone offset: [''dflt'] "
+$ GOSUB myread
+$ ans = F$Edit(ans,"collapse,trim,uncomment,upcase")
+$ IF ans.EQS."" THEN ans = dflt
+$ tzhour   = F$ELEMENT(0,":","''ans'") !first
+$ IF tzhour.EQS."" THEN tzhour = 0
+$ tzhour   = F$INTEGER(tzhour)
+$ tzminrem = F$ELEMENT(1,":","''ans'") !second
+$ IF tzminrem.NES."" 
+$ THEN 
+$   tzminrem = F$INTEGER(tzminrem)
+$   IF F$EXTRACT(0,1,"''ans'") .EQS. "-" THEN tzminrem = tzminrem * -1
+$ ELSE 
+$   tzminrem = 0
+$ ENDIF
+$ tzmins = tzhour*60 + tzminrem
+$ tzd = F$STRING(tzmins*60)
+$ IF tzhour .GE. 0 
+$ THEN
+$   signothetime = "+" 
+$ ELSE
+$   tzhour = -1*tzhour       !keeps !UL happy
+$   signothetime = "-"
+$ ENDIF
+$ IF (tzmins.GT.MAX_TZO).OR.(tzmins.LT.MIN_TZO)
+$ THEN
+$   echo ""
+$   echo "%Config-W-VMS-TIMERANGE, Response must be in the range -14:00 to 14:00."
+$   goto TZSet
+$ ENDIF
+$!
+$Beyond_TimeZone:
+$ tz = f$fao("UTC!AS!UL:!2ZL",signothetime,tzhour,tzminrem)
+$ cf_time = "''wkday' ''mon' ''mday' ''hour':''min':''sec' ''tz' ''year'"
+$!
+$!: determine the architecture name  
+$! genconfig.pl has either archname='VMS_AXP' or 'VMS_VAX'
+$!
+$ IF (F$GETSYI("HW_MODEL") .LT. 1024)
+$ THEN 
+$   archname = "VMS_VAX"
+$ ELSE
+$   archname = "VMS_AXP"
+$ ENDIF
+$ rp = "What is your architecture name? [''archname'] "
+$ GOSUB myread
+$ IF ans.NES.""
+$ THEN
+$   ans = F$EDIT(ans,"COLLAPSE, UPCASE")
+$   IF (ans.NES.archname) !.AND.knowitall
+$   THEN
+$     echo4 "I'll go with ''archname' anyway..."
+$   ENDIF
+$ ENDIF
+$ IF (archname.EQS."VMS_AXP")
+$ THEN
+$   dflt = "N"
+$   rp = "Are you sharing your PERL_ROOT with a VAX? [''dflt'] "
+$   GOSUB myread
+$   if ans.NES.""
+$   THEN
+$     ans = F$EDIT(ans,"COLLAPSE, UPCASE")
+$   ENDIF
+$   IF (ans.NES."Y")
+$   THEN
+$     sharedperl = "N"
+$   ELSE
+$     sharedperl = "Y"
+$     macros = macros + """AXE=1"","
+$   ENDIF
+$ ELSE
+$   sharedperl = "N"
+$ ENDIF
+$!
+$!: is AFS running?                       !sfn
+$!: decide how portable to be.  Allow command line overrides. !sfn
+$!: set up shell script to do ~ expansion !sfn
+$!: expand filename                       !sfn
+$!: now set up to get a file name         !sfn
+$!
+$ vms_skip_install = "true"
+$ dflt = "y"
+$! echo ""
+$ rp = "%Config-I-VMS, Do you wish to skip the """"where install"""" questions? [''dflt'] "
+$ GOSUB myread
+$ IF (.NOT.ans).AND.(ans.NES."") THEN vms_skip_install = "false"
+$ prefix = F$ENVIRONMENT("DEFAULT") - ".UU]" + "]"
+$ prefix = f$parse(prefix,,,,"NO_CONCEAL") - "][" - ".;"
+$ prefix = prefix - "]" + ".]"
+$ IF (.NOT.vms_skip_install)
+$ THEN
+$!: determine root of directory hierarchy where package will be installed.
+$   dflt = "default"
+$   IF .NOT.silent 
+$   THEN 
+$     echo ""
+$     echo "By default, ''package' will be installed in ''dflt'/bin, manual"
+$     echo "pages under ''dflt'/man, etc..., i.e. with ''dflt' as prefix for"
+$     echo "all installation directories. Typically set to /usr/local, but you"
+$     echo "may choose /usr if you wish to install ''package' among your system
+$   ENDIF
+$   IF .NOT.silent 
+$   THEN TYPE SYS$INPUT:
+binaries. If you wish to have binaries under /bin but manual pages
+under /usr/local/man, that's ok: you will be prompted separately
+for each of the installation directories, the prefix being only used
+to set the defaults.
+$   ENDIF
+$   dflt = prefix
+$   rp = "Installation prefix to use? [ ''dflt' ] "
+$   GOSUB myread
+$   IF ans.NES.""
+$   THEN 
+$     prefix = ans
+$     IF F$LOCATE(".]",ans) .EQ. F$LENGTH(ans) THEN prefix = prefix - "]" + ".]"
+$   ELSE 
+$     prefix = dflt
+$   ENDIF
+$!
+$!: set the prefixit variable, to compute a suitable default value
+$!
+$!: determine where private library files go
+$!: Usual default is /usr/local/lib/perl5.  Also allow things like 
+$!: /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
+$   IF .NOT.silent 
+$   THEN TYPE SYS$INPUT:
+
+There are some auxiliary files for perl5 that need to be put into a
+private library directory that is accessible by everyone.
+$   ENDIF
+$   dflt = prefix - ".]" + ".LIB]"
+$   rp = "Pathname where the private library files will reside? " 
+$   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
+$   GOSUB myread
+$   IF ans.NES.""
+$   THEN privlib = ans
+$   ELSE privlib = dflt
+$   ENDIF
+$!
+$ ENDIF !%Config-I-VMS, skip "where install" questions
+$!
+$!: set the base revision
+$ baserev="5.0"
+$!: get the patchlevel
+$ echo ""
+$ echo4 "Getting the current patchlevel..." !>&4
+$ patchlevel_h = F$SEARCH("[-]patchlevel.h")
+$ IF (patchlevel_h.NES."")
+$ THEN
+$   got_patch = "false"
+$   got_sub   = "false"
+$   OPEN/READONLY CONFIG 'patchlevel_h' 
+$Patchlevel_h_loop:
+$   READ/END_Of_File=Close_patch CONFIG line
+$   IF ((F$LOCATE("#define PATCHLEVEL",line).NE.F$LENGTH(line)).AND.(.NOT.got_patch))
+$   THEN
+$     line = F$EDIT(line,"COMPRESS, TRIM")
+$     patchlevel = F$EXTRACT(18,F$LENGTH(line)-18,line)
+$     got_patch = "true"
+$   ENDIF
+$   IF ((F$LOCATE("SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_sub))
+$   THEN
+$     line = F$EDIT(line,"COMPRESS, TRIM")
+$     subversion = F$EXTRACT(18,F$LENGTH(line)-18,line)
+$     got_sub = "true"
+$   ENDIF
+$   IF (.NOT.got_patch).OR.(.NOT.got_sub) THEN GOTO Patchlevel_h_loop
+$Close_patch:
+$   CLOSE CONFIG
+$   ELSE
+$     patchlevel="0"
+$     subversion="0"
+$ ENDIF
+$ echo "(You have ''package' ''baserev' PL''patchlevel' sub''subversion'.)"
+$! This whole thing needs replacing w/ F$FAO() calls:
+$ patchlevel = F$INTEGER(patchlevel)
+$ IF patchlevel.LT.10
+$ THEN patchlevel = "00" + F$STRING(patchlevel)
+$ ELSE patchlevel = "0" + F$STRING(patchlevel)
+$ ENDIF
+$ subversion = F$INTEGER(subversion)
+$ IF subversion.GT.0
+$ THEN
+$   IF subversion.LT.10
+$   THEN subversion = "0" + F$STRING(subversion)
+$   ELSE subversion = F$STRING(subversion)
+$   ENDIF
+$ ELSE subversion = ""
+$ ENDIF
+$!
+$ version = F$EXTRACT(0,1,baserev) + "_" + patchlevel + subversion
+$!
+$ IF (.NOT.vms_skip_install)
+$ THEN
+$!: set the prefixup variable, to restore leading tilda escape !sfn
+$!: set the prefixup variable, to restore leading tilde escape !sfn
+$!
+$!: determine where public architecture dependent libraries go
+$   IF (.NOT.silent) 
+$   THEN 
+$     echo ""
+$     echo "''package' contains architecture-dependent library files.  If you are"
+$   ENDIF
+$   IF (.NOT.silent) 
+$   THEN TYPE SYS$INPUT:
+sharing libraries in a heterogeneous environment, you might store
+these files in a separate location.  Otherwise, you can just include
+them with the rest of the public library files.
+$   ENDIF
+$   dflt = privlib - "]" + "." + archname + "." + version + "]"
+$   rp = "Where do you want to put the public architecture-dependent libraries? "
+$   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
+$   GOSUB myread
+$   IF ans.NES.""
+$   THEN archlib = ans
+$   ELSE archlib = dflt
+$   ENDIF
+$!
+$!: set up the script used to warn in case of inconsistency !sfn
+$!: function used to set $1 to $val                         !sfn
+$!
+$ ENDIF !%Config-I-VMS, skip "where install" questions
+$! This quotation from Configure has to be included on VMS:
+$ TYPE SYS$INPUT:
+
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+$ CONTINUE
+$ IF (.NOT.vms_skip_install)
+$ THEN
+$!: it so happens the Eunice I know will not run shell scripts in Unix format
+$!
+$!: see if setuid scripts can be secure           !sfn
+$!: now see if they want to do setuid emulation   !sfn
+$!
+$!: determine where site specific libraries go.
+$   IF .NOT.silent 
+$   THEN TYPE SYS$INPUT:
+
+The installation process will also create a directory for
+site-specific extensions and modules.  Some users find it convenient
+to place all local files in this directory rather than in the main
+distribution directory.
+$   ENDIF
+$   dflt = privlib - "]" + ".SITE_PERL]"
+$   rp = "Pathname for the site-specific library files? "
+$   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
+$   GOSUB myread
+$   IF ans.NES.""
+$   THEN sitelib = ans
+$   ELSE sitelib = dflt
+$   ENDIF
+$!
+$!: determine where site specific architecture-dependent libraries go.
+$   IF .NOT.silent 
+$   THEN TYPE SYS$INPUT:
+
+The installation process will also create a directory for
+architecture-dependent site-specific extensions and modules.
+$   ENDIF
+$   dflt = sitelib - "]" + "." + archname + "]"
+$   rp = "Pathname for the site-specific architecture-dependent library files? "
+$   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
+$   GOSUB myread
+$   IF ans.NES.""
+$   THEN sitearch = ans
+$   ELSE sitearch = dflt
+$   ENDIF
+$!
+$!: determine where old public architecture dependent libraries might be
+$!
+$!: determine where public executables go
+$   dflt = prefix - ".]" + ".BIN]"
+$   rp = "Pathname where the public executables will reside? "
+$   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
+$   GOSUB myread
+$   IF ans.NES.""
+$   THEN bin = ans
+$   ELSE bin = dflt
+$   ENDIF
+$!
+$!: determine where manual pages are on this system
+$!: What suffix to use on installed man pages
+$!: see if we can have long filenames
+$!: determine where library module manual pages go
+$!: What suffix to use on installed man pages
+$!: see what memory models we can support
+$!
+$ ENDIF !%Config-I-VMS, skip "where install" questions
+$!
+$!: see if we need a special compiler
+$! cc_list = "cc/vaxc|cc/decc|gcc" !%Config-I-VMS, compiler symbols/commands
+$!
+$ nocc = "f"
+$ vms_cc_dflt = ""
+$ vms_cc_available = ""
+$!
+$ OPEN/WRITE CONFIG ccvms.c
+$ WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
+$ WRITE CONFIG "#include <stdio.h>"
+$ WRITE CONFIG "int main() {"
+$ WRITE CONFIG "#ifdef __DECC"
+$ WRITE CONFIG "        printf(""/DECC\n"");"
+$ WRITE CONFIG "#else"
+$ WRITE CONFIG "        printf(""/VAXC\n"");"
+$ WRITE CONFIG "#endif"
+$ WRITE CONFIG "        exit(0);"
+$ WRITE CONFIG "}"
+$ CLOSE CONFIG
+$!
+$ DEFINE SYS$ERROR _NLA0:
+$ DEFINE SYS$OUTPUT _NLA0:
+$ cc/NoObj/list=ccvms.lis ccvms.c
+$ tmp = $status
+$ DEASSIGN SYS$OUTPUT
+$ DEASSIGN SYS$ERROR
+$ IF (silent) THEN GOSUB Shut_up
+$! echo "%Config-I-VMS, After cc compile $status = >''tmp'<" !diagnostic
+$!
+$ IF tmp.NE.%X10B90001
+$ THEN 
+$  IF tmp.NE.%X10000001
+$  THEN 
+$    nocc = "t"  !%X10000001 is return from gcc
+$    GOTO Gcc_initial_check
+$  ENDIF
+$ ENDIF
+$!
+$ GOSUB List_Parse
+$ IF .NOT.silent THEN echo ""
+$ echo "%Config-I-VMS, Default ""cc"" is ''line' ''archsufx' ''F$GETSYI("VERSION")'" 
+$ IF F$LOCATE("VAX",line).NE.F$LENGTH(line) 
+$ THEN 
+$   vms_cc_dflt = "/vaxc"
+$   vms_cc_available = vms_cc_available + "cc/vaxc "
+$   IF .NOT.silent
+$   THEN 
+$     echo "%Config-I-VMS, Will try cc/decc..."
+$   ENDIF
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   SET NOON
+$   cc/decc/NoObj/list=ccvms.lis ccvms.c
+$   tmp = $status
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   SET ON
+$   IF (silent) THEN GOSUB Shut_up
+$   IF tmp.NE.%X10B90001
+$   THEN
+$     echo "%Config-I-VMS, Apparently you don't have that one."
+$   ELSE
+$     GOSUB List_parse
+$     echo "%Config-I-VMS, You also have: ''line' ''archsufx' ''F$GETSYI("VERSION")'"
+$     vms_cc_available = vms_cc_available + "cc/decc "
+$   ENDIF
+$ ELSE
+$   IF F$LOCATE("DEC",line).NE.F$LENGTH(line) 
+$   THEN 
+$     vms_cc_dflt = "/decc"
+$     vms_cc_available = vms_cc_available + "cc/decc "
+$     echo "%Config-I-VMS, Will try cc/vaxc..."
+$     DEFINE SYS$ERROR _NLA0:
+$     DEFINE SYS$OUTPUT _NLA0:
+$     SET NOON
+$     cc/vaxc/NoObj/list=ccvms.lis ccvms.c
+$     tmp = $status
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$     SET ON
+$     IF (silent) THEN GOSUB Shut_up
+$     IF tmp.NE.%X10B90001
+$     THEN
+$       echo "%Config-I-VMS, Apparently you don't have that one."
+$     ELSE
+$       GOSUB List_parse
+$       echo "%Config-I-VMS, You also have: ''line' ''archsufx' ''F$GETSYI("VERSION")'"
+$       vms_cc_available = vms_cc_available + "cc/vaxc "
+$     ENDIF
+$   ENDIF
+$ ENDIF
+$!
+$Gcc_initial_check:
+$ echo "%Config-I-VMS, Checking for Gcc"
+$ OPEN/WRITE CONFIG gccvers.lis
+$ DEFINE SYS$ERROR CONFIG
+$ DEFINE SYS$OUTPUT CONFIG
+$ 'gcc_symbol'/noobj/version _nla0:
+$ tmp = $status
+$ DEASSIGN SYS$OUTPUT
+$ DEASSIGN SYS$ERROR
+$ IF (silent) THEN GOSUB Shut_up
+$ CLOSE CONFIG
+$ IF (tmp.NE.%X10000001).and.(tmp.ne.%X00030001)
+$ THEN
+$   echo "%Config-I-VMS, Symbol ""''gcc_symbol'"" is not defined. I guess you don't have it."
+$   goto cc_cleanup
+$ ENDIF
+$ OPEN/READ CONFIG gccvers.lis
+$GCC_List_Read:
+$ READ/END_OF_FILE=GCC_List_End CONFIG line
+$ GOTO GCC_List_Read
+$GCC_List_End:
+$ CLOSE CONFIG
+$ echo line
+$ vms_cc_available = vms_cc_available + "''gcc_symbol' "
+$ DELETE/NOLOG/NOCONFIRM gccvers.lis;
+$!
+$CC_Cleanup:
+$ DELETE/NOLOG/NOCONFIRM ccvms.*;
+$CC_Desired:
+$!: see if we need a special compiler
+$! echo ""
+$ echo "%Config-I-VMS, available compiler(s):"
+$ echo "( ''vms_cc_available')"
+$ IF .NOT.nocc 
+$ THEN
+$   dflt = "cc''vms_cc_dflt'"  !-> "cc" in case first compile went OK
+$ ELSE
+$   dflt = gcc_symbol
+$ ENDIF
+$ rp = "Use which C compiler? [''dflt'] "
+$ GOSUB myread
+$ IF ans.NES.""
+$ THEN
+$   ans = F$EDIT(ans,"TRIM, COMPRESS, LOWERCASE")
+$   Mcc = ans
+$   IF F$LOCATE("dec",ans).NE.F$LENGTH(ans)
+$   THEN
+$     Mcc = "cc/decc"
+$     Using_Dec_C = "Yes"
+$   ENDIF
+$   IF F$LOCATE("vax",ans).NE.F$LENGTH(ans)
+$   THEN
+$     Mcc = "cc/vaxc"
+$     Using_Vax_C = "Yes"
+$   ENDIF
+$   IF Mcc.NES.dflt
+$   THEN
+$     IF F$LOCATE("dec",dflt).NE.F$LENGTH(dflt) 
+$     THEN 
+$       C_COMPILER_Replace = "CC=cc=''Mcc'"
+$     ELSE
+$       Using_Dec_C = "Yes"
+$       IF F$LOCATE("vax",dflt).NE.F$LENGTH(dflt) 
+$       THEN
+$         C_COMPILER_Replace = "CC=cc=''Mcc'"
+$       ENDIF
+$     ENDIF
+$   ELSE
+$     IF Mcc .EQS. "cc/decc"
+$     THEN
+$       Using_Dec_C = "Yes"
+$     ENDIF
+$   ENDIF
+$ ELSE 
+$   Mcc = dflt
+$   IF Mcc .EQS. "cc/decc"
+$   THEN
+$     Using_Dec_C = "Yes"
+$   ENDIF
+$   IF Mcc .EQS. "cc/vaxc"
+$   THEN
+$     Using_Vax_C = "Yes"
+$   ENDIF
+$   IF Mcc .EQS. "gcc"
+$   THEN
+$     Using_Gnu_C = "Yes"
+$   ENDIF
+$ ENDIF
+$Decc_Version_check:
+$ IF "''Using_Dec_C'".EQS."Yes"
+$ THEN
+$   echo ""
+$   echo4 "Checking for Dec C's version number..." !>&4
+$   OPEN/WRITE CONFIG deccvers.c
+$   WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
+$   WRITE CONFIG "#include <stdio.h>"
+$   WRITE CONFIG "int main() {"
+$   WRITE CONFIG "#ifdef __DECC"
+$   WRITE CONFIG "#ifdef __DECC_VER"
+$   WRITE CONFIG "        printf(""%i\n"", __DECC_VER);"
+$   WRITE CONFIG "#else"
+$   WRITE CONFIG "        printf(""%i\n"", ""1"");"
+$   WRITE CONFIG "#endif"
+$   WRITE CONFIG "#endif"
+$   WRITE CONFIG "        exit(0);"
+$   WRITE CONFIG "}"
+$   CLOSE CONFIG
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   'Mcc' deccvers.c
+$   tmp = $status
+$   DEASSIGN SYS$ERROR _NLA0:
+$   DEASSIGN SYS$OUTPUT _NLA0:
+$   IF (silent) THEN GOSUB Shut_up
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   link deccvers.obj
+$   tmp = $status
+$   DEASSIGN SYS$ERROR
+$   DEASSIGN SYS$OUTPUT
+$   IF (silent) THEN GOSUB Shut_up
+$   OPEN/WRITE CONFIG deccvers.out
+$   DEFINE SYS$ERROR CONFIG
+$   DEFINE SYS$OUTPUT CONFIG
+$   mcr []deccvers.exe
+$   tmp = $status
+$   CLOSE CONFIG
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   IF (silent) THEN GOSUB Shut_up
+$   OPEN/READ CONFIG deccvers.out
+$   READ/END_OF_FILE=Dec_c_cleanup CONFIG line
+$Dec_c_cleanup:
+$   CLOSE CONFIG
+$!   DELETE/NOLOG/NOCONFIRM deccvers.*;
+$   echo "You are using Dec C ''line'"
+$   Dec_C_Version = line
+$ ENDIF
+$Vaxc_Invoke_check:
+$ IF "''Using_Vax_C'".EQS."Yes"
+$ THEN
+$   echo ""
+$   echo4 "Checking to see how to invoke Vax C..."
+$   OPEN/WRITE CONFIG vaxcchk.c
+$   WRITE CONFIG "#include <stdio.h>"
+$   WRITE CONFIG "int main() {"
+$   WRITE CONFIG "        printf(""%i\n"", ""1"");"
+$   WRITE CONFIG "        exit(0);"
+$   WRITE CONFIG "}"
+$   CLOSE CONFIG
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   SET NOON
+$   cc/vaxc/NoObj vaxcchk.c
+$   tmp = $status
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   SET ON
+$   IF (silent) THEN GOSUB Shut_up
+$   IF tmp.NE.%X10B90001
+$   THEN
+$     Mcc = "cc"
+$   ELSE
+$     Mcc = "cc/vaxc"
+$   ENDIF
+$Vax_c_cleanup:
+$   DELETE/NOLOG/NOCONFIRM vaxcchk.*;
+$ ENDIF
+$Gcc_check:
+$ if "''using_gnu_c'" .eqs. "Yes"
+$ THEN
+$ vaxcrtl_olb = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
+$ vaxcrtl_exe = F$SEARCH("SYS$SHARE:VAXCRTL.EXE")
+$ gcclib_olb  = F$SEARCH("GNU_CC:[000000]GCCLIB.OLB")
+$ IF gcclib_olb .EQS. "" 
+$ THEN 
+$! These objects/libs come w/ gcc 2.7.2 for AXP:
+$   tmp = F$SEARCH("GNU_CC:[000000]libgcc2.olb")
+$   IF tmp .NES. "" then gcclib_olb = tmp
+$   tmp = F$SEARCH("GNU_CC:[000000]libgcclib.olb")
+$   IF tmp .NES. "" 
+$   THEN 
+$     IF gcclib_olb .EQS. "" 
+$     THEN gcclib_olb = tmp
+$     ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$     ENDIF
+$   ENDIF
+$   tmp = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
+$   IF tmp .NES. "" 
+$   THEN 
+$     IF gcclib_olb .EQS. "" 
+$     THEN gcclib_olb = tmp
+$     ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$     ENDIF
+$   ENDIF
+$   tmp = F$SEARCH("GNU_CC:[000000]crt0.obj")
+$   IF tmp .NES. "" 
+$   THEN 
+$     IF gcclib_olb .EQS. "" 
+$     THEN gcclib_olb = tmp
+$     ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$     ENDIF
+$   ENDIF
+$   IF gcclib_olb .EQS. vaxcrtl_olb THEN gcclib_olb = "" !goofy order of axplibs
+$ ELSE
+$   gcclib_olb = gcclib_olb + "/lib"
+$ ENDIF
+$ IF   gcclib_olb .NES. "" .AND. -
+     (vaxcrtl_olb .NES. "" .OR. -
+      vaxcrtl_exe .NES. "" )
+$ THEN
+$   echo ""
+$   echo4 "Checking for GNU cc in disguise and/or its version number..." !>&4
+$   OPEN/WRITE CONFIG gccvers.c
+$   WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
+$   WRITE CONFIG "#include <stdio.h>"
+$   WRITE CONFIG "int main() {"
+$   WRITE CONFIG "#ifdef __GNUC__"
+$   WRITE CONFIG "#ifdef __VERSION__"
+$   WRITE CONFIG "        printf(""%s\n"", __VERSION__);"
+$   WRITE CONFIG "#else"
+$   WRITE CONFIG "        printf(""%s\n"", ""1"");"
+$   WRITE CONFIG "#endif"
+$   WRITE CONFIG "#endif"
+$   WRITE CONFIG "        exit(0);"
+$   WRITE CONFIG "}"
+$   CLOSE CONFIG
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   'Mcc' gccvers.c
+$   tmp = $status
+$   DEASSIGN SYS$ERROR _NLA0:
+$   DEASSIGN SYS$OUTPUT _NLA0:
+$   IF (silent) THEN GOSUB Shut_up
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   IF vaxcrtl_exe .EQS. ""
+$   THEN 
+$     IF F$LOCATE("VAXCRTL",gcclib_olb).NE.F$LENGTH(gcclib_olb)
+$     THEN 
+$       link gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
+$       tmp = $status
+$     ELSE
+$       link gccvers.obj,'gcclib_olb'
+$       tmp = $status
+$     ENDIF
+$   ELSE
+$     OPEN/WRITE CONFIG GCCVERS.OPT
+$     WRITE CONFIG "SYS$SHARE:VAXCRTL/SHARE"
+$     CLOSE CONFIG
+$     link gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
+$     tmp = $status
+$   ENDIF
+$   DEASSIGN SYS$ERROR
+$   DEASSIGN SYS$OUTPUT
+$   IF (silent) THEN GOSUB Shut_up
+$   OPEN/WRITE CONFIG gccvers.out
+$   DEFINE SYS$ERROR CONFIG
+$   DEFINE SYS$OUTPUT CONFIG
+$   mcr []gccvers.exe
+$   tmp = $status
+$   CLOSE CONFIG
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   IF (silent) THEN GOSUB Shut_up
+$   OPEN/READ CONFIG gccvers.out
+$   READ/END_OF_FILE=Gcc_cleanup CONFIG line
+$Gcc_cleanup:
+$   CLOSE CONFIG
+$   DELETE/NOLOG/NOCONFIRM gccvers.*;
+$   IF F$LOCATE("GNU C version ",line).NE.F$LENGTH(line)
+$   THEN 
+$     echo "You are not using GNU cc."
+$     GOTO Host_name
+$   ELSE 
+$     echo "You are using GNU cc ''line'"
+$     Using_Gnu_C = "Yes"
+$     C_COMPILER_Replace = "CC=cc=''Mcc'"
+$     GOTO Include_dirs
+$   ENDIF
+$ ENDIF
+$endif
+$ GOTO Host_name
+$!
+$List_Parse:
+$ OPEN/READ CONFIG ccvms.lis
+$ READ CONFIG line
+$ IF (F$GETSYI("HW_MODEL") .LT. 1024)
+$ THEN
+$   read CONFIG line
+$   archsufx = "VAX"
+$ ELSE
+$   archsufx = "AXP"
+$ ENDIF
+$ CLOSE CONFIG
+$ line = F$EDIT(line,"TRIM,COMPRESS")
+$ line = line - "Page 1"           ! occurs at end all compilers
+$ line = line - "CCVMS "           ! filename appears w/ VAXC
+$ line = line - "Source Listing "  ! Seen w/ AXP DECC
+$ tmp = F$EXTRACT(0,20,line)       !timestamp, e.g. "30-JUL-1996 21:12:54 "
+$ line = line - tmp
+$ line = F$EDIT(line,"TRIM")       !bit redundant but we're in no big hurry
+$ DELETE/NOLOG/NOCONFIRM ccvms.lis;
+$ RETURN
+$!
+$Include_dirs:
+$!: What should the include directory be ?
+$ dflt = gcclib_olb 
+$ rp = "Where are the include files you want to use? "
+$ IF f$length( rp + "[''dflt'] " ).gt.76
+$ THEN rp = F$FAO("!AS!/!AS",rp,"[''dflt'] ")
+$ ELSE rp = rp + "[''dflt'] "
+$ ENDIF
+$ GOSUB myread
+$ usrinc = ans
+$!
+$!: see if we have to deal with yellow pages, now NIS.
+$!: now get the host name
+$Host_name:
+$ echo ""
+$ echo4 "Figuring out host name..." !>&4
+$ myhostname = ""
+$  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("ARPANET_HOST_NAME")
+$  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("INTERNET_HOST_NAME")
+$  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("MULTINET_HOST_NAME")
+$  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("UCX$INET_HOST_NAME")
+$  IF myhostname.eqs."".and. -
+      F$TRNLNM("UCX$INET_HOST") .nes. "" .and. -
+      F$TRNLNM("UCX$INET_DOMAIN") .nes. "" THEN - 
+     myhostname = F$TRNLNM("UCX$INET_HOST") + "." + F$TRNLNM("UCX$INET_DOMAIN") 
+$  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("TCPWARE_DOMAINNAME")
+$  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("NEWS_ADDRESS")
+$  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("SYS$NODE") - "::"
+$  IF myhostname.eqs."" THEN myhostname = F$EDIT(F$GETSYI("SCSNODE"),"TRIM")
+$!: you do not want to know about this
+$!: verify guess
+$ rp = "Your host name appears to be """"''myhostname'"""". Right? "
+$ GOSUB myread
+$ IF (.not.ans).and.(ans.NES."")
+$   THEN 
+$     READ SYS$COMMAND/PROMPT= - 
+ "Please type the (one word) name of your host: " ans
+$     myhostname = ans
+$ ENDIF
+$!: translate upper to lower if necessary
+$ myhostname = F$EDIT(myhostname,"COLLAPSE")
+$ mylowhostname = F$EDIT(myhostname," LOWERCASE")
+$ IF mylowhostname.NES.myhostname
+$ THEN
+$   echo "(Normalizing case in your host name)"
+$   myhostname = mylowhostname
+$ ENDIF
+$!
+$ fp = F$LOCATE(".",myhostname)
+$ mydomain = F$EXTRACT(fp,(F$LENGTH(myhostname)-fp)+1,myhostname)
+$ IF mydomain.NES.""  !no periods in DECnet names like "MYDECNODE::"
+$ THEN
+$   rp = "What is your domain name? [''mydomain'] "
+$   GOSUB myread
+$   IF ans THEN mydomain = ans
+$!: translate upper to lower if necessary
+$   mydomain = F$EDIT(mydomain,"COLLAPSE")
+$   mylowdomain = F$EDIT(mydomain," LOWERCASE")
+$   IF mylowdomain.NES.mydomain
+$   THEN
+$     echo "(Normalizing case in your domain name)"
+$     mydomain = mylowdomain
+$   ENDIF
+$ ENDIF
+$ myhostname = myhostname - mydomain
+$ echo "(Trimming domain name from host name--host name is now ''myhostname')"
+$ IF .NOT.silent 
+$ THEN TYPE SYS$INPUT:
+
+I need to get your e-mail address in Internet format if possible, i.e.
+something like user@host.domain. Please answer accurately since I have
+no easy means to double check it. The default value provided below
+is most probably close to the reality but may not be valid from outside
+your organization...
+$ ENDIF
+$ dflt = "''cf_by@''myhostname'"+"''mydomain'"
+$ rp = "What is your e-mail address? [''dflt'] "
+$ GOSUB myread
+$ IF ans
+$ THEN cf_email = ans
+$ ELSE cf_email = dflt
+$ ENDIF
+$!
+$ IF .NOT.silent 
+$ THEN TYPE SYS$INPUT:
+
+If you or somebody else will be maintaining perl at your site, please
+fill in the correct e-mail address here so that they may be contacted
+if necessary. Currently, the "perlbug" program included with perl
+will send mail to this address in addition to perlbug@perl.com. You may
+enter "none" for no administrator.
+$ ENDIF
+$ dflt = "''cf_email'"
+$ rp = "Perl administrator e-mail address [''dflt'] "
+$ GOSUB myread
+$ IF ans
+$ THEN perladmin = ans
+$ ELSE perladmin = dflt
+$ ENDIF
+$!
+$!: determine where public executable scripts go
+$!: determine perl absolute location
+$!: figure out how to guarantee perl startup
+$!
+$!: see how we invoke the C preprocessor
+$! echo ""
+$! echo4 "Now, how can we feed standard input to your C preprocessor..." !>&4
+$!: Set private lib path
+$!: Now check and see which directories actually exist, avoiding duplicates
+$!: determine optimize, if desired, or use for debug flag also
+$!: We will not override a previous value, but we might want to
+$!: augment a hint file
+$!: the following weeds options from ccflags that are of no interest to cpp
+$!: flags used in final linking phase
+$!: Try to guess additional flags to pick up local libraries.
+$!: coherency check
+$! echo ""
+$! echo4 "Checking your choice of C compiler and flags for coherency..." !>&4
+$!: compute shared library extension
+$!: Looking for optional libraries
+$!: see if nm is to be used to determine whether a symbol is defined or not
+$!: get list of predefined functions in a handy place
+$!: see if we have sigaction
+$!: see whether socketshr exists
+$ IF (F$SEARCH(F$PARSE("SocketShr","Sys$Share:.Exe")).NES."")
+$ THEN
+$   has_socketshr     = "T"
+$   echo ""
+$   echo4 "Hmm... Looks like you have SOCKETSHR's Berkeley networking support."
+$ endif
+$ if (Dec_C_Version .ge. 50200000)
+$ THEN
+$   Has_Dec_C_Sockets = "T"
+$   echo ""
+$   echo4 "Hmm... Looks like you've got Dec C's Berkeley networking support."
+$ ENDIF
+$ ! Hey, we've got both. Default to Dec C, then, since it's better
+$ if ("''Has_socketshr'".eq."T") .or.("''has_dec_c_sockets'".eq."T")
+$ THEN
+$   echo ""
+$   echo "You've got sockets available. Which socket stack do you want to"
+$   echo "build into perl?"
+$   if "''has_dec_c_sockets'".eqs."T"
+$   THEN
+$     dflt = "DECC"
+$   else
+$     dlft = "SOCKETSHR"
+$   endif
+$   rp = "Choose socket stack (NONE"
+$   if "''has_socketshr'".eqs."T" THEN rp = rp + ",SOCKETSHR"
+$   if "''has_dec_c_sockets'".eqs."T" THEN rp = rp + ",DECC"
+$   rp = rp + ") [''dflt'] "
+$   GOSUB myread
+$   IF "''ans'".eqs."" THEN ans = "''dflt'"
+$   has_dec_c_sockets = "F"
+$   has_socketshr = "F"
+$   ans = F$EDIT(ans,"TRIM,COMPRESS,LOWERCASE")
+$   IF ans.eqs."decc" then has_dec_c_sockets = "T"
+$   IF ans.eqs."socketshr" then has_socketshr = "T"
+$ endif
+$!
+$!
+$! Ask about threads, if appropriate
+$ if (Using_Dec_C.eqs."Yes")
+$ THEN
+$   echo "This version of Perl can be built with threads. While really nifty,
+$   echo "they are a beta feature, and there is a speed penalty for perl
+$   echo "programs if you build with threads *even if you don't use them*
+$   echo ""
+$   dflt = "y"
+$   rp = "Build with threads? [''dflt'] "
+$   GOSUB myread
+$   if ans.eqs."" then ans = dflt
+$   if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y")
+$   THEN
+$     use_threads="T"
+$   ENDIF
+$ ENDIF
+$!
+$! Ask if they want to use perl's memory allocator
+$ echo ""
+$ echo "Perl has a built-in memory allocator that's tuned for perl's
+$ echo "normal memory usage. It's oftentimes better than the standard
+$ echo "system memory allocator. It also has the advantage of providing
+$ echo "memory allocation statistics.
+$ echo ""
+$ dflt = "N"
+$ rp = "Build with perl's memory allocator? [''dflt'] "
+$ GOSUB myread
+$ if ans.eqs."" then ans="''dflt'"
+$ mymalloc = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE"))
+$!
+$! Ask for their default list of extensions to build
+$ echo ""
+$ echo "It's time to specify which modules you want to build into
+$ echo "perl. Most of these are standard and should be chosen, though
+$ echo "you might, for example, want to build GDBM_File instead of
+$ echo "SDBM_File if you have the GDBM library built on your machine
+$ echo "
+$ echo "Which modules do you want to build into perl?"
+$ dflt = "Fcntl IO Opcode attrs Stdio DCLsym B SDBM_File"
+$ if Using_Dec_C.eqs."Yes"
+$ THEN
+$   dflt = dflt + " POSIX"
+$   if Use_Threads.eqs."T"
+$   THEN
+$     dflt = dflt + " Thread"
+$   ENDIF
+$ ENDIF
+$ rp = "[''dflt'] "
+$ GOSUB myread
+$ if ans.eqs."" then ans = "''dflt'"
+$ extensions = "''ans'"
+$!
+$! %Config-I-VMS, determine build/make utility here (make gmake mmk mms)
+$ echo ""
+$ echo "%Config-I-VMS, Checking your ""make"" utilities..."
+$! If the 'build' that you use is not here add it and it's test
+$! switch to the _END_ of these strings (and increment max_build)
+$! (e.g. builders = builders + "/FOOMAKE" 
+$!       probers  = probers + " -fooVersionSwitch"
+$! ) & please let me know about it.
+$ builders = "IMAKE/GNUMAKE/MGMAKE/GMAKE/MAKE/MMS/MMK"
+$ probers  = "-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!/IDENT!/IDENT"
+$ max_build = 7
+$!
+$ orig_dflt = "MMK"
+$ default_set = ""
+$ ok_builders = ""
+$ OPEN/WRITE/ERROR=Open_error CONFIG Makefile.
+$ WRITE CONFIG "dont_make_anything_yet:"
+$ WRITE CONFIG F$FAO("!_")
+$ CLOSE CONFIG
+$ n = 0
+$ messages = F$ENVIRONMENT("MESSAGE")
+$Build_probe:
+$ build = F$ELEMENT(n,"/",builders)
+$ probe  = F$ELEMENT(n,"!",probers)
+$ echo "Testing whether you have ''build' on your system..."
+$ SET NOON                                        !sorry :-(
+$ ON CONTROL_Y THEN GOTO Reenable_messages_build  !sorry :-(
+$ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT          !sorry :-(
+$ 'build' 'probe'
+$ IF ($SEVERITY .EQ. 1)
+$ THEN 
+$   echo "OK."
+$   IF (build .EQS. orig_dflt) 
+$   THEN 
+$     default_set = "TRUE"
+$     dflt = build
+$   ENDIF
+$   ok_builders = ok_builders + " " + build
+$   IF (.NOT. default_set) THEN dflt = build
+$ ELSE 
+$   echo "Nope."
+$ ENDIF
+$Reenable_messages_build:                         !hope you made it here :-)
+$ SET MESSAGE 'messages'                          !hope you made it here :-)
+$ SET ON                                          !hope you made it here :-)
+$ n = n + 1
+$ IF (n .LT. max_build) THEN GOTO Build_probe
+$!
+$ echo ""
+$ IF (ok_builders .NES. "") 
+$ THEN
+$   echo "Here is the list of builders you can apparently use:"
+$   echo "(",ok_builders," )"
+$   rp = "Which """"make"""" utility do you wish to use [''dflt']? "
+$   GOSUB myread
+$   ans = F$EDIT(ans,"TRIM, COMPRESS")
+$   ans = F$EXTRACT(0,F$LOCATE(" ",ans),ans) !throw out "-f Makefile." here
+$   IF (ans .EQS. "") 
+$   THEN build = dflt
+$   ELSE build = ans
+$   ENDIF
+$ ELSE
+$   TYPE SYS$INPUT:
+
+%Config-E-VMS, ERROR:
+ Well this looks pretty serious. Perl5 cannot be compiled without a "make"
+ utility of some sort and after checking my "builders" list I cannot find
+ the symbol or command you use on your system to compile programs.
+
+$   READ SYS$COMMAND/PROMPT="%Config-I-VMS, Which ""MMS"" do you use? " ans
+$   ans = F$EDIT(ans,"TRIM, COMPRESS")
+$   ans = F$EXTRACT(0,F$LOCATE(" ",ans),ans) !throw out "-f Makefile." here
+$   IF (ans .EQS. "") 
+$   THEN build = dflt
+$     echo "I don't know where 'make' is, and my life depends on it."
+$     echo "Go find a make program or fix your DCL$PATH setting!"
+$     echo "ABORTING..."
+$     SET DEFAULT 'vms_default_directory_name' !be kind rewind
+$     STOP
+$     EXIT 2 !$STATUS = "%X00000002" (error)
+$   ELSE 
+$     build = ans
+$   ENDIF
+$ ENDIF
+$!
+$ DELETE/NOLOG Makefile.;
+$ GOTO Beyond_open
+$Open_error:
+$ TYPE SYS$INPUT:
+
+ There seems to be trouble. I just tried to create a file in
+$ echo4 'F$ENVIRONMENT("DEFAULT")'
+$ TYPE SYS$INPUT:
+ but was unsuccessful. I am stopping now. Please check that directories'
+ PROTECTION bits. I will leave you in the directory where you started
+ Configure.com
+$ echo4 "ABORTING..."
+$ GOTO Clean_up
+$ STOP
+$ EXIT
+$!
+$Beyond_open:
+$! echo " Very well I will proceed with ""''build'"""
+$ make = F$EDIT(build,"UPCASE")
+$!
+$!: locate the preferred pager for this system
+$!pagers = "most|more|less|type/page"
+$!rp='What pager is used on your system?'
+$!
+$! update [.vms]config.vms here
+$!
+$! update makefile here
+$! echo4 "Updating makefile..."
+$!
+$ IF (make .EQS. "MMS").OR.(make .EQS. "MMK")
+$ THEN 
+$   makefile    = ""            !wrt MANIFEST dir
+$   UUmakefile  = "DESCRIP.MMS"  !wrt CWD dir
+$   DEFmakefile = "DESCRIP.MMS"  !wrt DEF dir (?)
+$ ELSE
+$   makefile    = " -f [.VMS]Makefile." !wrt MANIFEST dir
+$   UUmakefile  = "[-.VMS]Makefile."    !wrt CWD dir
+$   DEFmakefile = "[-.VMS]Makefile."    !wrt DEF dir (?)
+$ ENDIF
+$!
+$ IF macros.NES."" 
+$ THEN 
+$   tmp = F$LENGTH(macros)
+$   macros = F$EXTRACT(0,(tmp-1),macros) !miss trailing comma
+$   macros = "/macro=(" + macros  + ")"
+$ ENDIF
+$!
+$! Invoke the subconfig piece
+$!
+$ echo ""
+$ echo4 "Generating config.h"
+$ dflt = F$ENVIRONMENT("DEFAULT")
+$ SET DEFAULT [-.vms]
+$ @subconfigure
+$ SET DEFAULT 'dflt
+$!
+$! %Config-I-VMS, write perl_setup.com here
+$!
+$ echo ""
+$ echo4 "%Config-I-VMS, The perl_setup.com file is now being written..."
+$ file_2_find = "[-.vms]perl_setup.com"
+$ OPEN/WRITE CONFIG 'file_2_find'
+$ WRITE CONFIG "$!"
+$ WRITE CONFIG "$! Perl_Setup.com    ''cf_time'"
+$ IF cf_email.NES.perladmin
+$ THEN
+$ WRITE CONFIG "$! perl configured by ''cf_email'"
+$ ELSE
+$ WRITE CONFIG "$! This perl configured & administered by ''perladmin'"
+$ ENDIF
+$ WRITE CONFIG "$!"
+$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN -
+    prefix = prefix - "]" + ".]" 
+$ WRITE CONFIG "$ define/translation=concealed Perl_Root ''prefix'"
+$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]Perl"
+$ WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr.Exe"
+$ IF (tzneedset)
+$ THEN
+$ WRITE CONFIG "$ define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
+$ ELSE    !leave in but commented out (in case setting was from perl :-)
+$ WRITE CONFIG "$! define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
+$ ENDIF
+$ WRITE CONFIG "$!"
+$ WRITE CONFIG "$! Symbols for commonly used scripts:"
+$ WRITE CONFIG "$!"
+$ WRITE CONFIG "$ Perldoc == ""'"+"'Perl' Perl_Root:[lib.pod]Perldoc.com -t"""
+$ CLOSE CONFIG
+$!
+$ echo  ""
+$ echo  "%Config-I-VMS, The file can be found at:"
+$ echo4 "-Config-I-VMS, ''F$SEARCH(file_2_find)'"
+$ echo  "-Config-I-VMS, Add that file (or an @ call to it) to your [SY]LOGIN.COM"
+$ echo  "-Config-I-VMS, when you are satisfied with a successful compilation,"
+$ echo  "-Config-I-VMS, testing, and installation of your perl."
+$ echo  ""
+$!
+$!figure out where we "are" by parsing 'vms_default_directory_name' 
+$!
+$ set_def_command = ""
+$ dflt = F$ENVIRONMENT("DEFAULT") - ".UU]" 
+$ tmp = vms_default_directory_name - dflt - "]"
+$ i = 0
+$ IF tmp .EQS. "" THEN GOTO Beyond_set_def_loop
+$Set_def_loop:
+$ tmp1 = F$ELEMENT(i,".",tmp)
+$ IF tmp1 .EQS. "." THEN GOTO Beyond_set_def_loop
+$ IF i .EQ. 0 
+$ THEN set_def_command = "set default [-"
+$ ELSE set_def_command = set_def_command + "-"
+$ ENDIF
+$ i = i + 1
+$ GOTO Set_def_loop
+$Beyond_set_def_loop:
+$ IF set_def_command.NES.""
+$ THEN
+$   set_def_command = set_def_command - "-" + "]"
+$   echo4 ""
+$   echo4 "In order to build ''package' you must now issue the commands:"
+$   echo4 ""
+$   echo4 " ''set_def_command'"
+$ ELSE
+$   echo4 ""
+$   echo4 "In order to build ''package' you must now issue the command:"
+$   echo4 ""
+$ ENDIF
+$ echo4 " ''make'''makefile'", macros
+$ echo4 ""
+$!
+$Clean_up:
+$ IF (silent)
+$ THEN
+$   DEASSIGN SYS$OUTPUT
+$!   DEASSIGN SYS$ERROR
+$ ENDIF
+$ IF F$GETJPI("","FILCNT").NE.vms_filcnt THEN CLOSE CONFIG
+$ IF F$GETJPI("","FILCNT").NE.vms_filcnt 
+$ THEN WRITE SYS$ERROR "%Config-W-VMS, WARNING: There is a file still open"
+$ ENDIF
+$ dflt = F$ENVIRONMENT("DEFAULT")
+$ IF F$LOCATE("UU]",dflt).EQS.(F$LENGTH(dflt)-3)
+$ THEN
+$   IF ( F$SEARCH("[]*.*").NES."" ) THEN DELETE/NOLOG/NOCONFIRM []*.*;*
+$   SET DEFAULT [-]
+$   SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) UU.DIR
+$   DELETE/NOLOG/NOCONFIRM UU.DIR;
+$ ENDIF
+$ SET DEFAULT 'vms_default_directory_name' !be kind rewind
+$ STOP
+$ EXIT
+$!: End of Configure
index a1eae37..e3bd7df 100644 (file)
@@ -1970,9 +1970,7 @@ uninstall_from_sitedirs ::
 =item perldepend (override)
 
 Use VMS-style syntax for files; it's cheaper to just do it directly here
 =item perldepend (override)
 
 Use VMS-style syntax for files; it's cheaper to just do it directly here
-than to have the MM_Unix method call C<catfile> repeatedly.  Also use
-config.vms as source of original config data if the Perl distribution
-is available; config.sh is an ancillary file under VMS.  Finally, if
+than to have the MM_Unix method call C<catfile> repeatedly.  Also, if
 we have to rebuild Config.pm, use MM[SK] to do it.
 
 =cut
 we have to rebuild Config.pm, use MM[SK] to do it.
 
 =cut
@@ -2005,13 +2003,10 @@ $(OBJECT) : $(PERL_INC)vmsish.h, $(PERL_INC)util.h, $(PERL_INC)config.h
 # Check for unpropagated config.sh changes. Should never happen.
 # We do NOT just update config.h because that is not sufficient.
 # An out of date config.h is not fatal but complains loudly!
 # Check for unpropagated config.sh changes. Should never happen.
 # We do NOT just update config.h because that is not sufficient.
 # An out of date config.h is not fatal but complains loudly!
-#$(PERL_INC)config.h : $(PERL_SRC)config.sh
-$(PERL_INC)config.h : $(PERL_VMS)config.vms
-       $(NOECHO) Write Sys$Error "Warning: $(PERL_INC)config.h out of date with $(PERL_VMS)config.vms"
+$(PERL_INC)config.h : $(PERL_SRC)config.sh
 
 
-#$(PERL_ARCHLIB)Config.pm : $(PERL_SRC)config.sh
-$(PERL_ARCHLIB)Config.pm : $(PERL_VMS)config.vms $(PERL_VMS)genconfig.pl
-       $(NOECHO) Write Sys$Error "$(PERL_ARCHLIB)Config.pm may be out of date with config.vms or genconfig.pl"
+$(PERL_ARCHLIB)Config.pm : $(PERL_SRC)config.sh
+       $(NOECHO) Write Sys$Error "$(PERL_ARCHLIB)Config.pm may be out of date with config.h or genconfig.pl"
        olddef = F$Environment("Default")
        Set Default $(PERL_SRC)
        $(MMS)],$mmsquals,);
        olddef = F$Environment("Default")
        Set Default $(PERL_SRC)
        $(MMS)],$mmsquals,);
diff --git a/vms/config.vms b/vms/config.vms
deleted file mode 100644 (file)
index 839c7ee..0000000
+++ /dev/null
@@ -1,2215 +0,0 @@
-/*
- * This file was produced by hand because the configure utilities which
- * are in the perl distribution are all shell scripts.  Someday, I hope
- * we'll get a perl configure utility, but until then . . .
- * 
- * Feel free to add or change things to suit your needs, but be careful
- * about moving the comments which say "config-skip" - they're used by
- * GenConfig.pl when producing Config.pm.
- *
- * config.h for VMS
- * Version: 5.005
- */                 
-
-/* Configuration time:  4-Apr-1998 21:30
- * Configured by: Charles Bailey  bailey@newman.upenn.edu
- * Target system: VMS
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* CAT2:
- *     This macro catenates 2 tokens together.
- */
-/* STRINGIFY:
- *     This macro surrounds its token with double quotes.
- */
-#ifdef __STDC__
-#define CAT2(a,b)a ## b
-#define CAT3(a,b,c)a ## b ## c
-#define CAT4(a,b,c,d)a ## b ## c ##d
-#define CAT5(a,b,c,d,e)a ## b ## c ## d ## e
-#define StGiFy(a) # a
-#define STRINGIFY(A)StGiFy(a)
-#define SCAT2(a,b)StGiFy(a) StGiFy(b)
-#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
-#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
-#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
-#else
-#define CAT2(a,b)a/**/b
-#define CAT3(a,b,c)a/**/b/**/c
-#define CAT4(a,b,c,d)a/**/b/**/c/**/d
-#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
-#define STRINGIFY(a)"a"
-#endif
-
-/* config-start */
-
-/* MEM_ALIGNBYTES:
- *     This symbol contains the number of bytes required to align a
- *     double. Usual values are 2, 4 and 8.
- */
-#define MEM_ALIGNBYTES 8       /**/
-
-/* OSNAME:
- *     This symbol contains the name of the operating system, as determined
- *     by Configure.
- */
-#define OSNAME "VMS"           /**/
-
-/* ARCHLIB:
- *     This variable, if defined, holds the name of the directory in
- *     which the user wants to put architecture-dependent public
- *     library files for $package.  It is most often a local directory
- *     such as /usr/local/lib.  Programs using this variable must be
- *     prepared to deal with filename expansion.  If ARCHLIB is the
- *     same as PRIVLIB, it is not defined, since presumably the
- *     program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- *     This symbol contains the ~name expanded version of ARCHLIB, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*     ==> NOTE <==
- * This value is automatically updated by FndVers.Com
- * when Perl is built.  Please do not change it by hand; make
- * any changes to FndVers.Com instead.
- */
-#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00464"  /**/
-
-
-#define ARCHLIB ARCHLIB_EXP    /*config-skip*/
-
-/* ARCHNAME:
- *     This symbol holds a string representing the architecture name.
- *     It may be used to construct an architecture-dependant pathname
- *     where library files may be held under a private library, for
- *     instance.
- */
-#define ARCHNAME "VMS_VAX"  /**/
-
-/* CPPSTDIN:
- *     This symbol contains the first part of the string which will invoke
- *     the C preprocessor on the standard input and produce to standard
- *     output.  Typical value of "cc -E" or "/lib/cpp", but it can also
- *     call a wrapper. See CPPRUN.
- */
-/* CPPMINUS:
- *     This symbol contains the second part of the string which will invoke
- *     the C preprocessor on the standard input and produce to standard
- *     output.  This symbol will have the value "-" if CPPSTDIN needs a minus
- *     to specify standard input, otherwise the value is "".
- */
-#define CPPSTDIN "cc/noobj/preprocess=sys$output sys$input"
-#define CPPMINUS ""
-
-/* HAS_BCMP:
- *     This symbol is defined if the bcmp() routine is available to
- *     compare blocks of memory.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_BCMP /**/
-#else
-#undef HAS_BCMP        /*config-skip*/
-#endif
-
-#include <string.h> /* Check whether new DECC has #defined bcopy and bzero */
-/* HAS_BCOPY:
- *     This symbol is defined if the bcopy() routine is available to
- *     copy blocks of memory.
- */
-#undef HAS_BCOPY       /**/
-#ifdef bcopy
-#  define HAS_BCOPY            /*config-skip*/
-#endif
-
-/* HAS_BZERO:
- *     This symbol is defined if the bzero() routine is available to
- *     set a memory block to 0.
- */
-#undef HAS_BZERO       /**/
-#ifdef bzero
-#  define HAS_BZERO            /*config-skip*/
-#endif
-
-/* CASTNEGFLOAT:
- *     This symbol is defined if the C compiler can cast negative
- *     numbers to unsigned longs, ints and shorts.
- */
-/* CASTFLAGS:
- *     This symbol contains flags that say what difficulties the compiler
- *     has casting odd floating values to unsigned long:
- *             0 = ok
- *             1 = couldn't cast < 0
- *             2 = couldn't cast >= 0x80000000
- */
-#define        CASTNEGFLOAT            /**/
-#define CASTFLAGS 0            /**/
-
-/* HAS_CHSIZE:
- *     This symbol, if defined, indicates that the chsize routine is available
- *     to truncate files.  You might need a -lx to get this routine.
- */
-#undef HAS_CHSIZE              /**/
-
-/* HASCONST:
- *     This symbol, if defined, indicates that this C compiler knows about
- *     the const type. There is no need to actually test for that symbol
- *     within your programs. The mere use of the "const" keyword will
- *     trigger the necessary tests.
- */
-#define HASCONST       /**/
-
-/* HAS_CRYPT:
- *     This symbol, if defined, indicates that the crypt routine is available
- *     to encrypt passwords and the like.
- */
-#define HAS_CRYPT              /**/
-
-/* BYTEORDER:
- *     This symbol hold the hexadecimal constant defined in byteorder,
- *     i.e. 0x1234 or 0x4321, etc...
- */
-#define BYTEORDER 0x1234       /* large digits for MSB */
-
-/* CSH:
- *     This symbol, if defined, indicates that the C-shell exists.
- *     If defined, contains the full pathname of csh.
- */
-#undef HAS_CSH         /**/
-#undef CSH             /**/
-
-/* HAS_DUP2:
- *     This symbol, if defined, indicates that the dup2 routine is
- *     available to duplicate file descriptors.
- */
-#define HAS_DUP2       /**/
-
-/* HAS_FCHMOD:
- *     This symbol, if defined, indicates that the fchmod routine is available
- *     to change mode of opened files.  If unavailable, use chmod().
- */
-#undef HAS_FCHMOD              /**/
-
-/* HAS_FCHOWN:
- *     This symbol, if defined, indicates that the fchown routine is available
- *     to change ownership of opened files.  If unavailable, use chown().
- */
-#undef HAS_FCHOWN              /**/
-
-/* HAS_FCNTL:
- *     This symbol, if defined, indicates to the C program that
- *     the fcntl() function exists.
- */
-#undef HAS_FCNTL               /**/
-
-/* HAS_FGETPOS:
- *     This symbol, if defined, indicates that the fgetpos routine is
- *     available to get the file position indicator, similar to ftell().
- */
-#define HAS_FGETPOS    /**/
-
-/* FLEXFILENAMES:
- *     This symbol, if defined, indicates that the system supports filenames
- *     longer than 14 characters.
- */
-#define        FLEXFILENAMES           /**/
-
-/* HAS_FLOCK:
- *     This symbol, if defined, indicates that the flock routine is
- *     available to do file locking.
- */
-#undef HAS_FLOCK               /**/
-
-/* HAS_FSETPOS:
- *     This symbol, if defined, indicates that the fsetpos routine is
- *     available to set the file position indicator, similar to fseek().
- */
-#define HAS_FSETPOS    /**/
-
-/* HAS_GETTIMEOFDAY:
- *     This symbol, if defined, indicates that the gettimeofday() system
- *     call is available for a sub-second accuracy clock. Usually, the file
- *     <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- *     The type "Timeval" should be used to refer to "struct timeval".    
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_GETTIMEOFDAY /*config-skip*/
-#else
-#undef HAS_GETTIMEOFDAY /*config-skip*/
-#endif
-#ifdef HAS_GETTIMEOFDAY
-#  define Timeval struct timeval /*config-skip*/
-#endif
-
-/* HAS_LONG_DOUBLE:
- *     This symbol will be defined if the C compiler supports long
- *     doubles.
- */
-/* LONG_DOUBLESIZE:
- *     This symbol contains the size of a long double, so that the 
- *     C preprocessor can make decisions based on it.  It is only
- *     defined if the system supports long doubles.
- */
-#undef HAS_LONG_DOUBLE         /**/
-#ifdef HAS_LONG_DOUBLE
-#  define LONG_DOUBLESIZE 8            /**/
-#endif
-
-/* LONGLONGSIZE:
- *     This symbol contains the size of a long long, so that the 
- *     C preprocessor can make decisions based on it.  It is only
- *     defined if the system supports long long.
- */
-#undef HAS_LONG_LONG           /**/
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE 8         /**/
-#endif
-
-/* HAS_MKSTEMP:
- *     This symbol, if defined, indicates that the mkstemp routine is
- *     available to create and open a unique temporary file.
- */
-#undef HAS_MKSTEMP             /**/
-
-/* HAS_GETGROUPS:
- *     This symbol, if defined, indicates that the getgroups() routine is
- *     available to get the list of process groups.  If unavailable, multiple
- *     groups are probably not supported.
- */
-/* HAS_SETGROUPS:
- *     This symbol, if defined, indicates that the setgroups() routine is
- *     available to set the list of process groups.  If unavailable, multiple
- *     groups are probably not supported.
- */
-#undef HAS_GETGROUPS           /**/
-#undef HAS_SETGROUPS           /**/
-
-/* HAS_UNAME:
- *     This symbol, if defined, indicates that the C program may use the
- *     uname() routine to derive the host name.  See also HAS_GETHOSTNAME
- *     and PHOSTNAME.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_UNAME /*config-skip*/
-#else
-#undef HAS_UNAME               /*config-skip*/
-#endif
-
-/* HAS_GETPRIORITY:
- *     This symbol, if defined, indicates that the getpriority routine is
- *     available to get a process's priority.
- */
-#undef HAS_GETPRIORITY         /**/
-
-/* HAS_KILLPG:
- *     This symbol, if defined, indicates that the killpg routine is available
- *     to kill process groups.  If unavailable, you probably should use kill
- *     with a negative process number.
- */
-#undef HAS_KILLPG      /**/
-
-/* HAS_LINK:
- *     This symbol, if defined, indicates that the link routine is
- *     available to create hard links.
- */
-#undef HAS_LINK        /**/
-
-/* HAS_LSTAT:
- *     This symbol, if defined, indicates that the lstat routine is
- *     available to do file stats on symbolic links.
- */
-#undef HAS_LSTAT               /**/
-
-/* HAS_LOCKF:
- *     This symbol, if defined, indicates that the lockf routine is
- *     available to do file locking.
- */
-#undef HAS_LOCKF               /**/
-
-/* HAS_MBSTOWCS:
- *     This symbol, if defined, indicates that the mbstowcs routine is
- *     available to covert a multibyte string into a wide character string.
- */
-#ifdef __DECC
-#  define      HAS_MBSTOWCS            /*config-skip*/
-#else
-#  undef       HAS_MBSTOWCS            /*config-skip*/
-#endif
-
-/* HAS_MBTOWC:
- *     This symbol, if defined, indicates that the mbtowc routine is available
- *     to covert a multibyte to a wide character.
- */
-#ifdef __DECC
-#  define HAS_MBTOWC           /*config-skip*/
-#else
-#  undef HAS_MBTOWC            /*config-skip*/
-#endif
-
-/* HAS_MEMCMP:
- *     This symbol, if defined, indicates that the memcmp routine is available
- *     to compare blocks of memory.
- */
-#define HAS_MEMCMP     /**/
-
-/* HAS_MEMCPY:
- *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy blocks of memory.
- */
-#define HAS_MEMCPY     /**/
-
-/* HAS_MEMMOVE:
- *     This symbol, if defined, indicates that the memmove routine is available
- *     to copy potentially overlapping blocks of memory. This should be used
- *     only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
- *     own version.
- */
-#define HAS_MEMMOVE    /**/
-
-/* HAS_MEMSET:
- *     This symbol, if defined, indicates that the memset routine is available
- *     to set blocks of memory.
- */
-#define HAS_MEMSET     /**/
-
-/* HAS_MKDIR:
- *     This symbol, if defined, indicates that the mkdir routine is available
- *     to create directories.  Otherwise you should fork off a new process to
- *     exec /bin/mkdir.
- */
-#define HAS_MKDIR              /**/
-
-/* HAS_MSG:
- *     This symbol, if defined, indicates that the entire msg*(2) library is
- *     supported (IPC mechanism based on message queues).
- */
-#undef HAS_MSG         /**/
-
-/* HAS_OPEN3:
- *     This manifest constant lets the C program know that the three
- *     argument form of open(2) is available.
- */
-#define HAS_OPEN3              /**/
-
-/* HAS_POLL:
- *     This symbol, if defined, indicates that the poll routine is
- *     available to poll active file descriptors.
- */
-#undef HAS_POLL                /**/
-
-/* HAS_PTHREAD_YIELD:
- *     This symbol, if defined, indicates that the pthread_yield routine is
- *     available to yield the execution of the current thread.
- *     VMS: pthread_yield_np is there, so just set up the alias
- */
-#define HAS_PTHREAD_YIELD      /**/
-#define pthread_yield pthread_yield_np /*config-skip*/
-
-/* OLD_PTHREADS_API:
- *     This symbol, if defined, indicates that Perl should
- *     be built to use the old draft POSIX threads API.
- */
-#undef OLD_PTHREADS_API                /**/
-
-/* HAS_READDIR:
- *     This symbol, if defined, indicates that the readdir routine is
- *     available to read directory entries. You may have to include
- *     <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR            /**/
-
-/* HAS_SEEKDIR:
- *     This symbol, if defined, indicates that the seekdir routine is
- *     available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_SEEKDIR            /**/
-
-/* HAS_TELLDIR:
- *     This symbol, if defined, indicates that the telldir routine is
- *     available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_TELLDIR            /**/
-
-/* HAS_REWINDDIR:
- *     This symbol, if defined, indicates that the rewinddir routine is
- *     available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_REWINDDIR          /**/
-
-/* HAS_RENAME:
- *     This symbol, if defined, indicates that the rename routine is available
- *     to rename files.  Otherwise you should do the unlink(), link(), unlink()
- *     trick.
- */
-#define HAS_RENAME     /**/
-
-/* HAS_RMDIR:
- *     This symbol, if defined, indicates that the rmdir routine is
- *     available to remove directories. Otherwise you should fork off a
- *     new process to exec /bin/rmdir.
- */
-#define HAS_RMDIR              /**/
-
-/* HAS_SEM:
- *     This symbol, if defined, indicates that the entire sem*(2) library is
- *     supported.
- */
-#undef HAS_SEM         /**/
-
-/* HAS_SETEGID:
- *     This symbol, if defined, indicates that the setegid routine is available
- *     to change the effective gid of the current program.
- */
-#undef HAS_SETEGID             /**/
-
-/* HAS_SETEUID:
- *     This symbol, if defined, indicates that the seteuid routine is available
- *     to change the effective uid of the current program.
- */
-#undef HAS_SETEUID             /**/
-
-
-/* HAS_SETPRIORITY:
- *     This symbol, if defined, indicates that the setpriority routine is
- *     available to set a process's priority.
- */
-#undef HAS_SETPRIORITY         /**/
-
-/* HAS_SETREGID:
- *     This symbol, if defined, indicates that the setregid routine is
- *     available to change the real and effective gid of the current
- *     process.
- */
-/* HAS_SETRESGID:
- *     This symbol, if defined, indicates that the setresgid routine is
- *     available to change the real, effective and saved gid of the current
- *     process.
- */
-#undef HAS_SETREGID            /**/
-#undef HAS_SETRESGID           /**/
-
-/* HAS_SETREUID:
- *     This symbol, if defined, indicates that the setreuid routine is
- *     available to change the real and effective uid of the current
- *     process.
- */
-/* HAS_SETRESUID:
- *     This symbol, if defined, indicates that the setresuid routine is
- *     available to change the real, effective and saved uid of the current
- *     process.
- */
-#undef HAS_SETREUID            /**/
-#undef HAS_SETRESUID           /**/
-
-/* HAS_SETRGID:
- *     This symbol, if defined, indicates that the setrgid routine is available
- *     to change the real gid of the current program.
- */
-#undef HAS_SETRGID             /**/
-
-/* HAS_SETRUID:
- *     This symbol, if defined, indicates that the setruid routine is available
- *     to change the real uid of the current program.
- */
-#undef HAS_SETRUID             /**/
-
-/* HAS_SETSID:
- *     This symbol, if defined, indicates that the setsid routine is
- *     available to set the process group ID.
- */
-#undef HAS_SETSID      /**/
-
-/* HAS_SHM:
- *     This symbol, if defined, indicates that the entire shm*(2) library is
- *     supported.
- */
-#undef HAS_SHM         /**/
-
-/* Shmat_t:
- *     This symbol holds the return type of the shmat() system call.
- *     Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- *     This symbol, if defined, indicates that the sys/shm.h includes
- *     a prototype for shmat().  Otherwise, it is up to the program to
- *     guess one.  Shmat_t shmat _((int, Shmat_t, int)) is a good guess,
- *     but not always right so it should be emitted by the program only
- *     when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#undef Shmat_t         /**/ /* config-skip */
-#undef HAS_SHMAT_PROTOTYPE     /**/
-
-/* HAS_SIGACTION:
- *     This symbol, if defined, indicates that Vr4's sigaction() routine
- *     is available.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_SIGACTION /**/
-#else
-#undef HAS_SIGACTION   /*config-skip*/
-#endif
-
-/* USE_STAT_BLOCKS:
- *     This symbol is defined if this system has a stat structure declaring
- *     st_blksize and st_blocks.
- */
-#undef USE_STAT_BLOCKS         /**/
-
-/* USE_STDIO_PTR:
- *     This symbol is defined if the _ptr and _cnt fields (or similar)
- *     of the stdio FILE structure can be used to access the stdio buffer
- *     for a file handle.  If this is defined, then the FILE_ptr(fp)
- *     and FILE_cnt(fp) macros will also be defined and should be used
- *     to access these fields.
- */
-/* USE_STDIO_BASE:
- *     This symbol is defined if the _base field (or similar) of the
- *     stdio FILE structure can be used to access the stdio buffer for
- *     a file handle.  If this is defined, then the FILE_base(fp) macro
- *     will also be defined and should be used to access this field.
- *     Also, the FILE_bufsiz(fp) macro will be defined and should be used
- *     to determine the number of bytes in the buffer.  USE_STDIO_BASE
- *     will never be defined unless USE_STDIO_PTR is.
- */
-/* STDIO_PTR_LVALUE:
- *     This symbol is defined if the FILE_ptr macro can be used as an
- *     lvalue.
- */
-/* STDIO_CNT_LVALUE:
- *     This symbol is defined if the FILE_cnt macro can be used as an
- *     lvalue.
- */
-#ifdef __DECC
-#  define USE_STDIO_PTR                /*config-skip*/
-#  define USE_STDIO_BASE       /*config-skip*/
-#  define STDIO_PTR_LVALUE     /*config-skip*/
-#  define STDIO_CNT_LVALUE     /*config-skip*/
-#else
-#  undef USE_STDIO_PTR         /*config-skip*/
-#  undef USE_STDIO_BASE                /*config-skip*/
-#  undef STDIO_PTR_LVALUE      /*config-skip*/
-#  undef STDIO_CNT_LVALUE      /*config-skip*/
-#endif
-
-/* FILE_ptr:
- *     This macro is used to access the _ptr field (or equivalent) of the
- *     FILE structure pointed to by its argument. This macro will always be
- *     defined if USE_STDIO_PTR is defined.
- */
-/* FILE_cnt:
- *     This macro is used to access the _cnt field (or equivalent) of the
- *     FILE structure pointed to by its argument. This macro will always be
- *     defined if USE_STDIO_PTR is defined.
- */
-#ifdef USE_STDIO_PTR
-#  define FILE_ptr(fp) ((*fp)->_ptr)
-#  define FILE_cnt(fp) ((*fp)->_cnt)
-#endif
-
-/* FILE_base:
- *     This macro is used to access the _base field (or equivalent) of the
- *     FILE structure pointed to by its argument. This macro will always be
- *     defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- *     This macro is used to determine the number of bytes in the I/O
- *     buffer pointed to by _base field (or equivalent) of the FILE
- *     structure pointed to its argument. This macro will always be defined
- *     if USE_STDIO_BASE is defined.
- */
-#ifdef USE_STDIO_BASE
-#  define FILE_base(fp)        ((*fp)->_base)
-#  define FILE_bufsiz(fp)      ((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base)
-#endif
-
-/* USE_STRUCT_COPY:
- *     This symbol, if defined, indicates that this C compiler knows how
- *     to copy structures.  If undefined, you'll need to use a block copy
- *     routine of some sort instead.
- */
-#define        USE_STRUCT_COPY /**/
-
-/* HAS_STRERROR:
- *     This symbol, if defined, indicates that the strerror routine is
- *     available to translate error numbers to strings. See the writeup
- *     of Strerror() in this file before you try to define your own.
- */
-/* HAS_SYS_ERRLIST:
- *     This symbol, if defined, indicates that the sys_errlist array is
- *     available to translate error numbers to strings. The extern int
- *     sys_nerr gives the size of that table.
- */
-/* Strerror:
- *     This preprocessor symbol is defined as a macro if strerror() is
- *     not available to translate error numbers to strings but sys_errlist[]
- *     array is there.
- */
-#define HAS_STRERROR           /**/
-#undef HAS_SYS_ERRLIST /**/
-#define Strerror(e) strerror((e),vaxc$errno)
-
-/* HAS_SYMLINK:
- *     This symbol, if defined, indicates that the symlink routine is available
- *     to create symbolic links.
- */
-#undef HAS_SYMLINK     /**/
-
-/* HAS_SYSCALL:
- *     This symbol, if defined, indicates that the syscall routine is
- *     available to call arbitrary system calls. If undefined, that's tough.
- */
-#undef HAS_SYSCALL     /**/
-
-/* HAS_SYSTEM:
- *     This symbol, if defined, indicates that the system routine is
- *     available to issue a shell command.
- */
-#define HAS_SYSTEM     /**/
-
-/* Time_t:
- *     This symbol holds the type returned by time(). It can be long,
- *     or time_t on BSD sites (in which case <sys/types.h> should be
- *     included).
- */
-#define Time_t time_t          /* Time type */
-
-/* HAS_TRUNCATE:
- *     This symbol, if defined, indicates that the truncate routine is
- *     available to truncate files.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_TRUNCATE /*config-skip*/
-#else
-#undef HAS_TRUNCATE    /*config-skip*/
-#endif
-
-
-/* HAS_VFORK:
- *     This symbol, if defined, indicates that vfork() exists.
- */
-#define HAS_VFORK      /**/
-
-/* HAS_UNION_SEMUN:
- *     This symbol, if defined, indicates that the union semun is
- *     defined by including <sys/sem.h>.  If not, the user code
- *     probably needs to define it as:
- *     union semun {
- *         int val;
- *         struct semid_ds *buf;
- *         unsigned short *array;
- *     }
- */
-/* USE_SEMCTL_SEMUN:
- *     This symbol, if defined, indicates that union semun is
- *     used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- *     This symbol, if defined, indicates that struct semid_ds * is
- *     used for semctl IPC_STAT.
- */
-#undef HAS_UNION_SEMUN /**/
-#undef USE_SEMCTL_SEMUN        /**/
-#undef USE_SEMCTL_SEMID_DS     /**/
-
-/* Signal_t:
- *     This symbol's value is either "void" or "int", corresponding to the
- *     appropriate return type of a signal handler.  Thus, you can declare
- *     a signal handler using "Signal_t (*handler)()", and define the
- *     handler using "Signal_t handler(sig)".
- */
-#define Signal_t void  /* Signal handler's return type */
-
-/* HASVOLATILE:
- *     This symbol, if defined, indicates that this C compiler knows about
- *     the volatile declaration.
- */
-#define        HASVOLATILE     /**/
-#ifndef HASVOLATILE
-#define volatile /* config-skip */
-#endif
-
-/* HAS_VPRINTF:
- *     This symbol, if defined, indicates that the vprintf routine is available
- *     to printf with a pointer to an argument list.  If unavailable, you
- *     may need to write your own, probably in terms of _doprnt().
- */
-/* USE_CHAR_VSPRINTF:
- *     This symbol is defined if this system has vsprintf() returning type
- *     (char*).  The trend seems to be to declare it as "int vsprintf()".  It
- *     is up to the package author to declare vsprintf correctly based on the
- *     symbol.
- */
-#define HAS_VPRINTF    /**/
-#undef USE_CHAR_VSPRINTF       /**/
-
-/* HAS_WAIT4:
- *     This symbol, if defined, indicates that wait4() exists.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_WAIT4 /*config-skip*/
-#else
-#undef HAS_WAIT4       /*config-skip*/
-#endif
-
-/* HAS_WAITPID:
- *     This symbol, if defined, indicates that the waitpid routine is
- *     available to wait for child process.
- */
-#define HAS_WAITPID    /**/
-
-/* HAS_WCSTOMBS:
- *     This symbol, if defined, indicates that the wcstombs routine is
- *     available to convert wide character strings to multibyte strings.
- */
-#ifdef __DECC
-#  define HAS_WCSTOMBS /*config-skip*/
-#else
-#  undef HAS_WCSTOMBS  /*config-skip*/
-#endif
-
-/* I_DIRENT:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <dirent.h>. Using this symbol also triggers the definition
- *     of the Direntry_t define which ends up being 'struct dirent' or
- *     'struct direct' depending on the availability of <dirent.h>.
- */
-/* DIRNAMLEN:
- *     This symbol, if defined, indicates to the C program that the length
- *     of directory entry names is provided by a d_namlen field.  Otherwise
- *     you need to do strlen() on the d_name field.
- */
-#undef I_DIRENT                /**/
-#define DIRNAMLEN      /**/
-#define Direntry_t struct dirent
-
-/* I_FCNTL:
- *     This manifest constant tells the C program to include <fcntl.h>.
- */
-#undef I_FCNTL /**/
-
-/* I_GRP:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <grp.h>.
- */
-#undef I_GRP           /**/
-
-/* I_LIMITS:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <limits.h> to get definition of symbols like WORD_BIT or
- *     LONG_MAX, i.e. machine dependant limitations.
- */
-#define I_LIMITS               /**/
-
-/* I_MEMORY:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <memory.h>.
- */
-#undef I_MEMORY                /**/
-
-/* I_NDBM:
- *     This symbol, if defined, indicates that ndbm.h exists and should
- *     be included.
- */
-#undef I_NDBM  /**/
-
-/* I_STDARG:
- *     This symbol, if defined, indicates that <stdarg.h> exists and should
- *     be included.
- */
-#define I_STDARG               /**/
-
-/* I_PWD:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <pwd.h>.
- */
-/* PWQUOTA:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_quota.
- */
-/* PWAGE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_age.
- */
-/* PWCHANGE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_change.
- */
-/* PWCLASS:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_class.
- */
-/* PWEXPIRE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_expire.
- */
-/* PWCOMMENT:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_comment.
- */
-#undef I_PWD           /**/
-#undef PWQUOTA /**/
-#undef PWAGE   /**/
-#undef PWCHANGE        /**/
-#undef PWCLASS /**/
-#undef PWEXPIRE        /**/
-#define PWGECOS        /**/
-#define PWCOMMENT      /**/
-
-/* I_STDDEF:
- *     This symbol, if defined, indicates that <stddef.h> exists and should
- *     be included.
- */
-#define I_STDDEF       /**/
-
-/* I_STDLIB:
-*      This symbol, if defined, indicates that <stdlib.h> exists and should
-*      be included.
-*/
-#define I_STDLIB               /**/
-
-/* I_STRING:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <string.h> (USG systems) instead of <strings.h> (BSD systems).
- */
-#define I_STRING               /**/
-
-/* I_SYS_DIR:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/dir.h>.
- */
-#undef I_SYS_DIR               /**/
-
-/* I_SYS_FILE:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/file.h> to get definition of R_OK and friends.
- */
-#undef I_SYS_FILE              /**/
-
-/* I_SYS_IOCTL:
- *     This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- *     be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-#undef I_SYS_IOCTL             /**/
-
-/* I_SYS_NDIR:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/ndir.h>.
- */
-#undef I_SYS_NDIR      /**/
-
-/* I_SYS_RESOURCE:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/resource.h>.
- */
-#undef I_SYS_RESOURCE          /**/
-
-/* I_SYS_SELECT:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/select.h> in order to get definition of struct timeval.
- */
-#undef I_SYS_SELECT    /**/
-
-/* I_DBM:
- *     This symbol, if defined, indicates that <dbm.h> exists and should
- *     be included.
- */
-/* I_RPCSVC_DBM:
- *     This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- *     should be included.
- */
-#undef I_DBM   /**/
-#undef I_RPCSVC_DBM    /**/
-
-/* I_SFIO:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sfio.h>.
- */
-#undef I_SFIO          /**/
-
-/* I_SYS_STAT:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/stat.h>.
- */
-#define        I_SYS_STAT              /**/
-
-/* I_SYS_TIMES:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/times.h>.
- */
-#undef I_SYS_TIMES             /**/
-
-/* I_SYS_TYPES:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/types.h>.
- */
-#define        I_SYS_TYPES             /**/
-
-/* I_SYS_UN:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/un.h> to get UNIX domain socket definitions.
- */
-#undef I_SYS_UN                /**/
-
-/* I_SYS_WAIT:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/wait.h>.
- */
-#undef I_SYS_WAIT      /**/
-
-/* I_TERMIO:
- *     This symbol, if defined, indicates that the program should include
- *     <termio.h> rather than <sgtty.h>.  There are also differences in
- *     the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- *     This symbol, if defined, indicates that the program should include
- *     the POSIX termios.h rather than sgtty.h or termio.h.
- *     There are also differences in the ioctl() calls that depend on the
- *     value of this symbol.
- */
-/* I_SGTTY:
- *     This symbol, if defined, indicates that the program should include
- *     <sgtty.h> rather than <termio.h>.  There are also differences in
- *     the ioctl() calls that depend on the value of this symbol.
- */
-#undef I_TERMIO                /**/
-#undef I_SGTTY         /**/
-#undef I_TERMIOS               /**/
-
-/* I_TIME:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <time.h>.
- */
-/* I_SYS_TIME:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/time.h> with KERNEL defined.
- */
-#define I_TIME         /**/
-#undef I_SYS_TIME              /**/
-#undef I_SYS_TIME_KERNEL               /**/
-
-/* I_UNISTD:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <unistd.h>.
- */
-#undef I_UNISTD                /**/
-
-/* I_UTIME:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <utime.h>.
- */
-#undef I_UTIME         /**/
-
-/* I_VARARGS:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <varargs.h>.
- */
-#undef I_VARARGS               /**/
-
-
-/* I_VFORK:
- *     This symbol, if defined, indicates to the C program that it should
- *     include vfork.h.
- */
-#undef I_VFORK /**/
-
-/* Pid_t:
- *     This symbol holds the type used to declare process ids in the kernel.
- *     It can be int, uint, pid_t, etc... It may be necessary to include
- *     <sys/types.h> to get any typedef'ed information.
- */
-#if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 500000)
-#  define Pid_t pid_t          /* config-skip */
-#else
-#  define Pid_t int    /* config-skip */
-#endif
-
-/* CAN_PROTOTYPE:
- *     If defined, this macro indicates that the C compiler can handle
- *     function prototypes.
- */
-/* _:
- *     This macro is used to declare function parameters for folks who want
- *     to make declarations with prototypes using a different style than
- *     the above macros.  Use double parentheses.  For example:
- *
- *             int main _((int argc, char *argv[]));
- */
-#define        CAN_PROTOTYPE   /**/
-#ifdef CAN_PROTOTYPE
-#define        _(args) args  /* config-skip */
-#else
-#define        _(args) ()    /* config-skip */
-#endif
-
-/* RANDBITS:
- *     This symbol contains the number of bits of random number the rand()
- *     function produces.  Usual values are 15, 16, and 31.
- */
-#define RANDBITS 31            /**/
-
-
-/* Select_fd_set_t:
- *     This symbol holds the type used for the 2nd, 3rd, and 4th
- *     arguments to select.  Usually, this is 'fd_set *', if HAS_FD_SET
- *     is defined, and 'int *' otherwise.  This is only useful if you 
- *     have select(), of course.
- */
-#if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 50200000) && defined(DECCRTL_SOCKETS)
-#define Select_fd_set_t                fd_set *        /* config-skip */
-#else
-#define Select_fd_set_t                int *           /* config-skip */
-#endif
-
-/* STDCHAR:
- *     This symbol is defined to be the type of char used in stdio.h.
- *     It has the values "unsigned char" or "char".
- */
-#define STDCHAR char   /**/
-
-/* UNLINK_ALL_VERSIONS:
- *     This symbol, if defined, indicates that the program should arrange
- *     to remove all versions of a file if unlink() is called.
- */
-#undef UNLINK_ALL_VERSIONS             /**/
-
-/* LOC_SED:
- *     This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED        "_NLA0:"        /**/
-
-/* BIN:
- *     This symbol holds the path of the bin directory where the package will
- *     be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- *     This symbol is the filename expanded version of the BIN symbol, for
- *     programs that do not want to deal with that at run-time.
- */
-#define BIN "/perl_root/000000"        /**/
-#define BIN_EXP "/perl_root/000000"    /**/
-
-/* HAS_ALARM:
- *     This symbol, if defined, indicates that the alarm routine is
- *     available.
- */
-#define HAS_ALARM              /**/
-
-/* HASATTRIBUTE:
- *     This symbol indicates the C compiler can check for function attributes,
- *     such as printf formats. This is normally only supported by GNU cc.
- */
-#ifdef __GNUC__
-#  define HASATTRIBUTE         /*config-skip*/
-#else
-#  undef HASATTRIBUTE  /*config-skip*/
-#endif
-#ifndef HASATTRIBUTE
-#define __attribute__(_arg_)
-#endif
-
-/* CASTI32:
- *     This symbol is defined if the C compiler can cast negative
- *     or large floating point numbers to 32-bit ints.
- */
-#define        CASTI32         /**/
-
-/* HAS_CHOWN:
- *     This symbol, if defined, indicates that the chown routine is
- *     available.
- */
-#define HAS_CHOWN              /**/
-
-/* HAS_CHROOT:
- *     This symbol, if defined, indicates that the chroot routine is
- *     available.
- */
-#undef HAS_CHROOT              /**/
-
-/* HAS_CUSERID:
- *     This symbol, if defined, indicates that the cuserid routine is
- *     available to get character login names.
- */
-#define HAS_CUSERID            /**/
-
-/* HAS_DBL_DIG:
- *     This symbol, if defined, indicates that this system's <float.h>
- *     or <limits.h> defines the symbol DBL_DIG, which is the number
- *     of significant digits in a double precision number.  If this
- *     symbol is not defined, a guess of 15 is usually pretty good.
- */
-#define HAS_DBL_DIG    /* */
-
-/* HAS_DIFFTIME:
- *     This symbol, if defined, indicates that the difftime routine is
- *     available.
- */
-#define HAS_DIFFTIME           /**/
-
-/* HAS_FORK:
- *     This symbol, if defined, indicates that the fork routine is
- *     available.
- */
-/* VMS: In vmsish.h, fork is #defined to vfork.  This kludge gets around
- * some obsolete code in pp.c, which should be fixed in its own right
- * sometime.  - C. Bailey 26-Aug-1994
- */
-#define HAS_FORK               /**/
-
-/* HAS_GETLOGIN:
- *     This symbol, if defined, indicates that the getlogin routine is
- *     available.
- */
-#define HAS_GETLOGIN           /**/
-
-/* HAS_GETPPID:
- *     This symbol, if defined, indicates that the getppid routine is
- *     available.
- */
-#undef HAS_GETPPID             /**/
-
-/* HAS_HTONL:
- *     This symbol, if defined, indicates that the htonl() routine (and
- *     friends htons() ntohl() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_HTONS:
- *     This symbol, if defined, indicates that the htons() routine (and
- *     friends htonl() ntohl() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_NTOHL:
- *     This symbol, if defined, indicates that the ntohl() routine (and
- *     friends htonl() htons() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_NTOHS:
- *     This symbol, if defined, indicates that the ntohs() routine (and
- *     friends htonl() htons() ntohl()) are available to do network
- *     order byte swapping.
- */
-#define HAS_HTONL             /**/
-#define HAS_HTONS             /**/
-#define HAS_NTOHL             /**/
-#define HAS_NTOHS             /**/
-/* HAS_MBLEN:
- *     This symbol, if defined, indicates that the mblen routine is available
- *     to find the number of bytes in a multibye character.
- */
-#ifdef __DECC
-#  define HAS_MBLEN            /*config-skip*/
-#else
-#  undef HAS_MBLEN             /*config-skip*/
-#endif
-
-/* HAS_MKTIME:
- *     This symbol, if defined, indicates that the mktime routine is
- *     available.
- */
-#ifdef __DECC
-#  define HAS_MKTIME           /*config-skip*/
-#else
-#  undef HAS_MKTIME            /*config-skip*/
-#endif
-
-/* HAS_NICE:
- *     This symbol, if defined, indicates that the nice routine is
- *     available.
- */
-#define HAS_NICE               /**/
-
-/* HAS_PAUSE:
- *     This symbol, if defined, indicates that the pause routine is
- *     available.
- */
-#define HAS_PAUSE              /**/
-
-/* HAS_PIPE:
- *     This symbol, if defined, indicates that the pipe routine is
- *     available.
- */
-#define HAS_PIPE               /**/
-
-/* HAS_READLINK:
- *     This symbol, if defined, indicates that the readlink routine is
- *     available.
- */
-#undef HAS_READLINK            /**/
-
-/* HAS_SETLINEBUF:
- *     This symbol, if defined, indicates that the setlinebuf routine is
- *     available to change stderr or stdout from block-buffered or unbuffered
- *     to a line-buffered mode.
- */
-#undef HAS_SETLINEBUF          /**/
-
-/* HAS_STRCHR:
- *     This symbol is defined to indicate that the strchr()/strrchr()
- *     functions are available for string searching. If not, try the
- *     index()/rindex() pair.
- */
-/* HAS_INDEX:
- *     This symbol is defined to indicate that the index()/rindex()
- *     functions are available for string searching.
- */
-#define HAS_STRCHR     /**/
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_INDEX /*config-skip*/
-#else
-#undef HAS_INDEX       /*config-skip*/
-#endif
-
-/* HAS_STRCOLL:
- *     This symbol, if defined, indicates that the strcoll routine is
- *     available to compare strings using collating information.
- */
-#ifdef __DECC
-#  define HAS_STRCOLL  /*config-skip*/
-#else
-#  undef HAS_STRCOLL   /*config-skip*/
-#endif
-
-/* HAS_STRTOD:
- *     This symbol, if defined, indicates that the strtod routine is
- *     available to provide better numeric string conversion than atof().
- */
-#define HAS_STRTOD     /**/
-
-/* HAS_STRTOL:
- *     This symbol, if defined, indicates that the strtol routine is available
- *     to provide better numeric string conversion than atoi() and friends.
- */
-#define HAS_STRTOL     /**/
-
-/* HAS_STRTOUL:
- *     This symbol, if defined, indicates that the strtoul routine is
- *     available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL    /**/
-
-/* HAS_STRXFRM:
- *     This symbol, if defined, indicates that the strxfrm() routine is
- *     available to compare strings using collating information.
- */
-#ifdef __DECC
-#  define HAS_STRXFRM  /*config-skip*/
-#else
-#  undef HAS_STRXFRM   /*config-skip*/
-#endif
-
-/* HAS_TCGETPGRP:
- *     This symbol, if defined, indicates that the tcgetpgrp routine is
- *     available to get foreground process group ID.
- */
-#undef HAS_TCGETPGRP           /**/
-
-/* HAS_TCSETPGRP:
- *     This symbol, if defined, indicates that the tcsetpgrp routine is
- *     available to set foreground process group ID.
- */
-#undef HAS_TCSETPGRP           /**/
-
-/* HAS_TIMES:
- *     This symbol, if defined, indicates that the times() routine exists.
- *     Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#define HAS_TIMES              /**/
-
-/* HAS_TZNAME:
- *     This symbol, if defined, indicates that the tzname[] array is
- *     available to access timezone names.
- */
-#undef HAS_TZNAME              /**/
-
-/* HAS_UMASK:
- *     This symbol, if defined, indicates that the umask routine is
- *     available to get the file creation mask.
- */
-#define HAS_UMASK              /**/
-
-/* HAS_WCTOMB:
- *     This symbol, if defined, indicates that the wctomb routine is available
- *     to covert a wide character to a multibyte.
- */
-#ifdef __DECC
-#  define HAS_WCTOMB           /*config-skip*/
-#else
-#  undef HAS_WCTOMB            /*config-skip*/
-#endif
-
-/* Fpos_t:
- *     This symbol holds the type used to declare file positions in libc.
- *     It can be fpos_t, long, uint, etc... It may be necessary to include
- *     <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t fpos_t          /* File position type */
-
-/* Gid_t:
- *     This symbol holds the return type of getgid() and the type of
- *     argument to setrgid() and related functions.  Typically,
- *     it is the type of group ids in the kernel.
- *     It can be int, ushort, uid_t, etc... It may be necessary to include
- *     <sys/types.h> to get any typedef'ed information.
- */
-#if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 500000)
-#  define Gid_t gid_t          /* config-skip */
-#else
-#  define Gid_t unsigned int   /* config-skip */
-#endif
-
-/* I_DLFCN:
- *     This symbol, if defined, indicates that <dlfcn.h> exists and should
- *     be included.
- */
-#undef I_DLFCN         /**/
-
-/* I_FLOAT:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <float.h> to get definition of symbols like DBL_MAX or
- *     DBL_MIN, i.e. machine dependent floating point values.
- */
-#define I_FLOAT                /**/
-
-/* I_MATH:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <math.h>.
- */
-#define I_MATH         /**/
-
-/* DOUBLESIZE:
- *     This symbol contains the size of a double, so that the C preprocessor
- *     can make decisions based on it.
- */
-/* INTSIZE:
- *     This symbol contains the size of an int, so that the C preprocessor
- *     can make decisions based on it.
- */
-/* LONGSIZE:
- *     This symbol contains the value of sizeof(long) so that the C
- *     preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- *     This symbol contains the value of sizeof(short) so that the C
- *     preprocessor can make decisions based on it.
- */
-/* PTRSIZE:
- *     This symbol contains the size of a pointer, so that the C preprocessor
- *     can make decisions based on it.  It will be sizeof(void *) if
- *     the compiler supports (void *); otherwise it will be
- *     sizeof(char *).
- *     VMS: Use 32-bit pointers everywhere for now  7-Mar-1998
- */
-#define DOUBLESIZE 8           /**/
-#define INTSIZE 4              /**/
-#define LONGSIZE 4             /**/
-#define SHORTSIZE 2            /**/
-#define PTRSIZE 4              /**/
-
-/* Off_t:
- *     This symbol holds the type used to declare offsets in the kernel.
- *     It can be int, long, off_t, etc... It may be necessary to include
- *     <sys/types.h> to get any typedef'ed information.
- */
-#define Off_t int              /* <offset> type */
-
-/* I_VALUES:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <values.h> to get definition of symbols like MINFLOAT or
- *     MAXLONG, i.e. machine dependant limitations.  Probably, you
- *     should use <limits.h> instead, if it is available.
- */
-#undef I_VALUES                /**/
-
-/* Free_t:
- *     This variable contains the return type of free().  It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- *     This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t void *                        /**/
-#define Free_t void                    /**/
-
-/* MYMALLOC:
- *     This symbol, if defined, indicates that we're using our own malloc.
- */
-#undef MYMALLOC                        /**/
-
-/* SH_PATH:
- *     This symbol contains the full pathname to the shell used on this
- *     on this system to execute Bourne shell scripts.  Usually, this will be
- *     /bin/sh, though it's possible that some systems will have /bin/ksh,
- *     /bin/pdksh, /bin/ash, /bin/bash, or even something such as D:/bin/sh.
- */
-#define SH_PATH "MCR"  /**/
-
-/* SIG_NAME:
- *     This symbol contains a list of signal names in order. This is intended
- *     to be used as a static array initialization, like this:
- *             char *sig_name[] = { SIG_NAME };
- *     The signals in the list are separated with commas, and each signal
- *     is surrounded by double quotes. There is no leading SIG in the signal
- *     name, i.e. SIGQUIT is known as "QUIT". Duplicates are allowed.
- *     The signal number for sig_name[i] is stored in sig_num[i].
- *     The last element is 0 to terminate the list with a NULL.  This
- *     corresponds to the 0 at the end of the sig_num list.
- *     See SIG_NUM and SIG_MAX.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\
-                 "KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM",\
-                 "ABRT","USR1","USR2","SPARE18","SPARE19","CHLD","CONT",\
-                 "STOP","TSTP","TTIN","TTOU","DEBUG","SPARE27","SPARE28",\
-                 "SPARE29","SPARE30","SPARE31","SPARE32","RTMIN","RTMAX",0 /**/
-#else
-#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\
-                 "KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM",\
-                 "ABRT","USR1","USR2",0 /*config-skip*/
-#endif
-
-/* SIG_NUM:
- *     This symbol contains a list of signal number, in the same order as the
- *     SIG_NAME list. It is suitable for static array initialization, as in:
- *             int sig_num[] = { SIG_NUM };
- *     The signals in the list are separated with commas, and the indices
- *     within that list and the SIG_NAME list match, so it's easy to compute
- *     the signal name from a number or vice versa at the price of a small
- *     dynamic linear lookup. Duplicates are allowed, so you can't assume
- *     sig_num[i] == i.  Instead, the signal number corresponding to
- * sig_name[i] is sig_number[i].
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name list.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define SIG_NUM 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,64,0     /**/
-#else
-#define SIG_NUM 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0        /*config-skip*/
-#endif
-
-/* Mode_t:
- *     This symbol holds the type used to declare file modes 
- *     for systems calls.  It is usually mode_t, but may be
- *     int or unsigned short.  It may be necessary to include <sys/types.h>
- *     to get any typedef'ed information.
- */
-#define Mode_t unsigned int     /* file mode parameter for system calls*/
-
-/* SSize_t:
- *     This symbol holds the type used by functions that return
- *     a count of bytes or an error condition.  It must be a signed type.
- *     It is usually ssize_t, but may be long or int, etc.
- *     It may be necessary to include <sys/types.h> or <unistd.h>
- *     to get any typedef'ed information.
- *     We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t int     /* signed count of bytes */
-
-/* VAL_O_NONBLOCK:
- *     This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- *     non-blocking I/O for the file descriptor. Note that there is no way
- *     back, i.e. you cannot turn it blocking again this way. If you wish to
- *     alternatively switch between blocking and non-blocking, use the
- *     ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- *     This symbol holds the errno error code set by read() when no data was
- *     present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- *     This symbol holds the return code from read() when no data is present
- *     on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- *     not defined, then you can't distinguish between no data and EOF by
- *     issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- *     This symbol, if defined, indicates to the C program that a read() on
- *     a non-blocking file descriptor will return 0 on EOF, and not the value
- *     held in RD_NODATA (-1 usually, in that case!).
- */
-#undef VAL_O_NONBLOCK
-#undef VAL_EAGAIN
-#undef RD_NODATA
-#undef EOF_NONBLOCK
-
-/* PRIVLIB:
- *     This symbol contains the name of the private library for this package.
- *     The library is private in the sense that it needn't be in anyone's
- *     execution path, but it should be accessible by the world.  The program
- *     should be prepared to do ~ expansion.
- */
-/* PRIVLIB_EXP:
- *     This symbol contains the ~name expanded version of PRIVLIB, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB_EXP "/perl_root/lib"           /**/
-#define PRIVLIB PRIVLIB_EXP  /*config-skip*/
-
-/* SITELIB:
- *     This symbol contains the name of the private library for this package.
- *     The library is private in the sense that it needn't be in anyone's
- *     execution path, but it should be accessible by the world.  The program
- *     should be prepared to do ~ expansion.
- *     The standard distribution will put nothing in this directory.
- *     Individual sites may place their own extensions and modules in
- *     this directory.
- */
-/* SITELIB_EXP:
- *     This symbol contains the ~name expanded version of SITELIB, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define SITELIB_EXP    "/perl_root/lib/site_perl"      /**/
-#define SITELIB SITELIB_EXP  /*config-skip*/
-
-/* SITEARCH:
- *     This symbol contains the name of the private library for this package.
- *     The library is private in the sense that it needn't be in anyone's
- *     execution path, but it should be accessible by the world.  The program
- *     should be prepared to do ~ expansion.
- *     The standard distribution will put nothing in this directory.
- *     Individual sites may place their own extensions and modules in
- *     this directory.
- */
-/* SITEARCH_EXP:
- *     This symbol contains the ~name expanded version of SITEARCH, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*     ==> NOTE <==
- * This value is automatically updated by FndVers.Com
- * when Perl is built.  Please do not change it by hand; make
- * any changes to FndVers.Com instead.
- */
-#define SITEARCH_EXP "/perl_root/lib/site_perl/VMS_VAX"  /**/
-#define SITEARCH SITEARCH_EXP  /*config-skip*/
-
-/* Size_t:
- *     This symbol holds the type used to declare length parameters
- *     for string functions.  It is usually size_t, but may be
- *     unsigned long, int, etc.  It may be necessary to include
- *     <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t size_t   /* length paramater for string functions */
-
-/* Uid_t:
- *     This symbol holds the type used to declare user ids in the kernel.
- *     It can be int, ushort, uid_t, etc... It may be necessary to include
- *     <sys/types.h> to get any typedef'ed information.
- */
-#if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 500000)
-#  define Uid_t uid_t          /* config-skip */
-#else
-#  define Uid_t unsigned int   /* config-skip */
-#endif
-
-/* I_SYS_PARAM:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <sys/param.h>.
- */
-#undef I_SYS_PARAM
-
-/* VOID_CLOSEDIR:
- *     This symbol, if defined, indicates that the closedir() routine
- *     does not return a value.
- */
-#define VOID_CLOSEDIR          /**/
-
-/* HAS_DLERROR:
- *     This symbol, if defined, indicates that the dlerror routine is
- *     available.
-*/
-#undef HAS_DLERROR             /**/
-
-/* DLSYM_NEEDS_UNDERSCORE:
- *     This symbol, if defined, indicates that we need to prepend an
- *     underscore to the symbol name before calling dlsym().  This only
- *     makes sense if you *have* dlsym, which we will presume is the
- *     case if you're using dl_dlopen.xs.
- */
-#undef         DLSYM_NEEDS_UNDERSCORE  /* */
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- *     This symbol, if defined, indicates that setuid scripts are secure.
- */
-/* DOSUID:
- *     This symbol, if defined, indicates that the C program should
- *     check the script that it is executing for setuid/setgid bits, and
- *     attempt to emulate setuid/setgid on systems that have disabled
- *     setuid #! scripts because the kernel can't do it securely.
- *     It is up to the package designer to make sure that this emulation
- *     is done securely.  Among other things, it should do an fstat on
- *     the script it just opened to make sure it really is a setuid/setgid
- *     script, it should make sure the arguments passed correspond exactly
- *     to the argument on the #! line, and it should not trust any
- *     subprocesses to which it must pass the filename rather than the
- *     file descriptor of the script to be executed.
- */
-#undef SETUID_SCRIPTS_ARE_SECURE_NOW   /**/
-#undef DOSUID          /**/
-
-/* HAS_INET_ATON:
- *     This symbol, if defined, indicates to the C program that the
- *     inet_aton() function is available to parse IP address "dotted-quad"
- *     strings.
- *     VMS: SocketShr doesn't support this, so we let the Socket extension
- *     roll its own.
- */
-#undef HAS_INET_ATON           /**/
-
-/* HAS_GNULIBC:
- *     This symbol, if defined, indicates to the C program that 
- *     the GNU C library is being used.
- */
-#undef HAS_GNULIBC     /**/
-
-/* HAS_ISASCII:
- *     This manifest constant lets the C program know that the
- *     isascii is available.
- */
-#define HAS_ISASCII            /**/
-
-/* HAS_LCHOWN:
- *     This symbol, if defined, indicates that the lchown routine is
- *     available to operate on a symbolic link (instead of following the
- *     link).
- */
-/*#define HAS_LCHOWN           / **/
-
-/* HAS_SETLOCALE:
- *     This symbol, if defined, indicates that the setlocale routine is
- *     available to handle locale-specific ctype implementations.
- */
-/* I_LOCALE:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <locale.h>.
- */
-/* HAS_LOCALECONV:
- *     This symbol, if defined, indicates that the localeconv routine is
- *     available for numeric and monetary formatting conventions.
- */
-#ifdef __DECC
-#  define      I_LOCALE                /*config-skip*/
-#  define HAS_SETLOCALE        /*config-skip*/
-#  define HAS_LOCALECONV       /*config-skip*/
-#else
-#  undef       I_LOCALE                /*config-skip*/
-#  undef HAS_SETLOCALE /*config-skip*/
-#  undef HAS_LOCALECONV        /*config-skip*/
-#endif
-
-/* HAS_MKFIFO:
- *     This symbol, if defined, indicates that the mkfifo routine is
- *     available.
- */
-#undef HAS_MKFIFO              /**/
-
-/* HAS_PATHCONF:
- *     This symbol, if defined, indicates that pathconf() is available
- *     to determine file-system related limits and options associated
- *     with a given filename.
- */
-/* HAS_FPATHCONF:
- *     This symbol, if defined, indicates that pathconf() is available
- *     to determine file-system related limits and options associated
- *     with a given open file descriptor.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_PATHCONF /*config-skip*/
-#define HAS_FPATHCONF /*config-skip*/
-#else
-#undef HAS_PATHCONF       /*config-skip*/
-#undef HAS_FPATHCONF     /*config-skip*/
-#endif
-
-/* HAS_SAFE_BCOPY:
- *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#undef HAS_SAFE_BCOPY  /**/
-
-/* HAS_SAFE_MEMCPY:
- *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#define HAS_SAFE_MEMCPY        /**/
-
-/* HAS_SANE_MEMCMP:
- *     This symbol, if defined, indicates that the memcmp routine is available
- *     and can be used to compare relative magnitudes of chars with their high
- *     bits set.  If it is not defined, roll your own version.
- */
-#define HAS_SANE_MEMCMP        /**/
-
-/* HAS_SETPGRP:
- *     This symbol, if defined, indicates that the setpgrp routine is
- *     available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- *     This symbol, if defined, indicates that setpgrp needs two
- *     arguments whereas USG one needs none.  See also HAS_SETPGID
- *     for a POSIX interface.
- */
-#undef HAS_SETPGRP             /**/
-#undef USE_BSD_SETPGRP /**/
-
-/* HAS_SETPGID:
- *     This symbol, if defined, indicates that the setpgid routine is
- *     available to set process group ID.
- */
-#undef HAS_SETPGID     /**/
-
-/* HAS_SETPGRP2:
- *     This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- *     routine is available to set the current process group.
- */
-#undef HAS_SETPGRP2            /**/
-
-/* HAS_SYSCONF:
- *     This symbol, if defined, indicates that sysconf() is available
- *     to determine system related limits and options.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_SYSCONF /*config-skip*/
-#else
-#undef HAS_SYSCONF     /*config-skip*/
-#endif
-
-/* Gconvert:
- *     This preprocessor macro is defined to convert a floating point
- *     number to a string without a trailing decimal point.  This
- *     emulates the behavior of sprintf("%g"), but is sometimes much more
- *     efficient.  If gconvert() is not available, but gcvt() drops the
- *     trailing decimal point, then gcvt() is used.  If all else fails,
- *     a macro using sprintf("%g") is used.  Arguments for the Gconvert
- *     macro are: value, number of digits, whether trailing zeros should
- *     be retained, and the output buffer.
- *     Possible values are:
- *             d_Gconvert='gconvert((x),(n),(t),(b))'
- *             d_Gconvert='gcvt((x),(n),(b))'
- *             d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- *     The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) my_gconvert(x,n,t,b)
-
-/* HAS_GETPGID:
- *     This symbol, if defined, indicates to the C program that 
- *     the getpgid(pid) function is available to get the
- *     process group id.
- */
-#undef HAS_GETPGID             /**/
-
-/* HAS_GETPGRP:
- *     This symbol, if defined, indicates that the getpgrp routine is
- *     available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- *     This symbol, if defined, indicates that getpgrp needs one
- *     arguments whereas USG one needs none.
- */
-#undef HAS_GETPGRP             /**/
-#undef USE_BSD_GETPGRP /**/
-
-/* HAS_GETPGRP2:
- *     This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- *     routine is available to get the current process group.
- */
-#undef HAS_GETPGRP2            /**/
-
-/* USE_SFIO:
- *     This symbol, if defined, indicates that sfio should
- *     be used.
- */
-#undef USE_SFIO                /**/
-
-/* PTHREADS_CREATED_JOINABLE:
- *     This symbol, if defined, indicates that pthreads are created
- *     in the joinable (aka undetached) state.
- */
-#define        PTHREADS_CREATED_JOINABLE               /**/
-
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- */
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_SIGSETJMP /*config-skip*/
-#else
-#undef HAS_SIGSETJMP   /*config-skip*/
-#endif
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf  /* config-skip */
-#define Sigsetjmp(buf,save_mask) sigsetjmp(buf,save_mask)      /* config-skip */
-#define Siglongjmp(buf,retval) siglongjmp(buf,retval)  /* config-skip */
-#else
-#define Sigjmp_buf jmp_buf     /* config-skip */
-#define Sigsetjmp(buf,save_mask) setjmp(buf)   /* config-skip */
-#define Siglongjmp(buf,retval) longjmp(buf,retval)     /* config-skip */
-#endif
-
-/* USE_DYNAMIC_LOADING:
- *     This symbol, if defined, indicates that dynamic loading of
- *     some sort is available.
- */
-#define USE_DYNAMIC_LOADING            /**/
-
-/* STARTPERL:
- *     This variable contains the string to put in front of a perl
- *     script to make sure (one hopes) that it runs with perl and not
- *     some shell.
- */
-#define STARTPERL ""           /**/
-
-/* Groups_t:
- *     This symbol holds the type used for the second argument to
- *     [gs]etgroups().  Usually, this is the same of gidtype, but
- *     sometimes it isn't.  It can be int, ushort, uid_t, etc... 
- *     It may be necessary to include <sys/types.h> to get any 
- *     typedef'ed information.  This is only required if you have
- *     getgroups() or setgroups.
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t unsigned int  /* config-skip */
-#endif
-
-/* DB_Prefix_t:
- *     This symbol contains the type of the prefix structure element
- *     in the <db.h> header file.  In older versions of DB, it was
- *     int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- *     This symbol contains the type of the prefix structure element
- *     in the <db.h> header file.  In older versions of DB, it was
- *     int, while in newer ones it is size_t.
- */
-#undef DB_Hash_t       /**/
-#undef DB_Prefix_t     /**/
-
-/* USE_PERLIO:
- *     This symbol, if defined, indicates that the PerlIO abstraction should
- *     be used throughout.  If not defined, stdio should be
- *     used in a fully backward compatible manner.
- */
-#undef USE_PERLIO              /**/
-
-/* HAS_SETVBUF:
- *     This symbol, if defined, indicates that the setvbuf routine is
- *     available to change buffering on an open stdio stream.
- *     to a line-buffered mode.
- */
-#define HAS_SETVBUF            /**/
-
-/* VOIDFLAGS:
- *     This symbol indicates how much support of the void type is given by this
- *     compiler.  What various bits mean:
- *
- *         1 = supports declaration of void
- *         2 = supports arrays of pointers to functions returning void
- *         4 = supports comparisons between pointers to void functions and
- *                 addresses of void functions
- *         8 = suports declaration of generic void pointers
- *
- *     The package designer should define VOIDUSED to indicate the requirements
- *     of the package.  This can be done either by #defining VOIDUSED before
- *     including config.h, or by defining defvoidused in Myinit.U.  If the
- *     latter approach is taken, only those flags will be tested.  If the
- *     level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int               /* is void to be avoided? */  /* config-skip */
-#define M_VOID                 /* Xenix strikes again */     /* config-skip */
-#endif
-
-#ifdef VMS_DO_SOCKETS
-/* HAS_SOCKET:
- *     This symbol, if defined, indicates that the BSD socket interface is
- *     supported.
- */
-/* HAS_SOCKETPAIR:
- *     This symbol, if defined, indicates that the BSD socketpair() call is
- *     supported.
- */
-#define HAS_SOCKET             /**/          /* config-skip */
-#undef HAS_SOCKETPAIR  /**/          /* config-skip */
-
-/* HAS_GETHOSTENT:
- *     This symbol, if defined, indicates that the gethostent routine is
- *     available to lookup host names in some data base or other.
- */
-#define HAS_GETHOSTENT         /**/      /* config-skip */
-
-/* HAS_GETHOSTBYADDR:
- *     This symbol, if defined, indicates that the gethostbyaddr routine is
- *     available to lookup host names by their IP addresses.
- */
-#define HAS_GETHOSTBYADDR              /**/      /* config-skip */
-
-/* Netdb_host_t:
- *     This symbol holds the type used for the 1st argument
- *     to gethostbyaddr().
- */
-#define Netdb_host_t           char * /**/ /* config-skip */
-
-/* Netdb_hlen_t:
- *     This symbol holds the type used for the 2nd argument
- *     to gethostbyaddr().
- */
-#define Netdb_hlen_t           int     /**/  /* config-skip */
-
-/* HAS_GETPROTOBYNAME:
- *     This symbol, if defined, indicates that the getprotobyname()
- *     routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- *     This symbol, if defined, indicates that the getprotobynumber()
- *     routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME             /*config-skip*/
-#define HAS_GETPROTOBYNUMBER           /*config-skip*/
-
-/* HAS_GETHOSTBYNAME:
- *     This symbol, if defined, indicates that the gethostbyname routine is
- *     available to lookup hosts by their DNS names.
- */
-#define HAS_GETHOSTBYNAME              /*config-skip*/
-
-/* Netdb_name_t:
- *     This symbol holds the type used for the 1st argument
- *     to gethostbyname(), the 1st argument to getnetbyname(),
- *     the 1st argument to getprotobyname(), the 1st argument to
- *     getservbyname(), the 2nd argument to getservbyname(),
- *     and the 2nd argument to getservbyport().
- */
-#define Netdb_name_t   char *
-
-#ifdef DECCRTL_SOCKETS
-/* HAS_GETNETBYADDR:
- *     This symbol, if defined, indicates that the getnetbyaddr routine is
- *     available to lookup networks by their IP addresses.
- */
-#define HAS_GETNETBYADDR               /**/      /* config-skip */
-
-/* Netdb_net_t:
- *     This symbol holds the type used for the 1st argument
- *     to getnetbyaddr().
- */
-#define Netdb_net_t            long    /**/ /* config-skip */
-
-/* HAS_GETNETBYNAME:
- *     This symbol, if defined, indicates that the getnetbyname routine is
- *     available to lookup networks by their names.
- */
-#define HAS_GETNETBYNAME               /*config-skip*/
-
-/* HAS_GETNETENT:
- *     This symbol, if defined, indicates that the getnetent() routine is
- *     available to look up network names in some data base or another.
- */
-#define HAS_GETNETENT          /*config-skip*/
-
-/* HAS_SETNETENT:
- *     This symbol, if defined, indicates that the setnetent() routine is
- *     available.
- */
-#define HAS_SETNETENT          /*config-skip*/
-
-/* HAS_ENDNETENT:
- *     This symbol, if defined, indicates that the endnetent() routine is
- *     available to close whatever was being used for network queries.
- */
-#define HAS_ENDNETENT          /*config-skip*/
-#else
-#undef HAS_GETNETBYADDR                /*config-skip*/
-#undef HAS_GETNETBYNAME                /*config-skip*/
-#undef HAS_GETNETENT           /*config-skip*/
-#undef HAS_SETNETENT           /*config-skip*/
-#undef HAS_ENDNETENT           /*config-skip*/
-#endif
-
-/* HAS_GETPROTOBYNAME:
- *     This symbol, if defined, indicates that the getprotobyname routine is
- *     available to lookup protocols by their names.
- */
-/* HAS_GETPROTOBYNUMBER:
- *     This symbol, if defined, indicates that the getprotobynumber()
- *     routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME             /*config-skip*/
-#define HAS_GETPROTOBYNUMBER           /*config-skip*/
-
-/* HAS_GETSERVBYNAME:
- *     This symbol, if defined, indicates that the getservbyname()
- *     routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- *     This symbol, if defined, indicates that the getservbyport()
- *     routine is available to look up services by their port.
- */
-#define HAS_GETSERVBYNAME              /*config-skip*/
-#define HAS_GETSERVBYPORT              /*config-skip*/
-
-/* HAS_SETHOSTENT:
- *     This symbol, if defined, indicates that the sethostent() routine is
- *     available.
- */
-#define HAS_SETHOSTENT         /*config-skip*/
-
-/* VMS: In general, TCP/IP header files should be included from
- * sockadapt.h, instead of here, in order to keep the TCP/IP code
- * together as much as possible.
- */
-/* I_NETINET_IN:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-#undef I_NETINET_IN    /**/              /* config-skip */
-
-/* I_NETDB:
- *     This symbol, if defined, indicates that <netdb.h> exists and 
- *     should be included.
- */
-#undef I_NETDB         /**/              /* config-skip */
-
-/* I_NET_ERRNO:
- *     This symbol, if defined, indicates that <net/errno.h> exists and 
- *     should be included.
-*/
-#undef I_NET_ERRNO             /**/          /* config-skip */
-
-/* HAS_SELECT:
- *     This symbol, if defined, indicates that the select routine is
- *     available to select active file descriptors. If the timeout field
- *     is used, <sys/time.h> may need to be included.
- */
-#define HAS_SELECT     /**/              /* config-skip */
-
-/* HAS_ENDHOSTENT:
- *     This symbol, if defined, indicates that the endhostent() routine is
- *     available to close whatever was being used for host queries.
- */
-#define HAS_ENDHOSTENT         /*config-skip*/
-
-/* HAS_GETPROTOENT:
- *     This symbol, if defined, indicates that the getprotoent() routine is
- *     available to look up protocols in some data base or another.
- */
-#define HAS_GETPROTOENT                /*config-skip*/
-
-/* HAS_ENDPROTOENT:
- *     This symbol, if defined, indicates that the endprotoent() routine is
- *     available to close whatever was being used for protocol queries.
- */
-#define HAS_ENDPROTOENT                /*config-skip*/
-
-/* HAS_SETPROTOENT:
- *     This symbol, if defined, indicates that the setprotoent() routine is
- *     available.
- */
-#define HAS_SETPROTOENT                /*config-skip*/
-
-/* HAS_GETSERVENT:
- *     This symbol, if defined, indicates that the getservent() routine is
- *     available to look up network services in some data base or another.
- */
-#define HAS_GETSERVENT         /*config-skip*/
-
-/* HAS_SETSERVENT:
- *     This symbol, if defined, indicates that the setservent() routine is
- *     available.
- */
-#define HAS_SETSERVENT         /*config-skip*/
-
-/* HAS_ENDSERVENT:
- *     This symbol, if defined, indicates that the endservent() routine is
- *     available to close whatever was being used for service queries.
- */
-#define HAS_ENDSERVENT         /*config-skip*/
-
-/* HAS_GETHOST_PROTOS:
- *     This symbol, if defined, indicates that <netdb.h> includes
- *     prototypes for gethostent(), gethostbyname(), and
- *     gethostbyaddr().  Otherwise, it is up to the program to guess
- *     them.  See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define        HAS_GETHOST_PROTOS      /*config-skip*/
-
-/* HAS_GETNET_PROTOS:
- *     This symbol, if defined, indicates that <netdb.h> includes
- *     prototypes for getnetent(), getnetbyname(), and
- *     getnetbyaddr().  Otherwise, it is up to the program to guess
- *     them.  See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define        HAS_GETNET_PROTOS       /*config-skip*/
-
-/* HAS_GETPROTO_PROTOS:
- *     This symbol, if defined, indicates that <netdb.h> includes
- *     prototypes for getprotoent(), getprotobyname(), and
- *     getprotobyaddr().  Otherwise, it is up to the program to guess
- *     them.  See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define        HAS_GETPROTO_PROTOS     /*config-skip*/
-
-/* HAS_GETSERV_PROTOS:
- *     This symbol, if defined, indicates that <netdb.h> includes
- *     prototypes for getservent(), getservbyname(), and
- *     getservbyaddr().  Otherwise, it is up to the program to guess
- *     them.  See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define        HAS_GETSERV_PROTOS      /*config-skip*/
-
-#else /* VMS_DO_SOCKETS */
-
-#undef HAS_SOCKET                              /*config-skip*/
-#undef HAS_SOCKETPAIR                  /*config-skip*/
-#undef HAS_GETHOSTENT                  /*config-skip*/
-#undef HAS_SETHOSTENT                  /*config-skip*/
-#undef I_NETINET_IN                            /*config-skip*/
-#undef I_NETDB                                 /*config-skip*/
-#undef I_NET_ERRNO                             /*config-skip*/
-#undef HAS_SELECT                              /*config-skip*/
-#undef HAS_GETHOSTBYADDR               /*config-skip*/
-#undef HAS_GETNETBYADDR                        /*config-skip*/
-#undef HAS_GETNETENT                   /*config-skip*/
-#undef HAS_SETNETENT                   /*config-skip*/
-#undef HAS_ENDNETENT                   /*config-skip*/
-#undef HAS_GETHOSTBYNAME               /*config-skip*/
-#undef HAS_GETNETBYNAME                        /*config-skip*/
-#undef HAS_GETPROTOBYNAME              /*config-skip*/
-#undef HAS_GETPROTOBYNUMBER            /*config-skip*/
-#undef HAS_GETSERVBYNAME               /*config-skip*/
-#undef HAS_GETSERVBYPORT               /*config-skip*/
-#undef HAS_ENDHOSTENT                  /*config-skip*/
-#undef HAS_GETPROTOENT                 /*config-skip*/
-#undef HAS_SETPROTOENT                 /*config-skip*/
-#undef HAS_ENDPROTOENT                 /*config-skip*/
-#undef HAS_GETSERVENT                  /*config-skip*/
-#undef HAS_SETSERVENT                  /*config-skip*/
-#undef HAS_ENDSERVENT                  /*config-skip*/
-#undef HAS_GETHOST_PROTOS              /*config-skip*/
-#undef HAS_GETNET_PROTOS               /*config-skip*/
-#undef HAS_GETPROTO_PROTOS             /*config-skip*/
-#undef HAS_GETSERV_PROTOS              /*config-skip*/
-
-#endif /* !VMS_DO_SOCKETS */
-
-#endif
diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template
new file mode 100644 (file)
index 0000000..e27fbeb
--- /dev/null
@@ -0,0 +1,1506 @@
+!GROK!THIS!
+# Descrip.MMS for perl5 on VMS
+# Last revised 27-Feb-1998 by Charles Bailey  bailey@genetics.upenn.edu
+#
+#: This file uses MMS syntax, and can be processed using DEC's MMS product,
+#: or the free MMK clone (available by ftp at ftp.spc.edu).  If you want to
+#: a Unix-style MAKE tool, run this file through mms2make.pl, which should
+#: be found in the same directory as this file.  (There should be a pre-made
+#: copy of Makefile for VAXC in this directory to allow you to build perl.)
+#:
+#: Lines beginning with "#:" will be removed by mms2make.pl when converting
+#: this file to MAKE syntax.
+#:
+#:     Usage:
+#: Building with VAX C, on system without DEC C installed or with VAX C default:
+#:     $ MMS
+#: Building with VAX C, on system with DEC C installed as default C compiler:
+#:     $ MMS /MACRO=("cc=CC/VAXC")
+#: Building with DEC C, on system without VAX C installed or with DEC C default:
+#:     $ MMS /MACRO=("decc=1")
+#: Building with DEC C, on system with VAX C installed as default C compiler:
+#:     $ MMS /MACRO=("decc=1","cc=CC/DECC")
+#: Building with GNU C
+#:     $ MMS /MACRO=("gnuc=1")
+#: To each of the above, add /Macro="__AXP__=1" if building on an AXP,
+#:                           /Macro="__DEBUG__=1" to build a debug version
+#:                           (i.e. VMS debugger, not perl -D), and
+#:                           /Macro="SOCKETSHR_SOCKETS=1" to include
+#:                           SOCKETSHR socket support.
+#:                           /Macro="DECC_SOCKETS=1" to include UCX (or
+#:                           compatible) socket support
+#:                          /Macro="OLDTHREADED=1" to compile with the old
+#:                          pthreads API (VMS version 6.2 and previous)
+#:                           /Macro="THREADED=1" to compile with full POSIX
+#:                           threads. (VMS 7.0 and above)
+#:                           /Macro="FAKETHREADED=1" to compile with the
+#:                           fake threads package
+#
+#      tidy      -- purge files generated by executing this file
+#      clean     -- remove all intermediate (e.g. object files, C files generated
+#                   during build) files generated by executing this file,
+#                   but leave `installable' files (images, library) intact
+#      realclean -- remove all files generated by executing this file
+#      cleansrc  -- `realclean' + purge *.c,*.h,descrip.mms
+#      crtl.opt  -- compiler-specific linker options file (made automatically)
+#
+
+#### Start of system configuration section. ####
+
+~DECC~
+~GNUC~
+~ARCH-TYPE~ = 1
+~THREAD~
+~SOCKET~
+
+#: >>>>> Architecture-specific options <<<<<
+.ifdef AXE
+# File type to use for object files
+O = .abj
+# File type to use for object libraries
+OLB = .alb
+# File type to use for executable images
+E = .axe
+.else
+# File type to use for object files
+O = .obj
+# File type to use for object libraries
+OLB = .olb
+# File type to use for executable images
+E = .exe
+.endif
+
+.ifdef __AXP__
+DECC = 1
+ARCH = VMS_AXP
+OBJVAL = $(O)
+.else
+ARCH = VMS_VAX
+OBJVAL = $(MMS$TARGET_NAME)$(O)
+.endif
+
+# Updated by fndvers.com -- do not edit by hand
+PERL_VERSION = 5_00$PATCHLEVEL$SUBVERSION
+
+.ifdef DECC_SOCKETS
+SOCKET=1
+.endif
+
+.ifdef SOCKETSHR_SOCKETS
+SOCKET=1
+.endif
+
+# If they defined SOCKET but didn't choose a stack, default to SOCKETSHR
+.ifdef DECC_SOCKETS
+.else
+.ifdef SOCKETSHR_SOCKETS
+.else
+.ifdef SOCKET
+SOCKETSHR_SOCKETS=1
+.endif
+.endif
+.endif
+
+
+ARCHDIR =  [.lib.$(ARCH).$(PERL_VERSION)]
+ARCHCORE = [.lib.$(ARCH).$(PERL_VERSION).CORE]
+ARCHAUTO = [.lib.$(ARCH).$(PERL_VERSION).auto]
+
+
+#: Backwards compatibility
+.ifdef DECC_PIPES_BROKEN
+PIPES_BROKEN = 1
+.endif
+
+.ifdef __DEBUG__
+NOX2P = 1
+.endif
+
+#: >>>>>Compiler-specific options <<<<<
+.ifdef GNUC
+.first
+       @ If F$TrnLnm("Sys").eqs."" Then Define/NoLog SYS GNU_CC_Include:[VMS]
+CC = gcc
+PIPES_BROKEN = 1
+# -fno-builtin avoids bug in gcc up to version 2.6.2 which can destroy
+# data when memcpy() is called on large (>64 kB) blocks of memory
+# (fixed in gcc 2.6.3)
+XTRACCFLAGS = /Obj=$(MMS$TARGET_NAME)$(O)/NoCase_Hack/Optimize=2
+DBGSPECFLAGS =
+XTRADEF = ,GNUC_ATTRIBUTE_CHECK
+XTRAOBJS =
+LIBS1 = GNU_CC:[000000]GCCLIB.OLB/Library
+LIBS2 = Sys$Share:VAXCRTL/Shareable
+POSIX =
+.else
+XTRAOBJS = 
+LIBS1 = $(XTRAOBJS)
+DBGSPECFLAGS = /Show=All
+.ifdef decc
+# Some versions of DECCRTL on AXP have a bug in chdir() which causes the change
+# to persist after the image exits, even when this was not requested, iff
+# SYSNAM is enabled.  This is fixed in CSC Patch # AXPACRT04_061, but turning
+# off SYSNAM for the MM[SK] subprocess doesn't hurt anything, so we do it
+# just in case.
+.first
+       @ Set Process/Privilege=(NoSYSNAM)
+       @ If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").nes."" Then Define/NoLog SYS DECC$System_Include
+.ifdef __AXP__
+       @ If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").eqs."" Then Define/NoLog SYS Sys$Library
+.else
+       @ If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").eqs."" Then Define/NoLog SYS DECC$Library_Include
+.endif
+
+LIBS2 = 
+XTRACCFLAGS = /Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=$(OBJVAL)
+XTRADEF =
+POSIX = POSIX
+.else # VAXC
+.first
+       @ If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("VAXC$Include").eqs."" Then Define/NoLog SYS Sys$Library
+       @ If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("VAXC$Include").nes."" Then Define/NoLog SYS VAXC$Include
+
+XTRACCFLAGS = /Include=[]/Object=$(O)
+XTRADEF =
+LIBS2 = Sys$Share:VAXCRTL/Shareable
+POSIX =
+.endif
+.endif
+
+
+#: >>>>> Configuration options <<<<<
+#: __DEBUG__: builds images with full VMS debugger support
+.ifdef __DEBUG__
+DBGCCFLAGS = /List/Debug/NoOpt$(DBGSPECFLAGS)
+DBGLINKFLAGS = /Trace/Debug/Map/Full/Cross
+DBG = DBG
+.else
+DBGCCFLAGS = /NoList
+DBGLINKFLAGS = /NoTrace/NoMap
+DBG = 
+.endif
+
+#: SOCKET: build in support for TCP/IP sockets
+#: By default, used SOCKETSHR library; see ReadMe.VMS
+#: for information on changing socket support
+.ifdef SOCKET
+.ifdef DECC_SOCKETS
+SOCKDEF = ,VMS_DO_SOCKETS,DECCRTL_SOCKETS
+SOCKLIB = 
+.else
+SOCKDEF = ,VMS_DO_SOCKETS
+SOCKLIB = SocketShr/Share
+.endif
+# N.B. the targets for $(SOCKC) and $(SOCKH) assume that the permanent
+# copies live in [.vms], and the `clean' target will delete copies of
+# these files in the current default directory.
+SOCKC = sockadapt.c
+SOCKH = sockadapt.h
+SOCKCLIS = ,$(SOCKC)
+SOCKHLIS = ,$(SOCKH)
+SOCKOBJ = ,sockadapt$(O)
+SOCKPM = [.lib]Socket.pm
+.else
+SOCKDEF =
+SOCKLIB =
+SOCKC =
+SOCKH =
+SOCKCLIS =
+SOCKHLIS =
+SOCKOBJ =
+SOCKPM =
+.endif
+
+THREAD = 
+
+.ifdef THREADED
+THREADDEF = 
+THREAD = THREAD
+.endif
+
+.ifdef OLDTHREADED
+THREADDEF = ,OLD_PTHREADS_API
+THREAD = THREAD
+LIBS2 = sys$share:cma$lib_shr/share,cma$rtl/share
+.ifdef __AXP__
+LIBS2 = $(LIBS2),sys$share:cma$open_lib_shr/share,cma$open_rtl/share
+.endif
+.endif
+
+.ifdef FAKETHREADED
+THREADDEF = ,FAKE_THREADS
+THREADH = fakethr.h
+acth = $(ARCHCORE)fakethr.h
+THREAD = THREAD
+.else
+THREADH =
+acth =
+.endif
+
+# C preprocessor manifest "DEBUGGING" ==> perl -D, not the VMS debugger
+CFLAGS = /Define=(DEBUGGING$(SOCKDEF)$(XTRADEF)$(THREADDEF))$(XTRACCFLAGS)$(DBGCCFLAGS)
+LINKFLAGS = $(DBGLINKFLAGS)
+
+MAKE = $(MMS)
+MAKEFILE = Descrip.MMS   # this file
+NOOP = continue
+
+# Macros to invoke a copy of miniperl during the build.  Targets which
+# are built using these macros should depend on $(MINIPERL_EXE)
+MINIPERL_EXE = Sys$Disk:[]miniperl$(E)
+MINIPERL = MCR $(MINIPERL_EXE) "-I[.lib]"
+XSUBPP = $(MINIPERL) [.lib.extutils]xsubpp -noprototypes
+# Macro to invoke a preexisting copy of Perl.  This is used to regenerate
+# some header files when rebuilding Perl, but premade versions are provided
+# in the distribution, so it's OK if this doesn't work; it's here to make
+# life easier for those who modify Perl and rebuild it.
+INSTPERL = perl
+
+# Space-separated list of "static" extensions to build into perlshr (case counts).
+MYEXT = DynaLoader
+# object files for these extensions; the trailing comma is required if
+# there are any object files specified
+# These must be built separately, or you must add rules below to build them
+myextobj = [.ext.dynaloader]dl_vms$(O),
+#: We include the Socket extension by default if we're building with socket
+#: support, since it's small and not really worth bothering to keep track
+#: of separately.
+.ifdef SOCKET
+EXT = $(MYEXT) Socket
+extobj = $(myextobj) [.ext.socket]socket$(O), 
+.else
+EXT = $(MYEXT)
+extobj = $(myextobj)
+.endif
+
+
+#### End of system configuration section. ####
+
+
+h1 = EXTERN.h, INTERN.h, XSUB.h, av.h, bytecode.h, byterun.h, config.h, cop.h, cv.h
+h2 = embed.h, form.h, gv.h, handy.h, hv.h, keywords.h, mg.h, op.h, thread.h
+h3 = opcode.h, patchlevel.h, perl.h, perly.h, pp.h, proto.h, regcomp.h
+h4 = regexp.h, scope.h, sv.h, vmsish.h, util.h, perlio.h, perlsdio.h
+h5 = embedvar.h, intrpvar.h, perlvars.h, thrdvar.h, atomic.h
+h = $(h1), $(h2), $(h3), $(h4), $(h5) $(SOCKHLIS) $(THREADH)
+
+c1 = av.c, scope.c, op.c, doop.c, doio.c, dump.c, hv.c, mg.c, universal.c, perlio.c
+c2 = perl.c, perly.c, pp.c, pp_hot.c, pp_ctl.c, pp_sys.c, regcomp.c, regexec.c
+c3 = gv.c, sv.c, taint.c, toke.c, util.c, deb.c, run.c, globals.c, vms.c, byterun.c $(SOCKCLIS)
+
+c = $(c1), $(c2), $(c3), miniperlmain.c, perlmain.c, byteperl.c
+
+obj1 = perl$(O), gv$(O), toke$(O), perly$(O), op$(O), regcomp$(O), dump$(O), util$(O), mg$(O), perlio$(O)
+obj2 = hv$(O), av$(O), run$(O), pp_hot$(O), sv$(O), pp$(O), scope$(O), pp_ctl$(O), pp_sys$(O)
+obj3 = doop$(O), doio$(O), regexec$(O), taint$(O), deb$(O), universal$(O), globals$(O), vms$(O), byterun$(O) $(SOCKOBJ)
+
+obj = $(obj1), $(obj2), $(obj3)
+
+ac1 = $(ARCHCORE)EXTERN.h $(ARCHCORE)INTERN.h  $(ARCHCORE)XSUB.h $(ARCHCORE)av.h
+ac2 = $(ARCHCORE)config.h $(ARCHCORE)cop.h $(ARCHCORE)cv.h $(ARCHCORE)embed.h
+ac3 = $(ARCHCORE)form.h $(ARCHCORE)gv.h $(ARCHCORE)handy.h $(ARCHCORE)hv.h
+ac4 = $(ARCHCORE)keywords.h $(ARCHCORE)mg.h $(ARCHCORE)op.h $(ARCHCORE)opcode.h
+ac5 = $(ARCHCORE)patchlevel.h $(ARCHCORE)perl.h $(ARCHCORE)perly.h $(ARCHCORE)thread.h
+ac6 = $(ARCHCORE)perldir.h $(ARCHCORE)perlenv.h $(ARCHCORE)perllio.h $(ARCHCORE)atomic.h
+ac7 = $(ARCHCORE)perlmem.h $(ARCHCORE)perlproc.h $(ARCHCORE)perlsock.h
+ac8 = $(ARCHCORE)pp.h $(ARCHCORE)proto.h $(ARCHCORE)regcomp.h $(ARCHCORE)perlio.h $(ARCHCORE)perlsdio.h
+ac9 = $(ARCHCORE)regexp.h $(ARCHCORE)scope.h $(ARCHCORE)sv.h $(ARCHCORE)util.h
+ac10 = $(ARCHCORE)embedvar.h $(ARCHCORE)intrpvar.h $(ARCHCORE)perlvars.h $(ARCHCORE)thrdvar.h
+ac11 = $(ARCHCORE)vmsish.h $(ARCHCORE)$(DBG)libperl$(OLB) $(ARCHCORE)perlshr_attr.opt
+ac12 = $(ARCHCORE)$(DBG)perlshr_bld.opt $(ARCHCORE)bytecode.h $(ARCHCORE)byterun.h
+.ifdef SOCKET
+acs = $(ARCHCORE)$(SOCKH)
+.else
+acs =
+.endif
+
+CRTL = []crtl.opt
+CRTLOPTS =,$(CRTL)/Options
+
+.SUFFIXES
+
+.ifdef LINK_ONLY
+.else
+.SUFFIXES $(O) .c .xs
+
+.xs.c :
+       $(XSUBPP) $(MMS$SOURCE) >$(MMS$TARGET)
+
+
+.c$(O) :
+       $(CC) $(CFLAGS) $(MMS$SOURCE)
+
+.xs$(O) :
+       $(XSUBPP) $(MMS$SOURCE) >$(MMS$SOURCE_NAME).c
+       $(CC) $(CFLAGS) $(MMS$SOURCE_NAME).c
+.endif
+
+# Modules which must be installed before we can build extensions
+LIBPREREQ = $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib]vmsish.pm [.lib.VMS]Filespec.pm [.lib.ExtUtils]XSSymSet.pm
+
+utils1 = [.lib.pod]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com [.utils]h2xs.com [.lib]perlbug.com
+utils2 = [.lib]splain.com [.utils]pl2pm.com
+
+.ifdef NOX2P
+all : base extras archcorefiles preplibrary perlpods
+       @ $(NOOP)
+.else
+all : base extras x2p archcorefiles preplibrary perlpods
+       @ $(NOOP)
+.endif
+base : miniperl perl
+       @ $(NOOP)
+#extras : Fcntl IO Opcode attrs Stdio DCLsym B $(POSIX) $(THREAD) SDBM_File libmods utils podxform
+extras : $extensions libmods utils podxform
+       @ $(NOOP)
+libmods : $(LIBPREREQ)
+       @ $(NOOP)
+utils : $(utils1) $(utils2)
+       @ $(NOOP)
+podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com
+       @ $(NOOP)
+x2p : [.x2p]a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com 
+       @ $(NOOP)
+
+pod1 = [.lib.pod]perl.pod [.lib.pod]perlapio.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod
+pod2 = [.lib.pod]perldata.pod [.lib.pod]perldebug.pod [.lib.pod]perldelta.pod [.lib.pod]perldiag.pod [.lib.pod]perldsc.pod
+pod3 = [.lib.pod]perlembed.pod [.lib.pod]perlform.pod [.lib.pod]perlfunc.pod [.lib.pod]perlguts.pod
+pod4 = [.lib.pod]perlipc.pod [.lib.pod]perllocale.pod [.lib.pod]perllol.pod [.lib.pod]perlmod.pod [.lib.pod]perlobj.pod
+pod5 = [.lib.pod]perlop.pod [.lib.pod]perlpod.pod [.lib.pod]perlre.pod [.lib.pod]perlref.pod [.lib.pod]perlrun.pod
+pod6 = [.lib.pod]perlsec.pod [.lib.pod]perlstyle.pod [.lib.pod]perlsub.pod [.lib.pod]perlsyn.pod
+pod7 = [.lib.pod]perltie.pod [.lib.pod]perltoc.pod [.lib.pod]perltoot.pod
+pod8 = [.lib.pod]perltrap.pod [.lib.pod]perlvar.pod [.lib.pod]perlxs.pod [.lib.pod]perlxstut.pod
+
+perlpods : $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) [.lib.pod]perlvms.pod
+       @ $(NOOP)
+
+archcorefiles :  $(ac1) $(ac2) $(ac3) $(ac4) $(ac5) $(ac6) $(ac7) $(ac8) $(ac9) $(ac10) $(ac11) $(ac12) $(acs) $(acth) $(ARCHAUTO)time.stamp
+       @ $(NOOP)
+
+miniperl : $(DBG)miniperl$(E)
+       @ Continue
+$(MINIPERL_EXE) :  miniperlmain$(O), $(DBG)libperl$(OLB) $(CRTL)
+       Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoFull/NoCross/Exe=$(MMS$TARGET) miniperlmain$(O), $(DBG)libperl$(OLB)/Library/Include=globals $(CRTLOPTS)
+$(DBG)miniperl$(E) :  miniperlmain$(O), $(DBG)libperl$(OLB) $(CRTL)
+       Link $(LINKFLAGS)/Trace/Exe=$(MMS$TARGET) miniperlmain$(O),$(DBG)libperl$(OLB)/Library/Include=globals  $(CRTLOPTS)
+
+$(DBG)libperl$(OLB) : $(obj)
+       @ If F$Search("$(MMS$TARGET)").eqs."" Then Library/Object/Create $(MMS$TARGET)
+       Library/Object/Replace $(MMS$TARGET) $(obj1)
+       Library/Object/Replace $(MMS$TARGET) $(obj2)
+       Library/Object/Replace $(MMS$TARGET) $(obj3)
+
+perlmain.c : miniperlmain.c $(MINIPERL_EXE) [.vms]writemain.pl
+       $(MINIPERL) [.VMS]Writemain.pl "$(EXT)"
+
+byteperl.c : [.ext.B]byteperl.c
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+.ifdef __DEBUG__
+# Link an extra perl that doesn't invoke the debugger
+perl : $(DBG)perl$(E) $(DBG)byteperl$(E)
+       Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)perl$(E) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
+       Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)byteperl$(E) byteperl$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
+.else
+perl : $(DBG)perl$(E) $(DBG)byteperl$(E)
+       @ Continue
+.endif
+
+$(DBG)perl$(E) : perlmain$(O), $(DBG)perlshr$(E), $(MINIPERL_EXE)
+       @ @[.vms]genopt "PerlShr.Opt/Write" "|" "''F$Environment("Default")'$(DBG)PerlShr$(E)/Share"
+       Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
+
+$(DBG)byteperl$(E) : byteperl$(O), $(DBG)perlshr$(E), $(MINIPERL_EXE)
+       @ @[.vms]genopt "PerlShr.Opt/Write" "|" "''F$Environment("Default")'$(DBG)PerlShr$(E)/Share"
+       Link $(LINKFLAGS)/Exe=$(MMS$TARGET) byteperl$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
+
+$(DBG)perlshr$(E) : $(DBG)libperl$(OLB) $(extobj) $(DBG)perlshr_xtras.ts
+       Link $(LINKFLAGS)/Share=$(MMS$TARGET) $(extobj) []$(DBG)perlshr_bld.opt/Option, perlshr_attr.opt/Option
+
+# The following files are built in one go by gen_shrfls.pl:
+#  perlshr_attr.opt, $(DBG)perlshr_bld.opt - VAX and AXP
+#  perlshr_gbl*.mar, perlshr_gbl*$(O) - VAX only
+# The song and dance with gen_shrfls.opt accomodates DCL's 255 character
+# line length limit.
+.ifdef PIPES_BROKEN
+# This is a backup target used only with older versions of the DECCRTL which
+# can't deal with pipes properly.  See ReadMe.VMS for details.
+$(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $(MINIPERL_EXE) $(MAKEFILE) $(CRTL)
+       $(CC) $(CFLAGS)/NoObject/NoList/PreProcess=perl.i perl.h
+       @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "~~NOCC~~perl.i~~$(CC)$(CFLAGS)" >gen_shrfls.opt
+       @ $(MINIPERL) -e "print join('|',@ARGV);" "$(O)" "$(DBG)" "$(OLB)" "$(EXT)" "$(CRTL)" >>gen_shrfls.opt
+       $(MINIPERL) [.vms]gen_shrfls.pl -f gen_shrfls.opt
+       @ Delete/NoLog/NoConfirm perl.i;, gen_shrfls.opt;
+       @ If F$Search("$(DBG)perlshr_xtras.ts").nes."" Then Delete/NoLog/NoConfirm $(DBG)perlshr_xtras.ts;*
+       @ Copy _NLA0: $(DBG)perlshr_xtras.ts
+.else
+$(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $(MINIPERL_EXE) $(MAKEFILE) $(CRTL)
+       @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "$(CC)$(CFLAGS)" >gen_shrfls.opt
+       @ $(MINIPERL) -e "print join('|',@ARGV);" "$(O)" "$(DBG)" "$(OLB)" "$(EXT)" "$(CRTL)" >>gen_shrfls.opt
+       $(MINIPERL) [.vms]gen_shrfls.pl -f gen_shrfls.opt
+       @ Delete/NoLog/NoConfirm gen_shrfls.opt;
+       @ If F$Search("$(DBG)perlshr_xtras.ts").nes."" Then Delete/NoLog/NoConfirm $(DBG)perlshr_xtras.ts;*
+       @ Copy _NLA0: $(DBG)perlshr_xtras.ts
+.endif
+
+$(ARCHDIR)config.pm : [.lib]config.pm
+       Create/Directory $(ARCHDIR)
+       Copy $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib]config.pm : config.h $(MINIPERL_EXE)
+       $(MINIPERL) ConfigPM.
+
+[.ext.dynaloader]dl_vms.c : $(ARCHDIR)Config.pm [.ext.dynaloader]dl_vms.xs [.lib.ExtUtils]XSSymSet.pm $(MINIPERL_EXE)
+       $(XSUBPP) $(MMS$SOURCE) >$(MMS$TARGET)
+
+[.ext.dynaloader]dl_vms$(O) : [.ext.dynaloader]dl_vms.c
+       $(CC) $(CFLAGS) /Include=([],[.ext.dynaloader])/Object=$(MMS$TARGET) $(MMS$SOURCE)
+
+[.lib]DynaLoader.pm : [.ext.dynaloader]dynaloader.pm
+       Copy/Log/NoConfirm [.ext.dynaloader]dynaloader.pm [.lib]DynaLoader.pm
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]DynaLoader.pm
+
+[.ext.dynaloader]dynaloader.pm : [.ext.dynaloader]dynaloader.pm_pl
+       $(MINIPERL) $(MMS$SOURCE)
+       @ Rename/Log dynaloader.pm [.ext.dynaloader]
+
+Opcode : [.lib]Opcode.pm [.lib]ops.pm [.lib]Safe.pm [.lib.auto.Opcode]Opcode$(E)
+       @ $(NOOP)
+
+[.lib]Opcode.pm : [.ext.Opcode]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.Opcode]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib]ops.pm : [.ext.Opcode]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.Opcode]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib]Safe.pm : [.ext.Opcode]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.Opcode]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.Opcode]Opcode$(E) : [.ext.Opcode]Descrip.MMS
+       @ Set Default [.ext.Opcode]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.Opcode]Descrip.MMS : [.ext.Opcode]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.Opcode]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+Fcntl : [.lib]Fcntl.pm [.lib.auto.Fcntl]Fcntl$(E)
+       @ $(NOOP)
+
+[.lib]Fcntl.pm : [.ext.Fcntl]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.Fcntl]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.Fcntl]Fcntl$(E) : [.ext.Fcntl]Descrip.MMS
+       @ Set Default [.ext.Fcntl]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.Fcntl]Descrip.MMS : [.ext.Fcntl]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.Fcntl]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+Stdio : [.lib.vms]Stdio.pm [.lib.auto.vms.Stdio]Stdio$(E) [.t.lib]vms_stdio.t
+       @ $(NOOP)
+
+[.lib.vms]Stdio.pm : [.vms.ext.stdio]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.vms.ext.Stdio]
+       $(MMS)
+       @ Set Default [---]
+
+[.lib.auto.vms.Stdio]Stdio$(E) : [.vms.ext.Stdio]Descrip.MMS
+       @ Set Default [.vms.ext.Stdio]
+       $(MMS)
+       @ Set Default [---]
+
+[.t.lib]vms_stdio.t : [.vms.ext.Stdio]test.pl
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.vms.ext.stdio]Descrip.MMS : [.vms.ext.Stdio]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[---.lib]" -e "chdir('[.vms.ext.Stdio]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[---.lib]" "INST_ARCHLIB=[---.lib]"
+
+DCLsym : [.lib.vms]DCLsym.pm [.lib.auto.vms.DCLsym]DCLsym$(E) [.t.lib]vms_dclsym.t
+       @ $(NOOP)
+
+[.lib.vms]DCLsym.pm : [.vms.ext.dclsym]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.vms.ext.DCLsym]
+       $(MMS)
+       @ Set Default [---]
+
+[.lib.auto.vms.DCLsym]DCLsym$(E) : [.vms.ext.DCLsym]Descrip.MMS
+       @ Set Default [.vms.ext.DCLsym]
+       $(MMS)
+       @ Set Default [---]
+
+[.t.lib]vms_dclsym.t : [.vms.ext.DCLsym]test.pl
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.vms.ext.DCLsym]Descrip.MMS : [.vms.ext.DCLsym]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[---.lib]" -e "chdir('[.vms.ext.DCLsym]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[---.lib]" "INST_ARCHLIB=[---.lib]"
+
+attrs : [.lib]attrs.pm [.lib.auto.attrs]attrs$(E)
+       @ $(NOOP)
+
+[.lib]attrs.pm : [.ext.attrs]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.attrs]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.attrs]attrs$(E) : [.ext.attrs]Descrip.MMS
+       @ Set Default [.ext.attrs]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.attrs]Descrip.MMS : [.ext.Fcntl]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.attrs]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+POSIX : [.lib]POSIX.pm [.lib.auto.POSIX]POSIX$(E)
+       @ $(NOOP)
+
+[.lib]POSIX.pm : [.ext.POSIX]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.POSIX]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.POSIX]POSIX$(E) : [.ext.POSIX]Descrip.MMS
+       @ Set Default [.ext.POSIX]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.POSIX]Descrip.MMS : [.ext.POSIX]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.POSIX]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+THREAD : [.lib]THREAD.pm [.lib.auto.THREAD]THREAD$(E)
+       @ $(NOOP)
+
+[.lib]THREAD.pm : [.ext.THREAD]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.THREAD]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.THREAD]THREAD$(E) : [.ext.THREAD]Descrip.MMS
+       @ Set Default [.ext.THREAD]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.THREAD]Descrip.MMS : [.ext.THREAD]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.THREAD]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+SDBM_File : [.lib]SDBM_File.pm [.lib.auto.SDBM_File]SDBM_File$(E) 
+       @ $(NOOP)
+
+[.lib]SDBM_File.pm : [.ext.SDBM_File]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ If F$Search("[.lib.auto]sdbm.dir").eqs."" Then Create/Directory [.lib.auto.sdbm]
+       @ Set Default [.ext.SDBM_File]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.SDBM_File]SDBM_File$(E) : [.ext.SDBM_File]Descrip.MMS
+       @ Set Default [.ext.SDBM_File]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.SDBM_File]Descrip.MMS : [.ext.SDBM_File]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.SDBM_File]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+IO : [.lib]IO.pm [.lib.IO]File.pm [.lib.IO]Handle.pm [.lib.IO]Pipe.pm [.lib.IO]Seekable.pm [.lib.IO]Socket.pm [.lib.auto.IO]IO$(E)
+       @ $(NOOP)
+
+[.lib]IO.pm : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.IO]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.IO]File.pm : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.IO]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.IO]Handle.pm : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.IO]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.IO]Pipe.pm : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.IO]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.IO]Seekable.pm : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.IO]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.IO]Socket.pm : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.IO]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.IO]IO$(E) : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.IO]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.IO]Descrip.MMS : [.ext.IO]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.IO]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+B : [.lib]B.pm [.lib]O.pm [.lib.B]Asmdata.pm [.lib.B]Assembler.pm [.lib.B]Bblock.pm [.lib.B]Bytecode.pm [.lib.B]C.pm [.lib.B]CC.pm [.lib.B]Debug.pm [.lib.B]Deparse.pm [.lib.B]Disassembler.pm [.lib.B]Lint.pm [.lib.B]Showlex.pm [.lib.B]Stackobj.pm [.lib.B]Terse.pm [.lib.B]Xref.pm [.lib.auto.B]B$(E)
+       @ $(NOOP)
+
+[.lib]B.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib]O.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Asmdata.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Assembler.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Bblock.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Bytecode.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]C.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]CC.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Debug.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Deparse.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Disassembler.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Lint.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Showlex.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Stackobj.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Terse.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Xref.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.B]B$(E) : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.B]Descrip.MMS : [.ext.B]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.B]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
+[.lib]vmsish.pm : [.vms.ext]vmsish.pm
+       Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.VMS]Filespec.pm : [.vms.ext]Filespec.pm
+       @ If F$Search("[.lib]VMS.Dir").eqs."" Then Create/Directory [.lib.VMS]
+       Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.ExtUtils]XSSymSet.pm : [.vms.ext]XSSymSet.pm
+       @ If F$Search("[.lib]VMS.Dir").eqs."" Then Create/Directory [.lib.VMS]
+       Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       $(MINIPERL) $(MMS$SOURCE)
+       Copy/Log [.utils]perldoc.com $(MMS$TARGET)
+
+[.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE) >$(MMS$TARGET)
+
+[.utils]c2ph.com : [.utils]c2ph.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+
+[.utils]h2ph.com : [.utils]h2ph.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+
+[.utils]h2xs.com : [.utils]h2xs.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+
+[.lib]perlbug.com : [.utils]perlbug.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+       Copy/Log [.utils]perlbug.com $(MMS$TARGET)
+
+[.utils]pl2pm.com : [.utils]pl2pm.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+
+[.lib]splain.com : [.utils]splain.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+       Copy/Log [.utils]splain.com $(MMS$TARGET)
+
+[.x2p]find2perl.com : [.x2p]find2perl.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+
+[.x2p]s2p.com : [.x2p]s2p.PL $(ARCHDIR)Config.pm
+       $(MINIPERL) $(MMS$SOURCE)
+
+# Rename catches problem with some DECC versions in which object file is
+# placed in current default dir, not same one as source file.
+[.x2p]$(DBG)a2p$(E) : [.x2p]a2p$(O), [.x2p]hash$(O), [.x2p]str$(O), [.x2p]util$(O), [.x2p]walk$(O)
+       @ If F$Search("hash$(O)").nes."" Then Rename/NoLog hash$(O),str$(O),util$(O),walk$(O) [.x2p]
+       Link $(LINKFLAGS) /Exe=$(MMS$TARGET) $(MMS$SOURCE_LIST) $(CRTLOPTS)
+
+# Accomodate buggy cpp in some version of DECC, which chokes on illegal
+# filespec "y.tab.c", and broken gcc cpp, which doesn't start #include ""
+# search in same dir as source file
+[.x2p]a2p$(O) : [.x2p]a2p.c $(MINIPERL_EXE)
+       $(MINIPERL) -pe "s/^#line\s+(\d+)\s+\Q""y.tab.c""/#line $1 ""y_tab.c""/;" $(MMS$SOURCE) >$(MMS$TARGET_NAME)_vms.c
+       $(CC) $(CFLAGS) /Object=$(MMS$TARGET)/Include=([.x2p],[]) $(MMS$TARGET_NAME)_vms.c
+       Delete/Log/NoConfirm $(MMS$TARGET_NAME)_vms.c;
+
+# gcc cpp broken -- doesn't look in directory of source file for #include ""
+.ifdef GNUC
+[.x2p]hash$(O) : [.x2p]hash.c
+       $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE)
+
+[.x2p]str$(O) : [.x2p]str.c
+       $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE)
+
+[.x2p]util$(O) : [.x2p]util.c
+       $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE)
+
+[.x2p]walk$(O) : [.x2p]walk.c
+       $(CC) $(CFLAGS) /Include=[.x2p] $(MMS$SOURCE)
+.endif
+
+[.lib.pod]pod2html.com : [.pod]pod2html.PL $(ARCHDIR)Config.pm
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       $(MINIPERL) $(MMS$SOURCE)
+       Copy/Log [.pod]pod2html.com $(MMS$TARGET)
+
+[.lib.pod]pod2latex.com : [.pod]pod2latex.PL $(ARCHDIR)Config.pm
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       $(MINIPERL) $(MMS$SOURCE)
+       Copy/Log [.pod]pod2latex.com $(MMS$TARGET)
+
+[.lib.pod]pod2man.com : [.pod]pod2man.PL $(ARCHDIR)Config.pm
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       $(MINIPERL) $(MMS$SOURCE)
+       Copy/Log [.pod]pod2man.com $(MMS$TARGET)
+
+[.lib.pod]pod2text.com : [.pod]pod2text.PL $(ARCHDIR)Config.pm
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       $(MINIPERL) $(MMS$SOURCE)
+       Copy/Log [.pod]pod2text.com $(MMS$TARGET)
+
+preplibrary : $(MINIPERL_EXE) $(LIBPREREQ) $(SOCKPM)
+       @ Write Sys$Output "Autosplitting Perl library . . ."
+       @ Create/Directory [.lib.auto]
+       @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]*.pm [.lib.*]*.pm
+
+[.lib.pod]perl.pod : [.pod]perl.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlapio.pod : [.pod]perlapio.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlbook.pod : [.pod]perlbook.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlbot.pod : [.pod]perlbot.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlcall.pod : [.pod]perlcall.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perldata.pod : [.pod]perldata.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perldebug.pod : [.pod]perldebug.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perldelta.pod : [.pod]perldelta.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perldiag.pod : [.pod]perldiag.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perldsc.pod : [.pod]perldsc.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlembed.pod : [.pod]perlembed.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlform.pod : [.pod]perlform.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlfunc.pod : [.pod]perlfunc.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlguts.pod : [.pod]perlguts.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perllocale.pod : [.pod]perllocale.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlipc.pod : [.pod]perlipc.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perllol.pod : [.pod]perllol.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlmod.pod : [.pod]perlmod.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlobj.pod : [.pod]perlobj.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlop.pod : [.pod]perlop.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlpod.pod : [.pod]perlpod.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlre.pod : [.pod]perlre.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlref.pod : [.pod]perlref.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlrun.pod : [.pod]perlrun.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlsec.pod : [.pod]perlsec.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlstyle.pod : [.pod]perlstyle.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlsub.pod : [.pod]perlsub.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlsyn.pod : [.pod]perlsyn.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perltie.pod : [.pod]perltie.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perltoc.pod : [.pod]perltoc.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perltoot.pod : [.pod]perltoot.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perltrap.pod : [.pod]perltrap.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlvar.pod : [.pod]perlvar.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlxs.pod : [.pod]perlxs.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlxstut.pod : [.pod]perlxstut.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+[.lib.pod]perlvms.pod : [.vms]perlvms.pod
+       @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+       @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+printconfig :
+        @ @[.vms]make_command $(MMS) $(MMSQUALIFIERS) $(MMSTARGETS)
+        @ @[.vms]myconfig "$(CC)" "$(CFLAGS)" "$(LINKFLAGS)" "$(LIBS1)" "$(LIBS2)" "$(SOCKLIB)" "$(EXT)" "$(DBG)"
+
+.ifdef SOCKET
+
+.ifdef LINK_ONLY
+.else
+[.ext.Socket]Socket$(O) : [.ext.Socket]Socket.c
+       $(CC) $(CFLAGS) /Object=$(MMS$TARGET) $(MMS$SOURCE)
+
+[.ext.Socket]Socket.c : [.ext.Socket]Socket.xs [.lib.ExtUtils]XSSymSet.pm $(MINIPERL_EXE)
+       $(XSUBPP) $(MMS$SOURCE) >$(MMS$TARGET)
+.endif # !LINK_ONLY
+
+vmsish.h : $(SOCKH)
+
+$(SOCKOBJ) : $(SOCKC) EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+
+$(SOCKC) : [.vms]$(SOCKC)
+       Copy/Log/NoConfirm [.vms]$(SOCKC) []$(SOCKC)
+
+$(SOCKH) : [.vms]$(SOCKH)
+       Copy/Log/NoConfirm [.vms]$(SOCKH) []$(SOCKH)
+
+[.lib]Socket.pm : [.ext.Socket]Socket.pm
+       Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
+.endif
+
+# The following three header files are generated automatically
+#      keywords.h :    keywords.pl
+#      opcode.h :      opcode.pl
+#      embed.h :       embed.pl global.sym interp.sym
+# The correct versions should be already supplied with the perl kit,
+# in case you don't have perl available.
+# To force them to run, type
+#      MMS regen_headers
+regen_headers :
+       $(INSTPERL) keywords.pl
+       $(INSTPERL) opcode.pl
+       $(INSTPERL) embed.pl
+
+# VMS uses modified perly.[ch] with tags for globaldefs if using DEC compiler
+perly.c : [.vms]perly_c.vms
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+perly.h : [.vms]perly_h.vms
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+# I now supply perly.c with the kits, so the following section is
+# commented out if you don't have byacc.
+# Altered for VMS by Charles Bailey  bailey@genetics.upenn.edu
+# perly.c:
+#      @ Write Sys$Output "Expect 80 shift/reduce and 62 reduce/reduce conflicts"
+#      \$(BYACC) -d perly.y
+# Has to be done by hand or by POSIX shell under VMS
+#      sh \$(shellflags) ./perly.fixer y.tab.c perly.c
+#      rename y.tab.h perly.h
+#      $(INSTPERL) [.vms]vms_yfix.pl perly.c perly.h [.vms]perly_c.vms [.vms]perly_h.vms
+
+.ifdef LINK_ONLY
+.else
+perly$(O) : perly.c, perly.h, $(h)
+       $(CC) $(CFLAGS) $(MMS$SOURCE)
+.endif
+
+[.t.lib]vmsfspec.t : [.vms.ext]filespec.t
+       Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
+
+[.t.lib]vmsish.t : [.vms.ext]vmsish.t
+       Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
+
+test : all [.t.lib]vmsfspec.t [.t.lib]vmsish.t
+       - @[.VMS]Test.Com "$(E)"
+
+install : 
+       $(MINIPERL) installperl
+
+archify : all
+       @ Write Sys$Output "Moving files to architecture-specific locations for $(ARCH)"
+       archroot = "$(ARCHAUTO)" - "]" + "...]"
+       Backup/Log/Verify [.lib.auto...]*.*;/Exclude=(*.al,*.ix) 'archroot'/New_Version
+       Delete/Log/NoConfirm [.lib.auto...]*.*;*/exclude=(*.al,*.ix,*.dir)
+       Delete/Log/NoConfirm [.lib]Config.pm;*
+       Copy/Log/NoConfirm *$(E);,[.x2p]a2p$(E); $(ARCHDIR)
+       Delete/Log/NoConfirm Perl*$(E);*,[.x2p]a2p$(E);*
+       @ Write Sys$Output "Architecture-specific setup completed."
+       @ Write Sys$Output "Before building for another architecture, be sure to"
+       @ Write Sys$Output "    1. $(MMS)$(MMSQUALIFIERS) clean"
+       @ Write Sys$Output "    2. Delete Miniperl$(E)"
+
+# CORE subset for MakeMaker, so we can build Perl without sources
+# Should move to VMS installperl when we get one
+$(ARCHCORE)EXTERN.h : EXTERN.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)INTERN.h : INTERN.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)XSUB.h : XSUB.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)bytecode.h : bytecode.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)byterun.h : byterun.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)atomic.h : atomic.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)av.h : av.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)config.h : config.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)cop.h : cop.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)cv.h : cv.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)embed.h : embed.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)embedvar.h : embedvar.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+.ifdef FAKETHREADED
+$(ARCHCORE)fakethr.h : fakethr.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+.endif
+$(ARCHCORE)form.h : form.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)gv.h : gv.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)handy.h : handy.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)hv.h : hv.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)intrpvar.h : intrpvar.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)keywords.h : keywords.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)mg.h : mg.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)op.h : op.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)opcode.h : opcode.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)patchlevel.h : patchlevel.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perl.h : perl.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perldir.h : perldir.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlenv.h : perlenv.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlio.h : perlio.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perllio.h : perllio.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlmem.h : perlmem.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlproc.h : perlproc.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlsdio.h : perlsdio.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlsock.h : perlsock.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlvars.h : perlvars.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perly.h : perly.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)pp.h : pp.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)proto.h : proto.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)regcomp.h : regcomp.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)regexp.h : regexp.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)scope.h : scope.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)sv.h : sv.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)thrdvar.h : thrdvar.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)thread.h : thread.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)util.h : util.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)vmsish.h : vmsish.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+.ifdef SOCKET
+$(ARCHCORE)$(SOCKH) : $(SOCKH)
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+.endif
+$(ARCHCORE)$(DBG)libperl$(OLB) : $(DBG)libperl$(OLB) $(DBG)perlshr_xtras.ts
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlshr_attr.opt : $(DBG)perlshr_xtras.ts
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log perlshr_attr.opt $(MMS$TARGET)
+$(ARCHCORE)$(DBG)perlshr_bld.opt : $(DBG)perlshr_xtras.ts
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(DBG)perlshr_bld.opt $(MMS$TARGET)
+$(ARCHAUTO)time.stamp :
+       @ If F$Search("$(ARCHDIR)auto.dir").eqs."" Then Create/Directory $(ARCHAUTO)
+       @ If F$Search("$(MMS$TARGET)").eqs."" Then Copy/NoConfirm _NLA0: $(MMS$TARGET)
+
+.ifdef LINK_ONLY
+.else
+# We need an action line here for broken older versions of MMS which
+# otherwise conclude that they should be compiling [.x2p]utils.c :-(
+util$(O) : util.c
+       $(CC) $(CFLAGS) util.c
+# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
+av$(O) : av.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+byterun$(O) : byterun.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+deb$(O) : deb.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+doio$(O) : doio.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+doop$(O) : doop.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+dump$(O) : dump.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+globals$(O) : globals.c INTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+gv$(O) : gv.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+hv$(O) : hv.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+malloc$(O) : malloc.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+mg$(O) : mg.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+miniperlmain$(O) : miniperlmain.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+op$(O) : op.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+perl$(O) : perl.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h patchlevel.h
+perlio$(O) : perlio.c config.h EXTERN.h perl.h bytecode.h byterun.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+perlmain$(O) : perlmain.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+byteperl$(O) : byteperl.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+perly$(O) : perly.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp$(O) : pp.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp_ctl$(O) : pp_ctl.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp_hot$(O) : pp_hot.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp_sys$(O) : pp_sys.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+regcomp$(O) : regcomp.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h INTERN.h regcomp.h
+regexec$(O) : regexec.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h regcomp.h
+run$(O) : run.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+scope$(O) : scope.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+sv$(O) : sv.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+taint$(O) : taint.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+toke$(O) : toke.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h keywords.h
+universal$(O) : universal.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h XSUB.h
+util$(O) : util.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+vms$(O) : vms.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h XSUB.h
+[.x2p]a2p$(O) : [.x2p]a2p.c [.x2p]a2py.c [.x2p]INTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h config.h handy.h
+[.x2p]hash$(O) : [.x2p]hash.c [.x2p]EXTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
+[.x2p]str$(O) : [.x2p]str.c [.x2p]EXTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
+[.x2p]util$(O) : [.x2p]util.c [.x2p]EXTERN.h [.x2p]INTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
+[.x2p]walk$(O) : [.x2p]walk.c [.x2p]EXTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
+# End of automatically generated make dependencies
+.endif # !LINK_ONLY
+
+vmsish.h : [.vms]vmsish.h
+       Copy/Log/NoConfirm [.vms]vmsish.h []vmsish.h
+
+vms.c : [.vms]vms.c
+       Copy/Log/Noconfirm [.vms]vms.c []
+
+$(CRTL) : $(MAKEFILE)
+       @ @[.vms]genopt "$(CRTL)/Write" "|" "$(LIBS1)|$(LIBS2)|$(SOCKLIB)"
+
+
+cleanlis :
+       - If F$Search("*.Lis").nes."" Then Delete/NoConfirm/Log *.Lis;*
+       - If F$Search("*.CPP").nes."" Then Delete/NoConfirm/Log *.CPP;*
+       - If F$Search("*.Map").nes."" Then Delete/NoConfirm/Log *.Map;*
+
+tidy : cleanlis
+       - If F$Search("[...]*.Opt;-1").nes."" Then Purge/NoConfirm/Log [...]*.Opt
+       - If F$Search("[...]*$(O);-1").nes."" Then Purge/NoConfirm/Log [...]*$(O)
+       - If F$Search("[...]*$(E);-1").nes."" Then Purge/NoConfirm/Log [...]*$(E)
+       - If F$Search("Config.H;-1").nes."" Then Purge/NoConfirm/Log Config.H
+       - If F$Search("Config.SH;-1").nes."" Then Purge/NoConfirm/Log Config.SH
+       - If F$Search("perly.c;-1").nes."" Then Purge/NoConfirm/Log perly.c
+       - If F$Search("perly.h;-1").nes."" Then Purge/NoConfirm/Log perly.h
+       - If F$Search("VMSish.H;-1").nes."" Then Purge/NoConfirm/Log VMSish.H
+       - If F$Search("VMS.C;-1")   .nes."" Then Purge/NoConfirm/Log VMS.C
+       - If F$Search("Perlmain.C;-1")   .nes."" Then Purge/NoConfirm/Log Perlmain.C
+       - If F$Search("byteperl.C;-1")   .nes."" Then Purge/NoConfirm/Log byteperl.C
+       - If F$Search("Perlshr_Gbl*.Mar;-1")   .nes."" Then Purge/NoConfirm/Log Perlshr_Gbl*.Mar
+       - If F$Search("[.Ext.DynaLoader]DL_VMS$(O);-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS$(O)
+       - If F$Search("[.Ext.DynaLoader]DL_VMS.C;-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS.C
+       - If F$Search("[.Ext.Socket]Socket.C;-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS.C
+       - If F$Search("[.Ext.Opcode...];-1").nes."" Then Purge/NoConfirm/Log [.Ext.Opcode]
+       - If F$Search("[.VMS.Ext...]*.C;-1").nes."" Then Purge/NoConfirm/Log [.VMS.Ext...]*.C
+       - If F$Search("[.VMS.Ext...]*$(O);-1").nes."" Then Purge/NoConfirm/Log [.VMS.Ext...]*$(O)
+       - If F$Search("[.Lib.Auto...]*.al;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Auto...]*.al
+       - If F$Search("[.Lib.Auto...]autosplit.ix;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Auto...]autosplit.ix
+       - If F$Search("[.Lib]DynaLoader.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]DynaLoader.pm
+       - If F$Search("[.Lib]Socket.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Socket.pm
+       - If F$Search("[.Lib]Config.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Config.pm
+       - If F$Search("$(ARCHDIR)Config.pm;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config.pm
+       - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm
+       - If F$Search("[.lib.ExtUtils]XSSymSet.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]XSSymSet.pm
+       - If F$Search("[.Lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.Lib.VMS]*.*
+       - If F$Search("[.Lib.Pod]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Pod]*.Pod
+       - If F$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.*
+       - If F$Search("[.lib]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib]*.com
+       - If F$Search("[.pod]*.com;-1").nes."" Then Purge/NoConfirm/Log [.pod]*.com
+       - If F$Search("[.utils]*.com;-1").nes."" Then Purge/NoConfirm/Log [.utils]*.com
+       - If F$Search("[.x2p]*.com;-1").nes."" Then Purge/NoConfirm/Log [.x2p]*.com
+       - If F$Search("[.lib.pod]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib.pod]*.com
+
+clean : tidy
+       Set Default [.ext.Fcntl]
+       - $(MMS) clean
+       Set Default [--]
+       Set Default [.ext.IO]
+       - $(MMS) clean
+       Set Default [--]
+       Set Default [.ext.Opcode]
+       - $(MMS) clean
+       Set Default [--]
+       Set Default [.ext.attrs]
+       - $(MMS) clean
+       Set Default [--]
+       Set Default [.ext.B]
+       - $(MMS) clean
+       Set Default [--]
+.ifdef THREAD
+       Set Default [.ext.Thread]
+       - $(MMS) realclean
+       Set Default [--]
+.endif
+.ifdef DECC
+       Set Default [.ext.POSIX]
+       - $(MMS) clean
+       Set Default [--]
+.endif
+       Set Default [.ext.SDBM_File]
+       - $(MMS) clean
+       Set Default [--]
+       Set Default [.vms.ext.Stdio]
+       - $(MMS) clean
+       Set Default [---]
+       Set Default [.vms.ext.DCLsym]
+       - $(MMS) clean
+       Set Default [---]
+       - If F$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*/Exclude=PerlShr_*.Opt
+       - If F$Search("[...]*$(O);*") .nes."" Then Delete/NoConfirm/Log [...]*$(O);*
+       - If F$Search("Config.H").nes."" Then Delete/NoConfirm/Log Config.H;*
+       - If F$Search("Config.SH").nes."" Then Delete/NoConfirm/Log Config.SH;*
+       - If F$Search(F$Parse("Sys$Disk:[]","$(SOCKH)")).nes."" Then Delete/NoConfirm/Log $(SOCKH);*
+       - If F$Search(F$Parse("Sys$Disk:[]","$(SOCKC)")).nes."" Then Delete/NoConfirm/Log $(SOCKC);*
+       - If F$Search("perly.c").nes."" Then Delete/NoConfirm/Log perly.c;*
+       - If F$Search("perly.h").nes."" Then Delete/NoConfirm/Log perly.h;*
+       - If F$Search("VMSish.H").nes."" Then Delete/NoConfirm/Log VMSish.H;*
+       - If F$Search("VMS.C")   .nes."" Then Delete/NoConfirm/Log VMS.C;*
+       - If F$Search("Perlmain.C")   .nes."" Then Delete/NoConfirm/Log Perlmain.C;*
+       - If F$Search("byteperl.C")   .nes."" Then Delete/NoConfirm/Log byteperl.C;*
+       - If F$Search("Perlshr_Gbl*.Mar")   .nes."" Then Delete/NoConfirm/Log Perlshr_Gbl*.Mar;*
+       - If F$Search("*.TS").nes."" Then Delete/NoConfirm/Log *.TS;*
+       - If F$Search("[.Ext.DynaLoader]DL_VMS$(O)").nes."" Then Delete/NoConfirm/Log [.Ext.DynaLoader]DL_VMS$(O);*
+       - If F$Search("[.Ext.DynaLoader]DL_VMS.C").nes."" Then Delete/NoConfirm/Log [.Ext.DynaLoader]DL_VMS.C;*
+       - If F$Search("[.Ext.Socket]Socket$(O)").nes."" Then Delete/NoConfirm/Log [.Ext.Socket]Socket$(O);*
+       - If F$Search("[.Ext.Socket]Socket.C").nes."" Then Delete/NoConfirm/Log [.Ext.Socket]Socket.C;*
+       - If F$Search("[.VMS.Ext...]*.C").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*.C;*
+       - If F$Search("[.VMS.Ext...]*$(O)").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*$(O);*
+       - If F$Search("[.pod]*.com").nes."" Then Delete/NoConfirm/Log [.pod]*.com;*
+
+realclean : clean
+       Set Default [.ext.Fcntl]
+       - $(MMS) realclean
+       Set Default [--]
+       Set Default [.ext.IO]
+       - $(MMS) realclean
+       Set Default [--]
+       Set Default [.ext.Opcode]
+       - $(MMS) realclean
+       Set Default [--]
+       Set Default [.ext.attrs]
+       - $(MMS) realclean
+       Set Default [--]
+       Set Default [.ext.B]
+       - $(MMS) realclean
+       Set Default [--]
+.ifdef THREAD
+       Set Default [.ext.Thread]
+       - $(MMS) realclean
+       Set Default [--]
+.endif
+.ifdef DECC
+       Set Default [.ext.POSIX]
+       - $(MMS) realclean
+       Set Default [--]
+.endif
+       Set Default [.ext.SDBM_File]
+       - $(MMS) realclean
+       Set Default [--]
+       Set Default [.vms.ext.Stdio]
+       - $(MMS) clean
+       Set Default [---]
+       Set Default [.vms.ext.DCLsym]
+       - $(MMS) clean
+       Set Default [---]
+       - If F$Search("*$(OLB)").nes."" Then Delete/NoConfirm/Log *$(OLB);*
+       - If F$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*
+       - If F$Search("descrip.mms").nes."" Then Delete/NoConfirm/Log descrip.mms;*
+       - $(MINIPERL) -e "use File::Path; rmtree(['lib/auto','lib/VMS','lib/$(ARCH)'],1,0);"
+       - If F$Search("[.Lib]DynaLoader.pm").nes."" Then Delete/NoConfirm/Log [.Lib]DynaLoader.pm;*
+       - If F$Search("[.Lib]Socket.pm").nes."" Then Delete/NoConfirm/Log [.Lib]Socket.pm;*
+       - If F$Search("[.Lib]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib]Config.pm;*
+       - If F$Search("[.Lib]*.com").nes."" Then Delete/NoConfirm/Log [.Lib]*.com;*
+       - If F$Search("[.utils]*.com").nes."" Then Delete/NoConfirm/Log [.utils]*.com;*
+       - If F$Search("[.x2p]*.com").nes."" Then Delete/NoConfirm/Log [.x2p]*.com;*
+       - If F$Search("$(ARCHDIR)Config.pm").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config.pm;*
+       - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;*
+       - If F$Search("[.lib.ExtUtils]XSSymSet.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]XSSymSet.pm;*
+       - If F$Search("[.lib.pod]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pod]*.pod;*
+       - If F$Search("[.lib.pod]perldoc.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]perldoc.com;*
+       - If F$Search("[.lib.pod]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.com;*
+       - If F$Search("[.t.lib]vms*.t").nes."" Then Delete/NoConfirm/Log [.t.lib]vms*.t;*
+       - If F$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);*
+
+cleansrc : clean
+       - If F$Search("*.C;-1").nes."" Then Purge/NoConfirm/Log *.C
+       - If F$Search("*.H;-1").nes."" Then Purge/NoConfirm/Log *.H
+       - If F$Search("*.VMS;-1").nes."" Then Purge/NoConfirm/Log *.VMS
+       - If F$Search("[.VMS]$(MAKEFILE);-1").nes."" Then Purge/NoConfirm/Log [.VMS]$(MAKEFILE)
+       - If F$Search("[.VMS]*.C;-1").nes."" Then Purge/NoConfirm/Log [.VMS]*.C
+       - If F$Search("[.VMS]*.H;-1").nes."" Then Purge/NoConfirm/Log [.VMS]*.H
+       - If F$Search("[.VMS]*.Pl;-1").nes."" Then Purge/NoConfirm/Log [.VMS]*.Pl
+       - If F$Search("[.VMS]*.VMS;-1").nes."" Then Purge/NoConfirm/Log [.VMS]*.VMS
+       - If F$Search("[.VMS...]*.pm;-1").nes."" Then Purge/NoConfirm/Log [.VMS...]*.pm
+       - If F$Search("[.VMS...]*.xs;-1").nes."" Then Purge/NoConfirm/Log [.VMS...]*.xs
+!GROK!THIS!
diff --git a/vms/fndvers.com b/vms/fndvers.com
deleted file mode 100755 (executable)
index 30243d8..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-$! Brief DCL procedure to parse current Perl version out of
-$! patchlevel.h, and update the version token for ARCHLIB
-$! config.vms and descrip.mms if necessary.
-$ err = "Write Sys$Error"
-$
-$ If p1.eqs."" Then p1 = "patchlevel.h"
-$ If p2.eqs."" Then p2 = F$Parse("config.vms",p1,"[.vms]")
-$ If p3.eqs."" Then p3 = F$Parse("descrip.mms",p1,"[.vms]")
-$
-$ If F$Search(p1).eqs.""
-$ Then
-$   err "Can't find ''p1' - exiting"
-$   Exit 98962  ! RMS$_FNF
-$ EndIf
-$ plevel = ""
-$ sublevel = ""
-$ Open/Read patchlevel_h &p1
-$
-$ pread:
-$ Read/End_Of_File=pdone patchlevel_h line
-$ If F$Locate("#define PATCHLEVEL",line).ne.F$Length(line)
-$ Then
-$    plevel = F$Element(2," ",line)
-$    If F$Length(plevel).lt.3 Then -
-       plevel = F$Extract(0,3 - F$Length(plevel),"000") + plevel
-$ EndIf
-$ If F$Locate("#define SUBVERSION",line).ne.F$Length(line)
-$ Then
-$    sublevel = F$Element(2," ",line)
-$    If F$Length(sublevel).lt.2 Then -
-       sublevel = F$Extract(0,2 - F$Length(sublevel),"00") + sublevel
-$ EndIf
-$ If .not.(plevel.nes."" .and. sublevel.nes."") Then Goto pread
-$
-$ pdone:
-$ Close patchlevel_h
-$!
-$ If sublevel.eq.0 Then sublevel = ""
-$ perl_version = "5_" + plevel + sublevel
-$ If F$GetSyi("HW_MODEL").gt.1024
-$ Then
-$   arch = "AXP"
-$ Else
-$   arch = "VAX"
-$ EndIf
-$ If p2.eqs."#NOFILE#"
-$ Then
-$   Write Sys$Output "Perl version directory name is ""''perl_version'"""
-$   Exit
-$ EndIf
-$!
-$ token = """""""""/perl_root/lib/VMS_''arch'/''perl_version'"""""""""
-$ If sublevel.eqs."" Then token = token + "  "
-$ token = token + "  /**/"
-$ Call update_file "''p2'" "#define ARCHLIB_EXP" "''token'"
-$ teststs = $Status
-$ If .not.teststs Then Exit teststs
-$!
-$ If teststs.ne.1 ! current values in config.vms are appropriate
-$ Then
-$   token = """""""""VMS_''arch'""""""""  /**/"
-$   Call update_file "''p2'" "#define ARCHNAME" "''token'"
-$   teststs = $Status
-$   If .not.teststs Then Exit teststs
-$!
-$   token = """""""""/perl_root/lib/site_perl/VMS_''arch'""""""""  /**/"
-$   Call update_file "''p2'" "#define SITEARCH_EXP" "''token'"
-$   If .not.$Status Then Exit $Status
-$EndIf
-$!
-$ token = "''perl_version'"
-$ If sublevel.eqs."" Then token = token + "  "
-$ token = token + "#"
-$ Call update_file "''p3'" "PERL_VERSION =" "''token'"
-$ If .not.$Status Then Exit $Status
-$ If $Status.eq.3
-$ Then
-$   cmd = "MM[SK]"
-$   If F$Locate("MMS",p3).eqs."" Then cmd = "make"
-$   err "The PERL_VERSION macro was out of date in the file"
-$   err "    ''p3'"
-$   err "The file has been corrected, but you must restart the build process"
-$   err "by reinvoking ''cmd' to incorporate the new value."
-$   Exit 44  ! SS$_ABORT
-$ EndIf
-$!
-$ update_file: Subroutine
-$
-$ If F$Search(p1).nes.""
-$ Then
-$   Search/Exact/Output=_NLA0: 'p1' "''p2' ''p3'"
-$   If $Status.eq.%X08D78053  ! SEARCH$_NOMATCHES
-$   Then
-$     Open/Read/Write/Error=done  file &p1
-$
-$     nextline:
-$     Read/End_of_File=done file line
-$     If F$Locate(p2,line).ne.F$Length(line)
-$     Then
-$       Write/Update file "''p2' ''p3'"
-$       Goto done
-$     EndIf
-$     Goto nextline
-$
-$     done:
-$     Close file
-$     Exit 3  ! Unused success status
-$   EndIf
-$   Exit 1  ! SS$_NORMAL
-$ Else
-$   err "Can't find ''p1'"
-$   Exit 98962  ! RMS$_FNF
-$ EndIf
-$ EndSubroutine
diff --git a/vms/munchconfig.c b/vms/munchconfig.c
new file mode 100644 (file)
index 0000000..714cab7
--- /dev/null
@@ -0,0 +1,365 @@
+/* munchconfig.c
+
+   A very, very (very!) simple program to process a config_h.sh file on
+   non-unix systems.
+
+   usage:
+   munchconfig config.sh config_h.sh [foo=bar [baz=xyzzy [...]]] >config.h
+
+   which is to say, it takes as its firt parameter a config.sh (or
+   equivalent), as its second a config_h.sh (or equvalent), and a list of
+   optional tag=value pairs.
+
+   It spits the processed config.h out to STDOUT.
+
+   */
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+/* The failure code to exit with */
+#ifndef EXIT_FAILURE
+#ifdef VMS
+#define EXIT_FAILURE 0
+#else
+#define EXIT_FAILURE -1
+#endif
+#endif
+
+/* The biggest line we can read in from a file */
+#define LINEBUFFERSIZE 400
+#define NUMTILDESUBS 30
+#define NUMCONFIGSUBS 1000
+#define TOKENBUFFERSIZE 80
+
+typedef struct {
+  char Tag[TOKENBUFFERSIZE];
+  char Value[512];
+} Translate;
+
+void tilde_sub(char [], Translate [], int);
+
+int
+main(int argc, char *argv[])
+{
+  FILE *ConfigSH, *Config_H;
+  char LineBuffer[LINEBUFFERSIZE], *TempValue, *StartTilde, *EndTilde;
+  char SecondaryLineBuffer[LINEBUFFERSIZE];
+  char TokenBuffer[TOKENBUFFERSIZE];
+  int LineBufferLength, TempLength, DummyVariable, LineBufferLoop;
+  int TokenBufferLoop, ConfigSubLoop, GotIt;
+  Translate TildeSub[NUMTILDESUBS];    /* Holds the tilde (~FOO~) */
+                                       /* substitutions */
+  Translate ConfigSub[NUMCONFIGSUBS];  /* Holds the substitutions from */
+                                       /* config.sh */
+  int TildeSubCount = 0, ConfigSubCount = 0; /* # of tilde substitutions */
+                                             /* and config substitutions, */
+                                             /* respectively */
+  if (argc < 3) {
+    printf("Usage: munchconfig config.sh config_h.sh [foo=bar [baz=xyzzy [...]]]\n");
+    exit(EXIT_FAILURE);
+  }
+
+  
+  /* First, open the input files */
+  if (NULL == (ConfigSH = fopen(argv[1], "r"))) {
+    printf("Error %i trying to open config.sh file %s\n", errno, argv[1]);
+    exit(EXIT_FAILURE);
+  }
+  
+  if (NULL == (Config_H = fopen(argv[2], "r"))) {
+    printf("Error %i trying to open config_h.sh file %s\n", errno, argv[2]);
+    exit(EXIT_FAILURE);
+  }
+
+  /* Any tag/value pairs on the command line? */
+  if (argc > 3) {
+    int i;
+    char WorkString[80]; 
+    for (i=3; i < argc && argv[i]; i++) {
+      
+      /* Local copy */
+      strcpy(WorkString, argv[i]);
+      /* Stick a NULL over the = */
+      TempValue = strchr(WorkString, '=');
+      *TempValue++ = '\0';
+
+      /* Copy the tag and value into the holding array */
+      strcpy(TildeSub[TildeSubCount].Tag, WorkString);
+      strcpy(TildeSub[TildeSubCount].Value, TempValue);
+      TildeSubCount++;
+    }
+  }
+
+  /* Now read in the config.sh file. */
+  while(fgets(LineBuffer, LINEBUFFERSIZE - 1, ConfigSH)) {
+    /* Force a trailing null, just in case */
+    LineBuffer[LINEBUFFERSIZE - 1] = '\0';
+
+    LineBufferLength = strlen(LineBuffer);
+
+    /* Chop trailing control characters */
+    while((LineBufferLength > 0) && (LineBuffer[LineBufferLength-1] < ' ')) {
+      LineBuffer[LineBufferLength - 1] = '\0';
+      LineBufferLength--;
+    }
+
+    /* If it's empty, then try again */
+    if (!*LineBuffer)
+      continue;
+
+    /* If the line begins with a '#' or ' ', skip */
+    if ((LineBuffer[0] == ' ') || (LineBuffer[0] == '#'))
+      continue;
+
+    /* We've got something. Guess we need to actually handle it */
+    /* Do the tilde substitution */
+    tilde_sub(LineBuffer, TildeSub, TildeSubCount);
+
+    /* Stick a NULL over the = */
+    TempValue = strchr(LineBuffer, '=');
+    *TempValue++ = '\0';
+    /* And another over the leading ', which better be there */
+    *TempValue++ = '\0';
+    
+    /* Check to see if there's a trailing '. If not, add a newline to the */
+    /* buffer and grab another line. */
+    TempLength = strlen(TempValue);
+    while (TempValue[TempLength-1] != '\'') {
+      fgets(SecondaryLineBuffer, LINEBUFFERSIZE - 1, ConfigSH);
+      /* Force a trailing null, just in case */
+      SecondaryLineBuffer[LINEBUFFERSIZE - 1] = '\0';
+      /* Go substitute */
+      tilde_sub(SecondaryLineBuffer, TildeSub, TildeSubCount);
+      /* Tack a nweline on the end of our primary buffer */
+      strcat(TempValue, "\n");
+      /* Concat the new line we just read */
+      strcat(TempValue, SecondaryLineBuffer);
+
+      /* Refigure the length */
+      TempLength = strlen(TempValue);
+      
+      /* Chop trailing control characters */
+      while((TempLength > 0) && (TempValue[TempLength-1] < ' ')) {
+        TempValue[TempLength - 1] = '\0';
+        TempLength--;
+      }
+    }
+    
+    /* And finally one over the trailing ' */
+    TempValue[TempLength-1] = '\0';
+
+    /* Is there even anything left? */
+    if(*TempValue) {
+      /* Copy the tag over */
+      strcpy(ConfigSub[ConfigSubCount].Tag, LineBuffer);
+      /* Copy the value over */
+      strcpy(ConfigSub[ConfigSubCount].Value, TempValue);
+
+      /* Up the count */
+      ConfigSubCount++;
+
+    }
+  }
+
+  /* Okay, we've read in all the substititions from our config.sh */
+  /* equivalent. Read in the config_h.sh equiv and start the substitution */
+  
+  /* First, eat all the lines until we get to one with !GROK!THIS! in it */
+  while(!strstr(fgets(LineBuffer, LINEBUFFERSIZE, Config_H),
+                "!GROK!THIS!")) {
+
+    /* Dummy statement to shut up any compiler that'll whine about an empty */
+    /* loop */
+    DummyVariable++;
+  }
+
+  /* Right, we've read all the lines through the first one with !GROK!THIS! */
+  /* in it. That gets us through the beginning stuff. Now start in earnest */
+  /* with our translations, which run until we get to another !GROK!THIS! */
+  while(!strstr(fgets(LineBuffer, LINEBUFFERSIZE, Config_H),
+                "!GROK!THIS!")) {
+    /* Force a trailing null, just in case */
+    LineBuffer[LINEBUFFERSIZE - 1] = '\0';
+    
+    /* Tilde Substitute */
+    tilde_sub(LineBuffer, TildeSub, TildeSubCount);
+
+    LineBufferLength = strlen(LineBuffer);
+    
+    /* Chop trailing control characters */
+    while((LineBufferLength > 0) && (LineBuffer[LineBufferLength-1] < ' ')) {
+      LineBuffer[LineBufferLength - 1] = '\0';
+      LineBufferLength--;
+    }
+
+    /* Right. Go looking for $s. */
+    for(LineBufferLoop = 0; LineBufferLoop < LineBufferLength;
+        LineBufferLoop++) {
+      /* Did we find one? */
+      if ('$' != LineBuffer[LineBufferLoop]) {
+        /* Nope, spit out the value */
+        putchar(LineBuffer[LineBufferLoop]);
+      } else {
+        /* Yes, we did. Is it escaped? */
+        if ((LineBufferLoop > 0) && ('\\' == LineBuffer[LineBufferLoop -
+                                                       1])) {
+          /* Yup. Spit it out */
+          putchar(LineBuffer[LineBufferLoop]);
+        } else {
+         /* Nope. Go grab us a token */
+          TokenBufferLoop = 0;
+          /* Advance to the next character in the input stream */
+          LineBufferLoop++;
+          while((LineBufferLoop < LineBufferLength) &&
+                ((isalnum(LineBuffer[LineBufferLoop]) || ('_' ==
+                                                          LineBuffer[LineBufferLoop])))) {
+            TokenBuffer[TokenBufferLoop] = LineBuffer[LineBufferLoop];
+            LineBufferLoop++;
+            TokenBufferLoop++;
+          }
+
+          /* Trailing null on the token buffer */
+          TokenBuffer[TokenBufferLoop] = '\0';
+
+          /* Back the line buffer pointer up one */
+          LineBufferLoop--;
+          
+          /* Right, we're done grabbing a token. Check to make sure we got */
+          /* something */
+          if (TokenBufferLoop) {
+            /* Well, we do. Run through all the tokens we've got in the */
+            /* ConfigSub array and see if any match */
+            GotIt = 0;
+            for(ConfigSubLoop = 0; ConfigSubLoop < ConfigSubCount;
+                ConfigSubLoop++) {
+              if (!strcmp(TokenBuffer, ConfigSub[ConfigSubLoop].Tag)) {
+                GotIt = 1;
+                printf("%s", ConfigSub[ConfigSubLoop].Value);
+                break;
+              }
+            }
+
+            /* Did we find something? If not, spit out what was in our */
+            /* buffer */
+            if (!GotIt) {
+              printf("$%s", TokenBuffer);
+            }
+            
+          } else {
+            /* Just a bare $. Spit it out */
+            putchar('$');
+          }       
+        }
+      }
+    }
+    
+    /* We're all done. Spit out an EOL */
+    printf("\n");
+    
+    
+  }
+  
+  /* Close the files */
+  fclose(ConfigSH);
+  fclose(Config_H);
+}
+
+void
+tilde_sub(char LineBuffer[], Translate TildeSub[], int TildeSubCount)
+{
+  char TempBuffer[LINEBUFFERSIZE], TempTilde[TOKENBUFFERSIZE];
+  int TildeLoop, InTilde, CopiedBufferLength, TildeBufferLength, k, GotIt;
+  int TempLength;
+  InTilde = 0;
+  CopiedBufferLength = 0;
+  TildeBufferLength = 0;
+  TempLength = strlen(LineBuffer);
+
+  /* Grovel over our input looking for ~foo~ constructs */
+  for(TildeLoop = 0; TildeLoop < TempLength; TildeLoop++) {
+    /* Are we in a tilde? */
+    if (InTilde) {
+      /* Yup. Is the current character a tilde? */
+      if (LineBuffer[TildeLoop] == '~') {
+        /* Yup. That means we're ready to do a substitution */
+        InTilde = 0;
+        GotIt = 0;
+        /* Trailing null */
+        TempTilde[TildeBufferLength] = '\0';
+        for( k=0; k < TildeSubCount; k++) {
+          if (!strcmp(TildeSub[k].Tag, TempTilde)) {
+            GotIt = 1;
+            /* Tack on the trailing null to the main buffer */
+            TempBuffer[CopiedBufferLength] = '\0';
+            /* Copy the tilde substitution over */
+            strcat(TempBuffer, TildeSub[k].Value);
+            CopiedBufferLength = strlen(TempBuffer);
+          }
+        }
+        
+        /* Did we find anything? */
+        if (GotIt == 0) {
+          /* Guess not. Copy the whole thing out verbatim */
+          TempBuffer[CopiedBufferLength] = '\0';
+          TempBuffer[CopiedBufferLength++] = '~';
+          TempBuffer[CopiedBufferLength] = '\0';
+          strcat(TempBuffer, TempTilde);
+          strcat(TempBuffer, "~");
+          CopiedBufferLength = strlen(TempBuffer);
+        }
+        
+      } else {
+        /* 'Kay, not a tilde. Is it a word character? */
+        if (isalnum(LineBuffer[TildeLoop]) || (LineBuffer[TildeLoop] =
+                                              '-') ||
+            (LineBuffer[TildeLoop] == '-')) {
+          TempTilde[TildeBufferLength++] = LineBuffer[TildeLoop];
+        } else {
+          /* No, it's not a tilde character. For shame! We've got a */
+          /* bogus token. Copy a ~ into the output buffer, then append */
+          /* whatever we've got in our token buffer */
+          TempBuffer[CopiedBufferLength++] = '~';
+          TempBuffer[CopiedBufferLength] = '\0';
+          TempTilde[TildeBufferLength] = '\0';
+          strcat(TempBuffer, TempTilde);
+          CopiedBufferLength += TildeBufferLength;
+          InTilde = 0;
+        }
+      }
+    } else {
+      /* We're not in a tilde. Do we want to be? */
+      if (LineBuffer[TildeLoop] == '~') {
+        /* Guess so */
+        InTilde = 1;
+        TildeBufferLength = 0;
+      } else {
+        /* Nope. Copy the character to the output buffer */
+        TempBuffer[CopiedBufferLength++] = LineBuffer[TildeLoop];
+      }
+    }
+  }
+  
+  /* Out of the loop. First, double-check to see if there was anything */
+  /* pending. */
+  if (InTilde) {
+    /* bogus token. Copy a ~ into the output buffer, then append */
+    /* whatever we've got in our token buffer */
+    TempBuffer[CopiedBufferLength++] = '~';
+    TempBuffer[CopiedBufferLength] = '\0';
+    TempTilde[TildeBufferLength] = '\0';
+    strcat(TempBuffer, TempTilde);
+    CopiedBufferLength += TildeBufferLength;
+  } else {
+    /* Nope, nothing pensing. Tack on a \0 */
+    TempBuffer[CopiedBufferLength] = '\0';
+  }
+
+  /* Okay, we're done. Copy the temp buffer back into the line buffer */
+  strcpy(LineBuffer, TempBuffer);
+
+}
+
diff --git a/vms/subconfigure.com b/vms/subconfigure.com
new file mode 100644 (file)
index 0000000..50d178f
--- /dev/null
@@ -0,0 +1,2279 @@
+$! SUBCONFIGURE.COM - build a config.sh for VMS Perl.
+$! 
+$! This .COM file expects to be called by configure.com, and thus expects
+$! a few symbols in the environment. Notably:
+$!
+$!  One of: Using_Dec_C, Using_Vax_C, Using_Gnu_C set to "YES"
+$!  Dec_C_Version set to the Dec C version (defaults to 0 if not specified)
+$!  Has_Socketshr set to "T" if using socketshr
+$!  Has_Dec_C_Sockets set to "T" if using Dec C sockets
+$!  Use_Threads set to "T" if they're using threads
+$!  C_Compiler_Invoke is the command needed to invoke the C compiler
+$!
+$! Set Dec_C_Version to something
+$ WRITE_RESULT := "WRITE SYS$OUTPUT ""%CONFIG-I-RESULT "" + "
+$ Dec_C_Version := "''Dec_C_Version'"
+$ Dec_C_Version = Dec_C_Version + 0
+$ Vms_Ver := "''f$extract(1,3, f$getsyi(""version""))'"
+$ perl_extensions := "''extensions'"
+$ if "''Using_Dec_C'" .eqs. "Yes"
+$ THEN
+$   Checkcc := "''Mcc'/prefix=all"
+$ ELSE
+$   Checkcc := "''Mcc'"
+$ ENDIF
+$ cc_flags = ""
+$ if f$length(Mcc) .eq. 0 then Mcc := "cc"
+$! Some constant defaults.
+$
+$ hwname = f$getsyi("HW_NAME")
+$ myname = myhostname
+$ if "''myname'" .eqs. "" THEN myname = f$trnlnm("SYS$NODE")
+$ perl_package="''package'"
+$ perl_baserev = "''baserev'"
+$ cc_defines="DEBUGGING"
+$ IF ("''Has_Socketshr'".eqs."T") .or. ("''Has_Dec_C_Sockets'".eqs."T") THEN cc_defines = cc_defines + ",VMS_DO_SOCKETS"
+$ if ("''Has_Dec_C_Sockets'".eqs."T") then cc_defines = cc_defines + ",DECCRTL_SOCKETS"
+$! if ("''Use_Threads'".eqs."T")
+$! then 
+$!   cc_defines = cc_defines + ",MULTIPLICITY"
+$! endif
+$ perl_CONFIG="true"
+$ perl_i_netdb="undef"
+$ perl_d_gnulibc="undef"
+$ perl_cf_by="unknown"
+$ perl_ccdlflags=""
+$ perl_cccdlflags=""
+$ perl_mab=""
+$ perl_libpth="/sys$share /sys$library"
+$ perl_ld="Link"
+$ perl_lddlflags="/Share"
+$ perl_ranlib=""
+$ perl_ar=""
+$ perl_eunicefix=":"
+$ perl_hint="none"
+$ perl_hintfile=""
+$ perl_shrplib="define"
+$ perl_usemymalloc=mymalloc
+$ perl_usevfork="true"
+$ perl_useposix="false"
+$ perl_spitshell="write sys$output "
+$ perl_dlsrc="dl_vms.c"
+$ perl_man1ext="rno"
+$ perl_man3ext="rno"
+$ perl_prefix="perl_root"
+$ perl_binexp="''perl_prefix':[000000]"
+$ perl_builddir="''perl_prefix':[000000]"
+$ perl_installbin="''perl_prefix':[000000]"
+$ perl_installscript="''perl_prefix':[000000]"
+$ perl_installman1dir="''perl_prefix':[man.man1]"
+$ perl_installman3dir="''perl_prefix':[man.man3]"
+$ perl_installprivlib="''perl_prefix':[lib]"
+$ perl_installsitelib="''perl_prefix':[lib.site_perl]"
+$ perl_path_sep="|"
+$ perl_cc=Mcc
+$ perl_d_sockpair="undef"
+$ perl_i_neterrno="define"
+$ perl_ldflags="/NoTrace/NoMap"
+$ perl_d_lchown="undef"
+$ perl_d_union_semun="undef"
+$ perl_d_semctl_semun="undef"
+$ perl_d_semctl_semid_ds="undef"
+$ IF (sharedperl.EQS."Y")
+$ THEN
+$ perl_obj_ext=".abj"
+$ perl_so="axe"
+$ perl_dlext="axe"
+$ perl_exe_ext=".axe"
+$ perl_lib_ext=".alb"
+$ ELSE
+$ perl_obj_ext=".obj"
+$ perl_so="exe"
+$ perl_dlext="exe"
+$ perl_exe_ext=".exe"
+$ perl_lib_ext=".olb"
+$ENDIF
+$ perl_dlobj="dl_vms''perl_obj_ext'"
+$ perl_osname="VMS"
+$ perl_d_archlib="define"
+$ perl_d_bincompat3="undef"
+$ perl_cppstdin="''Perl_CC'/noobj/preprocess=sys$output sys$input"
+$ perl_cppminus=""
+$ perl_d_castneg="define"
+$ perl_castflags="0"
+$ perl_d_chsize="undef"
+$ perl_d_const="define"
+$ perl_d_crypt="define"
+$ perl_byteorder="1234"
+$ perl_full_csh=""
+$ perl_d_csh="undef"
+$ perl_d_dup2="define"
+$ perl_d_fchmod="undef"
+$ perl_d_fchown="undef"
+$ perl_d_fcntl="undef"
+$ perl_d_fgetpos="define"
+$ perl_d_flexfnam="define"
+$ perl_d_flock="undef"
+$ perl_d_fsetpos="define"
+$ perl_d_getgrps="undef"
+$ perl_d_setgrps="undef"
+$ perl_d_getprior="undef"
+$ perl_d_killpg="undef"
+$ perl_d_link="undef"
+$ perl_d_lstat="undef"
+$ perl_d_lockf="undef"
+$ perl_d_memcmp="define"
+$ perl_d_memcpy="define"
+$ perl_d_memmove="define"
+$ perl_d_memset="define"
+$ perl_d_mkdir="define"
+$ perl_d_msg="undef"
+$ perl_d_open3="define"
+$ perl_d_poll="undef"
+$ perl_d_readdir="define"
+$ perl_d_seekdir="define"
+$ perl_d_telldir="define"
+$ perl_d_rewinddir="define"
+$ perl_d_rename="define"
+$ perl_d_rmdir="define"
+$ perl_d_sem="undef"
+$ perl_d_setegid="undef"
+$ perl_d_seteuid="undef"
+$ perl_d_setprior="undef"
+$ perl_d_setregid="undef"
+$ perl_d_setresgid="undef"
+$ perl_d_setreuid="undef"
+$ perl_d_setresuid="undef"
+$ perl_d_setrgid="undef"
+$ perl_d_setruid="undef"
+$ perl_d_setsid="undef"
+$ perl_d_shm="undef"
+$ perl_d_shmatprototype="undef"
+$ perl_d_statblks="undef"
+$ perl_stdio_ptr="((*fp)->_ptr)"
+$ perl_stdio_cnt="((*fp)->_cnt)"
+$ perl_stdio_base="((*fp)->_base)"
+$ perl_stdio_bufsiz="((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base)"
+$ perl_d_strctcpy="define"
+$ perl_d_strerror="define"
+$ perl_d_syserrlst="undef"
+$ perl_d_strerrm="strerror((e),vaxc$errno)"
+$ perl_d_symlink="undef"
+$ perl_d_syscall="undef"
+$ perl_d_system="define"
+$ perl_timetype="time_t"
+$ perl_d_vfork="define"
+$ perl_signal_t="void"
+$ perl_d_volatile="define"
+$ perl_d_vprintf="define"
+$ perl_d_charvspr="undef"
+$ perl_d_waitpid="define"
+$ perl_i_dirent="undef"
+$ perl_d_dirnamlen="define"
+$ perl_direntrytype="struct dirent"
+$ perl_i_fcntl="undef"
+$ perl_i_grp="undef"
+$ perl_i_limits="define"
+$ perl_i_memory="undef"
+$ perl_i_ndbm="undef"
+$ perl_i_stdarg="define"
+$ perl_i_pwd="undef"
+$ perl_d_pwquota="undef"
+$ perl_d_pwage="undef"
+$ perl_d_pwchange="undef"
+$ perl_d_pwclass="undef"
+$ perl_d_pwexpire="undef"
+$ perl_d_pwcomment="define"
+$ perl_i_stddef="define"
+$ perl_i_stdlib="define"
+$ perl_i_string="define"
+$ perl_i_sysdir="undef"
+$ perl_i_sysfile="undef"
+$ perl_i_sysioctl="undef"
+$ perl_i_sysndir="undef"
+$ perl_i_sysresrc="undef"
+$ perl_i_sysselct="undef"
+$ perl_i_dbm="undef"
+$ perl_i_rpcsvcdbm="undef"
+$ perl_i_sfio="undef"
+$ perl_i_sysstat="define"
+$ perl_i_systimes="undef"
+$ perl_i_systypes="define"
+$ perl_i_sysun="undef"
+$ perl_i_syswait="undef"
+$ perl_i_termio="undef"
+$ perl_i_sgtty="undef"
+$ perl_i_termios="undef"
+$ perl_i_time="define"
+$ perl_i_systime="undef"
+$ perl_i_systimek="undef"
+$ perl_i_unistd="undef"
+$ perl_i_utime="undef"
+$ perl_i_varargs="undef"
+$ perl_i_vfork="undef"
+$ perl_prototype="define"
+$ perl_randbits="31"
+$ perl_stdchar="char"
+$ perl_d_unlink_all_versions="undef"
+$ perl_full_sed="_NLA0:"
+$ perl_bin="/''perl_prefix'/000000"
+$ perl_binexp="''perl_prefix':[000000]"
+$ perl_d_alarm="define"
+$ perl_d_casti32="define"
+$ perl_d_chown="define"
+$ perl_d_chroot="undef"
+$ perl_d_cuserid="define"
+$ perl_d_dbl_dig="define"
+$ perl_d_difftime="define"
+$ perl_d_fork="undef"
+$ perl_d_getlogin="define"
+$ perl_d_getppid="undef"
+$ perl_d_nice="define"
+$ perl_d_pause="define"
+$ perl_d_pipe="define"
+$ perl_d_readlink="undef"
+$ perl_d_setlinebuf="undef"
+$ perl_d_strchr="define"
+$ perl_d_strtod="define"
+$ perl_d_strtol="define"
+$ perl_d_strtoul="define"
+$ perl_d_tcgetpgrp="undef"
+$ perl_d_tcsetpgrp="undef"
+$ perl_d_times="define"
+$ perl_d_tzname="undef"
+$ perl_d_umask="define"
+$ perl_fpostype="fpos_t"
+$ perl_i_dlfcn="undef"
+$ perl_i_float="define"
+$ perl_i_math="define"
+$ perl_lseektype="int"
+$ perl_i_values="undef"
+$ perl_malloctype="void *"
+$ perl_freetype="void"
+$ if "''mymalloc'".eqs."Y"
+$ THEN
+$ perl_d_mymalloc="define"
+$ ELSE
+$ perl_d_mymalloc="undef"
+$ENDIF
+$ perl_sh="MCR"
+$ perl_modetype="unsigned int"
+$ perl_ssizetype="int"
+$ perl_o_nonblock=""
+$ perl_eagain=""
+$ perl_rd_nodata=""
+$ perl_d_eofnblk="undef"
+$ perl_d_oldarchlib="define"
+$ perl_privlibexp="''perl_prefix':[lib]"
+$ perl_privlib="''perl_prefix':[lib]"
+$ perl_sitelibexp="''perl_prefix':[lib.site_perl]"
+$ perl_sitelib="''perl_prefix':[lib.site_perl]"
+$ perl_sizetype="size_t"
+$ perl_i_sysparam="undef"
+$ perl_d_void_closedir="define"
+$ perl_d_dlerror="undef"
+$ perl_d_dlsymun="undef"
+$ perl_d_suidsafe="undef"
+$ perl_d_dosuid="undef"
+$ perl_d_inetaton="undef"
+$ perl_d_isascii="define"
+$ perl_d_mkfifo="undef"
+$ perl_d_safebcpy="undef"
+$ perl_d_safemcpy="define"
+$ perl_d_sanemcmp="define"
+$ perl_d_setpgrp="undef"
+$ perl_d_bsdsetpgrp="undef"
+$ perl_d_bsdpgrp="undef"
+$ perl_d_setpgid="undef"
+$ perl_d_setpgrp2="undef"
+$ perl_d_Gconvert="my_gconvert(x,n,t,b)"
+$ perl_d_getpgid="undef"
+$ perl_d_getpgrp="undef"
+$ perl_d_bsdgetpgrp="undef"
+$ perl_d_getpgrp2="undef"
+$ perl_d_sfio="undef"
+$ perl_usedl="define"
+$ perl_startperl=""
+$ perl_db_hashtype=""
+$ perl_db_prefixtype=""
+$ perl_useperlio="undef"
+$ perl_defvoidused="15"
+$ perl_voidflags="15"
+$ perl_d_eunice="undef"
+$ perl_d_pwgecos="define"
+$ IF ("''Use_Threads'".eqs."T").and.("''VMS_VER'".LES."6.2")
+$ THEN
+$ perl_libs="SYS$SHARE:CMA$LIB_SHR.EXE/SHARE SYS$SHARE:CMA$RTL.EXE/SHARE SYS$SHARE:CMA$OPEN_LIB_SHR.exe/SHARE SYS$SHARE:CMA$OPEN_RTL.exe/SHARE"
+$ ELSE
+$ perl_libs=""
+$ ENDIF
+$ IF ("''Using_Dec_C'".eqs."Yes")
+$ THEN
+$ perl_libc="(DECCRTL)"
+$ ELSE
+$ perl_libc=""
+$ ENDIF
+$ perl_PATCHLEVEL="''patchlevel'"
+$ perl_SUBVERSION="''subversion'"
+$ perl_pager="most"
+$!
+$!
+$! Now some that we build up
+$!
+$ LocalTime = f$time()
+$ perl_cf_time= f$extract(0, 3, f$cvtime(LocalTime,, "WEEKDAY")) + " " + - 
+                f$edit(f$cvtime(LocalTime, "ABSOLUTE", "MONTH"), "LOWERCASE") + -
+                " " + f$cvtime(LocalTime,, "DAY") + " " + f$cvtime(LocalTime,, "TIME") + -
+                " " + f$cvtime(LocalTime,, "YEAR")
+$ if f$getsyi("HW_MODEL").ge.1024
+$ THEN
+$ perl_arch="VMS_AXP"
+$ perl_archname="VMS_AXP"
+$ perl_alignbytes="8"
+$ ELSE
+$ perl_arch="VMS_VAX"
+$ perl_archname="VMS_VAX"
+$ perl_alignbytes="8"
+$ ENDIF
+$ perl_osvers=f$edit(osvers, "TRIM")
+$ LocalPerlVer = "5_" + Perl_PATCHLEVEL + perl_subversion
+$!
+$! Some that we need to invoke the compiler for
+$ OS := "open/write SOURCECHAN []temp.c"
+$ WS := "write SOURCECHAN"
+$ CS := "close SOURCECHAN"
+$ DS := "delete/nolog []temp.*;*"
+$ Needs_Opt := "No"
+$ if ("''using_vax_c'".eqs."Yes").or.("''using_gnu_c'".eqs."Yes")
+$ THEN
+$   open/write OPTCHAN []temp.opt
+$   IF ("''using_gnu_c'".eqs."Yes")
+$   THEN
+$     write OPTCHAN "Gnu_CC:[000000]gcclib.olb/library"
+$   endif
+$   write OPTCHAN "Sys$Share:VAXCRTL/Share"
+$   Close OPTCHAN
+$   Needs_Opt := "Yes"
+$ ENDIF
+$!
+$! Check for __STDC__
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "#ifdef __STDC__
+$ WS "printf(""42\n"");
+$ WS "#else
+$ WS "printf(""1\n"");
+$ WS "#endif
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   ON ERROR THEN CONTINUE
+$   ON WARNING THEN CONTINUE
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$   DEFINE SYS$ERROR TEMPOUT
+$   DEFINE SYS$OUTPUT TEMPOUT
+$   mcr []temp
+$   CLOSE TEMPOUT
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   OPEN/READ TEMPOUT [-.uu]tempout.lis
+$   READ TEMPOUT line
+$   CLOSE TEMPOUT
+$ 
+$ perl_cpp_stuff=line
+$ WRITE_RESULT "cpp_stuff is ''perl_cpp_stuff'"
+$!
+$! Check for double size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%i\n"", sizeof(double));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   ON ERROR THEN CONTINUE
+$   ON WARNING THEN CONTINUE
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$!   link temp
+$   OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   DEFINE SYS$ERROR TEMPOUT
+$   DEFINE SYS$OUTPUT TEMPOUT
+$   mcr []temp
+$   CLOSE TEMPOUT
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   OPEN/READ TEMPOUT [-.uu]tempout.lis
+$   READ TEMPOUT line
+$   CLOSE TEMPOUT
+$ 
+$ perl_doublesize=line
+$ WRITE_RESULT "doublesize is ''perl_doublesize'"
+$!
+$! Check for long double size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%i\n"", sizeof(long double));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   ON ERROR THEN CONTINUE
+$   ON WARNING THEN CONTINUE
+$   'Checkcc' temp
+$   teststatus = f$extract(9,1,$status)
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_longdblsize="0"
+$     perl_d_longdbl="undef"
+$   ELSE
+$     ON ERROR THEN CONTINUE
+$     ON WARNING THEN CONTINUE
+$     If (Needs_Opt.eqs."Yes")
+$     THEN
+$     link temp,temp/opt
+$     else
+$       link temp
+$     endif
+$     teststatus = f$extract(9,1,$status)
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$     if (teststatus.nes."1")
+$     THEN
+$       perl_longdblsize="0"
+$       perl_d_longdbl="undef"
+$     ELSE
+$       OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$       DEFINE SYS$ERROR TEMPOUT
+$       DEFINE SYS$OUTPUT TEMPOUT
+$       mcr []temp
+$       CLOSE TEMPOUT
+$       DEASSIGN SYS$OUTPUT
+$       DEASSIGN SYS$ERROR
+$       OPEN/READ TEMPOUT [-.uu]tempout.lis
+$       READ TEMPOUT line
+$       CLOSE TEMPOUT
+$ 
+$       perl_longdblsize=line
+$       perl_d_longdbl="define"
+$     ENDIF
+$   ENDIF
+$ WRITE_RESULT "longdblsize is ''perl_longdblsize'"
+$ WRITE_RESULT "d_longdbl is ''perl_d_longdbl'"
+$!
+$! Check for long long existance and size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%i\n"", sizeof(long long));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_longlongsize="0"
+$     perl_d_longlong="undef"
+$   ELSE
+$     OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$     DEFINE SYS$ERROR TEMPOUT
+$     DEFINE SYS$OUTPUT TEMPOUT
+$     mcr []temp
+$     CLOSE TEMPOUT
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$     OPEN/READ TEMPOUT [-.uu]tempout.lis
+$     READ TEMPOUT line
+$     CLOSE TEMPOUT
+$ 
+$     perl_longlongsize=line
+$     perl_d_longlong="define"
+$   ENDIF
+$ WRITE_RESULT "longlongsize is ''perl_longlongsize'"
+$ WRITE_RESULT "d_longlong is ''perl_d_longlong'"
+$!
+$! Check for int size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%i\n"", sizeof(int));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   DEFINE SYS$ERROR TEMPOUT
+$   DEFINE SYS$OUTPUT TEMPOUT
+$   mcr []temp
+$   CLOSE TEMPOUT
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   OPEN/READ TEMPOUT [-.uu]tempout.lis
+$   READ TEMPOUT line
+$   CLOSE TEMPOUT
+$ 
+$   perl_intsize=line
+$ WRITE_RESULT "intsize is ''perl_intsize'"
+$!
+$! Check for short size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%i\n"", sizeof(short));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   DEFINE SYS$ERROR TEMPOUT
+$   DEFINE SYS$OUTPUT TEMPOUT
+$   mcr []temp
+$   CLOSE TEMPOUT
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   OPEN/READ TEMPOUT [-.uu]tempout.lis
+$   READ TEMPOUT line
+$   CLOSE TEMPOUT
+$ 
+$   perl_shortsize=line
+$ WRITE_RESULT "shortsize is ''perl_shortsize'"
+$!
+$! Check for long size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%i\n"", sizeof(long));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   DEFINE SYS$ERROR TEMPOUT
+$   DEFINE SYS$OUTPUT TEMPOUT
+$   mcr []temp
+$   CLOSE TEMPOUT
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   OPEN/READ TEMPOUT [-.uu]tempout.lis
+$   READ TEMPOUT line
+$   CLOSE TEMPOUT
+$ 
+$   perl_longsize=line
+$ WRITE_RESULT "longsize is ''perl_longsize'"
+$!
+$! Check the prototype for getgid
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ WS "#include <unistd.h>
+$ WS "int main()
+$ WS "{"
+$ WS "gid_t foo;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$!   Okay, gid_t failed. Must be unsigned int
+$     perl_gidtype = "unsigned int"
+$   ELSE
+$     perl_gidtype = "gid_t"
+$   ENDIF
+$ WRITE_RESULT "Gid_t is ''perl_gidtype'"
+$!
+$! Check the prototype for select
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ WS "#include <unistd.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <time.h>
+$  WS "#include <socket.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "fd_set *foo;
+$ WS "int bar;
+$ WS "foo = NULL;
+$ WS "bar = select(2, foo, foo, foo, NULL);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$!   Okay, fd_set failed. Must be an int
+$     perl_selecttype = "int *"
+$   ELSE
+$     perl_selecttype="fd_set *"
+$   ENDIF
+$ ELSE
+$   ! No sockets, so stick in an int *
+$   perl_selecttype = "int *"
+$ ENDIF
+$ WRITE_RESULT "selectype is ''perl_selecttype'"
+$!
+$! Check for bzero
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <strings.h>
+$ WS "int main()
+$ WS "{"
+$ WS "char foo[10];
+$ WS "bzero(foo, 10);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   savedstatus = $status
+$   teststatus = f$extract(9,1,savedstatus)
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_bzero="undef"
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$   ELSE
+$     If (Needs_Opt.eqs."Yes")
+$     THEN
+$       link temp,temp/opt
+$     else
+$       link temp
+$     endif
+$     savedstatus = $status
+$     teststatus = f$extract(9,1,savedstatus)
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$     if (teststatus.nes."1")
+$     THEN
+$       perl_d_bzero="undef"
+$     ELSE
+$       perl_d_bzero="define"
+$     ENDIF
+$   ENDIF
+$ WRITE_RESULT "d_bzero is ''perl_d_bzero'"
+$!
+$! Check for bcopy
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <strings.h>
+$ WS "int main()
+$ WS "{"
+$ WS "char foo[10], bar[10];
+$ WS "bcopy(""foo"", bar, 3);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   savedstatus = $status
+$   teststatus = f$extract(9,1,savedstatus)
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_bcopy="undef"
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$   ELSE
+$     If (Needs_Opt.eqs."Yes")
+$     THEN
+$       link temp,temp/opt
+$     else
+$       link temp
+$     endif
+$     savedstatus = $status
+$     teststatus = f$extract(9,1,savedstatus)
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$     if (teststatus.nes."1")
+$     THEN
+$       perl_d_bcopy="undef"
+$     ELSE
+$       perl_d_bcopy="define"
+$     ENDIF
+$   ENDIF
+$ WRITE_RESULT "d_bcopy is ''perl_d_bcopy'"
+$!
+$! Check for mkstemp
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "mkstemp(""foo"");
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   savedstatus = $status
+$   teststatus = f$extract(9,1,savedstatus)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_mkstemp="undef"
+$   ELSE
+$     perl_d_mkstemp="define"
+$   ENDIF
+$ WRITE_RESULT "d_mkstemp is ''perl_d_mkstemp'"
+$!
+$! Check for setvbuf
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "FILE *foo;
+$ WS "char Buffer[99];
+$ WS "foo = fopen(""foo"", ""r"");
+$ WS "setvbuf(foo, Buffer, 0, 0);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_setvbuf="undef"
+$   ELSE
+$     perl_d_setvbuf="define"
+$   ENDIF
+$ WRITE_RESULT "d_setvbuf is ''perl_d_setvbuf'"
+$!
+$! Check for <netinet/in.h>
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "#include <netinet/in.h>"
+$ WS "int main()
+$ WS "{"
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_i_niin="undef"
+$   ELSE
+$     perl_i_niin="define"
+$   ENDIF
+$ ELSE
+$   perl_i_niin="undef"
+$ ENDIF
+$ WRITE_RESULT "i_niin is ''perl_i_niin'"
+$!
+$! Check for endhostent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "endhostent();
+$ WS "exit(0);
+
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_endhent="undef"
+$   ELSE
+$     perl_d_endhent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_endhent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_endhent is ''perl_d_endhent'"
+$!
+$! Check for endnetent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "endnetent();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_endnent="undef"
+$   ELSE
+$     perl_d_endnent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_endnent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_endnent is ''perl_d_endnent'"
+$!
+$! Check for endprotoent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "endprotoent();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_endpent="undef"
+$   ELSE
+$     perl_d_endpent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_endpent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_endpent is ''perl_d_endpent'"
+$!
+$! Check for endservent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "endservent();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_endsent="undef"
+$   ELSE
+$     perl_d_endsent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_endsent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_endsent is ''perl_d_endsent'"
+$!
+$! Check for sethostent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "sethostent(1);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_sethent="undef"
+$   ELSE
+$     perl_d_sethent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_sethent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_sethent is ''perl_d_sethent'"
+$!
+$! Check for setnetent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "setnetent(1);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_setnent="undef"
+$   ELSE
+$     perl_d_setnent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_setnent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_setnent is ''perl_d_setnent'"
+$!
+$! Check for setprotoent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "setprotoent(1);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_setpent="undef"
+$   ELSE
+$     perl_d_setpent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_setpent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_setpent is ''perl_d_setpent'"
+$!
+$! Check for setservent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "setservent(1);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_setsent="undef"
+$   ELSE
+$     perl_d_setsent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_setsent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_setsent is ''perl_d_setsent'"
+$!
+$! Check for gethostent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "gethostent();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_gethent="undef"
+$   ELSE
+$     perl_d_gethent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_gethent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_gethent is ''perl_d_gethent'"
+$!
+$! Check for getnetent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "getnetent();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_getnent="undef"
+$   ELSE
+$     perl_d_getnent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_getnent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_getnent is ''perl_d_getnent'"
+$!
+$! Check for getprotoent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "getprotoent();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_getpent="undef"
+$   ELSE
+$     perl_d_getpent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_getpent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_getpent is ''perl_d_getpent'"
+$!
+$! Check for getservent
+$!
+$ if ("''Has_Dec_C_Sockets'".eqs."T").or.("''Has_Socketshr'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ if ("''Has_Socketshr'".eqs."T")
+$ THEN
+$  WS "#include <socketshr.h>"
+$ else
+$  WS "#include <netdb.h>
+$ endif
+$ WS "int main()
+$ WS "{"
+$ WS "getservent();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_getsent="undef"
+$   ELSE
+$     perl_d_getsent="define"
+$   ENDIF
+$ ELSE
+$ perl_d_getsent="undef"
+$ ENDIF
+$ WRITE_RESULT "d_getsent is ''perl_d_getsent'"
+$!
+$! Check for pthread_yield
+$!
+$ if ("''use_threads'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <pthread.h>
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "pthread_yield();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_pthread_yield="undef"
+$   ELSE
+$     perl_d_pthread_yield="define"
+$   ENDIF
+$ ELSE
+$   perl_d_pthread_yield="undef"
+$ ENDIF
+$ WRITE_RESULT "d_pthread_yield is ''perl_d_pthread_yield'"
+$!
+$! Check for sched_yield
+$!
+$ if ("''use_threads'".eqs."T")
+$ THEN
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <pthread.h>
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "sched_yield();
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   on error then continue
+$   on warning then continue
+$   'Checkcc' temp
+$   teststatus = f$extract(9,1,$status)
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   if (teststatus.nes."1")
+$   THEN
+$     perl_d_sched_yield="undef"
+$   ELSE
+$     perl_d_sched_yield="define"
+$   ENDIF
+$ ELSE
+$   perl_d_sched_yield="undef"
+$ ENDIF
+$ WRITE_RESULT "d_sched_yield is ''perl_d_sched_yield'"
+$!
+$! Check for generic pointer size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%i\n"", sizeof(void *));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$   DEFINE SYS$ERROR _NLA0:
+$   DEFINE SYS$OUTPUT _NLA0:
+$   ON ERROR THEN CONTINUE
+$   ON WARNING THEN CONTINUE
+$   'Checkcc' temp
+$   If (Needs_Opt.eqs."Yes")
+$   THEN
+$     link temp,temp/opt
+$   else
+$     link temp
+$   endif
+$   OPEN/WRITE TEMPOUT [-.uu]tempout.lis
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   DEFINE SYS$ERROR TEMPOUT
+$   DEFINE SYS$OUTPUT TEMPOUT
+$   mcr []temp
+$   CLOSE TEMPOUT
+$   DEASSIGN SYS$OUTPUT
+$   DEASSIGN SYS$ERROR
+$   OPEN/READ TEMPOUT [-.uu]tempout.lis
+$   READ TEMPOUT line
+$   CLOSE TEMPOUT
+$ 
+$ perl_ptrsize=line
+$ WRITE_RESULT "ptrsize is ''perl_ptrsize'"
+$!
+$ set nover
+$! Done with compiler checks. Clean up.
+$ if f$search("temp.c").nes."" then DELETE/NOLOG temp.c;*
+$ if f$search("temp.obj").nes."" then DELETE/NOLOG temp.obj;*
+$ if f$search("temp.exe").nes."" then DELETE/NOLOG temp.exe;*
+$ if f$search("temp.opt").nes."" then DELETE/NOLOG Temp.opt;*
+$!
+$!
+$! Some that are compiler or VMS version sensitive
+$!
+$! Gnu C stuff
+$ IF "''Using_Gnu_C'".EQS."Yes"
+$ THEN
+$   perl_d_attribut="define"
+$   perl_vms_cc_type="gcc"
+$ ELSE
+$   perl_d_attribut="undef"
+$ ENDIF
+$
+$! Dec C >= 5.2 and VMS ver >= 7.0
+$ IF ("''Using_Dec_C'".EQS."Yes").AND.(F$INTEGER(Dec_C_Version).GE.50200000).AND.("''VMS_VER'".GES."7.0")
+$ THEN
+$ perl_d_bcmp="define"
+$ perl_d_gettimeod="define"
+$ perl_d_uname="define"
+$ perl_d_sigaction="define"
+$ perl_d_truncate="define"
+$ perl_d_wait4="define"
+$ perl_d_index="define"
+$ perl_pidtype="pid_t"
+$ perl_sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2 SPARE18 SPARE19 CHLD CONT STOP TSTP TTIN TTOU DEBUG SPARE27 SPARE28 SPARE29 SPARE30 SPARE31 SPARE32 RTMIN RTMAX"",0"
+$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
+$ psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",""SPARE18"",""SPARE19"",""CHLD"",""CONT"",""STOP"",""TSTP"","
+$ psnwc3="""TTIN"",""TTOU"",""DEBUG"",""SPARE27"",""SPARE28"",""SPARE29"",""SPARE30"",""SPARE31"",""SPARE32"",""RTMIN"",""RTMAX"",0"
+$perl_sig_name_with_commas = psnwc1 + psnwc2 + psnwc3
+$ perl_sig_num="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,64,0"
+$ perl_sig_num_with_commas=perl_sig_num
+$ perl_uidtype="uid_t"
+$ perl_d_pathconf="define"
+$ perl_d_fpathconf="define"
+$ perl_d_sysconf="define"
+$ perl_d_sigsetjmp="define"
+$ ELSE
+$ perl_pidtype="unsigned int"
+$ perl_d_gettimeod="undef"
+$ perl_d_bcmp="undef"
+$ perl_d_uname="undef"
+$ perl_d_sigaction="undef"
+$ perl_d_truncate="undef"
+$ perl_d_wait4="undef"
+$ perl_d_index="undef"
+$ perl_sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2"",0"
+$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
+$ psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",0"
+$ perl_sig_name_with_commas = psnwc1 + psnwc2
+$ perl_sig_num="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
+$ perl_sig_num_with_commas=perl_sig_num
+$ perl_uidtype="unsigned int"
+$ perl_d_pathconf="undef"
+$ perl_d_fpathconf="undef"
+$ perl_d_sysconf="undef"
+$ perl_d_sigsetjmp="undef"
+$ ENDIF
+$!
+$! Dec C alone
+$ IF ("''Using_Dec_C'".EQS."Yes")
+$ THEN
+$ perl_d_mbstowcs="define"
+$ perl_d_mbtowc="define"
+$ perl_d_stdiobase="define"
+$ perl_d_stdio_ptr_lval="define"
+$ perl_d_stdio_cnt_lval="define"
+$ perl_d_stdstdio="define"
+$ perl_d_wcstombs="define"
+$ perl_d_mblen="define"
+$ perl_d_mktime="define"
+$ perl_d_strcoll="define"
+$ perl_d_strxfrm="define"
+$ perl_d_wctomb="define"
+$ perl_i_locale="define"
+$ perl_d_locconv="define"
+$ perl_d_setlocale="define"
+$ perl_vms_cc_type="decc"
+$ ELSE
+$ perl_d_mbstowcs="undef"
+$ perl_d_mbtowc="undef"
+$ perl_d_stdiobase="undef"
+$ perl_d_stdio_ptr_lval="undef"
+$ perl_d_stdio_cnt_lval="undef"
+$ perl_d_stdstdio="undef"
+$ perl_d_wcstombs="undef"
+$ perl_d_mblen="undef"
+$ perl_d_mktime="undef"
+$ perl_d_strcoll="undef"
+$ perl_d_strxfrm="undef"
+$ perl_d_wctomb="undef"
+$ perl_i_locale="undef"
+$ perl_d_locconv="undef"
+$ perl_d_setlocale="undef"
+$ ENDIF
+$!
+$! Vax C stuff
+$ if ("''Using_Vax_C'".EQS."Yes")
+$ THEN
+$ perl_vms_cc_type="vaxc"
+$ ENDIF
+$!
+$!
+$! Sockets?
+$ if ("''Has_Socketshr'".EQS."T").OR.("''Has_Dec_C_Sockets'".EQS."T")
+$ THEN
+$ perl_d_vms_do_sockets="define"
+$ perl_d_htonl="define"
+$ perl_d_socket="define"
+$ perl_d_select="define"
+$ perl_netdb_host_type="char *"
+$ perl_netdb_hlen_type="int"
+$ perl_netdb_name_type="char *"
+$ perl_netdb_net_type="long"
+$ perl_d_gethbyaddr="define"
+$ perl_d_gethbyname="define"
+$ perl_d_getnbyaddr="define"
+$ perl_d_getnbyname="define"
+$ perl_d_getpbynumber="define"
+$ perl_d_getpbyname="define"
+$ perl_d_getsbyport="define"
+$ perl_d_getsbyname="define"
+$ perl_d_gethostprotos="define"
+$ perl_d_getnetprotos="define"
+$ perl_d_getprotoprotos="define"
+$ perl_d_getservprotos="define"
+$ ELSE
+$ perl_d_vms_do_sockets="undef"
+$ perl_d_htonl="undef"
+$ perl_d_socket="undef"
+$ perl_d_select="undef"
+$ perl_netdb_host_type="char *"
+$ perl_netdb_hlen_type="int"
+$ perl_netdb_name_type="char *"
+$ perl_netdb_net_type="long"
+$ perl_d_gethbyaddr="undef"
+$ perl_d_gethbyname="undef"
+$ perl_d_getnbyaddr="undef"
+$ perl_d_getnbyname="undef"
+$ perl_d_getpbynumber="undef"
+$ perl_d_getpbyname="undef"
+$ perl_d_getsbyport="undef"
+$ perl_d_getsbyname="undef"
+$ perl_d_gethostprotos="undef"
+$ perl_d_getnetprotos="undef"
+$ perl_d_getprotoprotos="undef"
+$ perl_d_getservprotos="undef"
+$ ENDIF
+$! Threads
+$ if ("''use_threads'".eqs."T")
+$ THEN
+$   perl_usethreads="define"
+$   perl_d_pthreads_created_joinable="define"
+$   if ("''VMS_VER'".ges."7.0")
+$   THEN
+$     perl_d_oldpthreads="undef"
+$   ELSE
+$     perl_d_oldpthreads="define"
+$   ENDIF
+$ ELSE
+$   perl_d_oldpthreads="undef"
+$   perl_usethreads="undef"
+$   
+$   perl_d_pthreads_created_joinable="undef"
+$ ENDIF
+$! 
+$! 
+$! Finally the composite ones. All config
+$ perl_installarchlib="''perl_prefix':[lib.''perl_arch'.''localperlver']"
+$ perl_installsitearch="''perl_prefix':[lib.site_perl.''perl_arch']"
+$ perl_myhostname="''myhostname'"
+$ perl_mydomain="''mydomain'"
+$ perl_perladmin="''perladmin'"
+$ perl_cf_email="''cf_email'"
+$ perl_myuname:="VMS ''myname' ''f$edit(perl_osvers, "TRIM")' ''f$edit(hwname, "TRIM")'"
+$ perl_archlibexp="''perl_prefix':[lib.''perl_arch'.''localperlver']"
+$ perl_archlib="''perl_prefix':[lib.''perl_arch'.''lovalperlver']"
+$ perl_oldarchlibexp="''perl_prefix':[lib.''perl_arch']"
+$ perl_oldarchlib="''perl_prefix':[lib.''perl_arch']"
+$ perl_sitearchexp="''perl_prefix':[lib.site_perl.''perl_arch']"
+$ perl_sitearch="''perl_prefix':[lib.site_perl.''perl_arch']"
+$ if "''Using_Dec_C'" .eqs. "Yes"
+$ THEN
+$ perl_ccflags="/Define=(''cc_defines')/Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=''perl_obj_ext'/NoList''cc_flags'"
+$ ELSE
+$   IF "''Using_Vax_C'" .eqs. "Yes"
+$   THEN
+$     perl_ccflags="/Define=(''cc_defines')/Include=[]/Obj=''perl_obj_ext'/NoList''cc_flags'"
+$   ENDIF
+$ ENDIF
+$!
+$! Finally clean off any leading zeros from the patchlevel or subversion
+$ perl_patchlevel = perl_patchlevel + 0
+$ perl_subversion = perl_subversion + 0
+$!
+$! Okay, we've got everything configured. Now go write out a config.sh.
+$ open/write CONFIGSH [-]config.sh
+$ WC := "write CONFIGSH"
+$!
+$ WC "# This file generated by Configure.COM on a VMS system."
+$ WC "# Time: " + perl_cf_time
+$ WC ""
+$ WC "package='" + perl_package + "'"
+$ WC "CONFIG='" + perl_config + "'"
+$ WC "cf_time='" + perl_cf_time + "'"
+$ WC "cf_by='" + perl_cf_by+ "'"
+$ WC "cpp_stuff='" + perl_cpp_stuff + "'"
+$ WC "ccdlflags='" + perl_ccdlflags + "'"
+$ WC "cccdlflags='" + perl_cccdlflags + "'"
+$ WC "mab='" + perl_mab + "'"
+$ WC "libpth='" + perl_libpth + "'"
+$ WC "ld='" + perl_ld + "'"
+$ WC "lddlflags='" + perl_lddlflags + "'"
+$ WC "ranlib='" + perl_ranlib + "'"
+$ WC "ar='" + perl_ar + "'"
+$ WC "eunicefix='" + perl_eunicefix + "'"
+$ WC "hint='" + perl_hint +"'"
+$ WC "hintfile='" + perl_hintfile + "'"
+$ WC "shrplib='" + perl_shrplib + "'"
+$ WC "usemymalloc='" + perl_usemymalloc + "'"
+$ WC "usevfork='" + perl_usevfork + "'"
+$ WC "useposix='false'"
+$ WC "spitshell='write sys$output '"
+$ WC "dlsrc='dl_vms.c'"
+$ WC "binexp='" + perl_binexp + "'"
+$ WC "man1ext='" + perl_man1ext + "'"
+$ WC "man3ext='" + perl_man3ext + "'"
+$ WC "arch='" + perl_arch + "'"
+$ WC "archname='" + perl_archname + "'"
+$ WC "osvers='" + perl_osvers + "'"
+$ WC "prefix='" + perl_prefix + "'"
+$ WC "builddir='" + perl_builddir + "'"
+$ WC "installbin='" + perl_installbin + "'"
+$ WC "installscript='" + perl_installscript + "'"
+$ WC "installman1dir='" + perl_installman1dir + "'"
+$ WC "installman3dir='" + perl_installman3dir + "'"
+$ WC "installprivlib='" + perl_installprivlib + "'"
+$ WC "installarchlib='" + perl_installarchlib + "'"
+$ WC "installsitelib='" + perl_installsitelib + "'"
+$ WC "installsitearch='" + perl_installsitearch + "'"
+$ WC "path_sep='" + perl_path_sep + "'"
+$ WC "startperl='$ perl 'f$env(\""procedure\"")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'  !\n$ exit++ perl_ + ++$status != 0 and $exit = $status = undef;'"
+$ WC "vms_cc_type='" + perl_vms_cc_type + "'"
+$ WC "d_attribut='" + perl_d_attribut + "'"
+$ WC "cc='" + perl_cc + "'"
+$ WC "ccflags='" + perl_ccflags + "'"
+$ WC "d_vms_do_sockets='" + perl_d_vms_do_sockets + "'"
+$ WC "d_socket='" + perl_d_socket + "'"
+$ WC "d_sockpair='" + perl_d_sockpair + "'"
+$ WC "d_gethent='" + perl_d_gethent + "'"
+$ WC "d_getsent='" + perl_d_getsent + "'"
+$ WC "d_select='" + perl_d_select + "'"
+$ WC "i_niin='" + perl_i_niin + "'"
+$ WC "i_neterrno='" + perl_i_neterrno + "'"
+$ WC "d_stdstdio='" + perl_d_stdstdio + "'"
+$ WC "d_stdio_ptr_lval='" + perl_d_stdio_ptr_lval + "'"
+$ WC "d_stdio_cnt_lval='" + perl_d_stdio_cnt_lval + "'"
+$ WC "d_stdiobase='" + perl_d_stdiobase + "'"
+$ WC "d_locconv='" + perl_d_locconv + "'"
+$ WC "d_setlocale='" + perl_d_setlocale + "'"
+$ WC "i_locale='" + perl_i_locale + "'"
+$ WC "d_mbstowcs='" + perl_d_mbstowcs + "'"
+$ WC "d_mbtowc='" + perl_d_mbtowc + "'"
+$ WC "d_wcstombs='" + perl_d_wcstombs + "'"
+$ WC "d_wctomb='" + perl_d_wctomb + "'"
+$ WC "d_mblen='" + perl_d_mblen + "'"
+$ WC "d_mktime='" + perl_d_mktime + "'"
+$ WC "d_strcoll='" + perl_d_strcoll + "'"
+$ WC "d_strxfrm='" + perl_d_strxfrm  + "'"
+$ WC "ldflags='" + perl_ldflags + "'"
+$ WC "dlobj='" + perl_dlobj + "'"
+$ WC "obj_ext='" + perl_obj_ext + "'"
+$ WC "so='" + perl_so + "'"
+$ WC "dlext='" + perl_dlext + "'"
+$ WC "exe_ext='" + perl_exe_ext + "'"
+$ WC "lib_ext='" + perl_lib_ext + "'"
+$ WC "myhostname='" + perl_myhostname + "'"
+$ WC "mydomain='" + perl_mydomain + "'"
+$ WC "perladmin='" + perl_perladmin + "'"
+$ WC "cf_email='" + perl_cf_email + "'"
+$ WC "myuname='" + perl_myuname + "'"
+$ WC "alignbytes='" + perl_alignbytes + "'"
+$ WC "osname='" + perl_osname + "'"
+$ WC "d_archlib='" + perl_d_archlib + "'"
+$ WC "archlibexp='" + perl_archlibexp + "'"
+$ WC "archlib='" + perl_archlib + "'"
+$ WC "archname='" + perl_archname + "'"
+$ WC "d_bincompat3='" + perl_d_bincompat3 + "'"
+$ WC "cppstdin='" + perl_cppstdin + "'"
+$ WC "cppminus='" + perl_cppminus + "'"
+$ WC "d_bcmp='" + perl_d_bcmp + "'"
+$ WC "d_bcopy='" + perl_d_bcopy + "'"
+$ WC "d_bzero='" + perl_d_bzero + "'"
+$ WC "d_castneg='" + perl_d_castneg + "'"
+$ WC "castflags='" + perl_castflags + "'"
+$ WC "d_chsize='" + perl_d_chsize + "'"
+$ WC "d_const='" + perl_d_const + "'"
+$ WC "d_crypt='" + perl_d_crypt + "'"
+$ WC "byteorder='" + perl_byteorder + "'"
+$ WC "full_csh='" + perl_full_csh + "'"
+$ WC "d_csh='" + perl_d_csh + "'"
+$ WC "d_dup2='" + perl_d_dup2 + "'"
+$ WC "d_fchmod='" + perl_d_fchmod + "'"
+$ WC "d_fchown='" + perl_d_fchown + "'"
+$ WC "d_fcntl='" + perl_d_fcntl + "'"
+$ WC "d_fgetpos='" + perl_d_fgetpos + "'"
+$ WC "d_flexfnam='" + perl_d_flexfnam + "'"
+$ WC "d_flock='" + perl_d_flock + "'"
+$ WC "d_fsetpos='" + perl_d_fsetpos + "'"
+$ WC "d_gettimeod='" + perl_d_gettimeod + "'"
+$ WC "d_getgrps='" + perl_d_getgrps + "'"
+$ WC "d_setgrps='" + perl_d_setgrps + "'"
+$ WC "d_uname='" + perl_d_uname + "'"
+$ WC "d_getprior='" + perl_d_getprior + "'"
+$ WC "d_killpg='" + perl_d_killpg + "'"
+$ WC "d_link='" + perl_d_link + "'"
+$ WC "d_lstat='" + perl_d_lstat + "'"
+$ WC "d_lockf='" + perl_d_lockf + "'"
+$ WC "d_memcmp='" + perl_d_memcmp + "'"
+$ WC "d_memcpy='" + perl_d_memcpy + "'"
+$ WC "d_memmove='" + perl_d_memmove + "'"
+$ WC "d_memset='" + perl_d_memset + "'"
+$ WC "d_mkdir='" + perl_d_mkdir + "'"
+$ WC "d_msg='" + perl_d_msg + "'"
+$ WC "d_open3='" + perl_d_open3 + "'"
+$ WC "d_poll='" + perl_d_poll + "'"
+$ WC "d_readdir='" + perl_d_readdir + "'"
+$ WC "d_seekdir='" + perl_d_seekdir + "'"
+$ WC "d_telldir='" + perl_d_telldir + "'"
+$ WC "d_rewinddir='" + perl_d_rewinddir + "'"
+$ WC "d_rename='" + perl_d_rename + "'"
+$ WC "d_rmdir='" + perl_d_rmdir + "'"
+$ WC "d_sem='" + perl_d_sem + "'"
+$ WC "d_setegid='" + perl_d_setegid + "'"
+$ WC "d_seteuid='" + perl_d_seteuid + "'"
+$ WC "d_setprior='" + perl_d_setprior + "'"
+$ WC "d_setregid='" + perl_d_setregid + "'"
+$ WC "d_setresgid='" + perl_d_setresgid + "'"
+$ WC "d_setreuid='" + perl_d_setreuid + "'"
+$ WC "d_setresuid='" + perl_d_setresuid + "'"
+$ WC "d_setrgid='" + perl_d_setrgid + "'"
+$ WC "d_setruid='" + perl_d_setruid + "'"
+$ WC "d_setsid='" + perl_d_setsid + "'"
+$ WC "d_shm='" + perl_d_shm + "'"
+$ WC "d_shmatprototype='" + perl_d_shmatprototype + "'"
+$ WC "d_sigaction='" + perl_d_sigaction + "'"
+$ WC "d_statblks='" + perl_d_statblks + "'"
+$ WC "stdio_ptr='" + perl_stdio_ptr + "'"
+$ WC "stdio_cnt='" + perl_stdio_cnt + "'"
+$ WC "stdio_base='" + perl_stdio_base + "'"
+$ WC "stdio_bufsiz='" + perl_stdio_bufsiz + "'"
+$ WC "d_strctcpy='" + perl_d_strctcpy + "'"
+$ WC "d_strerror='" + perl_d_strerror + "'"
+$ WC "d_syserrlst='" + perl_d_syserrlst + "'"
+$ WC "d_strerrm='" + perl_d_strerrm + "'"
+$ WC "d_symlink='" + perl_d_symlink + "'"
+$ WC "d_syscall='" + perl_d_syscall + "'"
+$ WC "d_system='" + perl_d_system + "'"
+$ WC "timetype='" + perl_timetype + "'"
+$ WC "d_truncate='" + perl_d_truncate + "'"
+$ WC "d_vfork='" + perl_d_vfork + "'"
+$ WC "signal_t='" + perl_signal_t + "'"
+$ WC "d_volatile='" + perl_d_volatile + "'"
+$ WC "d_vprintf='" + perl_d_vprintf + "'"
+$ WC "d_charvspr='" + perl_d_charvspr + "'"
+$ WC "d_wait4='" + perl_d_wait4 + "'"
+$ WC "d_waitpid='" + perl_d_waitpid + "'"
+$ WC "i_dirent='" + perl_i_dirent + "'"
+$ WC "d_dirnamlen='" + perl_d_dirnamlen + "'"
+$ WC "direntrytype='" + perl_direntrytype + "'"
+$ WC "i_fcntl='" + perl_i_fcntl + "'"
+$ WC "i_grp='" + perl_i_grp + "'"
+$ WC "i_limits='" + perl_i_limits + "'"
+$ WC "i_memory='" + perl_i_memory + "'"
+$ WC "i_ndbm='" + perl_i_ndbm + "'"
+$ WC "i_stdarg='" + perl_i_stdarg + "'"
+$ WC "i_pwd='" + perl_i_pwd + "'"
+$ WC "d_pwquota='" + perl_d_pwquota + "'"
+$ WC "d_pwage='" + perl_d_pwage + "'"
+$ WC "d_pwchange='" + perl_d_pwchange + "'"
+$ WC "d_pwclass='" + perl_d_pwclass + "'"
+$ WC "d_pwexpire='" + perl_d_pwexpire + "'"
+$ WC "d_pwcomment='" + perl_d_pwcomment + "'"
+$ WC "i_stddef='" + perl_i_stddef + "'"
+$ WC "i_stdlib='" + perl_i_stdlib + "'"
+$ WC "i_string='" + perl_i_string + "'"
+$ WC "i_sysdir='" + perl_i_sysdir + "'"
+$ WC "i_sysfile='" + perl_i_sysfile + "'"
+$ WC "i_sysioctl='" + perl_i_sysioctl + "'"
+$ WC "i_sysndir='" + perl_i_sysndir + "'"
+$ WC "i_sysresrc='" + perl_i_sysresrc + "'"
+$ WC "i_sysselct='" + perl_i_sysselct + "'"
+$ WC "i_dbm='" + perl_i_dbm + "'"
+$ WC "i_rpcsvcdbm='" + perl_i_rpcsvcdbm + "'"
+$ WC "i_sfio='" + perl_i_sfio + "'"
+$ WC "i_sysstat='" + perl_i_sysstat + "'"
+$ WC "i_systimes='" + perl_i_systimes + "'"
+$ WC "i_systypes='" + perl_i_systypes + "'"
+$ WC "i_sysun='" + perl_i_sysun + "'"
+$ WC "i_syswait='" + perl_i_syswait + "'"
+$ WC "i_termio='" + perl_i_termio + "'"
+$ WC "i_sgtty='" + perl_i_sgtty + "'"
+$ WC "i_termios='" + perl_i_termios + "'"
+$ WC "i_time='" + perl_i_time + "'"
+$ WC "i_systime='" + perl_i_systime + "'"
+$ WC "i_systimek='" + perl_i_systimek + "'"
+$ WC "i_unistd='" + perl_i_unistd + "'"
+$ WC "i_utime='" + perl_i_utime + "'"
+$ WC "i_varargs='" + perl_i_varargs + "'"
+$ WC "i_vfork='" + perl_i_vfork + "'"
+$ WC "prototype='" + perl_prototype + "'"
+$ WC "randbits='" + perl_randbits +"'"
+$ WC "selecttype='" + perl_selecttype + "'"
+$ WC "stdchar='" + perl_stdchar + "'"
+$ WC "d_unlink_all_versions='" + perl_d_unlink_all_versions + "'"
+$ WC "full_sed='" + perl_full_sed + "'"
+$ WC "bin='" + perl_bin + "'"
+$ WC "binexp='" + perl_binexp + "'"
+$ WC "d_alarm='" + perl_d_alarm + "'"
+$ WC "d_casti32='" + perl_d_casti32 + "'"
+$ WC "d_chown='" + perl_d_chown + "'"
+$ WC "d_chroot='" + perl_d_chroot + "'"
+$ WC "d_cuserid='" + perl_d_cuserid + "'"
+$ WC "d_dbl_dig='" + perl_d_dbl_dig + "'"
+$ WC "d_difftime='" + perl_d_difftime + "'"
+$ WC "d_fork='" + perl_d_fork + "'"
+$ WC "d_getlogin='" + perl_d_getlogin + "'"
+$ WC "d_getppid='" + perl_d_getppid + "'"
+$ WC "d_htonl='" + perl_d_htonl + "'"
+$ WC "d_nice='" + perl_d_nice + "'"
+$ WC "d_pause='" + perl_d_pause + "'"
+$ WC "d_pipe='" + perl_d_pipe + "'"
+$ WC "d_readlink='" + perl_d_readlink + "'"
+$ WC "d_setlinebuf='" + perl_d_setlinebuf + "'"
+$ WC "d_strchr='" + perl_d_strchr + "'"
+$ WC "d_index='" + perl_d_index + "'"
+$ WC "d_strtod='" + perl_d_strtod + "'"
+$ WC "d_strtol='" + perl_d_strtol + "'"
+$ WC "d_strtoul='" + perl_d_strtoul + "'"
+$ WC "d_tcgetpgrp='" + perl_d_tcgetpgrp + "'"
+$ WC "d_tcsetpgrp='" + perl_d_tcsetpgrp + "'"
+$ WC "d_times='" + perl_d_times + "'"
+$ WC "d_tzname='" + perl_d_tzname + "'"
+$ WC "d_umask='" + perl_d_umask + "'"
+$ WC "fpostype='" + perl_fpostype + "'"
+$ WC "i_dlfcn='" + perl_i_dlfcn + "'"
+$ WC "i_float='" + perl_i_float + "'"
+$ WC "i_math='" + perl_i_math + "'"
+$ WC "intsize='" + perl_intsize + "'"
+$ WC "longsize='" + perl_longsize + "'"
+$ WC "shortsize='" + perl_shortsize + "'"
+$ WC "lseektype='" + perl_lseektype + "'"
+$ WC "i_values='" + perl_i_values + "'"
+$ WC "malloctype='" + perl_malloctype + "'"
+$ WC "freetype='" + perl_freetype + "'"
+$ WC "d_mymalloc='" + perl_d_mymalloc + "'"
+$ WC "sh='" + perl_sh + "'"
+$ WC "sig_name='" + perl_sig_name + "'"
+$ WC "sig_num='" + perl_sig_num + "'"
+$ tempsym = "sig_name_init='" + perl_sig_name_with_commas + "'"
+$ WC/symbol tempsym
+$ WC "modetype='" + perl_modetype + "'"
+$ WC "ssizetype='" + perl_ssizetype + "'"
+$ WC "o_nonblock='" + perl_o_nonblock + "'"
+$ WC "eagain='" + perl_eagain + "'"
+$ WC "rd_nodata='" + perl_rd_nodata + "'"
+$ WC "d_eofnblk='" + perl_d_eofnblk + "'"
+$ WC "d_oldarchlib='" + perl_d_oldarchlib + "'"
+$ WC "oldarchlibexp='" + perl_oldarchlibexp + "'"
+$ WC "oldarchlib='" + perl_oldarchlib + "'"
+$ WC "privlibexp='" + perl_privlibexp + "'"
+$ WC "privlib='" + perl_privlib + "'"
+$ WC "sitelibexp='" + perl_sitelibexp + "'"
+$ WC "sitelib='" + perl_sitelib + "'"
+$ WC "sitearchexp='" + perl_sitearchexp + "'"
+$ WC "sitearch='" + perl_sitearch + "'"
+$ WC "sizetype='" + perl_sizetype + "'"
+$ WC "i_sysparam='" + perl_i_sysparam + "'"
+$ WC "d_void_closedir='" + perl_d_void_closedir + "'"
+$ WC "d_dlerror='" + perl_d_dlerror + "'"
+$ WC "d_dlsymun='" + perl_d_dlsymun + "'"
+$ WC "d_suidsafe='" + perl_d_suidsafe + "'"
+$ WC "d_dosuid='" + perl_d_dosuid + "'"
+$ WC "d_inetaton='" + perl_d_inetaton + "'"
+$ WC "d_isascii='" + perl_d_isascii + "'"
+$ WC "d_mkfifo='" + perl_d_mkfifo + "'"
+$ WC "d_pathconf='" + perl_d_pathconf + "'"
+$ WC "d_fpathconf='" + perl_d_fpathconf + "'"
+$ WC "d_safebcpy='" + perl_d_safebcpy + "'"
+$ WC "d_safemcpy='" + perl_d_safemcpy + "'"
+$ WC "d_sanemcmp='" + perl_d_sanemcmp + "'"
+$ WC "d_setpgrp='" + perl_d_setpgrp + "'"
+$ WC "d_bsdsetpgrp='" + perl_d_bsdsetpgrp + "'"
+$ WC "d_bsdpgrp='" + perl_d_bsdpgrp + "'"
+$ WC "d_setpgid='" + perl_d_setpgid + "'"
+$ WC "d_setpgrp2='" + perl_d_setpgrp2 + "'"
+$ WC "d_sysconf='" + perl_d_sysconf + "'"
+$ WC "d_Gconvert='" + perl_d_Gconvert + "'"
+$ WC "d_getpgid='" + perl_d_getpgid + "'"
+$ WC "d_getpgrp='" + perl_d_getpgrp + "'"
+$ WC "d_bsdgetpgrp='" + perl_d_bsdgetpgrp + "'"
+$ WC "d_getpgrp2='" + perl_d_getpgrp2 + "'"
+$ WC "d_sfio='" + perl_d_sfio + "'"
+$ WC "d_sigsetjmp='" + perl_d_sigsetjmp + "'"
+$ WC "usedl='" + perl_usedl + "'"
+$ WC "startperl='" + perl_startperl + "'"
+$ WC "db_hashtype='" + perl_db_hashtype + "'"
+$ WC "db_prefixtype='" + perl_db_prefixtype + "'"
+$ WC "useperlio='" + perl_useperlio + "'"
+$ WC "defvoidused='" + perl_defvoidused + "'"
+$ WC "voidflags='" + perl_voidflags + "'"
+$ WC "d_eunice='" + perl_d_eunice + "'"
+$ WC "libs='" + perl_libs + "'"
+$ WC "libc='" + perl_libc + "'"
+$ tempstring = "PATCHLEVEL='" + "''perl_patchlevel'" + "'"
+$ WC tempstring
+$ tempstring = "SUBVERSION='" + "''perl_SUBVERSION'" + "'"
+$ WC tempstring
+$ WC "pager='" + perl_pager + "'"
+$ WC "uidtype='" + perl_uidtype + "'"
+$ WC "gidtype='" + perl_gidtype + "'"
+$ WC "usethreads='" + perl_usethreads + "'"
+$ WC "d_pthread_yield='" + perl_d_pthread_yield + "'"
+$ WC "d_pthreads_created_joinable='" + perl_d_pthreads_created_joinable + "'"
+$ WC "d_gnulibc='" + perl_d_gnulibc + "'"
+$ WC "i_netdb='" + perl_i_netdb + "'"
+$ WC "pidtype='" + perl_pidtype + "'"
+$ WC "netdb_host_type='" + perl_netdb_host_type + "'"
+$ WC "netdb_hlen_type='" + perl_netdb_hlen_type + "'"
+$ WC "netdb_name_type='" + perl_netdb_name_type + "'"
+$ WC "netdb_net_type='" + perl_netdb_net_type + "'"
+$ WC "baserev='" + perl_baserev + "'"
+$ WC "doublesize='" + perl_doublesize + "'"
+$ WC "ptrsize='" + perl_ptrsize + "'"
+$ WC "d_gethbyaddr='" + perl_d_gethbyaddr + "'"
+$ WC "d_gethbyname='" + perl_d_gethbyname + "'"
+$ WC "d_getnbyaddr='" + perl_d_getnbyaddr + "'"
+$ WC "d_getnbyname='" + perl_d_getnbyname + "'"
+$ WC "d_getpbynumber='" + perl_d_getpbynumber + "'"
+$ WC "d_getpbyname='" + perl_d_getpbyname + "'"
+$ WC "d_getsbyport='" + perl_d_getsbyport + "'"
+$ WC "d_getsbyname='" + perl_d_getsbyname + "'"
+$ WC "d_sethent='" + perl_d_sethent + "'"
+$ WC "d_oldpthreads='" + perl_d_oldpthreads + "'"
+$ WC "d_longdbl='" + perl_d_longdbl + "'"
+$ WC "longdblsize='" + perl_longdblsize + "'"
+$ WC "d_longlong='" + perl_d_longlong + "'"
+$ WC "longlongsize='" + perl_longlongsize + "'"
+$ WC "d_mkstemp='" + perl_d_mkstemp + "'"
+$ WC "d_setvbuf='" + perl_d_setvbuf + "'"
+$ WC "d_endhent='" + perl_d_endhent + "'"
+$ WC "d_endnent='" + perl_d_endsent + "'"
+$ WC "d_endpent='" + perl_d_endpent + "'"
+$ WC "d_endsent='" + perl_d_endsent + "'"
+$ WC "d_gethent='" + perl_d_gethent + "'"
+$ WC "d_getnent='" + perl_d_getsent + "'"
+$ WC "d_getpent='" + perl_d_getpent + "'"
+$ WC "d_getsent='" + perl_d_getsent + "'"
+$ WC "d_sethent='" + perl_d_sethent + "'"
+$ WC "d_setnent='" + perl_d_setsent + "'"
+$ WC "d_setpent='" + perl_d_setpent + "'"
+$ WC "d_setsent='" + perl_d_setsent + "'"
+$ WC "d_gethostprotos='" + perl_d_gethostprotos + "'"
+$ WC "d_getnetprotos='" + perl_d_getnetprotos + "'"
+$ WC "d_getprotoprotos='" + perl_d_getprotoprotos + "'"
+$ WC "d_getservprotos='" + perl_d_getservprotos + "'"
+$ WC "d_pwgecos='" + perl_d_pwgecos + "'"
+$ WC "d_sched_yield='" + perl_d_sched_yield + "'"
+$ WC "d_lchown='" + perl_d_lchown + "'"
+$ WC "d_union_semun='" + perl_d_union_semun + "'"
+$ WC "d_semctl_semun='" + perl_d_semctl_semun + "'"
+$ WC "d_semctl_semid_ds='" + perl_d_semctl_semid_ds + "'"
+$ WC "extensions='" + perl_extensions + "'"
+$!
+$ Close CONFIGSH
+$
+$! Okay, we've gotten here. Build munchconfig and run it
+$ 'Perl_CC' munchconfig
+$ If (Needs_Opt.eqs."Yes")
+$ THEN
+$   open/write OPTCHAN []munchconfig.opt
+$   IF ("''using_gnu_c'".eqs."Yes")
+$   THEN
+$     write OPTCHAN "Gnu_CC:[000000]gcclib.olb/library"
+$   endif
+$   write OPTCHAN "Sys$Share:VAXCRTL/Share"
+$   Close OPTCHAN
+$   link munchconfig,munchconfig/opt
+$   delete munchconfig.opt;*
+$ else
+$   link munchconfig
+$ endif
+$ WRITE_RESULT "Writing config.h"
+$ define/user sys$output [-]config.h
+$ mcr []munchconfig [-]config.sh [-]config_h.sh
+$ if "''Using_Dec_C'" .eqs."Yes"
+$ THEN
+$ DECC_REPLACE = "DECC=decc=1"
+$ ELSE
+$ DECC_REPLACE = "DECC=" 
+$ ENDIF
+$ if "''Using_Gnu_C'" .eqs."Yes"
+$ THEN
+$ GNUC_REPLACE = "GNUC=gnuc=1"
+$ ELSE
+$ GNUC_REPLACE = "GNUC=" 
+$ ENDIF
+$ if "''Has_Dec_C_Sockets'" .eqs."T"
+$ THEN
+$   SOCKET_REPLACE = "SOCKET=DECC_SOCKETS=1"
+$ ELSE
+$   if "''Has_Socketshr'" .eqs."T"
+$   THEN
+$     SOCKET_REPLACE = "SOCKET=SOCKETSHRSOCKETS=1"
+$   ELSE
+$     SOCKET_REPLACE = "SOCKET="
+$   ENDIF
+$ ENDIF
+$ IF ("''Use_Threads'".eqs."T")
+$ THEN
+$   if ("''VMS_VER'".LES."6.2")
+$   THEN
+$     THREAD_REPLACE = "THREAD=OLDTHREADED=1"
+$   ELSE
+$     THREAD_REPLACE = "THREAD=THREADED=1"
+$   ENDIF
+$ ENDIF
+$ if f$getsyi("HW_MODEL").ge.1024
+$ THEN
+$ ARCH_TYPE = "ARCH-TYPE=__AXP__"
+$ ELSE
+$ ARCH_TYPE = "ARCH-TYPE=__VAX__"
+$ ENDIF
+$ WRITE_RESULT "Writing DESCRIP.MMS"
+$!set ver
+$ define/user sys$output [-]descrip.mms
+$ mcr []munchconfig [-]config.sh descrip_mms.template "''DECC_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" "''SOCKET_REPLACE'" "''THREAD_REPLACE'" "''C_Compiler_Replace'"
+$! set nover
+$!
+$! Clean up after ourselves
+$ delete/nolog munchconfig.exe;*
+$ delete/nolog munchconfig.obj;*