From 8285ad511a92416f0e99fcda27de98435316173b Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 22 Mar 2017 16:52:08 +0100 Subject: server-mode: Make CMAKE_HOME_DIRECTORY more reliable Make CMAKE_HOME_DIRECTORY detection work more reliably in the face of symlinks. Closes #16736 --- Source/cmServerProtocol.cxx | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Source/cmServerProtocol.cxx b/Source/cmServerProtocol.cxx index e159c8f..8317018 100644 --- a/Source/cmServerProtocol.cxx +++ b/Source/cmServerProtocol.cxx @@ -251,6 +251,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) @@ -310,8 +331,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; } -- cgit v0.12