mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-22 20:27:45 -05:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
559b8a2d39 | ||
|
|
91ca848fec | ||
|
|
95c5426d25 | ||
|
|
cea81872cf | ||
|
|
01b69aad82 | ||
|
|
775a235880 |
21
.github/workflows/publish.yaml
vendored
Normal file
21
.github/workflows/publish.yaml
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
name: Publish
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Publish CPM.cmake
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: Upload CPM.cmake to release
|
||||||
|
uses: svenstaro/upload-release-action@v1-release
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
file: cmake/CPM.cmake
|
||||||
|
asset_name: CPM.cmake
|
||||||
|
tag: ${{ github.ref }}
|
||||||
|
overwrite: true
|
||||||
@@ -36,6 +36,7 @@ CPMAddPackage(
|
|||||||
|
|
||||||
The origin may be specified by a `GIT_REPOSITORY`, but other sources, such as direct URLs, are [also supported](https://cmake.org/cmake/help/v3.11/module/ExternalProject.html#external-project-definition).
|
The origin may be specified by a `GIT_REPOSITORY`, but other sources, such as direct URLs, are [also supported](https://cmake.org/cmake/help/v3.11/module/ExternalProject.html#external-project-definition).
|
||||||
If `GIT_TAG` hasn't been explicitly specified it defaults to `v(VERSION)`, a common convention for git projects.
|
If `GIT_TAG` hasn't been explicitly specified it defaults to `v(VERSION)`, a common convention for git projects.
|
||||||
|
On the other hand, if `VERSION` hasn't been explicitly specified, CPM can automatically identify the version from the git tag in some common cases.
|
||||||
`GIT_TAG` can also be set to a specific commit or a branch name such as `master` to always download the most recent version.
|
`GIT_TAG` can also be set to a specific commit or a branch name such as `master` to always download the most recent version.
|
||||||
The optional argument `FIND_PACKAGE_ARGUMENTS` can be specified to a string of parameters that will be passed to `find_package` if enabled (see below).
|
The optional argument `FIND_PACKAGE_ARGUMENTS` can be specified to a string of parameters that will be passed to `find_package` if enabled (see below).
|
||||||
|
|
||||||
|
|||||||
@@ -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.15.1)
|
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})
|
||||||
@@ -124,7 +124,7 @@ function(CPMAddPackage)
|
|||||||
OPTIONS
|
OPTIONS
|
||||||
)
|
)
|
||||||
|
|
||||||
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
||||||
|
|
||||||
if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY)
|
if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY)
|
||||||
cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS})
|
cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS})
|
||||||
@@ -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()
|
||||||
|
|
||||||
@@ -303,9 +303,15 @@ endfunction()
|
|||||||
# splits a package option
|
# splits a package option
|
||||||
function(cpm_parse_option OPTION)
|
function(cpm_parse_option OPTION)
|
||||||
string(REGEX MATCH "^[^ ]+" OPTION_KEY ${OPTION})
|
string(REGEX MATCH "^[^ ]+" OPTION_KEY ${OPTION})
|
||||||
|
string(LENGTH ${OPTION} OPTION_LENGTH)
|
||||||
string(LENGTH ${OPTION_KEY} OPTION_KEY_LENGTH)
|
string(LENGTH ${OPTION_KEY} OPTION_KEY_LENGTH)
|
||||||
math(EXPR OPTION_KEY_LENGTH "${OPTION_KEY_LENGTH}+1")
|
if (OPTION_KEY_LENGTH STREQUAL OPTION_LENGTH)
|
||||||
string(SUBSTRING ${OPTION} "${OPTION_KEY_LENGTH}" "-1" OPTION_VALUE)
|
# no value for key provided, assume user wants to set option to "ON"
|
||||||
|
set(OPTION_VALUE "ON")
|
||||||
|
else()
|
||||||
|
math(EXPR OPTION_KEY_LENGTH "${OPTION_KEY_LENGTH}+1")
|
||||||
|
string(SUBSTRING ${OPTION} "${OPTION_KEY_LENGTH}" "-1" OPTION_VALUE)
|
||||||
|
endif()
|
||||||
set(OPTION_KEY "${OPTION_KEY}" PARENT_SCOPE)
|
set(OPTION_KEY "${OPTION_KEY}" PARENT_SCOPE)
|
||||||
set(OPTION_VALUE "${OPTION_VALUE}" PARENT_SCOPE)
|
set(OPTION_VALUE "${OPTION_VALUE}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|||||||
0
examples/build_all.py
Normal file → Executable file
0
examples/build_all.py
Normal file → Executable file
19
examples/fmt/CMakeLists.txt
Normal file
19
examples/fmt/CMakeLists.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||||
|
|
||||||
|
project(CPMJSONExample)
|
||||||
|
|
||||||
|
# ---- Dependencies ----
|
||||||
|
|
||||||
|
include(../../cmake/CPM.cmake)
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME fmt
|
||||||
|
GIT_TAG 6.1.2
|
||||||
|
GITHUB_REPOSITORY fmtlib/fmt
|
||||||
|
)
|
||||||
|
|
||||||
|
# ---- Executable ----
|
||||||
|
|
||||||
|
add_executable(CPMFmtExample "main.cpp")
|
||||||
|
set_target_properties(CPMFmtExample PROPERTIES CXX_STANDARD 17)
|
||||||
|
target_link_libraries(CPMFmtExample fmt)
|
||||||
6
examples/fmt/main.cpp
Normal file
6
examples/fmt/main.cpp
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
fmt::print("Hello, {}!\n", "world");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@ CPMAddPackage(
|
|||||||
VERSION 1.8.1
|
VERSION 1.8.1
|
||||||
OPTIONS
|
OPTIONS
|
||||||
"INSTALL_GTEST OFF"
|
"INSTALL_GTEST OFF"
|
||||||
"gtest_force_shared_crt ON"
|
"gtest_force_shared_crt"
|
||||||
)
|
)
|
||||||
|
|
||||||
# ---- Create binary ----
|
# ---- Create binary ----
|
||||||
|
|||||||
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