Browse Source

Fix problems with advanced not being marked.

Andy Cedilnik 23 years ago
parent
commit
577cf91945
3 changed files with 22 additions and 3 deletions
  1. 20 2
      Source/cmCacheManager.cxx
  2. 1 0
      Source/cmCacheManager.h
  3. 1 1
      Source/cmMarkAsAdvancedCommand.cxx

+ 20 - 2
Source/cmCacheManager.cxx

@@ -372,7 +372,7 @@ bool cmCacheManager::SaveCache(const char* path)
        !i.IsAtEnd(); i.Next())
     {
     CacheEntryType t = i.GetType();
-    bool advanced = i.GetPropertyAsBool("ADVANCED");
+    bool advanced = i.PropertyExists("ADVANCED");
     if ( advanced )
       {
       // Format is key:type=value
@@ -397,7 +397,8 @@ bool cmCacheManager::SaveCache(const char* path)
         {
         key = rkey;
         }
-      fout << key.c_str() << ":INTERNAL=1\n";        
+      fout << key.c_str() << ":INTERNAL="
+           << (i.GetPropertyAsBool("ADVANCED") ? "1" : "0") << "\n";
       }
     if(t == cmCacheManager::INTERNAL)
       {
@@ -676,3 +677,20 @@ void cmCacheManager::CacheIterator::SetProperty(const char* p, bool v)
   ent->m_Properties[p] = v ? "ON" : "OFF";
 }
 
+bool cmCacheManager::CacheIterator::PropertyExists(const char* property) const
+{
+  if ( !strcmp(property, "TYPE") || !strcmp(property, "VALUE") )
+    {
+    cmSystemTools::Error("Property \"", property, 
+                         "\" cannot be accessed through the PropertyExists()");
+    return false;
+    }
+  const CacheEntry* ent = &this->GetEntry();
+  std::map<cmStdString,cmStdString>::const_iterator it = 
+    ent->m_Properties.find(property);
+  if ( it == ent->m_Properties.end() )
+    {
+    return false;
+    }
+  return true;
+}

+ 1 - 0
Source/cmCacheManager.h

@@ -53,6 +53,7 @@ public:
       return m_Position->first.c_str(); } 
     const char* GetProperty(const char*) const ;
     bool GetPropertyAsBool(const char*) const ;
+    bool PropertyExists(const char*) const;
     void SetProperty(const char* property, const char* value);
     void SetProperty(const char* property, bool value);
     const char* GetValue() const { return this->GetEntry().m_Value.c_str(); }

+ 1 - 1
Source/cmMarkAsAdvancedCommand.cxx

@@ -56,7 +56,7 @@ bool cmMarkAsAdvancedCommand::InitialPass(std::vector<std::string> const& argsIn
       cmSystemTools::Error("This should never happen...");
       return false;
       }
-    if ( overwrite )
+    if ( !it.PropertyExists("ADVANCED") || overwrite )
       {
       it.SetProperty("ADVANCED", value);
       }