Commit Graph

66 Commits

Author SHA1 Message Date
Craig Scott 6a1fac1450 install: Normalize DESTINATION paths
The file generated by install(EXPORT) computes _IMPORT_PREFIX
in a way that assumes a normalized path. If the DESTINATION
contains any ../ components, the computed _IMPORT_PREFIX
would be wrong. Force the DESTINATION path to be normalized,
subject to the new CMP0176 policy.

Also normalize all other DESTINATION paths for consistency,
except for INCLUDES DESTINATION, which is not strictly a
destination but rather a search path to add.

Fixes: #26252
2024-09-19 20:31:47 +10:00
Craig Scott 2184fcfb00 Tests: Configure RunCMake.install cases with correct build type
The run_install_test() function would build and install with the
configuration hard-coded to Debug, but the configuration step
did not specify any configuration. This resulted in a "no config"
configuration, and the install step then wouldn't install the Debug
export files. This would only be a problem if using a single config
CMake generator, and it appears none of the existing tests relied
on actually installing the config-specific export file.
2024-09-18 08:39:59 +10:00
Robert Maynard 2fc9e482a9 Evaluation of TRANSITIVE_LINK_PROPERTIES isn't considered a usage
Fixes #26108
2024-07-05 13:16:47 -04:00
Brad King b3245f33ef Tests/RunCMake/install: Avoid intermittent failures on AIX
Since commit 3a739d4dcb (EXPORT_PACKAGE_DEPENDENCIES: Add experimental
feature gate, 2024-03-12, v3.29.0-rc4~6^2) a case has intermittently
failed due to CMake rerunning during the case's build step and printing
the feature gate warning to stderr.  Redirect all build output to stdout
as we do in similar cases elsewhere.

Although we don't expect CMake to re-run in this case, somehow an AIX
host's filesystem is occasionally recording high-resolution timestamps
out of order among files saved in quick succession.
2024-05-10 08:48:02 -04:00
Brad King 3a739d4dcb EXPORT_PACKAGE_DEPENDENCIES: Add experimental feature gate
Some design concerns have been raised after trying the 3.29 release
candidates.  Avoid committing to a stable public interface for now.

Issue: #25767
2024-03-12 14:24:53 -04:00
Kyle Edwards c6e6861e63 install(EXPORT): Export find_dependency() calls
Issue: #20511
Co-Authored-by: Brad King <brad.king@kitware.com>
Co-Authored-by: Robert Maynard <rmaynard@nvidia.com>
2023-11-13 11:07:52 -05:00
Brad King 9c14f14848 install(TARGETS): Do not apply installation tweaks to NAMELINK files
These files are symlinks to the real binaries, and we already apply
tweaks to those.  Previously we generated installation tweak code
guarded by a `NOT IS_SYMLINK` condition that is never true.  Drop the
code altogether.

Add a test covering the motivating use case, in which a `POST_BUILD`
step modifies the namelink file to not actually be a symlink.

Fixes: #24647
2023-03-28 12:06:24 -04:00
Kyle Edwards 18e02ace5b install(CODE|SCRIPT): Support $<INSTALL_PREFIX> genex
Fixes: #24534
2023-02-24 10:17:45 -05:00
Brad King 1edf138506 Tests/RunCMake: Update cmake_minimum_required versions
For policy-specific tests, use the version before the policy was
introduced.  Otherwise, use 3.5 where possible.

Also, remove `cmake_minimum_required()` and `project()` calls from
individual cases where they are handled by `CMakeLists.txt`.
2023-02-11 06:24:22 -05:00
Brad King 85f01a1ec2 file(INSTALL): Improve formatting of symlink creation error
Avoid printing two error messages.  Format paths without wrapping.
2022-10-06 15:08:06 -04:00
Eugene Shalygin 83d79636bf install(TARGETS): Restore per-export INCLUDES DESTINATION
In commit 55e4753bbb (Refactor cmTargetExport removing
InterfaceIncludeDirecories, 2021-07-20, v3.22.0-rc1~337^2~1) the storage
of `INCLUDES DESTINATION` was moved into each target.  However, a target
may be installed in multiple exports, and their `INCLUDES DESTINATION`
should not be mixed.

Convert the IncludeDirectoriesEntries vector to a map and modify access
function to store the directories lists with respect to cmExportTarget
object. This fixes error when the same target is exported more than once
via different exports and each for consequent export its include
directories list grows. Add a test for this case.

