From a24b897525551a1d93b043c9f896a41b26dd3a15 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Thu, 31 Mar 2011 17:09:31 -0500 Subject: Make ExtUtils::CBuilder reset ccflags on compile for VMS. On VMS only, the /DEFINE and /INCLUDE qualifiers are parsed off the local copy of $Config{ccflags} and consumed in the process. This is necessary because you're only allowed one of each of these clauses in the compile command, so to add whatever has been requested for a specific compile, we have to combine them with whatever Perl was built with. But since they are consumed, multiple compiles on the same EU::CB object were only using the correct flags for the first one. Even calling the have_compiler() check before compile() would make the latter miss the defines and includes that were used to build Perl. The solution is add a platform override that resets the local copy of $Config{ccflags} from its original in %Config every time a compiler operation is initiated. Fixes smoke failures in ExtUtils::ParseXS. --- .../lib/ExtUtils/CBuilder/Platform/VMS.pm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform') diff --git a/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm b/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm index 4f6a36cfdb..92f17c0ba5 100644 --- a/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm +++ b/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm @@ -8,6 +8,7 @@ $VERSION = '0.280202'; @ISA = qw(ExtUtils::CBuilder::Base); use File::Spec::Functions qw(catfile catdir); +use Config; # We do prelink, but don't want the parent to redo it. @@ -47,6 +48,20 @@ sub arg_include_dirs { return ('/include=(' . join(',', @dirs) . ')'); } +# We override the compile method because we consume the includes and defines +# parts of ccflags in the process of compiling but don't save those parts +# anywhere, so $self->{config}{ccflags} needs to be reset for each compile +# operation. + +sub compile { + my ($self, %args) = @_; + + $self->{config}{ccflags} = $Config{ccflags}; + $self->{config}{ccflags} = $ENV{CFLAGS} if defined $ENV{CFLAGS}; + + return $self->SUPER::compile(%args); +} + sub _do_link { my ($self, $type, %args) = @_; -- cgit v1.2.1