Author: dagolden
Date: Tue Sep 1 14:22:26 2009
New Revision: 13252
Modified:
Module-Build/trunk/Changes
Module-Build/trunk/lib/Module/Build/Base.pm
Module-Build/trunk/t/properties/needs_compiler.t
Log:
warn/fail if we need a compiler and don't have one
Modified: Module-Build/trunk/Changes
==============================================================================
--- Module-Build/trunk/Changes (original)
+++ Module-Build/trunk/Changes Tue Sep 1 14:22:26 2009
@@ -7,6 +7,11 @@
exist. If true, ExtUtils::CBuilder is also added to build_requires.
[David Golden]
+ Bug fixes:
+ - Failure to detect a compiler will now warn during Build.PL and be a
+ fatal error when trying to compile during Build. (RT#48918) [David
+ Golden]
+
0.35_01 - Mon Aug 31 12:11:10 EDT 2009
Enhancements:
Modified: Module-Build/trunk/lib/Module/Build/Base.pm
==============================================================================
--- Module-Build/trunk/lib/Module/Build/Base.pm (original)
+++ Module-Build/trunk/lib/Module/Build/Base.pm Tue Sep 1 14:22:26 2009
@@ -1233,7 +1233,13 @@
}
if ($self->needs_compiler) {
$self->_add_prereq('build_requires', 'ExtUtils::CBuilder', 0);
- # XXX check have_compiler here
+ if ( ! $self->have_c_compiler ) {
+ $self->log_warn(<<'EOM');
+Warning: ExtUtils::CBuilder not installed or no compiler detected
+Proceeding with configuration, but compilation may fail during Build
+
+EOM
+ }
}
return;
@@ -4545,19 +4551,23 @@
my ($self) = @_;
my $p = $self->{properties};
- return $p->{have_compiler} if defined $p->{have_compiler};
+ return $p->{_have_c_compiler} if defined $p->{_have_c_compiler};
$self->log_verbose("Checking if compiler tools configured... ");
my $b = eval { $self->cbuilder };
- my $have = $b && $b->have_compiler;
+ my $have = $b && eval { $b->have_compiler };
$self->log_verbose($have ? "ok.\n" : "failed.\n");
- return $p->{have_compiler} = $have;
+ return $p->{_have_c_compiler} = $have;
}
sub compile_c {
my ($self, $file, %args) = @_;
- my $b = $self->cbuilder;
+ if ( ! $self->have_c_compiler ) {
+ die "Error: no compiler detected to compile '$file'. Aborting\n";
+ }
+
+ my $b = $self->cbuilder;
my $obj_file = $b->object_file($file);
$self->add_to_cleanup($obj_file);
return $obj_file if $self->up_to_date($file, $obj_file);
Modified: Module-Build/trunk/t/properties/needs_compiler.t
==============================================================================
--- Module-Build/trunk/t/properties/needs_compiler.t (original)
+++ Module-Build/trunk/t/properties/needs_compiler.t Tue Sep 1 14:22:26 2009
@@ -5,7 +5,7 @@
use MBTest;
use DistGen;
-plan tests => 16;
+plan tests => 19;
# Ensure any Module::Build modules are loaded from correct directory
blib_load('Module::Build');
@@ -102,4 +102,21 @@
"build_requires for ExtUtils::CBuilder is correct version"
);
+#--------------------------------------------------------------------------#
+# falsify compiler and test error handling
+#--------------------------------------------------------------------------#
+
+my $err = stderr_of( sub {
+ $mb = $dist->new_from_context( config => { cc => "adfasdfadjdjk" } )
+});
+ok( $mb, "Build.PL while hiding compiler" );
+like( $err, qr/no compiler detected/,
+ "hidden compiler resulted in warning message during Build.PL"
+);
+eval { $mb->dispatch('build') };
+like( $@, qr/no compiler detected/,
+ "hidden compiler resulted in fatal message during Build"
+);
+
+
# vim:ts=2:sw=2:et:sta:sts=2