Fixes: #23183
2022-02-09 13:31:26 -05:00
Kyle Edwards 0c3c6acaff Tests: Add tests for new options 2021-06-04 10:07:38 -04:00
Kyle Edwards 4910132d8c install: Add RUNTIME_DEPENDENCY_SET mode 2021-06-04 08:52:02 -04:00
Kyle Edwards bc8a4a06a4 install(IMPORTED_RUNTIME_ARTIFACTS): Add RUNTIME_DEPENDENCY_SET option 2021-06-04 08:52:02 -04:00
Kyle Edwards 3e7d3c252a install(TARGETS): Add RUNTIME_DEPENDENCY_SET argument 2021-06-04 08:52:02 -04:00
Kyle Edwards ed3633d88c install(TARGETS): Add RUNTIME_DEPENDENCIES option 2021-06-04 08:52:02 -04:00
Nils Gladitz 99ff75455e install: Implement new install(CODE|SCRIPT) option ALL_COMPONENTS
In a per-component installation the generated installation scripts
are invoked once for each component.

Per default custom installation script code added by install(CODE|SCRIPT)
only runs for one specific component in this context.

The new ALL_COMPONENTS option allows custom script code to be run once
for each component being installed.
2021-05-19 19:17:58 +02:00
Brad King 3928f31a26 Merge topic 'codespell'
fd02f10103 Xcode: Fix typos and spelling in error message
5950e54325 Source: Fix typos and spelling in comments
7072d83772 Help: Fix typos and spelling in documentation
03b1140ddc CONTRIBUTING: Fix typos and spelling
87f8843d8b FindMatlab: Fix spelling in warning and documentation
15cc39ed7f Modules: Fix typos and spelling in documentation
f015c36c5a Modules: Fix typos and spelling in comments of generated code
dad5b9d845 Modules: Fix typos and spelling in comments
...

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Ben Boeckel <ben.boeckel@kitware.com>
Merge-request: !6099
2021-05-10 10:13:06 -04:00
Josef Angstenberger e4a856f8b9 Tests: Fix typos and spelling in test error message 2021-05-07 17:00:14 +02:00
Jens Carl d71a7cc19d install(FILES): Allow installation of symlinks to directory
Allow symbolic links to a directory to be installed via install(FILES ...).

Fixes: #22159
2021-05-06 15:29:51 -07:00
Brad King e017ba046c AIX: Enable XCOFF editing to replace RPATH on installation
Avoid relinking before installation.
2021-02-03 12:26:58 -05:00
Asit Dhal ac3ccc393e install(files): Support genex in rename option
Fixes: #19903
2021-01-13 11:27:56 +01:00
Deniz Bahadir 38bcb5c0a3 export: Do not fail generation for separate namelink only case
Update the change from commit 64690f6df0 (export: Do not fail generation
for namelink-only case, 2020-10-09, v3.19.0-rc1~7^2) to also handle
separate namelink-only and namelink-skip calls.

Fixes: #21529
2020-12-01 07:35:17 -05:00
Deniz Bahadir 64690f6df0 export: Do not fail generation for namelink-only case 2020-10-09 22:29:22 +02:00
Robert Maynard a020787a9b ISPC: Support generation for multiple instruction sets 2020-09-04 08:37:07 -04:00
Brad King 248d0570c9 Tests: Factor out RunCMake.file-GET_RUNTIME_DEPENDENCIES test
Move the `file(GET_RUNTIME_DEPENDENCIES)` cases out of `RunCMake.install`.
2020-06-16 11:17:55 -04:00
Brad King 1c97a3c442 Tests: Fix RunCMake.install LDFLAGS treatment
In commit d806bd2e8c (Tests: Update test suite to run in an Anaconda
environment, 2020-03-30) an extra `}` was left in the value of the
modified `LDFLAGS`.  Remove it.  While at it, simplify the code.
2020-05-26 09:18:52 -04:00
Robert Maynard d806bd2e8c Tests: Update test suite to run in an Anaconda environment 2020-05-21 11:31:23 -04:00
Robert Maynard f867423aa2 file: GetRuntimeDependencies use CMAKE_OBJDUMP when applicable
On machines where the gnu bin utils are prefixed, or suffixed
the file(GET_RUNTIME_DEPENDENCIES ) command would fail without
explicitly setting the location of objdump.

