summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrillig <rillig@NetBSD.org>2020-12-03 18:43:02 +0000
committerrillig <rillig@NetBSD.org>2020-12-03 18:43:02 +0000
commitaa3e0c28dad151b5aba5260d002c8e5e4e7eea60 (patch)
tree17b0fdd0e72390b399c9f76b137147d2ccdb21aa
parent58910c34dfc1d900cd19b782694abcebe49336fb (diff)
make(1): format coverage summary as a table
This is only used interactively, not in the official builds, therefore the additional dependency on Perl doesn't matter. The same result could have been achieved in any other programming language, but probably not as concisely.
-rw-r--r--usr.bin/make/Makefile13
1 files changed, 10 insertions, 3 deletions
diff --git a/usr.bin/make/Makefile b/usr.bin/make/Makefile
index 80fd57399ea..2b81a622761 100644
--- a/usr.bin/make/Makefile
+++ b/usr.bin/make/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.106 2020/10/25 13:25:19 rillig Exp $
+# $NetBSD: Makefile,v 1.107 2020/12/03 18:43:02 rillig Exp $
# @(#)Makefile 5.2 (Berkeley) 12/28/90
PROG= make
@@ -43,6 +43,13 @@ USE_COVERAGE?= no # works only with gcc; clang9 fails to link
.if ${USE_COVERAGE} == "yes"
GCOV?= gcov
COPTS+= --coverage -O0 -ggdb
+GCOV_PERL= if (/^File '(\S+)'/) {
+GCOV_PERL+= $$file = $$1; $$func = "";
+GCOV_PERL+= } elsif (/^Function '(\S+)'/) {
+GCOV_PERL+= $$func = $$1;
+GCOV_PERL+= } elsif (/^Lines executed:(\d+\.\d+)% of (\d+)/) {
+GCOV_PERL+= printf("%6.2f %5d %s%s\n", $$1, $$2, $$file, $$func);
+GCOV_PERL+= }
LDADD+= --coverage
.endif
CLEANFILES+= *.gcda *.gcno *.gcov
@@ -170,8 +177,8 @@ test: .MAKE
cd ${.CURDIR}/unit-tests \
&& MAKEFLAGS= ${TEST_MAKE} -r -m / TEST_MAKE=${TEST_MAKE} ${TESTS:DTESTS=${TESTS:Q}} ${.TARGET}
.if ${USE_COVERAGE} == yes
- ${GCOV} ${GCOV_OPTS} ${SRCS}
- sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov
+ @${GCOV} ${GCOV_OPTS} ${SRCS} | perl -ne ${GCOV_PERL:Q} | sort -nr
+ @sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov
.endif
accept sync-mi: .MAKE