summaryrefslogtreecommitdiff
path: root/Modules/ExternalProject
Commit message (Collapse)AuthorAgeFilesLines
* ExternalProject/FetchContent: Support relative remote URLsChris Wright2023-04-261-0/+182
| | | | | | | | | Teach `ExternalProject_Add` and `FetchContent_Declare` to resolve relative remote URLs provided via `GIT_REPOSITORY`. Add policy CMP0150 to maintain compatibility. Fixes: #24211 Co-Authored-By: Craig Scott <craig.scott@crascit.com>
* ExternalProject: Also retry curl download on timeout errorGreg Thain2023-03-011-1/+1
| | | | | | | | | | Since commit f24e34975a (ExternalProject: retry download on recoverable errors, 2020-08-08, v3.19.0-rc1~298^2~1) ExternalProject has a list of curl errors which trigger a retry today: 6, 7, 8 and 15. Add curl error 28. It is a "timeout error", and should also trigger a retry attempt at a download of an external project. The complete list of curl errors is https://curl.se/libcurl/c/libcurl-errors.html
* ExternalProject: Explicitly run Git commands on intended directoryPatrick Stewart2022-09-301-19/+19
| | | | | | | Add `--git-dir=.git` to cause git commands to fail instantly if the `.git` folder has gone missing. Fixes: #24007
* ExternalProject: Fix regression in stamp creation for Xcode+iOSBrad King2022-06-211-0/+3
| | | | | | | | | | | | The change to `_ep_add_mkdir_command` in commit 5fbac2bb24 (ExternalProject: Move inline scripts to separate files, 2022-01-22, v3.23.0-rc1~101^2) did not account for the possibility that `CMAKE_CFG_INTDIR` is `$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)` instead of just the configuration name. Pass the value into the helper script on the command line so that the native buildsystem placeholders are evaluated. Fixes: #23645
* ExternalProject: Add DOWNLOAD_EXTRACT_TIMESTAMP option and policyKasper Laudrup2022-05-051-1/+1
| | | | | | | | | | Add the option to keep the current filestamps when extracting an archive in ExternalProject_Add. Enabling this option makes the behavior consistent with how ExternalProject_Add is used when checking out code from revision control instead of an archive. Fixes: #22746
* ExternalProject: Remove extra quotes in for-each-ref update stepCraig Scott2022-02-211-1/+1
| | | | | | | | | The --format=... argument to git for-each-ref was using a stray pair of single quotes around the format string. These were then part of the output, which caused it to never match the checkout_name. The end result was that a REBASE_CHECKOUT always became a CHECKOUT in all scenarios. Fixes: #23216
* ExternalProject: Rerun download on SOURCE_DIR changeCraig Scott2022-02-011-3/+9
| | | Fixes: #21748
* ExternalProject: Move inline scripts to separate filesCraig Scott2022-01-225-0/+207
| | | | | | This makes the scripts easier to work on, since the separate files don't require the extra level of escaping that the inlined code did. This also means the scripts can be rendered with appropriate syntax highlighting in IDEs, etc.
* ExternalProject: Move existing step scripts to separate subdirectoryCraig Scott2022-01-224-0/+490
| | | | | This is in preparation for moving more inline content to separate scripts as well. Having them in a separate subdirectory is consistent with other modules and will make them easier to find and work with.
* Revert ExternalProject and FetchContent refactoringCraig Scott2021-03-1014-929/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | Refactoring of the ExternalProject and FetchContent modules moved the commands into CMake scripts. This broke custom commands that used shell redirection or special build tool variables of the form $(MakeVar). Undo the sequence of commits that performed this refactoring and follow-up fixes associated with it. The following commits are reverted by this change: 4f3d1abbb4 (ExternalProject: Refactor pre-configure steps to support no-target uses, 2021-02-05) 17e5516e60 (FetchContent: Invoke steps directly and avoid a separate sub-build, 2021-01-29) bd876f3849 (FetchContent: Restore patch command support, 2021-02-18) 404cddb7bb (ExternalProject: Fix misuse of IS_NEWER_THAN in timestamp checks, 2021-02-21) b0da671243 (FetchContent: Don't update timestamps if files don't change, 2021-02-18) Fixes: #21892
* ExternalProject: Fix misuse of IS_NEWER_THAN in timestamp checksCraig Scott2021-02-222-2/+4
| | | | | | | When using a file system which only has second resolution timestamps, there is a reasonably high likelihood of timestamps being the same. The IS_NEWER_THAN test returns true when timestamps are the same, so don't redo downloads when they match exactly.
* FetchContent: Invoke steps directly and avoid a separate sub-buildCraig Scott2021-02-0510-103/+296
| | | | | | | | | | | | The cost of setting up and executing a separate sub-build to do the download, update and patch steps required for FetchContent population can be significant with some platforms and CMake generators. Avoid the sub-build altogether by invoking the step scripts directly. Previously, if no generator was set (e.g. population was being done in script mode), a generator needed to be available on the default PATH. Since we no longer use a sub-build, this restriction is also now gone. Fixes: #21703
* ExternalProject: Refactor pre-configure steps to support no-target usesCraig Scott2021-02-0511-0/+734
The mkdir, download, update and patch steps are used by FetchContent during the configure phase of the main build. Because these steps need a target, this has so far required a sub-build to be set up. The changes here factor out the preparation of the scripts from the creation of the targets, allowing future work to leverage these steps without a sub-build (see #21703). As part of the refactoring, some rationalisation of the stamp files, repository info files and script names was done to make things more consistent between download methods and step implementations. Every download method now records its own specific repository info in a file and that file is a dependency of the download step. The source directory is also written to that file, so if the SOURCE_DIR changes, the download will be retriggered (the existing implementation fails in this scenario). Each download method now also has just one driver script that implements the whole step (it may pull in other scripts to do its task though). The patch step gained support for USES_TERMINAL as a result of generalising the implementation for custom commands. Fixes: #21748