cmComputeLinkInformation: prepare Item consumers for OBJECT libraries

After b665966933 (cmComputeLinkInformation: track `OBJECT` library
dependencies, 2023-07-22), introduced in !8645 as a fix for #25112,
`OBJECT` libraries were tracked in a separate member to reduce the risk
of further regressions. This commit prepares consumers to handle
`OBJECT` libraries once they start appearing as link items.
This commit is contained in:
Ben Boeckel
2023-07-24 15:02:21 -04:00
parent 17dcd9424a
commit e166bbef7b
7 changed files with 16 additions and 5 deletions

View File

@@ -536,7 +536,7 @@ static void getCompatibleInterfaceProperties(
const cmComputeLinkInformation::ItemVector& deps = info->GetItems();
for (auto const& dep : deps) {
if (!dep.Target) {
if (!dep.Target || dep.Target->GetType() == cmStateEnums::OBJECT_LIBRARY) {
continue;
}
getPropertyContents(dep.Target, "COMPATIBLE_INTERFACE_BOOL",

View File

@@ -5858,7 +5858,7 @@ void cmGeneratorTarget::CheckPropertyCompatibility(
static const std::string strNumMax = "COMPATIBLE_INTERFACE_NUMBER_MAX";
for (auto const& dep : deps) {
if (!dep.Target) {
if (!dep.Target || dep.Target->GetType() == cmStateEnums::OBJECT_LIBRARY) {
continue;
}

View File

@@ -3598,6 +3598,13 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
continue;
}
for (auto const& libItem : cli->GetItems()) {
// Explicitly ignore OBJECT libraries as Xcode emulates them as static
// libraries without an artifact. Avoid exposing this to the rest of
// CMake's compilation model.
if (libItem.Target &&
libItem.Target->GetType() == cmStateEnums::OBJECT_LIBRARY) {
continue;
}
// We want to put only static libraries, dynamic libraries, frameworks
// and bundles that are built from targets that are not imported in "Link
// Binary With Libraries" build phase. Except if the target property

View File

@@ -65,7 +65,8 @@ void cmLinkLineComputer::ComputeLinkLibs(
ItemVector const& items = cli.GetItems();
for (auto const& item : items) {
if (item.Target &&
item.Target->GetType() == cmStateEnums::INTERFACE_LIBRARY) {
(item.Target->GetType() == cmStateEnums::INTERFACE_LIBRARY ||
item.Target->GetType() == cmStateEnums::OBJECT_LIBRARY)) {
continue;
}

View File

@@ -115,6 +115,7 @@ void cmLinkLineDeviceComputer::ComputeLinkLibraries(
switch (item.Target->GetType()) {
case cmStateEnums::SHARED_LIBRARY:
case cmStateEnums::MODULE_LIBRARY:
case cmStateEnums::OBJECT_LIBRARY:
case cmStateEnums::INTERFACE_LIBRARY:
skip = true;
break;

View File

@@ -1318,7 +1318,8 @@ void cmLocalVisualStudio7GeneratorInternals::OutputLibraries(
fout << (lib.HasFeature() ? lib.GetFormattedItem(rel).Value : rel)
<< " ";
} else if (!lib.Target ||
lib.Target->GetType() != cmStateEnums::INTERFACE_LIBRARY) {
(lib.Target->GetType() != cmStateEnums::INTERFACE_LIBRARY &&
lib.Target->GetType() != cmStateEnums::OBJECT_LIBRARY)) {
fout << lib.Value.Value << " ";
}
}

View File

@@ -4603,7 +4603,8 @@ void cmVisualStudio10TargetGenerator::AddLibraries(
: path);
}
} else if (!l.Target ||
l.Target->GetType() != cmStateEnums::INTERFACE_LIBRARY) {
(l.Target->GetType() != cmStateEnums::INTERFACE_LIBRARY &&
l.Target->GetType() != cmStateEnums::OBJECT_LIBRARY)) {
libVec.push_back(l.Value.Value);
}
}