cmake_minimum_required(VERSION 3.10)

set(PROJECT_N TestSystemDBusService)
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 Test REQUIRED)
find_package(GTest REQUIRED)

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

include_directories(${SRC_DIR})

set(SOURCES
    main.cpp
    TestFileService.cpp
    TestMemoryService.cpp
    TestProcessService.cpp
    TestDpkgService.cpp
    TestAptService.cpp
    TestDiskService.cpp
    TestSystemService.cpp
    TestSystemTreasureboxSystemService.cpp
    TestSystemTreasureboxService.cpp
    TestClientWhitelistChecker.cpp
    ${SRC_DIR}/SystemTreasureboxFileService.cpp
    ${SRC_DIR}/SystemTreasureboxFileAdaptor.cpp
    ${SRC_DIR}/SystemTreasureboxMemoryService.cpp
    ${SRC_DIR}/SystemTreasureboxMemoryAdaptor.cpp
    ${SRC_DIR}/SystemTreasureboxProcessService.cpp
    ${SRC_DIR}/SystemTreasureboxProcessAdaptor.cpp
    ${SRC_DIR}/SystemTreasureboxDpkgService.cpp
    ${SRC_DIR}/SystemTreasureboxDpkgAdaptor.cpp
    ${SRC_DIR}/SystemTreasureboxAptService.cpp
    ${SRC_DIR}/SystemTreasureboxAptAdaptor.cpp
    ${SRC_DIR}/SystemTreasureboxDiskService.cpp
    ${SRC_DIR}/SystemTreasureboxDiskAdaptor.cpp
    ${SRC_DIR}/SystemTreasureboxSystemService.cpp
    ${SRC_DIR}/SystemTreasureboxSystemAdaptor.cpp
    ${SRC_DIR}/SystemTreasureboxService.cpp
    ${SRC_DIR}/ClientWhitelistChecker.cpp
)

add_executable(${PROJECT_N} ${SOURCES})

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

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

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