cmake_minimum_required(VERSION 3.5)
project(lomiri-online-accounts VERSION 0.16 LANGUAGES CXX)

# Version to put into .pc (pkg-config) files
set(PC_FILE_VERSION ${PROJECT_VERSION})

set(QT_VERSION 5)

option(ENABLE_DOC "Build documentation" ON)
option(ENABLE_MIRCLIENT "Enable support of Mir 1.x mirclient API" OFF)
option(ENABLE_UBUNTU_COMPAT "Enable compatibility with Ubuntu.OnlineAccounts" OFF)
option(DISABLE_TESTS_THAT_FAIL_ON_UBUNTU_NOBLE "Nasty Ubuntu 24.04 hack, tst_libaccounts_service fails on Ubuntu 24.04" OFF)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Wextra -std=c++11")

string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lower) # Build types should always be lowercase but sometimes they are not.

include(GNUInstallDirs)
include(FindPkgConfig)

find_package(Qt5
    COMPONENTS Core DBus Gui Network Qml Quick Xml
    REQUIRED)
pkg_check_modules(APPARMOR libapparmor REQUIRED)

set(CMAKE_AUTOMOC ON)

set(ONLINE_ACCOUNTS_PLUGIN_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lomiri-online-accounts/qml-plugins)
set(ONLINE_ACCOUNTS_PLUGIN_PRIVATE_MODULE_DIR ${CMAKE_INSTALL_FULL_LIBDIR}/lomiri-online-accounts/private)

set(LOA_I18N_DOMAIN "${PROJECT_NAME}")
set(SIGNONUI_I18N_DOMAIN "signon-ui")

include(JoinPaths)
join_paths(PC_LIBDIR "\${prefix}" "${CMAKE_INSTALL_LIBDIR}")
join_paths(PC_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")

execute_process(
    COMMAND qmake -query QT_INSTALL_QML
    OUTPUT_VARIABLE QT_INSTALL_QML
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

add_subdirectory(click-hooks)
add_subdirectory(online-accounts)
add_subdirectory(online-accounts-client)
add_subdirectory(online-accounts-daemon)
add_subdirectory(online-accounts-plugins)
add_subdirectory(online-accounts-service)
add_subdirectory(online-accounts-ui)
add_subdirectory(po)

if(ENABLE_DOC)
    add_subdirectory(doc)
endif()

if(cmake_build_type_lower MATCHES coverage)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage" )
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage" )
    set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --coverage" )
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage" )

    # We add -g when building with coverage so valgrind reports line numbers.
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g" )
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g" )
endif()

set(CTEST_TEST_TARGET_ALIAS "check" CACHE STRING "An alias for the built-in test target.")
include(CTest)
if (BUILD_TESTING)
    find_package(Qt${QT_VERSION} COMPONENTS Test REQUIRED)
    add_subdirectory(tests)
endif()

include(EnableCoverageReport)
if(cmake_build_type_lower MATCHES coverage)
    ENABLE_COVERAGE_REPORT(TARGETS OnlineAccountsDaemon OnlineAccountsQt OnlineAccountsQML accountd FILTER /usr/include ${CMAKE_SOURCE_DIR}/tests/* ${CMAKE_BINARY_DIR}/*)
endif()

