From 4224aa0e760ed2abcce3799b05f2290aa66889cc Mon Sep 17 00:00:00 2001
From: Dan Goodliffe <dan@randomdan.homeip.net>
Date: Sun, 2 May 2021 15:46:38 +0100
Subject: Latest cov function

---
 bashrc | 45 +++++++++++++++++++++++++++++----------------
 1 file changed, 29 insertions(+), 16 deletions(-)

(limited to 'bashrc')

diff --git a/bashrc b/bashrc
index 64efbbc..6146ca8 100644
--- a/bashrc
+++ b/bashrc
@@ -28,27 +28,40 @@ showimage() {
 }
 
 cov() {
-	src=${1}
-	src=$(realpath ${src:=$(pwd)})
-	cov=/tmp/cov.$$
-	all=$cov/all
-	key=$cov/key
-	html=$src/bin/cov/html
-	test -d $src || ( echo "$src not a directory" && return 1 )
-	echo "Cleaning $src"
-	find $src -name "*.gcda" -type f -delete
-	find $src -name "*.run" -type f -delete
-	echo "Building in ${src}"
-	build $src -d0 variant=coverage
+	local cov=/tmp/cov.$$
+	local all=$cov/all
+	local key=$cov/key
+	local html=$cov/html
+	local htmlfin=bin/cov
+	local gcov=$(which $(build $@ -qand1 variant=coverage | grep -w compile | \
+			sed -n "s/.*\/gcc-\([0-9]\+\.[0-9]\+\.[0-9]\+\)\/.*/gcov-\1/p" | head -n1))
+	if [[ ! -x $gcov ]] ; then
+		echo "Couldn't find a suitable gcov"
+		return 1
+	fi
+	echo "Using $gcov"
+
+	echo "Removing previous GC notes and runs"
+	lcov -z -d .
+	find -path */coverage/*.run -delete
+
+	echo "Building $@"
+	build $@ -q variant=coverage || return 2
+
 	echo "Extracting coverage data"
 	mkdir -p $cov
-	lcov -d $src -c -o $all --derive-func-data --no-external -b $src -q
-	lcov --remove $all "*/bin/*" -o $key -q
+	lcov -d . -c -o $all --derive-func-data --no-external --rc geninfo_auto_base=1 -q --gcov-tool $gcov || return 3
+	lcov --remove $all "*/bin/*" -o $key -q || return 4
+
 	echo "Generating HTML"
 	mkdir -p $html
-	genhtml $key -o $html -s -k -t $src --demangle-cpp --sort --function-coverage -q --num-spaces=2
+	genhtml $key -o $html -s -k -t . --demangle-cpp --sort --function-coverage -q --num-spaces=2 || return 5
+	rsync -a --delete-after $html/ $htmlfin/
 	rm -rf $cov
-	[ "${2}" != "0" ] && xdg-open file://$src/bin/cov/html/index.html
+
+	xdotool search --name LCOV windowactivate --sync key F5 windowactivate $(xdotool getactivewindow) || \
+		xdg-open "file://$(realpath $htmlfin)/index.html"
+	echo "Done"
 }
 
 sizes() {
-- 
cgit v1.2.3