summaryrefslogtreecommitdiff
path: root/Source/cmInstallCommand.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2019-03-07 08:52:18 -0500
committerBrad King <brad.king@kitware.com>2019-03-07 09:00:56 -0500
commit47389c5641b821813f3f236bfbc179f52a2c95d7 (patch)
tree0c5d54b310509435badeb287b7b1e1bcb328d595 /Source/cmInstallCommand.cxx
parent20a41aa589d4418f9ac46fc8c0402162d1d82873 (diff)
downloadcmake-47389c5641b821813f3f236bfbc179f52a2c95d7.tar.gz
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
Diffstat (limited to 'Source/cmInstallCommand.cxx')
-rw-r--r--Source/cmInstallCommand.cxx6
1 files changed, 5 insertions, 1 deletions
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index 8ef644141b..20d1a31340 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -402,7 +402,11 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
cmTarget* target = this->Makefile->FindLocalNonAliasTarget(tgt);
if (!target) {
// If no local target has been found, find it in the global scope.
- target = this->Makefile->GetGlobalGenerator()->FindTarget(tgt, true);
+ cmTarget* const global_target =
+ this->Makefile->GetGlobalGenerator()->FindTarget(tgt, true);
+ if (global_target && !global_target->IsImported()) {
+ target = global_target;
+ }
}
if (target) {
// Found the target. Check its type.