STRING(REGEX MATCH "([^.]*)" SO_VERSION "${VERSION}")
+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}\"")
+
# compiler options
SET(GC_SECTIONS_FLAGS "-fdata-sections -ffunction-sections -Wl,--gc-sections")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GC_SECTIONS_FLAGS}")
SET(CMAKE_CXX_FLAGS_RELEASE "-g -std=c++0x -O2")
SET(CMAKE_C_FLAGS_DEBUG "-g -O0 -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_CXX_FLAGS_DEBUG "-g -std=c++0x -O0 -Wp,-U_FORTIFY_SOURCE")
-SET(CMAKE_C_FLAGS_CCOV "-g -O2 --coverage")
-SET(CMAKE_CXX_FLAGS_CCOV "-g -std=c++0x -O2 --coverage")
SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+SET(CMAKE_C_FLAGS_COVERAGE "-O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
+SET(CMAKE_CXX_FLAGS_COVERAGE "-g -std=c++0x -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_SKIP_RPATH "TRUE")
# compiler warning flags
+%{!?build_type:%global build_type RELEASE}
+
Name: cert-svc
Summary: Certification service
Version: 2.2.2
BuildRequires: ca-certificates-devel
BuildRequires: ca-certificates-tizen-devel
BuildRequires: boost-devel
+
+%if "%{build_type}" == "COVERAGE"
+BuildRequires: lcov
+%endif
+
Requires: ca-certificates
Requires: ca-certificates-tizen
Requires: security-config
%global group_name security_fw
%global server_stream /tmp/.cert-server.socket
%global smack_domain_name System
+%global coverage_dir %{_datadir}/cert-svc-coverage
%global bin_dir %{?TZ_SYS_BIN:%TZ_SYS_BIN}%{!?TZ_SYS_BIN:%_bindir}
%global lib_dir %{?TZ_SYS_LIB:%TZ_SYS_LIB}%{!?TZ_SYS_LIB:%_libdir}
%description test-binaries
Certification service (test binaries)
+%if "%{build_type}" == "COVERAGE"
+%package coverage
+Summary: Certification service code coverage data
+Group: Security/Testing
+Requires: cert-svc-test = %{version}-%{release}
+Requires: cert-svc-debugsource = %{version}-%{release}
+Requires: lcov
+Requires: gcc
+
+%description coverage
+Certification service code coverage data
+%endif
+
%prep
%setup -q
export CFLAGS="$CFLAGS -Wno-stringop-truncation -Wno-stringop-overflow"
export CXXFLAGS="$CXXFLAGS -Wno-stringop-truncation -Wno-stringop-overflow"
-%{!?build_type:%define build_type "Release"}
%cmake . -DVERSION=%version \
-DINCLUDEDIR=%_includedir \
-DUSER_NAME=%user_name \
-DCERT_SVC_DB_PATH=%cert_svc_db_path \
-DCERT_SVC_TESTS=%cert_svc_tests \
-DCERT_SVC_EXAMPLES=%cert_svc_examples \
+ -DCOVERAGE_DIR=%{coverage_dir} \
-DCMAKE_BUILD_TYPE=%build_type \
-DSYSTEMD_UNIT_DIR=%_unitdir
%files test-binaries
%manifest %name.manifest
%cert_svc_tests/apps
+
+%if "%{build_type}" == "COVERAGE"
+%files coverage
+%manifest %{name}.manifest
+%license LICENSE
+%{bin_dir}/cert-svc-coverage.sh
+%coverage_dir
+%endif
FILE(GLOB DPL_LOG_SOURCES ${PROJECT_SOURCE_DIR}/src/dpl/log/src/*.cpp)
FILE(GLOB DPL_CORE_SOURCES ${PROJECT_SOURCE_DIR}/src/dpl/core/src/*.cpp)
+IF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
+ # coverage data
+ SET(COVERAGE_BUILD_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET_UNIT_TESTS}.dir/
+ )
+
+ # install gcno files
+ INSTALL(
+ DIRECTORY ${COVERAGE_BUILD_DIR}/
+ DESTINATION ${COVERAGE_DIR}
+ FILES_MATCHING PATTERN "*.gcno"
+ )
+
+ # install code coverage automation script
+ CONFIGURE_FILE(cert-svc-coverage.sh.in cert-svc-coverage.sh @ONLY)
+ INSTALL(
+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cert-svc-coverage.sh
+ DESTINATION ${BIN_DIR}
+ )
+
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
SET(UNIT_TESTS_SOURCES
test_main.cpp
test_vcore_cert_store_type.cpp
--- /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@-@PROJECT_VERSION@"
+
+# create dir for the report
+mkdir $HTML_DIR
+
+# remove old gcda files
+find / -iname "*.gcda" -exec rm {} \;
+
+# launch unit tests
+cert-svc-unit-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
+
+# Due to mismatch in the version of gcc/gcov and lcov, we need to ignore few errors
+IGNORE_ERRORS=" --ignore-errors unused,unused \
+ --ignore-errors empty,empty \
+ --ignore-errors mismatch,mismatch \
+ --ignore-errors gcov,gcov "
+
+lcov $IGNORE_ERRORS --no-external -c -d "@COVERAGE_DIR@" -b "@CMAKE_BINARY_DIR@" -o $REPORT 2>$STDERR
+lcov $IGNORE_ERRORS -r $REPORT "@CMAKE_BINARY_DIR@/unit-tests/*" -o $REPORT
+
+# Let's skip lcov warning
+# geninfo: WARNING: using JSON module "JSON::PP" - which is much slower than some alternatives.
+# Consider installing one of JSON::XS or Cpanel::JSON::XS
+sed -i '/WARNING/d' $STDERR
+
+# check errors
+if [ -s $STDERR ]
+then
+ echo "Errors detected (see $STDERR). Aborting."
+ exit 1
+fi
+
+# html
+genhtml --ignore-errors empty,empty $REPORT --output-directory $HTML_DIR/