Cleanup
publish / publish (push) Successful in 12m29s

This commit is contained in:
khodowany
2026-09-10 09:21:04 -05:00
parent 2750dd7f3a
commit 48db1a287f
5 changed files with 191 additions and 95 deletions
+17
View File
@@ -10,7 +10,24 @@ set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
option(MODULUS_WITH_OPENSSL "Enable the modulus OpenSSL bridge target" OFF)
option(MODULUS_WITH_SQLITE "Enable the modulus SQLite bridge target" OFF)
option(MODULUS_WITH_RAYLIB "Enable the modulus raylib bridge target" OFF)
option(MODULUS_WITH_MINIAUDIO "Enable the modulus miniaudio bridge target" OFF)
include(cmake/modulus_third_party.cmake)
if(MODULUS_WITH_OPENSSL)
modulus_require_openssl()
endif()
if(MODULUS_WITH_SQLITE)
modulus_require_sqlite()
endif()
if(MODULUS_WITH_RAYLIB)
modulus_require_raylib()
endif()
if(MODULUS_WITH_MINIAUDIO)
modulus_require_miniaudio()
endif()
add_library(modulus
src/config.cpp
+9 -6
View File
@@ -2,13 +2,16 @@
Modulus is the shared C++23 foundation library and build tooling used by the khodo Product Vamp repositories. It provides small runtime utilities, Conan profiles, CMake package integration, editor templates, typed LSP compile-database setup, and bridge targets for the external libraries needed by Product Vamp.
The public package intentionally keeps a small dependency surface:
The core `modulus::modulus` target requires only Boost.JSON. Optional bridges are loaded when requested:
- Boost.JSON
- OpenSSL
- SQLite
- raylib
- miniaudio 0.11.22
```cmake
find_package(modulus CONFIG REQUIRED COMPONENTS openssl)
target_link_libraries(app PRIVATE modulus::modulus modulus::openssl)
```
Available components are `boost_json`, `openssl`, `sqlite`, `raylib`, and `miniaudio`. Existing package discovery can also be followed by `modulus_require_openssl()` (or the corresponding bridge helper). Source builds opt in with `MODULUS_WITH_OPENSSL`, `MODULUS_WITH_SQLITE`, `MODULUS_WITH_RAYLIB`, and `MODULUS_WITH_MINIAUDIO`.
Conan consumers must enable the matching `modulus/*:with_openssl`, `with_sqlite`, `with_raylib`, or `with_miniaudio` option to add that dependency to the graph. Applications combining several bridge consumers should set the union of these options on their direct Modulus requirement. All four options default to false.
## Build
+28
View File
@@ -3,4 +3,32 @@
include(CMakeFindDependencyMacro)
include("${CMAKE_CURRENT_LIST_DIR}/modulus_third_party.cmake")
if(NOT TARGET Boost::json)
set(modulus_FOUND FALSE)
set(modulus_NOT_FOUND_MESSAGE "Modulus requires Boost.JSON")
return()
endif()
include("${CMAKE_CURRENT_LIST_DIR}/modulus-targets.cmake")
foreach(_modulus_component IN LISTS modulus_FIND_COMPONENTS)
set(modulus_${_modulus_component}_FOUND FALSE)
if(_modulus_component STREQUAL "modulus" OR _modulus_component STREQUAL "boost_json")
set(modulus_${_modulus_component}_FOUND TRUE)
continue()
elseif(_modulus_component STREQUAL "openssl")
set(_modulus_dependency OpenSSL)
elseif(_modulus_component STREQUAL "sqlite")
set(_modulus_dependency SQLite3)
elseif(_modulus_component STREQUAL "raylib")
set(_modulus_dependency raylib)
elseif(_modulus_component STREQUAL "miniaudio")
set(_modulus_dependency miniaudio)
else()
continue()
endif()
find_package(${_modulus_dependency} CONFIG QUIET)
if(${_modulus_dependency}_FOUND)
cmake_language(CALL modulus_require_${_modulus_component})
set(modulus_${_modulus_component}_FOUND TRUE)
endif()
endforeach()
check_required_components(modulus)
+20 -4
View File
@@ -1,10 +1,6 @@
include(CMakeFindDependencyMacro)
find_dependency(Boost CONFIG REQUIRED COMPONENTS json)
find_dependency(OpenSSL CONFIG REQUIRED)
find_dependency(SQLite3 CONFIG REQUIRED)
find_dependency(raylib CONFIG REQUIRED)
find_dependency(miniaudio CONFIG REQUIRED)
function(modulus_define_bridge target)
if(NOT TARGET ${target})
@@ -17,15 +13,24 @@ set_target_properties(modulus::boost_json PROPERTIES
INTERFACE_LINK_LIBRARIES "Boost::boost;Boost::json"
)
function(modulus_require_openssl)
find_dependency(OpenSSL CONFIG REQUIRED)
modulus_define_bridge(modulus::openssl)
set_target_properties(modulus::openssl PROPERTIES
INTERFACE_LINK_LIBRARIES "OpenSSL::SSL;OpenSSL::Crypto"
)
endfunction()
function(modulus_require_sqlite)
find_dependency(SQLite3 CONFIG REQUIRED)
modulus_define_bridge(modulus::sqlite)
set_target_properties(modulus::sqlite PROPERTIES
INTERFACE_LINK_LIBRARIES "SQLite::SQLite3"
)
endfunction()
function(modulus_require_raylib)
find_dependency(raylib CONFIG REQUIRED)
set(_modulus_raylib_target "")
if(TARGET raylib)
@@ -50,6 +55,10 @@ set_target_properties(modulus::raylib PROPERTIES
unset(_modulus_raylib_link_libraries)
unset(_modulus_raylib_target)
endfunction()
function(modulus_require_miniaudio)
find_dependency(miniaudio CONFIG REQUIRED)
set(_modulus_miniaudio_target "")
if(TARGET miniaudio::miniaudio)
@@ -68,3 +77,10 @@ set_target_properties(modulus::miniaudio PROPERTIES
)
unset(_modulus_miniaudio_target)
endfunction()
# CMakeDeps creates enabled bridges before including this build module. Keep
# raylib's system libraries after its static archive, as in installed packages.
if(TARGET modulus::raylib)
modulus_require_raylib()
endif()
+32
View File
@@ -30,11 +30,31 @@ class modulus_recipe(conan.ConanFile):
True,
False,
],
"with_openssl": [
True,
False,
],
"with_sqlite": [
True,
False,
],
"with_raylib": [
True,
False,
],
"with_miniaudio": [
True,
False,
],
}
default_options = {
"shared": False,
"fPIC": True,
"with_tests": False,
"with_openssl": False,
"with_sqlite": False,
"with_raylib": False,
"with_miniaudio": False,
"raylib/*:camera_system": False,
"raylib/*:custom_frame_control": True,
"raylib/*:customize_build": True,
@@ -83,21 +103,25 @@ class modulus_recipe(conan.ConanFile):
transitive_libs=True,
options=modulus.config.boost_requirement_options(config),
)
if self.options.with_openssl:
self.requires(
"openssl/4.0.1",
transitive_headers=True,
transitive_libs=True,
)
if self.options.with_sqlite:
self.requires(
"sqlite3/3.53.2",
transitive_headers=True,
transitive_libs=True,
)
if self.options.with_raylib:
self.requires(
"raylib/6.0",
transitive_headers=True,
transitive_libs=True,
)
if self.options.with_miniaudio:
self.requires(
"miniaudio/0.11.22",
transitive_headers=True,
@@ -113,6 +137,10 @@ class modulus_recipe(conan.ConanFile):
toolchain.user_presets_path = False
toolchain.variables["BUILD_SHARED_LIBS"] = bool(options.shared)
toolchain.variables["BUILD_TESTING"] = bool(options.with_tests)
toolchain.variables["MODULUS_WITH_OPENSSL"] = bool(options.with_openssl)
toolchain.variables["MODULUS_WITH_SQLITE"] = bool(options.with_sqlite)
toolchain.variables["MODULUS_WITH_RAYLIB"] = bool(options.with_raylib)
toolchain.variables["MODULUS_WITH_MINIAUDIO"] = bool(options.with_miniaudio)
toolchain.generate()
def build(self):
@@ -149,12 +177,15 @@ class modulus_recipe(conan.ConanFile):
components["boost_json"].set_property("cmake_target_name", "modulus::boost_json")
components["boost_json"].requires = ["boost::json"]
if self.options.with_openssl:
components["openssl"].set_property("cmake_target_name", "modulus::openssl")
components["openssl"].requires = ["openssl::ssl", "openssl::crypto"]
if self.options.with_sqlite:
components["sqlite"].set_property("cmake_target_name", "modulus::sqlite")
components["sqlite"].requires = ["sqlite3::sqlite"]
if self.options.with_raylib:
components["raylib"].set_property("cmake_target_name", "modulus::raylib")
components["raylib"].requires = ["raylib::raylib"]
if self.settings.os == "Linux":
@@ -167,5 +198,6 @@ class modulus_recipe(conan.ConanFile):
"dl",
]
if self.options.with_miniaudio:
components["miniaudio"].set_property("cmake_target_name", "modulus::miniaudio")
components["miniaudio"].requires = ["miniaudio::miniaudio"]