summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-03-23 08:42:51 -0400
committerBrad King <brad.king@kitware.com>2017-03-23 08:42:51 -0400
commit324d7f5a507bdfc9e46665573c42b82c4d51d9a9 (patch)
tree480e0988521e1b5046cc64f754b210bf58bf2011
parent51ef9bb1eb9468376b6ab2014f4519d57b90c682 (diff)
parent8285ad511a92416f0e99fcda27de98435316173b (diff)
downloadcmake-324d7f5a507bdfc9e46665573c42b82c4d51d9a9.tar.gz
Merge branch 'server-mode-fix-home-dir-check' into release
-rw-r--r--Source/cmServerProtocol.cxx24
1 files changed, 22 insertions, 2 deletions
diff --git a/Source/cmServerProtocol.cxx b/Source/cmServerProtocol.cxx
index 334a05a7de..a5c1a23e1a 100644
--- a/Source/cmServerProtocol.cxx
+++ b/Source/cmServerProtocol.cxx
@@ -255,6 +255,27 @@ static void setErrorMessage(std::string* errorMessage, const std::string& text)
}
}
+static bool testHomeDirectory(cmState* state, std::string& value,
+ std::string* errorMessage)
+{
+ const std::string cachedValue =
+ std::string(state->GetCacheEntryValue("CMAKE_HOME_DIRECTORY"));
+ const std::string suffix = "/CMakeLists.txt";
+ const std::string cachedValueCML = cachedValue + suffix;
+ const std::string valueCML = value + suffix;
+ if (!cmSystemTools::SameFile(valueCML, cachedValueCML)) {
+ setErrorMessage(errorMessage,
+ std::string("\"CMAKE_HOME_DIRECTORY\" is set but "
+ "incompatible with configured "
+ "source directory value."));
+ return false;
+ }
+ if (value.empty()) {
+ value = cachedValue;
+ }
+ return true;
+}
+
static bool testValue(cmState* state, const std::string& key,
std::string& value, const std::string& keyDescription,
std::string* errorMessage)
@@ -314,8 +335,7 @@ bool cmServerProtocol1_0::DoActivate(const cmServerRequest& request,
}
// check sourcedir:
- if (!testValue(state, "CMAKE_HOME_DIRECTORY", sourceDirectory,
- "source directory", errorMessage)) {
+ if (!testHomeDirectory(state, sourceDirectory, errorMessage)) {
return false;
}