Now we pre-populate the variables used to find objdump based
on the gnu bin utils, so that these use cases are better supported
2020-04-06 12:12:14 -04:00
Kyle Edwards 162e8aeb9e Tests: Disable test on problematic versions of install_name_tool
According to https://cmake.org/pipermail/cmake-developers/2015-September/026462.html,
there is a bug in Xcode 7.0's install_name_tool that manifests when we
try to test file(GET_RUNTIME_DEPENDENCIES). Add a cache option to disable
this test.
2020-01-27 09:52:54 -05:00
Dennis Klein 4caefbb423 cmInstallTargetGenerator: Add tests for the RPATH_CHANGE rule 2019-06-13 16:41:11 +02:00
Kyle Edwards 1f9ef25130 file: Add GET_RUNTIME_DEPENDENCIES mode
Co-Authored-by: Bryon Bean <bryon.bean@kitware.com>
2019-06-10 14:35:28 -04:00
Brad King 47389c5641 install: Do not crash on imported global target
Since commit e89ad0f94e (install: Allow installing targets created in
another directory, 2018-06-18, v3.13.0-rc1~407^2) the `install(TARGETS)`
command may find a global-scoped target outside the calling directory.
Ignore an `IMPORTED GLOBAL` target if it is found in this way.  Imported
targets cannot be installed, and trying to do so violates internal
invariants.

Fixes: #19022
2019-03-07 09:00:56 -05:00
Jon Chronopoulos 25cae1e85d install: Teach CODE,SCRIPT modes to evaluate generator expressions
This also introduces CMP0087 which will keep the OLD behaviour of not
evaluating generator expressions

Fixes: #15785
2018-12-23 09:03:38 +11:00
Kyle Edwards 9fc20a4f3e install: Add sane set of defaults for DESTINATION and file type parameters
If the user does not specify a DESTINATION for a target type, the
install() command checks to see if the appropriate variable from
GNUInstallDirs is set. If it is not, then it uses an appropriate
hard-coded guess.

In addition, for FILES and DIRECTORY, the user can specify a file
type instead of a DESTINATION, and the command will use the
appropriate variable from GNUInstallDirs, or a hard-coded guess if
it is not set.
2018-11-07 14:08:48 -05:00
Brad King 0f48fbaa72 install: Revert CODE,SCRIPT support for generator expressions
Revert commit v3.13.0-rc1~441^2 (install: Teach CODE,SCRIPT modes to
evaluate generator expressions, 2018-05-29).  Unfortunately it has
been found to break existing code in a real project, e.g.

    install(CODE [[
        message("$<FOOBAR>")
    ]])

Address this regression by reverting support for the 3.13 release
series.  Support can be restored later with a policy for compatibility.

Issue: #15785
Fixes: #18435
2018-10-11 07:05:55 -04:00
Kyle Edwards 11ca374b28 Tests: Add test for install(SCRIPT ... COMPONENT) 2018-07-17 09:07:10 -04:00
Kyle Edwards 2201fb6f43 Tests: Add test for InstallRequiredSystemLibraries 2018-07-17 09:07:10 -04:00
Kyle Edwards 69ca768e78 Tests: Add test for install(TARGETS) RPATH functionality 2018-07-17 09:07:01 -04:00
Kyle Edwards 25c3fb6c35 Tests: Add test for install(FILES) with PERMISSIONS 2018-07-17 09:07:01 -04:00
Kyle Edwards b5df4faa20 Tests: Add test for installing parts of targets in different directories 2018-07-17 09:07:01 -04:00
Kyle Edwards 4108ab4be2 Tests: Add test for install(DIRECTORY) with PATTERN and REGEX 2018-07-17 09:07:01 -04:00
Kyle Edwards bce8fa229a Tests: Add test for CONFIGURATIONS parameter of install() 2018-07-17 09:07:01 -04:00
Kyle Edwards ae1c917f1a Tests: Add test for install(<SCRIPT|CODE>) 2018-07-17 09:07:01 -04:00
Kyle Edwards 2c62a45a5a Tests: Add test for <PRE|POST>_INSTALL_SCRIPT 2018-07-17 09:07:01 -04:00
Kyle Edwards db4bc2fa18 Tests: Add test for deprecated install_*() commands 2018-07-17 09:07:01 -04:00
Kyle Edwards ec5c838fcb Tests: Add tests for *OUTPUT_NAME properties 2018-07-17 09:07:00 -04:00
Kyle Edwards f6c7358c2a Tests: Add test for install(DIRECTORY ... OPTIONAL) 2018-07-17 09:07:00 -04:00
Kyle Edwards 1638ffa287 Tests: Add tests for install(<TARGETS|FILES> ... OPTIONAL) 2018-07-17 09:07:00 -04:00
Zack Galbreath e89ad0f94e install: Allow installing targets created in another directory
Previously, `install(TARGETS)` would only accept targets created in the same
directory scope.  Relax this restriction by searching the global scope when
determining whether or not a target exists.

Fixes: #14444
2018-06-18 13:18:54 -04:00