Author: dagolden
Date: Tue Sep  1 13:42:17 2009
New Revision: 13250

Modified:
   Module-Build/trunk/lib/Module/Build/Base.pm
   Module-Build/trunk/t/properties/needs_compiler.t

Log:
don't let needs_compiler override an existing CBuilder prereq

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 13:42:17 2009
@@ -23,6 +23,7 @@
 use Module::Build::ModuleInfo;
 use Module::Build::Notes;
 use Module::Build::Config;
+use Module::Build::Version;
 
 
 #################### Constructors ###########################
@@ -1239,9 +1240,15 @@
 }
 
 sub _add_prereq {
-  my ($self, $prereq_type, $module, $version) = @_;
-  $self->log_info("Adding to $prereq_type\: $module => $version\n");
-  $self->{properties}{$prereq_type}{$module} = $version;
+  my ($self, $type, $module, $version) = @_;
+  my $p = $self->{properties};
+  $version = 0 unless defined $version;
+  if ( exists $p->{$type}{$module} ) {
+    return if $self->compare_versions( $version, '<=', $p->{$type}{$module} );
+  }
+  $self->log_info("Adding to $type\: $module => $version\n");
+  $p->{$type}{$module} = $version;
+  return 1;
 }
   
 sub prereq_failures {

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 13:42:17 2009
@@ -5,7 +5,7 @@
 use MBTest;
 use DistGen;
 
-plan tests => 13;
+plan tests => 16;
 
 # Ensure any Module::Build modules are loaded from correct directory
 blib_load('Module::Build');
@@ -83,4 +83,23 @@
   "ExtUtils::CBuilder is not in build_requires" 
 );
 
+#--------------------------------------------------------------------------#
+# don't override specific EU::CBuilder build_requires
+#--------------------------------------------------------------------------#
+
+$dist->change_build_pl({
+    module_name => $dist->name,
+    license => 'perl',
+    build_requires => { 'ExtUtils::CBuilder' => 0.2 },
+});
+$dist->regen;
+
+ok( $mb = $dist->new_from_context ,
+  "Build.PL with xs files, build_requires EU::CB 0.2"
+);
+ok( $mb->needs_compiler, "needs_compiler is true" );
+is( $mb->build_requires->{'ExtUtils::CBuilder'}, 0.2,
+  "build_requires for ExtUtils::CBuilder is correct version" 
+);
+
 # vim:ts=2:sw=2:et:sta:sts=2

Reply via email to