If you turn on TAP::Harness, the testcover action won't work because 
TAP::Harness doesn't use HARNESS_PERL_SWITCHES.  The patch below fixes that, 
but it uses Storable, which wasn't in core until 5.7.3.  Alternative 
implementation ideas?



--- Module-Build-0.36_10/lib/Module/Build/Base.pm       2010-05-19 
17:39:41.000000000 -0500
+++ Module-Build-0.36_10-patch/lib/Module/Build/Base.pm 2010-05-27 
07:31:26.000000000 -0500
@@ -18,6 +18,7 @@
 use File::Compare ();
 use Module::Build::Dumper ();
 use IO::File ();
+use Storable qw< dclone >;
 use Text::ParseWords ();
use Module::Build::ModuleInfo;
@@ -2697,7 +2698,26 @@
   local $Test::Harness::Switches    =
   local $ENV{HARNESS_PERL_SWITCHES} = "-MDevel::Cover";
- $self->depends_on('test');
+  my $orig_tap_harness_args;
+  if ( my $tap_harness_args = $self->tap_harness_args() ) {
+    $tap_harness_args = dclone($tap_harness_args);
+    $orig_tap_harness_args = dclone($tap_harness_args);
+    my $switches = $tap_harness_args->{switches} || [];
+    push @{$switches}, '-MDevel::Cover';
+    $tap_harness_args->{switches} = $switches;
+    $self->tap_harness_args($tap_harness_args);
+  }
+
+  my $worked = eval {
+    $self->depends_on('test');
+    1;
+  };
+  my $error = $@;
+  if ($orig_tap_harness_args) {
+    $self->tap_harness_args($orig_tap_harness_args);
+  }
+  die $error if not $worked;
+
   $self->do_system('cover');
 }

Reply via email to