develooper Front page | perl.perl5.porters | Postings from May 2008

Re: [patch@33919] Module build changes for VMS

Thread Previous | Thread Next
From:
John E. Malmberg
Date:
May 26, 2008 14:18
Subject:
Re: [patch@33919] Module build changes for VMS
Message ID:
483B28EB.70407@qsl.net
John E. Malmberg wrote:
> 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.

Revised patch attached.

>>> 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?

Looking at where this code is used in the tests indicates that it is 
being used on perl scripts.  I do not know why setting the shebang is 
suppressed for VMS, but under GNV it will be needed.  So resolving this 
will be a todo item if and when we start running module build under GNV.

> 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.

Typo fixed.

>>> # 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.

I did not change this.  Maybe Ken will find time to look at this.

>>>     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.

Fixed.

-John
wb8tyw@qsl.net
Personal Opinion Only

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About