"Craig A. Berry" <[EMAIL PROTECTED]> wrote on 09/25/2003 01:33:52 AM:

> All filenames in the Perl distribution are ODS-2 safe except for the
> name of the top-level directory, whose multiple dots in the portion
> containing the Perl version number cause the problem you note.  The
> problem was not evident before vmstar acquired its ODS-5 capabilities
> about 2 years ago.  (Archives created with zip, for example, do not
> run into the same trouble.)  It can be avoided by using the -o or
> /ODS2 switch with vmstar, thus forcing the name of the top-level
> directory (and everything else) to be ODS-2 safe.  The problem can
> also be avoided by simply renaming the top-level directory to
> something that is ODS-2 safe.  N.B.  vmstar pays no attention to the
> current parse style, but simply defaults to using ODS-5 names on
> ODS-5 volumes.

I can personally vouch for the applicability of renaming the directory.
It worked for me.  Note that when perl-5.8.1.tar.gz ships it will
need similar workarounds.

> Naturally it would be better if Perl handled properly those names
> that are illegal in ODS-2 but legal in ODS-5 -- multiple dots are
> just a subset of the otherwise illegal characters that are allowed on
> ODS-5 when preceded by a caret.

I think that the code in tounix and tovms seems to worry about
little more than the s/\./_/ conversions typical of older vmstar.
Hence, other escaped sequences that crop up on ODS-5 may not need
addressing (I could very well be wrong about that though).

> <snip>
>
> >(See attached file: ods5_0.patch)
> >
> >Does this seem like a viable approach that should
> >be further pursued?  I doubt that a change like this could
> >make it into 5.8.1, but I don't know that for sure.
>
> The approach has some merit in that it appears to handle an important
> special case.  I think what we really need, though, is a rewrite of
> all the file specification parsing code with an eye toward handling
> all the wrinkles that come with ODS-5.  Most likely this would
> involve more aggressive use of sys$parse, but I haven't really given
> that a close look yet.

That sounds like an especially good strategy for VMS since I
presume that sys$parse() heeds the setting of DCL environment
settings like PARSE_STYLE_PERM, PARSE_STYLE_IMAGE and perhaps
the ACPTYPE of the underlying volume in calls that access the file system.
Unfortunately, it leaves the non VMS users (direct and indirect such as
through File::Spec) of the VMS::Filespec.pm module high and dry
since they cannot call into sys$parse().  I suspect that a mixed
Unix and VMS shop is a bit more likely to impose ODS-5
structure on the VMS volumes to appease the Unix folk.
One thing I did not provide in my patch was a modification to
say the Spec.t test to see if converting a name like:
'disk$ods5:[perl-5^.8^.1.lib]' correctly makes it to
'/disk$ods5/perl-5^.8^.1/lib' but the need to get such
translations correct will arise as ODS-5 becomes more popular.

One thing that I neglected to mention in my previous post was that
RC5 with patch tested 100% ok on linux.

> There is nothing new about the problem and it became an issue because
> of a change in vmstar, not a change in Perl, so I really can't think
> of a valid argument for trying to fix it in in RC5 of 5.8.1, though
> documenting the workarounds as far as getting Perl built would be
> nice.

A patch to README.vms is in order then...

--- readme.vms;1  Thu Sep 25 10:03:12 2003
+++ README.vms    Thu Sep 25 10:44:00 2003
@@ -107,6 +107,9 @@
     ftp://ftp.lp.se/vms/
     http://www.openvms.compaq.com/freeware/

+Recent versions of VMS tar on ODS-5 volumes may extract tape archive
+files with ^. escaped periods in them.  See below for further workarounds.
+
 =item 3  UNZIP.EXE for VMS

 A combination decompressor and archive reader/writer for *.zip files.
@@ -151,6 +154,33 @@
 DEC C, or socket libraries.  See the "Socket Support (optional)" topic
 for more details.

+=head1 Unpacking the Perl source code
+
+You may need to set up a foreign symbol for the unpacking utility of choice.
+
+If you unpack a perl source kit with a name multiple periods on an ODS-5
+volume using recent versions of vmstar (e.g. V3.4 or later) you may need to
+be especially careful in unpacking the tape archive file.  Try to use
+the ODS-2 compatability qualifiers such as:
+
+    vmstar /extract/verbose/ods2 perl-V^.VIII^.I.tar
+
+or:
+
+    vmstar -xvof perl-5^.8^.1.tar
+
+If you neglected to use the /ODS2 qualifier or the -o switch then you
+could rename the source directory:
+
+    set security/protection=(o:rwed) perl-5^.8^.1.dir
+    rename perl-5^.8^.1.dir perl-5_8_1.dir
+
+Perl on VMS as of 5.8.1 does not completely handle extended file
+parse styles such as are encountered on ODS-5.  While it can be built,
+installed, and run on ODS-5 filesystems; it may encounter
+trouble with characters that are otherwise illegal on ODS-2
+volumes (notably the ^. escaped period sequence).
+
 =head1 Configuring the Perl build

 To configure perl (a necessary first step), issue the command
@@ -532,6 +562,12 @@
 a VAX or on Alpha versions of VMS prior to 7.2).  But MakeMaker will not
 warn you if you start out building a module too deep in a directory.

+As noted above ODS-5 escape sequences such as ^. can break the perl
+build.  Solutions include renaming files and directories as needed or
+being careful to use the -o switch or /ODS2 qualifier with latter
+versions of the vmstar utility when unpacking perl or CPAN modules
+on ODS-5 volumes.
+
 Be sure that the process that you use to build perl has a PGFLQ greater
 than 100000.  Be sure to have a correct local time zone to UTC offset
 defined (in seconds) in the logical name SYS$TIMEZONE_DIFFERENTIAL before
End of Possible patch.

(See attached file: read.patch)

Peter Prymmer

Attachment: read.patch
Description: Binary data

Reply via email to