Craig A. Berry wrote:
At 4:17 PM -0500 5/25/08, John E. Malmberg wrote:
Please review these patches for improving module build on VMS.
These  were being discussed before the 5.10 release, but not included.

Thanks, I'll have a look.  A few initial comments mixed in below.

Also, I left the makefile name as generated by the tests. Sometimes
it was generated as 'Makefile' and sometimes as 'descrip.mms'.

I am thinking that if the makefile is being generated for
is_vms_mms(), then the name should be forced to 'descrip.mms' for
consistency, as I do not think gnu make can deal with MMS/MMK syntax.

With these patches, all but the ppm.t tests will pass on VMS.

The xs.t test passes, but the extra output is messing up the test
analysis, so for now, I have left it being skipped.

The ppm.t test still has the issue where it is creating a tarball
that it then can not detar, and I will try to look at that in a
>> little bit.


--- /rsync_root/perl/lib/Module/Build/base.pm   Thu Oct 25 04:50:40 2007
+++ lib/Module/Build/base.pm    Sun May 25 00:50:07 2008
@@ -2304,7 +2304,7 @@
foreach my $file (keys %$files) {
    my $result = $self->copy_if_modified($file, $script_dir, 'flatten') or next;
-    $self->fix_shebang_line($result) unless $self->is_vmsish;
+    $self->fix_shebang_line($result) unless $self->is_vms_mms;

So if we're using GNU make rather than MMS or MMK we have a shebang
line in Perl?  Not sure how that's possible.

Ok, this needs a bit of thought. DCL ignores shebang lines, only perl and the GNV utilities will honor shebangs, so why are we fixing the shebang line. So why skip fixing the shebang line if is_vmsish in the first place?

My thoughts at the time are that when we are running gnu make, it will be under the GNV system, so Unix rules will apply.

@@ -3179,10 +3184,18 @@
\bblibdirs$
^MANIFEST\.SKIP$

+# Avoid VMS specific MakeMaker generated files
+\bDescript.MMS$
+\bDESCRIPT.MMS$
+\bdescript.mms$

It's "descrip" not "descript".

Yep. Easy fix. I will try to deal with that tomorrow. I remember last time that you mentioned some other files that also should be ignored.

# Avoid Devel::Cover generated files
\bcover_db
--- /rsync_root/perl/lib/Module/Build/Compat.pm Thu Oct 25 04:50:40 2007
+++ lib/Module/Build/Compat.pm  Sat May 24 22:11:04 2008
@@ -171,7 +171,15 @@
                       die "Malformed argument '$arg'");

    # Do tilde-expansion if it looks like a tilde prefixed path
-    ( $val ) = glob( $val ) if $val =~ /^~/;
+    if ($val =~ /^~/) {
+      my $class = 'Module::Build';
+      if ($class->is_vmsish) {
+        # VMS does not glob a ~ yet
+        ( $val ) = $class->_detildefy($val)
+      } else {
+        ( $val ) = glob( $val );
+      }
+    }

It may be ok to use _detildefy everywhere -- we'd have to test it on
something non-VMS.  Most likely the following will get you the class,
which is currently just being thrown away:

--- Compat.pm;-0        Thu Oct 25 04:50:40 2007
+++ Compat.pm   Sun May 25 18:23:27 2008
@@ -162,7 +162,7 @@ sub subclass_dir {
 }

 sub makefile_to_build_args {
-  shift;
+  my $self = shift;
   my @out;
   foreach my $arg (@_) {
     next if $arg eq '';
[end]

You could then use $self where you have $class (haven't tested that,
but that's how nearly all these methods work).

I think that for some reason that this will not work because in the other places the class is passed as an additional argument, and not as the first argument.

    if (exists $makefile_to_build{$key}) {
      my $trans = $makefile_to_build{$key};
@@ -216,10 +224,24 @@
  my $class = $args{build_class};

  my $perl = $class->find_perl_interpreter;
+
+  # VMS MMS/MMK usually needs to use MCR to run the Perl image
+  $perl = 'MCR ' . $perl if $class->is_vms_mms;
+

This doesn't seem necessary to me since it's going to be spawning a
subprocess to run Perl; the subprocess-handling code already prepends
MCR when needed.

It is needed because this is a line being inserted in the makefile or descrip.mms file, not a command being spawned by perl.

}
--- /rsync_root/perl/lib/Module/Build/t/compat.t        Thu Feb 21 08:04:41 2008
+++ lib/Module/Build/t/compat.t Sun May 25 14:32:41 2008
@@ -21,6 +21,7 @@
}
ok 1, "Loaded";

+my $vms_mms = ($^O eq 'VMS') && ($Config{make} =~ /MMS|K/i);

Um, anything with a K in it is considered MMK?  I don't think that's
what you wanted.  See

http://perldoc.perl.org/perlrequick.html#Grouping-things-and-hierarchical-matching

Ok, I will lookup the proper regex tomorrow to group the S and K as alternatives.

--- /rsync_root/perl/lib/Module/Build/t/lib/MBTest.pm   Fri Oct 26 19:01:41 2007
+++ lib/Module/Build/t/lib/MBTest.pm    Sat May 24 18:07:44 2008
@@ -131,6 +131,10 @@


+
+sub is_vms_mms { return (is_vmsish && ($Config{make} =~ /MMS|K/i)) }

Note regex comment above.
yep.

-John
[EMAIL PROTECTED]
Personal Opinion Only

Reply via email to