maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #12207
Re: 00f9df29224: MDEV-20787: Script dgcov.pl does not work
Hi, Anel!
On Apr 23, Anel Husakovic wrote:
> revision-id: 00f9df29224 (mariadb-10.2.29-23-g00f9df29224)
> parent(s): 6718d3bc324
> author: Anel Husakovic <anel@xxxxxxxxxxx>
> committer: Anel Husakovic <anel@xxxxxxxxxxx>
> timestamp: 2019-11-19 15:00:48 +0100
> message:
>
> MDEV-20787: Script dgcov.pl does not work
>
> Let's change CMakeList with `--coverage` flag as an alias for
> `-fprofile-arcs -ftest-coverage -lgcov` in addition.
> When the server is compiled with `-DENABLE_GCOV=ON`, from object files are generated
> `.gcno` and `.gcda` files.
> `./mtr --gcov is_check_constraint` is invoking the script calls
> `./dgcov.pl --purge`, `./mtr is_check_constraint`,
> `./dgcov.pl --generate>/var/last_changes.dgcov`.
> The `purge` flag is clearing `.gcda` files (and others extensions),
> while running the test new `.gcda` files are obtained.
> With `generate` flag, `gcov -i` (`intermediate format`) is called
> on obtained `<object-files-name>.gcda` files (`dbug.c.gcda` e.g.).
> The patch is tested on `gcov 6.3` and `gcov 7.4` versions
> and can be seen that resulting `.gcov` file for `6.3` creates
> `<full path>.gcov` (`dbug.c.gcda.gcov` e.g.) file,
> where `gcov 7.4` is still creating `object-file-names.gcov`(`dbug.c.gcov`) files
> as `gcov` in general is doing.
>
> diff --git a/CMakeLists.txt b/CMakeLists.txt
> index 0dcc2a75587..af025a0312f 100644
> --- a/CMakeLists.txt
> +++ b/CMakeLists.txt
> @@ -249,7 +249,7 @@ SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC")
>
> OPTION(ENABLE_GCOV "Enable gcov (debug, Linux builds only)" OFF)
> IF (ENABLE_GCOV)
> - MY_CHECK_AND_SET_COMPILER_FLAG("-fprofile-arcs -ftest-coverage -lgcov" DEBUG)
> + MY_CHECK_AND_SET_COMPILER_FLAG("--coverage" DEBUG)
Why?
Since what version does gcc support it?
> ENDIF()
>
> MY_CHECK_AND_SET_COMPILER_FLAG(-ggdb3 DEBUG)
> diff --git a/mysql-test/dgcov.pl b/mysql-test/dgcov.pl
> index fbc5540e697..47ffaca04ef 100755
> --- a/mysql-test/dgcov.pl
> +++ b/mysql-test/dgcov.pl
> @@ -68,8 +68,11 @@ if ($opt_purge)
> system($cmd)==0 or die "system($cmd): $? $!";
> exit 0;
> }
> -
> +my $gcov_vers= `gcov -v`;
> +$gcov_vers=~ s/\D//g;
> +$gcov_vers= substr($gcov_vers, 0, 1);
my gcov is 9.3.0. gcc version 10 is already out.
You get just the first digit, 10 will become 1.
Better to something like
$gcov_vers ~= s/^.*(\d+\.\d+\.\d+).*$/\1/s;
> find(\&gcov_one_file, $root);
> +undef $gcov_vers;
why?
> find(\&write_coverage, $root) if $opt_generate;
> exit 0 if $opt_only_gcov;
>
> @@ -162,7 +165,16 @@ sub gcov_one_file {
> }
>
> # now, read the generated file
> - open FH, '<', "$_.gcov" or die "open(<$_.gcov): $!";
> + if($gcov_vers<7)
> + {
> + open FH, '<', "$_.gcov" or die "open(<$_.gcov): $!";
> + }
> + else
> + {
> + my $f=substr $_, 0, -5;
> + open FH, '<', "$f.gcov" or die "open(<$f.gcov): $!";
> + undef $f;
> + }
I'd rather write it more compact, in two lines like
my $f = $gcov_vers < 7 ? $_ : substr $_, 0, -5;
open FH, '<', "$f.gcov" or die "open(<$f.gcov): $!";
> my $fname;
> while (<FH>) {
> chomp;
>
Regards,
Sergei
VP of MariaDB Server Engineering
and security@xxxxxxxxxxx