$!
$! That's it. If you get into a bind trying to build perl on VMS then
$! definitely read through the README.VMS file.
-$! Beyond that send email to VMSPerl@cor.newman.upenn.edu
+$! Beyond that send email to vmsperl@perl.org
$!
$! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$!
$!
$! Adapted and converted from Larry Wall & Andy Dougherty's
$! "Configure generated by metaconfig 3.0 PL60." by Peter Prymmer
-$! (a Bourne sh[ell] script for configuring the installation of perl on VMS)
-$! in the perl5.002|3 epoch (spring/summer 1996)
+$! (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
$ 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"
+$ cc_flags = ""
$ 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]
$!: set up default values
$ fastread=""
$ reuseval="false"
+$ maniskip = "false"
$ config_sh=""
$ alldone=""
$ error=""
$ 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"
$ 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: *
$ 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
$ 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
%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
$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'] "
$ 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
$ 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
$ 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
$ ELSE subversion = ""
$ ENDIF
$!
-$ version = F$EXTRACT(0,1,baserev) + "_" + patchlevel + subversion
+$ version = baserev + "_" + patchlevel + "_" + subversion
$!
$ IF (.NOT.vms_skip_install)
$ THEN
$ WRITE CONFIG "}"
$ CLOSE CONFIG
$!
-$ DEFINE SYS$ERROR _NLA0:
-$ DEFINE SYS$OUTPUT _NLA0:
+$! DEFINE SYS$ERROR _NLA0:
+$! DEFINE SYS$OUTPUT _NLA0:
$ cc/NoObj/list=ccvms.lis ccvms.c
$ tmp = $status
-$ DEASSIGN SYS$OUTPUT
-$ DEASSIGN SYS$ERROR
+$! DEASSIGN SYS$OUTPUT
+$! DEASSIGN SYS$ERROR
$ IF (silent) THEN GOSUB Shut_up
$! echo "%Config-I-VMS, After cc compile $status = >''tmp'<" !diagnostic
$!
$ vms_cc_available = vms_cc_available + "cc/decc "
$ ENDIF
$ ELSE
-$ IF F$LOCATE("DEC",line).NE.F$LENGTH(line)
+$ IF (F$LOCATE("DEC",line).NE.F$LENGTH(line)).or.(F$LOCATE("Compaq",line).NE.F$LENGTH(line))
$ THEN
$ vms_cc_dflt = "/decc"
$ vms_cc_available = vms_cc_available + "cc/decc "
$ THEN
$ ans = F$EDIT(ans,"TRIM, COMPRESS, LOWERCASE")
$ Mcc = ans
-$ IF F$LOCATE("dec",ans).NE.F$LENGTH(ans)
+$ IF (F$LOCATE("dec",ans).NE.F$LENGTH(ans)).or.(F$LOCATE("compaq",ans).NE.F$LENGTH(ans))
$ THEN
$ Mcc = "cc/decc"
$ Using_Dec_C = "Yes"
$ ENDIF
$ IF Mcc.NES.dflt
$ THEN
-$ IF F$LOCATE("dec",dflt).NE.F$LENGTH(dflt)
+$ IF (F$LOCATE("dec",dflt).NE.F$LENGTH(dflt)).or(F$LOCATE("compaq",dflt).NE.F$LENGTH(dflt))
$ THEN
$ C_COMPILER_Replace = "CC=cc=''Mcc'"
$ ELSE
$! DELETE/NOLOG/NOCONFIRM deccvers.*;
$ echo "You are using Dec C ''line'"
$ Dec_C_Version = line
+$ Dec_C_Version = Dec_C_Version + 0
+$ if Dec_C_Version.ge.60200000 THEN CC_FLAGS = CC_FLAGS + "/NOANSI_ALIAS"
$ ENDIF
$Vaxc_Invoke_check:
$ IF "''Using_Vax_C'".EQS."Yes"
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 .nes. ""
$!
$!
$! 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."
-$ echo ""
-$ dflt = "N"
+$ dflt = "n"
$ rp = "Build a VMS-DEBUG version of Perl? [''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")
+$ 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"","
$ 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 yep, you can
+$ 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."
-$ echo ""
$ dflt = "n"
$ rp = "Build with MULTIPLICITY? [''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")
+$ 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 = "n"
$ rp = "Build with threads? [''dflt'] "
$ GOSUB myread
$ 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)
-$ echo ""
$ dflt = "n"
$ rp = "Enable multiple kernel threads and upcalls? [''dflt'] "
$ gosub myread
$ echo "logical name translation during parsing of file specifications;"
$ echo "these always use the normal sequence of access modes for logical"
$ echo "name translation."
-$ echo ""
$ dflt = "n"
$ rp = "Use secure logical name translation? [''dflt'] "
$ GOSUB myread
$ 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)."
-$ echo ""
$ 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,"TRIM,COMPRESS,UPCASE"))
+$ d_alwdeftype = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE"))
$!
$! Ask if they want to use perl's memory allocator
$ echo ""
$ 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, if you choose to enable them.
-$ 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"))
+$ mymalloc = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE"))
$ if mymalloc.eqs."Y"
$ THEN
$ if use_debugging_perl.eqs."Y"
$ 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.
-$ echo ""
$ 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, "TRIM,COMPRESS,UPCASE"))
+$ use_debugmalloc = f$extract(0, 1, f$edit(ans, "COLLAPSE,UPCASE"))
$ ENDIF
$ ! Check which memory allocator we want
$ echo ""
$ 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."
-$ echo ""
$ dflt = "DEFAULT"
$ rp = "Memory allocator (DEFAULT, TWO_POT, PACK_MALLOC) [''dflt'] "
$ GOSUB myread
$ 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 Errno IO Opcode Data::Dumper attrs re VMS::Stdio VMS::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"
$ @subconfigure
$ SET DEFAULT 'dflt
$!
-$! Warn of dangerous logical names
+$! Warn of dangerous symbols or logical names
$!
-$Bad_logical: SUBROUTINE
-$ IF f$trnlnm(p1) .nes. ""
+$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
$ ELSE
$ OPEN/WRITE CONFIG config.msg
$ ENDIF
-$ WRITE CONFIG "Logical name ''p1' found in environment as " + f$trnlnm(p1)
-$ WRITE CONFIG " deassign before building ''package'"
+$ 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_logical
+$ ENDSUBROUTINE ! Bad_environment
$ echo ""
-$ echo4 "%Config-I-VMS, Checking for dangerous pre extant logical names."
-$ CALL Bad_logical "TMP"
-$ CALL Bad_logical "LIB"
-$ CALL Bad_logical "T"
-$ CALL Bad_logical "FOO"
-$ CALL Bad_logical "EXT"
+$ echo4 "%Config-I-VMS, Checking for dangerous pre extant 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