Files
deskflow/src/unittests/legacytests/CMakeLists.txt
2026-01-18 15:38:59 +00:00

146 lines
3.7 KiB
CMake

# SPDX-FileCopyrightText: (C) 2024 Deskflow Developers
# SPDX-FileCopyrightText: (C) 2012 - 2024 Symless Ltd
# SPDX-FileCopyrightText: (C) 2009 - 2012 Nick Bolton
# SPDX-License-Identifier: MIT
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG b514bdc898e2951020cbdca1304b75f5950d1f59 # release-1.15.2
GIT_SHALLOW 1
FIND_PACKAGE_ARGS NAMES GTest
)
FetchContent_MakeAvailable(googletest)
macro(config_all_tests)
set(base_dir ${PROJECT_SOURCE_DIR})
set(src_dir ${base_dir}/src)
set(test_base_dir ${src_dir}/unittests/legacytests)
set(gui_dir ${src_dir}/gui/src)
config_test_deps()
add_subdirectory(legacytests)
endmacro()
macro(config_test)
include_directories(
${test_base_dir}
${src_dir}
${src_dir}/lib
${gui_dir}
${ext_dir})
set_sources()
endmacro()
macro(set_sources)
file(GLOB_RECURSE headers ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
file(GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file(GLOB_RECURSE shared_headers ${test_base_dir}/shared/*.h)
file(GLOB_RECURSE shared_sources ${test_base_dir}/shared/*.cpp)
list(APPEND headers ${shared_headers})
list(APPEND sources ${shared_sources})
file(GLOB_RECURSE mock_headers ${test_base_dir}/mock/*.h)
file(GLOB_RECURSE mock_sources ${test_base_dir}/mock/*.cpp)
list(APPEND headers ${mock_headers})
list(APPEND sources ${mock_sources})
if(ADD_HEADERS_TO_SOURCES)
list(APPEND sources ${headers})
endif()
list(APPEND sources ${PROJECT_SOURCE_DIR}/src/apps/res/deskflow.qrc)
replace_platform_sources()
replace_arch_sources()
endmacro()
macro(replace_platform_sources)
set(platform_dir ${CMAKE_CURRENT_SOURCE_DIR}/platform)
# Remove platform files so that specific platform files can be added later.
# This is a bit weird, but it's simpler to include everything, remove all
# platform files, then only include the platforms we need.
file(GLOB_RECURSE all_platform_files ${platform_dir}/*)
list(REMOVE_ITEM headers ${all_platform_files})
list(REMOVE_ITEM sources ${all_platform_files})
if(WIN32)
file(GLOB platform_sources ${platform_dir}/MSWindows*.cpp)
file(GLOB platform_headers ${platform_dir}/MSWindows*.h)
elseif(APPLE)
file(GLOB platform_sources ${platform_dir}/OSX*.cpp)
file(GLOB platform_headers ${platform_dir}/OSX*.h)
elseif(UNIX)
file(GLOB platform_sources ${platform_dir}/XWindows*.cpp)
file(GLOB platform_headers ${platform_dir}/XWindows*.h)
endif()
list(APPEND sources ${platform_sources})
list(APPEND headers ${platform_headers})
endmacro()
macro(replace_arch_sources)
set(arch_dir ${CMAKE_CURRENT_SOURCE_DIR}/arch)
# Remove arch files so that specific arch files can be added later.
# This is a bit weird, but it's simpler to include everything, remove all
# arch files, then only include the archs we need.
file(GLOB_RECURSE all_arch_files ${arch_dir}/*)
list(REMOVE_ITEM headers ${all_arch_files})
list(REMOVE_ITEM sources ${all_arch_files})
if(WIN32)
file(GLOB arch_sources ${arch_dir}/win32/*.cpp)
file(GLOB arch_headers ${arch_dir}/win32/*.h)
elseif(UNIX)
file(GLOB arch_sources ${arch_dir}/unix/*.cpp)
file(GLOB arch_headers ${arch_dir}/unix/*.h)
endif()
list(APPEND sources ${arch_sources})
list(APPEND headers ${arch_headers})
endmacro()
macro(config_test_deps)
# gui library autogen headers:
# qt doesn't seem to auto include the autogen headers for libraries.
include_directories(${PROJECT_BINARY_DIR}/src/lib/gui/gui_autogen/include)
set(test_libs
arch
base
client
server
io
net
platform
server
app
mt
gui
GTest::gtest
GTest::gmock
${libs})
endmacro()
config_all_tests()