These are the patches needed for the tests FIRST_MAKEFILE.t and PL_FILES.t to pass on VMS.

There are also two typo fixes in MM_Unix.pm and MM_VMS.pm that are already in [EMAIL PROTECTED] but not in the 6.30_01 tarball.


In lib/ExtUtils/MM_Unix.pm, $^X is a complete specification on VMS, and adding $Config{exe_ext} to it will always produce the wrong file name.

The VMS version of the Perl test harness runs with Perl having the name "Perl.". This bug has not caused tests to fail because find_perl was able to find another copy of Perl in it's search.

Because directories can not be combined in VMS the way they can be on UNIX macros need to be expanded/eliminated in sub process_PL().


In lib/ExtUtils/MM_VMS.pm, setup the $self->{MAKEFILE} to default to the FIRST_MAKEFILE parameter if present, else to 'descrip.mms'.

'$(FIRST_MAKEFILE)_OLD' needs to have it's macros expanded/eliminated so that it is parsed correctly on VMS before it is stored in $self->{MAKEFILE_OLD}

Then, if the filenames did not already contain a '.' to delimit a file type from the filename, then VMS needs a tailing "." to indicate that there is a blank type instead of the default ".MMS" in this case.


In t/FIRST_MAKEFILE.t, for using a makefile name with out an ".type" on VMS, a trailing dot is generated as above, so the test needs to be modified to not fail when a trailing dot has been added to the filename.


I still need to come up with a solution to an issue with t/basic.t. This test fails on VMS if the logical name "BIN" is defined and the DECC feature DECC$UNIX_PATH_BEFORE_LOGNAME is not not also enabled.

The test t/basic.t will also fail on VMS if the logical name "foo" is defined before it runs. One of the other test scripts will leave this logical name behind if it is run with out using the test harness.

-John
[EMAIL PROTECTED]
Personal Opinion Only
--- t/FIRST_MAKEFILE.t_6_30     Fri May 20 17:43:34 2005
+++ t/FIRST_MAKEFILE.t  Mon Sep  5 19:53:30 2005
@@ -36,5 +36,5 @@
 
 ok( -e 'jakefile', 'FIRST_MAKEFILE honored' );
 
-ok( grep(/^Writing jakefile for Big::Dummy/, @mpl_out) == 1,
+ok( grep(/^Writing jakefile(?:\.)? for Big::Dummy/, @mpl_out) == 1,
                                        'Makefile.PL output looks right' );
--- lib/ExtUtils/MM_Unix.pm_6_30        Fri May 20 19:05:33 2005
+++ lib/ExtUtils/MM_Unix.pm     Mon Sep  5 20:14:10 2005
@@ -1030,7 +1030,7 @@
             print "Executing $abs\n" if ($trace >= 2);
 
             my $version_check = qq{$abs -le "require $ver; print qq{VER_OK}"};
-            # To avoid using the unportable 2>&1 to supress STDERR,
+            # To avoid using the unportable 2>&1 to suppress STDERR,
             # we close it before running the command.
             # However, thanks to a thread library bug in many BSDs
             # ( http://www.freebsd.org/cgi/query-pr.cgi?pr=51535 )
@@ -1870,10 +1870,10 @@
 
     # Build up a set of file names (not command names).
     my $thisperl = $self->canonpath($^X);
-    $thisperl .= $Config{exe_ext} unless 
-                # VMS might have a file version # at the end
-      $Is_VMS ? $thisperl =~ m/$Config{exe_ext}(;\d+)?$/i
-              : $thisperl =~ m/$Config{exe_ext}$/i;
+
+    # VMS file specification from $^X is already complete.
+
+    $thisperl .= $Config{exe_ext} unless $Is_VMS;
 
     # We need a relative path to perl when in the core.
     $thisperl = $self->abs2rel($thisperl) if $self->{PERL_CORE};
@@ -3042,8 +3042,8 @@
 
        foreach my $target (@$list) {
             if( $Is_VMS ) {
-                $plfile = vmsify($plfile);
-                $target = vmsify($target);
+                $plfile = vmsify($self->eliminate_macros($plfile));
+                $target = vmsify($self->eliminate_macros($target));
             }
 
            # Normally a .PL file runs AFTER pm_to_blib so it can have
--- lib/ExtUtils/MM_VMS.pm_6_30 Mon Apr  4 19:38:36 2005
+++ lib/ExtUtils/MM_VMS.pm      Mon Sep  5 20:06:03 2005
@@ -283,7 +283,7 @@
 =item pasthru (override)
 
 VMS has $(MMSQUALIFIERS) which is a listing of all the original command line
-options.  This is used in every invokation of make in the VMS Makefile so
+options.  This is used in every invocation of make in the VMS Makefile so
 PASTHRU should not be necessary.  Using PASTHRU tends to blow commands past
 the 256 character limit.
 
@@ -447,10 +447,20 @@
     $self->{NOOP}               = 'Continue';
     $self->{NOECHO}             ||= '@ ';
 
-    $self->{MAKEFILE}           ||= 'Descrip.MMS';
+    $self->{MAKEFILE}          ||= $self->{FIRST_MAKEFILE} || 'Descrip.MMS';
     $self->{FIRST_MAKEFILE}     ||= $self->{MAKEFILE};
     $self->{MAKE_APERL_FILE}    ||= 'Makeaperl.MMS';
-    $self->{MAKEFILE_OLD}       ||= '$(FIRST_MAKEFILE)_old';
+    $self->{MAKEFILE_OLD}       ||= 
$self->eliminate_macros('$(FIRST_MAKEFILE)_old');
+#
+#   if an extension is not specified, then MMS/MMK assumes an
+#   an extension of .MMS.  If there really is no extension,
+#   then a trailing "." needs to be appended to specifify a
+#   a null extension.
+#
+    $self->{MAKEFILE} .= '.' unless $self->{MAKEFILE} =~ m/\./;
+    $self->{FIRST_MAKEFILE} .= '.' unless $self->{FIRST_MAKEFILE} =~ m/\./;
+    $self->{MAKE_APERL_FILE} .= '.' unless $self->{MAKE_APERL_FILE} =~ m/\./;
+    $self->{MAKEFILE_OLD} .= '.' unless $self->{MAKEFILE_OLD} =~ m/\./;
 
     $self->{MACROSTART}         ||= '/Macro=(';
     $self->{MACROEND}           ||= ')';

Reply via email to