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