From d11d637ea29b48161c216f45b15f494c26ee0844 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Tue, 29 May 2018 11:24:57 +0200
Subject: [PATCH] Now builds coverage using gcovr.

Produces both text output and html report in ${CMAKE_BINARY_DIR}/coverage
---
 CMakeLists.txt | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8fa0c9444..3a444de3a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -132,7 +132,6 @@ include_directories(src/scheme)
 
 include_directories(src/experimental)
 
-
 # Pastis tests
 
 set(CATCH_MODULE_PATH "${PASTIS_SOURCE_DIR}/packages/Catch2")
@@ -144,6 +143,35 @@ add_subdirectory("${CATCH_MODULE_PATH}")
 add_subdirectory(tests)
 enable_testing()
 
+# unit tests coverage
+
+if("${CMAKE_BUILD_TYPE}" STREQUAL "Coverage")
+  find_program(GCOVR gcovr)
+  if(NOT GCOVR)
+    message(FATAL_ERROR "gcovr not found, cannot perform coverage.")
+  endif()
+
+  set(GCOVR_OPTIONS --object-directory="${PASTIS_BINARY_DIR}" -r "${PASTIS_SOURCE_DIR}/src"  -e "${PASTIS_SOURCE_DIR}/src/experimental" -e "${PASTIS_SOURCE_DIR}/src/main.cpp")
+  add_custom_target(coverage
+    ALL
+    # COMMAND ${unit_test_EXECUTABLE}
+    COMMAND ${GCOVR} ${GCOVR_OPTIONS}
+    DEPENDS unit_tests pastis
+    COMMENT "Running gcovr to build coverage report."
+    )
+
+  add_custom_target(coverage-report
+    ALL
+    COMMAND ${CMAKE_COMMAND} -E remove_directory "${PASTIS_BINARY_DIR}/coverage"
+    COMMAND ${CMAKE_COMMAND} -E make_directory "${PASTIS_BINARY_DIR}/coverage"
+    COMMAND ${GCOVR} ${GCOVR_OPTIONS} --html --html-details -o "${PASTIS_BINARY_DIR}/coverage/coverage.html"
+    DEPENDS coverage
+    COMMENT "Building coverage html report."
+    WORKING_DIRECTORY "${PASTIS_BINARY_DIR}"
+    )
+
+endif()
+
 # -----------------------------------------------------
 
 link_libraries("-rdynamic")
-- 
GitLab