Add CPM_SOURCE_CACHE environmental variable support and keep existing sources (#83)

* read CPM_SOURCE_CACHE from environment

* update readme

* cleanup

* add cache tests
This commit is contained in:
Lars Melchior
2019-10-10 20:13:10 +02:00
committed by GitHub
parent b1855e9275
commit 4064a45552
28 changed files with 300 additions and 58 deletions

View File

@@ -1,5 +1,7 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
project(CPMTests)
file(GLOB tests "${CMAKE_CURRENT_SOURCE_DIR}/unit/*.cmake")
enable_testing()
@@ -11,3 +13,5 @@ foreach(test ${tests})
COMMAND ${CMAKE_COMMAND} -DCPM_PATH=${CMAKE_CURRENT_SOURCE_DIR}/../cmake -P "${test}"
)
endforeach()
add_custom_target(test-verbose COMMAND ${CMAKE_CTEST_COMMAND} --verbose)

125
test/unit/cache.cmake Normal file
View File

@@ -0,0 +1,125 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
include(${CPM_PATH}/testing.cmake)
include(CMakePackageConfigHelpers)
set(CPM_SOURCE_CACHE_DIR "${CMAKE_CURRENT_BINARY_DIR}/CPM")
set(TEST_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/cache)
function(clear_cache)
FILE(REMOVE_RECURSE ${CPM_SOURCE_CACHE_DIR})
if (EXISTS "${CPM_SOURCE_CACHE_DIR}")
ASSERTION_FAILED("cache not cleared")
endif()
endfunction()
function(update_cmake_lists)
configure_package_config_file(
"${CMAKE_CURRENT_LIST_DIR}/cache/CMakeLists.txt.in"
"${CMAKE_CURRENT_LIST_DIR}/cache/CMakeLists.txt"
INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/junk
)
endfunction()
function(reset_test)
clear_cache()
FILE(REMOVE_RECURSE ${TEST_BUILD_DIR})
update_cmake_lists()
endfunction()
set(CATCH2_VERSION 2.8.0)
## Read CPM_SOURCE_CACHE from arguments
reset_test()
execute_process(
COMMAND
${CMAKE_COMMAND} "-H${CMAKE_CURRENT_LIST_DIR}/cache" "-B${TEST_BUILD_DIR}" "-DCPM_SOURCE_CACHE=${CPM_SOURCE_CACHE_DIR}"
RESULT_VARIABLE ret
)
ASSERT_EQUAL(${ret} "0")
if (NOT EXISTS "${CPM_SOURCE_CACHE_DIR}/catch2")
ASSERTION_FAILED("catch2 not in cache")
endif()
FILE(GLOB catch2_versions "${CPM_SOURCE_CACHE_DIR}/catch2/*")
list(LENGTH catch2_versions catch2_version_count)
ASSERT_EQUAL(${catch2_version_count} "1")
FILE(GLOB fibonacci_versions "${CPM_SOURCE_CACHE_DIR}/fibonacci/*")
list(LENGTH fibonacci_versions fibonacci_version_count)
ASSERT_EQUAL(${fibonacci_version_count} "1")
## Update dependency and keep CPM_SOURCE_CACHE
set(CATCH2_VERSION 2.9.0)
update_cmake_lists()
execute_process(
COMMAND
${CMAKE_COMMAND} ${TEST_BUILD_DIR}
RESULT_VARIABLE ret
)
ASSERT_EQUAL(${ret} "0")
FILE(GLOB catch2_versions "${CPM_SOURCE_CACHE_DIR}/catch2/*")
list(LENGTH catch2_versions catch2_version_count)
ASSERT_EQUAL(${catch2_version_count} "2")
FILE(GLOB fibonacci_versions "${CPM_SOURCE_CACHE_DIR}/fibonacci/*")
list(LENGTH fibonacci_versions fibonacci_version_count)
ASSERT_EQUAL(${fibonacci_version_count} "1")
## Clear cache and update
clear_cache()
execute_process(
COMMAND
${CMAKE_COMMAND} ${TEST_BUILD_DIR}
RESULT_VARIABLE ret
)
ASSERT_EQUAL(${ret} "0")
if (NOT EXISTS "${CPM_SOURCE_CACHE_DIR}/catch2")
ASSERTION_FAILED("catch2 not in cache")
endif()
## Read CPM_SOURCE_CACHE from environment
reset_test()
execute_process(
COMMAND
${CMAKE_COMMAND} -E env "CPM_SOURCE_CACHE=${CPM_SOURCE_CACHE_DIR}" ${CMAKE_COMMAND} "-H${CMAKE_CURRENT_LIST_DIR}/cache" "-B${TEST_BUILD_DIR}"
RESULT_VARIABLE ret
)
ASSERT_EQUAL(${ret} "0")
if (NOT EXISTS "${CPM_SOURCE_CACHE_DIR}/catch2")
ASSERTION_FAILED("catch2 not in cache")
endif()
## Overwrite CPM_SOURCE_CACHE with argument
reset_test()
execute_process(
COMMAND
${CMAKE_COMMAND} -E env "CPM_SOURCE_CACHE=${CMAKE_CURRENT_BINARY_DIR}/junk" ${CMAKE_COMMAND} "-H${CMAKE_CURRENT_LIST_DIR}/cache" "-B${TEST_BUILD_DIR}" "-DCPM_SOURCE_CACHE=${CPM_SOURCE_CACHE_DIR}"
RESULT_VARIABLE ret
)
ASSERT_EQUAL(${ret} "0")
if (NOT EXISTS "${CPM_SOURCE_CACHE_DIR}/catch2")
ASSERTION_FAILED("catch2 not in cache")
endif()

