Merge topic 'file-set-source-group' into release-3.24

970052fedd FILE_SET: Fix source group detection
bcc3965813 Tests: Fix VS10Project SourceGroupTreeCMakeLists check

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !7609
This commit is contained in:
Kyle Edwards
2022-08-25 13:14:13 +00:00
committed by Kitware Robot
8 changed files with 44 additions and 5 deletions
+1 -1
View File
@@ -1702,7 +1702,7 @@ void addFileSetEntry(cmGeneratorTarget const* headTarget,
}
bool found = false;
for (auto const& sg : headTarget->Makefile->GetSourceGroups()) {
if (sg.MatchesFiles(path)) {
if (sg.MatchChildrenFiles(path)) {
found = true;
break;
}
+15
View File
@@ -124,6 +124,21 @@ cmSourceGroup* cmSourceGroup::MatchChildrenFiles(const std::string& name)
return nullptr;
}
const cmSourceGroup* cmSourceGroup::MatchChildrenFiles(
const std::string& name) const
{
if (this->MatchesFiles(name)) {
return this;
}
for (const cmSourceGroup& group : this->Internal->GroupChildren) {
const cmSourceGroup* result = group.MatchChildrenFiles(name);
if (result) {
return result;
}
}
return nullptr;
}
cmSourceGroup* cmSourceGroup::MatchChildrenRegex(const std::string& name)
{
for (cmSourceGroup& group : this->Internal->GroupChildren) {
+6
View File
@@ -79,6 +79,12 @@ public:
*/
cmSourceGroup* MatchChildrenFiles(const std::string& name);
/**
* Check if the given name matches this group's explicit file list
* in children.
*/
const cmSourceGroup* MatchChildrenFiles(const std::string& name) const;
/**
* Check if the given name matches this group's regex in children.
*/
@@ -16,6 +16,7 @@ run_cmake(NoImpLib)
run_cmake(RuntimeLibrary)
run_cmake(SourceGroupCMakeLists)
run_cmake(SourceGroupTreeCMakeLists)
run_cmake(SourceGroupFileSet)
run_cmake(VsConfigurationType)
run_cmake(VsTargetsFileReferences)
run_cmake(VsCustomProps)
@@ -0,0 +1,13 @@
cmake_policy(SET CMP0011 NEW)
set(vcFiltersFile "${RunCMake_TEST_BINARY_DIR}/SourceGroupFileSet.vcxproj.filters")
if(NOT EXISTS "${vcFiltersFile}")
set(RunCMake_TEST_FAILED "Filters file ${vcFiltersFile} does not exist.")
return()
endif()
file(STRINGS "${vcFiltersFile}" lines)
include(${RunCMake_TEST_SOURCE_DIR}/SourceGroupHelpers.cmake)
find_source_group("${lines}" "Header Files\\SourceGroupFileSet")
@@ -0,0 +1,3 @@
add_library(SourceGroupFileSet INTERFACE)
target_sources(SourceGroupFileSet PUBLIC FILE_SET HEADERS FILES iface.h)
source_group("Header Files/SourceGroupFileSet" FILES iface.h)
@@ -1,8 +1,9 @@
function(find_source_group LINES NAME)
set(foundFileFilter 0)
set(foundFilter 0)
string(REPLACE "\\" "\\\\" regexName "${NAME}")
foreach(line IN LISTS LINES)
if(line MATCHES "<Filter>${NAME}</Filter>")
if(line MATCHES "<Filter>${regexName}</Filter>")
if(foundFileFilter)
set(RunCMake_TEST_FAILED "Multiple files listed with filter for ${NAME}." PARENT_SCOPE)
set(FILTER_FOUND 0 PARENT_SCOPE)
@@ -10,7 +11,7 @@ function(find_source_group LINES NAME)
endif()
set(foundFileFilter 1)
endif()
if(line MATCHES "<Filter.*Include=\"${NAME}\"")
if(line MATCHES "<Filter.*Include=\"${regexName}\"")
if(foundFilter)
set(RunCMake_TEST_FAILED "Multiple copies of ${NAME} filter listed." PARENT_SCOPE)
set(FILTER_FOUND 0 PARENT_SCOPE)
@@ -18,9 +18,9 @@ set(SOURCE_GROUPS_TO_FIND
"SourcesPrefix\\PrefixedNested"
)
foreach(GROUP_NAME IN LISTS ${SOURCE_GROUPS_TO_FIND})
foreach(GROUP_NAME IN LISTS SOURCE_GROUPS_TO_FIND)
find_source_group("${lines}" ${GROUP_NAME})
if(NOT ${FILTER_FOUND})
if(NOT FILTER_FOUND)
return()
endif()
endforeach()