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


Reply via email to