develooper Front page | perl.perl5.porters | Postings from January 2001

[PATCH: perl@8585] handle extra.pods with shell script on VMS

From:
Peter Prymmer
Date:
January 31, 2001 10:54
Subject:
[PATCH: perl@8585] handle extra.pods with shell script on VMS
Message ID:
Pine.OSF.4.10.10101311038580.336633-100000@aspara.forte.com

Hi,

The idea behind the following patch was posted to the vmsperl list less
than a month ago.  Enclosed is a slightly revised patch that addresses two
distinct and unrelated issues:

   configure.com
      remove the use of the symbols Using_Dec_C, Using_Gnu_C, using_cxx
      and replace it with the new symbol ccname which in turn gets written
      to the config.sh hence also to the Config.pm.  This should put the
      VMS port in closer conformance to the POSIX ones.  For reference
      take a look at the entry for ccname in Porting/Glossary (er,
      [.porting]glossary.;1 )  The current legal values for ccname on
      VMS include qw(VAX DEC CXX GCC).  One could argue that 'CPQ' or
      'Compaq' should be legal for recent versions of what is
      colloquially known as DECC, but the qualifier remains CC/DECC at
      least for now and we already record ccversion.
      I used 'GCC' rather than 'gcc' since I'd think that someone porting
      a unix friendly Makefile.PL that made use of C<$Config{ccname} eq
      'gcc'> construct might be in for surprises while trying to link on
      VMS and the uppercase name helps be a tip off (this was a tough call
      to make).  Note that "VAX" and "GCC" are not currently supported
      hence may not ever be seen in a VMS Config.pm file.

      have configure.com spit out an extra_pods.com procedure that handles
      the podified README.$platform files in a fashion similar the the
      grep expression in Makefile.SH -> Makefile.  The extra_pods.com
      procedure was written to be portable to VMS V5 systems should the
      need arise.

   vms/descrip_mms.template
      Have the VMS Makefile use and clean up the new extra_pods.com
      procedure.

I note that after running `mms install` that I have two copies of
win32.pod in perl_root:[lib] and in perl_root:[lib.pod] but that is not
related to the new extra_pods.com, rather to a "bad" build rule in the
descrip.mms template that seems to precede the use of installperl.  There
is also a chdir(./) bug in installperl that I suspect is related to a
File::Find problem that this patch does not address either.

diff -ru perl.8585.orig/configure.com perl/configure.com
--- perl.8585.orig/configure.com	Sun Jan 28 10:24:28 2001
+++ perl/configure.com	Wed Jan 31 10:33:41 2001
@@ -135,9 +135,7 @@
 $ extractsh=""
 $ override=""
 $ knowitall=""
-$ Using_Dec_C = "n"
-$ Using_Gnu_C = "n"
-$ using_cxx = "n"
+$ ccname="VAX"
 $ Dec_C_Version = ""
 $ cxxversion = ""
 $ use_threads = "F"
@@ -1613,13 +1611,14 @@
 $   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 := Y
+$! CPQ ?
+$     ccname := DEC
 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $   IF F$LOCATE("cxx",F$EDIT(ans,"COLLAPSE,LOWERCASE")) .NE. F$LENGTH(ans)
 $   THEN
 $     Mcc = "cxx"
-$     using_cxx := Y
+$     ccname := CXX
 $     ld = ld_try
 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ELSE ! Not_cxx
@@ -1630,12 +1629,12 @@
 $       THEN 
 $         C_COMPILER_Replace = "CC=cc=''Mcc'"
 $       ELSE
-$         Using_Dec_C := Y
+$         ccname := DEC
 $       ENDIF
 $     ELSE
 $       IF Mcc .EQS. "cc/decc"
 $       THEN
-$         Using_Dec_C := Y
+$         ccname := DEC
 $         C_COMPILER_Replace = "CC=cc=''Mcc'"
 $       ENDIF
 $     ENDIF
@@ -1644,18 +1643,18 @@
 $   Mcc = dflt
 $   IF Mcc .EQS. "cc/decc"
 $   THEN
-$     Using_Dec_C := Y
+$     ccname := DEC
 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $   IF Mcc .EQS. "gcc"
 $   THEN
-$     Using_Gnu_C := Y
+$     ccname := GCC
 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $ ENDIF
 $Decc_Version_check:
 $ ccversion=""
-$ IF Using_Dec_C
+$ IF ccname .EQS. "DEC"
 $ THEN
 $   echo ""
 $   echo4 "Checking for the Dec C version number..."
