diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 5140648e10..655d6f02d8 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1450,6 +1450,14 @@ void cmVisualStudio10TargetGenerator::WriteGroups() groupsUsed.insert(sourceGroup); } + if (cmSourceFile const* srcCMakeLists = + this->LocalGenerator->CreateVCProjBuildRule()) { + std::string const& source = srcCMakeLists->GetFullPath(); + cmSourceGroup* sourceGroup = + this->Makefile->FindSourceGroup(source, sourceGroups); + groupsUsed.insert(sourceGroup); + } + this->AddMissingSourceGroups(groupsUsed, sourceGroups); // Write out group file diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index db375aee39..c79684023d 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -1,6 +1,7 @@ include(RunCMake) run_cmake(ExplicitCMakeLists) +run_cmake(SourceGroupCMakeLists) run_cmake(VsConfigurationType) run_cmake(VsTargetsFileReferences) diff --git a/Tests/RunCMake/VS10Project/SourceGroupCMakeLists-check.cmake b/Tests/RunCMake/VS10Project/SourceGroupCMakeLists-check.cmake new file mode 100644 index 0000000000..c2a94bbbe4 --- /dev/null +++ b/Tests/RunCMake/VS10Project/SourceGroupCMakeLists-check.cmake @@ -0,0 +1,33 @@ +set(vcFiltersFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj.filters") +if(NOT EXISTS "${vcFiltersFile}") + set(RunCMake_TEST_FAILED "Filters file ${vcFiltersFile} does not exist.") + return() +endif() + +set(foundFileFilter 0) +set(foundFilter 0) +file(STRINGS "${vcFiltersFile}" lines) +foreach(line IN LISTS lines) + if(line MATCHES "CMakeListsSourceGroup") + set(rule "${CMAKE_MATCH_1}") + if(foundFileFilter) + set(RunCMake_TEST_FAILED "Multiple files listed with filter for CMakeListsSourceGroup.") + return() + endif() + set(foundFileFilter 1) + endif() + if(line MATCHES "