diff options
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 34 | ||||
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.h | 2 | ||||
-rw-r--r-- | Tests/CMakeLists.txt | 9 |
3 files changed, 29 insertions, 16 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index e8aaf61..a335043 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -247,18 +247,38 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues() } void cmVisualStudio10TargetGenerator::WriteCustomCommands() -{ - this->WriteString("<ItemGroup>\n", 1); - std::vector<cmSourceFile*>const & sources = this->Target->GetSourceFiles(); +{ + this->SourcesVisited.clear(); + 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()) + 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)) { - this->WriteCustomRule(*source, *command); + for(std::vector<cmSourceFile*>::const_iterator di = depends->begin(); + di != depends->end(); ++di) + { + this->WriteCustomCommand(*di); + } } - } - this->WriteString("</ItemGroup>\n", 1); + if(cmCustomCommand const* command = sf->GetCustomCommand()) + { + this->WriteString("<ItemGroup>\n", 1); + this->WriteCustomRule(sf, *command); + this->WriteString("</ItemGroup>\n", 1); + } + } } void diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h index 7039cfb..f61cad2 100644 --- a/Source/cmVisualStudio10TargetGenerator.h +++ b/Source/cmVisualStudio10TargetGenerator.h @@ -66,6 +66,7 @@ private: void WriteCustomRule(cmSourceFile* source, cmCustomCommand const & command); void WriteCustomCommands(); + void WriteCustomCommand(cmSourceFile* sf); void WriteGroups(); void WriteProjectReferences(); bool OutputSourceSpecificFlags(cmSourceFile* source); @@ -89,6 +90,7 @@ private: cmGlobalVisualStudio7Generator* GlobalGenerator; cmGeneratedFileStream* BuildFileStream; cmLocalVisualStudio7Generator* LocalGenerator; + std::set<cmSourceFile*> SourcesVisited; }; #endif diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 6084e79..026b147 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -571,15 +571,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel IF("${PREVIOUS_TIMEOUT}" MATCHES NOTFOUND) SET_TESTS_PROPERTIES(ExternalProject PROPERTIES TIMEOUT 1000) ENDIF("${PREVIOUS_TIMEOUT}" MATCHES NOTFOUND) - # CustomCommand and ExternalProject fail because of this bug: - # http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=473709 - # so for this version of the compiler with the IDE expect failure - IF("${MSVC_VERSION}" EQUAL 1600 - AND "${CMAKE_TEST_GENERATOR}" - MATCHES "Visual Studio 10" ) - SET_TESTS_PROPERTIES(ExternalProject PROPERTIES WILL_FAIL TRUE) - SET_TESTS_PROPERTIES(CustomCommand PROPERTIES WILL_FAIL TRUE) - ENDIF() # do each of the tutorial steps FOREACH(STP RANGE 1 7) |