mirror of
https://github.com/CachyOS/New-Cli-Installer.git
synced 2025-01-23 14:32:22 +08:00
♻ Update CPM
This commit is contained in:
parent
6d9d4bcdec
commit
7d0eaa2fa9
117
cmake/CPM.cmake
117
cmake/CPM.cmake
@ -5,7 +5,7 @@
|
|||||||
# MIT License
|
# MIT License
|
||||||
# -----------
|
# -----------
|
||||||
#[[
|
#[[
|
||||||
Copyright (c) 2021 Lars Melchior and additional contributors
|
Copyright (c) 2019-2022 Lars Melchior and contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -30,8 +30,9 @@ cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
|||||||
|
|
||||||
set(CURRENT_CPM_VERSION 1.0.0-development-version)
|
set(CURRENT_CPM_VERSION 1.0.0-development-version)
|
||||||
|
|
||||||
|
get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
|
||||||
if(CPM_DIRECTORY)
|
if(CPM_DIRECTORY)
|
||||||
if(NOT CPM_DIRECTORY STREQUAL CMAKE_CURRENT_LIST_DIR)
|
if(NOT CPM_DIRECTORY STREQUAL CPM_CURRENT_DIRECTORY)
|
||||||
if(CPM_VERSION VERSION_LESS CURRENT_CPM_VERSION)
|
if(CPM_VERSION VERSION_LESS CURRENT_CPM_VERSION)
|
||||||
message(
|
message(
|
||||||
AUTHOR_WARNING
|
AUTHOR_WARNING
|
||||||
@ -66,6 +67,23 @@ endif()
|
|||||||
|
|
||||||
set_property(GLOBAL PROPERTY CPM_INITIALIZED true)
|
set_property(GLOBAL PROPERTY CPM_INITIALIZED true)
|
||||||
|
|
||||||
|
# the policy allows us to change options without caching
|
||||||
|
cmake_policy(SET CMP0077 NEW)
|
||||||
|
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
||||||
|
|
||||||
|
# the policy allows us to change set(CACHE) without caching
|
||||||
|
if(POLICY CMP0126)
|
||||||
|
cmake_policy(SET CMP0126 NEW)
|
||||||
|
set(CMAKE_POLICY_DEFAULT_CMP0126 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# The policy uses the download time for timestamp, instead of the timestamp in the archive. This
|
||||||
|
# allows for proper rebuilds when a projects url changes
|
||||||
|
if(POLICY CMP0135)
|
||||||
|
cmake_policy(SET CMP0135 NEW)
|
||||||
|
set(CMAKE_POLICY_DEFAULT_CMP0135 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
option(CPM_USE_LOCAL_PACKAGES "Always try to use `find_package` to get dependencies"
|
option(CPM_USE_LOCAL_PACKAGES "Always try to use `find_package` to get dependencies"
|
||||||
$ENV{CPM_USE_LOCAL_PACKAGES}
|
$ENV{CPM_USE_LOCAL_PACKAGES}
|
||||||
)
|
)
|
||||||
@ -93,7 +111,7 @@ set(CPM_VERSION
|
|||||||
CACHE INTERNAL ""
|
CACHE INTERNAL ""
|
||||||
)
|
)
|
||||||
set(CPM_DIRECTORY
|
set(CPM_DIRECTORY
|
||||||
${CMAKE_CURRENT_LIST_DIR}
|
${CPM_CURRENT_DIRECTORY}
|
||||||
CACHE INTERNAL ""
|
CACHE INTERNAL ""
|
||||||
)
|
)
|
||||||
set(CPM_FILE
|
set(CPM_FILE
|
||||||
@ -251,7 +269,13 @@ function(CPMFindPackage)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CPM_DOWNLOAD_ALL)
|
set(downloadPackage ${CPM_DOWNLOAD_ALL})
|
||||||
|
if(DEFINED CPM_DOWNLOAD_${CPM_ARGS_NAME})
|
||||||
|
set(downloadPackage ${CPM_DOWNLOAD_${CPM_ARGS_NAME}})
|
||||||
|
elseif(DEFINED ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}})
|
||||||
|
set(downloadPackage $ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}})
|
||||||
|
endif()
|
||||||
|
if(downloadPackage)
|
||||||
CPMAddPackage(${ARGN})
|
CPMAddPackage(${ARGN})
|
||||||
cpm_export_variables(${CPM_ARGS_NAME})
|
cpm_export_variables(${CPM_ARGS_NAME})
|
||||||
return()
|
return()
|
||||||
@ -340,7 +364,7 @@ function(cpm_parse_add_package_single_arg arg outArgs)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# For all packages we interpret @... as version. Only replace the last occurence. Thus URIs
|
# For all packages we interpret @... as version. Only replace the last occurrence. Thus URIs
|
||||||
# containing '@' can be used
|
# containing '@' can be used
|
||||||
string(REGEX REPLACE "@([^@]+)$" ";VERSION;\\1" out "${out}")
|
string(REGEX REPLACE "@([^@]+)$" ";VERSION;\\1" out "${out}")
|
||||||
|
|
||||||
@ -379,7 +403,7 @@ function(cpm_check_git_working_dir_is_clean repoPath gitTag isClean)
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# check for uncommited changes
|
# check for uncommitted changes
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND ${GIT_EXECUTABLE} status --porcelain
|
COMMAND ${GIT_EXECUTABLE} status --porcelain
|
||||||
RESULT_VARIABLE resultGitStatus
|
RESULT_VARIABLE resultGitStatus
|
||||||
@ -405,7 +429,7 @@ function(cpm_check_git_working_dir_is_clean repoPath gitTag isClean)
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# check for commited changes
|
# check for committed changes
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND ${GIT_EXECUTABLE} diff -s --exit-code ${gitTag}
|
COMMAND ${GIT_EXECUTABLE} diff -s --exit-code ${gitTag}
|
||||||
RESULT_VARIABLE resultGitDiff
|
RESULT_VARIABLE resultGitDiff
|
||||||
@ -427,8 +451,50 @@ function(cpm_check_git_working_dir_is_clean repoPath gitTag isClean)
|
|||||||
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# method to overwrite internal FetchContent properties, to allow using CPM.cmake to overload
|
||||||
|
# FetchContent calls. As these are internal cmake properties, this method should be used carefully
|
||||||
|
# and may need modification in future CMake versions. Source:
|
||||||
|
# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake#L1152
|
||||||
|
function(cpm_override_fetchcontent contentName)
|
||||||
|
cmake_parse_arguments(PARSE_ARGV 1 arg "" "SOURCE_DIR;BINARY_DIR" "")
|
||||||
|
if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "")
|
||||||
|
message(FATAL_ERROR "Unsupported arguments: ${arg_UNPARSED_ARGUMENTS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(TOLOWER ${contentName} contentNameLower)
|
||||||
|
set(prefix "_FetchContent_${contentNameLower}")
|
||||||
|
|
||||||
|
set(propertyName "${prefix}_sourceDir")
|
||||||
|
define_property(
|
||||||
|
GLOBAL
|
||||||
|
PROPERTY ${propertyName}
|
||||||
|
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
|
||||||
|
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
|
||||||
|
)
|
||||||
|
set_property(GLOBAL PROPERTY ${propertyName} "${arg_SOURCE_DIR}")
|
||||||
|
|
||||||
|
set(propertyName "${prefix}_binaryDir")
|
||||||
|
define_property(
|
||||||
|
GLOBAL
|
||||||
|
PROPERTY ${propertyName}
|
||||||
|
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
|
||||||
|
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
|
||||||
|
)
|
||||||
|
set_property(GLOBAL PROPERTY ${propertyName} "${arg_BINARY_DIR}")
|
||||||
|
|
||||||
|
set(propertyName "${prefix}_populated")
|
||||||
|
define_property(
|
||||||
|
GLOBAL
|
||||||
|
PROPERTY ${propertyName}
|
||||||
|
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
|
||||||
|
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
|
||||||
|
)
|
||||||
|
set_property(GLOBAL PROPERTY ${propertyName} TRUE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
# Download and add a package from source
|
# Download and add a package from source
|
||||||
function(CPMAddPackage)
|
function(CPMAddPackage)
|
||||||
|
|
||||||
list(LENGTH ARGN argnLength)
|
list(LENGTH ARGN argnLength)
|
||||||
if(argnLength EQUAL 1)
|
if(argnLength EQUAL 1)
|
||||||
cpm_parse_add_package_single_arg("${ARGN}" ARGN)
|
cpm_parse_add_package_single_arg("${ARGN}" ARGN)
|
||||||
@ -603,6 +669,20 @@ function(CPMAddPackage)
|
|||||||
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND})
|
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND})
|
||||||
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
|
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
|
||||||
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${CPM_ARGS_SOURCE_DIR})
|
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${CPM_ARGS_SOURCE_DIR})
|
||||||
|
if(NOT IS_ABSOLUTE ${CPM_ARGS_SOURCE_DIR})
|
||||||
|
# Expand `CPM_ARGS_SOURCE_DIR` relative path. This is important because EXISTS doesn't work
|
||||||
|
# for relative paths.
|
||||||
|
get_filename_component(
|
||||||
|
source_directory ${CPM_ARGS_SOURCE_DIR} REALPATH BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set(source_directory ${CPM_ARGS_SOURCE_DIR})
|
||||||
|
endif()
|
||||||
|
if(NOT EXISTS ${source_directory})
|
||||||
|
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
|
||||||
|
# remove timestamps so CMake will re-download the dependency
|
||||||
|
file(REMOVE_RECURSE "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild")
|
||||||
|
endif()
|
||||||
elseif(CPM_SOURCE_CACHE AND NOT CPM_ARGS_NO_CACHE)
|
elseif(CPM_SOURCE_CACHE AND NOT CPM_ARGS_NO_CACHE)
|
||||||
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
|
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
|
||||||
set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS})
|
set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS})
|
||||||
@ -638,8 +718,15 @@ function(CPMAddPackage)
|
|||||||
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}" "${${CPM_ARGS_NAME}_BINARY_DIR}"
|
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}" "${${CPM_ARGS_NAME}_BINARY_DIR}"
|
||||||
"${CPM_ARGS_EXCLUDE_FROM_ALL}" "${CPM_ARGS_OPTIONS}"
|
"${CPM_ARGS_EXCLUDE_FROM_ALL}" "${CPM_ARGS_OPTIONS}"
|
||||||
)
|
)
|
||||||
set(CPM_SKIP_FETCH TRUE)
|
|
||||||
set(PACKAGE_INFO "${PACKAGE_INFO} at ${download_directory}")
|
set(PACKAGE_INFO "${PACKAGE_INFO} at ${download_directory}")
|
||||||
|
|
||||||
|
# As the source dir is already cached/populated, we override the call to FetchContent.
|
||||||
|
set(CPM_SKIP_FETCH TRUE)
|
||||||
|
cpm_override_fetchcontent(
|
||||||
|
"${lower_case_name}" SOURCE_DIR "${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
|
||||||
|
BINARY_DIR "${${CPM_ARGS_NAME}_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
else()
|
else()
|
||||||
# Enable shallow clone when GIT_TAG is not a commit hash. Our guess may not be accurate, but
|
# Enable shallow clone when GIT_TAG is not a commit hash. Our guess may not be accurate, but
|
||||||
# it should guarantee no commit hash get mis-detected.
|
# it should guarantee no commit hash get mis-detected.
|
||||||
@ -717,7 +804,7 @@ macro(cpm_export_variables name)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# declares a package, so that any call to CPMAddPackage for the package name will use these
|
# declares a package, so that any call to CPMAddPackage for the package name will use these
|
||||||
# arguments instead. Previous declarations will not be overriden.
|
# arguments instead. Previous declarations will not be overridden.
|
||||||
macro(CPMDeclarePackage Name)
|
macro(CPMDeclarePackage Name)
|
||||||
if(NOT DEFINED "CPM_DECLARATION_${Name}")
|
if(NOT DEFINED "CPM_DECLARATION_${Name}")
|
||||||
set("CPM_DECLARATION_${Name}" "${ARGN}")
|
set("CPM_DECLARATION_${Name}" "${ARGN}")
|
||||||
@ -837,16 +924,6 @@ function(
|
|||||||
set(addSubdirectoryExtraArgs "")
|
set(addSubdirectoryExtraArgs "")
|
||||||
endif()
|
endif()
|
||||||
if(OPTIONS)
|
if(OPTIONS)
|
||||||
# the policy allows us to change options without caching
|
|
||||||
cmake_policy(SET CMP0077 NEW)
|
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
||||||
|
|
||||||
# the policy allows us to change set(CACHE) without caching
|
|
||||||
if(POLICY CMP0126)
|
|
||||||
cmake_policy(SET CMP0126 NEW)
|
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0126 NEW)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
foreach(OPTION ${OPTIONS})
|
foreach(OPTION ${OPTIONS})
|
||||||
cpm_parse_option("${OPTION}")
|
cpm_parse_option("${OPTION}")
|
||||||
set(${OPTION_KEY} "${OPTION_VALUE}")
|
set(${OPTION_KEY} "${OPTION_VALUE}")
|
||||||
@ -937,7 +1014,7 @@ function(cpm_get_version_from_git_tag GIT_TAG RESULT)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# guesses if the git tag is a commit hash or an actual tag or a branch nane.
|
# guesses if the git tag is a commit hash or an actual tag or a branch name.
|
||||||
function(cpm_is_git_tag_commit_hash GIT_TAG RESULT)
|
function(cpm_is_git_tag_commit_hash GIT_TAG RESULT)
|
||||||
string(LENGTH "${GIT_TAG}" length)
|
string(LENGTH "${GIT_TAG}" length)
|
||||||
# full hash has 40 characters, and short hash has at least 7 characters.
|
# full hash has 40 characters, and short hash has at least 7 characters.
|
||||||
|
Loading…
Reference in New Issue
Block a user