Jelajahi Sumber

Merge topic 'expose-cache-properties'

63c0e92c cmState: Expose list of properties of values in the cache
6eee2463 cmCacheEntry: Retrieve all properties of cache entries
120899c6 cmPropertyList: Add a way to retrieve all properties
7066218e cmake: Kill cmake::CacheManager and its getter
Brad King 9 tahun lalu
induk
melakukan
473634eb1c

+ 10 - 0
Source/cmCacheManager.cxx

@@ -540,6 +540,11 @@ void cmCacheManager::CacheIterator::Next()
   }
 }
 
+std::vector<std::string> cmCacheManager::CacheIterator::GetPropertyList() const
+{
+  return this->GetEntry().GetPropertyList();
+}
+
 void cmCacheManager::CacheIterator::SetValue(const char* value)
 {
   if (this->IsAtEnd()) {
@@ -559,6 +564,11 @@ bool cmCacheManager::CacheIterator::GetValueAsBool() const
   return cmSystemTools::IsOn(this->GetEntry().Value.c_str());
 }
 
+std::vector<std::string> cmCacheManager::CacheEntry::GetPropertyList() const
+{
+  return this->Properties.GetPropertyList();
+}
+
 const char* cmCacheManager::CacheEntry::GetProperty(
   const std::string& prop) const
 {

+ 2 - 0
Source/cmCacheManager.h

@@ -38,6 +38,7 @@ private:
     std::string Value;
     cmState::CacheEntryType Type;
     cmPropertyMap Properties;
+    std::vector<std::string> GetPropertyList() const;
     const char* GetProperty(const std::string&) const;
     void SetProperty(const std::string& property, const char* value);
     void AppendProperty(const std::string& property, const char* value,
@@ -60,6 +61,7 @@ public:
     bool IsAtEnd() const;
     void Next();
     std::string GetName() const { return this->Position->first; }
+    std::vector<std::string> GetPropertyList() const;
     const char* GetProperty(const std::string&) const;
     bool GetPropertyAsBool(const std::string&) const;
     bool PropertyExists(const std::string&) const;

+ 12 - 0
Source/cmPropertyMap.cxx

@@ -15,6 +15,7 @@
 #include "cmSystemTools.h"
 #include "cmake.h"
 
+#include <algorithm>
 #include <assert.h>
 
 cmProperty* cmPropertyMap::GetOrCreateProperty(const std::string& name)
@@ -29,6 +30,17 @@ cmProperty* cmPropertyMap::GetOrCreateProperty(const std::string& name)
   return prop;
 }
 
+std::vector<std::string> cmPropertyMap::GetPropertyList() const
+{
+  std::vector<std::string> keyList;
+  for (cmPropertyMap::const_iterator i = this->begin(), e = this->end();
+       i != e; ++i) {
+    keyList.push_back(i->first);
+  }
+  std::sort(keyList.begin(), keyList.end());
+  return keyList;
+}
+
 void cmPropertyMap::SetProperty(const std::string& name, const char* value)
 {
   if (!value) {

+ 2 - 0
Source/cmPropertyMap.h

@@ -19,6 +19,8 @@ class cmPropertyMap : public std::map<std::string, cmProperty>
 public:
   cmProperty* GetOrCreateProperty(const std::string& name);
 
+  std::vector<std::string> GetPropertyList() const;
+
   void SetProperty(const std::string& name, const char* value);
 
   void AppendProperty(const std::string& name, const char* value,

+ 8 - 0
Source/cmState.cxx

@@ -246,6 +246,14 @@ void cmState::SetCacheEntryBoolProperty(std::string const& key,
   it.SetProperty(propertyName, value);
 }
 
+std::vector<std::string> cmState::GetCacheEntryPropertyList(
+  const std::string& key)
+{
+  cmCacheManager::CacheIterator it =
+    this->CacheManager->GetCacheIterator(key.c_str());
+  return it.GetPropertyList();
+}
+
 const char* cmState::GetCacheEntryProperty(std::string const& key,
                                            std::string const& propertyName)
 {

+ 1 - 0
Source/cmState.h

@@ -247,6 +247,7 @@ public:
                              std::string const& value);
   void SetCacheEntryBoolProperty(std::string const& key,
                                  std::string const& propertyName, bool value);
+  std::vector<std::string> GetCacheEntryPropertyList(std::string const& key);
   const char* GetCacheEntryProperty(std::string const& key,
                                     std::string const& propertyName);
   bool GetCacheEntryPropertyAsBool(std::string const& key,

+ 0 - 4
Source/cmake.h

@@ -209,9 +209,6 @@ public:
     return this->GeneratorToolset;
   }
 
-  ///! get the cmCachemManager used by this invocation of cmake
-  cmCacheManager* GetCacheManager() { return this->CacheManager; }
-
   const std::vector<std::string>& GetSourceExtensions() const
   {
     return this->SourceFileExtensions;
@@ -423,7 +420,6 @@ protected:
                          CreateExtraGeneratorFunctionType newFunction);
 
   cmGlobalGenerator* GlobalGenerator;
-  cmCacheManager* CacheManager;
   std::map<std::string, DiagLevel> DiagLevels;
   std::string GeneratorPlatform;
   std::string GeneratorToolset;