From 1b764b6816ebfd634d0cdfd1a9968ae1e147d402 Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Wed, 1 Oct 2025 11:52:00 +1000 Subject: [PATCH] cmLinkItem: Remove redundant cmLinkImplItem class The cmLinkImplItem class used to contain some additional members to support the CMP0027 policy. Since the CMP0027 policy and those associated members were removed, the cmLinkImplItem class has been a plain wrapper around cmLinkItem with no additional members. It is no longer needed and cmLinkItem can be used directly wherever cmLinkImplItem was used previously. --- Source/cmComputeTargetDepends.cxx | 2 +- Source/cmEvaluatedTargetProperty.cxx | 10 +-- Source/cmEvaluatedTargetProperty.h | 7 +-- Source/cmGeneratorExpressionNode.cxx | 2 +- Source/cmGeneratorTarget.h | 11 ++-- .../cmGeneratorTarget_IncludeDirectories.cxx | 6 +- Source/cmGeneratorTarget_Link.cxx | 63 ++++++------------- Source/cmGeneratorTarget_LinkDirectories.cxx | 2 +- Source/cmGeneratorTarget_Sources.cxx | 4 +- .../cmGeneratorTarget_TargetPropertyEntry.cxx | 14 ++--- Source/cmLinkItem.cxx | 5 -- Source/cmLinkItem.h | 11 +--- Source/cmLinkLineDeviceComputer.cxx | 2 +- 13 files changed, 52 insertions(+), 87 deletions(-) diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx index 02a8a3e2d6..986a314c52 100644 --- a/Source/cmComputeTargetDepends.cxx +++ b/Source/cmComputeTargetDepends.cxx @@ -221,7 +221,7 @@ void cmComputeTargetDepends::CollectTargetDepends(size_t depender_index) if (cmLinkImplementation const* impl = depender->GetLinkImplementation( it, cmGeneratorTarget::UseTo::Link)) { - for (cmLinkImplItem const& lib : impl->Libraries) { + for (cmLinkItem const& lib : impl->Libraries) { // Don't emit the same library twice for this target. if (emitted.insert(lib).second) { this->AddTargetDepend(depender_index, lib, true, false); diff --git a/Source/cmEvaluatedTargetProperty.cxx b/Source/cmEvaluatedTargetProperty.cxx index 7112a9ba69..f786985bb8 100644 --- a/Source/cmEvaluatedTargetProperty.cxx +++ b/Source/cmEvaluatedTargetProperty.cxx @@ -14,8 +14,8 @@ struct cmGeneratorExpressionDAGChecker; EvaluatedTargetPropertyEntry::EvaluatedTargetPropertyEntry( - cmLinkImplItem const& item, cmListFileBacktrace bt) - : LinkImplItem(item) + cmLinkItem const& item, cmListFileBacktrace bt) + : LinkItem(item) , Backtrace(std::move(bt)) { } @@ -25,7 +25,7 @@ EvaluatedTargetPropertyEntry EvaluateTargetPropertyEntry( cmGeneratorExpressionDAGChecker* dagChecker, cmGeneratorTarget::TargetPropertyEntry& entry) { - EvaluatedTargetPropertyEntry ee(entry.LinkImplItem, entry.GetBacktrace()); + EvaluatedTargetPropertyEntry ee(entry.LinkItem, entry.GetBacktrace()); cmExpandList(entry.Evaluate(context, thisTarget, dagChecker), ee.Values); if (entry.GetHadContextSensitiveCondition()) { ee.ContextDependent = true; @@ -55,9 +55,9 @@ void addInterfaceEntry(cmGeneratorTarget const* headTarget, cmGeneratorExpressionDAGChecker* dagChecker, EvaluatedTargetPropertyEntries& entries, cmGeneratorTarget::UseTo usage, - std::vector const& libraries) + std::vector const& libraries) { - for (cmLinkImplItem const& lib : libraries) { + for (cmLinkItem const& lib : libraries) { if (lib.Target) { EvaluatedTargetPropertyEntry ee(lib, lib.Backtrace); // Pretend $ appeared in our diff --git a/Source/cmEvaluatedTargetProperty.h b/Source/cmEvaluatedTargetProperty.h index 4ab4af48cd..1ffbec46de 100644 --- a/Source/cmEvaluatedTargetProperty.h +++ b/Source/cmEvaluatedTargetProperty.h @@ -15,15 +15,14 @@ struct Context; } } -class cmLinkImplItem; +class cmLinkItem; struct cmGeneratorExpressionDAGChecker; // Represent a target property entry after evaluating generator expressions // and splitting up lists. struct EvaluatedTargetPropertyEntry { - EvaluatedTargetPropertyEntry(cmLinkImplItem const& item, - cmListFileBacktrace bt); + EvaluatedTargetPropertyEntry(cmLinkItem const& item, cmListFileBacktrace bt); // Move-only. EvaluatedTargetPropertyEntry(EvaluatedTargetPropertyEntry&&) = default; @@ -33,7 +32,7 @@ struct EvaluatedTargetPropertyEntry EvaluatedTargetPropertyEntry& operator=( EvaluatedTargetPropertyEntry const&) = delete; - cmLinkImplItem const& LinkImplItem; + cmLinkItem const& LinkItem; cmListFileBacktrace Backtrace; std::vector Values; bool ContextDependent = false; diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index fb565883f0..b8bf6a3598 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -2921,7 +2921,7 @@ static std::string getLinkedTargetsContent( if (cmLinkImplementationLibraries const* impl = target->GetLinkImplementationLibraries( eval->Context.Config, cmGeneratorTarget::UseTo::Compile)) { - for (cmLinkImplItem const& lib : impl->Libraries) { + for (cmLinkItem const& lib : impl->Libraries) { if (lib.Target) { // Pretend $ appeared in our // caller's property and hand-evaluate it as if it were compiled. diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index a61a776bd0..6fe789ed64 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -1456,6 +1456,9 @@ private: cmValue GetPropertyWithPairedLanguageSupport(std::string const& lang, char const* suffix) const; + std::vector ComputeImplicitLanguageTargets( + std::string const& lang, std::string const& config) const; + void ComputeLinkImplementationRuntimeLibraries( std::string const& config, cmOptionalLinkImplementation& impl) const; @@ -1568,10 +1571,10 @@ private: class cmGeneratorTarget::TargetPropertyEntry { protected: - static cmLinkImplItem NoLinkImplItem; + static cmLinkItem NoLinkItem; public: - TargetPropertyEntry(cmLinkImplItem const& item); + TargetPropertyEntry(cmLinkItem const& item); virtual ~TargetPropertyEntry() = default; static std::unique_ptr Create( @@ -1580,7 +1583,7 @@ public: static std::unique_ptr CreateFileSet( std::vector dirs, bool contextSensitiveDirs, std::unique_ptr entryCge, - cmFileSet const* fileSet, cmLinkImplItem const& item = NoLinkImplItem); + cmFileSet const* fileSet, cmLinkItem const& item = NoLinkItem); virtual std::string const& Evaluate( cm::GenEx::Context const& context, cmGeneratorTarget const* headTarget, @@ -1590,5 +1593,5 @@ public: virtual std::string const& GetInput() const = 0; virtual bool GetHadContextSensitiveCondition() const; - cmLinkImplItem const& LinkImplItem; + cmLinkItem const& LinkItem; }; diff --git a/Source/cmGeneratorTarget_IncludeDirectories.cxx b/Source/cmGeneratorTarget_IncludeDirectories.cxx index fb6b0c1396..1cd101e7f1 100644 --- a/Source/cmGeneratorTarget_IncludeDirectories.cxx +++ b/Source/cmGeneratorTarget_IncludeDirectories.cxx @@ -105,7 +105,7 @@ void AddLangSpecificImplicitIncludeDirectories( target, propertyName, nullptr, nullptr, context, target->GetBacktrace(), }; - for (cmLinkImplItem const& library : libraries->Libraries) { + for (cmLinkItem const& library : libraries->Libraries) { if (cmGeneratorTarget const* dependency = library.Target) { if (!dependency->IsInBuildSystem()) { continue; @@ -146,7 +146,7 @@ void processIncludeDirectories(cmGeneratorTarget const* tgt, bool debugIncludes) { for (EvaluatedTargetPropertyEntry& entry : entries.Entries) { - cmLinkImplItem const& item = entry.LinkImplItem; + cmLinkItem const& item = entry.LinkItem; std::string const& targetName = item.AsStr(); bool const fromImported = item.Target && item.Target->IsImported(); @@ -273,7 +273,7 @@ std::vector> cmGeneratorTarget::GetIncludeDirectories( if (this->IsApple()) { if (cmLinkImplementationLibraries const* impl = this->GetLinkImplementationLibraries(config, UseTo::Compile)) { - for (cmLinkImplItem const& lib : impl->Libraries) { + for (cmLinkItem const& lib : impl->Libraries) { std::string libDir; if (!lib.Target) { libDir = cmSystemTools::CollapseFullPath( diff --git a/Source/cmGeneratorTarget_Link.cxx b/Source/cmGeneratorTarget_Link.cxx index 4e43e6db9b..b52facbbc8 100644 --- a/Source/cmGeneratorTarget_Link.cxx +++ b/Source/cmGeneratorTarget_Link.cxx @@ -208,7 +208,7 @@ bool cmGeneratorTarget::ComputeLinkClosure(std::string const& config, // secondPass); cmTargetCollectLinkLanguages linkLangs(this, config, languages, this, secondPass); - for (cmLinkImplItem const& lib : impl->Libraries) { + for (cmLinkItem const& lib : impl->Libraries) { linkLangs.Visit(lib); } @@ -336,7 +336,7 @@ cmGeneratorTarget::GetLinkImplementationClosure(std::string const& config, this->GetLinkImplementationLibraries(config, usage); assert(impl); - for (cmLinkImplItem const& lib : impl->Libraries) { + for (cmLinkItem const& lib : impl->Libraries) { processILibs(config, this, lib, this->LocalGenerator->GetGlobalGenerator(), tgts, emitted, usage); @@ -384,7 +384,7 @@ void cmGeneratorTarget::CheckLinkLibraries() const // Check link the implementation for each generated configuration. for (auto const& impl : this->LinkImplMap) { - for (cmLinkImplItem const& item : impl.second.Libraries) { + for (cmLinkItem const& item : impl.second.Libraries) { if (!this->VerifyLinkItemColons(LinkItemRole::Implementation, item)) { return; } @@ -686,7 +686,7 @@ void cmGeneratorTarget::ComputeLinkInterface(std::string const& config, if (this->GetType() != cmStateEnums::INTERFACE_LIBRARY) { cmLinkImplementation const* impl = this->GetLinkImplementation(config, UseTo::Link, secondPass); - for (cmLinkImplItem const& lib : impl->Libraries) { + for (cmLinkItem const& lib : impl->Libraries) { if (emitted.insert(lib).second) { if (lib.Target) { // This is a runtime dependency on another shared library. @@ -813,54 +813,31 @@ void cmGeneratorTarget::ComputeLinkInterfaceLibraries( LinkInterfaceField::HeadExclude, iface); } -namespace { - -template -ReturnType constructItem(cmGeneratorTarget* target, - cmListFileBacktrace const& bt); - -template <> -inline cmLinkImplItem constructItem(cmGeneratorTarget* target, - cmListFileBacktrace const& bt) -{ - return cmLinkImplItem(cmLinkItem(target, false, bt)); -} - -template <> -inline cmLinkItem constructItem(cmGeneratorTarget* target, - cmListFileBacktrace const& bt) -{ - return cmLinkItem(target, false, bt); -} - -template -std::vector computeImplicitLanguageTargets( - std::string const& lang, std::string const& config, - cmGeneratorTarget const* currentTarget) +std::vector cmGeneratorTarget::ComputeImplicitLanguageTargets( + std::string const& lang, std::string const& config) const { cmListFileBacktrace bt; - std::vector result; - cmLocalGenerator* lg = currentTarget->GetLocalGenerator(); + std::vector result; + cmLocalGenerator* lg = this->GetLocalGenerator(); std::string const& runtimeLibrary = - currentTarget->GetRuntimeLinkLibrary(lang, config); - if (cmValue runtimeLinkOptions = currentTarget->Makefile->GetDefinition( + this->GetRuntimeLinkLibrary(lang, config); + if (cmValue runtimeLinkOptions = this->Makefile->GetDefinition( "CMAKE_" + lang + "_RUNTIME_LIBRARIES_" + runtimeLibrary)) { cmList libsList{ *runtimeLinkOptions }; result.reserve(libsList.size()); for (auto const& i : libsList) { cmGeneratorTarget::TargetOrString resolved = - currentTarget->ResolveTargetReference(i, lg); + this->ResolveTargetReference(i, lg); if (resolved.Target) { - result.emplace_back(constructItem(resolved.Target, bt)); + result.emplace_back(resolved.Target, false, bt); } } } return result; } -} void cmGeneratorTarget::ComputeLinkInterfaceRuntimeLibraries( std::string const& config, cmOptionalLinkInterface& iface) const @@ -869,9 +846,8 @@ void cmGeneratorTarget::ComputeLinkInterfaceRuntimeLibraries( if ((lang == "CUDA" || lang == "HIP") && iface.LanguageRuntimeLibraries.find(lang) == iface.LanguageRuntimeLibraries.end()) { - auto implicitTargets = - computeImplicitLanguageTargets(lang, config, this); - iface.LanguageRuntimeLibraries[lang] = std::move(implicitTargets); + iface.LanguageRuntimeLibraries[lang] = + this->ComputeImplicitLanguageTargets(lang, config); } } } @@ -883,9 +859,8 @@ void cmGeneratorTarget::ComputeLinkImplementationRuntimeLibraries( if ((lang == "CUDA" || lang == "HIP") && impl.LanguageRuntimeLibraries.find(lang) == impl.LanguageRuntimeLibraries.end()) { - auto implicitTargets = - computeImplicitLanguageTargets(lang, config, this); - impl.LanguageRuntimeLibraries[lang] = std::move(implicitTargets); + impl.LanguageRuntimeLibraries[lang] = + this->ComputeImplicitLanguageTargets(lang, config); } } } @@ -1093,7 +1068,7 @@ void TransitiveLinkImpl::Follow(cmGeneratorTarget const* target) void TransitiveLinkImpl::Compute() { // Save the original items and start with an empty list. - std::vector original = std::move(this->Impl.Libraries); + std::vector original = std::move(this->Impl.Libraries); // Avoid injecting any original items as usage requirements. // This gives LINK_LIBRARIES final control over the order @@ -1101,7 +1076,7 @@ void TransitiveLinkImpl::Compute() this->Emitted.insert(original.cbegin(), original.cend()); // Process each original item. - for (cmLinkImplItem& item : original) { + for (cmLinkItem& item : original) { // Inject direct dependencies listed in 'INTERFACE_LINK_LIBRARIES_DIRECT' // usage requirements before the item itself. this->Follow(item.Target); @@ -1114,7 +1089,7 @@ void TransitiveLinkImpl::Compute() // usage requirements found through any dependency above. this->Impl.Libraries.erase( std::remove_if(this->Impl.Libraries.begin(), this->Impl.Libraries.end(), - [this](cmLinkImplItem const& item) { + [this](cmLinkItem const& item) { return this->Excluded.find(item) != this->Excluded.end(); }), this->Impl.Libraries.end()); diff --git a/Source/cmGeneratorTarget_LinkDirectories.cxx b/Source/cmGeneratorTarget_LinkDirectories.cxx index 7b34b8f649..d6f1498195 100644 --- a/Source/cmGeneratorTarget_LinkDirectories.cxx +++ b/Source/cmGeneratorTarget_LinkDirectories.cxx @@ -36,7 +36,7 @@ void processLinkDirectories(cmGeneratorTarget const* tgt, bool debugDirectories) { for (EvaluatedTargetPropertyEntry& entry : entries.Entries) { - cmLinkImplItem const& item = entry.LinkImplItem; + cmLinkItem const& item = entry.LinkItem; std::string const& targetName = item.AsStr(); std::string usedDirectories; diff --git a/Source/cmGeneratorTarget_Sources.cxx b/Source/cmGeneratorTarget_Sources.cxx index b70874dedb..1171349390 100644 --- a/Source/cmGeneratorTarget_Sources.cxx +++ b/Source/cmGeneratorTarget_Sources.cxx @@ -55,7 +55,7 @@ void AddObjectEntries(cmGeneratorTarget const* headTarget, headTarget->GetLinkImplementationLibraries(context.Config, UseTo::Link)) { entries.HadContextSensitiveCondition = impl->HadContextSensitiveCondition; - for (cmLinkImplItem const& lib : impl->Libraries) { + for (cmLinkItem const& lib : impl->Libraries) { if (lib.Target && lib.Target->GetType() == cmStateEnums::OBJECT_LIBRARY) { std::string uniqueName = @@ -174,7 +174,7 @@ bool processSources(cmGeneratorTarget const* tgt, contextDependent = true; } - cmLinkImplItem const& item = entry.LinkImplItem; + cmLinkItem const& item = entry.LinkItem; std::string const& targetName = item.AsStr(); for (std::string& src : entry.Values) { diff --git a/Source/cmGeneratorTarget_TargetPropertyEntry.cxx b/Source/cmGeneratorTarget_TargetPropertyEntry.cxx index d90fa3739c..c2b2f43c9e 100644 --- a/Source/cmGeneratorTarget_TargetPropertyEntry.cxx +++ b/Source/cmGeneratorTarget_TargetPropertyEntry.cxx @@ -26,13 +26,13 @@ struct Context; class cmake; struct cmGeneratorExpressionDAGChecker; -cmLinkImplItem cmGeneratorTarget::TargetPropertyEntry::NoLinkImplItem; +cmLinkItem cmGeneratorTarget::TargetPropertyEntry::NoLinkItem; class TargetPropertyEntryString : public cmGeneratorTarget::TargetPropertyEntry { public: TargetPropertyEntryString(BT propertyValue, - cmLinkImplItem const& item = NoLinkImplItem) + cmLinkItem const& item = NoLinkItem) : cmGeneratorTarget::TargetPropertyEntry(item) , PropertyValue(std::move(propertyValue)) { @@ -62,7 +62,7 @@ class TargetPropertyEntryGenex : public cmGeneratorTarget::TargetPropertyEntry { public: TargetPropertyEntryGenex(std::unique_ptr cge, - cmLinkImplItem const& item = NoLinkImplItem) + cmLinkItem const& item = NoLinkItem) : cmGeneratorTarget::TargetPropertyEntry(item) , ge(std::move(cge)) { @@ -98,7 +98,7 @@ public: TargetPropertyEntryFileSet( std::vector dirs, bool contextSensitiveDirs, std::unique_ptr entryCge, - cmFileSet const* fileSet, cmLinkImplItem const& item = NoLinkImplItem) + cmFileSet const* fileSet, cmLinkItem const& item = NoLinkItem) : cmGeneratorTarget::TargetPropertyEntry(item) , BaseDirs(std::move(dirs)) , ContextSensitiveDirs(contextSensitiveDirs) @@ -171,15 +171,15 @@ std::unique_ptr cmGeneratorTarget::TargetPropertyEntry::CreateFileSet( std::vector dirs, bool contextSensitiveDirs, std::unique_ptr entryCge, - cmFileSet const* fileSet, cmLinkImplItem const& item) + cmFileSet const* fileSet, cmLinkItem const& item) { return cm::make_unique( std::move(dirs), contextSensitiveDirs, std::move(entryCge), fileSet, item); } cmGeneratorTarget::TargetPropertyEntry::TargetPropertyEntry( - cmLinkImplItem const& item) - : LinkImplItem(item) + cmLinkItem const& item) + : LinkItem(item) { } diff --git a/Source/cmLinkItem.cxx b/Source/cmLinkItem.cxx index 7f21fbe861..ff98221272 100644 --- a/Source/cmLinkItem.cxx +++ b/Source/cmLinkItem.cxx @@ -71,11 +71,6 @@ std::ostream& operator<<(std::ostream& os, cmLinkItem const& item) return os << item.AsStr(); } -cmLinkImplItem::cmLinkImplItem(cmLinkItem item) - : cmLinkItem(std::move(item)) -{ -} - namespace { cm::string_view const LL_BEGIN = " Libraries; + std::vector Libraries; // Object files linked directly in this configuration. std::vector Objects; @@ -124,7 +117,7 @@ struct cmLinkImplementation : public cmLinkImplementationLibraries { // Languages whose runtime libraries must be linked. std::vector Languages; - std::unordered_map> + std::unordered_map> LanguageRuntimeLibraries; // Whether the list depends on a link language genex. diff --git a/Source/cmLinkLineDeviceComputer.cxx b/Source/cmLinkLineDeviceComputer.cxx index 421aa54e71..5659492707 100644 --- a/Source/cmLinkLineDeviceComputer.cxx +++ b/Source/cmLinkLineDeviceComputer.cxx @@ -159,7 +159,7 @@ void cmLinkLineDeviceComputer::ComputeLinkLibraries( cli.GetTarget()->GetLinkImplementation(cli.GetConfig(), cmGeneratorTarget::UseTo::Link); - for (cmLinkImplItem const& iter : linkImpl->Libraries) { + for (cmLinkItem const& iter : linkImpl->Libraries) { if (iter.Target && iter.Target->GetType() != cmStateEnums::INTERFACE_LIBRARY) { std::string libPath = iter.Target->GetLocation(cli.GetConfig());