Browse Source

BUG: fix doc string and allow a variable to be promoted from non-cache to cache

Bill Hoffman 23 years ago
parent
commit
eb6bba34cd
2 changed files with 11 additions and 8 deletions
  1. 9 7
      Source/cmSetCommand.cxx
  2. 2 1
      Source/cmSetCommand.h

+ 9 - 7
Source/cmSetCommand.cxx

@@ -107,19 +107,21 @@ bool cmSetCommand::InitialPass(std::vector<std::string> const& args)
     type = cmCacheManager::StringToType(args[cacheStart+1].c_str());
     docstring = args[cacheStart+2].c_str();
     }
-  // get the current cache value for the variable
-  const char* cacheValue = 
-    m_Makefile->GetDefinition(variable);
-  if(cacheValue)
+  // see if this is already in the cache
+  cmCacheManager::CacheIterator it = 
+    m_Makefile->GetCacheManager()->GetCacheIterator(variable);
+  if(!it.IsAtEnd())
     {
-    // if it is not a cached value, or it is a cached
-    // value that is not internal keep the value found
-    // in the cache
+    // if the set is trying to CACHE the value but the value
+    // is already in the cache and the type is not internal
+    // then leave now without setting any definitions in the cache
+    // or the makefile
     if(cache && type != cmCacheManager::INTERNAL)
       {
       return true;
       }
     }
+  
   // if it is meant to be in the cache then define it in the cache
   if(cache)
     {

+ 2 - 1
Source/cmSetCommand.h

@@ -70,7 +70,8 @@ public:
       "SET(VAR [VALUE] [CACHE TYPE DOCSTRING])\n"
       "Within CMAKE sets VAR to the value VALUE. VALUE is expanded before VAR "
       "is set to it. If CACHE is present, then the VAR is put in the cache."
-      " TYPE and DOCSTRING are required.  If TYPE is INTERNAL, then the "
+      " TYPE and DOCSTRING are required.  TYPE may be BOOL, PATH, FILEPATH, STRING, INTERNAL, "
+      "or STATIC.  If TYPE is INTERNAL, then the "
       " VALUE is Always written into the cache, replacing any values "
       "existing in the cache.  If it is not a CACHE VAR, then this always "
       "writes into the current makefile.\n"