Information Page for Perl 5.6.0 on VMS

Please note:The files available for download are also available via FTP at: ftp://www.crinoid.com/crinoid/perl560/. I suggest not using FTP from a web-browser for the text files; they seem to get sent in binary-mode and mangled up. Command-line FTP works okay, though. Also, text files (like the patches below) may have "Control-M" added at the end of each line...causing problems when you patch (you can try the "--ignore-whitespace" flag...but don't be surprised if you get some warnings from DECC about Control-M's in the code).

Patching:

A typical patch command will look something like:

$ patch -p0 --verbose <patch_dir:glob-basic.patch -b --suffix=-pre_glob-basic

when your default is in the "root" Perl directory.

I use a hacked-for-VMS version of GNU Patch 2.5.4, see below. Some of the earlier VMS patch programs insert gratuitous record separators in long files (e.g., vms.c) so beware of old patch programs!

Because the list of patches was getting cumbersome, I combined them into four "big" patches that can be applied in any order to the base 5.6.0 kit.

Here's a command file for applying the patches.

Here's the cumbersome list of little patches if you want them.

Configuration:

The only non-default answers to the @CONFIGURE script were:
    Build VMS-Debug version: Y
    Always use default file types: Y
(full @CONFIGURE dialog)

Build:

Successful, full build logfile here.

Test:

Passes all tests, full test logfile here.

Here's a partial list of problems & solutions.


Making CPAN work

Step 1: build and install VMS::FileUtils modules

The first "real" extension to get working is CPAN.pm; but to do that we need to first add the VMS::FileUtils modules.

Here's VMS-Fileutils-0_012.tar-gz, which contains both VMS::FileUtils::Root and VMS::FileUtils::SafeName.

VMS::FileUtils::Root provides the ability to use "rooted" directories with concealed logical names. VMS::FileUtils::SafeName has routines for putting filenames into a VMS-acceptable form. Both are necessary for CPAN.

    $ gzip -d VMS-Fileutils-0_012.tar-gz
    $ tar xvf VMS-Fileutils-0_012.tar
    $ set default [.VMS-Fileutils-0_012]
    $ perl makefile.pl
    $ mmk
    $ mmk test
    $ mmk install
(Substitute "mms" for "mmk" if you use MMS instead)

Note that VMS::FileUtils has been updated to version 0.012; the change from 0.01 to 0.011 was in the test procedure for VMS::FileUtils::Root to properly escape "$" in disk names....otherwise you get a spurious failure in tests 17 and 19.

The change from 0.011 to 0.012 was a bit more substantial: a limitation in the number of directories in the "rooted" logicals was changed from 8 to 7 after testing showed that 7 works while 8 doesn't.

Step 2: CPAN.pm patch

Get CPAN.pm v1.54 from ftp.cpan.org; note that v1.52 was included with Perl 5.6.0, you need v1.54.

Then apply this cpan.patch (25 May 2000) before building CPAN v1.54.

You will be asked if you want to configure CPAN right away, so make sure you have symbols for "gzip", "tar" and (optionally) "unzip" set up beforehand.

    $ gzip -d  CPAN-1_54.tar-gz
    $ tar xvf CPAN-1_54.tar-gz
    $ set default [.CPAN-1_54]
    $ gnu_patch <somedev:[somedir]cpan_20000403.patch
    $ perl makefile.pl
        ...answer config questions here...
    $ mmk
    $ mmk test
    $ mmk install
Config questions: If a DCL symbol is defined for "where do I find this program" questions then it will be translated to get the EXE name.

