Przeglądaj źródła

ERR: Fix problems with OPTION and -D on command line. Fix Bug #408 - Using -D without a type does not always work

Andy Cedilnik 22 lat temu
rodzic
commit
d97e79c971
1 zmienionych plików z 18 dodań i 9 usunięć
  1. 18 9
      Source/cmOptionCommand.cxx

+ 18 - 9
Source/cmOptionCommand.cxx

@@ -46,20 +46,29 @@ bool cmOptionCommand::InitialPass(std::vector<std::string> const& args)
     return false;
     }
   
+  std::string initialValue = "Off";
   // Now check and see if the value has been stored in the cache
   // already, if so use that value and don't look for the program
-  const char* cacheValue
-    = m_Makefile->GetDefinition(args[0].c_str());
-  if(!cacheValue)
+  cmCacheManager::CacheIterator it = 
+    m_Makefile->GetCacheManager()->GetCacheIterator(args[0].c_str());
+  if(!it.IsAtEnd())
     {
-    std::string initialValue = "Off";
-    if(args.size() == 3)
+    if ( it.GetType() != cmCacheManager::UNINITIALIZED )
       {
-      initialValue = args[2];
+      return true;
+      }
+    if ( it.GetValue() )
+      {
+      initialValue = it.GetValue();
       }
-    m_Makefile->AddCacheDefinition(args[0].c_str(),
-                                   cmSystemTools::IsOn(initialValue.c_str()),
-                                   args[1].c_str());
     }
+  if(args.size() == 3)
+    {
+    initialValue = args[2];
+    }
+  m_Makefile->AddCacheDefinition(args[0].c_str(),
+    cmSystemTools::IsOn(initialValue.c_str()),
+    args[1].c_str());
+
   return true;
 }