mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-07-01 02:45:27 +02:00
WIP: [cmake] Test CPM trim
Don't merge Signed-off-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
parent
629ebf1bde
commit
bd4bfc978e
3 changed files with 226 additions and 1111 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -9,7 +9,8 @@ else()
|
||||||
set(BUNDLED_DEFAULT OFF)
|
set(BUNDLED_DEFAULT OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CPM_SOURCE_CACHE "${PROJECT_SOURCE_DIR}/.cache/cpm" CACHE STRING "" FORCE)
|
set(CPM_SOURCE_CACHE "${PROJECT_SOURCE_DIR}/.cache/cpm"
|
||||||
|
CACHE PATH "Directory to download CPM dependencies")
|
||||||
|
|
||||||
option(CPMUTIL_FORCE_BUNDLED
|
option(CPMUTIL_FORCE_BUNDLED
|
||||||
"Force bundled packages for all CPM depdendencies" ${BUNDLED_DEFAULT})
|
"Force bundled packages for all CPM depdendencies" ${BUNDLED_DEFAULT})
|
||||||
|
|
@ -71,6 +72,7 @@ macro(Propagate var)
|
||||||
set(${var} ${${var}} PARENT_SCOPE)
|
set(${var} ${${var}} PARENT_SCOPE)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
# idk
|
||||||
function(array_to_list array length out)
|
function(array_to_list array length out)
|
||||||
math(EXPR range "${length} - 1")
|
math(EXPR range "${length} - 1")
|
||||||
|
|
||||||
|
|
@ -83,6 +85,7 @@ function(array_to_list array length out)
|
||||||
set("${out}" "${NEW_LIST}" PARENT_SCOPE)
|
set("${out}" "${NEW_LIST}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# json
|
||||||
function(get_json_element object out member default)
|
function(get_json_element object out member default)
|
||||||
string(JSON out_type ERROR_VARIABLE err TYPE "${object}" ${member})
|
string(JSON out_type ERROR_VARIABLE err TYPE "${object}" ${member})
|
||||||
|
|
||||||
|
|
@ -101,6 +104,13 @@ function(get_json_element object out member default)
|
||||||
set("${out}" "${outvar}" PARENT_SCOPE)
|
set("${out}" "${outvar}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# register a package to CPMUtil's global registry
|
||||||
|
function(cpmutil_register_package name url version)
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${name})
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${url})
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS "${version}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
# Determine whether or not a package has a viable system candidate.
|
# Determine whether or not a package has a viable system candidate.
|
||||||
function(SystemPackageViable JSON_NAME)
|
function(SystemPackageViable JSON_NAME)
|
||||||
string(JSON object GET "${CPMFILE_CONTENT}" "${JSON_NAME}")
|
string(JSON object GET "${CPMFILE_CONTENT}" "${JSON_NAME}")
|
||||||
|
|
@ -108,14 +118,17 @@ function(SystemPackageViable JSON_NAME)
|
||||||
parse_object(${object})
|
parse_object(${object})
|
||||||
|
|
||||||
string(REPLACE " " ";" find_args "${find_args}")
|
string(REPLACE " " ";" find_args "${find_args}")
|
||||||
if (${package}_FORCE_BUNDLED)
|
if(${package}_FORCE_BUNDLED OR
|
||||||
|
(CPMUTIL_FORCE_BUNDLED
|
||||||
|
AND NOT ${package}_FORCE_SYSTEM
|
||||||
|
AND NOT CPMUTIL_FORCE_SYSTEM))
|
||||||
set(${package}_FOUND OFF)
|
set(${package}_FOUND OFF)
|
||||||
else()
|
else()
|
||||||
find_package(${package} ${version} ${find_args} QUIET NO_POLICY_SCOPE)
|
find_package(${package} ${version} ${find_args} QUIET NO_POLICY_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(${pkg}_VIABLE ${${package}_FOUND} PARENT_SCOPE)
|
set(${JSON_NAME}_VIABLE ${${package}_FOUND} PARENT_SCOPE)
|
||||||
set(${pkg}_PACKAGE ${package} PARENT_SCOPE)
|
set(${JSON_NAME}_PACKAGE ${package} PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Add several packages such that if one is bundled,
|
# Add several packages such that if one is bundled,
|
||||||
|
|
@ -175,6 +188,10 @@ macro(parse_object object)
|
||||||
get_json_element("${object}" min_version min_version "")
|
get_json_element("${object}" min_version min_version "")
|
||||||
get_json_element("${object}" git_host git_host "github.com")
|
get_json_element("${object}" git_host git_host "github.com")
|
||||||
|
|
||||||
|
if (NOT version)
|
||||||
|
cpm_utils_message(FATAL_ERROR "${JSON_NAME}" "version is required")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(ci)
|
if(ci)
|
||||||
get_json_element("${object}" name name "${JSON_NAME}")
|
get_json_element("${object}" name name "${JSON_NAME}")
|
||||||
get_json_element("${object}" extension extension "tar.zst")
|
get_json_element("${object}" extension extension "tar.zst")
|
||||||
|
|
@ -352,7 +369,6 @@ function(AddJsonPackage)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(AddPackage)
|
function(AddPackage)
|
||||||
cpm_set_policies()
|
|
||||||
set(EXTRA_ARGS "")
|
set(EXTRA_ARGS "")
|
||||||
|
|
||||||
set(oneValueArgs
|
set(oneValueArgs
|
||||||
|
|
@ -386,7 +402,11 @@ function(AddPackage)
|
||||||
"${ARGN}")
|
"${ARGN}")
|
||||||
|
|
||||||
if(NOT DEFINED PKG_ARGS_NAME)
|
if(NOT DEFINED PKG_ARGS_NAME)
|
||||||
cpm_utils_message(FATAL_ERROR "package" "No package name defined")
|
cpm_utils_message(FATAL_ERROR "AddPackage" "NAME is required")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED PKG_ARGS_VERSION)
|
||||||
|
cpm_utils_message(FATAL_ERROR "${PKG_ARGS_NAME}" "VERSION is required")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(${PKG_ARGS_NAME}_CUSTOM_DIR "" CACHE STRING
|
set(${PKG_ARGS_NAME}_CUSTOM_DIR "" CACHE STRING
|
||||||
|
|
@ -434,17 +454,11 @@ function(AddPackage)
|
||||||
|
|
||||||
cpm_utils_message(DEBUG ${PKG_ARGS_NAME} "Download URL is ${pkg_url}")
|
cpm_utils_message(DEBUG ${PKG_ARGS_NAME} "Download URL is ${pkg_url}")
|
||||||
|
|
||||||
|
# TODO: maybe singular version/ref that detects sha/tag?
|
||||||
if(DEFINED PKG_ARGS_SHA)
|
if(DEFINED PKG_ARGS_SHA)
|
||||||
string(SUBSTRING ${PKG_ARGS_SHA} 0 4 pkg_key)
|
string(SUBSTRING ${PKG_ARGS_SHA} 0 4 pkg_key)
|
||||||
elseif(DEFINED PKG_ARGS_VERSION)
|
|
||||||
set(pkg_key ${PKG_ARGS_VERSION})
|
|
||||||
elseif(DEFINED PKG_ARGS_TAG)
|
|
||||||
set(pkg_key ${PKG_ARGS_TAG})
|
|
||||||
elseif(DEFINED PKG_ARGS_MIN_VERSION)
|
|
||||||
set(pkg_key ${PKG_ARGS_MIN_VERSION})
|
|
||||||
else()
|
else()
|
||||||
cpm_utils_message(FATAL_ERROR ${PKG_ARGS_NAME}
|
set(pkg_key ${PKG_ARGS_VERSION})
|
||||||
"Could not determine cache key")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED PKG_ARGS_HASH)
|
if(DEFINED PKG_ARGS_HASH)
|
||||||
|
|
@ -454,118 +468,119 @@ function(AddPackage)
|
||||||
"No hash defined")
|
"No hash defined")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
macro(set_precedence local force)
|
|
||||||
set(CPM_USE_LOCAL_PACKAGES ${local})
|
|
||||||
set(CPM_LOCAL_PACKAGES_ONLY ${force})
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
#[[
|
#[[
|
||||||
Precedence:
|
Precedence:
|
||||||
- package_FORCE_SYSTEM
|
- FORCE_BUNDLED_PACKAGE (caller override)
|
||||||
- package_FORCE_BUNDLED
|
- package_FORCE_SYSTEM, package_FORCE_BUNDLED (user option)
|
||||||
- CPMUTIL_FORCE_SYSTEM
|
- CPMUTIL_FORCE_SYSTEM, CPMUTIL_FORCE_BUNDLED (global option)
|
||||||
- CPMUTIL_FORCE_BUNDLED
|
- BUNDLED_PACKAGE (json default)
|
||||||
- BUNDLED_PACKAGE
|
- default to allow system
|
||||||
- default to allow local
|
|
||||||
]]
|
]]
|
||||||
if(PKG_ARGS_FORCE_BUNDLED_PACKAGE)
|
if(PKG_ARGS_FORCE_BUNDLED_PACKAGE)
|
||||||
set_precedence(OFF OFF)
|
set(use_system OFF)
|
||||||
elseif(${PKG_ARGS_NAME}_FORCE_SYSTEM)
|
elseif(${PKG_ARGS_NAME}_FORCE_SYSTEM)
|
||||||
set_precedence(ON ON)
|
set(use_system ON)
|
||||||
|
set(force_system ON)
|
||||||
elseif(${PKG_ARGS_NAME}_FORCE_BUNDLED)
|
elseif(${PKG_ARGS_NAME}_FORCE_BUNDLED)
|
||||||
set_precedence(OFF OFF)
|
set(use_system OFF)
|
||||||
elseif(CPMUTIL_FORCE_SYSTEM)
|
elseif(CPMUTIL_FORCE_SYSTEM)
|
||||||
set_precedence(ON ON)
|
set(use_system ON)
|
||||||
|
set(force_system ON)
|
||||||
elseif(CPMUTIL_FORCE_BUNDLED)
|
elseif(CPMUTIL_FORCE_BUNDLED)
|
||||||
set_precedence(OFF OFF)
|
set(use_system OFF)
|
||||||
elseif(DEFINED PKG_ARGS_BUNDLED_PACKAGE AND
|
elseif(DEFINED PKG_ARGS_BUNDLED_PACKAGE AND
|
||||||
NOT PKG_ARGS_BUNDLED_PACKAGE STREQUAL "unset")
|
NOT PKG_ARGS_BUNDLED_PACKAGE STREQUAL "unset")
|
||||||
if(PKG_ARGS_BUNDLED_PACKAGE)
|
if(PKG_ARGS_BUNDLED_PACKAGE)
|
||||||
set(local OFF)
|
set(use_system OFF)
|
||||||
else()
|
else()
|
||||||
set(local ON)
|
set(use_system ON)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(use_system ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(use_system)
|
||||||
|
set(find_args ${PKG_ARGS_NAME})
|
||||||
|
if(DEFINED PKG_ARGS_MIN_VERSION)
|
||||||
|
list(APPEND find_args ${PKG_ARGS_MIN_VERSION})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_precedence(${local} OFF)
|
if (DEFINED PKG_ARGS_FIND_PACKAGE_ARGUMENTS)
|
||||||
else()
|
string(REPLACE " " ";"
|
||||||
set_precedence(ON OFF)
|
passed_find_args
|
||||||
endif()
|
"${PKG_ARGS_FIND_PACKAGE_ARGUMENTS}")
|
||||||
|
|
||||||
if(DEFINED PKG_ARGS_MIN_VERSION)
|
set(find_args "${find_args};${passed_find_args}")
|
||||||
list(APPEND EXTRA_ARGS
|
endif()
|
||||||
VERSION ${PKG_ARGS_MIN_VERSION})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (PKG_ARGS_FIND_PACKAGE_ARGUMENTS)
|
find_package(${find_args} QUIET)
|
||||||
list(APPEND EXTRA_ARGS
|
|
||||||
FIND_PACKAGE_ARGUMENTS "${PKG_ARGS_FIND_PACKAGE_ARGUMENTS}")
|
if(${PKG_ARGS_NAME}_FOUND)
|
||||||
|
if(DEFINED ${PKG_ARGS_NAME}_VERSION)
|
||||||
|
set(sys_ver ${${PKG_ARGS_NAME}_VERSION})
|
||||||
|
else()
|
||||||
|
set(sys_ver ${PKG_ARGS_VERSION})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS
|
||||||
|
"[CPMUtil] Using system package ${PKG_ARGS_NAME}@${sys_ver}")
|
||||||
|
|
||||||
|
CPMRegisterPackage(${PKG_ARGS_NAME} "${sys_ver}")
|
||||||
|
|
||||||
|
cpmutil_register_package(
|
||||||
|
${PKG_ARGS_NAME}
|
||||||
|
${pkg_git_url}
|
||||||
|
"${sys_ver} (system)")
|
||||||
|
|
||||||
|
set(${PKG_ARGS_NAME}_ADDED NO PARENT_SCOPE)
|
||||||
|
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(force_system)
|
||||||
|
string(REPLACE ";" " " str_find_args "${find_args}")
|
||||||
|
message(FATAL_ERROR "[CPMUtil] ${PKG_ARGS_NAME} not found via "
|
||||||
|
"find_package(${str_find_args})")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PKG_ARGS_PATCHES)
|
if (PKG_ARGS_PATCHES)
|
||||||
list(APPEND EXTRA_ARGS
|
list(APPEND EXTRA_ARGS PATCHES "${PKG_ARGS_PATCHES}")
|
||||||
PATCHES "${PKG_ARGS_PATCHES}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PKG_ARGS_OPTIONS)
|
if (PKG_ARGS_OPTIONS)
|
||||||
list(APPEND EXTRA_ARGS
|
list(APPEND EXTRA_ARGS OPTIONS "${PKG_ARGS_OPTIONS}")
|
||||||
OPTIONS "${PKG_ARGS_OPTIONS}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PKG_ARGS_SOURCE_SUBDIR)
|
if (PKG_ARGS_SOURCE_SUBDIR)
|
||||||
list(APPEND EXTRA_ARGS
|
list(APPEND EXTRA_ARGS SOURCE_SUBDIR "${PKG_ARGS_SOURCE_SUBDIR}")
|
||||||
SOURCE_SUBDIR "${PKG_ARGS_SOURCE_SUBDIR}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PKG_ARGS_DOWNLOAD_ONLY OR PKG_ARGS_MODULE_PATH)
|
if (PKG_ARGS_DOWNLOAD_ONLY OR PKG_ARGS_MODULE_PATH)
|
||||||
list(APPEND EXTRA_ARGS DOWNLOAD_ONLY ON)
|
list(APPEND EXTRA_ARGS DOWNLOAD_ONLY ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
message(STATUS
|
||||||
|
"[CPMUtil] Using bundled package ${PKG_ARGS_NAME}@${PKG_ARGS_VERSION} (${pkg_key})")
|
||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME ${PKG_ARGS_NAME}
|
NAME ${PKG_ARGS_NAME}
|
||||||
URL ${pkg_url}
|
URL ${pkg_url}
|
||||||
URL_HASH ${pkg_hash}
|
URL_HASH ${pkg_hash}
|
||||||
CUSTOM_CACHE_KEY ${pkg_key}
|
CUSTOM_CACHE_KEY ${pkg_key}
|
||||||
|
VERSION ${PKG_ARGS_VERSION}
|
||||||
|
|
||||||
EXCLUDE_FROM_ALL ON
|
EXCLUDE_FROM_ALL ON
|
||||||
|
|
||||||
${EXTRA_ARGS}
|
${EXTRA_ARGS}
|
||||||
|
|
||||||
${PKG_ARGS_UNPARSED_ARGUMENTS})
|
${PKG_ARGS_UNPARSED_ARGUMENTS})
|
||||||
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${PKG_ARGS_NAME})
|
if(DEFINED PKG_ARGS_SHA)
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${pkg_git_url})
|
set(ver ${PKG_ARGS_SHA})
|
||||||
|
|
||||||
if(${PKG_ARGS_NAME}_ADDED)
|
|
||||||
if(DEFINED PKG_ARGS_SHA)
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
|
||||||
${PKG_ARGS_SHA})
|
|
||||||
elseif(DEFINED PKG_ARGS_VERSION)
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
|
||||||
${PKG_ARGS_VERSION})
|
|
||||||
elseif(DEFINED PKG_ARGS_TAG)
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
|
||||||
${PKG_ARGS_TAG})
|
|
||||||
elseif(DEFINED PKG_ARGS_MIN_VERSION)
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
|
||||||
${PKG_ARGS_MIN_VERSION})
|
|
||||||
else()
|
|
||||||
cpm_utils_message(WARNING ${PKG_ARGS_NAME}
|
|
||||||
"Package has no specified sha, tag, or version")
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS "unknown")
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
if(DEFINED CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION AND NOT
|
set(ver ${PKG_ARGS_VERSION})
|
||||||
"${CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION}" STREQUAL "")
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
|
||||||
"${CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION} (system)")
|
|
||||||
else()
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
|
||||||
"unknown (system)")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# pass stuff to parent scope
|
cpmutil_register_package(${PKG_ARGS_NAME} ${pkg_git_url} ${ver})
|
||||||
Propagate(${PKG_ARGS_NAME}_ADDED)
|
|
||||||
|
set(${PKG_ARGS_NAME}_ADDED YES PARENT_SCOPE)
|
||||||
Propagate(${PKG_ARGS_NAME}_SOURCE_DIR)
|
Propagate(${PKG_ARGS_NAME}_SOURCE_DIR)
|
||||||
Propagate(${PKG_ARGS_NAME}_BINARY_DIR)
|
Propagate(${PKG_ARGS_NAME}_BINARY_DIR)
|
||||||
|
|
||||||
|
|
@ -715,6 +730,7 @@ function(AddCIPackage)
|
||||||
NAME ${ARTIFACT_PACKAGE}
|
NAME ${ARTIFACT_PACKAGE}
|
||||||
REPO ${ARTIFACT_REPO}
|
REPO ${ARTIFACT_REPO}
|
||||||
TAG "v${ARTIFACT_VERSION}"
|
TAG "v${ARTIFACT_VERSION}"
|
||||||
|
VERSION "${ARTIFACT_VERSION}"
|
||||||
MIN_VERSION ${ARTIFACT_VERSION}
|
MIN_VERSION ${ARTIFACT_VERSION}
|
||||||
ARTIFACT ${ARTIFACT}
|
ARTIFACT ${ARTIFACT}
|
||||||
HASH ${sha512sum_hash}
|
HASH ${sha512sum_hash}
|
||||||
|
|
|
||||||
|
|
@ -316,7 +316,8 @@
|
||||||
],
|
],
|
||||||
"package": "SPIRV-Headers",
|
"package": "SPIRV-Headers",
|
||||||
"repo": "KhronosGroup/SPIRV-Headers",
|
"repo": "KhronosGroup/SPIRV-Headers",
|
||||||
"sha": "04f10f650d"
|
"sha": "04f10f650d",
|
||||||
|
"version": "1.4.350"
|
||||||
},
|
},
|
||||||
"tzdb": {
|
"tzdb": {
|
||||||
"artifact": "%VERSION%.tar.gz",
|
"artifact": "%VERSION%.tar.gz",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue