summaryrefslogtreecommitdiffstats
path: root/Modules/ExternalProject
Commit message (Collapse)AuthorAgeFilesLines
* LICENSE: Replace references to Copyright.txt with LICENSE.rstKitware Robot2025-03-037-7/+7
| | | | | | | | | | ``` git grep -lz 'Copyright.txt or https://cmake.org/licensing ' | while IFS= read -r -d $'\0' f ; do sed -i '/Copyright.txt or https:\/\/cmake.org\/licensing / { s/Copyright.txt/LICENSE.rst/ }' "$f" ; done ```
* ExternalProject: Optionally integrate 'make' job server with INSTALL_COMMANDBrad King2024-11-191-0/+1
| | | | | | | | | | | | | | | | | Add an `INSTALL_JOB_SERVER_AWARE` option to `ExternalProject_Add`. When using an explicit `INSTALL_COMMAND`, the generated commands won't use `$(MAKE)` thus failing to connect to the outer make's job server. Add an option enable explicit job server integration. This is the install step's equivalent to the build step's `BUILD_JOB_SERVER_AWARE` option added by commit bc43398e72 (ExternalProject: Enable Make Job Server with Explicit Build Command, 2023-08-09, v3.28.0-rc1~217^2). It is useful when the external project's installation is driven by its build system. Note that with Makefile generators, our default install command does use `$(MAKE)` to connect to the outer make's job server. Issue: #26398
* ExternalProject: Enable all policies in internal scriptsBrad King2024-10-038-8/+8
|
* Merge topic 'cmp0168-populate-nondeclare-regression'Craig Scott2024-09-081-1/+3
|\ | | | | | | | | | | | | | | cbb727ca6b FetchContent: Don't update verify script timestamp if it doesn't change 795e7b44f2 Help: file(CONFIGURE) only updates output file timestamp if it changes Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9799
| * FetchContent: Don't update verify script timestamp if it doesn't changeCraig Scott2024-09-061-1/+3
| | | | | | | | Fixes: #26255
* | Merge topic 'fetchcontent-updates-disconnected'Craig Scott2024-07-271-10/+11
|\ \ | |/ | | | | | | | | | | | | | | | | 5df592ce31 FetchContent: Ensure can_fetch_default is set early enough c233c51cb9 ExternalProject: Fix bad indenting for uses_terminal Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Acked-by: Silver Zachara <silver.zachara@gmail.com> Merge-request: !9685
| * FetchContent: Ensure can_fetch_default is set early enoughCraig Scott2024-07-261-5/+6
| | | | | | | | | | | | | | | | | | | | | | The can_fetch_default variable needs to be set before the call to _ep_write_gitupdate_script(). Move it to before that call and always set the variable, even if arg_SCRIPT_FILE is not set. This makes the generated git update script file easier to follow if someone tries to follow what it is doing or wants to investigate problems and run it manually. Fixes: #26164
| * ExternalProject: Fix bad indenting for uses_terminalCraig Scott2024-07-261-5/+5
| |
* | Merge topic 'ep-svn-user-pass'Brad King2024-07-231-46/+29
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | 7e80415e79 ExternalProject: Reduce number of local variables for svn logic e16f65be15 ExternalProject: Don't add SVN auth args if not set Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9678
| * | ExternalProject: Reduce number of local variables for svn logicCraig Scott2024-07-201-45/+28
| |/ | | | | | | | | We still keep the svn_trust_cert and uses_terminal variables because they improve the readability of if() conditions.
| * ExternalProject: Don't add SVN auth args if not setCraig Scott2024-07-201-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In 462e583267 (ExternalProject: Switch download, update and patch to use _EP_ vars, 2024-05-13), the svn_username and svn_password variables were only updated appropriately in the svn download implementation, but not in the svn update implementation. This was easily missed in part because the old implementation was relying on behavior that differed from the documentation for get_property(), and the new implementation tried to keep the intermediate variables from the old implementation but missed this subtle aspect. Issue: #26152 Fixes: #26148
* | ExternalProject: Don't rely on *_disconnected vars being unset by callerCraig Scott2024-07-201-0/+2
|/
* FetchContent: Fix command echo for DEBUG and TRACE log levelsCraig Scott2024-07-043-3/+3
| | | | Fixes: #26111
* FetchContent,ExternalProject: Fix extra semicolons in step commandsCraig Scott2024-06-071-1/+1
| | | | | The extra semicolons weren't ultimately causing any errors when running the step commands, but they shouldn't be there.
* ExternalProject,FetchContent: Avoid CMAKE_DISABLE_SOURCE_CHANGES errorCraig Scott2024-05-311-1/+6
| | | | | | | | | | | | The file(MAKE_DIRECTORY) implementation checks whether a path is allowed to be written to before it checks if it already exists. For the scenario where a SOURCE_DIR is an existing directory within the main project's source directory, this triggers a fatal error if CMAKE_DISABLE_SOURCE_CHANGES is set to true for ExternalProject, and some FetchContent scenarios. Therefore, add an explicit check for existence first to avoid making such error-triggering calls. Fixes: #21872
* ExternalProject: Fix misleading git update outputCraig Scott2024-05-171-1/+1
| | | | | | | | | | | | When re-running the build with the git download method, and where GIT_TAG is set to a tag name that we already have locally from the first run, the second run will skip the update step if it is already at the requested tag. The message in this case was previously printing the commit hash instead of the tag name, which was wrong. This wasn't noticed before because that output wasn't usually shown, but we now do show that message after making message output log levels more consistent between the steps.
* FetchContent: Populate directly without a sub-buildCraig Scott2024-05-178-38/+379
| | | | Fixes: #21703
* ExternalProject: Move more internal commands out of main fileCraig Scott2024-05-131-0/+1532
| | | | | | | | | The commands moved to shared_internal_commands.cmake will soon be used directly by FetchContent, which cannot always include the full ExternalProject.cmake file (e.g. it may be used in CMake script mode). Issue: #21703
* ExternalProject: Retry download for error code 35xavisolesoft2024-04-251-1/+1
| | | | | This error code indicates a TLS handshake failure, which we've observed intermittently when downloading artifacts from GitHub.
* ExternalProject: Add TLS version options for https connectionsBrad King2024-02-291-0/+1
| | | | | | | Add a `TLS_VERSION` option and honor `CMAKE_TLS_VERSION` variables. Also map the version to Git options as we already do for `TLS_VERIFY`. Issue: #25701
* ExternalProject: Prevent URL list-splitting on special charactersCraig Scott2024-01-271-1/+1
| | | | | | | | | | | If a URL contains special characters like parentheses and a few others, they would previously have caused a foreach() call that iterates over the URLs to parse those special characters as separate, unquoted arguments. They would then have effectively split the list of URLs at unexpected places. Prepare the arguments for the foreach() call by using use bracket syntax to robustly handle any URLs that do have unescaped special characters. Issue: #25148
* ExternalProject: Catch empty REMOTE or LOCAL earlierCraig Scott2024-01-271-8/+0
| | | | | | | If we are given an empty string for URL, or we have a logic error that leads to the file we download to being an empty string, we will now catch this at CMake configure time instead of whenever the download is attempted at build time.
* ExternalProject: Respect TLS_VERIFY for git update stepCraig Scott2023-06-012-4/+6
| | | | | | | | | | | | | | | | | | | | | | | Git config options can be passed to git clone before or after the "clone" keyword. If specified before, the config setting is only applied to that command invocation. It acts to override the value in the global or project defaults (the latter doesn't exist for clone). When the config setting is passed after the "clone" keyword, it is saved into the cloned repository's config and will persist for later git operations. The existing implementation expected the latter behavior, but put the config setting before the "clone" keyword and therefore the setting was not persisting to the git update step. Move it to after the "clone" keyword so that it will persist. The submodule handling is different. There is no support for doing a "git submodule update" with a "sticky" config setting. Instead, you have to pass the setting with all such calls. The existing implementation was doing this for the clone step, but not the git update step. Add the config setting there as well so that submodules also effectively have the sslVerify setting persist to the update step too. Fixes: #18948
* ExternalProject: Avoid reconfigure when updates are disconnectedCraig Scott2023-05-233-23/+49
| | | | | | | | | | | | | | | | | | | | When UPDATE_DISCONNECTED is true, create separate update_disconnected and patch_disconnected targets which have ALWAYS set to false. Make the configure step depend on patch_disconnected in this case too. This ensures the configure, build, install and test steps are not executed unnecessarily when updates are disconnected. Make the update and patch commands depend on the details of those steps. This ensures they are re-executed when any of those details change, even if updates are disconnected. Allow updates to occur even if UPDATE_DISCONNECTED is true, but don't contact the remote in that case. If asked to update to a ref that isn't known locally, that is now detected and causes a fatal error when updates are disconnected. Previously, the build would have silently and erroneously continued to use the old ref. Fixes: #16419, #19703, #21146
* 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-041-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-0914-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-0410-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-0411-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