mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-19 16:57:56 -05:00
add support for SOURCE_DIR argument (#97)
* add support for SOURCE_DIR argument * simplify code * add test * update comment
This commit is contained in:
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||||
|
|
||||||
set(CURRENT_CPM_VERSION 0.16)
|
set(CURRENT_CPM_VERSION 0.17)
|
||||||
|
|
||||||
if(CPM_DIRECTORY)
|
if(CPM_DIRECTORY)
|
||||||
if(NOT ${CPM_DIRECTORY} MATCHES ${CMAKE_CURRENT_LIST_DIR})
|
if(NOT ${CPM_DIRECTORY} MATCHES ${CMAKE_CURRENT_LIST_DIR})
|
||||||
@@ -208,22 +208,22 @@ function(CPMAddPackage)
|
|||||||
|
|
||||||
if (DEFINED CPM_ARGS_DOWNLOAD_COMMAND)
|
if (DEFINED CPM_ARGS_DOWNLOAD_COMMAND)
|
||||||
set(FETCH_CONTENT_DECLARE_EXTRA_OPTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND})
|
set(FETCH_CONTENT_DECLARE_EXTRA_OPTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND})
|
||||||
else()
|
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
|
||||||
if (CPM_SOURCE_CACHE AND NOT DEFINED CPM_ARGS_SOURCE_DIR)
|
set(FETCH_CONTENT_DECLARE_EXTRA_OPTS SOURCE_DIR ${CPM_ARGS_SOURCE_DIR})
|
||||||
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
|
elseif (CPM_SOURCE_CACHE)
|
||||||
set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS})
|
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
|
||||||
list(SORT origin_parameters)
|
set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS})
|
||||||
string(SHA1 origin_hash "${origin_parameters}")
|
list(SORT origin_parameters)
|
||||||
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash})
|
string(SHA1 origin_hash "${origin_parameters}")
|
||||||
list(APPEND FETCH_CONTENT_DECLARE_EXTRA_OPTS SOURCE_DIR ${download_directory})
|
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash})
|
||||||
if (EXISTS ${download_directory})
|
list(APPEND FETCH_CONTENT_DECLARE_EXTRA_OPTS SOURCE_DIR ${download_directory})
|
||||||
list(APPEND FETCH_CONTENT_DECLARE_EXTRA_OPTS DOWNLOAD_COMMAND ":")
|
if (EXISTS ${download_directory})
|
||||||
set(PACKAGE_INFO "${download_directory}")
|
list(APPEND FETCH_CONTENT_DECLARE_EXTRA_OPTS DOWNLOAD_COMMAND ":")
|
||||||
else()
|
set(PACKAGE_INFO "${download_directory}")
|
||||||
# remove timestamps so CMake will re-download the dependency
|
else()
|
||||||
file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${lower_case_name}-subbuild)
|
# remove timestamps so CMake will re-download the dependency
|
||||||
set(PACKAGE_INFO "${PACKAGE_INFO} -> ${download_directory}")
|
file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${lower_case_name}-subbuild)
|
||||||
endif()
|
set(PACKAGE_INFO "${PACKAGE_INFO} -> ${download_directory}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
19
test/unit/source_dir.cmake
Normal file
19
test/unit/source_dir.cmake
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
include(${CPM_PATH}/testing.cmake)
|
||||||
|
|
||||||
|
set(TEST_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/source_dir)
|
||||||
|
|
||||||
|
configure_package_config_file(
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/source_dir/CMakeLists.txt.in"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/source_dir/CMakeLists.txt"
|
||||||
|
INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/junk
|
||||||
|
)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_COMMAND} "-H${CMAKE_CURRENT_LIST_DIR}/source_dir" "-B${TEST_BUILD_DIR}"
|
||||||
|
RESULT_VARIABLE ret
|
||||||
|
)
|
||||||
|
|
||||||
|
ASSERT_EQUAL(${ret} "0")
|
||||||
1
test/unit/source_dir/.gitignore
vendored
Normal file
1
test/unit/source_dir/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/CMakeLists.txt
|
||||||
20
test/unit/source_dir/CMakeLists.txt.in
Normal file
20
test/unit/source_dir/CMakeLists.txt.in
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||||
|
|
||||||
|
project(CPMExampleCatch2)
|
||||||
|
|
||||||
|
# ---- Options ----
|
||||||
|
|
||||||
|
option(ENABLE_TEST_COVERAGE "Enable test coverage" OFF)
|
||||||
|
|
||||||
|
# ---- Dependencies ----
|
||||||
|
|
||||||
|
include(@CPM_PATH@/CPM.cmake)
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME Dependency
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependency
|
||||||
|
)
|
||||||
|
|
||||||
|
# ---- Call dependency method to validate correct addition of directory ----
|
||||||
|
|
||||||
|
dependency_function()
|
||||||
4
test/unit/source_dir/dependency/CMakeLists.txt
Normal file
4
test/unit/source_dir/dependency/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
function(dependency_function)
|
||||||
|
message("called external method")
|
||||||
|
endfunction()
|
||||||
Reference in New Issue
Block a user