mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-12 09:08:58 -05:00
Merge topic 'file-set-source-group' into release-3.24
970052feddFILE_SET: Fix source group detectionbcc3965813Tests: 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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user