This patch is needed for the lib/ExtUtils/ParseXS.t/basic.t test to pass
on VMS.
In lib/ExtUtils/CBuilder/Platform/VMS.pm, VMS needs to have a pre-link
file generated.
In lib/ExtUtils/CBuilder/Base.pm:
VMS can only have one /include qualifier on the CC command, and the last
one wins, so if one is present in @ccflags, remove it.
VMS needs to have the executable named the same way that dynaloader will
look for it.
VMS needs to have two option files specified in the link, one to
indicate the exported symbols, and one to locate the PERLSHR image.
-John
[EMAIL PROTECTED]
Personal Opinion Only
--- lib/ExtUtils/CBuilder/Base.pm_0_13 Wed Aug 24 21:11:02 2005
+++ lib/ExtUtils/CBuilder/Base.pm Wed Sep 7 19:23:45 2005
@@ -89,6 +89,13 @@
my @extra_compiler_flags =
$self->split_like_shell($args{extra_compiler_flags});
my @cccdlflags = $self->split_like_shell($cf->{cccdlflags});
my @ccflags = $self->split_like_shell($cf->{ccflags});
+
+ #VMS can only have one include list, remove the one from config.
+ if ((@include_dirs != 0) && ($^O eq 'VMS')) {
+ for (@ccflags) {
+ s/\/Include[^\/]*//;
+ }
+ }
my @optimize = $self->split_like_shell($cf->{optimize});
my @flags = (@include_dirs, @cccdlflags, @extra_compiler_flags,
$self->arg_nolink,
@@ -186,6 +193,15 @@
$objects = [$objects] unless ref $objects;
my $out = $args{$type} || $self->$type($objects->[0]);
+ # Need to create with the same name as Dyanloader will load with.
+ if ($^O eq 'VMS') {
+ my ($dev,$dir,$file) = File::Spec->splitpath($out);
+ if (defined &DynaLoader::mod2fname) {
+ $file = DynaLoader::mod2fname([$file]);
+ $out = File::Spec->catpath($dev,$dir,$file);
+ }
+ }
+
my @temp_files;
@temp_files =
$self->prelink(%args,
@@ -195,6 +211,14 @@
my @output = $args{lddl} ? $self->arg_share_object_file($out) :
$self->arg_exec_file($out);
my @shrp = $self->split_like_shell($cf->{shrpenv});
my @ld = $self->split_like_shell($cf->{ld});
+
+ # vms has two option files, the external symbol, and to pull in PerlShr
+ if ($^O eq 'VMS') {
+ $objects->[0] .= ',';
+ $objects->[1] = 'sys$disk:[]' . @temp_files[0] . '/opt,';
+ $objects->[2] = $self->perl_inc() . 'PerlShr.Opt/opt';
+ }
+
$self->do_system(@shrp, @ld, @output, @$objects, @linker_flags)
or die "error building $out from @$objects";
--- lib/ExtUtils/CBuilder/Platform/VMS.pm_0_13 Wed Aug 24 21:11:02 2005
+++ lib/ExtUtils/CBuilder/Platform/VMS.pm Wed Sep 7 19:26:46 2005
@@ -7,7 +7,7 @@
$VERSION = '0.12';
@ISA = qw(ExtUtils::CBuilder::Base);
-sub need_prelink { 0 }
+sub need_prelink { 1 }
sub arg_include_dirs {
my $self = shift;