Resync with mainline
[p5sagit/p5-mst-13.2.git] / configure.com
index 57fb5c5..27253b3 100644 (file)
@@ -1,43 +1,34 @@
 $ 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:
+$! want to cd into the tree and execute Configure:
 $!
 $! $ SET DEFAULT [USER.PERL5_00n]
-$! $ @[.vms]Configure 
+$! $ @Configure 
 $!
 $! or
 $!
 $! $ SET DEFAULT [USER.PERL5_00n]
-$! $ @[.vms]Configure "-des"
+$! $ @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 
+$! definitely read through the README.VMS file.
+$! Beyond that send email to vmsperl@perl.org
 $!
 $! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 $!
-$! 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
+$!  Dan Sugalski <sugalskd@ous.edu>
 $! 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)
+$! "Configure generated by metaconfig 3.0 PL60." by Peter Prymmer
+$! (a Bourne sh[ell] script for configuring the installation of perl 
+$! on non-VMS systems) in the perl5.002|3 epoch (spring/summer 1996)
 $! with much valuable help from Charles Bailey & 
 $! the whole VMSPerl crew.
+$! Extended and messed about with by Dan Sugalski
 $!
 $! SET NOVERIFY
 $ sav_ver = F$VERIFY(sav_ver)
@@ -48,10 +39,19 @@ $ cat  = "type"
 $ gcc_symbol = "gcc"
 $ ans = ""
 $ macros = ""
+$ use_vmsdebug_perl = "N"
+$ use_debugging_perl = "Y"
+$ use_64bit = "n"
 $ C_Compiler_Replace = "CC="
+$ Thread_Live_Dangerously = "MT="
+$ use_two_pot_malloc = "N"
+$ use_pack_malloc = "N"
+$ use_debugmalloc = "N"
+$ d_secintgenv = "N"
+$ use_multiplicity = "N"
 $ 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]
+$ 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")
 $!
@@ -113,6 +113,7 @@ $!
 $!: set up default values
 $ fastread=""
 $ reuseval="false"
+$ maniskip = "false"
 $ config_sh=""
 $ alldone=""
 $ error=""
@@ -165,8 +166,8 @@ $     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)) 
+$       test_config_sh = F$FILE_ATTRIBUTES(config_sh,"PRO")
+$       IF (F$LOCATE("R",test_config_sh).NE.F$LENGTH(test_config_sh)) 
 $       THEN
 $         CONTINUE !at this point check UIC && if test allows...
 $                  !to be continued ?
@@ -187,6 +188,13 @@ $     gotopt = "t"
 $     P'i' = P'i' - "h"
 $     gotshortopt = "t"
 $   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "m")
+$   THEN
+$     maniskip = "true"
+$     gotopt = "t"
+$     P'i' = P'i' - "m"
+$     gotshortopt = "t"
+$   ENDIF
 $   IF (F$EXTRACT(0,1,P'i') .EQS. "r")
 $   THEN
 $     reuseval = "true"
@@ -290,13 +298,14 @@ $!
 $ IF (error)
 $ THEN
 $   me = F$PARSE(me,,,"DIRECTORY")+ F$PARSE(me,,,"NAME")
-$   echo "Usage: @''me' [-dehrEKOSV] [-fconfig.sh] [-Dsymbol] [-Dsymbol=value]"
-$   echo "                [-Usymbol] [-Usymbol=]"
+$   echo "Usage: @''me' [-dehmrEKOSV] [-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).
+ "-m" : skip the MANIFEST check to see that all files are present
  "-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:                              *
@@ -384,6 +393,8 @@ $   ENDIF
 $ ELSE
 $! MANIFEST. has been found and we have set def'ed there - 
 $! time to bail out before it's too late.
+$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
+$ IF tmp .GES. "7.2" THEN GOTO Beyond_depth_check
 $   IF (F$ELEMENT(max_allowed_dir_depth,".",F$ENVIRONMENT("Default")).nes.".")
 $   THEN
 $     TYPE SYS$INPUT:
