At 2:12 PM -0800 12/13/03, Michael G Schwern wrote:
> > lib/ExtUtils/t/INST_PREFIX...........FAILED at test 41
>
>That's possibly the INSTALLSITEMAN1DIR variable getting expanded by
>VMS from $(INSTALLMAN1DIR) to its actual value. Could you run MM 6.21
>from CPAN against an installed, stable Perl and give me the test
>diagnostics?
With [EMAIL PROTECTED] and the MM snapshot labeled
2003-11-27T00-13-10--0800, I see all tests pass except:
t/inst_prefix...........
# Failed test (t/inst_prefix.t at line 235)
# got: '[.foo.bar]'
# expected: '$(INSTALLMAN1DIR)'
# Failed test (t/inst_prefix.t at line 236)
# got: '[.foo.baz]'
# expected: '$(INSTALLMAN3DIR)'
# Failed test (t/inst_prefix.t at line 237)
# got: '[.foo.bar]'
# expected: '$(INSTALLMAN1DIR)'
# Failed test (t/inst_prefix.t at line 238)
# got: '[.foo.baz]'
# expected: '$(INSTALLMAN3DIR)'
# Failed test (t/inst_prefix.t at line 269)
# got: '[.foo.bar]'
# expected: '$(INSTALLMAN1DIR)'
# Failed test (t/inst_prefix.t at line 270)
# got: '[.foo.baz]'
# expected: '$(INSTALLMAN3DIR)'
# Looks like you failed 6 tests of 52.
%SYSTEM-F-ABORT, abort
dubious
Test returned status 44 (wstat 1024, 0x400)
(VMS status is 44)
DIED. FAILED tests 41-44, 47-48
Failed 6/52 tests, 88.46% okay (less 16 skipped tests: 30 okay, 57.69%)
t/install...............
So the early expansion of macros is probably causing trouble.
Aside from this there are two problems I can see right off with the
new blibdirs target on VMS.
"chmod 0755 [.foo.bar]" doesn't mean what you'd think it means. We
are changing the protection on a file with a zero-length name in the
directory [.foo.bar], which on recent VMS systems is a noop and on
older ones is a fatal error. If you want to change default
protection on a directory, you need to manipulate the directory file
itself: "chmod 0755 [.foo]bar.dir". eliminate_macros followed by
fileify should do the trick.
The other problem is with how we are attempting to update the
blibdirs target. The following statement:
$(NOECHO) $(TOUCH) blibdirs
will update (and if necessary create) the file blibdirs.;1, where the
version number beginning with the semicolon is optional but the dot
is not. When the build utilities MMK and MMS check the revision date
of C<blibdirs> they will not look for C<blibdirs.> with a dot. In
other words, as far as I know, a bareword target name will always
have a revision date of the time of the build and will never
reference an object in the filesystem. I believe this is what is
causing the repeated and unnecessary builds, and yes, it is still
happening with the current snapshot. There was a workaround for this
same problem in a former incarnation of pm_to_blib.
I was trying to implement an override to blibdirs_target to address
both of the above issues but it's still doing unnecessary rebuilds
and I'm out of time for now. The patch below is my not-yet-finished
work in progress.
--- lib/Extutils/MM_VMS.pm;-0 Sat Nov 29 08:28:08 2003
+++ lib/ExtUtils/MM_VMS.pm Sun Dec 14 17:43:33 2003
@@ -2332,6 +2332,37 @@
return('VMS');
}
+=item blibdirs_target (override)
+
+ my $make_frag = $mm->blibdirs_target;
+
+Creates the blibdirs target which creates all the directories we use in
+blib/. Need to pass fileified dir specs to chmod and create a timestamp
+filename target to avoid unnecessary remakes.
+
+=cut
+
+sub blibdirs_target {
+ my $self = shift;
+
+ my @dirs = map { uc "\$(INST_$_)" } qw(libdir
+ autodir archautodir
+ bin script
+ man1dir man3dir
+ );
+ my @mkpath = $self->split_command('$(NOECHO) $(MKPATH)', @dirs);
+ my @chmod = $self->split_command('$(NOECHO) $(CHMOD) 755',
+ map {
vmsify(fileify($self->eliminate_macros($_))) } @dirs);
+
+ my $make = "\n\nblibdirs :: blibdirs.ts\n";
+ $make .= "\t\$(NOECHO) \$(NOOP)\n\n";
+ $make .= "\n\nblibdirs.ts :\n";
+ $make .= join "", map { "\t$_\n" } @mkpath, @chmod;
+ $make .= "\t\$(NOECHO) \$(TOUCH) blibdirs.ts\n\n";
+
+ return $make;
+}
+
=back
=cut