use Config;
use ExtUtils::Manifest 'maniread';
use Cwd;
+use Getopt::Long;
+
+my @tests;
+my $verbose;
+GetOptions("t|test=s" => \@tests,
+ "v" => \$verbose)
+ or die;
my $make = $Config{make};
# if there's a way to make with profiling for a recursive build like
# Imager I don't see how
if (-f 'Makefile') {
- system "$make clean";
+ run("$make clean");
}
-system "cover -delete";
-system "perl Makefile.PL --coverage"
+run("cover -delete");
+run("perl Makefile.PL --coverage")
and die;
-system "$make 'OTHERLDFLAGS=-ftest-coverage -fprofile-arcs'"
+run("$make 'OTHERLDFLAGS=-ftest-coverage -fprofile-arcs'")
and die;
{
local $ENV{DEVEL_COVER_OPTIONS} = "-db," . getcwd() . "/cover_db";
- system "$make test TEST_VERBOSE=1 HARNESS_PERL_SWITCHES=-MDevel::Cover";
+ my $makecmd = "$make test TEST_VERBOSE=1 HARNESS_PERL_SWITCHES=-MDevel::Cover";
+ if (@tests) {
+ $makecmd .= " TEST_FILES='@tests'";
+ }
+ run($makecmd);
}
# build gcov files
for my $path (keys %paths) {
if ($path) {
- system "cd $path ; gcov @{$paths{$path}} ; cd ..";
+ run("cd $path ; gcov -abc @{$paths{$path}} ; cd ..");
}
else {
- system "gcov @{$paths{$path}}";
+ run("gcov -abc @{$paths{$path}}");
}
my $dir = $path ? $path : '.';
for my $file (@{$paths{$path}}) {
- system "gcov2perl $dir/$file.gcov";
+ run("gcov2perl $dir/$file.gcov");
}
}
my @dbs = "cover_db", map "$_/cover_db", grep $_, keys %paths;
-system "cover -ignore_re '^t/'";
+# we already ran gcov
+run("cover -nogcov -ignore_re '^t/'");
+sub run {
+ my $cmd = shift;
+
+ print "Running: $cmd\n" if $verbose;
+ return system $cmd;
+}