changeset 30:656efbd10859

build: Enable coverage reporting with `make coverage`
author Lewin Bormann <lbo@spheniscida.de>
date Tue, 20 Aug 2019 19:23:28 +0200
parents 3e38ca5d5feb
children 57fb1b70b990
files CMakeLists.txt coverage.sh src/CMakeLists.txt src/base/CMakeLists.txt
diffstat 4 files changed, 31 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Mon Aug 19 22:30:24 2019 +0200
+++ b/CMakeLists.txt	Tue Aug 20 19:23:28 2019 +0200
@@ -28,3 +28,8 @@
 
     ADD_CUSTOM_TARGET(doxygen ALL COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} VERBATIM)
 endif ()
+
+ADD_CUSTOM_TARGET(coverage
+    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/coverage.sh ${YALL_TESTS}
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coverage.sh	Tue Aug 20 19:23:28 2019 +0200
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Run this from the build directory using `make coverage`.
+
+set -e
+
+KCOV="kcov"
+KCOV_ARGS="--exclude-pattern=/usr/src,/usr/include,/usr/lib,_test.c"
+
+TESTS=`find . -name \*_test -executable -and -not -type l`
+TESTS_BASENAME=`find . -name \*_test -and -executable -and -not -type l -exec /bin/basename {} \;`
+
+for BINARY in $TESTS; do
+    $KCOV $KCOV_ARGS . $BINARY
+done
+
+$KCOV --merge --report $KCOV_ARGS . $TESTS_BASENAME
--- a/src/CMakeLists.txt	Mon Aug 19 22:30:24 2019 +0200
+++ b/src/CMakeLists.txt	Tue Aug 20 19:23:28 2019 +0200
@@ -8,7 +8,10 @@
 
 TARGET_LINK_LIBRARIES(core base)
 
+# Tests
+ADD_COMPILE_OPTIONS(--coverage -ftest-coverage)
+
 # Atom test.
 ADD_EXECUTABLE(atom_test atom_test.c)
-TARGET_LINK_LIBRARIES(atom_test core)
+TARGET_LINK_LIBRARIES(atom_test core gcov)
 ADD_TEST(NAME atom_test_t COMMAND ./atom_test)
--- a/src/base/CMakeLists.txt	Mon Aug 19 22:30:24 2019 +0200
+++ b/src/base/CMakeLists.txt	Tue Aug 20 19:23:28 2019 +0200
@@ -5,12 +5,15 @@
     vec.c
 )
 
+# Tests
+ADD_COMPILE_OPTIONS(--coverage -ftest-coverage)
+
 # str test.
 ADD_EXECUTABLE(str_test str_test.c)
-TARGET_LINK_LIBRARIES(str_test base)
+TARGET_LINK_LIBRARIES(str_test base gcov)
 ADD_TEST(NAME str_test_t COMMAND ./str_test)
 
 # vec test.
 ADD_EXECUTABLE(vec_test vec_test.c)
-TARGET_LINK_LIBRARIES(vec_test base)
+TARGET_LINK_LIBRARIES(vec_test base gcov)
 ADD_TEST(NAME vec_test_t COMMAND ./vec_test)