Răsfoiți Sursa

cmServerProtocol: fix test of empty values

If a required value is in the cache, it is not necessary to set it
explicitly.

Fixes: #16948, #16988
Daniel Pfeifer 8 ani în urmă
părinte
comite
187332b2fa
2 a modificat fișierele cu 11 adăugiri și 8 ștergeri
  1. 3 1
      Help/manual/cmake-server.7.rst
  2. 8 7
      Source/cmServerProtocol.cxx

+ 3 - 1
Help/manual/cmake-server.7.rst

@@ -277,7 +277,9 @@ Giving the "major" version of the requested protocol version will make the serve
 use the latest minor version of that protocol. Use this if you do not explicitly
 use the latest minor version of that protocol. Use this if you do not explicitly
 need to depend on a specific minor version.
 need to depend on a specific minor version.
 
 
-Each protocol version may request additional attributes to be present.
+If the build directory already contains a CMake cache, it is sufficient to set
+the "buildDirectory" attribute. To create a fresh build directory, additional
+attributes are required depending on the protocol version.
 
 
 Protocol version 1.0 requires the following attributes to be set:
 Protocol version 1.0 requires the following attributes to be set:
 
 

+ 8 - 7
Source/cmServerProtocol.cxx

@@ -269,6 +269,10 @@ static bool testHomeDirectory(cmState* state, std::string& value,
 {
 {
   const std::string cachedValue =
   const std::string cachedValue =
     std::string(state->GetCacheEntryValue("CMAKE_HOME_DIRECTORY"));
     std::string(state->GetCacheEntryValue("CMAKE_HOME_DIRECTORY"));
+  if (value.empty()) {
+    value = cachedValue;
+    return true;
+  }
   const std::string suffix = "/CMakeLists.txt";
   const std::string suffix = "/CMakeLists.txt";
   const std::string cachedValueCML = cachedValue + suffix;
   const std::string cachedValueCML = cachedValue + suffix;
   const std::string valueCML = value + suffix;
   const std::string valueCML = value + suffix;
@@ -279,9 +283,6 @@ static bool testHomeDirectory(cmState* state, std::string& value,
                                 "source directory value."));
                                 "source directory value."));
     return false;
     return false;
   }
   }
-  if (value.empty()) {
-    value = cachedValue;
-  }
   return true;
   return true;
 }
 }
 
 
@@ -292,15 +293,15 @@ static bool testValue(cmState* state, const std::string& key,
   const char* entry = state->GetCacheEntryValue(key);
   const char* entry = state->GetCacheEntryValue(key);
   const std::string cachedValue =
   const std::string cachedValue =
     entry == nullptr ? std::string() : std::string(entry);
     entry == nullptr ? std::string() : std::string(entry);
-  if (!cachedValue.empty() && !value.empty() && cachedValue != value) {
+  if (value.empty()) {
+    value = cachedValue;
+  }
+  if (!cachedValue.empty() && cachedValue != value) {
     setErrorMessage(errorMessage, std::string("\"") + key +
     setErrorMessage(errorMessage, std::string("\"") + key +
                       "\" is set but incompatible with configured " +
                       "\" is set but incompatible with configured " +
                       keyDescription + " value.");
                       keyDescription + " value.");
     return false;
     return false;
   }
   }
-  if (value.empty()) {
-    value = cachedValue;
-  }
   return true;
   return true;
 }
 }