From cc42f1047bd0ba12d4b233124a3a4052adb626a5 Mon Sep 17 00:00:00 2001 From: Matthew Woehlke Date: Tue, 22 Jul 2025 11:20:10 -0400 Subject: [PATCH] cmTarget: Add origin property Add the concept of "origin" to cmTarget. For now, only CPS targets get a unique origin, but this might be expanded in the future. This will allow us to implement different behaviors based on a target's origin. In particular, this has been requested as a means of addressing #26998 and #27022. --- Source/cmPackageInfoReader.cxx | 1 + Source/cmTarget.cxx | 13 +++++++++++++ Source/cmTarget.h | 12 ++++++++++++ 3 files changed, 26 insertions(+) diff --git a/Source/cmPackageInfoReader.cxx b/Source/cmPackageInfoReader.cxx index cffd9be020..abf5e695dc 100644 --- a/Source/cmPackageInfoReader.cxx +++ b/Source/cmPackageInfoReader.cxx @@ -692,6 +692,7 @@ cmTarget* cmPackageInfoReader::AddLibraryComponent( { // Create the imported target. cmTarget* const target = makefile->AddImportedTarget(name, type, false); + target->SetOrigin(cmTarget::Origin::Cps); // Set default configurations. if (!this->DefaultConfigurations.empty()) { diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 8c4973a1f9..d9c4023129 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -589,6 +589,7 @@ class cmTargetInternals { public: cmStateEnums::TargetType TargetType; + cmTarget::Origin Origin = cmTarget::Origin::Unknown; cmMakefile* Makefile; cmPolicies::PolicyMap PolicyMap; cmTarget const* TemplateTarget; @@ -1112,6 +1113,18 @@ cmStateEnums::TargetType cmTarget::GetType() const return this->impl->TargetType; } +void cmTarget::SetOrigin(Origin origin) +{ + assert(origin != cmTarget::Origin::Unknown); + assert(this->impl->Origin == cmTarget::Origin::Unknown); + this->impl->Origin = origin; +} + +cmTarget::Origin cmTarget::GetOrigin() const +{ + return this->impl->Origin; +} + cmMakefile* cmTarget::GetMakefile() const { return this->impl->Makefile; diff --git a/Source/cmTarget.h b/Source/cmTarget.h index 2bddec5dda..4d75f45d3e 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -51,6 +51,12 @@ public: Foreign, }; + enum class Origin + { + Cps, + Unknown, + }; + enum class PerConfig { Yes, @@ -70,6 +76,12 @@ public: //! Return the type of target. cmStateEnums::TargetType GetType() const; + //! Set the origin of the target. + void SetOrigin(Origin origin); + + //! Return the origin of the target. + Origin GetOrigin() const; + //! Get the cmMakefile that owns this target. cmMakefile* GetMakefile() const;