The time has apparently come to get rid of the attempt to pass
a list of extensions to build to the make_ext.com script.
The enclosed patch introduces a new extensions.lis file to the
main build directory and re-writes make_ext.com to use it
in place of p1. I've also included a VMS portability patch for
ext/Cwd/Cwd/xs.
Are there any questions or comments on this approach? I thought I'd
let vmsperl mull it over before I send into p5p + pumpkings.
I am fairly certain that there is a newer kit than perl@9718 that may
require patching...
diff -ru perl.9718/configure.com perl/configure.com
--- perl.9718/configure.com Thu Apr 12 16:39:12 2001
+++ perl/configure.com Wed Apr 18 19:18:11 2001
@@ -591,24 +591,68 @@
$!
$myread:
$ ans = ""
+$ len_rp = F$LENGTH(rp)
$ If (fastread)
$ Then
-$ echo4 "''rp'"
+$ IF len_rp .GT. 210
+$ THEN
+$ i_rp = 0
+$ fastread_rp_loop:
+$ sub_rp = F$EXTRACT(i_rp,80,rp)
+$ echo4 "''sub_rp'"
+$ i_rp = i_rp + 80
+$ IF i_rp .LT. len_rp THEN GOTO fastread_rp_loop
+$ ELSE
+$ echo4 "''rp'"
+$ ENDIF
$ Else
$ If (.NOT. silent) Then echo ""
-$ READ SYS$COMMAND/PROMPT="''rp'" ans
+$ IF len_rp .GT. 210
+$ THEN
+$ i_rp = 0
+$ firstread_rp_loop:
+$ sub_rp = F$EXTRACT(i_rp,80,rp)
+$ echo4 "''sub_rp'"
+$ i_rp = i_rp + 80
+$ IF i_rp .LT. len_rp THEN GOTO firstread_rp_loop
+$ READ SYS$COMMAND/PROMPT="''sub_rp'" ans
+$ ELSE
+$ READ SYS$COMMAND/PROMPT="''rp'" ans
+$ ENDIF
$ IF (ans .EQS. "&-d")
$ THEN
$ echo4 "(OK, I will run with -d after this question.)"
$ IF (.NOT. silent) THEN echo ""
-$ READ SYS$COMMAND/PROMPT="''rp'" ans
+$ IF len_rp .GT. 210
+$ THEN
+$ i_rp = 0
+$ secondread_rp_loop:
+$ sub_rp = F$EXTRACT(i_rp,80,rp)
+$ echo4 "''sub_rp'"
+$ i_rp = i_rp + 80
+$ IF i_rp .LT. len_rp THEN GOTO secondread_rp_loop
+$ READ SYS$COMMAND/PROMPT="''sub_rp'" ans
+$ ELSE
+$ READ SYS$COMMAND/PROMPT="''rp'" ans
+$ ENDIF
$ fastread := yes
$ ENDIF
$ IF (ans .EQS. "&-s")
$ THEN
$ echo4 "(OK, I will run with -s after this question.)"
$ echo ""
-$ READ SYS$COMMAND/PROMPT="''rp'" ans
+$ IF len_rp .GT. 210
+$ THEN
+$ i_rp = 0
+$ thirdread_rp_loop:
+$ sub_rp = F$EXTRACT(i_rp,80,rp)
+$ echo4 "''sub_rp'"
+$ i_rp = i_rp + 80
+$ IF i_rp .LT. len_rp THEN GOTO thirdread_rp_loop
+$ READ SYS$COMMAND/PROMPT="''sub_rp'" ans
+$ ELSE
+$ READ SYS$COMMAND/PROMPT="''rp'" ans
+$ ENDIF
$ silent := true
$ GOSUB Shut_up
$ ENDIF
@@ -2395,8 +2439,16 @@
$ echo "SDBM_File if you have the GDBM library built on your machine."
$ echo ""
$ echo "Which modules do you want to build into perl?"
-$! we need to add Byteloader to this list:
-$ dflt = "re Fcntl Encode Errno File::Glob Filter::Util::Call IO Opcode Devel::Peek
Devel::DProf Data::Dumper attrs VMS::Stdio VMS::DCLsym B SDBM_File Storable Thread
Sys::Hostname Digest::MD5 PerlIO::Scalar MIME::Base64 XS::Typemap Time::HiRes"
+$! we need to add to this list:
+$! Byteloader, DB_File, and Sys::Syslog (conditionally and with porting).
+$! N.B. Socket may already be statically linked in alongside DynaLoader in
+$! a VMS unique way.
+$ dflt = "re B Cwd Data::Dumper Devel::DProf Devel::Peek "
+$ dflt = dflt + "Digest::MD5 Encode Errno Fcntl File::Glob Filter::Util::Call "
+$ dflt = dflt + "IO List::Util MIME::Base64 Opcode PerlIO::Scalar PerlIO::Via "
+$ dflt = dflt + "SDBM_File "
+$ dflt = dflt + "Storable Sys::Hostname Thread Time::HiRes VMS::DCLsym "
+$ dflt = dflt + "VMS::Stdio XS::Typemap attrs"
$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
$ THEN
$ dflt = dflt + " POSIX"
@@ -5212,13 +5264,23 @@
$ WC "dlsrc='dl_vms.c'"
$ WC "doublesize='" + doublesize + "'"
$ WC "drand01='" + drand01 + "'"
-$ WC "dynamic_ext='" + extensions + "'"
+$!
+$! The extensions symbol may be quite long
+$!
+$ tmp = "dynamic_ext='" + extensions + "'"
+$ WC/symbol tmp
+$ DELETE/SYMBOL tmp
$ WC "eagain=' '"
$ WC "ebcdic='undef'"
$ WC "embedmymalloc='" + mymalloc + "'"
$ WC "eunicefix=':'"
$ WC "exe_ext='" + exe_ext + "'"
-$ WC "extensions='" + extensions + "'"
+$!
+$! The extensions symbol may be quite long
+$!
+$ tmp = "extensions='" + extensions + "'"
+$ WC/symbol tmp
+$ DELETE/SYMBOL tmp
$ WC "fflushNULL='define'"
$ WC "fflushall='undef'"
$ WC "fpostype='fpos_t'"
@@ -5329,7 +5391,12 @@
$ WC "ivdformat='" + ivdformat + "'"
$ WC "ivsize='" + ivsize + "'"
$ WC "ivtype='" + ivtype + "'"
-$ WC "known_extensions='" + known_extensions + "'"
+$!
+$! The known_extensions symbol may be quite long
+$!
+$ tmp = "known_extensions='" + known_extensions + "'"
+$ WC/symbol tmp
+$ DELETE/SYMBOL tmp
$ WC "ld='" + ld + "'"
$ WC "lddlflags='/Share'"
$ WC "ldflags='" + ldflags + "'"
@@ -5658,6 +5725,25 @@
"''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'"
$! Clean up after ourselves
$ DELETE/NOLOG/NOCONFIRM []munchconfig.exe;
+$!
+$! Now write out the extensions.lis file to be used by make_ext.com
+$! (an external file is used to overcome the 252 char limit in parameter
+$! passing from mms to the make_ext.com procedure).
+$!
+$ echo4 "Extracting extensions.lis (with variable substitutions)"
+$ open/write CONFIG [-]extensions.lis
+$ i = 0
+$extensions_lis_loop:
+$ tmp = F$ELEMENT(i," ",extensions)
+$ i = i + 1
+$ IF tmp .NES. "" .AND. tmp .NES. " "
+$ THEN
+$ write CONFIG tmp
+$ goto extensions_lis_loop
+$ ENDIF
+$ close CONFIG
+$ DELETE/SYMBOL tmp
+$!
$ echo4 "Extracting make_ext.com (without variable substitutions)"
$ Create Sys$Disk:[-]make_ext.com
$ Deck/Dollar="$EndOfTpl$"
@@ -5666,17 +5752,18 @@
$! 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")
-$ exts1 = F$Edit(p1,"Compress")
-$ p2 = F$Edit(p2,"Upcase,Compress,Trim")
-$ If F$Locate("MCR ",p2).eq.0 Then p2 = F$Extract(3,255,p2)
-$ miniperl = "$" + F$Search(F$Parse(p2,".Exe"))
-$ makeutil = p3
-$ if f$type('p3') .nes. "" then makeutil = 'p3'
-$ targ = F$Edit(p4,"Lowercase")
+$ 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"))
+$ makeutil = p2
+$ if f$type('p2') .nes. "" then makeutil = 'p2'
+$ targ = F$Edit(p3,"Lowercase")
+$ sts = 1
+$ open/read extensions_lis extensions.lis
$ i = 0
$ next_ext:
-$ ext = F$Element(i," ",p1)
-$ If ext .eqs. " " Then Goto done
+$ read/end_of_file=done/error=done extensions_lis ext
+$ If ext .eqs. " " .or. ext .eqs. "" Then Goto done
$ Define/User_mode Perl_Env_Tables CLISYM_LOCAL
$ miniperl
$ deck
@@ -5708,11 +5795,12 @@
$ If redesc Then -
miniperl "-I[''up'.lib]" Makefile.PL "INST_LIB=[''up'.lib]"
"INST_ARCHLIB=[''up'.lib]"
$ makeutil 'targ'
+$ sts = $Status
$ i = i + 1
$ Set Def &def
$ Goto next_ext
$ done:
-$ sts = $Status
+$ close extensions_lis
$ Set Def &def
$ Exit sts
$!-- make_ext.com
diff -ru perl.9718/ext/Cwd/Cwd.xs perl/ext/Cwd/Cwd.xs
--- perl.9718/ext/Cwd/Cwd.xs Fri Mar 30 14:56:41 2001
+++ perl/ext/Cwd/Cwd.xs Wed Apr 18 19:18:47 2001
@@ -85,10 +85,14 @@
pathlen += (namelen + 1);
++i;
+#ifdef VOID_CLOSEDIR
+ PerlDir_close(dir);
+#else
if (PerlDir_close(dir) < 0) {
Safefree(names);
return FALSE;
}
+#endif
}
Newz(0, path, pathlen + 1, char);
diff -ru perl.9718/vms/descrip_mms.template perl/vms/descrip_mms.template
--- perl.9718/vms/descrip_mms.template Mon Mar 5 18:07:26 2001
+++ perl/vms/descrip_mms.template Wed Apr 18 19:18:26 2001
@@ -497,7 +497,7 @@
@ Rename/Log xsloader.pm [.ext.dynaloader]
dynext : $(LIBPREREQ) $(DBG)perlshr$(E)
- @make_ext "$(dynamic_ext)" "$(MINIPERL_EXE)" "$(MMS)"
+ @make_ext "$(MINIPERL_EXE)" "$(MMS)"
[.lib]vmsish.pm : [.vms.ext]vmsish.pm
Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
@@ -1255,7 +1255,7 @@
- If F$Search("[.lib.pod]*.com;-1").nes."" Then Purge/NoConfirm/Log
[.lib.pod]*.com
clean : tidy cleantest
- - @make_ext "$(dynamic_ext)" "$(MINIPERL_EXE)" "$(MMS)" clean
+ - @make_ext "$(MINIPERL_EXE)" "$(MMS)" clean
- If F$Search("*.Opt").nes."" Then Delete/NoConfirm/Log
*.Opt;*/Exclude=PerlShr_*.Opt
- If F$Search("[...]*$(O);*") .nes."" Then Delete/NoConfirm/Log [...]*$(O);*
- If F$Search(F$Parse("Sys$Disk:[]","$(SOCKH)")).nes."" Then
Delete/NoConfirm/Log $(SOCKH);*
@@ -1281,7 +1281,7 @@
- @extra_pods CLEAN
realclean : clean
- - @make_ext "$(dynamic_ext)" "$(MINIPERL_EXE)" "$(MMS)" realclean
+ - @make_ext "$(MINIPERL_EXE)" "$(MMS)" realclean
- If F$Search("*$(OLB)").nes."" Then Delete/NoConfirm/Log *$(OLB);*
- If F$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*
- If F$Search("Config.H").nes."" Then Delete/NoConfirm/Log Config.H;*
@@ -1289,6 +1289,7 @@
- $(MINIPERL) -e "use File::Path; rmtree(\@ARGV,1,0);" config
- If F$Search("Descrip.MMS").nes."" Then Delete/NoConfirm/Log Descrip.MMS;*
- If F$Search("make_ext.Com").nes."" Then Delete/NoConfirm/Log make_ext.Com;*
+ - If F$Search("extensions.lis").nes."" Then Delete/NoConfirm/Log
+extensions.lis;*
- If F$Search("extra_pods.Com").nes."" Then Delete/NoConfirm/Log
extra_pods.Com;*
- $(MINIPERL) -e "use File::Path;
rmtree(['lib/auto','lib/VMS','lib/$(ARCH)'],1,0);"
- If F$Search("*.TS").nes."" Then Delete/NoConfirm/Log *.TS;*
End of Possible patch
Peter Prymmer