summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx34
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h2
-rw-r--r--Tests/CMakeLists.txt9
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)