diff options
author | Brad King <brad.king@kitware.com> | 2006-07-11 15:41:38 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2006-07-11 15:41:38 (GMT) |
commit | 9bf5af6e32570195b06df594c1cb07f8c7a6a83e (patch) | |
tree | ad72b8722793ae974c26b9b2138547f3cab62aae /Source/cmLocalVisualStudioGenerator.cxx | |
parent | c05b8fb993a4e92fded0d735a66063bb8b265630 (diff) | |
download | CMake-9bf5af6e32570195b06df594c1cb07f8c7a6a83e.zip CMake-9bf5af6e32570195b06df594c1cb07f8c7a6a83e.tar.gz CMake-9bf5af6e32570195b06df594c1cb07f8c7a6a83e.tar.bz2 |
ENH: Moved unique object file name computation from cmLocalUnixMakefileGenerator3 up to cmLocalGenerator for use by all generators. Created cmLocalVisualStudioGenerator as superclass for all VS generators. Implemented on-demand unique object file name computation for VS 7 generator to avoid slow compiles when all sources are in subdirectories.
Diffstat (limited to 'Source/cmLocalVisualStudioGenerator.cxx')
-rw-r--r-- | Source/cmLocalVisualStudioGenerator.cxx | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Source/cmLocalVisualStudioGenerator.cxx b/Source/cmLocalVisualStudioGenerator.cxx new file mode 100644 index 0000000..344fcc6 --- /dev/null +++ b/Source/cmLocalVisualStudioGenerator.cxx @@ -0,0 +1,89 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "cmLocalVisualStudioGenerator.h" + +#include "cmMakefile.h" +#include "cmSourceFile.h" +#include "cmSystemTools.h" + +//---------------------------------------------------------------------------- +cmLocalVisualStudioGenerator::cmLocalVisualStudioGenerator() +{ +} + +//---------------------------------------------------------------------------- +cmLocalVisualStudioGenerator::~cmLocalVisualStudioGenerator() +{ +} + +//---------------------------------------------------------------------------- +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. + std::map<cmStdString, int> objectNameCounts; + for(unsigned int i = 0; i < sourceGroups.size(); ++i) + { + cmSourceGroup sg = sourceGroups[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(!sf.GetCustomCommand() && + !sf.GetPropertyAsBool("HEADER_FILE_ONLY") && + !sf.GetPropertyAsBool("EXTERNAL_OBJECT")) + { + std::string objectName = + cmSystemTools::GetFilenameWithoutLastExtension( + sf.GetFullPath().c_str()); + objectName += ".obj"; + objectNameCounts[objectName] += 1; + } + } + } + + // For all source files producing duplicate names we need unique + // object name computation. + for(unsigned int i = 0; i < sourceGroups.size(); ++i) + { + cmSourceGroup sg = sourceGroups[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(!sf->GetCustomCommand() && + !sf->GetPropertyAsBool("HEADER_FILE_ONLY") && + !sf->GetPropertyAsBool("EXTERNAL_OBJECT")) + { + std::string objectName = + cmSystemTools::GetFilenameWithoutLastExtension( + sf->GetFullPath().c_str()); + objectName += ".obj"; + if(objectNameCounts[objectName] > 1) + { + this->NeedObjectName.insert(sf); + } + } + } + } +} |