@@ -1708,7 +1707,7 @@
 $ ENDIF
 $Gcc_check:
 $ gccversion = ""
-$ IF Using_Gnu_C
+$ IF ccname .EQS. "GCC"
 $ THEN
 $   vaxcrtl_olb = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
 $   vaxcrtl_exe = F$SEARCH("SYS$SHARE:VAXCRTL.EXE")
@@ -1815,14 +1814,14 @@
 $     ELSE 
 $       echo "You are using GNU cc ''line'"
 $       gccversion = line
-$       Using_Gnu_C := Y
+$       ccname := "GCC"
 $       C_COMPILER_Replace = "CC=cc=''Mcc'"
 $       GOTO Include_dirs
 $     ENDIF
 $   ENDIF
 $ ENDIF
 $Cxx_Version_check:
-$ IF using_cxx
+$ IF ccname .EQS. "CXX"
 $ THEN
 $   OPEN/WRITE CONFIG cxxvers.c
 $   WRITE CONFIG "#include <stdio.h>"
@@ -2047,7 +2046,8 @@
 $ ELSE
 $   Has_socketshr     = "F"
 $ ENDIF
-$ IF (Dec_C_Version .GE. 50200000) .or. using_cxx
+$ IF (ccname .EQS. "DEC" .AND. Dec_C_Version .GE. 50200000) .OR. -
+     (ccname .EQS. "CXX")
 $ THEN
 $   Has_Dec_C_Sockets = "T"
 $   echo ""
@@ -2183,7 +2183,7 @@
 $ ENDIF ! AXP && >= 7.1
 $!
 $! Ask about threads, if appropriate
-$ IF Using_Dec_C .OR. using_cxx
+$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
 $ THEN
 $   echo ""
 $   echo "This version of Perl can be built with threads. While really nifty,"
@@ -2391,7 +2391,7 @@
 $ 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"
-$ IF Using_Dec_C .OR. using_cxx
+$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
 $ THEN
 $   dflt = dflt + " POSIX"
 $ ENDIF
@@ -2708,11 +2708,11 @@
 $ IF F$LENGTH(Mcc) .EQ. 0 THEN Mcc := "cc"
 $ MCC = f$edit(mcc, "UPCASE")
 $ C_Compiler_Replace := "CC=CC=''Mcc'''ccflags'"
-$ IF Using_Dec_C
+$ IF ccname .EQS. "DEC"
 $ THEN
 $   Checkcc := "''Mcc'/prefix=all"
 $ ELSE
-$   IF using_cxx
+$   IF ccname .EQS. "CXX"
 $   THEN
 $     Checkcc := cxx
 $   ELSE
@@ -2797,7 +2797,7 @@
 $ ELSE
 $   libs=" "
 $ ENDIF
-$ IF Using_Dec_C .OR. using_cxx
+$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
 $ THEN
 $   libc="(DECCRTL)"
 $ ELSE
@@ -2916,7 +2916,7 @@
 $ DS := "delete/nolog/noconfirm []try.*;*"
 $ Needs_Opt := N
 $ good_compile = %X10B90001
-$ IF Using_Gnu_C
+$ IF ccname .EQS. "GCC"
 $ THEN
 $   open/write OPTCHAN []try.opt
 $   write OPTCHAN "Gnu_CC:[000000]gcclib.olb/library"
@@ -2925,7 +2925,7 @@
 $   Needs_Opt := Y
 $   good_compile = %X10000001
 $ ENDIF
-$ IF using_cxx
+$ IF ccname .EQS. "CXX"
 $ THEN
 $   good_compile = %X15F60001
 $ ENDIF
@@ -4478,7 +4478,7 @@
 $ IF F$SEARCH("try.exe").NES."" THEN DELETE/NOLOG/NOCONFIRM try.exe;*
 $ IF F$SEARCH("try.opt").NES."" THEN DELETE/NOLOG/NOCONFIRM try.opt;*
 $ IF F$SEARCH("try.out").NES."" THEN DELETE/NOLOG/NOCONFIRM try.out;*
-$ IF using_cxx
+$ IF ccname .EQS. "CXX"
 $ THEN
 $   CALL Cxx_demangler_cleanup
 $ ENDIF
@@ -4486,7 +4486,7 @@
 $! Some that are compiler or VMS version sensitive
 $!
 $! Gnu C stuff
