diff --git a/CHANGELOG.md b/CHANGELOG.md index ce42aaf1df0..d373f0869c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cb3ad5894b..f3b0838dfb4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/cmake/FindPajladaSerialize.cmake b/cmake/FindPajladaSerialize.cmake deleted file mode 100644 index 4671874ce40..00000000000 --- a/cmake/FindPajladaSerialize.cmake +++ /dev/null @@ -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) diff --git a/cmake/FindPajladaSettings.cmake b/cmake/FindPajladaSettings.cmake deleted file mode 100644 index d0d256bbb8e..00000000000 --- a/cmake/FindPajladaSettings.cmake +++ /dev/null @@ -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) diff --git a/cmake/FindPajladaSignals.cmake b/cmake/FindPajladaSignals.cmake deleted file mode 100644 index f4c964ecb94..00000000000 --- a/cmake/FindPajladaSignals.cmake +++ /dev/null @@ -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) diff --git a/cmake/FindRapidJSON.cmake b/cmake/FindRapidJSON.cmake deleted file mode 100644 index 57ec5b638c0..00000000000 --- a/cmake/FindRapidJSON.cmake +++ /dev/null @@ -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) diff --git a/lib/rapidjson b/lib/rapidjson index d87b698d0fc..24b5e7a8b27 160000 --- a/lib/rapidjson +++ b/lib/rapidjson @@ -1 +1 @@ -Subproject commit d87b698d0fcc10a5f632ecbc80a9cb2a8fa094a5 +Subproject commit 24b5e7a8b27f42fa16b96fc70aade9106cf7102f diff --git a/lib/serialize b/lib/serialize index 17946d65a41..bfbf3049243 160000 --- a/lib/serialize +++ b/lib/serialize @@ -1 +1 @@ -Subproject commit 17946d65a41a72b447da37df6e314cded9650c32 +Subproject commit bfbf304924328bd6fecfd7bf229434387351cc10 diff --git a/lib/settings b/lib/settings index 9b5c05ee212..8620c426849 160000 --- a/lib/settings +++ b/lib/settings @@ -1 +1 @@ -Subproject commit 9b5c05ee2129e9eaa641d08a49096682105c2588 +Subproject commit 8620c426849a45040ade97111ab2bde72b1a7c9a diff --git a/lib/signals b/lib/signals index d06770649a7..4b127541d30 160000 --- a/lib/signals +++ b/lib/signals @@ -1 +1 @@ -Subproject commit d06770649a7e83db780865d09c313a876bf0f4eb +Subproject commit 4b127541d30d9ae86df1553cb567cc2fc55fac46 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a4c04de2962..739eaf5859c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 $<$: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 diff --git a/src/common/SignalVectorModel.hpp b/src/common/SignalVectorModel.hpp index 6bd25f150e6..402cdc18fd0 100644 --- a/src/common/SignalVectorModel.hpp +++ b/src/common/SignalVectorModel.hpp @@ -18,9 +18,10 @@ template struct SignalVectorItemEvent; template -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 @@ class SignalVectorModel : public QAbstractTableModel, 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;