Ken Williams <[EMAIL PROTECTED]> wrote on 03/06/2005 10:50:17 AM: > Care to try 0.09_01, which is now hitting CPAN? I've split out the > generation of command-line switches so it can easily be overridden for > VMS. So compile() might work now. link() and friends haven't been > touched, though.
Enclosed is a patch against 0.09_01 that yields `mmk test` results of: t/01-basic.... ok t/02-link..... ok All tests successful. Files=2, Tests=16, 5 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU) as well as the following against perl 5.6.1 on Solaris 8: t/01-basic....ok t/02-link.....ok All tests successful. Files=2, Tests=16, 3 wallclock secs ( 0.98 cusr + 0.72 csys = 1.70 CPU) I only had to weak the two files VMS.pm and 02-link.t. Do not be surprised if someone subsequently suggests an alteration to the /include equivalent of the -I flags since we have the literal '/Include=[]' embeded in $Config{ccflags} for VMS. I also played a little loose with trying to grab the 11 return $? (to VMS users: the $STATUS) for the executable program that is built and run for the 02-link.t test. In principle we could try putting C<use vmsish qw(status);> type statements to obtain the 11, in practice I am a little worried about what that might do to other platforms. Another concern I have that is not yet addressed at all is the VMS specific matter of an oddity known as a linker options file. ExtUtils::MakeMaker knows a bit about how to make VMS opt files and I suspect it will not be long before ExtUtils::CBuilder will need to know that too (perhaps later in trying to build larger more complexe ld invokations). At any rate here you go: diff -ru ExtUtils-CBuilder-0.09_01.orig/lib/ExtUtils/CBuilder/Platform/VMS.pm ExtUtils-CBuilder-0.09_01/lib/ExtUtils/CBuilder/Platform/VMS.pm --- ExtUtils-CBuilder-0.09_01.orig/lib/ExtUtils/CBuilder/Platform/VMS.pm 2005-03-06 10:47:42.000000000 -0500 +++ ExtUtils-CBuilder-0.09_01/lib/ExtUtils/CBuilder/Platform/VMS.pm 2005-03-10 15:45:33.998024000 -0500 @@ -6,20 +6,47 @@ use vars qw(@ISA); @ISA = qw(ExtUtils::CBuilder::Base); -sub need_prelink { 1 } +sub need_prelink { 0 } sub arg_include_dirs { my $self = shift; return '/include=(' . join(',', @_) . ')'; } -sub arg_nolink { } +sub arg_nolink { + my $self = shift; + return ''; +} sub arg_object_file { my ($self, $file) = @_; return "/obj=$file"; } +sub _do_link { + my ($self, $type, %args) = @_; + + my $cf = $self->{config}; # For convenience + + my $objects = delete $args{objects}; + $objects = [$objects] unless ref $objects; + my $out = $args{$type} || $self->$type($objects->[0]); + + my @temp_files; + @temp_files = + $self->prelink(%args, + dl_name => $args{module_name}) if $self->need_prelink; + + my @linker_flags = $self->split_like_shell($args{extra_linker_flags}); + my @lddlflags = $args{lddl} ? ($cf->{lddlflags}."=$out") : ("/exe=$out"); + my @shrp = $self->split_like_shell($cf->{shrpenv}); + my @ld = $self->split_like_shell($cf->{ld}); + $self->do_system(@shrp, @ld, @lddlflags, @$objects, @linker_flags) + or die "error building $out from @$objects"; + + return wantarray ? ($out, @temp_files) : $out; +} + 1; diff -ru ExtUtils-CBuilder-0.09_01.orig/t/02-link.t ExtUtils-CBuilder-0.09_01/t/02-link.t --- ExtUtils-CBuilder-0.09_01.orig/t/02-link.t 2005-03-06 10:47:42.000000000 -0500 +++ ExtUtils-CBuilder-0.09_01/t/02-link.t 2005-03-10 15:46:03.105026000 -0500 @@ -32,11 +32,18 @@ # Link my ($exe_file, @temps); ($exe_file, @temps) = $b->link_executable(objects => $object_file); -ok $exe_file; +ok -e $exe_file; # Try the executable -my $retval = system($exe_file); -ok $retval >> 8, 11; +my $retval; +if ($^O eq 'VMS') { + $retval = system("mcr $exe_file"); + ok $retval, 0; +} +else { + $retval = system($exe_file); + ok $retval >> 8, 11; +} # Clean up for ($source_file, $exe_file, $object_file, @temps) { End of Patch Peter Prymmer also as a MIME attachment to circumvent the Notes line break gremlin: (See attached file: cbuilder.patch)
cbuilder.patch
Description: Binary data