chore(deps): move boost to CPM and bump to 1.92 (#5730)

This commit is contained in:
Dave Lane authored and GitHub committed 2026-09-15 20:14:58 -04:00
1 parent 4aa46398c3
commit f54f9dfc57
24 files changed
+302 -73

No files matched your search

+7 -1
View File
@@ -84,6 +84,7 @@ jobs:
timeout-minutes: 5
run: |
brew install --force \
boost \
cmake \
doxygen \
graphviz \
@@ -124,6 +125,11 @@ jobs:
env:
APPLE_CODESIGN_IDENTITY: ${{ secrets.APPLE_CODESIGN_IDENTITY }}
run: |
icu4c_root="$(brew --prefix icu4c@78 2>/dev/null)"
export CPPFLAGS="${CPPFLAGS:+${CPPFLAGS} }-I${icu4c_root}/include"
export LDFLAGS="${LDFLAGS:+${LDFLAGS} }-L${icu4c_root}/lib"
export LIBRARY_PATH="${icu4c_root}/lib${LIBRARY_PATH:+:${LIBRARY_PATH}}"
mkdir -p build
cmake \
-B build \
@@ -131,7 +137,7 @@ jobs:
-DBUILD_DOCS="${{ matrix.build_docs }}" \
-DBUILD_WERROR=ON \
-DCMAKE_BUILD_TYPE=Release \
-DICU_ROOT="$(brew --prefix icu4c@78 2>/dev/null)" \
-DICU_ROOT="${icu4c_root}" \
-DOPENSSL_ROOT_DIR="$(brew --prefix openssl@3 2>/dev/null)" \
-DOpus_ROOT_DIR="$(brew --prefix opus 2>/dev/null)" \
-DQt6_DIR="$(brew --prefix qtbase 2>/dev/null)/lib/cmake/Qt6" \
+1 -1
View File
@@ -21,7 +21,7 @@ foreach(dir ${MACOS_LINK_DIRECTORIES})
endif()
endforeach()
if(NOT BOOST_USE_STATIC AND NOT FETCH_CONTENT_BOOST_USED)
if(NOT BOOST_USE_STATIC AND NOT CPM_BOOST_USED)
ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)
endif()
+14 -47
View File
@@ -1,16 +1,14 @@
#
# Loads the boost library giving the priority to the system package first, with a fallback to FetchContent.
# Loads the boost library giving priority to a compatible system package, with a fallback to CPM.
#
include_guard(GLOBAL)
set(BOOST_VERSION "1.89.0")
set(BOOST_MINIMUM_VERSION "1.89.0")
set(BOOST_COMPONENTS
filesystem
log
program_options
system
)
# system is not used by Sunshine, but by Simple-Web-Server, added here for convenience
if(NOT WIN32)
list(APPEND BOOST_COMPONENTS locale)
@@ -30,20 +28,9 @@ if(BOOST_USE_STATIC)
set(Boost_USE_STATIC_LIBS ON) # cmake-lint: disable=C0103
endif()
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.30")
cmake_policy(SET CMP0167 NEW) # Get BoostConfig.cmake from upstream
endif()
find_package(Boost CONFIG ${BOOST_VERSION} EXACT COMPONENTS ${BOOST_COMPONENTS})
find_package(Boost ${BOOST_MINIMUM_VERSION} CONFIG COMPONENTS ${BOOST_COMPONENTS})
if(NOT Boost_FOUND)
message(STATUS "Boost v${BOOST_VERSION} package not found in the system. Falling back to FetchContent.")
include(FetchContent)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
cmake_policy(SET CMP0135 NEW) # Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24
endif()
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.31.0")
cmake_policy(SET CMP0174 NEW) # Handle empty variables
endif()
message(STATUS "Boost v${BOOST_MINIMUM_VERSION}+ package not found in the system. Falling back to CPM.")
# more components required for compiling boost targets
list(APPEND BOOST_COMPONENTS
@@ -53,41 +40,21 @@ if(NOT Boost_FOUND)
process
property_tree)
set(BOOST_ENABLE_CMAKE ON)
set(BOOST_ENABLE_CMAKE ON) # Use the Boost superproject to resolve library dependencies recursively
set(BOOST_INCLUDE_LIBRARIES ${BOOST_COMPONENTS}) # Limit Boost to the required libraries
set(BOOST_SKIP_INSTALL_RULES ON) # Do not install Boost libraries or headers
# Limit boost to the required libraries only
set(BOOST_INCLUDE_LIBRARIES ${BOOST_COMPONENTS})
set(BOOST_URL "https://github.com/boostorg/boost/releases/download/boost-${BOOST_VERSION}/boost-${BOOST_VERSION}-cmake.tar.xz") # cmake-lint: disable=C0301
set(BOOST_HASH "SHA256=67acec02d0d118b5de9eb441f5fb707b3a1cdd884be00ca24b9a73c995511f74")
CPMGetPackage(Boost)
set(CPM_BOOST_USED TRUE)
if(CMAKE_VERSION VERSION_LESS "3.24.0")
FetchContent_Declare(
Boost
URL ${BOOST_URL}
URL_HASH ${BOOST_HASH}
)
elseif(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.25.0")
# add SYSTEM to FetchContent_Declare, this fails on debian bookworm
FetchContent_Declare(
Boost
URL ${BOOST_URL}
URL_HASH ${BOOST_HASH}
SYSTEM # requires CMake 3.25+
OVERRIDE_FIND_PACKAGE # requires CMake 3.24+, but we have a macro to handle it for other versions
)
elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
FetchContent_Declare(
Boost
URL ${BOOST_URL}
URL_HASH ${BOOST_HASH}
OVERRIDE_FIND_PACKAGE # requires CMake 3.24+, but we have a macro to handle it for other versions
)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.25.0")
add_subdirectory(${Boost_SOURCE_DIR} ${Boost_BINARY_DIR} SYSTEM)
else()
add_subdirectory(${Boost_SOURCE_DIR} ${Boost_BINARY_DIR})
endif()
FetchContent_MakeAvailable(Boost)
set(FETCH_CONTENT_BOOST_USED TRUE)
set(Boost_FOUND TRUE) # cmake-lint: disable=C0103
set(Boost_VERSION "${BOOST_VERSION}") # cmake-lint: disable=C0103
set(Boost_INCLUDE_DIRS # cmake-lint: disable=C0103
"$<BUILD_INTERFACE:${Boost_SOURCE_DIR}/libs/headers/include>")
+7 -1
View File
@@ -18,10 +18,16 @@ endif()
macro(find_package) # cmake-lint: disable=C0103
string(TOLOWER "${ARGV0}" ARGV0_LOWER)
if(
(("${ARGV0_LOWER}" STREQUAL "boost") AND DEFINED FETCH_CONTENT_BOOST_USED) OR
(("${ARGV0_LOWER}" STREQUAL "boost") AND DEFINED CPM_BOOST_USED) OR
(("${ARGV0_LOWER}" STREQUAL "libevdev") AND DEFINED EXTERNAL_PROJECT_LIBEVDEV_USED)
)
# Do nothing, as the package has already been fetched
elseif(("${ARGV0_LOWER}" STREQUAL "boost") AND POLICY CMP0167)
# Prefer upstream BoostConfig.cmake for compatible system packages on CMake 3.30+.
cmake_policy(PUSH)
cmake_policy(SET CMP0167 NEW)
_find_package(${ARGV})
cmake_policy(POP)
else()
# Call the original find_package function
_find_package(${ARGV})
-4
View File
@@ -26,11 +26,7 @@ endif()
option(SUNSHINE_SYSTEM_VULKAN_HEADERS "Use system installation of vulkan-headers rather than the submodule." OFF)
option(SUNSHINE_SYSTEM_WAYLAND_PROTOCOLS "Use system installation of wayland-protocols rather than the submodule." OFF)
if(APPLE)
option(BOOST_USE_STATIC "Use static boost libraries." OFF)
else()
option(BOOST_USE_STATIC "Use static boost libraries." ON)
endif()
option(CUDA_FAIL_ON_MISSING "Fail the build if CUDA is not found." ON)
option(CUDA_INHERIT_COMPILE_OPTIONS
+8
View File
@@ -14,6 +14,14 @@ It is recommended to use one of the following compilers:
### Dependencies
Boost `1.89.0` or newer can be supplied as a system package. When a compatible system package is unavailable, CMake
downloads the project-locked Boost release through CPM. Static Boost libraries are preferred on every platform by
default; pass `-DBOOST_USE_STATIC=OFF` to use shared system libraries instead.
Sunshine's build and packaging automation uses packaged static Boost libraries on Arch Linux, Fedora 44 or newer,
Ubuntu 26.04 or newer, macOS with Homebrew, Windows with MSYS2, and FreeBSD. Older supported distributions continue
to use the CPM fallback because their repositories do not meet the minimum Boost version.
#### FreeBSD
> [!CAUTION]
> Sunshine support for FreeBSD is experimental and may be incomplete or not work as expected
+14
View File
@@ -32,3 +32,17 @@
# - `CPMDeclarePackage(...)`
set(PATCH_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/patches")
# Boost
# renovate: datasource=github-release-attachments depName=boostorg/boost
# versioning=regex:^boost-(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)(?<prerelease>\.[A-Za-z0-9.-]+)?$
set(BOOST_TAG boost-1.92.0)
set(BOOST_SHA256 9bed76128d4e46755dbe818487788c6fceb6f72b378f4daa49b7e1e600d9088d)
string(REGEX REPLACE "^boost-" "" BOOST_VERSION "${BOOST_TAG}")
CPMDeclarePackage(Boost
NAME Boost
VERSION ${BOOST_VERSION}
URL https://github.com/boostorg/boost/releases/download/${BOOST_TAG}/${BOOST_TAG}-cmake.tar.xz
URL_HASH SHA256=${BOOST_SHA256}
DOWNLOAD_ONLY YES
)
+2
View File
@@ -61,6 +61,8 @@ depends=(
makedepends=(
'appstream'
'appstream-glib'
'boost'
'boost-libs'
'cmake'
'desktop-file-utils'
"gcc${_gcc_dep_suffix}"
+2 -1
View File
@@ -50,11 +50,12 @@ BuildRequires: which
%if 0%{?fedora}
# Fedora-specific BuildRequires
BuildRequires: appstream
# BuildRequires: boost-devel >= 1.86.0
BuildRequires: glslc
BuildRequires: libappstream-glib
BuildRequires: vulkan-loader-devel
%if 0%{fedora} > 43
BuildRequires: boost-devel >= 1.89.0
BuildRequires: boost-static >= 1.89.0
# needed for npm from nvm
BuildRequires: libatomic
BuildRequires: xz
+2 -2
View File
@@ -9,8 +9,8 @@
"sources": [
{
"type": "archive",
"url": "https://github.com/boostorg/boost/releases/download/boost-1.89.0/boost-1.89.0-cmake.tar.xz",
"sha256": "67acec02d0d118b5de9eb441f5fb707b3a1cdd884be00ca24b9a73c995511f74"
"url": "https://github.com/boostorg/boost/releases/download/boost-1.92.0/boost-1.92.0-cmake.tar.xz",
"sha256": "9bed76128d4e46755dbe818487788c6fceb6f72b378f4daa49b7e1e600d9088d"
}
]
}
+22
View File
@@ -451,6 +451,26 @@ class Sunshine < Formula
%w[docs src src_assets test_assets].each do |directory|
test_runtime.install "build/tests/#{directory}"
end
boost_test_fixtures = %w[
cmake/compile_definitions/macos.cmake
cmake/dependencies/Boost_Sunshine.cmake
cmake/macros/common.cmake
cmake/prep/options.cmake
package-lock.cmake
packaging/linux/Arch/PKGBUILD
packaging/linux/copr/Sunshine.spec
packaging/linux/flatpak/modules/boost.json
scripts/linux_build.sh
]
if OS.mac?
boost_test_fixtures += %w[
.github/workflows/ci-macos.yml
scripts/macos_build.sh
]
end
boost_test_fixtures.each do |fixture|
(test_runtime/Pathname.new(fixture).dirname).install "build/tests/#{fixture}"
end
test_runtime.install "sunshine.png"
(test_runtime/"tests/unit").install "tests/unit/test_video.cpp"
@@ -527,6 +547,8 @@ class Sunshine < Formula
assert_path_exists coverage_buildpath
assert_path_exists bin/TEST_BINARY
assert_path_exists test_runtime/"docs/getting_started.md"
assert_path_exists test_runtime/"cmake/dependencies/Boost_Sunshine.cmake"
assert_path_exists test_runtime/"scripts/macos_build.sh" if OS.mac?
assert_path_exists test_runtime/"src/config.cpp"
assert_path_exists test_runtime/"src_assets/common/assets/web/public/assets/locale/en.json"
assert_path_exists test_runtime/"test_assets/web/images/logo-sunshine.svg"
+21
View File
@@ -280,6 +280,8 @@ function add_arch_deps() {
'appstream-glib'
'avahi'
'base-devel'
'boost'
'boost-libs'
'cmake'
'curl'
'doxygen'
@@ -419,6 +421,17 @@ function add_ubuntu_deps() {
add_test_ppa
add_debian_based_deps
# Ubuntu 26.04+ provides compatible Boost static libraries in the component development packages.
if [[ "$(printf '%s\n' "$version" "26.04" | sort -V | head -n1)" == "26.04" ]]; then
dependencies+=(
"libboost-filesystem-dev"
"libboost-locale-dev"
"libboost-log-dev"
"libboost-program-options-dev"
"libicu-dev"
)
fi
if [[ "$skip_cuda" == 0 ]] && [[ "$cuda_system_package" == 1 ]]; then
if [[ -z "$cuda_system_package_name" ]]; then
echo "CUDA system package was requested, but no package name was configured."
@@ -484,6 +497,14 @@ function add_fedora_deps() {
"xorg-x11-server-Xvfb" # necessary for headless unit testing
)
# Fedora 44+ provides Boost 1.90 or newer and packages its static libraries separately.
if [[ "$version" =~ ^[0-9]+$ ]] && (( version >= 44 )); then
dependencies+=(
"boost-devel"
"boost-static"
)
fi
if [[ "$skip_libva" == 0 ]]; then
dependencies+=(
"libva-devel" # VA-API
+8 -2
View File
@@ -25,8 +25,8 @@ export BUILD_VERSION
export BRANCH
export COMMIT
# boost could be included here but cmake will build the right version we need
required_formulas=(
"boost"
"cmake"
"doxygen"
"graphviz"
@@ -92,6 +92,12 @@ function run_step_deps() {
function run_step_cmake() {
echo "Running step: CMake configure"
# Static Boost.Locale exposes ICU as transitive linker arguments, while Homebrew keeps ICU keg-only.
icu4c_root=$(brew --prefix icu4c@78 2>/dev/null)
export CPPFLAGS="${CPPFLAGS:+${CPPFLAGS} }-I${icu4c_root}/include"
export LDFLAGS="${LDFLAGS:+${LDFLAGS} }-L${icu4c_root}/lib"
export LIBRARY_PATH="${icu4c_root}/lib${LIBRARY_PATH:+:${LIBRARY_PATH}}"
# prepare CMAKE args
cmake_args=(
"-B=build"
@@ -100,7 +106,7 @@ function run_step_cmake() {
"-DBUILD_TESTS=${build_tests}"
"-DBUILD_WERROR=ON"
"-DCMAKE_BUILD_TYPE=${build_type}"
"-DICU_ROOT=$(brew --prefix icu4c@78 2>/dev/null)"
"-DICU_ROOT=${icu4c_root}"
"-DOPENSSL_ROOT_DIR=$(brew --prefix openssl@3 2>/dev/null)"
"-DOpus_ROOT_DIR=$(brew --prefix opus 2>/dev/null)"
"-DQt6_DIR=$(brew --prefix qtbase 2>/dev/null)/lib/cmake/Qt6"
+17
View File
@@ -0,0 +1,17 @@
/**
* @file src/boost_process_compat.h
* @brief Includes Boost.Process while isolating third-party deprecation diagnostics.
*/
#pragma once
#if defined(__APPLE__) && defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// Boost.Process v1 still uses std::codecvt_utf8 on macOS, including in Boost 1.92.
#include <boost/process/v1/locale.hpp>
#pragma clang diagnostic pop
#endif
#include <boost/process/v1.hpp>
+3 -1
View File
@@ -16,10 +16,12 @@
#include <boost/core/noncopyable.hpp>
#ifndef _WIN32
#include <boost/asio.hpp>
#include <boost/process/v1.hpp>
#endif
// local includes
#ifndef _WIN32
#include "src/boost_process_compat.h"
#endif
#include "src/config.h"
#include "src/logging.h"
#include "src/thread_safe.h"
+1 -1
View File
@@ -45,7 +45,6 @@
// lib includes
#include <boost/asio/ip/address.hpp>
#include <boost/asio/ip/host_name.hpp>
#include <boost/process/v1.hpp>
#include <fcntl.h>
#include <lizardbyte/common/env.h>
#include <unistd.h>
@@ -59,6 +58,7 @@
// local includes
#include "graphics.h"
#include "misc.h"
#include "src/boost_process_compat.h"
#include "src/config.h"
#include "src/entry_handler.h"
#include "src/logging.h"
+1 -1
View File
@@ -28,10 +28,10 @@
// lib includes
#include <boost/asio/ip/address.hpp>
#include <boost/asio/ip/host_name.hpp>
#include <boost/process/v1.hpp>
// local includes
#include "misc.h"
#include "src/boost_process_compat.h"
#include "src/entry_handler.h"
#include "src/logging.h"
#include "src/platform/common.h"
+5 -3
View File
@@ -9,16 +9,18 @@
// platform includes
#include <initguid.h>
// local includes required before library includes
// Boost.Process must be included before MinHook pulls in Windows.h so Boost.Asio sees WinSock2.h first.
#include "src/boost_process_compat.h"
// lib includes
#include <boost/algorithm/string/join.hpp>
#include <boost/process/v1.hpp>
#include <MinHook.h>
// local includes
#include "utf_utils.h"
// We have to include boost/process/v1.hpp before display.h due to WinSock.h,
// but that prevents the definition of NTSTATUS so we must define it ourself.
// Including Boost.Process before Windows.h prevents the definition of NTSTATUS, so we must define it ourselves.
/**
* @brief Windows NT status code returned by native APIs.
*/
+3 -1
View File
@@ -14,9 +14,11 @@
// lib includes
#include <boost/algorithm/string.hpp>
#include <boost/asio/ip/address.hpp>
#include <boost/process/v1.hpp>
#include <boost/program_options/parsers.hpp>
// local includes required before platform includes
#include "src/boost_process_compat.h"
// prevent clang format from "optimizing" the header include order
// clang-format off
#include <dwmapi.h>
+1 -3
View File
@@ -16,13 +16,11 @@
#include <optional>
#include <unordered_map>
// lib includes
#include <boost/process/v1.hpp>
// local includes
#include "config.h"
#include "platform/common.h"
#include "rtsp.h"
#include "src/boost_process_compat.h"
#include "utility.h"
/**
-1
View File
@@ -64,7 +64,6 @@
// lib includes
#include <boost/filesystem.hpp>
#include <boost/process/v1/environment.hpp>
#include <tray.h>
#ifdef _WIN32
#include <libvirtualhid/license.hpp>
+21
View File
@@ -188,8 +188,17 @@ add_executable(${PROJECT_NAME}
# This ensures both CLI and CLion can access the same files relative to the test executable
# Using configure_file ensures files are copied when they change between builds
set(INTEGRATION_TEST_FILES
"cmake/compile_definitions/macos.cmake"
"cmake/dependencies/Boost_Sunshine.cmake"
"cmake/macros/common.cmake"
"cmake/prep/options.cmake"
"package-lock.cmake"
"packaging/linux/Arch/PKGBUILD"
"packaging/linux/flatpak/modules/boost.json"
"scripts/linux_build.sh"
"src/config.cpp"
"src_assets/common/assets/web/config.html"
"docs/building.md"
"docs/configuration.md"
"docs/getting_started.md"
"docs/troubleshooting.md"
@@ -198,6 +207,18 @@ set(INTEGRATION_TEST_FILES
"src_assets/linux/misc/60-sunshine.rules"
)
if(EXISTS "${CMAKE_SOURCE_DIR}/packaging/linux/copr/Sunshine.spec")
list(APPEND INTEGRATION_TEST_FILES "packaging/linux/copr/Sunshine.spec")
list(APPEND TEST_DEFINITIONS SUNSHINE_COPR_SPEC_FIXTURE_AVAILABLE)
endif()
if(APPLE)
list(APPEND INTEGRATION_TEST_FILES
".github/workflows/ci-macos.yml"
"scripts/macos_build.sh"
)
endif()
foreach(file ${INTEGRATION_TEST_FILES})
configure_file(
"${CMAKE_SOURCE_DIR}/${file}"
@@ -0,0 +1,141 @@
/**
* @file tests/integration/test_boost_version_consistency.cpp
* @brief Tests for the Boost system-version and fallback-version contracts.
*/
// test includes
#include "../tests_common.h"
// standard includes
#include <format>
#include <regex>
#include <string>
#include <string_view>
// local includes
#include "src/file_handler.h"
namespace {
/**
* @brief Read a project file copied into the test runtime directory.
*
* @param path Project-relative file path.
* @return File contents.
*/
std::string read_project_file(const std::string_view path) {
const auto path_string = std::format("{}/{}", SUNSHINE_TEST_BIN_DIR, path);
auto content = file_handler::read_file(path_string.c_str());
EXPECT_FALSE(content.empty()) << "Unable to read " << path;
return content;
}
/**
* @brief Extract the first capture group from text.
*
* @param content Text to search.
* @param pattern Regular expression containing a capture group.
* @return The first captured value, or an empty string when no match exists.
*/
std::string extract_value(const std::string &content, const std::regex &pattern) {
std::smatch match;
EXPECT_TRUE(std::regex_search(content, match, pattern));
return match.size() > 1 ? match[1].str() : std::string {};
}
} // namespace
TEST(BoostVersionConsistencyTest, SystemPackageAllowsCompatibleVersions) {
const auto dependency = read_project_file("cmake/dependencies/Boost_Sunshine.cmake");
const auto documentation = read_project_file("docs/building.md");
const auto macos_definitions = read_project_file("cmake/compile_definitions/macos.cmake");
const auto common_macros = read_project_file("cmake/macros/common.cmake");
const auto options = read_project_file("cmake/prep/options.cmake");
const auto minimum_version = extract_value(
dependency,
std::regex {R"regex(set\(BOOST_MINIMUM_VERSION "([0-9]+\.[0-9]+\.[0-9]+)"\))regex"}
);
EXPECT_NE(
dependency.find("find_package(Boost ${BOOST_MINIMUM_VERSION} CONFIG COMPONENTS ${BOOST_COMPONENTS})"),
std::string::npos
);
EXPECT_EQ(dependency.find("EXACT"), std::string::npos);
EXPECT_EQ(dependency.find("FetchContent"), std::string::npos);
EXPECT_EQ(dependency.find("\n system"), std::string::npos);
EXPECT_NE(dependency.find("CPMGetPackage(Boost)"), std::string::npos);
EXPECT_NE(documentation.find(std::format("Boost `{}` or newer", minimum_version)), std::string::npos);
EXPECT_EQ(macos_definitions.find("FETCH_CONTENT_BOOST_USED"), std::string::npos);
EXPECT_NE(macos_definitions.find("CPM_BOOST_USED"), std::string::npos);
EXPECT_EQ(common_macros.find("FETCH_CONTENT_BOOST_USED"), std::string::npos);
EXPECT_NE(common_macros.find("CPM_BOOST_USED"), std::string::npos);
EXPECT_NE(options.find("option(BOOST_USE_STATIC \"Use static boost libraries.\" ON)"), std::string::npos);
EXPECT_EQ(options.find("option(BOOST_USE_STATIC \"Use static boost libraries.\" OFF)"), std::string::npos);
EXPECT_NE(documentation.find("Static Boost libraries are preferred on every platform"), std::string::npos);
EXPECT_NE(documentation.find("-DBOOST_USE_STATIC=OFF"), std::string::npos);
}
TEST(BoostVersionConsistencyTest, CpmFallbackMatchesFlatpakSource) {
const auto package_lock = read_project_file("package-lock.cmake");
const auto flatpak_module = read_project_file("packaging/linux/flatpak/modules/boost.json");
const auto fallback_version = extract_value(
package_lock,
std::regex {R"regex(set\(BOOST_TAG boost-([0-9]+\.[0-9]+\.[0-9]+)\))regex"}
);
const auto fallback_hash = extract_value(
package_lock,
std::regex {R"regex(set\(BOOST_SHA256 ([0-9a-f]{64})\))regex"}
);
EXPECT_NE(
flatpak_module.find(std::format("boost-{0}/boost-{0}-cmake.tar.xz", fallback_version)),
std::string::npos
);
EXPECT_NE(flatpak_module.find(std::format("\"sha256\": \"{}\"", fallback_hash)), std::string::npos);
}
TEST(BoostVersionConsistencyTest, SupportedBuildsInstallStaticSystemPackages) {
const auto documentation = read_project_file("docs/building.md");
const auto linux_script = read_project_file("scripts/linux_build.sh");
const auto arch_package = read_project_file("packaging/linux/Arch/PKGBUILD");
#ifdef SUNSHINE_COPR_SPEC_FIXTURE_AVAILABLE
const auto dependency = read_project_file("cmake/dependencies/Boost_Sunshine.cmake");
const auto copr_spec = read_project_file("packaging/linux/copr/Sunshine.spec");
const auto minimum_version = extract_value(
dependency,
std::regex {R"regex(set\(BOOST_MINIMUM_VERSION "([0-9]+\.[0-9]+\.[0-9]+)"\))regex"}
);
#endif
EXPECT_NE(linux_script.find("'boost'"), std::string::npos);
EXPECT_NE(linux_script.find("'boost-libs'"), std::string::npos);
EXPECT_NE(linux_script.find("\"boost-devel\""), std::string::npos);
EXPECT_NE(linux_script.find("\"boost-static\""), std::string::npos);
EXPECT_NE(linux_script.find("\"libboost-filesystem-dev\""), std::string::npos);
EXPECT_NE(linux_script.find("\"libboost-locale-dev\""), std::string::npos);
EXPECT_NE(linux_script.find("\"libboost-log-dev\""), std::string::npos);
EXPECT_NE(linux_script.find("\"libboost-program-options-dev\""), std::string::npos);
EXPECT_NE(linux_script.find("\"libicu-dev\""), std::string::npos);
EXPECT_NE(linux_script.find("\"26.04\" | sort -V"), std::string::npos);
EXPECT_NE(linux_script.find("version >= 44"), std::string::npos);
EXPECT_NE(arch_package.find("'boost'"), std::string::npos);
EXPECT_NE(arch_package.find("'boost-libs'"), std::string::npos);
#ifdef SUNSHINE_COPR_SPEC_FIXTURE_AVAILABLE
EXPECT_NE(copr_spec.find("%if 0%{fedora} > 43"), std::string::npos);
EXPECT_NE(
copr_spec.find(std::format("BuildRequires: boost-devel >= {}", minimum_version)),
std::string::npos
);
EXPECT_NE(
copr_spec.find(std::format("BuildRequires: boost-static >= {}", minimum_version)),
std::string::npos
);
#endif
#ifdef __APPLE__
const auto macos_script = read_project_file("scripts/macos_build.sh");
const auto macos_workflow = read_project_file(".github/workflows/ci-macos.yml");
EXPECT_NE(macos_script.find("\"boost\""), std::string::npos);
EXPECT_NE(macos_script.find("LIBRARY_PATH"), std::string::npos);
EXPECT_NE(macos_workflow.find("boost \\"), std::string::npos);
EXPECT_NE(macos_workflow.find("LIBRARY_PATH"), std::string::npos);
#endif
EXPECT_NE(documentation.find("packaged static Boost libraries"), std::string::npos);
}
+1 -3
View File
@@ -12,10 +12,8 @@
#include <tuple>
#include <vector>
// lib includes
#include <boost/process/v1.hpp>
// local includes
#include "src/boost_process_compat.h"
#include "src/platform/common.h"
// Test data structure for parameterized testing