@@ -396,6 +407,7 @@ $     SET DEFAULT 'vms_default_directory_name' !be kind rewind
 $     STOP
 $     EXIT !2 !$STATUS = "%X00000002" (error)
 $   ENDIF
+$Beyond_depth_check:
 $!
 $! after finding MANIFEST let's create (but not yet enter) the UU subdirectory
 $!
@@ -417,8 +429,11 @@ $!
 $     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")      
+$     IF (maniskip)
 $     THEN
+$       echo "Skipping MANIFEST check as requested"
+$     ELSE
+$!
 $       OPEN/READ CONFIG 'manifestfound'
 $Read_loop_manifest:
 $       READ/END_OF_FILE = Done_manifest CONFIG line
@@ -466,6 +481,19 @@ $       IF (((f$length(file_2_find)+1) .eq. f$length(basename)) .and. -
 $       file_2_find = dirname + basename
 $!
 $       found = F$SEARCH(file_2_find)
+$       IF (found .EQS. "" .AND. dots .GT. 2)
+$       THEN
+$! 17-DEC-1999 Improved to turn "[.foo.bar]baz.c_buz" into
+$! "[.foo.bar]baz_c.buz" to cover unzipped archives and put
+$! "[.foo.bar]baz.c_buz,baz_c.buz" into missing list if neither is found.
+$         basename[f$locate(".",basename),1] := _
+$         dot_ele = F$ELEMENT(dots - 1,"_",basename)
+$         basename = -
+            f$extract(0,f$length(basename)-(f$length(dot_ele)+1),basename) -
+              + "." + dot_ele
+$         found = F$SEARCH(dirname + basename)
+$         file_2_find = file_2_find + "," + basename
+$       ENDIF
 $       IF (found .EQS. "")
 $       THEN
 $         WRITE MISSING file_2_find
@@ -495,7 +523,7 @@ 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).
+and contact the author (sugalskd@ous.edu).
 
 $     READ SYS$COMMAND/PROMPT="Continue? [n] " ans
 $     IF ans
@@ -687,7 +715,7 @@ $   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.
+ This procedure is intended to Configure the building of Perl for VMS.
 
 $   READ SYS$COMMAND/PROMPT="Continue anyway? [n] " ans
 $   IF ans
@@ -811,7 +839,7 @@ $!
 $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 "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'] "
@@ -855,8 +883,10 @@ $!
 $ IF (F$GETSYI("HW_MODEL") .LT. 1024)
 $ THEN 
 $   archname = "VMS_VAX"
+$   otherarch = "an Alpha"
 $ ELSE
 $   archname = "VMS_AXP"
+$   otherarch = "a VAX"
 $ ENDIF
 $ rp = "What is your architecture name? [''archname'] "
 $ GOSUB myread
@@ -868,24 +898,22 @@ $   THEN
 $     echo4 "I'll go with ''archname' anyway..."
 $   ENDIF
 $ ENDIF
-$ IF (archname.EQS."VMS_AXP")
+$ dflt = "n"
+$ rp = "Will you be sharing your PERL_ROOT with ''otherarch'? [''dflt'] "
+$ GOSUB myread
+$ if ans.NES.""
 $ 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")
+$   ans = F$EXTRACT(0,1,F$EDIT(ans,"COLLAPSE, UPCASE"))
+$ ENDIF
+$ IF (ans.NES."Y")
+$ THEN
+$   sharedperl = "N"
+$ ELSE
+$   sharedperl = "Y"
+$   IF (archname.EQS."VMS_AXP")
 $   THEN
