Skip to content

Commit 29ca5d0

Browse files
author
Ingo Struewing
committed
Bug#40446 - mysql-test-run --gcov is broken
Some variable values were missing and perl constructs failed. Initialized the variables and refactored the gcov functions.
1 parent d3380a9 commit 29ca5d0

File tree

3 files changed

+40
-29
lines changed

3 files changed

+40
-29
lines changed

.bzrignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,6 +1295,8 @@ mysql-test/linux_sys_vars.inc
12951295
mysql-test/load_sysvars.inc
12961296
mysql-test/mtr
12971297
mysql-test/mysql-test-run
1298+
mysql-test/mysql-test-gcov.err
1299+
mysql-test/mysql-test-gcov.msg
12981300
mysql-test/mysql-test-run-shell
12991301
mysql-test/mysql-test-run.log
13001302
mysql-test/mysql_test_run_new

mysql-test/lib/mtr_gcov.pl

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,40 +22,46 @@
2222

2323
sub gcov_prepare ($) {
2424
my ($dir)= @_;
25+
print "Purging gcov information from '$dir'...\n";
2526

26-
`find $dir -name \*.gcov \
27-
-or -name \*.da | xargs rm`;
27+
system("find $dir -name \*.gcov -o -name \*.da"
28+
. " -o -name \*.gcda | grep -v 'README.gcov\$' | xargs rm");
2829
}
2930

30-
my @mysqld_src_dirs=
31-
(
32-
"strings",
33-
"mysys",
34-
"include",
35-
"extra",
36-
"regex",
37-
"isam",
38-
"merge",
39-
"myisam",
40-
"myisammrg",
41-
"heap",
42-
"sql",
43-
);
44-
31+
#
32+
# Collect gcov statistics.
33+
# Arguments:
34+
# $dir basedir, normally source directory
35+
# $gcov gcov utility program [path] name
36+
# $gcov_msg message file name
37+
# $gcov_err error file name
38+
#
4539
sub gcov_collect ($$$) {
4640
my ($dir, $gcov, $gcov_msg, $gcov_err)= @_;
4741

42+
# Get current directory to return to later.
4843
my $start_dir= cwd();
4944

50-
print "Collecting source coverage info...\n";
51-
-f $gcov_msg and unlink($gcov_msg);
52-
-f $gcov_err and unlink($gcov_err);
53-
foreach my $d ( @mysqld_src_dirs )
54-
{
55-
chdir("$dir/$d");
56-
foreach my $f ( (glob("*.h"), glob("*.cc"), glob("*.c")) )
57-
{
58-
`$gcov $f 2>>$gcov_err >>$gcov_msg`;
45+
print "Collecting source coverage info using '$gcov'...\n";
46+
-f "$start_dir/$gcov_msg" and unlink("$start_dir/$gcov_msg");
47+
-f "$start_dir/$gcov_err" and unlink("$start_dir/$gcov_err");
48+
49+
my @dirs= `find "$dir" -type d -print | sort`;
50+
#print "List of directories:\n@dirs\n";
51+
52+
foreach my $d ( @dirs ) {
53+
my $dir_reported= 0;
54+
chomp($d);
55+
chdir($d) or next;
56+
57+
foreach my $f ( (glob("*.h"), glob("*.cc"), glob("*.c")) ) {
58+
$f =~ /(.*)\.[ch]c?/;
59+
-f "$1.gcno" or next;
60+
if (!$dir_reported) {
61+
print "Collecting in '$d'...\n";
62+
$dir_reported= 1;
63+
}
64+
system("$gcov $f 2>>$start_dir/$gcov_err >>$start_dir/$gcov_msg");
5965
}
6066
chdir($start_dir);
6167
}

mysql-test/mysql-test-run.pl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,9 @@ END
163163
our $opt_mem= $ENV{'MTR_MEM'};
164164

165165
our $opt_gcov;
166-
our $opt_gcov_err;
167-
our $opt_gcov_msg;
166+
our $opt_gcov_exe= "gcov";
167+
our $opt_gcov_err= "mysql-test-gcov.msg";
168+
our $opt_gcov_msg= "mysql-test-gcov.err";
168169

169170
our $glob_debugger= 0;
170171
our $opt_gdb;
@@ -396,7 +397,7 @@ sub main {
396397
mtr_print_line();
397398

398399
if ( $opt_gcov ) {
399-
gcov_collect($basedir, $opt_gcov,
400+
gcov_collect($basedir, $opt_gcov_exe,
400401
$opt_gcov_msg, $opt_gcov_err);
401402
}
402403

@@ -5057,6 +5058,8 @@ ($)
50575058
to turn off.
50585059
50595060
sleep=SECONDS Passed to mysqltest, will be used as fixed sleep time
5061+
gcov Collect coverage information after the test.
5062+
The result is a gcov file per source and header file.
50605063
50615064
HERE
50625065
exit(1);

0 commit comments

Comments
 (0)