############################# Check minimum CMake version #####################
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3)
-PROJECT("askuser")
+PROJECT("askuser-notification")
SET(ASKUSER_VERSION_MAJOR 0)
SET(ASKUSER_VERSION ${ASKUSER_VERSION_MAJOR}.6.0)
CACHE PATH
"Binary installation directory")
+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 flags ##################################
SET(CMAKE_CXX_FLAGS_PROFILING "-O0 -g -pg")
-SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -ggdb")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -ggdb -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -g")
-SET(CMAKE_CXX_FLAGS_CCOV "-O2 -g --coverage")
+SET(CMAKE_CXX_FLAGS_COVERAGE "-O0 -g -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
# Enable C++17
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
SET(TARGET_ASKUSER_NOTIFICATION_CLIENT_LIB "askuser-notification-client")
SET(TARGET_PRIVACY_PRIVILEGE_MANAGER_CAPI_LIB "capi-privacy-privilege-manager")
SET(TARGET_PRIVACY_PRIVILEGE_MANAGER_TEST "capi-privacy-privilege-manager-test")
-SET(TARGET_ASKUSER_UNIT_TESTS "askuser-unit-tests")
+SET(TARGET_ASKUSER_UNIT_TESTS "askuser-notification-unit-tests")
ADD_SUBDIRECTORY(src/plugin)
ADD_SUBDIRECTORY(src/notification-daemon)
+%{!?build_type:%global build_type RELEASE}
+
%if !%{defined with_systemd_daemon}
%define with_systemd_daemon 1
%endif
BuildRequires: pkgconfig(libsmack)
BuildRequires: pkgconfig(aul)
BuildRequires: boost-devel
-
-%if !%{defined build_type}
-%define build_type RELEASE
+%if "%{build_type}" == "COVERAGE"
+BuildRequires: lcov
%endif
%description
Provides tests for checking the API provided by capi-privacy-privilege-manager
and askuser-notification-client
-%package -n askuser-unit-tests
+%package unit-tests
Summary: Askuser unit test binaries
Group: Security/Development
-%description -n askuser-unit-tests
+%description unit-tests
Internal test for Askuser implementation.
%package client
their statuses by displaying an appropriate pop-up dialog box. A user
can make a decision whether to give a privilege to an application or not.
+%if "%{build_type}" == "COVERAGE"
+
+%package coverage
+Summary: Askuser code coverage data
+Group: Security/Testing
+Requires: askuser-notification-unit-tests = %{version}-%{release}
+Requires: askuser-notification-debugsource = %{version}-%{release}
+Requires: lcov
+Requires: gcc
+
+%description coverage
+Askuser code coverage data
+
+%endif
+
%prep
%setup -q
export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE"
%endif
-%if %{?build_type} == "DEBUG"
-export CXXFLAGS="$CXXFLAGS -Wp,-U_FORTIFY_SOURCE"
-%endif
-
export CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"
export LDFLAGS+="-Wl,--rpath=%{_libdir}"
+%global coverage_dir %{_datadir}/askuser-notification-coverage
+
%cmake . \
-DCMAKE_BUILD_TYPE=%{?build_type} \
-DBUILD_WITH_SYSTEMD_DAEMON=%{?with_systemd_daemon} \
- -DCMAKE_VERBOSE_MAKEFILE=ON
+ -DCMAKE_VERBOSE_MAKEFILE=ON \
+ -DCOVERAGE_DIR=%{coverage_dir}
make %{?jobs:-j%jobs}
%install
%attr(755,root,root) %{_bindir}/askuser-notification-test
%attr(755,root,root) %{_bindir}/capi-privacy-privilege-manager-test
-%files -n askuser-unit-tests
+%files unit-tests
%manifest %{_datadir}/default.manifest
%license LICENSE
-%attr(755,root,root) %{_bindir}/askuser-unit-tests
+%attr(755,root,root) %{_bindir}/askuser-notification-unit-tests
%files client
%manifest %{_datadir}/default.manifest
%manifest %{_datadir}/default.manifest
%license LICENSE
%attr(644,-,-) %{_libdir}/libcapi-privacy-privilege-manager.so.*
+
+%if "%{build_type}" == "COVERAGE"
+
+%files coverage
+%manifest %{_datadir}/default.manifest
+%license LICENSE
+%{_bindir}/askuser-notification-coverage.sh
+%coverage_dir
+
+%endif
ADD_DEFINITIONS("-DBOOST_TEST_DYN_LINK")
+IF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
+ # coverage data
+ SET(COVERAGE_BUILD_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET_ASKUSER_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(askuser-notification-coverage.sh.in askuser-notification-coverage.sh @ONLY)
+ INSTALL(
+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/askuser-notification-coverage.sh
+ DESTINATION ${BIN_INSTALL_DIR}
+ )
+
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
INCLUDE_DIRECTORIES(SYSTEM ${ASKUSER_UNIT_TESTS_DEP_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(
${ASKUSER_SRC_PATH}/common
${Boost_LIBRARIES}
)
-INSTALL(TARGETS ${TARGET_ASKUSER_UNIT_TESTS} DESTINATION bin)
+INSTALL(TARGETS ${TARGET_ASKUSER_UNIT_TESTS} DESTINATION ${BIN_INSTALL_DIR})
--- /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@-@ASKUSER_VERSION@"
+
+# create dir for the report
+mkdir $HTML_DIR
+
+# remove old gcda files
+find / -iname "*.gcda" -exec rm {} \;
+
+# launch unit tests
+askuser-notification-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
+lcov --no-external -c -d "@COVERAGE_DIR@" -b "@CMAKE_BINARY_DIR@" -o $REPORT 2>$STDERR
+lcov -r $REPORT "@CMAKE_BINARY_DIR@/test/unit-tests/*" -o $REPORT
+
+# check warnings
+if [ -s $STDERR ]
+then
+ echo "Warnings detected (see $STDERR). Aborting."
+ exit 1
+fi
+
+# html
+genhtml $REPORT --output-directory $HTML_DIR/