|  | @@ -170,17 +170,6 @@ void cmMakefile::PrintStringVector(const char* s, const std::vector<std::string>
 | 
	
		
			
				|  |  |    std::cout << " )\n";
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void cmMakefile::PrintStringVector(const char* s, const std::set<std::string>& v) const
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  std::cout << s << ": ( \n";
 | 
	
		
			
				|  |  | -  for(std::set<std::string>::const_iterator i = v.begin();
 | 
	
		
			
				|  |  | -      i != v.end(); ++i)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -    std::cout << (*i).c_str() << " ";
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  std::cout << " )\n";
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // call print on all the classes in the makefile
 | 
	
		
			
				|  |  |  void cmMakefile::Print() const
 | 
	
	
		
			
				|  | @@ -545,7 +534,15 @@ void cmMakefile::AddLinkLibrary(const char* lib)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmMakefile::AddLinkDirectory(const char* dir)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  m_LinkDirectories.insert(dir);
 | 
	
		
			
				|  |  | +  // Don't add a link directory that is already present.  Yes, this
 | 
	
		
			
				|  |  | +  // linear search results in n^2 behavior, but n won't be getting
 | 
	
		
			
				|  |  | +  // much bigger than 20.  We cannot use a set because of order
 | 
	
		
			
				|  |  | +  // dependency of the link search path.
 | 
	
		
			
				|  |  | +  if(std::find(m_LinkDirectories.begin(),
 | 
	
		
			
				|  |  | +               m_LinkDirectories.end(), dir) == m_LinkDirectories.end())
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    m_LinkDirectories.push_back(dir);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmMakefile::AddSubDirectory(const char* sub)
 | 
	
	
		
			
				|  | @@ -555,7 +552,15 @@ void cmMakefile::AddSubDirectory(const char* sub)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmMakefile::AddIncludeDirectory(const char* inc)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  m_IncludeDirectories.insert(inc);
 | 
	
		
			
				|  |  | +  // Don't add an include directory that is already present.  Yes,
 | 
	
		
			
				|  |  | +  // this linear search results in n^2 behavior, but n won't be
 | 
	
		
			
				|  |  | +  // getting much bigger than 20.  We cannot use a set because of
 | 
	
		
			
				|  |  | +  // order dependency of the include path.
 | 
	
		
			
				|  |  | +  if(std::find(m_IncludeDirectories.begin(),
 | 
	
		
			
				|  |  | +               m_IncludeDirectories.end(), inc) == m_IncludeDirectories.end())
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    m_IncludeDirectories.push_back(inc);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmMakefile::AddDefinition(const char* name, const char* value)
 | 
	
	
		
			
				|  | @@ -739,37 +744,20 @@ std::string cmMakefile::GetParentListFileName(const char *currentFileName)
 | 
	
		
			
				|  |  |  void cmMakefile::ExpandVariables()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    // Now expand varibles in the include and link strings
 | 
	
		
			
				|  |  | -  std::set<std::string>::iterator j, begin, end;
 | 
	
		
			
				|  |  | -  begin = m_IncludeDirectories.begin();
 | 
	
		
			
				|  |  | -  end = m_IncludeDirectories.end();
 | 
	
		
			
				|  |  | -  std::set<std::string> new_set;
 | 
	
		
			
				|  |  | -  std::string x;
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  for(j = begin; j != end; ++j)
 | 
	
		
			
				|  |  | +  for(std::vector<std::string>::iterator d = m_IncludeDirectories.begin();
 | 
	
		
			
				|  |  | +        d != m_IncludeDirectories.end(); ++d)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    x= *j;
 | 
	
		
			
				|  |  | -    this->ExpandVariablesInString(x);
 | 
	
		
			
				|  |  | -    new_set.insert(x);
 | 
	
		
			
				|  |  | +    this->ExpandVariablesInString(*d);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -  m_IncludeDirectories = new_set;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  new_set.clear();
 | 
	
		
			
				|  |  | -  begin = m_LinkDirectories.begin();
 | 
	
		
			
				|  |  | -  end = m_LinkDirectories.end();
 | 
	
		
			
				|  |  | -  for(j = begin; j != end; ++j)
 | 
	
		
			
				|  |  | +  for(std::vector<std::string>::iterator d = m_LinkDirectories.begin();
 | 
	
		
			
				|  |  | +        d != m_LinkDirectories.end(); ++d)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    x = *j;
 | 
	
		
			
				|  |  | -    this->ExpandVariablesInString(x);
 | 
	
		
			
				|  |  | -    new_set.insert(x);
 | 
	
		
			
				|  |  | +    this->ExpandVariablesInString(*d);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -  m_LinkDirectories = new_set;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  cmTarget::LinkLibraries::iterator j2, end2;
 | 
	
		
			
				|  |  | -  j2 = m_LinkLibraries.begin();
 | 
	
		
			
				|  |  | -  end2 = m_LinkLibraries.end();
 | 
	
		
			
				|  |  | -  for(; j2 != end2; ++j2)
 | 
	
		
			
				|  |  | +  for(cmTarget::LinkLibraries::iterator l = m_LinkLibraries.begin();
 | 
	
		
			
				|  |  | +      l != m_LinkLibraries.end(); ++l)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    this->ExpandVariablesInString(j2->first);
 | 
	
		
			
				|  |  | +    this->ExpandVariablesInString(l->first);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |