SET(CMAKE_BUILD_TYPE "RELEASE")
ENDIF(NOT CMAKE_BUILD_TYPE)
+IF(NOT DEFINED COVERAGE_DIR)
+ SET(COVERAGE_DIR
+ "${SHARE_INSTALL_PREFIX}/${PROJECT_NAME}-coverage"
+ CACHE PATH
+ "Read-only coverage data directory")
+ENDIF(NOT DEFINED COVERAGE_DIR)
+ADD_DEFINITIONS("-DCOVERAGE_DIR=\"${COVERAGE_DIR}\"")
+
SET(CMAKE_C_FLAGS_DEBUG "-std=c11 -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_CXX_FLAGS_DEBUG "-std=c++17 -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_C_FLAGS_RELEASE "-std=c11 -O2 -DNDEBUG")
SET(CMAKE_CXX_FLAGS_RELEASE "-std=c++17 -O2 -DNDEBUG")
+SET(CMAKE_C_FLAGS_COVERAGE "-std=c11 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
+SET(CMAKE_CXX_FLAGS_COVERAGE "-std=c++17 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
ADD_DEFINITIONS("-Werror")
ADD_DEFINITIONS("-Wall")
BuildRequires: pkgconfig(cynara-creds-socket)
BuildRequires: pkgconfig(cynara-session)
BuildRequires: boost-devel
+%if "%{build_type}" == "COVERAGE"
BuildRequires: lcov
+%endif
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
Requires: boost-system
%global user_name security_fw
%global group_name security_fw
%global smack_domain_name System
-%global coverage_dir /opt/data/device-certificate-manager-coverage
+%global coverage_dir %{_datadir}/device-certificate-manager-coverage
%description
Device Certificate Manager provides cryptography services for the Iotivity framework.
%description -n device-certificate-manager-tests
Internal tests for Device Certificate Manager
+%if "%{build_type}" == "COVERAGE"
+
%package -n device-certificate-manager-coverage
Summary: Device Certificate Manager code coverage data
Group: Security/Testing
-Requires: device-certificate-manager-tests
+Requires: device-certificate-manager-tests = %{version}-%{release}
+Requires: device-certificate-manager-debugsource = %{version}-%{release}
Requires: lcov
Requires: gcc
%description -n device-certificate-manager-coverage
Device Certificate Manager code coverage data
+%endif
+
%prep
%setup -q
cp -a %{SOURCE1001} .
%license LICENSE
%{_bindir}/device-certificate-manager-tests
-%if %{build_type} == DEBUG
+%if "%{build_type}" == "COVERAGE"
%files coverage
%manifest %{name}.manifest
%license LICENSE
%{_bindir}/device-certificate-manager-coverage.sh
-%{_builddir}/%{name}-%{version}
%coverage_dir
%endif
SET(TARGET_TESTS "device-certificate-manager-tests")
-# 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" PATTERN "*.c" PATTERN "*.cc"
- )
-
# install code coverage automation script
CONFIGURE_FILE(device-certificate-manager-coverage.sh.in device-certificate-manager-coverage.sh @ONLY)
- INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/device-certificate-manager-coverage.sh DESTINATION ${CMAKE_INSTALL_BINDIR})
+ INSTALL(
+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/device-certificate-manager-coverage.sh
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
-ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
FIND_PACKAGE(Threads REQUIRED)
FIND_PACKAGE(Protobuf REQUIRED)
${PROTO_SRCS}
${PROTO_HDRS})
-TARGET_COMPILE_OPTIONS(${TARGET_TESTS} PRIVATE ${COVERAGE_COMPILE_OPTIONS})
-
TARGET_LINK_LIBRARIES(${TARGET_TESTS}
${Boost_UNIT_TEST_FRAMEWORK_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
${TEST_DEPS_LIBRARIES}
- ${PROTOBUF_LITE_LIBRARIES}
- ${COVERAGE_LINK_OPTIONS})
+ ${PROTOBUF_LITE_LIBRARIES})
INSTALL(TARGETS
${TARGET_TESTS}
set -exuo pipefail
-REPORT="device-certificate-manager-coverage.info"
-STDERR="device-certificate-manager-coverage.stderr"
-HTML_DIR="device-certificate-manager-coverage"
+REPORT="@PROJECT_NAME@-coverage.info"
+STDERR="@PROJECT_NAME@-coverage.stderr"
+HTML_DIR="@PROJECT_NAME@-coverage"
+
+SRCS_DIR="/usr/src/debug/@PROJECT_NAME@-@PROJECT_VERSION@"
# create dir for the report
mkdir $HTML_DIR
# launch unit tests
device-certificate-manager-tests
+# copy source files
+cp -rp $SRCS_DIR/* "@CMAKE_BINARY_DIR@"
+
# copy gcda files
cp -r "@COVERAGE_BUILD_DIR@"/* "@COVERAGE_DIR@"