From 89a485193e5996636a1cde7de793fad4b28420dd Mon Sep 17 00:00:00 2001
From: Hans Dembinski <hans.dembinski@gmail.com>
Date: Wed, 24 Apr 2019 18:35:31 +0200
Subject: [PATCH] init

---
 CMakeLists.txt    | 25 ++++++++++++-------------
 Tools/coverage.sh | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+), 13 deletions(-)
 create mode 100755 Tools/coverage.sh

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6d82cd88..e7c9c1ff 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,12 +22,17 @@ set (CMAKE_CXX_EXTENSIONS OFF)
 enable_testing ()
 set (CTEST_OUTPUT_ON_FAILURE 1)
 
+option(COVERAGE "Generate coverage data" OFF)
+if(COVERAGE)
+  set(CMAKE_BUILD_TYPE "Debug")
+endif()
+
 # Set a default build type if none was specified
 set(default_build_type "Release")
 if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
   set(default_build_type "Debug")
 endif()
- 
+
 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
   message(STATUS "Setting build type to '${default_build_type}' as no other was specified.")
   set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
@@ -37,11 +42,17 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
     "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
 endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
 
+
 # enable warnings and disallow non-standard language
 set(CMAKE_CXX_FLAGS "-Wall -pedantic -Wextra -Wno-ignored-qualifiers")
 set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
 set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g") # -O2 would not trade speed for size, neither O2/3 use fast-math
 set(CMAKE_Fortran_FLAGS "-std=legacy")
+if(COVERAGE)
+  set(CMAKE_CXX_FLAGS "--coverage")
+  set(CMAKE_EXE_LINKER_FLAGS "--coverage")
+  set(CMAKE_SHARED_LINKER_FLAGS "--coverage")
+endif()
 
 # clang produces a lot of unecessary warnings without this:
 add_compile_options("$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-nonportable-include-path>")
@@ -52,18 +63,6 @@ if (WITH_COAST)
   add_compile_options("-fPIC")
 endif()
 
-
-# unit testing coverage, does not work yet
-#include (CodeCoverage)
-##set(COVERAGE_LCOV_EXCLUDES 'Documentation/*')
-##setup_target_for_coverage(${PROJECT_NAME}_coverage ${PROJECT_TEST_NAME} coverage)
-#SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML (
-#  NAME corsika_coverage
-#  EXECUTABLE ctest
-#  #-j ${PROCESSOR_COUNT}
-#  #     DEPENDENCIES corsika
-#  )
-
 #add_custom_target (corsika_pre_build)
 #add_custom_command (TARGET corsika_pre_build PRE_BUILD COMMAND "${PROJECT_SOURCE_DIR}/pre_compile.py")
 
diff --git a/Tools/coverage.sh b/Tools/coverage.sh
new file mode 100755
index 00000000..c698cf5f
--- /dev/null
+++ b/Tools/coverage.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+# must be executed in project root folder
+if [ -z $GCOV ]; then
+  GCOV=gcov
+fi
+
+LCOV_VERSION="1.13"
+LCOV_DIR="lcov-${LCOV_VERSION}"
+
+if [ ! -e $LCOV_DIR ]; then
+  wget -O - https://github.com/linux-test-project/lcov/releases/download/v${LCOV_VERSION}/lcov-${LCOV_VERSION}.tar.gz | tar zxf -
+fi
+
+# LCOV="$LCOV_EXE --gcov-tool=${GCOV} --rc lcov_branch_coverage=1"
+LCOV="${LCOV_DIR}/bin/lcov --gcov-tool=${GCOV}" # no branch coverage
+
+# collect raw data
+$LCOV --base-directory `pwd` \
+  --directory `pwd` \
+  --capture --output-file coverage.info
+
+# remove uninteresting entries
+$LCOV --extract coverage.info "*/corsika/*" --output-file coverage.info
+
+if [ $CI ]; then
+  echo "Coverage report on CI currently disabled"
+  # upload if on CI
+  # curl -s https://codecov.io/bash | bash -s - -f coverage.info -X gcov -x $GCOV
+else
+  # otherwise just print
+  $LCOV_DIR/bin/genhtml coverage.info -o coverage-report
+fi
-- 
GitLab