$ cat = "type"
$ delete := delete ! local symbol overrides globals with qualifiers
$ gcc_symbol = "gcc"
-$ ld = "Link"
+$ ld = "Link/nodebug"
$ ans = ""
$ macros = ""
$ extra_flags = ""
$ use_ieee_math = "y"
$ be_case_sensitive = "n"
$ unlink_all_versions = "n"
+$ builder = "MMK"
$ use_vmsdebug_perl = "n"
$ use64bitall = "n"
$ use64bitint = "n"
-$ uselargefiles = "n"
+$ uselongdouble = "n"
+$ uselargefiles = "y"
+$ usestdstat = "n"
+$ usesitecustomize = "n"
$ C_Compiler_Replace = "CC="
-$ Thread_Live_Dangerously = "MT="
+$ thread_upcalls = "MTU="
+$ thread_kernel = "MTK="
$ use_two_pot_malloc = "N"
$ use_pack_malloc = "N"
$ use_debugmalloc = "N"
$ ccflags = ""
$ static_ext = ""
+$ nonxs_ext = ""
$ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
$ max_allowed_dir_depth = 3 ! e.g. [A.B.PERLxxx] not [A.B.C.PERLxxx]
$! max_allowed_dir_depth = 2 ! e.g. [A.PERLxxx] not [A.B.PERLxxx]
$ file_2_find = "[-]" + file_2_find
$ ENDIF
$!
+$ tmp = F$PARSE(file_2_find + ";",,,,"SYNTAX_ONLY")
+$ IF F$SEARCH(tmp) .NES. "" THEN file_2_find = tmp
$ dirname = F$EXTRACT(0,F$LOCATE("]",file_2_find),file_2_find) + "]"
$ file_2_find = file_2_find - dirname
$!
$! 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)
+$ dotloc = f$locate(".",basename)
+$ basename[dotloc,1] := "_"
+$ dot_ele = F$ELEMENT(dots - 1,"_",f$extract(dotloc,f$length(basename),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
+$ tildeloc = f$locate("~",basename)
+$ IF (found .EQS. "" .AND. tildeloc .LT. f$length(basename))
+$ THEN
+$ basename[tildeloc,1] := "_"
+$ found = F$SEARCH(dirname + basename)
+$ file_2_find = file_2_find + "," + basename
+$ ENDIF
$ IF (found .EQS. "")
$ THEN
$ WRITE MISSING file_2_find
brackets; typing carriage return will give you the default.
$ EOD
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ if (fastread)
+$ then
+$ echo4 ""
+$ else
+$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ endif
$ TYPE SYS$INPUT:
$ DECK
options.
$ EOD
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ if (fastread)
+$ then
+$ echo4 ""
+$ else
+$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ endif
$ TYPE SYS$INPUT:
$ DECK
$!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 (fastread)
+$ then
+$ echo4 ""
+$ else
+$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ endif
$ IF (F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
$ THEN
$ OPEN/WRITE CONFIG [-.CONFIG]INSTRUCT.
$ 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"
$! 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
+$!: determine whether symbolic links are supported !sfn !jem- further down
$!: 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/"
+$ config_sh_es = "''config_sh'/[-]config.sh/"
$ i = 0
$ max = 3
$Config_sh_look:
$ IF (configshfound.NES."") THEN GOTO Config_sh_found
$ ENDIF
$ IF (i.LT.max) THEN GOTO Config_sh_look
-$! genconfig.pl has "osname='VMS'"
$ osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE")
$ IF (configshfound.EQS."")
$ THEN
$ config_symbols0 ="|archlib|archlibexp|bin|binexp|builddir|cf_email|config_sh|installarchlib|installbin|installman1dir|installman3dir|"
$ config_symbols1 ="|installprivlib|installscript|installsitearch|installsitelib|most|oldarchlib|oldarchlibexp|osname|pager|perl_symbol|perl_verb|"
$ config_symbols2 ="|prefix|privlib|privlibexp|scriptdir|sitearch|sitearchexp|sitebin|sitelib|sitelib_stem|sitelibexp|try_cxx|use64bitall|use64bitint|"
-$ config_symbols3 ="|usecasesensitive|usedefaulttypes|usedevel|useieee|useithreads|usemultiplicity|usemymalloc|usedebugging_perl|useperlio|usesecurelog|"
-$ config_symbols4 ="|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|"
+$ config_symbols3 ="|usecasesensitive|usedefaulttypes|usedevel|useieee|useithreads|uselongdouble|usemultiplicity|usemymalloc|usedebugging_perl|"
+$ config_symbols4 ="|useperlio|usesecurelog|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|"
+$ config_symbols5 ="|buildmake|builder|usethreadupcalls|usekernelthread"
$!
$ open/read CONFIG 'config_sh'
$ rd_conf_loop:
$ j = f$locate(dsym, syms)
$ if j .lt. f$length(syms) then goto erd_ck_loop
$ k = k + 1
-$ if k .lt. 5 then goto rd_ck_loop
+$ if k .lt. 6 then goto rd_ck_loop
$ goto rd_conf_loop
$ erd_ck_loop:
$ val = f$element(1,"=",line)
$ delete/symbol config_symbols2
$ delete/symbol config_symbols3
$ delete/symbol config_symbols4
+$ delete/symbol config_symbols5
$ delete/symbol sym
$ delete/symbol val
$ delete/symbol dsym
$ cf_time = "''wkday' ''mon' ''mday' ''hour':''min':''sec' ''tz' ''year'"
$!
$!: determine the architecture name
-$! genconfig.pl has either archname='VMS_AXP' or 'VMS_VAX'
$! Note that DCL in VMS V5.4 does not have F$GETSYI("ARCH_NAME")
$! but does have F$GETSYI("HW_MODEL").
$! Please try to use either archname .EQS. "VMS_VAX" or archname .EQS.
$! Add _ROOT to make install PERL_ROOT differ from build directory.
$ prefix = prefixbase + "_ROOT.]"
$ ENDIF
+$ ! more redundant scrubbing of values
+$ prefix = prefix - "000000."
+$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN prefix = prefix - "]" + ".]"
$ src = prefix
$!: determine root of directory hierarchy where package will be installed.
$ dflt = prefix
$ perl_patchlevel = perl_patchlevel - "DEVEL"
$ got_perl_patchlevel = "true"
$ ENDIF
+$ IF ((F$LOCATE("""SMOKE",line).NE.F$LENGTH(line)).AND.(.NOT.got_perl_patchlevel))
+$ THEN
+$ line = F$EDIT(line,"COMPRESS, TRIM")
+$ perl_patchlevel = F$ELEMENT(1,"""",line)
+$ perl_patchlevel = perl_patchlevel - "SMOKE"
+$ got_perl_patchlevel = "true"
+$ ENDIF
+$ IF ((F$LOCATE("""MAINT",line).NE.F$LENGTH(line)).AND.(.NOT.got_perl_patchlevel))
+$ THEN
+$ line = F$EDIT(line,"COMPRESS, TRIM")
+$ perl_patchlevel = F$ELEMENT(1,"""",line)
+$ perl_patchlevel = perl_patchlevel - "MAINT"
+$ got_perl_patchlevel = "true"
+$ ENDIF
$ IF (.NOT. got_patch) .OR. -
(.NOT. got_sub) .OR. -
(.NOT. got_api_revision) .OR. -
$ OPEN/READ PATCH [-].patch
$ READ PATCH line
$ CLOSE PATCH
-$ tmp = F$EDIT(line,"COLLAPSE")
+$ tmp = F$EDIT(line,"TRIM,COMPRESS")
+$ IF F$ELEMENT(3, " ", tmp) .NES. "" THEN tmp = F$ELEMENT(3, " ", tmp)
$ SET ON
-$ IF tmp .GT. perl_patchlevel then perl_patchlevel = tmp
+$ IF tmp .NES. "" THEN perl_patchlevel = tmp
$ ENDIF
$!
$ version_patchlevel_string = "version ''patchlevel' subversion ''subversion'"
$ IF F$TYPE(bin) .NES. ""
$ THEN dflt = bin
$! ELSE dflt = prefix - ".]" + ".BIN]"
-$ ELSE dflt = "/''vms_prefix'/000000"
+$ ELSE dflt = "/''vms_prefix'"
$ ENDIF
$ rp = "Pathname where the public executables will reside? "
$ rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
$ IF F$TYPE(archlib).EQS."" THEN -
archlib="''vms_prefix':[lib.''archname'.''version']"
$ IF F$TYPE(bin) .EQS. "" THEN -
- bin="/''vms_prefix'/000000"
+ bin="/''vms_prefix'"
$ IF F$TYPE(privlib) .EQS. "" THEN -
privlib ="''vms_prefix':[lib]"
$ IF F$TYPE(sitearch) .EQS. "" THEN -
$ ENDIF
$ ELSE
$ IF (F$LOCATE("DEC",line).NE.F$LENGTH(line)).or.(F$LOCATE("Compaq",line).NE.F$LENGTH(line)) -
- .or.(F$LOCATE("hp",line).NE.F$LENGTH(line))
+ .or.(F$LOCATE("HP",F$EDIT(line,"UPCASE")).NE.F$LENGTH(line))
$ THEN
$ vms_cc_dflt = "/decc"
$ vms_cc_available = vms_cc_available + "cc/decc "
$ SET NOON
$ DEFINE/USER_MODE SYS$OUTPUT NL:
$ DEFINE/USER_MODE SYS$ERROR NL:
-$ link ccvms.obj
+$ link/nodebug ccvms.obj
$ tmp = $status
$ SET ON
$ ! success $status with:
$ IF (silent) THEN GOSUB Shut_up
$ DEFINE/USER_MODE SYS$ERROR NL:
$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ link deccvers.obj
+$ link/nodebug deccvers.obj
$ tmp = $status
$ IF (silent) THEN GOSUB Shut_up
$ OPEN/WRITE CONFIG deccvers.out
$ THEN
$ IF F$LOCATE("VAXCRTL",gcclib_olb).NE.F$LENGTH(gcclib_olb)
$ THEN
-$ link gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
+$ link/nodebug gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
$ tmp = $status
$ ELSE
-$ link gccvers.obj,'gcclib_olb'
+$ link/nodebug 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'
+$ link/nodebug gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
$ tmp = $status
$ ENDIF
$ DEASSIGN SYS$ERROR
$ echo "You are using CXX ''line'"
$ cxxversion = line
$ ccversion = line
+$ d_cplusplus = "define"
$ CALL Cxx_demangler_cleanup
+$ ELSE
+$ d_cplusplus = "undef"
$ ENDIF
$!
$Cxx_demangler_cleanup: SUBROUTINE
$!: What should the include directory be ? (.TLB text libraries)
$ dflt = gcclib_olb
$ rp = "Where are the include files you want to use? "
-$ IF f$length( rp + "[''dflt'] " ).gt.76
+$ IF f$length( rp + "[''dflt'] " ) .GT. 76
$ THEN rp = F$FAO("!AS!/!AS",rp,"[''dflt'] ")
$ ELSE rp = rp + "[''dflt'] "
$ ENDIF
$ use64bitint="Y"
$ ENDIF
$!
-$ bool_dflt = "n"
+$ bool_dflt = use64bitall
$ IF F$TYPE(uselargefiles) .NES. ""
$ THEN
$ IF uselargefiles .OR. uselargefiles .eqs. "define" THEN bool_dflt = "y"
$ GOSUB myread
$ uselargefiles=ans
$!
+$ bool_dflt = "n"
+$ IF F$TYPE(uselongdouble) .NES. ""
+$ THEN
+$ IF uselongdouble .OR. uselongdouble .eqs. "define" THEN bool_dflt = "y"
+$ ENDIF
+$ echo ""
+$ echo "Perl can be built to take advantage of long doubles which"
+$ echo "(if available) may give more accuracy and range for floating point numbers."
+$ echo ""
+$ echo "If this does not make any sense to you, just accept the default '" + bool_dflt + "'."
+$ rp = "Try to use long doubles, if available? [''bool_dflt'] "
+$ GOSUB myread
+$ uselongdouble = ans
+$!
$ ENDIF ! not VAX && >= 7.1
$!
+$ IF usesitecustomize .OR. usesitecustomize .eqs. "define"
+$ THEN
+$ usesitecustomize = "define"
+$ ELSE
+$ usesitecustomize = "undef"
+$ ENDIF
+$!
$! Ask about threads, if appropriate
$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
$ THEN
$ ELSE
$ use_5005_threads="Y"
$ ENDIF
-$ ! Are they on VMS 7.1 on an alpha or itanium?
-$ if (archname.nes."VMS_VAX").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
+$ ! Are they on VMS 7.1 or greater?
+$ IF "''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)."
-$ bool_dflt = "n"
-$ rp = "Enable multiple kernel threads and upcalls? [''bool_dflt'] "
+$ echo "Threaded Perl can be linked to use system upcalls on your system. This feature"
+$ echo "allows the thread scheduler to be made aware of system events (such as I/O)"
+$ echo "so as to prevent a single thread from blocking all the threads in a program,"
+$ echo "even on a single-processor machine."
+$ bool_dflt = "y"
+$ IF f$type(usethreadupcalls) .NES. ""
+$ THEN
+$ if .not. usethreadupcalls .or. usethreadupcalls .eqs. "undef" then bool_dflt="n"
+$ ENDIF
+$ rp = "Enable thread upcalls? [''bool_dflt'] "
$ gosub myread
-$ if ans
+$ IF ans
$ THEN
-$ Thread_Live_Dangerously = "MT=MT=1"
+$ thread_upcalls = "MTU=MTU=1"
+$ usethreadupcalls = "define"
+$ ! Are they on alpha or itanium?
+$ IF (archname .NES. "VMS_VAX") .AND. ("''f$extract(1,3, f$getsyi(""version""))'" .GES. "7.2")
+$ THEN
+$ echo ""
+$ echo "Threaded Perl can be linked to use multiple kernel threads on your system."
+$ echo "This feature allows multiple user threads to make use of multiple CPUs on"
+$ echo "a multi-processor machine."
+$ bool_dflt = "n"
+$ IF f$type(usekernelthreads) .nes. ""
+$ THEN
+$ if usekernelthreads .or. usekernelthreads .eqs. "define" then bool_dflt="y"
+$ ENDIF
+$ rp = "Enable multiple kernel threads? [''bool_dflt'] "
+$ gosub myread
+$ IF ans
+$ THEN
+$ thread_kernel = "MTK=MTK=1"
+$ usekernelthreads = "define"
+$ ENDIF
+$ ENDIF
$ ENDIF
$ ENDIF
$ ENDIF
$ ENDIF
+$ IF F$TYPE(usethreadupcalls) .EQS. "" THEN usethreadupcalls = "undef"
+$ IF F$TYPE(usekernelthreads) .EQS. "" THEN usekernelthreads = "undef"
$ IF archname .NES. "VMS_VAX"
$ THEN
$! Case sensitive?
$ be_case_sensitive = ans
$! IEEE math?
$ echo ""
-$ echo "Perl normally uses IEEE format (T_FLOAT) floating point numbers"
-$ echo "internally on Alpha, but if you need G_FLOAT for binary compatibility"
+$ echo "Perl normally uses IEEE format (T_FLOAT) floating point numbers on"
+$ echo "Alpha and Itanium, but if you need G_FLOAT for binary compatibility"
$ echo "with an external library or existing data, you may wish to disable"
$ echo "the IEEE math option."
$ bool_dflt = use_ieee_math
$ ELSE
$ d_unlink_all_versions = "undef"
$ ENDIF
+$!
$! CC Flags
$ echo ""
$ echo "Your compiler may want other flags. For this question you should include"
F$EXTRACT(0,8,line) .NES. "vms/ext/" THEN goto ext_loop
$ line = F$EDIT(line,"COMPRESS")
$ line = F$ELEMENT(0," ",line)
-$ line_len = F$LENGTH(line)
-$ IF F$EXTRACT(line_len - 12,12,line) .NES. "/Makefile.PL" THEN goto ext_loop
-$ IF F$EXTRACT(0,4,line) .EQS. "ext/" THEN -
- xxx = F$EXTRACT(4,line_len - 16,line)
+$ IF F$EXTRACT(0,4,line) .EQS. "ext/"
+$ THEN
+$ xxx = F$ELEMENT(1,"/",line)
+$ IF F$SEARCH("[-.ext]''xxx'.DIR;1") .EQS. "" THEN GOTO ext_loop
+$ ENDIF
+$ IF F$EXTRACT(0,8,line) .EQS. "vms/ext/"
+$ THEN
+$ xxx = F$ELEMENT(2,"/",line)
+$ IF F$SEARCH("[-.vms.ext]''xxx'.DIR;1") .EQS. "" THEN GOTO ext_loop
+$ xxx = "VMS/" + xxx
+$ ENDIF
$ IF xxx .EQS. "DynaLoader" THEN goto ext_loop ! omit
-$ IF xxx .EQS. "SDBM_File/sdbm" THEN goto ext_loop ! sub extension - omit
-$ IF xxx .EQS. "Devel/PPPort/harness" THEN goto ext_loop ! sub extension - omit
-$ IF F$EXTRACT(0,7,xxx) .EQS. "Encode/" THEN goto ext_loop ! sub extension - omit
-$ IF xxx .EQS. "B/C" THEN goto ext_loop ! sub extension - omit
-$ IF F$EXTRACT(0,8,line) .EQS. "vms/ext/" THEN -
- xxx = "VMS/" + F$EXTRACT(8,line_len - 20,line)
-$ known_extensions = known_extensions + " ''xxx'"
+$!
+$! (extspec = xxx) =~ tr!-!/!
+$ extspec = ""
+$ idx = 0
+$ replace_dash_with_slash:
+$ before = F$ELEMENT(idx, "-", xxx)
+$ IF before .EQS. "-" THEN goto end_replace_dash_with_slash
+$ IF extspec .NES. ""
+$ THEN
+$ extspec = extspec + "/"
+$ ENDIF
+$ extspec = extspec + before
+$ idx = idx + 1
+$ goto replace_dash_with_slash
+$
+$ end_replace_dash_with_slash:
+$
+$ xxx = known_extensions
+$ may_already_have_extension:
+$ idx = F$LOCATE(extspec, xxx)
+$ extlen = F$LENGTH(xxx)
+$ IF idx .EQ. extlen THEN goto found_new_extension
+$! But "Flirble" may just be part of "Acme-Flirble"
+$ IF idx .GT. 0 .AND. F$EXTRACT(idx - 1, 1, xxx) .NES. " "
+$ THEN
+$ xxx = F$EXTRACT(idx + F$LENGTH(extspec) + 1, extlen, xxx)
+$ GOTO may_already_have_extension
+$ ENDIF
+$! But "Foo" may just be part of "Foo-Bar" so check for equality.
+$ xxx = F$EXTRACT(idx, extlen - idx, xxx)
+$ IF F$ELEMENT(0, " ", xxx) .EQS. extspec
+$ THEN
+$ GOTO ext_loop
+$ ELSE
+$ xxx = F$EXTRACT(F$LENGTH(extspec) + 1, extlen, xxx)
+ GOTO may_already_have_extension
+$ ENDIF
+$!
+$ found_new_extension:
+$ known_extensions = known_extensions + " ''extspec'"
$ goto ext_loop
$end_ext:
$ close CONFIG
$ DELETE/SYMBOL xxx
+$ DELETE/SYMBOL idx
+$ DELETE/SYMBOL extspec
+$ DELETE/SYMBOL extlen
$ known_extensions = F$EDIT(known_extensions,"TRIM,COMPRESS")
$ dflt = known_extensions
$ IF ccname .NES. "DEC" .AND. ccname .NES. "CXX"
$ THEN
$ dflt = dflt - "Socket" ! optional on VMS
$ ENDIF
-$ IF .NOT. use_threads THEN dflt = dflt - "Thread"
+$ dflt = dflt - "Win32API/File" - "Win32CORE" - "Win32" ! need Dave Cutler's other project
$ dflt = F$EDIT(dflt,"TRIM,COMPRESS")
$!
$! Ask for their default list of extensions to build
$ probers = "-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!/IDENT!/IDENT"
$ max_build = 7
$!
-$ orig_dflt = "MMK"
+$ orig_dflt = f$edit(builder,"UPCASE")
+$ if orig_dflt .eqs. "" then orig_dflt = "MMK"
$ default_set = ""
$ ok_builders = ""
$ OPEN/WRITE/ERROR=Open_error CONFIG Makefile.
$ GOSUB myread
$ pager = ans
$!
-$! update [.vms]config.vms here
-$!
$! update makefile here
$! echo4 "Updating makefile..."
$!
$ IF use_ieee_math
$ THEN
$ extra_flags = "''extra_flags'" + "/float=ieee/ieee=denorm"
+$ ELSE
+$ IF (archname.EQS."VMS_IA64")
+$ THEN
+$ extra_flags = "''extra_flags'" + "/float=g_float"
+$ ENDIF
$ ENDIF
$ IF be_case_sensitive
$ THEN
$ ccdlflags=""
$ cccdlflags=""
$!
+$! FIXME -- This section does not really handle all the different permutations
+$! of 64-bitness, and it does not provide for the /POINTER_SIZE=64 compiler
+$! option that would be necessary to support the "explicit 64-bit interfaces"
+$! promised by -Dusemorebits.
+$!
+$ usemorebits = "undef"
$ IF use64bitint .OR. use64bitint .EQS. "define"
$ THEN
$ use64bitint = "define"
-$ uselongdouble = "define"
-$ alignbytes="16"
-$ usemorebits = "define"
$ ivdformat="""Ld"""
$ uvuformat="""Lu"""
$ uvoformat="""Lo"""
$ uvXUformat="""LX"""
$ ELSE
$ use64bitint = "undef"
-$ uselongdouble = "undef"
-$ usemorebits = "undef"
$ ivdformat="""ld"""
$ uvuformat="""lu"""
$ uvoformat="""lo"""
$ ENDIF
$ IF uselongdouble .OR. uselongdouble .EQS. "define"
$ THEN
+$ uselongdouble = "define"
+$ alignbytes="16"
$ nveformat="""Le"""
$ nvfformat="""Lf"""
$ nvgformat="""Lg"""
$ ELSE
+$ uselongdouble = "undef"
$ nveformat="""e"""
$ nvfformat="""f"""
$ nvgformat="""g"""
$ ELSE d_mymalloc="undef"
$ ENDIF
$!
+$ usedevel="undef"
$ usedl="define"
$ startperl="""$ perl 'f$env(\""procedure\"")' \""'"+"'p1'\"" \""'"+"'p2'\"" \""'"+"'p3'\"" \""'"+"'p4'\"" \""'"+"'p5'\"" \""'"+"'p6'\"" \""'"+"'p7'\"" \""'"+"'p8'\""!\n"
$ startperl=startperl + "$ exit++ + ++$status!=0 and $exit=$status=undef; while($#ARGV != -1 and $ARGV[$#ARGV] eq '"+"'){pop @ARGV;}"""
$!
$ perllibs=libs
$!
-$! Are we 64 bit?
$!
-$ IF use64bitint .OR. use64bitint .EQS. "define"
+$ IF archname .NES. "VMS_VAX"
$ THEN
$ d_PRId64 = "define"
$ d_PRIu64 = "define"
$ d_quad = "define"
$ quadtype = "long long"
$ uquadtype = "unsigned long long"
-$ quadkind = "QUAD_IS_LONG_LONG"
+$ quadkind = "3"
+$!
$ d_frexpl = "define"
-$ d_isnan = "define"
-$ d_isnanl = "define"
$ d_modfl = "define"
$ d_modflproto = "define"
$ ELSE
$ sPRIu64 = ""
$ sPRIx64 = ""
$ d_quad = "undef"
-$ quadtype = "long"
-$ uquadtype = "unsigned long"
-$ quadkind = "QUAD_IS_LONG"
+$ quadtype = "undef"
+$ uquadtype = "undef"
+$ quadkind = "undef"
+$!
$ d_frexpl = "undef"
-$ d_isnan = "undef"
-$ d_isnanl = "undef"
$ d_modfl = "undef"
$ d_modflproto = "undef"
$ ENDIF
$!
+$ IF useieee .OR. useieee .EQS. "define"
+$ THEN
+$ d_isnan = "define"
+$ d_isnanl = "define"
+$ ELSE
+$ d_isnan = "undef"
+$ d_isnanl = "undef"
+$ ENDIF
+$!
$! Now some that we build up
$!
$ IF use_threads
$ GOSUB inhdr
$ i_unistd = tmp
$!
+$! Check to see if we've got utime.h (which we should use if we have)
+$!
+$ i_netdb = "undef"
+$ tmp = "utime.h"
+$ GOSUB inhdr
+$ i_utime = tmp
+$!
$! do we have getppid()?
$!
$ IF i_unistd .EQS. "define"
$ GOSUB inhdr
$ i_sysmode = tmp
$!
+$! Check for poll.h
+$!
+$ tmp = "sys/poll.h"
+$ gosub inhdr
+$ i_syspoll = tmp
+$!
$! Check for sys/access.h
$!
$ tmp = "sys/access.h"
$ WS "#if defined(F_SETLK) && defined(F_SETLKW)"
$ WS " struct flock flock;"
$ WS " int retval, fd;"
-$ WS " fd = open(""try.c"", O_RDONLY);"
+$ WS " fd = open(""[-]perl.c"", O_RDONLY);"
$ WS " flock.l_type = F_RDLCK;"
$ WS " flock.l_whence = SEEK_SET;"
$ WS " flock.l_start = flock.l_len = 0;"
$ GOSUB inlibc
$ d_strtoq = tmp
$!
-$! Check for strtoq
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "__int64 result;"
-$ WS "result = strtoq(""123123"", NULL, 10);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "strtoq"
-$ GOSUB inlibc
-$ d_strtoq = tmp
-$!
$! Check for strtold
$!
$ OS
$ uselargefiles = "undef"
$ ENDIF
$!
+$! Tests for hard link, symbolic links, and 7.3 + CRTL features
+$!
+$ d_lchown = "undef"
+$ d_link = "undef"
+$ d_lstat = "undef"
+$ d_readlink = "undef"
+$ d_symlink = "undef"
+$ d_realpath = "undef"
+$!
+$! Hard link support has been present since 7.3-1 except for the
+$! easy to use DCL test to see if hardlinks are enabled on the build
+$! disk. That would require more work to test, and I am only testing
+$! this on 8.2, so that is why the 8.2 test.
+$!
+$ IF (vms_ver .GES. "8.2") .AND. (archname .NES. "VMS_VAX")
+$ THEN
+$ IF f$getdvi("SYS$DISK","HARDLINKS_SUPPORTED")
+$ THEN
+$ echo "I Found 64 bit OpenVMS 8.2 or later, and hard links enabled on build disk."
+$ echo "I will build with hard link support"
+$ d_link = "define"
+$ ELSE
+$ echo "I Found 64 bit OpenVMS 8.2 or later, and hard links disabled on build disk."
+$ echo "I will not build with hard link support."
+$ ENDIF
+$ ELSE
+$ echo4 "I can not detect if your CRTL and build disk support hard links."
+$ echo4 "I am disabling hard link support."
+$ ENDIF
+$!
+$ IF uselargefiles .OR. uselargefiles .eqs. "define"
+$ THEN
+$ IF (vms_ver .GES. "8.2") .AND. (archname .NES. "VMS_VAX")
+$ THEN
+$ echo4 "Largefile support enabled, so enabling standard stat support too."
+$ usestdstat = "y"
+$ echo4 -
+ "Looking for the realpath() function to indicate symbolic link support..."
+$ OS
+$! WS "#include <stdlib.h>"
+$ WS "void exit(int foo);"
+$ WS "char *realpath(const char *file_name, char * resolved_name, ...);"
+$ WS "int main()"
+$ WS "{"
+$ WS "char result[255];"
+$ WS "realpath(""foo"",result);"
+$ WS "exit(0);"
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$ THEN
+$ echo -
+ "Found realpath() which indicates symbolic link support is present."
+$ d_lchown = "define"
+$ d_lstat = "define"
+$ d_readlink = "define"
+$ d_symlink = "define"
+$! d_realpath = "define" ! Perl will not put it in the config.h file?
+$! Perl apparently does not use a built in realpath() on other platforms,
+$! but there is a severe performance penatly on OpenVMS to use the Perl
+$! script that implements a realpath(). The d_symlink symbol is used
+$! as a replacement for the d_realpath since they are related and both
+$! were activated by the CRTL at the same time.
+$!
+$ ELSE
+$ echo4 "Your system does not support symbolic links."
+$ echo4 "I am disabling symbolic link support."
+$ ENDIF
+$ ELSE
+$ echo4 "Your system does not support symbolic links."
+$ echo4 "I am disabling symbolic link support."
+$ ENDIF
+$ ELSE
+$ IF (vms_ver .GES. "8.2") .AND. (archname .NES. "VMS_VAX")
+$ THEN
+$ echo4 "-Duselargefiles is required for symbolic link support."
+$ echo4 "You did not specify that, so I am disabling symbolic link support."
+$ ENDIF
+$ ENDIF
+$!
+$!
+$! Check for grp.h -- should be 7.3 and later, but test to be sure
+$!
+$ tmp = "grp.h"
+$ GOSUB inhdr
+$ i_grp = tmp
+$!
+$! VMS V7.3-2 powered options
+$! We know that it is only available for V7.3-2 and later on 64 bit platforms.
+$!
+$ d_getgrgid_r = "undef"
+$ getgrgid_r_proto = "0"
+$ d_getgrnam_r = "undef"
+$ getgrnam_r_proto = "0"
+$ d_getpgid = "undef"
+$ d_getpgrp = "undef"
+$! N.B. We already have home-grown thread-safe versions of
+$! getpwnam and getpwuid -- no need to use CRTL versions
+$ d_getpwnam_r = "undef"
+$ getpwnam_r_proto = "0"
+$ d_getpwuid_r = "undef"
+$ getpwuid_r_proto = "0"
+$ d_setgrent = "undef"
+$ d_ttyname_r = "undef"
+$ ttyname_r_proto = "0"
+$ d_snprintf = "undef"
+$ d_vsnprintf = "undef"
+$ if (vms_ver .GES. "7.3-2") .AND. (archname .NES. "VMS_VAX")
+$ then
+$ echo "Found 64 bit OpenVMS ''vms_ver' -- will build with V7.3-2 routines"
+$ d_getgrgid_r = "define"
+$ getgrgid_r_proto = "1"
+$ d_getgrnam_r = "define"
+$ getgrnam_r_proto = "1"
+$ if d_symlink .or. d_symlink .EQS. "define"
+$ then
+$! FIXME: Need to find how to activate this.
+$! d_getpgid = "define"
+$! d_getpgrp = "define"
+$ endif
+$ d_setgrent = "define"
+$ d_ttyname_r = "define"
+$ ttyname_r_proto = "1"
+$ d_snprintf = "define"
+$ d_vsnprintf = "define"
+$ endif
+$!
+$! VMS V7.3-2 powered options
+$! We know that it is only available for V7.3-2 and later on 64 bit platforms.
+$! Only implementing right now on 8.2 because that is what I am testing
+$! These functions may require POSIX UIDs/GIDs to be active, so I am
+$! not activating the features at this time, just preparing this file
+$! to easily use them in the future.
+$!
+$ d_seteuid = "undef"
+$ d_setpgid = "undef"
+$ d_setpgrp = "undef"
+$ d_setregid = "undef"
+$ d_setreuid = "undef"
+$ d_setsid = "undef"
+$ ! Disable this section for now.
+$!$ if (vms_ver .GES. "8.2") .AND. (archname .NES. "VMS_VAX")
+$ if .NOT. 1
+$ then
+$ echo "Found 64 bit OpenVMS ''vms_ver' -- will build with V7.3-2 UID setting routines"
+$ d_seteuid = "define"
+$ d_setpgid = "define"
+$ d_setpgrp = "define"
+$ d_setregid = "define"
+$ d_setreuid = "define"
+$ d_setsid = "define"
+$ endif
+$!
+$! VMS V8 powered options
+$! We know that it is only available for 8.2 and later on 64 bit platforms.
+$!
+$ d_fstatvfs = "undef"
+$! d_statvfs = "undef"
+$ i_sysstatvfs = "undef"
+$ if (vms_ver .GES. "8.2") .AND. (archname .NES. "VMS_VAX")
+$ then
+$ echo "Found 64 bit OpenVMS ''vms_ver' -- will build with 8.2 routines"
+$ d_fstatvfs = "define"
+$! d_statvfs = "define"
+$ i_sysstatvfs = "define"
+$ endif
+$!
$! Check rand48 and its ilk
$!
$ echo4 "Looking for a random number function..."
$ d_msync="define"
$ d_ualarm="define"
$ d_uname="define"
+$! d_unsetenv="define" ! Fix me - Activating requires changing VMS code
+$ d_unsetenv="undef" ! Change will be needed to allow GNV integration
+$ d_clearenv="undef"
$ d_usleep="define"
$ d_setitimer="define"
$ d_sigaction="define"
$ d_wait4="define"
$ d_index="define"
$ pidtype="pid_t"
-$ 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"
-$ 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"
-$ sig_name_init = psnwc1 + psnwc2 + psnwc3
-$ 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"
-$ sig_num_init="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"
-$ sig_size="36"
+$ sig_name1="ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE"
+$ sig_name2=" ALRM TERM USR1 USR2 NUM18 NUM19 CHLD CONT STOP TSTP TTIN TTOU DEBUG"
+$ IF (vms_ver .GES. "7.3")
+$ THEN
+$ sig_name2 = sig_name2 + " NUM27 WINCH"
+$ ENDIF
+$!* signal.h defines SIGRTMIN as 33 and SIGRTMAX as 64, but there is no
+$!* sigqueue function or other apparent means to do realtime signalling,
+$!* so let's not try to include the realtime range for now.
+$!* sig_name3=" NUM29 NUM30 NUM31 NUM32 RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43"
+$!* sig_name4=" NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58"
+$!* sig_name5=" NUM59 NUM60 NUM61 NUMT62 NUM63 RTMAX"
+$ sig_name = sig_name1 + sig_name2
+$ sig_num = ""
+$ sig_num_init = ""
+$ sig_name_init = ""
+$ sig_index = 0
+$!
+$ PARSE_SIG_NAME_LOOP:
+$!
+$ tmp = F$ELEMENT(sig_index, " ", sig_name)
+$ IF F$LENGTH(F$EDIT(tmp,"TRIM")) .eq. 0 THEN GOTO END_SIG_NAME_LOOP
+$ sig_name_init = sig_name_init + """''tmp'"","
+$ sig_num = sig_num + "''sig_index' "
+$ sig_num_init = sig_num_init + "''sig_index',"
+$ sig_index = sig_index + 1
+$ GOTO PARSE_SIG_NAME_LOOP
+$!
+$ END_SIG_NAME_LOOP:
+$!
+$ sig_name_init = sig_name_init + "0"
+$ sig_num_init = sig_num_init + "0"
+$ sig_size = "''sig_index'"
+$ sig_index = sig_index - 1
+$ sig_count = "''sig_index'"
$ uidtype="uid_t"
$ d_pathconf="define"
$ d_fpathconf="define"
$ d_msync="undef"
$ d_ualarm="undef"
$ d_uname="undef"
+$ d_unsetenv="undef"
+$ d_clearenv="undef"
$ d_usleep="undef"
$ d_setitimer="undef"
$ d_sigaction="undef"
$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"
$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
$ sig_size="19"
+$ sig_count="15"
+$ if (vms_ver .GES. "6.2") then sig_count="17"
$ uidtype="unsigned int"
$ d_pathconf="undef"
$ d_fpathconf="undef"
$ d_vms_do_sockets="define"
$ d_htonl="define"
$ d_socket="define"
+$ d_sockpair = "undef"
+$ if (vms_ver .GES. "8.2") .AND. (archname .NES. "VMS_VAX")
+$ then
+$ echo "Found 64 bit OpenVMS 8.2, will build with socketpair support"
+$ d_sockpair = "define"
+$ endif
$ d_select="define"
$ netdb_hlen_type="int"
$ netdb_host_type="char *"
$ d_vms_do_sockets="undef"
$ d_htonl="undef"
$ d_socket="undef"
+$ d_socketpair = "undef"
$ d_select="undef"
$ netdb_hlen_type="int"
$ netdb_host_type="char *"
$ THEN
$ ivtype = "''i64type'"
$ uvtype = "''u64type'"
-$ nvtype="long double"
$ ELSE
$ i64size="undef"
$ u64size="undef"
$ ENDIF
$!
+$ IF uselongdouble .OR. uselongdouble .EQS. "define"
+$ THEN
+$ nvtype="long double"
+$ ENDIF
+$!
$ tmp = "''ivtype'"
$ GOSUB type_size_check
$ ivsize = tmp
$ echo "(UV will be ""''uvtype'"", ''uvsize' bytes)"
$ echo "(NV will be ""''nvtype'"", ''nvsize' bytes)"
$!
-$ echo4 "Checking whether your NVs can preserve your UVs..."
+$ d_nv_preserves_uv = "undef"
+$ echo4 "Checking how many bits of your UVs your NVs can preserve..."
$ OS
$ WS "#if defined(__DECC) || defined(__DECCXX)"
$ WS "#include <stdlib.h>"
$ WS "#endif"
$ WS "#include <stdio.h>"
$ WS "int main() {"
-$ WS " ''uvtype' k = (''uvtype')~0, l;"
-$ WS " ''nvtype' d;"
-$ WS " l = k;"
-$ WS " d = (''nvtype')l;"
-$ WS " l = (''uvtype')d;"
-$ WS " if (l == k)"
-$ WS " printf(""preserve\n"");"
+$ WS " ''uvtype' u = 0;"
+$ WS " int n = 8 * ''uvsize';"
+$ WS " int i;"
+$ WS " for (i = 0; i < n; i++) {"
+$ WS " u = u << 1 | (''uvtype')1;"
+$ WS " if ((''uvtype')(''nvtype')u != u)"
+$ WS " break;"
+$ WS " }"
+$ WS " printf(""%d\n"", i);"
$ WS " exit(0);"
$ WS "}"
$ CS
$ GOSUB compile
-$ IF tmp .EQS. "preserve"
-$ THEN
+$ nv_preserves_uv_bits = tmp
+$ IF F$INTEGER(nv_preserves_uv_bits) .GE. (F$INTEGER(uvsize) * 8)
+$ THEN
$ d_nv_preserves_uv = "define"
-$ echo "Yes, they can."
-$ nv_preserves_uv_bits = F$STRING(F$INTEGER(uvsize) * 8)
+$ echo "Your NVs can preserve all ''nv_preserves_uv_bits' bits of your UVs."
$ ELSE
-$ d_nv_preserves_uv = "undef"
-$ echo "No, they can't."
-$ echo4 "Checking how many bits of your UVs your NVs can preserve..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main() {"
-$ WS " ''uvtype' u = 0;"
-$ WS " int n = 8 * ''uvsize';"
-$ WS " int i;"
-$ WS " for (i = 0; i < n; i++) {"
-$ WS " u = u << 1 | (''uvtype')1;"
-$ WS " if ((''uvtype')(''nvtype')u != u)"
-$ WS " break;"
-$ WS " }"
-$ WS " printf(""%d\n"", i);"
-$ WS " exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile
-$ nv_preserves_uv_bits = tmp
+$ d_nv_preserves_uv = "undef""
+$ echo "Your NVs can preserve only ''nv_preserves_uv_bits' bits of your UVs."
+$ ENDIF
+$!
+$ nv_overflows_integers_at = "0"
+$ echo4 "Checking to find the largest integer value your NVs can hold..."
+$ OS
+$ WS "#include <stdio.h>"
+$ WS ""
+$ WS "typedef ''nvtype' NV;"
+$ WS ""
+$ WS "int"
+$ WS "main() {"
+$ WS " NV value = 2;"
+$ WS " int count = 1;"
+$ WS ""
+$ WS " while(count < 256) {"
+$ WS " volatile NV up = value + 1.0;"
+$ WS " volatile NV negated = -value;"
+$ WS " volatile NV down = negated - 1.0;"
+$ WS " volatile NV got_up = up - value;"
+$ WS " int up_good = got_up == 1.0;"
+$ WS " int got_down = down - negated;"
+$ WS " int down_good = got_down == -1.0;"
+$ WS ""
+$ WS " if (down_good != up_good) {"
+$ WS " fprintf(stderr,"
+$ WS " ""Inconsistency - up %d %f; down %d %f; for 2**%d (%.20f)\n"","
+$ WS " up_good, (double) got_up, down_good, (double) got_down,"
+$ WS " count, (double) value);"
+$ WS " return 1;"
+$ WS " }"
+$ WS " if (!up_good) {"
+$ WS " while (1) {"
+$ WS " if (count > 8) {"
+$ WS " count -= 8;"
+$ WS " fputs(""256.0"", stdout);"
+$ WS " } else {"
+$ WS " count--;"
+$ WS " fputs(""2.0"", stdout);"
+$ WS " }"
+$ WS " if (!count) {"
+$ WS " puts("""");"
+$ WS " return 0;"
+$ WS " }"
+$ WS " fputs(""*"", stdout);"
+$ WS " }"
+$ WS " }"
+$ WS " value *= 2;"
+$ WS " ++count;"
+$ WS " }"
+$ WS " fprintf(stderr, ""Cannot overflow integer range, even at 2**%d (%.20f)\n"","
+$ WS " count, (double) value);"
+$ WS " return 1;"
+$ WS "}"
+$ CS
+$ GOSUB compile
+$ IF F$LENGTH(tmp) .GT. 0
+$ THEN
+$ IF F$EXTRACT(0,1,tmp) .EQS. "2"
+$ THEN
+$ echo "The largest integer your NVs can preserve is equal to ''tmp'"
+$ nv_overflows_integers_at = tmp
+$ ELSE
+$ echo "Cannot determine the largest integer value your NVs can hold, unexpected output"
+$ echo "''tmp'"
+$ ENDIF
+$ ELSE
+$ echo "Cannot determine the largest integer value your NVs can hold"
+$ ENDIF
+$!
+$! Check for signbit (must already know nvtype)
+$!
+$ echo4 "Checking to see if you have signbit() available to work on ''nvtype'..."
+$ OS
+$ WS "#if defined(__DECC) || defined(__DECCXX)"
+$ WS "#include <stdlib.h>"
+$ WS "#endif"
+$ WS "#include <fp.h>"
+$ WS "#include <stdio.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " ''nvtype' x = 0.0;"
+$ WS " ''nvtype' y = -0.0;"
+$ WS " if ((signbit(x) == 0) && (signbit(y) != 0))"
+$ WS " printf(""1\n"");"
+$ WS " else"
+$ WS " printf(""0\n"");"
+$ WS "}"
+$ CS
+$ GOSUB compile
+$ IF tmp .EQS. "1"
+$ THEN
+$ d_signbit = "define"
+$ echo4 "Yes."
+$ ELSE
+$ d_signbit = "undef"
+$ echo4 "Nope."
$ ENDIF
$!
$ echo4 "Checking if kill() uses SYS$FORCEX or can't be called from a signal handler..."
$ echo4 "Yep, we can."
$ kill_by_sigprc = "define"
$!
-$! since SIGBUS and SIGSEGV indistinguishable, make them the same here.
-$! sigusr1 and sigusr2 show up in VMS6.2 and later
+$! Use the same list of signals the CRTL does for recent systems, but cook our own for very old systems.
+$! Note that the list controls what signals can be caught by name as well as what can be raised via kill().
$!
-$ if vms_ver .GES. "6.2"
-$ then
-$ sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2"
-$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
-$ psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",0"
-$ sig_name_init = psnwc1 + psnwc2
-$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"
-$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
-$ sig_size="19"
-$ else
+$ if vms_ver .LTS. "6.2"
+$ then
+$! since SIGBUS and SIGSEGV indistinguishable, make them the same here.
$ sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT"
$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
$ psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",0"
$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6"
$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,0"
$ sig_size="17"
+$ sig_count="15"
$ endif
$ ELSE
$ echo4 "Nope, we can't."
$ WC "PERL_API_VERSION='" + api_version + "'"
$ WC "PERL_API_SUBVERSION='" + api_subversion + "'"
$ WC "PERL_PATCHLEVEL='" + perl_patchlevel + "'"
+$ WC "perl_patchlevel='" + perl_patchlevel + "'"
$ WC "PERL_CONFIG_SH='true'"
$ WC "_a='" + lib_ext + "'"
$ WC "_exe='" + exe_ext + "'"
$ WC "ccdlflags='" + ccdlflags + "'"
$ IF uselargefiles .OR. uselargefiles .EQS. "define"
$ THEN
-$ WC "ccflags='" + ccflags + "/Define=_LARGEFILE'"
+$ IF usestdstat .OR. usestdstat .EQS. "define"
+$ THEN
+$ ccdefines = "_USE_STD_STAT=1"
+$ ELSE
+$ ccdefines = "_LARGEFILE=1"
+$ ENDIF
+$ ELSE
+$ ccdefines = ""
+$ ENDIF
+$ IF ccdefines .NES. ""
+$ THEN
+$ WC "ccflags='" + ccflags + "/Define=" + ccdefines + "'"
$ ELSE
$ WC "ccflags='" + ccflags + "'"
$ ENDIF
$ WC "d_aintl='undef'"
$ WC "d_alarm='define'"
$ WC "d_archlib='define'"
+$ WC "d_asctime64='undef'"
$ WC "d_atolf='" + d_atolf + "'"
$ WC "d_atoll='" + d_atoll + "'"
-$ WC "d_attribut='" + d_attribut + "'"
+$ WC "d_attribute_format='" + d_attribut + "'"
+$ WC "d_attribute_deprecated='undef'"
+$ WC "d_attribute_malloc='undef'"
+$ WC "d_attribute_nonnull='undef'"
+$ WC "d_attribute_noreturn='undef'"
+$ WC "d_attribute_pure='undef'"
+$ WC "d_attribute_unused='undef'"
+$ WC "d_attribute_warn_unused_result='undef'"
+$ WC "d_printf_format_null='undef'"
$ WC "d_bcmp='" + d_bcmp + "'"
$ WC "d_bcopy='" + d_bcopy + "'"
$ WC "d_bincompat3='undef'"
$! WC "d_bsdpgrp='undef'"
$ WC "d_bsdgetpgrp='undef'"
$ WC "d_bsdsetpgrp='undef'"
+$ WC "d_builtin_choose_expr='undef'" ! GCC only
+$ WC "d_builtin_expect='undef'" ! GCC only
$ WC "d_bzero='" + d_bzero + "'"
$ WC "d_casti32='define'"
$ WC "d_castneg='define'"
$ WC "d_cmsghdr_s='undef'"
$ WC "d_const='define'"
$ WC "d_copysignl='define'"
+$ WC "d_cplusplus='" + d_cplusplus + "'"
$ WC "d_crypt='define'"
$ WC "d_csh='undef'"
+$ WC "d_ctermid='define'"
+$ WC "d_ctime64='undef'"
$ WC "d_cuserid='define'"
+$ WC "d_c99_variadic_macros='undef'"
$ WC "d_dbl_dig='define'"
$ WC "d_dbminitproto='undef'"
$ WC "d_difftime='define'"
+$ WC "d_difftime64='undef'"
+$ WC "d_dir_dd_fd='undef'"
$ WC "d_dirfd='undef'"
$ WC "d_dirnamlen='define'"
$ WC "d_dlerror='undef'"
$ WC "d_fseeko='" + d_fseeko + "'"
$ WC "d_fsetpos='define'"
$ WC "d_fstatfs='undef'"
-$ WC "d_fstatvfs='undef'"
+$ WC "d_fstatvfs='" + d_fstatvfs + "'"
$ WC "d_fsync='undef'"
$ WC "d_ftello='" + d_ftello + "'"
+$ WC "d_futimes='undef'"
+$ WC "d_gdbmndbm_h_uses_prototypes='undef'"
+$ WC "d_gdbm_ndbm_h_uses_prototypes='undef'"
+$ WC "d_getaddrinfo='undef'"
$ WC "d_getcwd='define'"
$ WC "d_getespwnam='undef'"
$ WC "d_getfsstat='undef'"
$ WC "d_getlogin='define'"
$ WC "d_getmnt='undef'"
$ WC "d_getmntent='undef'"
+$ WC "d_getnameinfo='undef'"
$ WC "d_getnbyaddr='" + d_getnbyaddr + "'"
$ WC "d_getnbyname='" + d_getnbyname + "'"
$ WC "d_getnent='" + d_getnent + "'"
$ WC "d_getpbyname='" + d_getpbyname + "'"
$ WC "d_getpbynumber='" + d_getpbynumber + "'"
$ WC "d_getpent='" + d_getpent + "'"
-$ WC "d_getpgid='undef'"
+$ WC "d_getpgid='" + d_getpgid + "'"
$ WC "d_getpgrp2='undef'"
-$ WC "d_getpgrp='undef'"
+$ WC "d_getpgrp='" + d_getpgrp + "'"
$ WC "d_getppid='" + d_getppid + "'"
$ WC "d_getprior='undef'"
$ WC "d_getprotoprotos='" + d_getprotoprotos + "'"
$ WC "d_getservprotos='" + d_getservprotos + "'"
$ WC "d_getspnam='undef'"
$ WC "d_gettimeod='" + d_gettimeod + "'"
+$ WC "d_gmtime64='undef'"
$ WC "d_gnulibc='undef'"
$ WC "d_grpasswd='undef'"
$ WC "d_hasmntopt='undef'"
$ WC "d_htonl='" + d_htonl + "'"
$ WC "d_ilogbl='undef'"
+$ WC "d_inc_version_list='undef'"
$ WC "d_index='" + d_index + "'"
$ WC "d_inetaton='undef'"
+$ WC "d_inetntop='undef'"
+$ WC "d_inetpton='undef'"
$ WC "d_int64_t='" + d_int64_t + "'"
$ WC "d_isascii='define'"
$ WC "d_isfinite='undef'"
$ WC "d_isnan='" + d_isnan + "'"
$ WC "d_isnanl='" + d_isnanl + "'"
$ WC "d_killpg='undef'"
-$ WC "d_lchown='undef'"
+$ WC "d_lchown='" + d_lchown + "'"
$ WC "d_ldbl_dig='define'"
-$ WC "d_link='undef'"
+$ WC "d_libm_lib_version='undef'"
+$ WC "d_link='" + d_link + "'"
$ WC "d_llseek='undef'"
+$ WC "d_localtime64='undef'"
$ WC "d_locconv='" + d_locconv + "'"
$ WC "d_lockf='undef'"
$ WC "d_longdbl='" + d_longdbl + "'"
$ WC "d_longlong='" + d_longlong + "'"
$ WC "d_lseekproto='define'"
-$ WC "d_lstat='undef'"
+$ WC "d_lstat='" + d_lstat + "'"
$ WC "d_madvise='undef'"
+$ WC "d_malloc_size='undef'"
+$ WC "d_malloc_good_size='undef'"
$ WC "d_mblen='" + d_mblen + "'"
$ WC "d_mbstowcs='" + d_mbstowcs + "'"
$ WC "d_mbtowc='" + d_mbtowc + "'"
$ WC "d_mkstemp='" + d_mkstemp + "'"
$ WC "d_mkstemps='" + d_mkstemps + "'"
$ WC "d_mktime='" + d_mktime + "'"
+$ WC "d_mktime64='undef'"
$ WC "d_mmap='" + d_mmap + "'"
$ WC "d_modfl='" + d_modfl + "'"
$ WC "d_modflproto='" + d_modflproto + "'"
$ WC "d_munmap='" + d_munmap + "'"
$ WC "d_mymalloc='" + d_mymalloc + "'"
$ WC "d_nanosleep='" + d_nanosleep + "'"
+$ WC "d_ndbm_h_uses_prototypes='undef'"
$ WC "d_nice='define'"
$ WC "d_nl_langinfo='" + d_nl_langinfo + "'"
$ WC "d_nv_preserves_uv='" + d_nv_preserves_uv + "'"
+$ WC "nv_overflows_integers_at='" + nv_overflows_integers_at + "'"
$ WC "nv_preserves_uv_bits='" + nv_preserves_uv_bits + "'"
+$ WC "d_nv_zero_is_allbits_zero='define'"
$ WC "d_off64_t='" + d_off64_t + "'"
$ WC "d_old_pthread_create_joinable='" + d_old_pthread_create_joinable + "'"
$ WC "d_oldarchlib='define'"
$ WC "d_pipe='define'"
$ WC "d_poll='" + d_poll + "'"
$ WC "d_procselfexe='undef'"
+$ WC "d_pseudofork='undef'"
$ WC "d_pthread_atfork='undef'"
$ WC "d_pthread_attr_setscope='" + d_pthread_attr_setscope + "'"
$ WC "d_pthread_yield='" + d_pthread_yield + "'"
$ WC "d_qgcvt='undef'"
$ WC "d_quad='" + d_quad + "'"
$ WC "d_readdir='define'"
-$ WC "d_readlink='undef'"
+$ WC "d_readlink='" + d_readlink + "'"
$ WC "d_readv='undef'"
-$ WC "d_realpath='undef'"
+$ WC "d_realpath='" + d_realpath + "'"
$ WC "d_recvmsg='undef'"
$ WC "d_rename='define'"
$ WC "d_rewinddir='define'"
$ WC "d_sendmsg='undef'"
$ WC "d_setegid='undef'"
$ WC "d_setenv='" + d_setenv + "'"
-$ WC "d_seteuid='undef'"
-$ WC "d_setgrent='undef'"
+$ WC "d_seteuid='" + d_seteuid + "'"
+$ WC "d_setgrent='" + d_setgrent + "'"
$ WC "d_setgrps='undef'"
$ WC "d_sethent='" + d_sethent + "'"
$ WC "d_setitimer='" + d_setitimer + "'"
$ WC "d_setlocale='" + d_setlocale + "'"
$ WC "d_setnent='" + d_setnent + "'"
$ WC "d_setpent='" + d_setpent + "'"
-$ WC "d_setpgid='undef'"
+$ WC "d_setpgid='" + d_setpgid + "'"
$ WC "d_setpgrp2='undef'"
-$ WC "d_setpgrp='undef'"
+$ WC "d_setpgrp='" + d_setpgrp + "'"
$ WC "d_setprior='undef'"
$ WC "d_setproctitle='" + d_setproctitle + "'"
$ WC "d_setpwent='define'"
-$ WC "d_setregid='undef'"
+$ WC "d_setregid='" + d_setregid + "'"
$ WC "d_setresgid='undef'"
$ WC "d_setresuid='undef'"
-$ WC "d_setreuid='undef'"
+$ WC "d_setreuid='" + d_setreuid + "'"
$ WC "d_setrgid='undef'"
$ WC "d_setruid='undef'"
$ WC "d_setsent='" + d_setsent + "'"
-$ WC "d_setsid='undef'"
+$ WC "d_setsid='" + d_setsid + "'"
$ WC "d_setvbuf='" + d_setvbuf + "'"
$ WC "d_sfio='undef'"
$ WC "d_shm='undef'"
$ WC "d_shmatprototype='undef'"
$ WC "d_sigaction='" + d_sigaction + "'"
+$ WC "d_signbit='" + d_signbit + "'"
$ WC "d_sigprocmask='" + d_sigprocmask + "'"
$ WC "d_sigsetjmp='" + d_sigsetjmp + "'"
+$ WC "d_sitearch='define'"
$ WC "d_sockatmark='undef'"
$ WC "d_sockatmarkproto='undef'"
$ WC "d_socket='" + d_socket + "'"
$ WC "d_socklen_t='" + d_socklen_t + "'"
-$ WC "d_sockpair='undef'"
+$ WC "d_sockpair='" + d_sockpair + "'"
$ WC "d_socks5_init='undef'"
+$ WC "d_sprintf_returns_strlen='define'"
$ WC "d_sqrtl='define'"
$ WC "d_sresgproto='undef'"
$ WC "d_sresgproto='undef'"
$ WC "d_strtol='define'"
$ WC "d_strtold='" + d_strtold + "'"
$ WC "d_strtoll='" + d_strtoll + "'"
-$ WC "d_strtoq='define'"
+$ WC "d_strtoq='" + d_strtoq + "'"
$ WC "d_strtoul='define'"
$ WC "d_strtoull='" + d_strtoull + "'"
$ WC "d_strtouq='" + d_strtouq + "'"
$ WC "d_strxfrm='" + d_strxfrm + "'"
$ WC "d_suidsafe='undef'"
-$ WC "d_symlink='undef'"
+$ WC "d_symlink='" + d_symlink + "'"
$ WC "d_syscall='undef'"
$ WC "d_syscallproto='undef'"
$ WC "d_sysconf='" + d_sysconf + "'"
$ WC "d_telldir='define'"
$ WC "d_telldirproto='define'"
$ WC "d_time='define'"
+$ WC "d_timegm='undef'"
$ WC "d_times='define'"
$ IF ("''F$EXTRACT(1,3, F$GETSYI(""VERSION""))'".GES."7.0")
$ THEN
$ WC "d_union_semun='undef'"
$ WC "d_unlink_all_versions='" + d_unlink_all_versions + "'" ! VMS-specific
$ WC "d_unordered='undef'"
+$ WC "d_unsetenv='" + d_unsetenv + "'"
+$ WC "d_clearenv='" + d_clearenv + "'"
$ WC "d_usleep='" + d_usleep + "'"
$ WC "d_usleepproto='" + d_usleep + "'"
$ WC "d_ustat='undef'"
$ WC "d_void_closedir='define'"
$ WC "d_volatile='define'"
$ WC "d_vprintf='define'"
+$ WC "d_vsnprintf='" + d_vsnprintf + "'"
$ WC "d_wait4='" + d_wait4 + "'"
$ WC "d_waitpid='define'"
$ WC "d_wcstombs='" + d_wcstombs + "'"
$ WC "dlsrc='dl_vms.c'"
$ WC "doublesize='" + doublesize + "'"
$ WC "drand01='" + drand01 + "'"
+$ WC "dtrace='" + "'"
$!
$! The extensions symbol may be quite long
$!
$ WC "i8size='" + i8size + "'"
$ WC "i8type='" + i8type + "'"
$ WC "i_arpainet='undef'"
+$ WC "i_assert='define'"
$ WC "i_crypt='undef'"
$ WC "i_db='undef'"
$ WC "i_dbm='undef'"
$ WC "i_float='define'"
$ WC "i_fp='undef'"
$ WC "i_fp_class='undef'"
-$ WC "i_grp='undef'"
+$ WC "i_gdbm='undef'"
+$ WC "i_gdbm_ndbm='undef'"
+$ WC "i_gdbmndbm='undef'"
+$ WC "i_grp='" + i_grp + "'"
$ WC "i_ieeefp='undef'"
$ WC "i_inttypes='" + i_inttypes + "'"
$ WC "i_langinfo='" + i_langinfo + "'"
$ WC "i_locale='" + i_locale + "'"
$ WC "i_machcthr='undef'"
$ WC "i_machcthreads='undef'"
+$ WC "i_mallocmalloc='undef'"
$ WC "i_math='define'"
$ WC "i_memory='undef'"
$ WC "i_mntent='undef'"
$ WC "i_sysmount='undef'"
$ WC "i_sysndir='undef'"
$ WC "i_sysparam='undef'"
+$ WC "i_syspoll='" + i_syspoll + "'"
$ WC "i_sysresrc='undef'"
$ WC "i_syssecrt='" + i_syssecrt + "'"
$ WC "i_sysselct='undef'"
$ WC "i_syssockio='undef'"
$ WC "i_sysstat='define'"
$ WC "i_sysstatfs='undef'"
-$ WC "i_sysstatvfs='undef'"
+$ WC "i_sysstatvfs='" + i_sysstatvfs + "'"
$ WC "i_systime='undef'"
$ WC "i_systimek='undef'"
$ WC "i_systimes='undef'"
$ WC "i_time='define'"
$ WC "i_unistd='" + i_unistd + "'"
$ WC "i_ustat='undef'"
-$ WC "i_utime='undef'"
+$ WC "i_utime='" + i_utime + "'"
$ WC "i_values='undef'"
$ WC "i_varargs='undef'"
$ WC "i_vfork='undef'"
$ WC "lseektype='int'"
$ ENDIF
$ WC "mab='" + "'"
+$ WC "mad='undef'"
$ WC "make='" + make + "'"
$ WC "malloctype='void *'"
$ WC "usemallocwrap='" + usemallocwrap + "'"
$ WC "netdb_host_type='" + netdb_host_type + "'"
$ WC "netdb_name_type='" + netdb_name_type + "'"
$ WC "netdb_net_type='" + netdb_net_type + "'"
+$ WC "nonxs_ext='" + nonxs_ext + "'"
$ WC "nveformat='" + nveformat + "'"
$ WC "nvfformat='" + nvfformat + "'"
$ WC "nvgformat='" + nvgformat + "'"
$ WC "ranlib='" + "'"
$ WC "rd_nodata=' '"
$ WC "revision='" + revision + "'"
+$ WC "sGMTIME_max='4294967295'"
+$ WC "sGMTIME_min='0'"
+$ WC "sLOCALTIME_max='4294967295'"
+$ WC "sLOCALTIME_min='0'"
$ WC "sPRId64='" + sPRId64 + "'"
$ WC "sPRIEldbl='" + sPRIEUldbl + "'"
$ WC "sPRIFldbl='" + sPRIFUldbl + "'"
$ WC "selectminbits='32'"
$ WC "selecttype='" + selecttype + "'"
$ WC "sh='MCR'"
+$ WC "sharpbang='#!'"
$ WC "shmattype='" + " '"
$ WC "shortsize='" + shortsize + "'"
-$ WC "shrplib='define'"
-$ WC "sig_name='" + sig_name + "'"
-$ tmp = "sig_name_init='" + sig_name_init + "'"
-$ WC/symbol tmp
-$ DELETE/SYMBOL tmp
+$ IF (f$length(sig_name) .GE. 244)
+$ THEN
+$ tmp = "sig_name='" + sig_name + "'"
+$ WC/symbol tmp
+$ DELETE/SYMBOL tmp
+$ ELSE
+$ WC "sig_name='" + sig_name + "'"
+$ ENDIF
+$ IF (f$length(sig_name_init) .GE. 244)
+$ THEN
+$ tmp = "sig_name_init='" + sig_name_init + "'"
+$ WC/symbol tmp
+$ DELETE/SYMBOL tmp
+$ ELSE
+$ WC "sig_name_init='" + sig_name_init + "'"
+$ ENDIF
$ WC "sig_num='" + sig_num + "'"
$ WC "sig_num_init='" + sig_num_init + "'"
+$ WC "sig_count='" + sig_count + "'"
$ WC "sig_size='" + sig_size + "'"
$ WC "signal_t='" + signal_t + "'"
$ WC "sitearch='" + sitearch + "'"
$ WC "stdio_ptr='((*fp)->_ptr)'"
$ WC "stdio_stream_array=' " + "'"
$ WC "subversion='" + subversion + "'"
+$ WC "targetarch='" + "'"
$ WC "timetype='" + timetype + "'"
$ WC "u16size='" + u16size + "'"
$ WC "u16type='" + u16type + "'"
$ WC "usedebugging_perl='"+use_debugging_perl+"'"
$ WC "usedefaulttypes='" + usedefaulttypes + "'" ! VMS-specific
$ WC "usecrosscompile='undef'"
+$ WC "usedevel='" + usedevel + "'"
$ WC "usedl='" + usedl + "'"
+$ WC "usedtrace='undef'"
$ WC "usefaststdio='" + usefaststdio + "'"
$ WC "useieee='" + useieee + "'" ! VMS-specific
$ WC "useithreads='" + useithreads + "'"
+$ WC "usekernelthreads='" + usekernelthreads + "'" ! VMS-specific
$ WC "uselargefiles='" + uselargefiles + "'"
$ WC "uselongdouble='" + uselongdouble + "'"
$ WC "usemorebits='" + usemorebits + "'"
$ WC "usereentrant='undef'"
$ WC "userelocatableinc='undef'"
$ WC "usesecurelog='" + usesecurelog + "'" ! VMS-specific
+$ WC "useshrplib='true'"
+$ WC "usesitecustomize='" + usesitecustomize + "'"
$ WC "usesocks='undef'"
$ WC "usethreads='" + usethreads + "'"
+$ WC "usethreadupcalls='" + usethreadupcalls + "'" ! VMS-specific
$ WC "usevendorprefix='" + "'" ! try to say no, though we'll be ignored as of MM 5.90_01
$ WC "usevfork='true'"
$ WC "usevmsdebug='" + usevmsdebug + "'" ! VMS-specific
$ WC "d_endpwent_r='undef'"
$ WC "d_endservent_r='undef'"
$ WC "d_getgrent_r='undef'"
-$ WC "d_getgrgid_r='undef'"
-$ WC "d_getgrnam_r='undef'"
+$ WC "d_getgrgid_r='" + d_getgrgid_r + "'"
+$ WC "d_getgrnam_r='" + d_getgrnam_r + "'"
$ WC "d_gethostbyaddr_r='undef'"
$ WC "d_gethostbyname_r='undef'"
$ WC "d_gethostent_r='undef'"
$ WC "d_getprotobynumber_r='undef'"
$ WC "d_getprotoent_r='undef'"
$ WC "d_getpwent_r='undef'"
-$ WC "d_getpwnam_r='undef'"
-$ WC "d_getpwuid_r='undef'"
+$ WC "d_getpwnam_r='" + d_getpwnam_r + "'"
+$ WC "d_getpwuid_r='" + d_getpwuid_r + "'"
$ WC "d_getservbyname_r='undef'"
$ WC "d_getservbyport_r='undef'"
$ WC "d_getservent_r='undef'"
$ WC "d_getspnam_r='undef'"
$ WC "d_gmtime_r='undef'" ! leave undef'd; we use my_gmtime
$ WC "d_localtime_r='undef'" ! leave undef'd; we use my_localtime
+$ WC "d_localtime_r_needs_tzset='undef'"
$ WC "d_random_r='undef'"
$ WC "d_readdir_r='define'" ! always defined; we roll our own
$ WC "d_readdir64_r='undef'"
$ WC "d_setprotoent_r='undef'"
$ WC "d_setpwent_r='undef'"
$ WC "d_setservent_r='undef'"
+$ WC "d_snprintf='" + d_snprintf + "'"
$ WC "d_srand48_r='undef'"
$ WC "d_srandom_r='undef'"
$ WC "d_strerror_r='undef'"
$ WC "d_tmpnam_r='undef'"
-$ WC "d_ttyname_r='undef'"
+$ WC "d_ttyname_r='" + d_ttyname_r + "'"
$ WC "ctermid_r_proto='0'"
$ WC "crypt_r_proto='0'"
$ WC "drand48_r_proto='0'"
$ WC "endpwent_r_proto='0'"
$ WC "endservent_r_proto='0'"
$ WC "getgrent_r_proto='0'"
-$ WC "getgrgid_r_proto='0'"
-$ WC "getgrnam_r_proto='0'"
+$ WC "getgrgid_r_proto='" + getgrgid_r_proto + "'"
+$ WC "getgrnam_r_proto='" + getgrnam_r_proto + "'"
$ WC "gethostbyaddr_r_proto='0'"
$ WC "gethostbyname_r_proto='0'"
$ WC "gethostent_r_proto='0'"
$ WC "srandom_r_proto='0'"
$ WC "strerror_r_proto='0'"
$ WC "tmpnam_r_proto='0'"
-$ WC "ttyname_r_proto='0'"
+$ WC "ttyname_r_proto='" + ttyname_r_proto + "'"
$!
$! ##END WRITE NEW CONSTANTS HERE##
$!
$! Okay, we've gotten here. Build munchconfig.exe
$ COPY/NOLOG [-.vms]munchconfig.c []
$ COPY/NOLOG [-.vms]'Makefile_SH' []
-$ 'Perl_CC' munchconfig.c
+$ 'Perl_CC' 'ccflags' munchconfig.c
$ IF Needs_Opt
$ THEN
$ OPEN/WRITE CONFIG []munchconfig.opt
$ IF use64bitall .OR. use64bitall .EQS. "define" THEN -
WC "#define USE_64_BIT_ALL"
$ IF be_case_sensitive THEN WC "#define VMS_WE_ARE_CASE_SENSITIVE"
+$ IF use_ieee_math THEN WC "#define USE_IEEE"
$ IF d_herrno .EQS. "undef" THEN WC "#define NEED_AN_H_ERRNO"
$ WC "#define HAS_ENVGETENV"
$ WC "#define PERL_EXTERNAL_GLOB"
$ ENDIF
$ IF uselargefiles .OR. uselargefiles .EQS. "define"
$ THEN
-$ LARGEFILE_REPLACE = "LARGEFILE=LARGEFILE=1"
+$ IF usestdstat .or. usestdstat .eqs. "define"
+$ THEN
+$ LARGEFILE_REPLACE = "LARGEFILE=LARGEFILE=_USE_STD_STAT=1"
+$ ELSE
+$ LARGEFILE_REPLACE = "LARGEFILE=LARGEFILE=_LARGEFILE=1"
+$ ENDIF
$ ELSE
$ LARGEFILE_REPLACE = "LARGEFILE="
$ ENDIF
+$!
+$! In order not to stress the tiny command buffer on pre-7.3-2 systems,
+$! we put the following substitutions in a file and pass the file to
+$! munchconfig.
+$!
+$ open/write CONFIG extra_subs.txt
+$ WC := write CONFIG
+$ WC "''DECC_REPLACE'"
+$ WC "''DECCXX_REPLACE'"
+$ WC "''ARCH_TYPE'"
+$ WC "''GNUC_REPLACE'"
+$ WC "''SOCKET_REPLACE'"
+$ WC "''THREAD_REPLACE'"
+$ WC "''C_Compiler_Replace'"
+$ WC "''MALLOC_REPLACE'"
+$ WC "''THREAD_UPCALLS'"
+$ WC "''THREAD_KERNEL'"
+$ WC "PV=''version'"
+$ WC "FLAGS=FLAGS=''extra_flags'"
+$ WC "''LARGEFILE_REPLACE'"
+$ close CONFIG
+$!
$ echo4 "Extracting ''defmakefile' (with variable substitutions)"
$ DEFINE/USER_MODE sys$output 'UUmakefile'
-$ mcr []munchconfig 'config_sh' 'Makefile_SH' "''DECC_REPLACE'" "''DECCXX_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" -
-"''SOCKET_REPLACE'" "''THREAD_REPLACE'" "''C_Compiler_Replace'" "''MALLOC_REPLACE'" -
-"''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'" "''LARGEFILE_REPLACE'"
+$ mcr []munchconfig 'config_sh' 'Makefile_SH' -f extra_subs.txt
$! Clean up after ourselves
$ DELETE/NOLOG/NOCONFIRM []munchconfig.exe;
-$!
-$ echo4 "Extracting make_ext.com (without variable substitutions)"
-$ Create Sys$Disk:[-]make_ext.com
-$ Deck/Dollar="$EndOfTpl$"
-$!++ make_ext.com
-$! NOTE: This file is extracted as part of the VMS configuration process.
-$! Any changes made to it directly will be lost. If you need to make any
-$! changes, please edit the template in Configure.Com instead.
-$ def = F$Environment("Default")
-$! p1 - how to invoke miniperl (passed in from descrip.mms)
-$ p1 = F$Edit(p1,"Upcase,Compress,Trim")
-$ If F$Locate("MCR ",p1).eq.0 Then p1 = F$Extract(3,255,p1)
-$ miniperl = "$" + F$Search(F$Parse(p1,".Exe"))
-$! p2 - how to invoke local make utility (passed in from descrip.mms)
-$ makeutil = p2
-$ if f$type('p2') .nes. "" then makeutil = 'p2'
-$! p3 - make target (passed in from descrip.mms)
-$ targ = F$Edit(p3,"Lowercase")
-$ sts = 1
-$ extensions = ""
-$ open/read CONFIG config.sh
-$ find_ext_loop:
-$ read/end=end_ext_loop CONFIG line
-$ if (f$extract(0,12,line) .NES. "extensions='")
-$ then goto find_ext_loop
-$ else extensions = f$extract(12,f$length(line),line) - "'"
-$ endif
-$ end_ext_loop:
-$ close CONFIG
-$ extensions = f$edit(extensions,"TRIM,COMPRESS")
-$ i = 0
-$ next_ext:
-$ ext = f$element(i," ",extensions)
-$ If ext .eqs. " " .or. ext .eqs. "" Then Goto done
-$ Define/User_mode Perl_Env_Tables CLISYM_LOCAL
-$ miniperl
-$ deck
- ($extdir = $ENV{'ext'}) =~ s/::/./g;
- $extdir =~ s#/#.#g;
- if ($extdir =~ /^vms/i) { $extdir =~ s/vms/.vms.ext/i; }
- else { $extdir = ".ext.$extdir"; }
- ($ENV{'extdir'} = "[$extdir]");
- ($ENV{'up'} = ('-') x ($extdir =~ tr/././));
-$ eod
-$ Set Default &extdir
-$ redesc = 0
-$ If F$Locate("clean",targ) .eqs. F$Length(targ)
-$ Then
-$ Write Sys$Output ""
-$ Write Sys$Output " Making ''ext' (dynamic)"
-$ On Error Then Goto done
-$ If F$Search("Descrip.MMS") .eqs. ""
-$ Then
-$ redesc = 1
-$ Else
-$ If F$CvTime(F$File("Descrip.MMS","rdt")) .lts. -
- F$CvTime(F$File("Makefile.PL","rdt")) Then redesc = 1
-$ EndIf
-$ Else
-$ Write Sys$Output "''targ'ing ''ext' . . ."
-$ On Error Then Continue
-$ EndIf
-$ If redesc Then -
- miniperl "-I[''up'.lib]" Makefile.PL "INST_LIB=[''up'.lib]" "INST_ARCHLIB=[''up'.lib]" "PERL_CORE=1"
-$ makeutil 'targ'
-$ i = i + 1
-$ Set Def &def
-$ Goto next_ext
-$ done:
-$ sts = $Status
-$ Set Def &def
-$ Exit sts
-$!-- make_ext.com
-$EndOfTpl$
+$ DELETE/NOLOG/NOCONFIRM []extra_subs.txt;
$!
$! Note that the /key qualifier to search, as in:
$! search README.* "=head"/key=(position=1)/window=0/output=extra.pods
$ 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 ''vms_prefix' ''prefix'"
+$! HP hack to make distributing binaries easier
+$!----------------------------------------------
+$ pcsi_producer = f$trnlnm("PCSI_PRODUCER")
+$ if pcsi_producer .eqs. ""
+$ then
+$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
+$ else
+$ WRITE CONFIG "$ myproc = f$environment(""PROCEDURE"")"
+$ WRITE CONFIG "$ myroot_dev = f$parse(myproc,,,""DEVICE"",""NO_CONCEAL"")"
+$ WRITE CONFIG "$ myroot_dir = f$parse(myproc,,,""DIRECTORY"",""NO_CONCEAL"")"
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - ""][000000."" - ""><000000."""
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - ""][000000]"" - ""><000000>"""
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - ""]["" - ""><"""
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - "".]"" - "".>"" - ""["" - ""]"" - ""<"" - "">"""
+$ WRITE CONFIG "$ if f$trnlnm(""HP_BUILD_PERL_BIN_KIT"",""LNM$PROCESS_TABLE"") .EQS. """""
+$ WRITE CONFIG "$ then"
+$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' 'myroot_dev'['myroot_dir'.]"
+$ WRITE CONFIG "$ endif"
+$ endif
$ WRITE CONFIG "$ ext = "".exe"""
$ IF sharedperl
$ THEN
$ WRITE CONFIG "$ set command ''vms_prefix':[000000]''packageup'.CLD"
$ ENDIF
$ ENDIF ! perl_symbol
-$ WRITE CONFIG "$ define/nolog pod2text ''vms_prefix':[lib.pod]pod2text.com"
-$ WRITE CONFIG "$ define/nolog pod2html ''vms_prefix':[lib.pod]pod2html.com"
-$ WRITE CONFIG "$ define/nolog pod2man ''vms_prefix':[lib.pod]pod2man.com"
$!
$ IF (tzneedset)
$ THEN
$ WRITE CONFIG "$! define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
$ ENDIF
$ WRITE CONFIG "$!"
-$ WRITE CONFIG "$! Symbols for commonly used programs:"
+$ WRITE CONFIG "$! Symbols for Perl-based utility programs:"
$ WRITE CONFIG "$!"
$ WRITE CONFIG "$ c2ph == """ + perl_setup_perl + " ''vms_prefix':[utils]c2ph.com"""
+$ WRITE CONFIG "$ config_data== """ + perl_setup_perl + " ''vms_prefix':[utils]config_data.com"""
+$ WRITE CONFIG "$ corelist == """ + perl_setup_perl + " ''vms_prefix':[utils]corelist.com"""
$ WRITE CONFIG "$ cpan == """ + perl_setup_perl + " ''vms_prefix':[utils]cpan.com"""
+$ WRITE CONFIG "$ cpan2dist == """ + perl_setup_perl + " ''vms_prefix':[utils]cpan2dist.com"""
+$! FIXME: "-" is an operator and illegal in a symbol name -- cpanp-run-perl can't work
+$!$ WRITE CONFIG "$ cpanp-run-perl == """ + perl_setup_perl + " ''vms_prefix':[utils]cpanp-run-perl.com"""
+$ WRITE CONFIG "$ cpanp == """ + perl_setup_perl + " ''vms_prefix':[utils]cpanp.com"""
$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
$ THEN
$ WRITE CONFIG "$ dprofpp == """ + perl_setup_perl + " ''vms_prefix':[utils]dprofpp.com"""
$ WRITE CONFIG "$ h2xs == """ + perl_setup_perl + " ''vms_prefix':[utils]h2xs.com"""
$ WRITE CONFIG "$ instmodsh == """ + perl_setup_perl + " ''vms_prefix':[utils]instmodsh.com"""
$ WRITE CONFIG "$ libnetcfg == """ + perl_setup_perl + " ''vms_prefix':[utils]libnetcfg.com"""
-$ WRITE CONFIG "$ perlbug == """ + perl_setup_perl + " ''vms_prefix':[lib]perlbug.com"""
-$ WRITE CONFIG "$!perlcc == """ + perl_setup_perl + " ''vms_prefix':[utils]perlcc.com"""
-$ WRITE CONFIG "$ perldoc == """ + perl_setup_perl + " ''vms_prefix':[lib.pod]perldoc.com -t"""
+$ WRITE CONFIG "$ perlbug == """ + perl_setup_perl + " ''vms_prefix':[utils]perlbug.com"""
+$ WRITE CONFIG "$ perldoc == """ + perl_setup_perl + " ''vms_prefix':[utils]perldoc.com """"-t"""""""
$ WRITE CONFIG "$ perlivp == """ + perl_setup_perl + " ''vms_prefix':[utils]perlivp.com"""
$ WRITE CONFIG "$ piconv == """ + perl_setup_perl + " ''vms_prefix':[utils]piconv.com"""
$ WRITE CONFIG "$ pl2pm == """ + perl_setup_perl + " ''vms_prefix':[utils]pl2pm.com"""
-$ WRITE CONFIG "$ pod2html == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2html"""
-$ WRITE CONFIG "$ pod2latex == """ + perl_setup_perl + " ''vms_prefix':[lib.pod]pod2latex.com"""
-$ WRITE CONFIG "$ pod2text == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2text"""
-$ WRITE CONFIG "$!pod2man == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2man"""
+$ WRITE CONFIG "$ pod2html == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2html.com"""
+$ WRITE CONFIG "$ pod2latex == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2latex.com"""
+$ WRITE CONFIG "$ pod2text == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2text.com"""
+$ WRITE CONFIG "$!pod2man == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2man.com"""
$ WRITE CONFIG "$ pod2usage == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2usage.com"""
$ WRITE CONFIG "$ podchecker == """ + perl_setup_perl + " ''vms_prefix':[utils]podchecker.com"""
$ WRITE CONFIG "$ podselect == """ + perl_setup_perl + " ''vms_prefix':[utils]podselect.com"""
+$ WRITE CONFIG "$ prove == """ + perl_setup_perl + " ''vms_prefix':[utils]prove.com"""
$ WRITE CONFIG "$ psed == """ + perl_setup_perl + " ''vms_prefix':[utils]psed.com"""
$ WRITE CONFIG "$ pstruct == """ + perl_setup_perl + " ''vms_prefix':[utils]pstruct.com"""
$ WRITE CONFIG "$ s2p == """ + perl_setup_perl + " ''vms_prefix':[utils]s2p.com"""
+$ WRITE CONFIG "$ ptar == """ + perl_setup_perl + " ''vms_prefix':[utils]ptar.com"""
+$ WRITE CONFIG "$ ptardiff == """ + perl_setup_perl + " ''vms_prefix':[utils]ptardiff.com"""
+$ WRITE CONFIG "$ shasum == """ + perl_setup_perl + " ''vms_prefix':[utils]shasum.com"""
$ WRITE CONFIG "$ splain == """ + perl_setup_perl + " ''vms_prefix':[utils]splain.com"""
$ WRITE CONFIG "$ xsubpp == """ + perl_setup_perl + " ''vms_prefix':[utils]xsubpp.com"""
$ CLOSE CONFIG