cmake_minimum_required(VERSION 3.12.0 FATAL_ERROR)

set(QT_MAJOR_VERSION 5 CACHE STRING "Qt major version")
option(COVERAGE "Enable coverage reporting" OFF)
option(ENABLE_WERROR "Enable -Werror compiler flag" ON)

project(lomiri-account-polld
    VERSION 0.5
    DESCRIPTION "Poll daemon for notifications though the Lomiri Push Client"
    HOMEPAGE_URL "https://gitlab.com/ubports/development/core/lomiri-account-polld"
    LANGUAGES CXX
)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

include(GNUInstallDirs)
include(CTest)
include(FeatureSummary)

find_package(Qt5 COMPONENTS Core DBus Test)
find_package(PkgConfig)

pkg_check_modules(LIBACCOUNTS REQUIRED accounts-qt${QT_MAJOR_VERSION})
pkg_check_modules(LIBSIGNON REQUIRED libsignon-qt${QT_MAJOR_VERSION})
pkg_check_modules(LIBQTDBUSMOCK REQUIRED libqtdbusmock-1)
pkg_check_modules(LIBQTDBUSTEST REQUIRED libqtdbustest-1)

set_package_properties(Qt5
    PROPERTIES
    TYPE REQUIRED
    DESCRIPTION "Qt5 libraries"
    URL "https://www.qt.io"
)

set_package_properties(PkgConfig
    PROPERTIES
    TYPE REQUIRED
    DESCRIPTION "Helper tool for compiling applications and libraries"
    URL "https://www.freedesktop.org/wiki/Software/pkg-config/"
)

set_package_properties(LIBACCOUNTS
    PROPERTIES
    TYPE REQUIRED
    DESCRIPTION "Accounts database access Qt version - Accounts and SSO (Single Sign-On) framework for Linux and POSIX based platforms."
    URL "https://gitlab.com/accounts-sso/libaccounts-qt"
)

set_package_properties(LIBSIGNON
    PROPERTIES
    TYPE REQUIRED
    DESCRIPTION "Single Sign On framework - Accounts and SSO (Single Sign-On) framework for Linux and POSIX based platforms."
    URL "https://gitlab.com/accounts-sso/signond"
)

set_package_properties(LIBQTDBUSMOCK
    PROPERTIES
    TYPE REQUIRED
    DESCRIPTION "Library for mocking DBus interactions using Qt"
    URL "https://gitlab.com/ubports/development/core/libqtdbusmock"
)

set_package_properties(LIBQTDBUSTEST
    PROPERTIES
    TYPE REQUIRED
    DESCRIPTION "Library for testing DBus interactions using Qt"
    URL "https://gitlab.com/ubports/development/core/libqtdbustest"
)

feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)

if(ENABLE_WERROR)
    add_compile_options(-Werror)
endif()

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

enable_testing()

if(COVERAGE)
    message(STATUS "Building with code coverage enabled")
    add_compile_options(--coverage -O0 -g)
    add_link_options(--coverage)

    find_program(LCOV_EXEC lcov)
    find_program(GENHTML_EXEC genhtml)
    find_program(GCOVR_EXEC gcovr)

    if(NOT LCOV_EXEC OR NOT GENHTML_EXEC)
        message(FATAL_ERROR "lcov not found but coverage enabled")
    endif()

    if(NOT GCOVR_EXEC)
        message(FATAL_ERROR "gcovr not found but coverage enabled")
    endif()

    add_custom_target(coverage
        COMMAND ${LCOV_EXEC} --directory . --capture --output-file coverage.info --no-checksum --compat-libtool
        COMMAND ${LCOV_EXEC} --extract coverage.info "${CMAKE_SOURCE_DIR}/lomiri-account-polld/*.cpp" -o coverage.info
        COMMAND LANG=C ${GENHTML_EXEC} --prefix ${CMAKE_SOURCE_DIR} --output-directory coverage-html --title "Code Coverage" --legend --show-details coverage.info
        COMMAND ${GCOVR_EXEC} -x -r ${CMAKE_SOURCE_DIR} -o ${CMAKE_SOURCE_DIR}/coverage.xml -e ".*moc_.*" -e "tests.*" -e ".*.h"
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        COMMENT "Generating code coverage report"
        VERBATIM
    )
endif()

add_subdirectory(lomiri-account-polld)
add_subdirectory(click-hook)
add_subdirectory(tests)
