From 3e7fbf69a7f52cda7dd4c27d0e6457ecf044629e Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Tue, 6 Jan 2026 22:38:53 +0100 Subject: [PATCH] cmake: Update buildspec system to use preset file Updates code for dependency management to use "vendor" information from the CMake preset file. --- cmake/common/buildspec_common.cmake | 32 ++++++++++++++++++++++++++--- cmake/macos/buildspec.cmake | 4 +--- cmake/windows/buildspec.cmake | 5 ++--- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/cmake/common/buildspec_common.cmake b/cmake/common/buildspec_common.cmake index ac5286ea1..8d01026e5 100644 --- a/cmake/common/buildspec_common.cmake +++ b/cmake/common/buildspec_common.cmake @@ -46,11 +46,37 @@ function(_check_deps_version version) return(PROPAGATE found CMAKE_PREFIX_PATH) endfunction() +function(_get_dependency_data variable_name) + file(READ "${CMAKE_CURRENT_SOURCE_DIR}/CMakePresets.json" preset_data) + + string(JSON configure_presets GET ${preset_data} "configurePresets") + + string(JSON preset_count LENGTH "${configure_presets}") + math(EXPR preset_count "${preset_count}-1") + + foreach(index RANGE 0 ${preset_count}) + string(JSON preset_member_data GET "${configure_presets}" ${index}) + string(JSON preset_name GET ${preset_member_data} "name") + + if(preset_name STREQUAL dependencies) + string(JSON vendor_data GET ${preset_member_data} "vendor") + string(JSON vendor_data GET ${vendor_data} "obsproject.com/obs-studio") + string(JSON dependency_data GET ${vendor_data} "dependencies") + break() + else() + continue() + endif() + endforeach() + + set(${variable_name} "${dependency_data}") + + return(PROPAGATE ${variable_name}) +endfunction() + # _check_dependencies: Fetch and extract pre-built OBS build dependencies function(_check_dependencies) - file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec) - - string(JSON dependency_data GET ${buildspec} dependencies) + set(dependencies_list ${ARGV}) + _get_dependency_data(dependency_data) foreach(dependency IN LISTS dependencies_list) if(dependency STREQUAL cef AND NOT ENABLE_BROWSER) diff --git a/cmake/macos/buildspec.cmake b/cmake/macos/buildspec.cmake index f4670c21c..f54608e29 100644 --- a/cmake/macos/buildspec.cmake +++ b/cmake/macos/buildspec.cmake @@ -9,8 +9,6 @@ function(_check_dependencies_macos) set(arch universal) set(platform macos-${arch}) - file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec) - set(dependencies_dir "${CMAKE_CURRENT_SOURCE_DIR}/.deps") set(prebuilt_filename "macos-deps-VERSION-ARCH-REVISION.tar.xz") set(prebuilt_destination "obs-deps-VERSION-ARCH") @@ -20,7 +18,7 @@ function(_check_dependencies_macos) set(cef_destination "cef_binary_VERSION_macos_ARCH") set(dependencies_list prebuilt qt6 cef) - _check_dependencies() + _check_dependencies(${dependencies_list}) execute_process( COMMAND "xattr" -r -d com.apple.quarantine "${dependencies_dir}/${destination}" diff --git a/cmake/windows/buildspec.cmake b/cmake/windows/buildspec.cmake index 3692cb1cf..f2a58493c 100644 --- a/cmake/windows/buildspec.cmake +++ b/cmake/windows/buildspec.cmake @@ -11,9 +11,8 @@ function(_handle_qt_cross_compile architecture) set(multiValueArgs "") cmake_parse_arguments(PARSE_ARGV 0 _HQCC "${options}" "${oneValueArgs}" "${multiValueArgs}") - file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec) + _get_dependency_data(dependency_data) - string(JSON dependency_data GET ${buildspec} dependencies) string(JSON data GET ${dependency_data} qt6) string(JSON version GET ${data} version) @@ -100,7 +99,7 @@ function(_check_dependencies_windows) endif() set(platform windows-${arch}) - _check_dependencies() + _check_dependencies(${dependencies_list}) if(NOT CMAKE_VS_PLATFORM_NAME STREQUAL Win32) _handle_qt_cross_compile(${CMAKE_HOST_SYSTEM_PROCESSOR} DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.deps/${qt6_destination}")