* get_cpm: Recover from failed download
If the download fails during the cmake config step
an empty `CPM_<version>.cmake` file is created.
So far the script only checks the files existence,
so there is no second try until the empty file is deleted manually.
This adds a check if the file is empty
and resumes the download on next config if it is.
* More descriptive function name
* Small helper function for logging :
This PR add an helper function only when `message(STATUS ...)` as the other are `backtracing` and adding the helper function add on stack.
It should fix#328#342 with a few line of code.
* Formatting
* Expand absolute path later in get_cpm.cmake
Supports expanding tildes in the environment.
* Apply cmake-format to get_cpm.cmake
* Use .cmake-format file
* Timestamps for URL downloads match the download time
By enabling CMake policy 135 we ensure that extracted files
timestamp match that of the download time, instead of when the
archive is created. This makes sure that if the URL changes to
an older version we still rebuild everything as the timestamp
stays newer.
* Introduce CPM_SET_RECOMMENDED_CMAKE_POLICIES
Enabling CPM_SET_RECOMMENDED_CMAKE_POLICIES will establish defaults
for all CMake policies so that both CPM and added projects
operate inline with CPM recommended best practices.
* Fix style issues found by ci
* Update README.md
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Update cmake/CPM.cmake
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Set policies when CPM.cmake is included
* CPM_SET_RECOMMENDED_CMAKE_POLICIES default is ON
* Correct failing CI tests
* CPM.cmake always sets policies to on
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* 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
* 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
* Override FetchContent paramers, fixes#281
* add check to verify that dependency is cached
* update test comment
* rename test file and class
* update test indentation
* Add per project CPM_DOWNLOAD controls
Introduces support for `CPM_<PACKAGE>_DOWNLOAD` variable ( and env )
which allows finer grained control.
* Address PR feedback on API names
By enabling CMP0126 we tell CMake that when constructing a CACHE variable
with the same name as a local variable to not unset the local variable.
By enabling CMPO126 it makes sure that CPM behavior around `OPTION` is
consistent if the option is created with `set(CACHE)` or with `option`.
* Added directory inside cache to make it shown more friendly in CLion
* Changed hash generation to omit collision with old cache scheme. Removed moving old directory for compatibility reason.
* Added CPM_USE_NAMED_CACHE_DIRECTORIES option
* Fixed formatting
* Added description of CPM_USE_NAMED_CACHE_DIRECTORIES into README.md
Co-authored-by: Paweł Gorgoń <pgorgon@hem-e.com>
* Check that the cache working directory is clean
* cpm_check_working_dir_is_clean for non git repo will not terminate cmake
* sileneced check for git repo, in case of error
* style(CPM.cmake): fixed indentation for ERROR_QUIET
* refactor(CPM.cmake): added logic to handle a cache folder inside a (not correlated) git repo
this is accomplished by checking if we are in the directory where .git lives
* style(CPM.cmake): stray tab to spaces
* test(dirty-cache-check): added unit test to check cpm_check_working_dir_is_clean
the test creates a file in a folder and then uses git to create a repo in that folder, to check various conditions
* Update test/unit/dirty-cache-check.cmake
added user.name and user.email to comply with test machine where git is not completely configured
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* feat(cpm_check_working_dir_is_clean): now it takes a git tag (works with hashes too) to check for uncommitted and commited changes
* refactor(cpm_check_working_dir_is_clean): early return for the most common case of uncommited changes in a repo
* refactor(cpm_check_git_working_dir_is_clean): removed edgecase detection (a non-git folder in an unrelated git repo)
now the contract is that com_check_git_working_dir_is_clean is given the base folder of a git repo
Co-authored-by: Andrew Gribble <ag131012@renishaw.com>
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
Add fetchcontent_dependency unit test:
* This test should highlight the fact that cpm_add_subdirectory is always called, even when
cpm_fetch_package isn't populating the dependency
* NO_CACHE YES highlight a bug introduced in 32b063eba5 where
cpm_fetch_package was checking undefined ${lower_case_name}_POPULATED variable
https://github.com/cpm-cmake/CPM.cmake/issues/287
* Added support for bitbucket repositories:
* added variable BITBUCKET_REPOSITORY
* added short syntax in form "bb:user/repo"
* added description of that to readme.md
* Added test for bitbucket short syntax
* Used elseif syntax in handling of git services (github, gitlab, bitbucket).
* Added HEMRND/TestingFramework example located on bitbucket.org
* Reformatted CMakeLists.txt in TestingFramework example
* Bumped version of TestingFramework. It supports older version of c++ standard.
Co-authored-by: Paweł Gorgoń <pgorgon@hem-e.com>
* Expand relative download directory to prevent unnecessary download
If `CMAKE_SOURCE_CACHE` (and thus `download_directory`) is set to a relative path, the condition `if(EXISTS ${download_directory})` will fail even if the required directory exists. Expanding the variable `download_directory` to an absolute path before the test will rectify this, preventing unnecessary downloads of the sources.
* iFixed up formatting
Co-authored-by: Stuart Dootson <stuart.dootson@rolls-royce.com>
* Fix#222
* Fix#222
* move policy change and local options to cpm_add_subdirectory
* change default policy as well
see https://gitlab.kitware.com/cmake/cmake/-/issues/20312
* add test
* update check to not use the NOT operator
(interestingly it works as expected locally)
* simplify test by not using options
* check options in tests
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Function to extract name and version from url. Some tests
* Rewrite. Previous version was not safe enough. More tests
* Allow underscore as a name-version separator (<name>_<ver>)
* CPMAddPackage can infer name and version from url
* Allow URL parse from single arg and uncomment tests
* Info about shorthand syntax in README
* Fix style
* Fixed typo
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Explicit hash algorithm in shorthand URL example.
Also added tests which include a hash algorithm provided
We can't document a default until it's confirmed here: https://gitlab.kitware.com/cmake/cmake/-/issues/21859
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Added quotes in equality checks so lists can be compared
* Function to parse argument of CPMAddPackage in case a single one was provided
* Error on URL type in CPMAddPackage single-arg
* Fixed format
* Support single argument syntax of CPMAddPackage
* Documenting and showcasing the new shorthand syntax of CPMAddPackage
* Auto EXCLUDE_FROM_ALL for the shorthand syntax
* Fixed accidental paste of TOLOWER
* Document why some test cases are commented out
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Update README.md
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Removed GitHub as the default package shorthand provider
Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
* Added assert_not_defined check
* Function to get package name form git uri and tests
* Autofix format
* If name is not provided, try to infer it from the git repo
* Unset result of cpm_package_name_from_git_uri if there is no match
- Also reordered tests to ensure that the result is actually unset when needed
* Removed trailing spaces in README
* Updated the main example with the new minimal syntax
* Well... autofix format again
* Update error message for missing name to reflect the possible auto-infer step
* Autofix format... yet again :)
* add dependencies using EXCLUDE_FROM_ALL flag
* respect DOWNLOAD_ONLY flag
* set EXCLUDE_FROM_ALL as an optional flag
* use one value arg for consistency
* fix argument passing
* add unit test
* update cmake-format
* add prettify macro
* apply the prettier and change the name of the output arg
* add parameter inside macro
* resolve path if its cmake_sourc_dir
* add missing uparsed argument
* add early unit test for prettifier
* retab prettify_cpm_add_package
* rename prettify_cpm_add_package cpm_prettyfy_package_arguments
* convert macro to function and fix unit test
* fix typo in the name of the parse argument in prettyfy function
* change the unit test to test only the function
* add test for the commented part
* remove dead code
* fix typo
* run cmake-format on CPM.cmake
* reformated unit test prettify
* flip the logic to add space on new argument unparsed to avoir space at the end
* remove debug message
* apply most suggestion from pr 162, disable formating only for small part in unit test
* add unit test to cover defauld source dir added inside lock
* run format tool on unit test
* remove dead code
* change the prettifier from 4 space to 2
* run format on unit test
* apply clang-format and cmake-format and add style check workflow
* add declare package definition
* add additional public methods and rename internals
* change development verison tag to 1.0.0
* rename internal method
* rename public method
* rename test var
* update copyright and fix comment
* typo
* run fix-format
* fix test function names
When using CPMFindPackage, if no VERSION is given then GIT_TAG is used as fallback if defined, which is a good idea.
The issue is that GIT_TAG is missing inside the oneValueArgs variable therefore GIT_TAG is not parsed. This is resolved by this little change.
When I used CPM_<pkg>_SOURCE to point to a locally modified copy,
the options ended up not being passed on. I think they should be, so
this patch does so.