$ 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"
-$ preload_env = "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")
$!
$!: 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
$ 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("#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
$ 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")
$ 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
$ dflt = "''cf_email'"
$ rp = "Perl administrator e-mail address [''dflt'] "
$ GOSUB myread
-$ IF ans
+$ IF ans .nes. ""
$ THEN perladmin = ans
$ ELSE perladmin = dflt
$ ENDIF
$ endif
$!
$!
+$! Ask if they want to build with VMS_DEBUG perl
+$ 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"
+$ 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")
+$ THEN
+$ use_vmsdebug_perl = "Y"
+$ macros = macros + """__DEBUG__=1"","
+$ ELSE
+$ use_vmsdebug_perl = "N"
+$ ENDIF
+$!
$! Ask if they want to build with MULTIPLICITY
$ 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
$ 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 "This version of perl has experimental support for building wtih
+$ 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)"
+$ echo ""
+$ 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 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 "This version of perl has experimental support for building wtih
+$ 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)"
+$ echo ""
+$ 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
$ ENDIF
$ ENDIF
$!
-$! Pre-load %ENV?
+$! Ask whether they want to use secure logical translation when tainting
$ echo ""
-$ echo "Because of the way perl fetches the list of logical names
-$ echo "for the %ENV hash (we spawn a subprocess that does a
-$ echo "SHOW LOGICALS *, which is expensive), we defer fetching it
-$ echo "until the first time a program iterates over the %ENV hash.
-$ echo "This means things like 'exists($ENV{'SYS$MANAGER'})' will
-$ echo "return false unless you've already accessed $ENV{SYS$MANAGER}
-$ echo "or done something like a keys %ENV."
+$ 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."
+$ echo ""
+$ 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 "If you choose, perl can populate the %ENV hash at startup.
-$ echo "This will exact both a memory penalty (to store the keys) and
-$ echo "a time penalty (to spawn the subprocess) every time you invoke
-$ echo "perl. Depending on your system, this might not be a big deal.
+$ 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)."
$ echo ""
$ dflt = "n"
-$ rp = "Populate %ENV at startup time? [''dflt'] "
+$ rp = "Always use default file types? [''dflt'] "
$ GOSUB myread
$ if ans.eqs."" then ans="''dflt'"
-$ preload_env = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE"))
+$ d_alwdeftype = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE"))
$!
$! Ask if they want to use perl's memory allocator
$ echo ""
$ 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 Errno IO Opcode Dumper attrs re Stdio DCLsym B SDBM_File"
+$! dflt = "Fcntl Errno IO Opcode Byteloader Devel::Peek Devel::DProf Data::Dumper attrs re VMS::Stdio VMS::DCLsym B SDBM_File"
+$ dflt = "Fcntl Errno IO Opcode Devel::Peek Devel::DProf Data::Dumper attrs re VMS::Stdio VMS::DCLsym B SDBM_File"
$ if Using_Dec_C.eqs."Yes"
$ THEN
$ dflt = dflt + " POSIX"
$! Invoke the subconfig piece
$!
$ echo ""
-$ echo4 "Checking the C Run time library"
+$ echo4 "Checking the C run-time library"
$ dflt = F$ENVIRONMENT("DEFAULT")
$ SET DEFAULT [-.vms]
$ @subconfigure
$ SET DEFAULT 'dflt
$!
+$! Warn of dangerous logical names
+$!
+$Bad_logical: SUBROUTINE
+$ IF f$trnlnm(p1) .nes. ""
+$ THEN
+$ IF f$search("config.msg") .nes. ""
+$ THEN
+$ OPEN/APPEND CONFIG config.msg
+$ 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'"
+$ CLOSE CONFIG
+$ ENDIF
+$ EXIT
+$ ENDSUBROUTINE ! Bad_logical
+$ 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"
+$ IF f$search("config.msg") .eqs. "" THEN echo "OK."
+$!
$! %Config-I-VMS, write perl_setup.com here
$!
$ echo ""
$ 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'"
$ 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