|  | @@ -106,8 +106,17 @@ bool cmCacheManager::LoadCache(const char* path)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    return this->LoadCache(path,true);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  bool cmCacheManager::LoadCache(const char* path,
 | 
	
		
			
				|  |  |  			       bool internal)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  std::set<std::string> emptySet;
 | 
	
		
			
				|  |  | +  return this->LoadCache(path, internal, emptySet);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +bool cmCacheManager::LoadCache(const char* path,
 | 
	
		
			
				|  |  | +			       bool internal,
 | 
	
		
			
				|  |  | +			       std::set<std::string>& excludes)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::string cacheFile = path;
 | 
	
		
			
				|  |  |    cacheFile += "/CMakeCache.txt";
 | 
	
	
		
			
				|  | @@ -127,6 +136,9 @@ bool cmCacheManager::LoadCache(const char* path,
 | 
	
		
			
				|  |  |    cmRegularExpression reg("^([^:]*):([^=]*)=(.*[^\t ]|[\t ]*)[\t ]*$");
 | 
	
		
			
				|  |  |    // input line is:         "key":type=value
 | 
	
		
			
				|  |  |    cmRegularExpression regQuoted("^\"([^\"]*)\":([^=]*)=(.*[^\t ]|[\t ]*)[\t ]*$");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  std::set<std::string>::const_iterator iter;
 | 
	
		
			
				|  |  | +  std::string entryKey;
 | 
	
		
			
				|  |  |    while(fin)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |      // Format is key:type=value
 | 
	
	
		
			
				|  | @@ -148,22 +160,44 @@ bool cmCacheManager::LoadCache(const char* path,
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      if(regQuoted.find(buffer))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -      e.m_Type = cmCacheManager::StringToType(regQuoted.match(2).c_str());
 | 
	
		
			
				|  |  | -      // only load internal values if internal is set
 | 
	
		
			
				|  |  | -      if (internal || e.m_Type != INTERNAL)
 | 
	
		
			
				|  |  | +      entryKey = regQuoted.match(1);
 | 
	
		
			
				|  |  | +      if ( excludes.find(entryKey) == excludes.end() )
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  | +	e.m_Type = cmCacheManager::StringToType(regQuoted.match(2).c_str());
 | 
	
		
			
				|  |  | +	// only load internal values if internal is set
 | 
	
		
			
				|  |  | +	if (internal || e.m_Type != INTERNAL)
 | 
	
		
			
				|  |  | +	  {
 | 
	
		
			
				|  |  | +	  // If we are loading the cache from another project,
 | 
	
		
			
				|  |  | +	  // make all loaded entries internal so that it is
 | 
	
		
			
				|  |  | +	  // not visible in the gui
 | 
	
		
			
				|  |  | +	  if (!internal)
 | 
	
		
			
				|  |  | +	    {
 | 
	
		
			
				|  |  | +	    e.m_Type = INTERNAL;
 | 
	
		
			
				|  |  | +	    }
 | 
	
		
			
				|  |  |  	  e.m_Value = regQuoted.match(3);
 | 
	
		
			
				|  |  | -	  m_Cache[regQuoted.match(1)] = e;
 | 
	
		
			
				|  |  | +	  m_Cache[entryKey] = e;
 | 
	
		
			
				|  |  | +	  }
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      else if (reg.find(buffer))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -      e.m_Type = cmCacheManager::StringToType(reg.match(2).c_str());
 | 
	
		
			
				|  |  | -      // only load internal values if internal is set
 | 
	
		
			
				|  |  | -      if (internal || e.m_Type != INTERNAL)
 | 
	
		
			
				|  |  | +      entryKey = reg.match(1);
 | 
	
		
			
				|  |  | +      if ( excludes.find(entryKey) == excludes.end() )
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  | +	e.m_Type = cmCacheManager::StringToType(reg.match(2).c_str());
 | 
	
		
			
				|  |  | +	// only load internal values if internal is set
 | 
	
		
			
				|  |  | +	if (internal || e.m_Type != INTERNAL)
 | 
	
		
			
				|  |  | +	  {
 | 
	
		
			
				|  |  | +	  // If we are loading the cache from another project,
 | 
	
		
			
				|  |  | +	  // make all loaded entries internal so that it is
 | 
	
		
			
				|  |  | +	  // not visible in the gui
 | 
	
		
			
				|  |  | +	  if (!internal)
 | 
	
		
			
				|  |  | +	    {
 | 
	
		
			
				|  |  | +	    e.m_Type = INTERNAL;
 | 
	
		
			
				|  |  | +	    }
 | 
	
		
			
				|  |  |  	  e.m_Value = reg.match(3);
 | 
	
		
			
				|  |  | -	  m_Cache[reg.match(1)] = e;
 | 
	
		
			
				|  |  | +	  m_Cache[entryKey] = e;
 | 
	
		
			
				|  |  | +	  }
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      else
 |