SET(CMAKE_CXX_FLAGS_DEBUG "-g -std=c++17 -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_C_FLAGS_RELEASE "-g -O2")
SET(CMAKE_CXX_FLAGS_RELEASE "-g -std=c++17 -O2")
+SET(CMAKE_C_FLAGS_COVERAGE "-g -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
+SET(CMAKE_CXX_FLAGS_COVERAGE "-g -std=c++17 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
# Force PIE
SET(CMAKE_POSITION_INDEPENDENT_CODE "True")
SET(KEY_MANAGER_PATH ${PROJECT_SOURCE_DIR}/src/manager)
+IF(NOT DEFINED COVERAGE_DIR)
+ SET(COVERAGE_DIR
+ "/opt/data/ckm-coverage"
+ CACHE PATH
+ "Read-only coverage data directory")
+ENDIF(NOT DEFINED COVERAGE_DIR)
+ADD_DEFINITIONS("-DCOVERAGE_DIR=\"${COVERAGE_DIR}\"")
+
IF (TZ_BACKEND_ENABLED)
ADD_DEFINITIONS("-DTZ_BACKEND_ENABLED")
SET(EXTRA_KM_DEPS ${EXTRA_KM_DEPS} tef-libteec)
%{!?build_type:%global build_type RELEASE}
%global coverage_only 0
%if %{build_type} == COVERAGE_ONLY
- %global build_type DEBUG
+ %global build_type COVERAGE
%global coverage_only 1
%endif
BuildRequires: pkgconfig(tef-libteec)
%endif
Requires: libkey-manager-common = %{version}-%{release}
+%if "%{build_type}" == "COVERAGE"
BuildRequires: lcov
+%endif
%{?systemd_requires}
%description -n key-manager-initial-values
Includes ckm_initial_values tool for initial values XML generation
+%if "%{build_type}" == "COVERAGE"
+
%package -n key-manager-coverage
Summary: Central Key Manager code coverage data
Group: Security/Testing
License: Apache-2.0
-Requires: key-manager-unit-tests
-Requires: lcov
-Requires: gcc
+Requires: key-manager-unit-tests = %{version}-%{release}
+Requires: key-manager-debugsource = %{version}-%{release}
+Requires: lcov
+Requires: gcc
%description -n key-manager-coverage
Central Key Manager code coverage data
+%endif
+
%prep
%setup -q
%unit_tests_dir
###############################################################################
-%if %{build_type} == DEBUG
+%if "%{build_type}" == "COVERAGE"
###############################################################################
%files -n key-manager-coverage
%license LICENSE
%{bin_dir}/key-manager-coverage.sh
-%{_builddir}/%{name}-%{version}
%coverage_dir
-#################### %{build_type} == DEBUG ###################################
+#################### %{build_type} == COVERAGE ################################
%endif
###############################################################################
-# enable code coverage in debug build only
-IF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
-
- # coverage build flags
- SET(COVERAGE_LINK_OPTIONS --coverage)
- SET(COVERAGE_COMPILE_OPTIONS --coverage)
+IF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
# coverage data
SET(COVERAGE_BUILD_DIR
FILES_MATCHING PATTERN "*.gcno"
)
- # install all the source & header files just as in the buildir
- INSTALL(
- DIRECTORY ${PROJECT_SOURCE_DIR}/
- DESTINATION ${CMAKE_BINARY_DIR}
- FILES_MATCHING PATTERN "*.cpp" PATTERN "*.h"
- )
-
# install code coverage automation script
CONFIGURE_FILE(key-manager-coverage.sh.in key-manager-coverage.sh @ONLY)
- INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/key-manager-coverage.sh DESTINATION ${BIN_DIR})
+ INSTALL(
+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/key-manager-coverage.sh
+ DESTINATION ${BIN_DIR}
+ )
-ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
FIND_PACKAGE(Threads REQUIRED)
${TZ_BACKEND_SOURCES}
)
-TARGET_COMPILE_OPTIONS(${TARGET_UNIT_TESTS} PRIVATE ${COVERAGE_COMPILE_OPTIONS})
-
TARGET_LINK_LIBRARIES(
${TARGET_UNIT_TESTS}
${KEY_MANAGER_DEP_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
boost_unit_test_framework
-ldl
- ${COVERAGE_LINK_OPTIONS}
)
INSTALL(TARGETS ${TARGET_UNIT_TESTS} DESTINATION bin)
set -exuo pipefail
-REPORT="key-manager-coverage.info"
-STDERR="key-manager-coverage.stderr"
-HTML_DIR="key-manager-coverage"
+REPORT="@PROJECT_NAME@-coverage.info"
+STDERR="@PROJECT_NAME@-coverage.stderr"
+HTML_DIR="@PROJECT_NAME@-coverage"
+
+SRCS_DIR="/usr/src/debug/@PROJECT_NAME@-@VERSION@"
# create dir for the report
mkdir $HTML_DIR
# launch unit tests
ckm-unit-tests
+# copy source files
+cp -rp $SRCS_DIR/* "@CMAKE_BINARY_DIR@"
+
# copy gcda files
cp -r "@COVERAGE_BUILD_DIR@"/* "@COVERAGE_DIR@"