CACHE PATH
"Running system information directory")
+IF(NOT DEFINED COVERAGE_DIR)
+SET(COVERAGE_DIR
+ "${CMAKE_INSTALL_FULL_DATAROOTDIR}/${PROJECT_NAME}-coverage"
+ CACHE PATH
+ "Read-only coverage data directory")
+ENDIF(NOT DEFINED COVERAGE_DIR)
+
ADD_DEFINITIONS("-DLIB_DIR=\"${LIB_DIR}\"")
ADD_DEFINITIONS("-DBIN_DIR=\"${BIN_DIR}\"")
ADD_DEFINITIONS("-DSBIN_DIR=\"${SBIN_DIR}\"")
ADD_DEFINITIONS("-DDATA_ROOT_DIR=\"${DATA_ROOT_DIR}\"")
ADD_DEFINITIONS("-DSYSTEMD_UNIT_DIR=\"${SYSTEMD_UNIT_DIR}\"")
ADD_DEFINITIONS("-DSOCKET_DIR=\"${SOCKET_DIR}\"")
+ADD_DEFINITIONS("-DCOVERAGE_DIR=\"${COVERAGE_DIR}\"")
############################# compiler flags ##################################
%endif
+%if "%{build_type}" == "COVERAGE"
+BuildRequires: lcov
+%endif
+
%global project_name cynara
+%global coverage_dir %{_datadir}/cynara-coverage
%package -n cynara-devel
Summary: Cynara development files
-DSYSTEMD_UNIT_DIR:PATH=%{_unitdir} \
-DSOCKET_DIR:PATH=/run/%{project_name} \
-DDB_FILES_SMACK_LABEL="System" \
- -DMONITORING=ON
+ -DMONITORING=ON \
+ -DCOVERAGE_DIR=%{coverage_dir}
make %{?jobs:-j%jobs}
%install
#rm -rf %{buildroot}
%make_install
-%if "%{build_type}" == "COVERAGE"
-mkdir -p %{buildroot}%{_datadir}/gcov/cynara
-find -name '*.gcno' -exec cp --parents {} %{buildroot}%{_datadir}/gcov/cynara \;
-%endif
-
%post -n libcynara-client -p /sbin/ldconfig
%postun -n libcynara-client -p /sbin/ldconfig
%{_libdir}/libcynara-monitor.so.*
%if "%{build_type}" == "COVERAGE"
-%package gcov
-Summary: Cynara gcov for measuring test coverage
-Requires: lcov
-Requires: gcc
+%package -n cynara-coverage
+Summary: Cynara code coverage data
+Group: Security/Testing
Requires: cynara-tests = %{version}
Requires: libcynara-commons-debugsource = %{version}
-Group: Security/Testing
-%description gcov
-Cynara code coverage objects
+Requires: lcov
+Requires: gcc
+
+%description -n cynara-coverage
+Cynara code coverage data
+
+%files -n cynara-coverage
+%manifest cynara-tests.manifest
+%{_bindir}/cynara-coverage.sh
+%coverage_dir
-%files gcov
-%{_datadir}/gcov/cynara
%endif
FIND_PACKAGE(Threads REQUIRED)
+IF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
+ # coverage data
+ SET(COVERAGE_BUILD_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET_CYNARA_TESTS}.dir/
+ )
+
+ # install gcno files
+ INSTALL(
+ DIRECTORY ${COVERAGE_BUILD_DIR}/
+ DESTINATION ${COVERAGE_DIR}
+ FILES_MATCHING PATTERN "*.gcno"
+ )
+
+ # install code coverage automation script
+ CONFIGURE_FILE(cynara-coverage.sh.in cynara-coverage.sh @ONLY)
+ INSTALL(
+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cynara-coverage.sh
+ DESTINATION ${BIN_DIR}
+ )
+
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
ADD_DEFINITIONS("-DCYNARA_NO_LOGS")
SET(CYNARA_SRC ${PROJECT_SOURCE_DIR}/src)
--- /dev/null
+#!/bin/bash
+
+set -exuo pipefail
+
+REPORT="@PROJECT_NAME@-coverage.info"
+STDERR="@PROJECT_NAME@-coverage.stderr"
+HTML_DIR="@PROJECT_NAME@-coverage"
+
+SRCS_DIR="/usr/src/debug/@PROJECT_NAME@-@CYNARA_VERSION@"
+
+# create dir for the report
+mkdir $HTML_DIR
+
+# remove old gcda files
+find / -iname "*.gcda" -exec rm {} \;
+
+# launch unit tests
+cynara-tests
+
+# copy source files
+cp -rp $SRCS_DIR/* "@CMAKE_BINARY_DIR@"
+
+# copy gcda files
+cp -r "@COVERAGE_BUILD_DIR@"/* "@COVERAGE_DIR@"
+
+# prepare report
+rm -f $STDERR
+lcov --no-external -c -d "@COVERAGE_DIR@" -b "@CMAKE_BINARY_DIR@" -o $REPORT 2>$STDERR
+lcov -r $REPORT "@CMAKE_BINARY_DIR@/test/*" -o $REPORT
+
+# check warnings
+if [ -s $STDERR ]
+then
+ echo "Warnings detected (see $STDERR). Aborting."
+ exit 1
+fi
+
+# html
+genhtml $REPORT --output-directory $HTML_DIR/