mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-22 20:27:45 -05:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0bc73f41ce | ||
|
|
8b67fe2344 |
2
.github/workflows/test.yaml
vendored
2
.github/workflows/test.yaml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-2022, macos-latest]
|
os: [ubuntu-latest, windows-2022, macos-latest]
|
||||||
# we want to ensure compatibility with a recent CMake version as well as the lowest officially supported
|
# we want to ensure compatibility with a recent CMake version as well as the lowest officially supported
|
||||||
# legacy version that we define as the default version of the second-latest Ubuntu LTS release currently available
|
# legacy version that we define as the default version of the second-latest Ubuntu LTS release currently available
|
||||||
cmake_version: ['3.16.3', '3.27.5']
|
cmake_version: ['3.16.3', '3.27.5', '3.30.0']
|
||||||
exclude:
|
exclude:
|
||||||
# there seems to be an issue with CMake 3.16 not finding a C++ compiler on windows-2022
|
# there seems to be an issue with CMake 3.16 not finding a C++ compiler on windows-2022
|
||||||
- os: windows-2022
|
- os: windows-2022
|
||||||
|
|||||||
@@ -477,13 +477,16 @@ function(cpm_add_patches)
|
|||||||
find_program(PATCH_EXECUTABLE patch)
|
find_program(PATCH_EXECUTABLE patch)
|
||||||
if(WIN32 AND NOT PATCH_EXECUTABLE)
|
if(WIN32 AND NOT PATCH_EXECUTABLE)
|
||||||
# The Windows git executable is distributed with patch.exe. Find the path to the executable, if
|
# The Windows git executable is distributed with patch.exe. Find the path to the executable, if
|
||||||
# it exists, then search `../../usr/bin` for patch.exe.
|
# it exists, then search `../usr/bin` and `../../usr/bin` for patch.exe.
|
||||||
find_package(Git QUIET)
|
find_package(Git QUIET)
|
||||||
if(GIT_EXECUTABLE)
|
if(GIT_EXECUTABLE)
|
||||||
get_filename_component(extra_search_path ${GIT_EXECUTABLE} DIRECTORY)
|
get_filename_component(extra_search_path ${GIT_EXECUTABLE} DIRECTORY)
|
||||||
get_filename_component(extra_search_path ${extra_search_path} DIRECTORY)
|
get_filename_component(extra_search_path_1up ${extra_search_path} DIRECTORY)
|
||||||
get_filename_component(extra_search_path ${extra_search_path} DIRECTORY)
|
get_filename_component(extra_search_path_2up ${extra_search_path_1up} DIRECTORY)
|
||||||
find_program(PATCH_EXECUTABLE patch HINTS "${extra_search_path}/usr/bin")
|
find_program(
|
||||||
|
PATCH_EXECUTABLE patch HINTS "${extra_search_path_1up}/usr/bin"
|
||||||
|
"${extra_search_path_2up}/usr/bin"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(NOT PATCH_EXECUTABLE)
|
if(NOT PATCH_EXECUTABLE)
|
||||||
@@ -862,14 +865,38 @@ function(CPMAddPackage)
|
|||||||
)
|
)
|
||||||
|
|
||||||
if(NOT CPM_SKIP_FETCH)
|
if(NOT CPM_SKIP_FETCH)
|
||||||
|
# CMake 3.28 added EXCLUDE, SYSTEM (3.25), and SOURCE_SUBDIR (3.18) to FetchContent_Declare.
|
||||||
|
# Calling FetchContent_MakeAvailable will then internally forward these options to
|
||||||
|
# add_subdirectory. Up until these changes, we had to call FetchContent_Populate and
|
||||||
|
# add_subdirectory separately, which is no longer necessary and has been deprecated as of 3.30.
|
||||||
|
set(fetchContentDeclareExtraArgs "")
|
||||||
|
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
|
||||||
|
if(${CPM_ARGS_EXCLUDE_FROM_ALL})
|
||||||
|
list(APPEND fetchContentDeclareExtraArgs EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
|
if(${CPM_ARGS_SYSTEM})
|
||||||
|
list(APPEND fetchContentDeclareExtraArgs SYSTEM)
|
||||||
|
endif()
|
||||||
|
if(DEFINED CPM_ARGS_SOURCE_SUBDIR)
|
||||||
|
list(APPEND fetchContentDeclareExtraArgs SOURCE_SUBDIR ${CPM_ARGS_SOURCE_SUBDIR})
|
||||||
|
endif()
|
||||||
|
# For CMake version <3.28 OPTIONS are parsed in cpm_add_subdirectory
|
||||||
|
if(CPM_ARGS_OPTIONS AND NOT DOWNLOAD_ONLY)
|
||||||
|
foreach(OPTION ${CPM_ARGS_OPTIONS})
|
||||||
|
cpm_parse_option("${OPTION}")
|
||||||
|
set(${OPTION_KEY} "${OPTION_VALUE}")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
cpm_declare_fetch(
|
cpm_declare_fetch(
|
||||||
"${CPM_ARGS_NAME}" "${CPM_ARGS_VERSION}" "${PACKAGE_INFO}" "${CPM_ARGS_UNPARSED_ARGUMENTS}"
|
"${CPM_ARGS_NAME}" ${fetchContentDeclareExtraArgs} "${CPM_ARGS_UNPARSED_ARGUMENTS}"
|
||||||
)
|
)
|
||||||
cpm_fetch_package("${CPM_ARGS_NAME}" populated)
|
|
||||||
|
cpm_fetch_package("${CPM_ARGS_NAME}" ${DOWNLOAD_ONLY} populated ${CPM_ARGS_UNPARSED_ARGUMENTS})
|
||||||
if(CPM_SOURCE_CACHE AND download_directory)
|
if(CPM_SOURCE_CACHE AND download_directory)
|
||||||
file(LOCK ${download_directory}/../cmake.lock RELEASE)
|
file(LOCK ${download_directory}/../cmake.lock RELEASE)
|
||||||
endif()
|
endif()
|
||||||
if(${populated})
|
if(${populated} AND ${CMAKE_VERSION} VERSION_LESS "3.28.0")
|
||||||
cpm_add_subdirectory(
|
cpm_add_subdirectory(
|
||||||
"${CPM_ARGS_NAME}"
|
"${CPM_ARGS_NAME}"
|
||||||
"${DOWNLOAD_ONLY}"
|
"${DOWNLOAD_ONLY}"
|
||||||
@@ -980,7 +1007,7 @@ function(CPMGetPackageVersion PACKAGE OUTPUT)
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# declares a package in FetchContent_Declare
|
# declares a package in FetchContent_Declare
|
||||||
function(cpm_declare_fetch PACKAGE VERSION INFO)
|
function(cpm_declare_fetch PACKAGE)
|
||||||
if(${CPM_DRY_RUN})
|
if(${CPM_DRY_RUN})
|
||||||
cpm_message(STATUS "${CPM_INDENT} Package not declared (dry run)")
|
cpm_message(STATUS "${CPM_INDENT} Package not declared (dry run)")
|
||||||
return()
|
return()
|
||||||
@@ -1056,7 +1083,7 @@ endfunction()
|
|||||||
|
|
||||||
# downloads a previously declared package via FetchContent and exports the variables
|
# downloads a previously declared package via FetchContent and exports the variables
|
||||||
# `${PACKAGE}_SOURCE_DIR` and `${PACKAGE}_BINARY_DIR` to the parent scope
|
# `${PACKAGE}_SOURCE_DIR` and `${PACKAGE}_BINARY_DIR` to the parent scope
|
||||||
function(cpm_fetch_package PACKAGE populated)
|
function(cpm_fetch_package PACKAGE DOWNLOAD_ONLY populated)
|
||||||
set(${populated}
|
set(${populated}
|
||||||
FALSE
|
FALSE
|
||||||
PARENT_SCOPE
|
PARENT_SCOPE
|
||||||
@@ -1071,7 +1098,24 @@ function(cpm_fetch_package PACKAGE populated)
|
|||||||
string(TOLOWER "${PACKAGE}" lower_case_name)
|
string(TOLOWER "${PACKAGE}" lower_case_name)
|
||||||
|
|
||||||
if(NOT ${lower_case_name}_POPULATED)
|
if(NOT ${lower_case_name}_POPULATED)
|
||||||
|
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
|
||||||
|
if(DOWNLOAD_ONLY)
|
||||||
|
# MakeAvailable will call add_subdirectory internally which is not what we want when
|
||||||
|
# DOWNLOAD_ONLY is set. Populate will only download the dependency without adding it to the
|
||||||
|
# build
|
||||||
|
FetchContent_Populate(
|
||||||
|
${PACKAGE}
|
||||||
|
SOURCE_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-src"
|
||||||
|
BINARY_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build"
|
||||||
|
SUBBUILD_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild"
|
||||||
|
${ARGN}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
FetchContent_MakeAvailable(${PACKAGE})
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
FetchContent_Populate(${PACKAGE})
|
FetchContent_Populate(${PACKAGE})
|
||||||
|
endif()
|
||||||
set(${populated}
|
set(${populated}
|
||||||
TRUE
|
TRUE
|
||||||
PARENT_SCOPE
|
PARENT_SCOPE
|
||||||
|
|||||||
Reference in New Issue
Block a user