The ones I answered were:

    gzip        -> gzip  (if symbol defined, otherwise gzip filespec)
    tar         -> tar   (if symbol defined, etc.)
    unzip       -> unzip (if symbol defined, etc.)
    make        -> mmk   (or mms)
    shell       -> spawn
    pager       -> more  (I don't think we can actually *use* this...)
    ftp         -> ftp
Just take the default for the rest. When you need to enter URLs, you can just enter a list of space-separated numbers ("12 18 32").

I also set up a "local CPAN"; you enter a URL of something like:

    file://localhost/mydisk/my-cpan-dir/
(The "file://localhost/" is part a literal string, don't put your local host name, but you do need to substitute for "mydisk" and "my-cpan-dir").

The CPAN files are located in MYDISK:[MY-CPAN-DIR.AUTHORS.ID...] with the same directory structure as CPAN. When CPAN.pm goes to look up a module it will check if it is already in its cache, followed by the "local CPAN", followed by the remote sites.

Having a "local CPAN" allowed me to try out VMS-specific modifications of modules before sending patches to the authors.

Note: that you can sometimes have problems updating CPAN configurations, due to protection issues. I haven't tracked down the ultimate cause of this, but it may well be a result of poorly-applied Unixoid protections. If you get bitten by this, check that you have RWED permissions on PERL_ROOT:[LIB.CPAN]CONFIG.PM.

I set up CPAN.pm so that FTP on a VMS machine will use the following command line if the libnet bundle hasn't been installed:

    $ FTP/USER="anonymous"/PASS="..yourname@wherever.."  cpanhostname
Which should be okay for UCX and Multinet. Please let me know about other networking software with different requirements.

Status of CPAN modules on VMS

First things to get, make and install should be Digest::MD5 and Bundle::libnet.

For Bundle::libnet, when it asks if you want to set the config right now answer NO, otherwise you get a bunch of test errors.

I've put the module status table in its own page for ease of updating.

It's unfortunate that (AFAIK) all of the VMS:: modules are either non-CPAN.pm compatible or not distributed via the CPAN.pm mechanisms. You can grab them from a CPAN site via FTP, expand and build them just fine, but if you want to use CPAN.pm to do so you're (currently) out of luck.

Bundles

CPAN provides the capability of defining "Bundles" of modules; there's the standard bundles like Bundle::libnet, etc., but you can also define your own for local use.

One useful and kewl enhancement would be to provide a "Bundle::VMS" of VMS modules that you could get, make and install in one go. That is, once we get VMS:: modules better integrated in CPAN.

In addition, it might also be useful to have a bundle (not on CPAN necessarily) of modules that are "generally useful and build cleanly on VMS".

VMS Perl "Pipe Torture Tests"

These are the testing scripts that I used to find the places where piping to and from subprocesses fail. If you try these on a Perl that doesn't have my piping patch, you'll probably wind up with a RWMBX'ed process or subprocess. I haven't encountered any cases where "STOP/ID=..." doesn't work however, so at most the RWMBX'ed processes are a temporary annoyance. If you have built Perl with my piping patch, please give the tests a try and let the VMSPERL crowd know how they went. The redirection test gives simple "ok/not ok" status, the others you have to look at the results to see if they gave what they should.

Utilities Update: GZIP

For most purposes the standard VMS GZIP distribution is fine for us, but there are other parts of CPAN.PM that use i/o redirection of GZIP which isn't currently supported.

Here's the current (as of 30 Mar 2000) GZIP 1.2.4a distribution, original available from prep.ai.mit.edu.

Then apply this patch which contains Peter Prymmer's DECC patch, my own i/o redirection patch, (so things like "gzip -dc foo.tar-gz >bar." will work), and some extra VAX 7.1 patches.

And here's a AXP V6.2 binary if you really need one.

The distribution and patches are also available via FTP.

Utilites Update: Patch

As you can probably tell, I use Patch a lot. There was some changes in the CRTL between VMS 6.2 and 7.1 that resulted in spurious line breaks being inserted in a file being patched; in the process of tracking and fixing that particular problem, I modified the most recent GNU Patch (2.5.4) available, so now it's usable on VMS!

One feature about 2.5.4 that is worth having is the "--dry-run" flag; it lets you see if a patch will apply cleanly without actually applying it. And one warning: if you apply a patch to files in subdirectories (i.e., the patch refers to files in subdirectories) which is quite standard for Perl patches, you need to use the "-p0" flag. Otherwise, Patch will only look for the files to be patched in your current default directory.

Here's the base Patch 2.5.4 distribution (or by FTP or from the MIT GNU archive)

After un-gipping, untarring, etc, you have to apply this patch. The patch contains both Craig Berry's (craig.berry@metamorgs.com) patches from Jan 2000, plus my later patches.

Then just "MMK" or "MMS" to build; rather than try and integrate into the previous build procedures (based on VAXC) I just created a DESCRIP.MMS suitable for DECC.

Tested on VMS/AXP 6.2 and 7.1 and VMS/VAX 7.1.

Here's an AXP binary for VMS6.2, and a VAX binary for VMS7.1 if you're really stuck, but I strongly suggest building from source if possible. Here's a Gzipped tar archive of the patched sources.


This file was last modified on Thu Jun 15 20:18:05 2000 by lane@duphy4.physics.drexel.edu