|  | @@ -83,77 +83,50 @@ bool cmLocalVisualStudioGenerator::SourceFileCompiles(const cmSourceFile* sf)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //----------------------------------------------------------------------------
 | 
	
		
			
				|  |  | -void cmLocalVisualStudioGenerator::CountObjectNames(
 | 
	
		
			
				|  |  | -    const std::vector<cmSourceGroup>& groups,
 | 
	
		
			
				|  |  | -    std::map<cmStdString, int>& counts)
 | 
	
		
			
				|  |  | +void
 | 
	
		
			
				|  |  | +cmLocalVisualStudioGenerator::ComputeObjectNameRequirements(
 | 
	
		
			
				|  |  | +  std::vector<cmSourceFile*> const& sources
 | 
	
		
			
				|  |  | +  )
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  for(unsigned int i = 0; i < groups.size(); ++i)
 | 
	
		
			
				|  |  | +  // Clear the current set of requirements.
 | 
	
		
			
				|  |  | +  this->NeedObjectName.clear();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Count the number of object files with each name.  Note that
 | 
	
		
			
				|  |  | +  // windows file names are not case sensitive.
 | 
	
		
			
				|  |  | +  std::map<cmStdString, int> counts;
 | 
	
		
			
				|  |  | +  for(std::vector<cmSourceFile*>::const_iterator s = sources.begin();
 | 
	
		
			
				|  |  | +      s != sources.end(); ++s)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    cmSourceGroup sg = groups[i];
 | 
	
		
			
				|  |  | -    std::vector<const cmSourceFile*> const& srcs = sg.GetSourceFiles();
 | 
	
		
			
				|  |  | -    for(std::vector<const cmSourceFile*>::const_iterator s = srcs.begin();
 | 
	
		
			
				|  |  | -        s != srcs.end(); ++s)
 | 
	
		
			
				|  |  | +    const cmSourceFile* sf = *s;
 | 
	
		
			
				|  |  | +    if(this->SourceFileCompiles(sf))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -      const cmSourceFile* sf = *s;
 | 
	
		
			
				|  |  | -      if(this->SourceFileCompiles(sf))
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -        std::string objectName = cmSystemTools::LowerCase(
 | 
	
		
			
				|  |  | -            cmSystemTools::GetFilenameWithoutLastExtension(
 | 
	
		
			
				|  |  | -              sf->GetFullPath()));
 | 
	
		
			
				|  |  | -        objectName += ".obj";
 | 
	
		
			
				|  |  | -        counts[objectName] += 1;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +      std::string objectName = cmSystemTools::LowerCase(
 | 
	
		
			
				|  |  | +        cmSystemTools::GetFilenameWithoutLastExtension(
 | 
	
		
			
				|  |  | +          sf->GetFullPath()));
 | 
	
		
			
				|  |  | +      objectName += ".obj";
 | 
	
		
			
				|  |  | +      counts[objectName] += 1;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    this->CountObjectNames(sg.GetGroupChildren(), counts);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -//----------------------------------------------------------------------------
 | 
	
		
			
				|  |  | -void cmLocalVisualStudioGenerator::InsertNeedObjectNames(
 | 
	
		
			
				|  |  | -   const std::vector<cmSourceGroup>& groups,
 | 
	
		
			
				|  |  | -    std::map<cmStdString, int>& count)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  for(unsigned int i = 0; i < groups.size(); ++i)
 | 
	
		
			
				|  |  | +  // For all source files producing duplicate names we need unique
 | 
	
		
			
				|  |  | +  // object name computation.
 | 
	
		
			
				|  |  | +  for(std::vector<cmSourceFile*>::const_iterator s = sources.begin();
 | 
	
		
			
				|  |  | +      s != sources.end(); ++s)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    cmSourceGroup sg = groups[i];
 | 
	
		
			
				|  |  | -    std::vector<const cmSourceFile*> const& srcs = sg.GetSourceFiles();
 | 
	
		
			
				|  |  | -    for(std::vector<const cmSourceFile*>::const_iterator s = srcs.begin();
 | 
	
		
			
				|  |  | -        s != srcs.end(); ++s)
 | 
	
		
			
				|  |  | +    const cmSourceFile* sf = *s;
 | 
	
		
			
				|  |  | +    if(this->SourceFileCompiles(sf))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -      const cmSourceFile* sf = *s;
 | 
	
		
			
				|  |  | -      if(this->SourceFileCompiles(sf))
 | 
	
		
			
				|  |  | +      std::string objectName = cmSystemTools::LowerCase(
 | 
	
		
			
				|  |  | +         cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath()));
 | 
	
		
			
				|  |  | +      objectName += ".obj";
 | 
	
		
			
				|  |  | +      if(counts[objectName] > 1)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -        std::string objectName = cmSystemTools::LowerCase(
 | 
	
		
			
				|  |  | -           cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath()));
 | 
	
		
			
				|  |  | -        objectName += ".obj";
 | 
	
		
			
				|  |  | -        if(count[objectName] > 1)
 | 
	
		
			
				|  |  | -          {
 | 
	
		
			
				|  |  | -          this->NeedObjectName.insert(sf);
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | +        this->NeedObjectName.insert(sf);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    this->InsertNeedObjectNames(sg.GetGroupChildren(), count);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//----------------------------------------------------------------------------
 | 
	
		
			
				|  |  | -void cmLocalVisualStudioGenerator::ComputeObjectNameRequirements
 | 
	
		
			
				|  |  | -(std::vector<cmSourceGroup> const& sourceGroups)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  // Clear the current set of requirements.
 | 
	
		
			
				|  |  | -  this->NeedObjectName.clear();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // Count the number of object files with each name.  Note that
 | 
	
		
			
				|  |  | -  // windows file names are not case sensitive.
 | 
	
		
			
				|  |  | -  std::map<cmStdString, int> objectNameCounts;
 | 
	
		
			
				|  |  | -  this->CountObjectNames(sourceGroups, objectNameCounts);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // For all source files producing duplicate names we need unique
 | 
	
		
			
				|  |  | -  // object name computation.
 | 
	
		
			
				|  |  | -  this->InsertNeedObjectNames(sourceGroups, objectNameCounts);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  //----------------------------------------------------------------------------
 | 
	
		
			
				|  |  |  const char* cmLocalVisualStudioGenerator::ReportErrorLabel() const
 | 
	
		
			
				|  |  |  {
 |