diff --git a/Source/cmOptionCommand.cxx b/Source/cmOptionCommand.cxx index a86ad2292..8c3b55fb0 100644 --- a/Source/cmOptionCommand.cxx +++ b/Source/cmOptionCommand.cxx @@ -46,20 +46,29 @@ bool cmOptionCommand::InitialPass(std::vector 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; }