Add optional dependencies to Brewfile and improve CMake configuration

This commit updates the Brewfile to include additional optional dependencies such as Vulkan headers, RapidJSON, and various libraries for enhanced functionality. It also modifies CMake files to make the handling of optional components more user-friendly, allowing missing dependencies to disable features without causing build failures on macOS. Additionally, it refines the search paths for the Sparkle framework and adjusts the linking of the discord-rpc library based on the availability of RapidJSON.
This commit is contained in:
2026-01-22 14:19:33 +09:00
parent 81d5f57d13
commit a69024c0be
10 changed files with 175 additions and 9 deletions

View File

@@ -1,18 +1,20 @@
find_program(MACDEPLOYQT_EXECUTABLE NAMES macdeployqt PATHS /usr/bin /usr/local/bin /opt/local/bin /usr/local/opt/qt6/bin REQUIRED)
# NOTE: Packaging helpers should not be REQUIRED at configure time.
# Missing tools should simply disable the related custom targets.
find_program(MACDEPLOYQT_EXECUTABLE NAMES macdeployqt PATHS /usr/bin /usr/local/bin /opt/local/bin /usr/local/opt/qt6/bin)
if(MACDEPLOYQT_EXECUTABLE)
message(STATUS "Found macdeployqt: ${MACDEPLOYQT_EXECUTABLE}")
else()
message(WARNING "Missing macdeployqt executable.")
endif()
find_program(MACDEPLOYCHECK_EXECUTABLE NAMES macdeploycheck PATHS /usr/bin /usr/local/bin /opt/local/bin /usr/local/opt/qt6/bin REQUIRED)
find_program(MACDEPLOYCHECK_EXECUTABLE NAMES macdeploycheck PATHS /usr/bin /usr/local/bin /opt/local/bin /usr/local/opt/qt6/bin)
if(MACDEPLOYCHECK_EXECUTABLE)
message(STATUS "Found macdeploycheck: ${MACDEPLOYCHECK_EXECUTABLE}")
else()
message(WARNING "Missing macdeploycheck executable.")
message(STATUS "macdeploycheck not found (optional): 'deploycheck' target will be unavailable.")
endif()
find_program(CREATEDMG_EXECUTABLE NAMES create-dmg REQUIRED)
find_program(CREATEDMG_EXECUTABLE NAMES create-dmg)
if(CREATEDMG_EXECUTABLE)
message(STATUS "Found create-dmg: ${CREATEDMG_EXECUTABLE}")
else()

31
cmake/FindRapidJSON.cmake Normal file
View File

@@ -0,0 +1,31 @@
# Try to find RapidJSON (header-only).
#
# This project uses `find_package(RapidJSON)` and expects:
# - RapidJSON_FOUND
# - RapidJSON_INCLUDE_DIRS
#
# Homebrew's `rapidjson` formula commonly installs headers to:
# /opt/homebrew/include/rapidjson
# but does not always ship a `RapidJSONConfig.cmake`, so we provide this
# Find-module fallback.
find_path(RapidJSON_INCLUDE_DIR
NAMES rapidjson/document.h
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(RapidJSON
REQUIRED_VARS RapidJSON_INCLUDE_DIR
)
if(RapidJSON_FOUND)
set(RapidJSON_INCLUDE_DIRS "${RapidJSON_INCLUDE_DIR}")
endif()
if(RapidJSON_FOUND AND NOT TARGET RapidJSON::RapidJSON)
add_library(RapidJSON::RapidJSON INTERFACE IMPORTED)
set_target_properties(RapidJSON::RapidJSON PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${RapidJSON_INCLUDE_DIR}"
)
endif()

View File

@@ -1,6 +1,23 @@
set(summary_willbuild "")
set(summary_willnotbuild "")
# On some platforms (notably macOS via Homebrew), many "optional" dependencies are
# not installed by default. Historically, Strawberry treated missing optional deps
# as a hard error when the option defaulted to ON, which makes first-time builds
# frustrating.
#
# This toggle controls that behavior:
# - ON => missing optional deps abort the configure (packager/CI-friendly)
# - OFF => missing optional deps auto-disable the component (dev-friendly)
set(_optional_components_fatal_default ON)
if(APPLE)
set(_optional_components_fatal_default OFF)
endif()
option(OPTIONAL_COMPONENTS_MISSING_DEPS_ARE_FATAL
"If ON, missing optional component dependencies are fatal (otherwise components auto-disable)"
${_optional_components_fatal_default}
)
macro(optional_component_summary_add name test)
if (${test})
list(APPEND summary_willbuild ${name})
@@ -80,8 +97,13 @@ function(optional_component name default description)
set(text "${description} (missing ${deplist_text})")
set(summary_willnotbuild "${summary_willnotbuild};${text}" PARENT_SCOPE)
message(FATAL_ERROR "${text}, to disable this optional feature, pass -D${option_variable}=OFF to CMake")
if(OPTIONAL_COMPONENTS_MISSING_DEPS_ARE_FATAL)
message(FATAL_ERROR "${text}, to disable this optional feature, pass -D${option_variable}=OFF to CMake")
else()
message(STATUS "${text} - disabling ${option_variable}")
set(${option_variable} OFF CACHE BOOL "${description}" FORCE)
return()
endif()
else()
set(${have_variable} ON PARENT_SCOPE)