Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 80 lines (71 sloc) 1.8 kB
1ef586b simpler creation of coverage reports
Tony Cook authored
1 #!perl -w
2 use strict;
3 use Config;
4 use ExtUtils::Manifest 'maniread';
86c50c4 @tonycoz try to generate all coverage into the one cover_db
authored
5 use Cwd;
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
6 use Getopt::Long;
7
8 my @tests;
9 my $verbose;
e9494fe @tonycoz allow coverage testing to test only .c code coverage
authored
10 my $nodc;
b3292c4 @tonycoz allow supplying make options to imcover.perl and abort on make failure
authored
11 my $make_opts = "";
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
12 GetOptions("t|test=s" => \@tests,
b3292c4 @tonycoz allow supplying make options to imcover.perl and abort on make failure
authored
13 "m=s" => \$make_opts,
e9494fe @tonycoz allow coverage testing to test only .c code coverage
authored
14 "n" => \$nodc,
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
15 "v" => \$verbose)
16 or die;
1ef586b simpler creation of coverage reports
Tony Cook authored
17
18 my $make = $Config{make};
19 # if there's a way to make with profiling for a recursive build like
20 # Imager I don't see how
21 if (-f 'Makefile') {
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
22 run("$make clean");
1ef586b simpler creation of coverage reports
Tony Cook authored
23 }
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
24 run("cover -delete");
f50280a @tonycoz pass extra imcover.perl command-line options through to Makefile.PL
authored
25 run("perl Makefile.PL --coverage @ARGV")
b3292c4 @tonycoz allow supplying make options to imcover.perl and abort on make failure
authored
26 and die "Makefile.PL failed\n";
27 run("$make $make_opts 'OTHERLDFLAGS=-ftest-coverage -fprofile-arcs'")
28 and die "build failed\n";
1ef586b simpler creation of coverage reports
Tony Cook authored
29
86c50c4 @tonycoz try to generate all coverage into the one cover_db
authored
30 {
bdea445 @tonycoz we don't use D::C's pod coverage, don't collect it
authored
31 local $ENV{DEVEL_COVER_OPTIONS} = "-db," . getcwd() . "/cover_db,-coverage,statement,branch,condition,subroutine";
e9494fe @tonycoz allow coverage testing to test only .c code coverage
authored
32 my $makecmd = "$make test TEST_VERBOSE=1";
33 $makecmd .= " HARNESS_PERL_SWITCHES=-MDevel::Cover" unless $nodc;
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
34 if (@tests) {
35 $makecmd .= " TEST_FILES='@tests'";
36 }
b3292c4 @tonycoz allow supplying make options to imcover.perl and abort on make failure
authored
37 run($makecmd)
38 and die "Test failed\n";
86c50c4 @tonycoz try to generate all coverage into the one cover_db
authored
39 }
1ef586b simpler creation of coverage reports
Tony Cook authored
40
41 # build gcov files
42 my $mani = maniread();
43 # split by directory
44 my %paths;
45 for my $filename (keys %$mani) {
46 next unless $filename =~ /\.(xs|c|im)$/;
f578ab4 @tonycoz avoid trying to gcov unincluded files
authored
47 (my $gcda = $filename) =~ s/\.\w+$/.gcda/;
48 next unless -f $gcda;
1ef586b simpler creation of coverage reports
Tony Cook authored
49 if ($filename =~ m!^(\w+)/(\w+\.\w+)$!) {
50 push @{$paths{$1}}, $2;
51 }
52 else {
53 push @{$paths{''}}, $filename;
54 }
55 }
56
57 for my $path (keys %paths) {
58 if ($path) {
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
59 run("cd $path ; gcov -abc @{$paths{$path}} ; cd ..");
1ef586b simpler creation of coverage reports
Tony Cook authored
60 }
61 else {
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
62 run("gcov -abc @{$paths{$path}}");
1ef586b simpler creation of coverage reports
Tony Cook authored
63 }
64 my $dir = $path ? $path : '.';
65 for my $file (@{$paths{$path}}) {
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
66 run("gcov2perl $dir/$file.gcov");
1ef586b simpler creation of coverage reports
Tony Cook authored
67 }
68 }
69
70 my @dbs = "cover_db", map "$_/cover_db", grep $_, keys %paths;
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
71 # we already ran gcov
72 run("cover -nogcov -ignore_re '^t/'");
1ef586b simpler creation of coverage reports
Tony Cook authored
73
7fcc2ea @tonycoz allow imcover.perl to specify a subset of tests to run
authored
74 sub run {
75 my $cmd = shift;
76
77 print "Running: $cmd\n" if $verbose;
78 return system $cmd;
79 }
Something went wrong with that request. Please try again.