install(): Properly ignore FILE_SETs that don't exist

Fixes: #22960
This commit is contained in:
Kyle Edwards 2022-02-17 14:43:06 -05:00
parent 9c81f2cb8b
commit 058b8a0bfb
3 changed files with 27 additions and 21 deletions

View File

@ -1077,29 +1077,30 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
if (!namelinkOnly) {
for (std::size_t i = 0; i < fileSetArgs.size(); i++) {
auto* fileSet = target.GetFileSet(fileSetArgs[i].GetFileSet());
auto interfaceFileSetEntries = cmExpandedList(target.GetSafeProperty(
cmTarget::GetInterfaceFileSetsPropertyName(fileSet->GetType())));
if (fileSet &&
std::find(
interfaceFileSetEntries.begin(), interfaceFileSetEntries.end(),
fileSetArgs[i].GetFileSet()) != interfaceFileSetEntries.end()) {
std::string destination;
if (fileSet->GetType() == "HEADERS"_s) {
destination = helper.GetIncludeDestination(&fileSetArgs[i]);
} else {
destination = fileSetArgs[i].GetDestination();
if (destination.empty()) {
status.SetError(
cmStrCat("TARGETS given no FILE_SET DESTINATION for target \"",
target.GetName(), "\" file set \"",
fileSet->GetName(), "\"."));
return false;
if (auto* fileSet = target.GetFileSet(fileSetArgs[i].GetFileSet())) {
auto interfaceFileSetEntries = cmExpandedList(target.GetSafeProperty(
cmTarget::GetInterfaceFileSetsPropertyName(fileSet->GetType())));
if (std::find(interfaceFileSetEntries.begin(),
interfaceFileSetEntries.end(),
fileSetArgs[i].GetFileSet()) !=
interfaceFileSetEntries.end()) {
std::string destination;
if (fileSet->GetType() == "HEADERS"_s) {
destination = helper.GetIncludeDestination(&fileSetArgs[i]);
} else {
destination = fileSetArgs[i].GetDestination();
if (destination.empty()) {
status.SetError(cmStrCat(
"TARGETS given no FILE_SET DESTINATION for target \"",
target.GetName(), "\" file set \"", fileSet->GetName(),
"\"."));
return false;
}
}
fileSetGenerators.push_back(CreateInstallFileSetGenerator(
helper, target, fileSet, destination, fileSetArgs[i]));
installsFileSet[i] = true;
}
fileSetGenerators.push_back(CreateInstallFileSetGenerator(
helper, target, fileSet, destination, fileSetArgs[i]));
installsFileSet[i] = true;
}
}
}

View File

@ -0,0 +1,4 @@
enable_language(C)
add_library(lib1 STATIC empty.c)
install(TARGETS lib1 FILE_SET a)

View File

@ -36,6 +36,7 @@ run_cmake(FileSetInstallMissingSetsInterface)
run_cmake(FileSetNoScope)
run_cmake(FileSetNoExistPrivate)
run_cmake(FileSetNoExistInterface)
run_cmake(FileSetNoExistInstall)
run_cmake(FileSetDirectories)
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0115=NEW)