-$ IF Using_Gnu_C
+$ IF ccname .EQS. "GCC"
 $ THEN
 $   d_attribut="define"
 $   vms_cc_type="gcc"
@@ -4496,7 +4496,8 @@
 $ ENDIF
 $!
 $! Dec C >= 5.2 and VMS ver >= 7.0
-$ IF (Using_Dec_C).AND.(F$INTEGER(Dec_C_Version).GE.50200000).AND.(vms_ver .GES. "7.0")
+$ IF (ccname .EQS. "DEC") .AND. -
+     (F$INTEGER(Dec_C_Version).GE.50200000) .AND. (vms_ver .GES. "7.0")
 $ THEN
 $   d_bcmp="define"
 $   d_gettimeod="define"
@@ -4547,7 +4548,7 @@
 $ ENDIF
 $!
 $! Dec C alone
-$ IF Using_Dec_C
+$ IF ccname .EQS. "DEC"
 $ THEN
 $   d_mbstowcs="define"
 $   d_mbtowc="define"
@@ -4608,7 +4609,7 @@
 $   d_getnetprotos="define"
 $   d_getprotoprotos="define"
 $   d_getservprotos="define"
-$   IF Using_Dec_C .OR. using_cxx
+$   IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
 $   THEN
 $     socksizetype="unsigned int"
 $   ELSE
@@ -4805,12 +4806,12 @@
 $!
 $ myuname="''osname' ''myname' ''osvers' ''F$EDIT(hwname, "TRIM")'"
 $!
-$ IF Using_Dec_C .AND. (.NOT. using_cxx)
+$ IF ccname .EQS. "DEC"
 $ THEN
 $   ccflags="/Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=''obj_ext'/NoList''ccflags'"
 $ ENDIF
 $ i_dirent = "undef"
-$ IF using_cxx
+$ IF ccname .EQS. "CXX"
 $ THEN
 $   i_dirent = "define"
 $   ccflags="/Include=[]/Standard=ANSI/Prefix=All/Obj=''obj_ext'/NoList''ccflags'"
@@ -4868,6 +4869,7 @@
 $ WC "cccdlflags='" + cccdlflags + "'"
 $ WC "ccdlflags='" + ccdlflags + "'"
 $ WC "ccflags='" + ccflags + "'"
+$ WC "ccname='" + ccname + "'"
 $ WC "ccversion='" + ccversion + "'"
 $ WC "cf_by='" + cf_by + "'"
 $ WC "cf_email='" + cf_email + "'"
@@ -5480,7 +5482,7 @@
 $ IF Needs_Opt
 $ THEN
 $   OPEN/WRITE CONFIG []munchconfig.opt
-$   IF Using_Gnu_C
+$   IF ccname .EQS. "GCC"
 $   THEN
 $     WRITE CONFIG "Gnu_CC:[000000]gcclib.olb/library"
 $   ENDIF
