[Cmake-commits] [cmake-commits] king committed cmVisualStudio10TargetGenerator.cxx 1.14 1.15 cmVisualStudio10TargetGenerator.h 1.6 1.7
cmake-commits at cmake.org
cmake-commits at cmake.org
Mon Sep 7 10:12:19 EDT 2009
Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv15910/Source
Modified Files:
cmVisualStudio10TargetGenerator.cxx
cmVisualStudio10TargetGenerator.h
Log Message:
Put custom commands in topological order for VS 10
Visual Studio 10 uses MSBuild to drive the build. Custom commands
appear in MSBuild files inside CustomBuild elements, which appear inside
ItemGroup elements. The Outputs and AdditionalInputs elements of each
CustomBuild element are evaluated according to timestamps on disk.
MSBuild does not use inputs/outputs to order CustomBuild steps within a
single ItemGroup or across multiple ItemGroup elements. Instead we must
put only unrelated CustomBuild elements in a single ItemGroup and order
the item groups from top to bottom using a topological order of the
custom command dependency graph.
This fixes CustomCommand and ExternalProject test failures, so we remove
the expectation of these failures.
Index: cmVisualStudio10TargetGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmVisualStudio10TargetGenerator.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -C 2 -d -r1.6 -r1.7
*** cmVisualStudio10TargetGenerator.h 13 Jul 2009 20:58:24 -0000 1.6
--- cmVisualStudio10TargetGenerator.h 7 Sep 2009 14:12:17 -0000 1.7
***************
*** 67,70 ****
--- 67,71 ----
cmCustomCommand const & command);
void WriteCustomCommands();
+ void WriteCustomCommand(cmSourceFile* sf);
void WriteGroups();
void WriteProjectReferences();
***************
*** 90,93 ****
--- 91,95 ----
cmGeneratedFileStream* BuildFileStream;
cmLocalVisualStudio7Generator* LocalGenerator;
+ std::set<cmSourceFile*> SourcesVisited;
};
Index: cmVisualStudio10TargetGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmVisualStudio10TargetGenerator.cxx,v
retrieving revision 1.14
retrieving revision 1.15
diff -C 2 -d -r1.14 -r1.15
*** cmVisualStudio10TargetGenerator.cxx 7 Sep 2009 14:11:20 -0000 1.14
--- cmVisualStudio10TargetGenerator.cxx 7 Sep 2009 14:12:15 -0000 1.15
***************
*** 248,263 ****
void cmVisualStudio10TargetGenerator::WriteCustomCommands()
! {
! this->WriteString("<ItemGroup>\n", 1);
! std::vector<cmSourceFile*>const & sources = this->Target->GetSourceFiles();
for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
source != sources.end(); ++source)
{
! if(cmCustomCommand const* command = (*source)->GetCustomCommand())
{
! this->WriteCustomRule(*source, *command);
}
! }
! this->WriteString("</ItemGroup>\n", 1);
}
--- 248,283 ----
void cmVisualStudio10TargetGenerator::WriteCustomCommands()
! {
! this->SourcesVisited.clear();
! std::vector<cmSourceFile*> const& sources = this->Target->GetSourceFiles();
for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
source != sources.end(); ++source)
{
! cmSourceFile* sf = *source;
! this->WriteCustomCommand(sf);
! }
! }
!
! //----------------------------------------------------------------------------
! void cmVisualStudio10TargetGenerator::WriteCustomCommand(cmSourceFile* sf)
! {
! if(this->SourcesVisited.insert(sf).second)
! {
! if(std::vector<cmSourceFile*> const* depends =
! this->Target->GetSourceDepends(sf))
{
! for(std::vector<cmSourceFile*>::const_iterator di = depends->begin();
! di != depends->end(); ++di)
! {
! this->WriteCustomCommand(*di);
! }
}
! if(cmCustomCommand const* command = sf->GetCustomCommand())
! {
! this->WriteString("<ItemGroup>\n", 1);
! this->WriteCustomRule(sf, *command);
! this->WriteString("</ItemGroup>\n", 1);
! }
! }
}
More information about the Cmake-commits
mailing list