Restore support for a custom source group for CMakeLists.txt

Since commit v3.11.0-rc1~467^2 (VS,Xcode: Add CMakeLists.txt sources
without mutating targets, 2017-10-18) we do not add `CMakeLists.txt` to
target sources but instead generate references to them directly.  This
accidentally dropped generation of the `.vcxproj.filters` entry for a
source group in which `CMakeLists.txt` is the only member.

Fixes: #18795
This commit is contained in:
Brad King
2019-01-14 08:25:12 -05:00
parent 848dc85187
commit 77303314dc
4 changed files with 45 additions and 0 deletions

View File

@@ -1419,6 +1419,14 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
groupsUsed.insert(sourceGroup); 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); this->AddMissingSourceGroups(groupsUsed, sourceGroups);
// Write out group file // Write out group file

View File

@@ -1,6 +1,7 @@
include(RunCMake) include(RunCMake)
run_cmake(ExplicitCMakeLists) run_cmake(ExplicitCMakeLists)
run_cmake(SourceGroupCMakeLists)
run_cmake(VsConfigurationType) run_cmake(VsConfigurationType)
run_cmake(VsTargetsFileReferences) run_cmake(VsTargetsFileReferences)

View File

@@ -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 "<Filter>CMakeListsSourceGroup</Filter>")
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 "<Filter.*Include=\"CMakeListsSourceGroup\"")
set(rule "${CMAKE_MATCH_1}")
if(foundFilter)
set(RunCMake_TEST_FAILED "Multiple copies of CMakeListsSourceGroup filter listed.")
return()
endif()
set(foundFilter 1)
endif()
endforeach()
if(NOT foundFileFilter)
set(RunCMake_TEST_FAILED "File filter for CMakeListsSourceGroup not found.")
endif()
if(NOT foundFilter)
set(RunCMake_TEST_FAILED "Filter CMakeListsSourceGroup not found.")
endif()

View File

@@ -0,0 +1,3 @@
set(CMAKE_CONFIGURATION_TYPES Debug)
add_custom_target(foo)
source_group("CMakeListsSourceGroup" FILES CMakeLists.txt)