@@ -5493,7 +5495,7 @@
 $ ENDIF
 $ IF F$SEARCH("munchconfig.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.obj;
 $ IF F$SEARCH("munchconfig.c") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.c;
-$ IF using_cxx
+$ IF ccname .EQS. "CXX"
 $ THEN
 $   CALL Cxx_demangler_cleanup
 $ ENDIF
@@ -5543,7 +5545,7 @@
 $ IF mymalloc THEN WC "#define EMBEDMYMALLOC"
 $ IF use_pack_malloc THEN WC "#define PACK_MALLOC"
 $ IF use_debugmalloc THEN WC "#define DEBUGGING_MSTATS"
-$ IF Using_Gnu_C THEN WC "#define GNUC_ATTRIBUTE_CHECK"
+$ IF ccname .EQS. "GCC" THEN WC "#define GNUC_ATTRIBUTE_CHECK"
 $ IF (Has_Dec_C_Sockets)
 $ THEN
 $    WC "#define VMS_DO_SOCKETS"
@@ -5581,19 +5583,19 @@
 $ DELETE/NOLOG [-]CONFIG.LOCAL;*
 $ DELETE/NOLOG [-]CONFIG.FDL;*
 $!
-$ IF Using_Dec_C
+$ IF ccname .EQS. "DEC"
 $ THEN
 $   DECC_REPLACE = "DECC=decc=1"
 $ ELSE
 $   DECC_REPLACE = "DECC="
 $ ENDIF
-$ IF using_cxx
+$ IF ccname .EQS. "CXX"
 $ THEN
 $   DECCXX_REPLACE = "DECCXX=DECCXX=1"
 $ ELSE
 $   DECCXX_REPLACE = "DECCXX="
 $ ENDIF
-$ IF Using_Gnu_C
+$ IF ccname .EQS. "GCC"
 $ THEN
 $   GNUC_REPLACE = "GNUC=gnuc=1"
 $ ELSE
@@ -5695,6 +5697,49 @@
 $!-- make_ext.com
 $EndOfTpl$
 $!
+$! Note that the /key qualifier to search, as in:
+$! search README.* "=head"/key=(position=1)/window=0/output=extra.pods
+$! is not supported on VMS V5.5-2, hence not used in extra_pods.com.
+$!
+$ echo4 "Extracting extra_pods.com (without variable substitutions)"
+$ Create Sys$Disk:[-]extra_pods.com
+$ Deck/Dollar="$EOExtra_Pods$"
+$!++ extra_pods.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.
+$!   Use FORCE if you've just podified a README.* file on VMS.
+$ if f$search("extra.pods") .eqs. "" .or. P1 .eqs. "FORCE" then -
+    search README.* "=head"/window=0/output=extra.pods
+$ open/read/error=extra_close EXTRA extra.pods
+$extra_loop:
+$ read/error=extra_close/END_OF_FILE=extra_close EXTRA file
+$ file_type = f$parse(file,,,"TYPE",) - "."
+$ if file_type .nes. "VMS" .and. file_type .nes. "vms"
+$ then
+$   pod_file = "[.pod]perl''file_type'.pod"
+$   file = file - "''f$parse(file,,,"VERSION",)'"
+$   if p1 .eqs. "CLEAN"
+$   then if f$search(pod_file) .nes. "" then delete/log 'pod_file';*
+$   else
+$     do_copy := false
+$     if f$search(pod_file) .eqs. ""
+$     then do_copy := true
+$     else
+$       file_rdt = f$cvtime(f$file_attributes(file,"RDT"))
+$       pod_file_rdt = f$cvtime(f$file_attributes(pod_file,"RDT"))
+$       if file_rdt .GTS. pod_file_rdt then do_copy := true
+$     endif
+$     if do_copy then copy/log/noconfirm 'file' 'pod_file'
+$   endif
+$ endif
+$ goto extra_loop
+$extra_close:
+$ close EXTRA
+$ if p1 .eqs. "CLEAN" .and. f$search("extra.pods;-1") .nes. "" then -
+    purge/nolog extra.pods
+$!-- extra_pods.com
+$EOExtra_Pods$
 $!
 $!  Warn of dangerous symbols or logical names
 $!
diff -ru perl.8585.orig/vms/descrip_mms.template perl/vms/descrip_mms.template
--- perl.8585.orig/vms/descrip_mms.template	Sun Jan 28 10:27:57 2001
+++ perl/vms/descrip_mms.template	Wed Jan 31 10:31:27 2001
@@ -353,7 +353,7 @@
 .endif
 base : miniperl perl
 	@ $(NOOP)
-extras : dynext libmods utils podxform
+extras : dynext libmods utils podxform extra.pods
 	@ $(NOOP)
 libmods : $(LIBPREREQ)
 	@ $(NOOP)
@@ -363,6 +363,8 @@
 	@ $(NOOP)
 x2p : [.x2p]a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com 
 	@ $(NOOP)
+extra.pods : miniperl
+	@ @extra_pods.com
 
 pod0 = [.lib.pod]perl.pod [.lib.pod]perl5004delta.pod [.lib.pod]perl5005delta.pod
 pod1 = [.lib.pod]perlapi.pod [.lib.pod]perlapio.pod [.lib.pod]perlbook.pod
@@ -1276,6 +1278,7 @@
 	- If F$Search("[.VMS.Ext...]*.C").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*.C;*
 	- If F$Search("[.VMS.Ext...]*$(O)").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*$(O);*
 	- If F$Search("[.pod]*.com").nes."" Then Delete/NoConfirm/Log [.pod]*.com;*
+	- @extra_pods CLEAN
 
 realclean : clean
 	- @make_ext "$(dynamic_ext)" "$(MINIPERL_EXE)" "$(MMS)" realclean
@@ -1286,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("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;*
 	- If F$Search("[.Lib]DynaLoader.pm").nes."" Then Delete/NoConfirm/Log [.Lib]DynaLoader.pm;*
End of Patch.

I guess I'll try to build the 5.6.1 trail2 now.

Peter Prymmer






nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About