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

Reply via email to