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
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
8213390a3e Added `SETUID` and `SETGID` to the list of accepted file permissions
f41d0e0c77 Tests: Explicitly set permissions in CPack tests to avoid perimssions errors
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5754
The RunCPackVerifyResult-shlibdeps-with-private-lib-failure test failed
intermittently due to sometimes breaking lines in its output in different
places. This change accepts line breaks in more places in the command
output.
Signed-off-by: william.r.dieter <william.r.dieter@intel.com>
When the user has the setgid bit is set on the parent directory of
the build directory, the setgid bit will be propagated throughout the
build tree. Most tests do not care about permissions as long as they
can read and write the files the need. The CPack tests, however, validate
that permissions match an expected set, and fail with the setgid bit set.
Explicitly set permissions on directories created in the CPackTestHelpers
to clear the setgid bit.
Signed-off-by: william.r.dieter <william.r.dieter@intel.com>
DNS lookup of an invalid host name fails with a different error in a proxy
environment than it does in an environment without proxy. Many tools,
including curl, use the `no_proxy` environment variable to provid a list
of hosts for which proxy should not be used.
To make lookup failure consistent, add invalid host names to the
`no_proxy` environment variable in tests that attempt to look up invalid
host names. This way the lookup will fail consistently regardless of
whether proxy is generally used or not.
Signed-off-by: william.r.dieter <william.r.dieter@intel.com>
The previous implementation was scanning the documentation in
the file at runtime to determine the set of supported keywords for
each public function. This was fragile, made it difficult to restructure
the documentation and was sometimes observable in runtime
performance measurements. Change to a more conventional
approach where supported keywords are explicitly listed in the
code.
The internal _ExternalProject_SELF variable is no longer needed.
CMake now provides CMAKE_CURRENT_FUNCTION_LIST_DIR which
can be used for the same purpose and avoids having to set a
variable when the module is read. This also removes the
requirement that the module must be included by the current or a
parent scope. It is now enough that the module has been included
once somewhere before calling any of its functions.
The above changes combined mean that the module can now use
include_guard() and avoid having to re-parse the very long file every
time.
ac6a4d4884 ExternalProject: Improve robustness of update step
17c4c8b92b Tests: Prevent the noisy CMP0114 warnings in ExternalProjectUpdate test
1cb65e680d ExternalProject: Prevent the noisy detached head messages on checkout
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5389
Refactor the update logic to make it easier to follow. The following
fixes/improvements are some consequences of this change:
* Absorb a confusing git checkout failure message when the failure
is allowed and we act on that failure appropriately.
* Fix an unnecessary fetch in some scenarios when checking out a
git hash we already have locally.
* Stash and restore any local changes even when not rebasing.
* Avoid unsafe rebasing where we are not on a branch that is
already tracking the requested branch.
* When fetching, use --tags --force to ensure we get all the tags
and commits leading up to them regardless of whether the tags
are on branches or not. Also update our local tags if they move
on the remote.
Fixes: #20677
clang-cl cannot deal with implicit dependencies in UTF16 files
(see #18311). IntelLLVM inherits this behavior from Clang. The
MFC test uses `rc` in the way described in #18311 and gets the same
error described in #18311. Disable the test until #18311 is fixed.
Signed-off-by: William R. Dieter <william.r.dieter@intel.com>
The IntelLLVM C compiler do not yet support PDBs per file with the /Fd
option. Disable the parts of PDBDirectoryAndName that tries to generate
them so that the test will pass.
Work around an icx bug in command line handling of preprocessor macros.
A `\\\"` string in a macro passed to icx on the command line is not
properly parsed in compiler versions 2021.1.0 and earlier. This problem
is expected to be fixed, though a target release has no been set yet.
Signed-off-by: William R. Dieter <william.r.dieter@intel.com>
By default icx and icpx do not add build IDs when linking, so enable
the build ID to make the test pass.
Signed-off-by: William R. Dieter <william.r.dieter@intel.com>