cmake_minimum_required(VERSION 3.10)

set(PROJECT_N TestSessionDBusService)
project(${PROJECT_N} VERSION 1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_AUTOMOC ON)

# Enable coverage instrumentation
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage -g -O0")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
endif()

find_package(PkgConfig REQUIRED)
find_package(Qt5 COMPONENTS Core DBus REQUIRED)
find_package(GTest REQUIRED)

# GLib/GIO required by TreasureboxApp.cpp
pkg_check_modules(GIO2_0 REQUIRED gio-2.0)
pkg_check_modules(GIO_UNIX REQUIRED gio-unix-2.0)

set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../src/SessionDBusService)

include_directories(
    ${SRC_DIR}
    ${GIO2_0_INCLUDE_DIRS}
    ${GIO_UNIX_INCLUDE_DIRS}
)

set(SOURCES
    main.cpp
    TestCommonFunc.cpp
    TestTreasureboxApp.cpp
    TestTreasureboxAppManager.cpp
    TestTreasureboxService.cpp
    TestTreasureboxAdaptor.cpp
    ${SRC_DIR}/CommonFunc.cpp
    ${SRC_DIR}/TreasureboxApp.cpp
    ${SRC_DIR}/TreasureboxAppManager.cpp
    ${SRC_DIR}/TreasureboxAdaptor.cpp
    ${SRC_DIR}/TreasureboxService.cpp
)

add_executable(${PROJECT_N} ${SOURCES})

target_link_directories(${PROJECT_N} PRIVATE
    ${GIO2_0_LIBRARY_DIRS}
    ${GIO_UNIX_LIBRARY_DIRS}
)

target_link_libraries(${PROJECT_N}
    Qt5::Core
    Qt5::DBus
    GTest::GTest
    pthread
    ${GIO2_0_LIBRARIES}
    ${GIO_UNIX_LIBRARIES}
)

add_test(NAME ${PROJECT_N} COMMAND ${PROJECT_N})

set_target_properties(${PROJECT_N} PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
