Sergey Petrunya <psergey@askmonty.org> writes:
At file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/
------------------------------------------------------------ revno: 2747 revision-id: psergey@askmonty.org-20090825150255-46i5gvl2ctd0jcm2 parent: psergey@askmonty.org-20090825145915-rxwmfczgqe69r5ju committer: Sergey Petrunya <psergey@askmonty.org> branch nick: maria-5.1-table-elim-r11-gcov timestamp: Tue 2009-08-25 18:02:55 +0300 message: Gcov support improvements - add process-gcov-annotations.pl script that processes .gcov files according to purecov annotations in source code - add --gcov-src-dir=subdir option to mysql-test-run so that one can do gcov processing only for source files in a certain directory.
Nice additions!
=== modified file 'mysql-test/lib/mtr_gcov.pl' --- a/mysql-test/lib/mtr_gcov.pl 2009-04-25 09:04:38 +0000 +++ b/mysql-test/lib/mtr_gcov.pl 2009-08-25 15:02:55 +0000
@@ -62,6 +64,7 @@ $dir_reported= 1; } system("$gcov $f 2>>$start_dir/$gcov_err >>$start_dir/$gcov_msg"); + system("perl $basedir/mysql-test/lib/process-purecov-annotations.pl $f.gcov");
Better do something like this: system("perl", "$basedir/mysql-test/lib/process-purecov-annotations.pl", "$f.gcov"); as it is robust to spaces and other shell metachars in the data.
=== added file 'mysql-test/lib/process-purecov-annotations.pl' --- a/mysql-test/lib/process-purecov-annotations.pl 1970-01-01 00:00:00 +0000 +++ b/mysql-test/lib/process-purecov-annotations.pl 2009-08-25 15:02:55 +0000
+ # Besides purecov annotations, also remove uncovered code mark from cases + # like the following: + # + # -: 211:*/ + # -: 212:class Field_value : public Value_dep + # #####: 213:{ + # -: 214:public: + # + # I have no idea why would gcov think there is uncovered code there
Maybe generated default constructor, destructor, or the like that was not run?
+ # + my @arr= split(/:/, $line); + if ($skipping || $line =~ /purecov: *(inspected|deadcode)/ || + $arr[2] =~ m/^{ */)
Note that m/^{ */ matches the same lines as m/^{/. Maybe you intended to use m/^{ *$/ to require the line to be empty except for a starting brace? Or else just use m/^{/.
+ { + # Change '####' to '-'. + $arr[0] =~ s/#####/ -/g; + $line= join(":", @arr); + } + print OUT $line; + } + close(IN); + close(OUT); + system("cat $out_file_name > $in_file_name"); + system("rm $out_file_name");
system("mv", "-f", $out_file_name, $in_file_name); (or cp / rm with multi-argument system()).
=== modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2009-06-22 08:06:35 +0000 +++ b/mysql-test/mysql-test-run.pl 2009-08-25 15:02:55 +0000 @@ -169,6 +169,7 @@ our $opt_mem= $ENV{'MTR_MEM'};
our $opt_gcov; +our $opt_gcov_src_dir;
Don't you need to initialise to empty string '' to avoid a warning with undefined value? (Or maybe getopt handles it?). - Kristian.