-$     sharedperl = "N"
-$   ELSE
-$     sharedperl = "Y"
 $     macros = macros + """AXE=1"","
 $   ENDIF
-$ ELSE
-$   sharedperl = "N"
 $ ENDIF
 $!
 $!: is AFS running?                       !sfn
@@ -956,7 +984,7 @@ $!
 $ ENDIF !%Config-I-VMS, skip "where install" questions
 $!
 $!: set the base revision
-$ baserev="5.0"
+$ baserev="5"
 $!: get the patchlevel
 $ echo ""
 $ echo4 "Getting the current patchlevel..." !>&4
@@ -968,16 +996,16 @@ $   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))
+$   IF ((F$LOCATE("#define PERL_VERSION",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)
+$     patchlevel = F$ELEMENT(2," ",line)
 $     got_patch = "true"
 $   ENDIF
-$   IF ((F$LOCATE("SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_sub))
+$   IF ((F$LOCATE("#define PERL_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)
+$     subversion = F$ELEMENT(2," ",line)
 $     got_sub = "true"
 $   ENDIF
 $   IF (.NOT.got_patch).OR.(.NOT.got_sub) THEN GOTO Patchlevel_h_loop
@@ -1004,7 +1032,7 @@ $   ENDIF
 $ ELSE subversion = ""
 $ ENDIF
 $!
-$ version = F$EXTRACT(0,1,baserev) + "_" + patchlevel + subversion
+$ version = baserev + "_" + patchlevel + "_" + subversion
 $!
 $ IF (.NOT.vms_skip_install)
 $ THEN
@@ -1245,11 +1273,13 @@ $   IF F$LOCATE("dec",ans).NE.F$LENGTH(ans)
 $   THEN
 $     Mcc = "cc/decc"
 $     Using_Dec_C = "Yes"
+$     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $   IF F$LOCATE("vax",ans).NE.F$LENGTH(ans)
 $   THEN
 $     Mcc = "cc/vaxc"
 $     Using_Vax_C = "Yes"
+$     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $   IF Mcc.NES.dflt
 $   THEN
@@ -1267,6 +1297,7 @@ $   ELSE
 $     IF Mcc .EQS. "cc/decc"
 $     THEN
 $       Using_Dec_C = "Yes"
+$       C_COMPILER_Replace = "CC=cc=''Mcc'"
 $     ENDIF
 $   ENDIF
 $ ELSE 
@@ -1274,14 +1305,17 @@ $   Mcc = dflt
 $   IF Mcc .EQS. "cc/decc"
 $   THEN
 $     Using_Dec_C = "Yes"
+$     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $   IF Mcc .EQS. "cc/vaxc"
 $   THEN
 $     Using_Vax_C = "Yes"
+$     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $   IF Mcc .EQS. "gcc"
 $   THEN
 $     Using_Gnu_C = "Yes"
+$     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $ ENDIF
 $Decc_Version_check:
@@ -1555,7 +1589,7 @@ $ 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
+$   IF ans .nes. "" THEN mydomain = ans
 $!: translate upper to lower if necessary
 $   mydomain = F$EDIT(mydomain,"COLLAPSE")
 $   mylowdomain = F$EDIT(mydomain," LOWERCASE")
@@ -1576,10 +1610,10 @@ 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'"
+$ dflt = "''cf_by'@''myhostname'"+"''mydomain'"
 $ rp = "What is your e-mail address? [''dflt'] "
 $ GOSUB myread
-$ IF ans
+$ IF ans .nes. ""
 $ THEN cf_email = ans
 $ ELSE cf_email = dflt
 $ ENDIF
@@ -1596,7 +1630,7 @@ $ ENDIF
 $ dflt = "''cf_email'"
 $ rp = "Perl administrator e-mail address [''dflt'] "
 $ GOSUB myread
-$ IF ans
+$ IF ans .nes. ""
 $ THEN perladmin = ans
 $ ELSE perladmin = dflt
 $ ENDIF
@@ -1647,7 +1681,7 @@ $   if "''has_dec_c_sockets'".eqs."T"
 $   THEN
 $     dflt = "DECC"
 $   else
-$     dlft = "SOCKETSHR"
+$     dflt = "SOCKETSHR"
 $   endif
 $   rp = "Choose socket stack (NONE"
 $   if "''has_socketshr'".eqs."T" THEN rp = rp + ",SOCKETSHR"
@@ -1663,45 +1697,192 @@ $   IF ans.eqs."socketshr" then has_socketshr = "T"
 $ endif
 $!
 $!
+$! Ask if they want to build with VMS_DEBUG perl
+$ echo ""
+$ echo "Perl can be built to run under the VMS debugger."
+$ echo "You should only select this option if you are debugging"
+$ echo "perl itself.  This can be a useful feature if you are "
+$ echo "embedding perl in a program."
+$ dflt = "n"
+$ rp = "Build a VMS-DEBUG version of Perl? [''dflt'] "
+$ GOSUB myread
+$ IF ans.eqs."" then ans = dflt
+$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y"
+$ THEN
+$   use_vmsdebug_perl = "Y"
+$   macros = macros + """__DEBUG__=1"","
+$ ELSE
+$   use_vmsdebug_perl = "N"
+$ ENDIF
+$!
+$! Ask if they want to build with MULTIPLICITY
+$ echo ""
+$ echo "The perl interpreter engine can be built in a way that makes it
+$ echo "possible for a program that embeds perl into it (and yes, you can
+$ echo "do that--it's pretty keen) to have multiple perl interpreters active
+$ echo "at once. There is some performance overhead, however, so you
+$ echo "probably don't want to choose this unless you're going to be doing
+$ echo "funky perl embedding."
+$ dflt = "n"
+$ rp = "Build with MULTIPLICITY? [''dflt'] "
+$ GOSUB myread
+$ if ans.eqs."" then ans = dflt
+$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y"
+$ THEN
+$   use_multiplicity="Y"
+$ ELSE
+$   use_multiplicity="N"
+$ ENDIF
+$!
+$! Ask if they want to build with 64-bit support
+$ if (Archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
+$ THEN
+$   echo ""
+$   echo "This version of perl has experimental support for building with
+$   echo "64 bit integers and 128 bit floating point variables. This gives
+$   echo "a much larger range for perl's mathematical operations. (Note that
+$   echo "does *not* enable 64-bit fileops at the moment, as Dec C doesn't
+$   echo "do that yet)"
+$   dflt = use_64bit
+$   rp = "Build with 64 bits? [''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_64bit="Y"
+$   ELSE
+$     use_64bit="N"
+$   ENDIF
+$ ENDIF
+$!
 $! Ask about threads, if appropriate
 $ if (Using_Dec_C.eqs."Yes")
 $ THEN
+$   echo ""
 $   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"
+$   dflt = "n"
 $   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"
+$     ! Are they on VMS 7.1 on an alpha?
+$     if (Archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
+$     THEN
+$       echo ""
+$       echo "Threaded perl can be linked to use multiple kernel threads
+$       echo "and system upcalls on VMS 7.1+ on Alpha systems. This feature
+$       echo "allows multiple threads to execute simultaneously on an SMP
+$       echo "system as well as preventing a single thread from blocking
+$       echo "all the threads in a program, even on a single-processor
+$       echo "machine. Unfortunately this feature isn't safe on an
+$       echo "unpatched 7.1 system. (Several OS patches were required when
+$       echo "this procedure was written)
+$       dflt = "n"
+$       rp = "Enable multiple kernel threads and upcalls? [''dflt'] "
+$       gosub myread
+$       if ans.eqs."" then ans="''dflt'"
+$       if f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE")).eqs."Y"
+$       THEN
+$         Thread_Live_Dangerously = "MT=MT=1"
+$       ENDIF
+$     ENDIF
 $   ENDIF
 $ ENDIF
 $!
+$! Ask whether they want to use secure logical translation when tainting
+$ echo ""
+$ echo "As Perl starts up, it checks several logical names, such as"
+$ echo "PERL5LIB and PERL_ENV_TABLES, which allow you to modify aspects"
+$ echo "of its behavior.  For additional security, you may limit this"
+$ echo "process to executive- and kernel-mode translation when tainting"
+$ echo "is enabled.  In this case, logical names normally skipped when"
+$ echo "tainting is enabled (e.g. PERL5OPTS) are translated as well."
+$ echo "If you do not choose to do this, the usual order of access modes"
+$ echo "is used for logical name translation."
+$ echo ""
+$ echo "This restriction does not apply to the %ENV hash or to implicit"
+$ echo "logical name translation during parsing of file specifications;"
+$ echo "these always use the normal sequence of access modes for logical"
+$ echo "name translation."
+$ dflt = "n"
+$ rp = "Use secure logical name translation? [''dflt'] "
+$ GOSUB myread
+$ if ans.eqs."" then ans="''dflt'"
+$ d_secintgenv = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE"))
+$!
+$! Ask whether they want to default filetypes
+$ echo ""
+$ echo "When you pass the name of a program to Perl on the command line,"
+$ echo "it generally doesn't supply any defaults unless the -S command"
+$ echo "line switch is specified.  In keeping with the VMS tradition of"
+$ echo "default file types, however, you can configure Perl to try default"
+$ echo "file types of nothing, .pl, and .com, in that order (e.g. typing"
+$ echo """$ perl foo"" would cause Perl to look for foo., then foo.pl, and"
+$ echo "finally foo.com)."
+$ dflt = "n"
+$ rp = "Always use default file types? [''dflt'] "
+$ GOSUB myread
+$ if ans.eqs."" then ans="''dflt'"
+$ d_alwdeftype = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE"))
+$!
 $! 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"
+$ echo "memory allocation statistics, if you choose to enable them.
+$ 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"))
+$ mymalloc = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE"))
+$ if mymalloc.eqs."Y"
+$ THEN
+$   if use_debugging_perl.eqs."Y"
+$   THEN
+$     echo ""
+$     echo "Perl can keep statistics on memory usage if you choose to use
+$     echo "them. This is useful for debugging, but does have some
+$     echo "performance overhead.
+$     dflt = "n"
+$     rp = "Do you want the debugging memory allocator? [''dflt'] "
+$     gosub myread
+$     if ans.eqs."" then ans="''dflt'"
+$     use_debugmalloc = f$extract(0, 1, f$edit(ans, "COLLAPSE,UPCASE"))
+$   ENDIF
+$   ! Check which memory allocator we want
+$   echo ""
+$   echo "There are currently three different memory allocators: the
+$   echo "default (which is a pretty good general-purpose memory manager),
+$   echo "the TWO_POT allocator (which is optimized to save memory for
+$   echo "larger allocations), and PACK_MALLOC (which is optimized to save
+$   echo "memory for smaller allocations). They're all good, but if your
+$   echo "usage tends towards larger chunks use TWO_POT, otherwise use
+$   echo "PACK_MALLOC."
+$   dflt = "DEFAULT"
+$   rp = "Memory allocator (DEFAULT, TWO_POT, PACK_MALLOC) [''dflt'] "
+$   GOSUB myread
+$   if ans.eqs."" then ans = "''dflt'"
+$   if ans.eqs."TWO_POT" then use_two_pot_malloc = "Y"
+$   if ans.eqs."PACK_MALLOC" then use_pack_malloc = "Y"
+$ ENDIF
 $!
 $! 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 "SDBM_File if you have the GDBM library built on your machine.
+$ echo "Whatever you do, make sure the re module is first or things will
+$ echo "break badly"
 $ echo "
 $ echo "Which modules do you want to build into perl?"
-$ dflt = "Fcntl IO Opcode attrs Stdio DCLsym B SDBM_File"
+$! dflt = "Fcntl Errno File::Glob IO Opcode Byteloader Devel::Peek Devel::DProf Data::Dumper attrs re VMS::Stdio VMS::DCLsym B SDBM_File"
+$ dflt = "re Fcntl Errno File::Glob IO Opcode Devel::Peek Devel::DProf Data::Dumper attrs VMS::Stdio VMS::DCLsym B SDBM_File"
 $ if Using_Dec_C.eqs."Yes"
 $ THEN
 $   dflt = dflt + " POSIX"
@@ -1850,12 +2031,64 @@ $!
 $! Invoke the subconfig piece
 $!
 $ echo ""
-$ echo4 "Generating config.h"
+$ echo4 "Checking the C run-time library"
 $ dflt = F$ENVIRONMENT("DEFAULT")
 $ SET DEFAULT [-.vms]
 $ @subconfigure
 $ SET DEFAULT 'dflt
 $!
+$!  Warn of dangerous symbols or logical names
+$!
+$Bad_environment: SUBROUTINE
+$   Bad_env = ""
+$   IF p2 .eqs. "SYMBOL"
+$   THEN
+$     IF f$type('p1) .nes. "" THEN  Bad_env := SYMBOL
+$   ELSE
+$     IF f$trnlnm(p1) .nes. "" THEN Bad_env := LOGICAL
+$   ENDIF
+$   IF Bad_env .eqs. "SYMBOL" .or. Bad_env .eqs. "LOGICAL"
+$   THEN
+$     IF f$search("config.msg") .nes. ""
+$     THEN
+$       OPEN/APPEND CONFIG config.msg
+$     ELSE
+$       OPEN/WRITE CONFIG config.msg
+$     ENDIF
+$     IF Bad_env .eqs. "SYMBOL"
+$     THEN
+$       WRITE CONFIG ""
+$       WRITE CONFIG "Symbol name ''p1' found in environment as " + &p1
+$       WRITE CONFIG " delete before building ''package' via:"
+$       WRITE CONFIG "     $ DELETE/SYMBOL/GLOBAL ''p1'"
+$       IF f$locate("""",&p1) .ge. f$length(&p1)
+$       THEN
+$       WRITE CONFIG " after building, testing, and installing ''package'
+$       WRITE CONFIG " restore the symbol with:"
+$       WRITE CONFIG "     $ ''p1' == """ + &p1 + """"
+$       ENDIF
+$     ENDIF
+$     IF Bad_env .eqs. "LOGICAL"
+$     THEN
+$       WRITE CONFIG ""
+$       WRITE CONFIG "Logical name ''p1' found in environment as " + f$trnlnm(p1)
+$       WRITE CONFIG " deassign before building ''package'"
+$     ENDIF
+$     CLOSE CONFIG
+$     Bad_env = ""
+$   ENDIF
+$ EXIT
+$ ENDSUBROUTINE ! Bad_environment
+$ echo ""
+$ echo4 "%Config-I-VMS, Checking for dangerous pre-existing global symbols and logical names."
+$ CALL Bad_environment "TMP"
+$ CALL Bad_environment "LIB"
+$ CALL Bad_environment "T"
+$ CALL Bad_environment "FOO"
+$ CALL Bad_environment "EXT"
+$ CALL Bad_environment "TEST" "SYMBOL"
+$ IF f$search("config.msg") .eqs. "" THEN echo "OK."
+$!
 $! %Config-I-VMS, write perl_setup.com here
 $!
 $ echo ""
@@ -1871,11 +2104,25 @@ $ ELSE
 $ WRITE CONFIG "$! This perl configured & administered by ''perladmin'"
 $ ENDIF
 $ WRITE CONFIG "$!"
+$ prefix = prefix - "000000."
 $ 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"
+$ write config "$ ext = "".exe"""
+$ if sharedperl .eqs. "Y"
+$ then
+$   write config "$ if f$getsyi(""ARCH_NAME"") .nes. ""VAX"" then ext = "".AXE"""
+$ endif
+$ IF use_vmsdebug_perl .eqs. "Y"
+$ then
+$   WRITE CONFIG "$ dbgperl :== $Perl_Root:[000000]dbgPerl'ext'"
+$   WRITE CONFIG "$ perl    :== $Perl_Root:[000000]ndbgPerl'ext'"
+$   WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'"
+$ else
+$   WRITE CONFIG "$ perl :== $Perl_Root:[000000]Perl'ext'"
+$   WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'"
+$ endif
+$!
 $ IF (tzneedset)
 $ THEN
 $ WRITE CONFIG "$ define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
@@ -1928,6 +2175,15 @@ $ ENDIF
 $ echo4 " ''make'''makefile'", macros
 $ echo4 ""
 $!
+$ IF ( F$SEARCH("config.msg").NES."" ) 
+$ THEN
+$   echo "Hmm.  I also noted the following information while running:"
+$   echo ""
+$   type config.msg
+$   SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) config.msg
+$   DELETE/NOLOG/NOCONFIRM config.msg;
+$ ENDIF
+$!
 $Clean_up:
 $ IF (silent)
 $ THEN