mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-25 21:57:48 -05:00
Compare commits
3 Commits
v0.29.0-pr
...
v0.30.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cbf443363 | ||
|
|
2744b87f07 | ||
|
|
fd539b8ff3 |
@@ -33,6 +33,7 @@ parse:
|
|||||||
DOWNLOAD_NO_EXTRACT: 1
|
DOWNLOAD_NO_EXTRACT: 1
|
||||||
HTTP_USERNAME: 1
|
HTTP_USERNAME: 1
|
||||||
HTTP_PASSWORD: 1
|
HTTP_PASSWORD: 1
|
||||||
|
EXCLUDE_FROM_ALL: 1
|
||||||
OPTIONS: +
|
OPTIONS: +
|
||||||
cpmfindpackage:
|
cpmfindpackage:
|
||||||
pargs:
|
pargs:
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ add_executable(tests tests.cpp)
|
|||||||
include(cmake/CPM.cmake)
|
include(cmake/CPM.cmake)
|
||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME Catch2
|
|
||||||
GITHUB_REPOSITORY catchorg/Catch2
|
GITHUB_REPOSITORY catchorg/Catch2
|
||||||
VERSION 2.5.0
|
VERSION 2.5.0
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -134,6 +134,19 @@ endif()
|
|||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
include(CMakeParseArguments)
|
include(CMakeParseArguments)
|
||||||
|
|
||||||
|
# Infer package name from git repository uri (path or url)
|
||||||
|
function(cpm_package_name_from_git_uri URI RESULT)
|
||||||
|
string(REGEX MATCH "([^/:]+)/?.git/?$" cpmGitUriMatch "${URI}")
|
||||||
|
if(DEFINED cpmGitUriMatch)
|
||||||
|
set(${RESULT}
|
||||||
|
${CMAKE_MATCH_1}
|
||||||
|
PARENT_SCOPE
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
unset(${RESULT} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
# Initialize logging prefix
|
# Initialize logging prefix
|
||||||
if(NOT CPM_INDENT)
|
if(NOT CPM_INDENT)
|
||||||
set(CPM_INDENT
|
set(CPM_INDENT
|
||||||
@@ -243,8 +256,6 @@ endfunction()
|
|||||||
# Download and add a package from source
|
# Download and add a package from source
|
||||||
function(CPMAddPackage)
|
function(CPMAddPackage)
|
||||||
|
|
||||||
set(flagArgs EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
set(oneValueArgs
|
set(oneValueArgs
|
||||||
NAME
|
NAME
|
||||||
FORCE
|
FORCE
|
||||||
@@ -259,11 +270,12 @@ function(CPMAddPackage)
|
|||||||
FIND_PACKAGE_ARGUMENTS
|
FIND_PACKAGE_ARGUMENTS
|
||||||
NO_CACHE
|
NO_CACHE
|
||||||
GIT_SHALLOW
|
GIT_SHALLOW
|
||||||
|
EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
|
|
||||||
set(multiValueArgs OPTIONS)
|
set(multiValueArgs OPTIONS)
|
||||||
|
|
||||||
cmake_parse_arguments(CPM_ARGS "${flagArgs}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
||||||
|
|
||||||
# Set default values for arguments
|
# Set default values for arguments
|
||||||
|
|
||||||
@@ -292,6 +304,11 @@ function(CPMAddPackage)
|
|||||||
if(NOT DEFINED CPM_ARGS_GIT_TAG)
|
if(NOT DEFINED CPM_ARGS_GIT_TAG)
|
||||||
set(CPM_ARGS_GIT_TAG v${CPM_ARGS_VERSION})
|
set(CPM_ARGS_GIT_TAG v${CPM_ARGS_VERSION})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# If a name wasn't provided, try to infer it from the git repo
|
||||||
|
if(NOT DEFINED CPM_ARGS_NAME)
|
||||||
|
cpm_package_name_from_git_uri(${CPM_ARGS_GIT_REPOSITORY} CPM_ARGS_NAME)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CPM_SKIP_FETCH FALSE)
|
set(CPM_SKIP_FETCH FALSE)
|
||||||
@@ -304,6 +321,15 @@ function(CPMAddPackage)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Check for required arguments
|
||||||
|
|
||||||
|
if(NOT DEFINED CPM_ARGS_NAME)
|
||||||
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
"CPM: 'NAME' was not provided and couldn't be automatically inferred for package added with arguments: '${ARGN}'"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Check if package has been added before
|
# Check if package has been added before
|
||||||
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" "${CPM_ARGS_OPTIONS}")
|
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" "${CPM_ARGS_OPTIONS}")
|
||||||
if(CPM_PACKAGE_ALREADY_ADDED)
|
if(CPM_PACKAGE_ALREADY_ADDED)
|
||||||
@@ -579,7 +605,7 @@ function(cpm_fetch_package PACKAGE DOWNLOAD_ONLY EXCLUDE)
|
|||||||
set(CPM_OLD_INDENT "${CPM_INDENT}")
|
set(CPM_OLD_INDENT "${CPM_INDENT}")
|
||||||
set(CPM_INDENT "${CPM_INDENT} ${PACKAGE}:")
|
set(CPM_INDENT "${CPM_INDENT} ${PACKAGE}:")
|
||||||
cpm_add_subdirectory(
|
cpm_add_subdirectory(
|
||||||
${${lower_case_name}_SOURCE_DIR} ${${lower_case_name}_BINARY_DIR} ${EXCLUDE}
|
${${lower_case_name}_SOURCE_DIR} ${${lower_case_name}_BINARY_DIR} "${EXCLUDE}"
|
||||||
)
|
)
|
||||||
set(CPM_INDENT "${CPM_OLD_INDENT}")
|
set(CPM_INDENT "${CPM_OLD_INDENT}")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -10,6 +10,18 @@ function(ASSERT_EQUAL)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(ASSERT_NOT_EQUAL)
|
||||||
|
if(NOT ARGC EQUAL 2)
|
||||||
|
message(FATAL_ERROR "assertion failed: invalid argument count: ${ARGC}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${ARGV0} STREQUAL ${ARGV1})
|
||||||
|
message(FATAL_ERROR "assertion failed: '${ARGV0}' == '${ARGV1}'")
|
||||||
|
else()
|
||||||
|
message(STATUS "test passed: '${ARGV0}' != '${ARGV1}'")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
function(ASSERT_EMPTY)
|
function(ASSERT_EMPTY)
|
||||||
if(NOT ARGC EQUAL 0)
|
if(NOT ARGC EQUAL 0)
|
||||||
message(FATAL_ERROR "assertion failed: input ${ARGC} not empty: '${ARGV}'")
|
message(FATAL_ERROR "assertion failed: input ${ARGC} not empty: '${ARGV}'")
|
||||||
@@ -24,6 +36,14 @@ function(ASSERT_DEFINED KEY)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(ASSERT_NOT_DEFINED KEY)
|
||||||
|
if(DEFINED ${KEY})
|
||||||
|
message(FATAL_ERROR "assertion failed: '${KEY}' is defiend")
|
||||||
|
else()
|
||||||
|
message(STATUS "test passed: '${KEY}' is not defined")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
function(ASSERT_TRUTHY KEY)
|
function(ASSERT_TRUTHY KEY)
|
||||||
if(${${KEY}})
|
if(${${KEY}})
|
||||||
message(STATUS "test passed: '${KEY}' is set truthy")
|
message(STATUS "test passed: '${KEY}' is set truthy")
|
||||||
|
|||||||
2
test/unit/broken_dependency/.gitignore
vendored
Normal file
2
test/unit/broken_dependency/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/CMakeLists.txt
|
||||||
|
/package-lock.cmake
|
||||||
13
test/unit/broken_dependency/CMakeLists.txt.in
Normal file
13
test/unit/broken_dependency/CMakeLists.txt.in
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||||
|
|
||||||
|
project(CPMTest)
|
||||||
|
|
||||||
|
# ---- Dependencies ----
|
||||||
|
|
||||||
|
include(@CPM_PATH@/CPM.cmake)
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME BrokenDependency
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependency
|
||||||
|
EXCLUDE_FROM_ALL @EXCLUDE_FROM_ALL@
|
||||||
|
)
|
||||||
3
test/unit/broken_dependency/dependency/CMakeLists.txt
Normal file
3
test/unit/broken_dependency/dependency/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
project(BrokenDependency)
|
||||||
|
|
||||||
|
add_custom_target(error ALL ${CMAKE_COMMAND} -E false)
|
||||||
35
test/unit/exclude_from_all.cmake
Normal file
35
test/unit/exclude_from_all.cmake
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
include(${CPM_PATH}/testing.cmake)
|
||||||
|
|
||||||
|
set(TEST_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/exclude_from_all)
|
||||||
|
|
||||||
|
function(init_project EXCLUDE_FROM_ALL)
|
||||||
|
configure_package_config_file(
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/broken_dependency/CMakeLists.txt.in"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/broken_dependency/CMakeLists.txt"
|
||||||
|
INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/junk
|
||||||
|
)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} "-H${CMAKE_CURRENT_LIST_DIR}/broken_dependency" "-B${TEST_BUILD_DIR}"
|
||||||
|
RESULT_VARIABLE ret
|
||||||
|
)
|
||||||
|
|
||||||
|
assert_equal(${ret} "0")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(build_project expected_success)
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} "--build" "${TEST_BUILD_DIR}" RESULT_VARIABLE ret)
|
||||||
|
|
||||||
|
if(expected_success)
|
||||||
|
assert_equal(${ret} 0)
|
||||||
|
else()
|
||||||
|
assert_not_equal(${ret} 0)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
init_project(FALSE)
|
||||||
|
build_project(FALSE)
|
||||||
|
|
||||||
|
init_project(TRUE)
|
||||||
|
build_project(TRUE)
|
||||||
28
test/unit/package_name_from_git_uri.cmake
Normal file
28
test/unit/package_name_from_git_uri.cmake
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||||
|
|
||||||
|
include(${CPM_PATH}/CPM.cmake)
|
||||||
|
include(${CPM_PATH}/testing.cmake)
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("https://github.com/cpm-cmake/CPM.cmake.git" name)
|
||||||
|
assert_equal("CPM.cmake" ${name})
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("ssh://user@host.xz:123/path/to/pkg.git/" name)
|
||||||
|
assert_equal("pkg" ${name})
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("git://host.xz/path/to/pkg.git" name)
|
||||||
|
assert_equal("pkg" ${name})
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("git@host.xz:cool-pkg.git" name)
|
||||||
|
assert_equal("cool-pkg" ${name})
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("file:///path/to/pkg33.git" name)
|
||||||
|
assert_equal("pkg33" ${name})
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("../local-repo/.git" name)
|
||||||
|
assert_equal("local-repo" ${name})
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("asdf" name)
|
||||||
|
assert_not_defined(name)
|
||||||
|
|
||||||
|
cpm_package_name_from_git_uri("/something.git/stuff" name)
|
||||||
|
assert_not_defined(name)
|
||||||
Reference in New Issue
Block a user