cmake: use FetchContent for some dependencies (#6560)

this transition is _not_ complete, but we use FetchContent for
RapidJSON, PajladaSerialize, PajladaSettings, and PajladaSignals.

In the future, we can move towards providing as many of our dependencies
as possible through conan & vcpkg so submodule-less builds are possible.
This commit is contained in:
pajlada
2025-11-02 21:45:27 +01:00
committed by GitHub
parent 072bc897a0
commit e7668212bd
12 changed files with 49 additions and 83 deletions
+1
View File
@@ -34,6 +34,7 @@
- Def: Fixed compilation error in tests with Clang 21. (#6519)
- Dev: Fixed compilation warnings on clang-cl. (#6528)
- Dev: Fixed compilation error in tests with Clang 21. (#6519)
- Dev: Use CMake's `FetchContent` for RapidJSON, PajladaSignals, PajladaSerialize, and PajladaSettings. (#6560)
- Dev: The LuaLS meta files moved from `docs/plugin-meta.lua` to `docs/lua-meta/globals.lua`. (#6530)
- Dev: Compile time definitions for `Windows.h` are now conditional based on `WIN32` instead of `MSVC`. (#6534)
- Dev: Refactored split container nodes to use shared pointers. (#6435)
+28 -14
View File
@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.15)
cmake_policy(SET CMP0087 NEW) # evaluates generator expressions in `install(CODE/SCRIPT)`
cmake_policy(SET CMP0091 NEW) # select MSVC runtime library through `CMAKE_MSVC_RUNTIME_LIBRARY`
include(FeatureSummary)
include(FetchContent)
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/cmake"
@@ -195,8 +196,6 @@ if (BUILD_WITH_QTKEYCHAIN)
endif()
endif()
find_package(RapidJSON REQUIRED)
find_package(Websocketpp REQUIRED)
if (BUILD_TESTS)
@@ -224,23 +223,38 @@ if (BUILD_BENCHMARKS)
find_package(benchmark REQUIRED)
endif ()
find_package(PajladaSerialize REQUIRED)
find_package(PajladaSignals REQUIRED)
FetchContent_Declare(
rapidjson
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson
EXCLUDE_FROM_ALL
FIND_PACKAGE_ARGS NAMES RapidJSON
)
set(RAPIDJSON_BUILD_EXAMPLES Off CACHE INTERNAL "")
set(RAPIDJSON_BUILD_TESTS Off CACHE INTERNAL "")
FetchContent_Declare(
PajladaSignals
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/lib/signals
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
PajladaSerialize
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/lib/serialize
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
PajladaSettings
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/lib/settings
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(rapidjson PajladaSignals PajladaSerialize PajladaSettings)
find_package(LRUCache REQUIRED)
find_package(MagicEnum REQUIRED)
find_package(Doxygen)
find_package(BoostCertify REQUIRED)
if (USE_SYSTEM_PAJLADA_SETTINGS)
find_package(PajladaSettings REQUIRED)
else()
if (NOT EXISTS "${CMAKE_SOURCE_DIR}/lib/settings/CMakeLists.txt")
message(FATAL_ERROR "Submodules probably not loaded, unable to find lib/settings/CMakeLists.txt")
endif()
add_subdirectory("${CMAKE_SOURCE_DIR}/lib/settings" EXCLUDE_FROM_ALL)
endif()
if (CHATTERINO_PLUGINS)
set(LUA_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/lib/lua/src")
add_subdirectory(lib/lua)
-14
View File
@@ -1,14 +0,0 @@
include(FindPackageHandleStandardArgs)
find_path(PajladaSerialize_INCLUDE_DIR pajlada/serialize.hpp HINTS ${CMAKE_SOURCE_DIR}/lib/serialize/include)
find_package_handle_standard_args(PajladaSerialize DEFAULT_MSG PajladaSerialize_INCLUDE_DIR)
if (PajladaSerialize_FOUND)
add_library(Pajlada::Serialize INTERFACE IMPORTED)
set_target_properties(Pajlada::Serialize PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${PajladaSerialize_INCLUDE_DIR}"
)
endif ()
mark_as_advanced(PajladaSerialize_INCLUDE_DIR)
-16
View File
@@ -1,16 +0,0 @@
include(FindPackageHandleStandardArgs)
find_path(PajladaSettings_INCLUDE_DIR pajlada/settings.hpp)
find_library(PajladaSettings_LIBRARY PajladaSettings)
find_package_handle_standard_args(PajladaSettings DEFAULT_MSG PajladaSettings_INCLUDE_DIR PajladaSettings_LIBRARY)
if (PajladaSettings_FOUND)
add_library(Pajlada::Settings INTERFACE IMPORTED)
set_target_properties(Pajlada::Settings PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${PajladaSettings_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${PajladaSettings_LIBRARY}"
)
endif ()
mark_as_advanced(PajladaSettings_INCLUDE_DIR PajladaSettings_LIBRARY)
-14
View File
@@ -1,14 +0,0 @@
include(FindPackageHandleStandardArgs)
find_path(PajladaSignals_INCLUDE_DIR pajlada/signals/signal.hpp HINTS ${CMAKE_SOURCE_DIR}/lib/signals/include)
find_package_handle_standard_args(PajladaSignals DEFAULT_MSG PajladaSignals_INCLUDE_DIR)
if (PajladaSignals_FOUND)
add_library(Pajlada::Signals INTERFACE IMPORTED)
set_target_properties(Pajlada::Signals PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${PajladaSignals_INCLUDE_DIR}"
)
endif ()
mark_as_advanced(PajladaSignals_INCLUDE_DIR)
-14
View File
@@ -1,14 +0,0 @@
include(FindPackageHandleStandardArgs)
find_path(RapidJSON_INCLUDE_DIR rapidjson/rapidjson.h HINTS ${CMAKE_SOURCE_DIR}/lib/rapidjson/include)
find_package_handle_standard_args(RapidJSON DEFAULT_MSG RapidJSON_INCLUDE_DIR)
if (RapidJSON_FOUND)
add_library(RapidJSON::RapidJSON INTERFACE IMPORTED)
set_target_properties(RapidJSON::RapidJSON PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${RapidJSON_INCLUDE_DIR}"
)
endif ()
mark_as_advanced(RapidJSON_INCLUDE_DIR)
+11 -3
View File
@@ -873,6 +873,17 @@ if (CHATTERINO_GENERATE_COVERAGE)
)
endif ()
if(TARGET rapidjson)
message(DEBUG "Linking to rapidjson target")
target_link_libraries(${LIBRARY_PROJECT} PUBLIC rapidjson)
elseif(DEFINED RapidJSON_SOURCE_DIR)
message(DEBUG "RapidJSON_SOURCE_DIR defined, assuming this is a submodule/source build. (${RapidJSON_SOURCE_DIR})")
target_include_directories(${LIBRARY_PROJECT} SYSTEM PUBLIC ${RapidJSON_SOURCE_DIR}/include)
else()
message(DEBUG "No rapidjson target found, this is most likely a system install. Adding include directories (${RAPIDJSON_INCLUDE_DIRS}) instead")
target_include_directories(${LIBRARY_PROJECT} SYSTEM PUBLIC ${RAPIDJSON_INCLUDE_DIRS})
endif()
target_link_libraries(${LIBRARY_PROJECT}
PUBLIC
Qt${MAJOR_QT_VERSION}::Core
@@ -888,7 +899,6 @@ target_link_libraries(${LIBRARY_PROJECT}
Pajlada::Signals
websocketpp::websocketpp
Threads::Threads
RapidJSON::RapidJSON
LRUCache
MagicEnum
$<$<BOOL:${WIN32}>:Wtsapi32>
@@ -1194,8 +1204,6 @@ target_link_libraries(${LIBRARY_PROJECT}
OpenSSL::Crypto
)
target_include_directories(${LIBRARY_PROJECT} PUBLIC ${RapidJSON_INCLUDE_DIRS})
if (LIBRT)
target_link_libraries(${LIBRARY_PROJECT}
PUBLIC
+5 -4
View File
@@ -18,9 +18,10 @@ template <typename T>
struct SignalVectorItemEvent;
template <typename TVectorItem>
class SignalVectorModel : public QAbstractTableModel,
pajlada::Signals::SignalHolder
class SignalVectorModel : public QAbstractTableModel
{
pajlada::Signals::SignalHolder signalHolder;
public:
SignalVectorModel(int columnCount, QObject *parent = nullptr)
: QAbstractTableModel(parent)
@@ -66,9 +67,9 @@ public:
insert(args);
}
this->managedConnect(vec->itemInserted, insert);
this->signalHolder.managedConnect(vec->itemInserted, insert);
this->managedConnect(vec->itemRemoved, [this](auto args) {
this->signalHolder.managedConnect(vec->itemRemoved, [this](auto args) {
if (args.caller == this)
{
return;