add unit tests and determine version from GIT_TAG (#66)

* add unit tests

* determine package version from git tag. closes #54.

* update readme

* bugfix

* update example

* update gitignore
This commit is contained in:
Lars Melchior
2019-06-22 13:31:32 +02:00
committed by GitHub
parent 1e25367c8c
commit 3d75ed06a3
10 changed files with 113 additions and 11 deletions

1
.gitignore vendored
View File

@@ -8,3 +8,4 @@ install_manifest.txt
compile_commands.json
CTestTestfile.cmake
build
.vscode

View File

@@ -44,5 +44,9 @@ before_install:
- cmake --version
script:
# unit tests
- cmake -Htest -Bbuild/test
- CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/test --target test
# examples
- python3 examples/run_all.py

View File

@@ -126,7 +126,6 @@ CPMAddPackage(
CPMAddPackage(
NAME doctest
GITHUB_REPOSITORY onqtam/doctest
VERSION 2.3.2
GIT_TAG 2.3.2
)
```
@@ -205,7 +204,8 @@ CPMAddPackage(
CPMAddPackage(
NAME lua
GIT_REPOSITORY https://github.com/lua/lua.git
VERSION 5-3-4
GIT_TAG v5-3-4
VERSION 5.3.4
DOWNLOAD_ONLY YES
)

View File

@@ -28,7 +28,7 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
set(CURRENT_CPM_VERSION 0.11.1)
set(CURRENT_CPM_VERSION 0.12)
if(CPM_DIRECTORY)
if(NOT ${CPM_DIRECTORY} MATCHES ${CMAKE_CURRENT_LIST_DIR})
@@ -42,10 +42,12 @@ endif()
set(CPM_VERSION ${CURRENT_CPM_VERSION} CACHE INTERNAL "")
set(CPM_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} CACHE INTERNAL "")
set(CPM_PACKAGES "" CACHE INTERNAL "")
set(CPM_DRY_RUN OFF CACHE INTERNAL "Don't download or configure dependencies (for testing)")
option(CPM_USE_LOCAL_PACKAGES "Use locally installed packages (find_package)" OFF)
option(CPM_LOCAL_PACKAGES_ONLY "Use only locally installed packages" OFF)
include(FetchContent)
include(CMakeParseArguments)
@@ -64,6 +66,7 @@ function(CPMAddPackage)
DOWNLOAD_ONLY
GITHUB_REPOSITORY
GITLAB_REPOSITORY
DRY # for testing
)
set(multiValueArgs
@@ -89,11 +92,16 @@ function(CPMAddPackage)
endif()
endif()
if (NOT CPM_ARGS_VERSION)
if (NOT DEFINED CPM_ARGS_VERSION)
if (DEFINED CPM_ARGS_GIT_TAG)
CPM_GET_VERSION_FROM_GIT_TAG("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION)
endif()
if (NOT DEFINED CPM_ARGS_VERSION)
set(CPM_ARGS_VERSION 0)
endif()
endif()
if (NOT CPM_ARGS_GIT_TAG)
if (NOT DEFINED CPM_ARGS_GIT_TAG)
set(CPM_ARGS_GIT_TAG v${CPM_ARGS_VERSION})
endif()
@@ -114,7 +122,7 @@ function(CPMAddPackage)
endif()
if (${CPM_ARGS_NAME} IN_LIST CPM_PACKAGES)
CPM_GET_PACKAGE_VERSION(${CPM_ARGS_NAME})
CPM_GET_PACKAGE_VERSION(${CPM_ARGS_NAME} CPM_PACKAGE_VERSION)
if(${CPM_PACKAGE_VERSION} VERSION_LESS ${CPM_ARGS_VERSION})
message(WARNING "${CPM_INDENT} requires a newer version of ${CPM_ARGS_NAME} (${CPM_ARGS_VERSION}) than currently included (${CPM_PACKAGE_VERSION}).")
endif()
@@ -154,6 +162,11 @@ endfunction()
function (CPM_DECLARE_PACKAGE PACKAGE VERSION GIT_TAG)
message(STATUS "${CPM_INDENT} adding package ${PACKAGE}@${VERSION} (${GIT_TAG})")
if (${CPM_DRY_RUN})
message(STATUS "${CPM_INDENT} package not declared (dry run)")
return()
endif()
FetchContent_Declare(
${PACKAGE}
${ARGN}
@@ -161,6 +174,12 @@ function (CPM_DECLARE_PACKAGE PACKAGE VERSION GIT_TAG)
endfunction()
function (CPM_FETCH_PACKAGE PACKAGE DOWNLOAD_ONLY)
if (${CPM_DRY_RUN})
message(STATUS "${CPM_INDENT} package ${PACKAGE} not fetched (dry run)")
return()
endif()
set(CPM_OLD_INDENT "${CPM_INDENT}")
set(CPM_INDENT "${CPM_INDENT} ${PACKAGE}:")
if(${DOWNLOAD_ONLY})
@@ -174,6 +193,9 @@ function (CPM_FETCH_PACKAGE PACKAGE DOWNLOAD_ONLY)
endfunction()
function (CPMGetProperties PACKAGE)
if (${CPM_DRY_RUN})
return()
endif()
FetchContent_GetProperties(${PACKAGE})
string(TOLOWER ${PACKAGE} lpackage)
SET(${PACKAGE}_SOURCE_DIR "${${lpackage}_SOURCE_DIR}" PARENT_SCOPE)
@@ -186,8 +208,8 @@ function(CPMRegisterPackage PACKAGE VERSION)
set("CPM_PACKAGE_${PACKAGE}_VERSION" ${VERSION} CACHE INTERNAL "")
endfunction()
function(CPM_GET_PACKAGE_VERSION PACKAGE)
set(CPM_PACKAGE_VERSION "${CPM_PACKAGE_${PACKAGE}_VERSION}" PARENT_SCOPE)
function(CPM_GET_PACKAGE_VERSION PACKAGE OUTPUT)
set(${OUTPUT} "${CPM_PACKAGE_${PACKAGE}_VERSION}" PARENT_SCOPE)
endfunction()
function(CPM_PARSE_OPTION OPTION)
@@ -199,6 +221,11 @@ function(CPM_PARSE_OPTION OPTION)
set(OPTION_VALUE "${OPTION_VALUE}" PARENT_SCOPE)
endfunction()
function(CPM_GET_VERSION_FROM_GIT_TAG GIT_TAG RESULT)
string(REGEX MATCH "v?([0123456789.]*).*" _ ${GIT_TAG})
SET(${RESULT} ${CMAKE_MATCH_1} PARENT_SCOPE)
endfunction()
function (CPM_HANDLE_OLD_VERSION NEW_CPM_VERSION)
message(AUTHOR_WARNING "${CPM_INDENT} \

10
cmake/testing.cmake Normal file
View File

@@ -0,0 +1,10 @@
function(ASSERT_EQUAL)
if (NOT ARGC EQUAL 2)
message(FATAL_ERROR "assertion failed: invalid argument count: ${ARGC}")
endif()
if (NOT ${ARGV0} EQUAL ${ARGV1})
message(FATAL_ERROR "assertion failed: '${ARGV0}' != '${ARGV1}'")
endif()
endfunction()

View File

@@ -17,7 +17,6 @@ CPMAddPackage(
CPMAddPackage(
NAME doctest
GITHUB_REPOSITORY onqtam/doctest
VERSION 2.3.2
GIT_TAG 2.3.2
)

View File

@@ -7,7 +7,8 @@ include(../../cmake/CPM.cmake)
CPMAddPackage(
NAME lua
GIT_REPOSITORY https://github.com/lua/lua.git
VERSION 5-3-4
VERSION 5.3.4
GIT_TAG v5-3-4
DOWNLOAD_ONLY YES
)

14
test/CMakeLists.txt Normal file
View File

@@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
file(GLOB tests "${CMAKE_CURRENT_SOURCE_DIR}/unit/*.cmake")
enable_testing()
foreach(test ${tests})
message(STATUS "adding test: ${test}")
add_test(
NAME ${test}
COMMAND ${CMAKE_COMMAND} -DCPM_PATH=${CMAKE_CURRENT_SOURCE_DIR}/../cmake -P "${test}"
)
endforeach()

View File

@@ -0,0 +1,30 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
include(${CPM_PATH}/CPM.cmake)
include(${CPM_PATH}/testing.cmake)
set(CPM_DRY_RUN ON)
CPMAddPackage(
NAME A
GIT_TAG 1.2.3
)
CPM_GET_PACKAGE_VERSION(A VERSION)
ASSERT_EQUAL(${VERSION} "1.2.3")
CPMAddPackage(
NAME B
GIT_TAG v2.3.1
)
CPM_GET_PACKAGE_VERSION(B VERSION)
ASSERT_EQUAL(${VERSION} "2.3.1")
CPMAddPackage(
NAME C
GIT_TAG v3.1.2-a
)
CPM_GET_PACKAGE_VERSION(C VERSION)
ASSERT_EQUAL(${VERSION} "3.1.2")

View File

@@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
include(${CPM_PATH}/CPM.cmake)
include(${CPM_PATH}/testing.cmake)
CPM_GET_VERSION_FROM_GIT_TAG("1.2.3" VERSION)
ASSERT_EQUAL("1.2.3" ${VERSION})
CPM_GET_VERSION_FROM_GIT_TAG("v1.2.3" VERSION)
ASSERT_EQUAL("1.2.3" ${VERSION})
CPM_GET_VERSION_FROM_GIT_TAG("1.2.3-a" VERSION)
ASSERT_EQUAL("1.2.3" ${VERSION})
CPM_GET_VERSION_FROM_GIT_TAG("v1.2.3-a" VERSION)
ASSERT_EQUAL("1.2.3" ${VERSION})