1
test/unit/cache/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/CMakeLists.txt

30
test/unit/cache/CMakeLists.txt.in vendored Normal file
View File

@@ -0,0 +1,30 @@
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 fibonacci
GIT_REPOSITORY https://github.com/TheLartians/Fibonacci.git
VERSION 1.0
)
CPMAddPackage(
NAME Catch2
GITHUB_REPOSITORY catchorg/Catch2
VERSION @CATCH2_VERSION@
GIT_SHALLOW YES
)
# ---- Create binary ----
add_executable(CPMExampleCatch2 main.cpp)
target_link_libraries(CPMExampleCatch2 fibonacci Catch2)
set_target_properties(CPMExampleCatch2 PROPERTIES CXX_STANDARD 17 COMPILE_FLAGS "-Wall -pedantic -Wextra -Werror")

13
test/unit/cache/main.cpp vendored Normal file
View File

@@ -0,0 +1,13 @@
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
#include <fibonacci.h>
TEST_CASE("fibonnacci"){
REQUIRE(fibonnacci(0) == 0);
REQUIRE(fibonnacci(1) == 1);
REQUIRE(fibonnacci(2) == 1);
REQUIRE(fibonnacci(3) == 2);
REQUIRE(fibonnacci(4) == 3);
REQUIRE(fibonnacci(5) == 5);
}

View File

@@ -10,20 +10,31 @@ CPMAddPackage(
GIT_TAG 1.2.3
)
CPMAddPackage(
NAME A
VERSION 1.2.3
)
CPM_GET_PACKAGE_VERSION(A VERSION)
ASSERT_EQUAL(${VERSION} "1.2.3")
CPMAddPackage(
NAME B
VERSION 2.4.1
)
CPMAddPackage(
NAME B
GIT_TAG v2.3.1
)
CPM_GET_PACKAGE_VERSION(B VERSION)
ASSERT_EQUAL(${VERSION} "2.3.1")
ASSERT_EQUAL(${VERSION} "2.4.1")
CPMAddPackage(
NAME C
GIT_TAG v3.1.2-a
VERSION 3.1.2
)
CPM_GET_PACKAGE_VERSION(C VERSION)