From aff9a6cee151274a6939d62e40abda22cd1ad568 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 1 Jun 2026 23:20:51 -0400 Subject: [PATCH] update cpmutil Signed-off-by: crueter --- CMakeModules/CPMUtil.cmake | 80 +++++++++++++++++---------- docs/CPMUtil/AddCIPackage.md | 1 + docs/CPMUtil/AddJsonPackage.md | 3 +- tools/cpm/package/fetch.sh | 2 +- tools/cpm/package/update.sh | 9 ++- tools/cpm/package/util/interactive.sh | 2 +- 6 files changed, 63 insertions(+), 34 deletions(-) diff --git a/CMakeModules/CPMUtil.cmake b/CMakeModules/CPMUtil.cmake index b98595ac2e..796e7f34ad 100644 --- a/CMakeModules/CPMUtil.cmake +++ b/CMakeModules/CPMUtil.cmake @@ -3,7 +3,7 @@ set(CPM_SOURCE_CACHE "${PROJECT_SOURCE_DIR}/.cache/cpm" CACHE STRING "" FORCE) -if(MSVC OR ANDROID) +if(MSVC OR ANDROID OR IOS) set(BUNDLED_DEFAULT ON) else() set(BUNDLED_DEFAULT OFF) @@ -128,7 +128,8 @@ function(AddDependentPackages) message(FATAL_ERROR "Partial dependency installation detected " "for the following packages:\n${package_names}\n" "You can solve this in one of two ways:\n" - "1. Install the following packages to your system if available:" + "1. Install or upgrade the following packages " + "to your system if available:" "\n\t${bundled_names}\n" "2. Set the following variables to ON:" "\n\t${system_names}\n" @@ -247,7 +248,9 @@ function(AddJsonPackage) set(multiValueArgs OPTIONS) - cmake_parse_arguments(JSON "" "${oneValueArgs}" "${multiValueArgs}" + set(optionArgs MODULE) + + cmake_parse_arguments(JSON "${optionArgs}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") list(LENGTH ARGN argnLength) @@ -276,6 +279,10 @@ function(AddJsonPackage) parse_object(${object}) + if (JSON_MODULE) + set(EXTRA_ARGS MODULE) + endif() + if(ci) AddCIPackage( VERSION ${version} @@ -284,8 +291,8 @@ function(AddJsonPackage) PACKAGE ${package} EXTENSION ${extension} MIN_VERSION ${min_version} - DISABLED_PLATFORMS ${disabled_platforms}) - + DISABLED_PLATFORMS ${disabled_platforms} + ${EXTRA_ARGS}) else() if (NOT DEFINED JSON_FORCE_BUNDLED_PACKAGE) set(JSON_FORCE_BUNDLED_PACKAGE OFF) @@ -307,23 +314,24 @@ function(AddJsonPackage) FORCE_BUNDLED_PACKAGE "${JSON_FORCE_BUNDLED_PACKAGE}" SOURCE_SUBDIR "${source_subdir}" - GIT_VERSION ${git_version} - GIT_HOST ${git_host} + GIT_VERSION "${git_version}" + GIT_HOST "${git_host}" - ARTIFACT ${artifact} - TAG ${tag}) + ARTIFACT "${artifact}" + TAG "${tag}" + ${EXTRA_ARGS}) endif() # pass stuff to parent scope Propagate(${package}_ADDED) Propagate(${package}_SOURCE_DIR) Propagate(${package}_BINARY_DIR) + Propagate(CMAKE_PREFIX_PATH) endfunction() function(AddPackage) cpm_set_policies() - - # TODO(crueter): git clone? + set(EXTRA_ARGS "") #[[ URL configurations, descending order of precedence: @@ -368,7 +376,9 @@ function(AddPackage) set(multiValueArgs OPTIONS PATCHES) - cmake_parse_arguments(PKG_ARGS "" "${oneValueArgs}" "${multiValueArgs}" + set(optionArgs MODULE) + + cmake_parse_arguments(PKG_ARGS "${optionArgs}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") if(NOT DEFINED PKG_ARGS_NAME) @@ -552,6 +562,12 @@ function(AddPackage) VERSION ${PKG_ARGS_VERSION}) endif() + if (PKG_ARGS_MODULE) + set(PKG_ARGS_DOWNLOAD_ONLY ON) + elseif (NOT DEFINED PKG_ARGS_DOWNLOAD_ONLY) + set(PKG_ARGS_DOWNLOAD_ONLY OFF) + endif() + CPMAddPackage( NAME ${PKG_ARGS_NAME} URL ${pkg_url} @@ -601,13 +617,14 @@ function(AddPackage) endif() # pass stuff to parent scope - set(${PKG_ARGS_NAME}_ADDED "${${PKG_ARGS_NAME}_ADDED}" - PARENT_SCOPE) - set(${PKG_ARGS_NAME}_SOURCE_DIR "${${PKG_ARGS_NAME}_SOURCE_DIR}" - PARENT_SCOPE) - set(${PKG_ARGS_NAME}_BINARY_DIR "${${PKG_ARGS_NAME}_BINARY_DIR}" - PARENT_SCOPE) + Propagate(${PKG_ARGS_NAME}_ADDED) + Propagate(${PKG_ARGS_NAME}_SOURCE_DIR) + Propagate(${PKG_ARGS_NAME}_BINARY_DIR) + if (PKG_ARGS_MODULE) + list(PREPEND CMAKE_PREFIX_PATH "${${ARTIFACT_PACKAGE}_SOURCE_DIR}") + Propagate(CMAKE_PREFIX_PATH) + endif() endfunction() # TODO(crueter): we could do an AddMultiArchPackage, multiplatformpackage? @@ -690,14 +707,20 @@ function(AddCIPackage) set(pkgname linux-amd64) elseif(PLATFORM_LINUX AND ARCHITECTURE_arm64) set(pkgname linux-aarch64) - elseif(APPLE) + elseif(APPLE AND NOT IOS) set(pkgname macos-universal) + elseif(IOS AND ARCHITECTURE_arm64) + set(pkgname ios-aarch64) endif() if (DEFINED pkgname AND NOT "${pkgname}" IN_LIST DISABLED_PLATFORMS) set(ARTIFACT "${ARTIFACT_NAME}-${pkgname}-${ARTIFACT_VERSION}.${ARTIFACT_EXT}") + if (PKG_ARGS_MODULE) + set(EXTRA_ARGS MODULE) + endif() + AddPackage( NAME ${ARTIFACT_PACKAGE} REPO ${ARTIFACT_REPO} @@ -708,23 +731,22 @@ function(AddCIPackage) KEY "${pkgname}-${ARTIFACT_VERSION}" HASH_SUFFIX sha512sum FORCE_BUNDLED_PACKAGE ON - DOWNLOAD_ONLY ${PKG_ARGS_MODULE}) + ${EXTRA_ARGS}) set(${ARTIFACT_PACKAGE}_ADDED TRUE PARENT_SCOPE) - set(${ARTIFACT_PACKAGE}_SOURCE_DIR - "${${ARTIFACT_PACKAGE}_SOURCE_DIR}" PARENT_SCOPE) - - if (PKG_ARGS_MODULE) - list(PREPEND CMAKE_PREFIX_PATH "${${ARTIFACT_PACKAGE}_SOURCE_DIR}") - Propagate(CMAKE_PREFIX_PATH) - endif() + Propagate(${ARTIFACT_PACKAGE}_SOURCE_DIR) + Propagate(CMAKE_PREFIX_PATH) else() find_package(${ARTIFACT_PACKAGE} ${ARTIFACT_MIN_VERSION} REQUIRED) endif() endfunction() # Utility function for Qt -function(AddQt version) +function(AddQt repo version) + if (NOT DEFINED repo) + message(FATAL_ERROR "[CPMUtil] AddQt: repo is required") + endif() + if (NOT DEFINED version) message(FATAL_ERROR "[CPMUtil] AddQt: version is required") endif() @@ -734,7 +756,7 @@ function(AddQt version) PACKAGE Qt6 VERSION ${version} MIN_VERSION 6 - REPO crueter-ci/Qt + REPO ${repo} DISABLED_PLATFORMS android-x86_64 android-aarch64 freebsd-amd64 solaris-amd64 openbsd-amd64 diff --git a/docs/CPMUtil/AddCIPackage.md b/docs/CPMUtil/AddCIPackage.md index bc7c1ccfad..7319b514ff 100644 --- a/docs/CPMUtil/AddCIPackage.md +++ b/docs/CPMUtil/AddCIPackage.md @@ -18,3 +18,4 @@ - `linux-amd64` - `linux-aarch64` - `macos-universal` + - `ios-aarch64` diff --git a/docs/CPMUtil/AddJsonPackage.md b/docs/CPMUtil/AddJsonPackage.md index 464cd1731b..e655d794f5 100644 --- a/docs/CPMUtil/AddJsonPackage.md +++ b/docs/CPMUtil/AddJsonPackage.md @@ -61,7 +61,8 @@ In order: OpenSSL CI, Boost (tag + artifact), Opus (options + find_args), discor "version": "3.6.0", "min_version": "1.1.1", "disabled_platforms": [ - "macos-universal" + "macos-universal", + "ios-aarch64" ] }, "boost": { diff --git a/tools/cpm/package/fetch.sh b/tools/cpm/package/fetch.sh index b03a824146..54ea8c64c4 100755 --- a/tools/cpm/package/fetch.sh +++ b/tools/cpm/package/fetch.sh @@ -83,7 +83,7 @@ ci_package() { android-aarch64 android-x86_64 \ solaris-amd64 freebsd-amd64 openbsd-amd64 \ linux-amd64 linux-aarch64 \ - macos-universal; do + macos-universal ios-aarch64; do echo "-- * platform $platform" case $DISABLED in diff --git a/tools/cpm/package/update.sh b/tools/cpm/package/update.sh index 92f4f423a9..6d94992edc 100755 --- a/tools/cpm/package/update.sh +++ b/tools/cpm/package/update.sh @@ -83,8 +83,13 @@ for pkg in $packages; do echo "-- Package $PACKAGE" # TODO(crueter): Support for Forgejo updates w/ forgejo_token - # Use gh-cli to avoid ratelimits lmao - TAGS=$(gh api --method GET "/repos/$REPO/tags") + # Use gh-cli to avoid ratelimits, if available + endpoint="/repos/$REPO/tags" + if command -v gh >/dev/null 2>&1; then + TAGS=$(gh api --method GET "$endpoint") + else + TAGS=$(curl -sfL "https://api.github.com$endpoint") + fi # filter out some commonly known annoyances # TODO add more diff --git a/tools/cpm/package/util/interactive.sh b/tools/cpm/package/util/interactive.sh index 99db77e20d..07087e5d10 100755 --- a/tools/cpm/package/util/interactive.sh +++ b/tools/cpm/package/util/interactive.sh @@ -151,7 +151,7 @@ mingw-amd64 mingw-arm64 android-aarch64 android-x86_64 solaris-amd64 freebsd-amd64 openbsd-amd64 linux-amd64 linux-aarch64 -macos-universal" +macos-universal ios-aarch64" DISABLED_PLATFORMS="$reply" fi