summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-09-16 14:21:31 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2016-09-16 14:21:31 (GMT)
commitcf0e005202b3d17ad1f3c17536065c5589b97f93 (patch)
tree6f562f62c59371d7293c77daaedc689d5338d9ca /Source
parent4356bd7fe382585e59033287dcc43386689e5dc2 (diff)
parent72dfca30b94ba1e85533c61a7b5a330dfbc04da5 (diff)
downloadCMake-cf0e005202b3d17ad1f3c17536065c5589b97f93.zip
CMake-cf0e005202b3d17ad1f3c17536065c5589b97f93.tar.gz
CMake-cf0e005202b3d17ad1f3c17536065c5589b97f93.tar.bz2
Merge topic 'detect-relink-incompat'
72dfca30 ninja: error out on relink requirements
Diffstat (limited to 'Source')
-rw-r--r--Source/cmGeneratorTarget.cxx23
1 files changed, 22 insertions, 1 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 4f8c036..1e21ac4 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -1162,7 +1162,28 @@ bool cmGeneratorTarget::NeedRelinkBeforeInstall(
// If either a build or install tree rpath is set then the rpath
// will likely change between the build tree and install tree and
// this target must be relinked.
- return this->HaveBuildTreeRPATH(config) || this->HaveInstallTreeRPATH();
+ bool have_rpath =
+ this->HaveBuildTreeRPATH(config) || this->HaveInstallTreeRPATH();
+ bool is_ninja =
+ this->LocalGenerator->GetGlobalGenerator()->GetName() == "Ninja";
+
+ if (have_rpath && is_ninja) {
+ std::ostringstream w;
+ /* clang-format off */
+ w <<
+ "The install of the " << this->GetName() << " target requires "
+ "changing an RPATH from the build tree, but this is not supported "
+ "with the Ninja generator unless on an ELF-based platform. The "
+ "CMAKE_BUILD_WITH_INSTALL_RPATH variable may be set to avoid this "
+ "relinking step."
+ ;
+ /* clang-format on */
+
+ cmake* cm = this->LocalGenerator->GetCMakeInstance();
+ cm->IssueMessage(cmake::FATAL_ERROR, w.str(), this->GetBacktrace());
+ }
+
+ return have_rpath;
}
bool cmGeneratorTarget::IsChrpathUsed(const std::string& config) const