Date: | Mon, 05 Sep 2005 21:06:15 -0400 |
From: | "John E. Malmberg" <wb8tyw [...] qsl.net> |
To: | Michael G Schwern <schwern [...] pobox.com> |
CC: | module-authors [...] perl.org, makemaker [...] perl.org, vmsperl [...] perl.org, bailey [...] newman.upenn.edu |
Subject: | [patch@makemaker_6.30_01] VMS fixes FIRST_MAKEFILE, PL_FILES |
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 blead@25354 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
wb8tyw@qsl.net
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} ||= ')';