Compare commits

...

5 Commits

Author SHA1 Message Date
Robert Maynard
4605d32f0e CPM_DIRECTORY always stores absolute non symlink paths (#379)
* CPM_DIRECTORY always stores absolute non symlink paths

When CPM is brought into a project via downloading it will be placed
in the build directory. When the build directory is a symlink the
CPM_DIRECTORY value will hold the symlink value. This means that
trying to run CMake via the real build directory will cause CPM
to fail since it considers the current CMAKE_CURRENT_LIST_DIR
to be different and will early exit.

This resolves the issue be always getting CMake to resolve symlinks
before comparing paths for CPM_DIRECTORY.

* Refactor logic based on PR review
2022-07-31 21:51:27 +02:00
Thomas Mosegaard Pedersen
ede60451a9 CPMAddPackage fails if the SOURCE_DIR directory is deleted. (#370)
* Fixed: Deleted SOURCE_DIR directory would abort just after git stash save --quiet;--include-untracked

* Fixed: Review comments

* Added: Integration test for deleted SOURCE_DIR with FetchContent

* Fixed: Review comments

* Fixed: Review comments
2022-07-26 07:15:11 +00:00
David Fong
5961f9f9fb bump example range-v3 to 0.12.0 (#366)
* bump range-v3 to 0.12.0

* bump range-v3 to 0.12.0
2022-07-02 12:56:11 +00:00
Anton Filimonov
69e9ff3766 Klogg switched to CPM for dependency management (#363)
Klogg used to vendor all external dependencies, and now we switched to CPM, and this makes using local dependencies and packaging much easier. Thanks for all you effort!
2022-06-27 23:39:13 +02:00
Olivier Le Doeuff
3fee69c894 Add readme "Customize repository URL" with git-config (#353) 2022-05-17 08:17:14 +02:00
4 changed files with 79 additions and 4 deletions

View File

@@ -227,6 +227,22 @@ cmake --build build --target cpm-update-package-lock
See the [wiki](https://github.com/cpm-cmake/CPM.cmake/wiki/Package-lock) for more info.
## Private repositories and CI
When using CPM.cmake with private repositories, there may be a need to provide an [access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) to be able to clone other projects. Instead of providing the token in CMake, we recommend to provide the regular URL and use [git-config](https://git-scm.com/docs/git-config) to rewrite the URLs to include the token.
As an example, you could include one of the following in your CI script.
```bash
# Github
git config --global url."https://${USERNAME}:${TOKEN}@github.com".insteadOf "https://github.com"
```
```bash
# GitLab
git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com".insteadOf "https://gitlab.com"
```
## Built with CPM.cmake
Some amazing projects that are built using the CPM.cmake package manager.
@@ -266,6 +282,14 @@ If you know others, feel free to add them here through a PR.
<p align="center"><b>liblava - Modern Vulkan library</b></p>
</a>
</td>
<td>
<a href="https://github.com/variar/klogg">
<p align="center">
<img src="https://github.com/variar/klogg/blob/master/src/app/images/hicolor/scalable/klogg.svg" alt="klogg" width="100pt" />
</p>
<p align="center"><b>klogg - fast advanced log explorer</b></p>
</a>
</td>
</tr>
</table>
@@ -283,7 +307,7 @@ CPMAddPackage("gh:catchorg/Catch2@2.5.0")
### [Range-v3](https://github.com/ericniebler/range-v3)
```Cmake
CPMAddPackage("gh:ericniebler/range-v3#0.11.0")
CPMAddPackage("gh:ericniebler/range-v3#0.12.0")
```
### [Yaml-cpp](https://github.com/jbeder/yaml-cpp)

View File

@@ -30,8 +30,9 @@ cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
set(CURRENT_CPM_VERSION 1.0.0-development-version)
get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
if(CPM_DIRECTORY)
if(NOT CPM_DIRECTORY STREQUAL CMAKE_CURRENT_LIST_DIR)
if(NOT CPM_DIRECTORY STREQUAL CPM_CURRENT_DIRECTORY)
if(CPM_VERSION VERSION_LESS CURRENT_CPM_VERSION)
message(
AUTHOR_WARNING
@@ -93,7 +94,7 @@ set(CPM_VERSION
CACHE INTERNAL ""
)
set(CPM_DIRECTORY
${CMAKE_CURRENT_LIST_DIR}
${CPM_CURRENT_DIRECTORY}
CACHE INTERNAL ""
)
set(CPM_FILE
@@ -650,6 +651,20 @@ function(CPMAddPackage)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND})
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${CPM_ARGS_SOURCE_DIR})
if(NOT IS_ABSOLUTE ${CPM_ARGS_SOURCE_DIR})
# Expand `CPM_ARGS_SOURCE_DIR` relative path. This is important because EXISTS doesn't work
# for relative paths.
get_filename_component(
source_directory ${CPM_ARGS_SOURCE_DIR} REALPATH BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}
)
else()
set(source_directory ${CPM_ARGS_SOURCE_DIR})
endif()
if(NOT EXISTS ${source_directory})
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
# remove timestamps so CMake will re-download the dependency
file(REMOVE_RECURSE "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild")
endif()
elseif(CPM_SOURCE_CACHE AND NOT CPM_ARGS_NO_CACHE)
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS})

View File

@@ -6,7 +6,7 @@ project(CPMRangev3Example)
include(../../cmake/CPM.cmake)
CPMAddPackage("gh:ericniebler/range-v3#0.11.0")
CPMAddPackage("gh:ericniebler/range-v3#0.12.0")
# ---- Executable ----

View File

@@ -0,0 +1,36 @@
require_relative './lib'
class RemoveSourceDir < IntegrationTest
def test_remove_source_dir
prj = make_project 'using-adder'
prj.create_lists_from_default_template package: <<~PACK
CPMAddPackage(
NAME testpack-adder
GITHUB_REPOSITORY cpm-cmake/testpack-adder
VERSION 1.0.0
OPTIONS "ADDER_BUILD_TESTS OFF"
SOURCE_DIR testpack-adder
)
PACK
# configure and build
assert_success prj.configure
assert_success prj.build
# source_dir is populated
assert_true File.exist?(File.join(prj.bin_dir, 'testpack-adder'))
# source_dir is deleted by user
FileUtils.remove_dir(File.join(prj.bin_dir, 'testpack-adder'), true)
assert_false File.exist?(File.join(prj.bin_dir, 'testpack-adder'))
# configure and build with missing source_dir to fetch new content
assert_success prj.configure
assert_success prj.build
# source_dir is populated
assert_true File.exist?(File.join(prj.bin_dir, 'testpack-adder'))
end
end