diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2023-01-30 21:19:14 (GMT) |
---|---|---|
committer | Ben Boeckel <ben.boeckel@kitware.com> | 2023-02-14 17:23:15 (GMT) |
commit | 5b5869532145ff4425d7abfd09eaae6a638b6810 (patch) | |
tree | 7914bc6f0c7ef70f01a43c580c5bdb11ce859f88 /Source/cmTarget.cxx | |
parent | 283432a1aaa72cd0dc5c0bd0e301bccfd52edd01 (diff) | |
download | CMake-5b5869532145ff4425d7abfd09eaae6a638b6810.zip CMake-5b5869532145ff4425d7abfd09eaae6a638b6810.tar.gz CMake-5b5869532145ff4425d7abfd09eaae6a638b6810.tar.bz2 |
cmTarget: store visibility as an `enum` rather than bools
C++ modules are going to introduce a third concept of "synthesized"
targets, so update logic where needed to avoid assuming "not imported?
must be normal".
Also add an accessor method to perform queries against the visibility.
Diffstat (limited to 'Source/cmTarget.cxx')
-rw-r--r-- | Source/cmTarget.cxx | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index e8d66cc..8c71295 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -629,10 +629,9 @@ public: bool IsDLLPlatform; bool IsAIX; bool IsAndroid; - bool IsImportedTarget; - bool ImportedGloballyVisible; bool BuildInterfaceIncludesAppended; bool PerConfig; + cmTarget::Visibility TargetVisibility; std::set<BT<std::pair<std::string, bool>>> Utilities; std::vector<cmCustomCommand> PreBuildCommands; std::vector<cmCustomCommand> PreLinkCommands; @@ -667,6 +666,8 @@ public: cmTargetInternals(); + bool IsImported() const; + bool CheckImportedLibName(std::string const& prop, std::string const& value) const; @@ -914,9 +915,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, this->impl->IsDLLPlatform = false; this->impl->IsAIX = false; this->impl->IsAndroid = false; - this->impl->IsImportedTarget = - (vis == VisibilityImported || vis == VisibilityImportedGlobally); - this->impl->ImportedGloballyVisible = vis == VisibilityImportedGlobally; + this->impl->TargetVisibility = vis; this->impl->BuildInterfaceIncludesAppended = false; this->impl->PerConfig = (perConfig == PerConfig::Yes); @@ -939,7 +938,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, // Save the backtrace of target construction. this->impl->Backtrace = this->impl->Makefile->GetBacktrace(); - if (!this->IsImported()) { + if (this->IsNormal()) { // Initialize the INCLUDE_DIRECTORIES property based on the current value // of the same directory property: this->impl->IncludeDirectories.CopyFromDirectory( @@ -988,7 +987,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, if (this->impl->TargetType != cmStateEnums::UTILITY && this->impl->TargetType != cmStateEnums::GLOBAL_TARGET) { metConditions.insert(TargetProperty::InitCondition::NormalTarget); - if (!this->IsImported()) { + if (this->IsNormal()) { metConditions.insert( TargetProperty::InitCondition::NormalNonImportedTarget); } @@ -1091,7 +1090,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, } } - if (this->IsImported() || mf->GetPropertyAsBool("SYSTEM")) { + if (!this->IsNormal() || mf->GetPropertyAsBool("SYSTEM")) { this->SetProperty("SYSTEM", "ON"); } @@ -1863,8 +1862,8 @@ void cmTarget::StoreProperty(const std::string& prop, ValueType value) return; } /* no need to change anything if value does not change */ - if (!this->impl->ImportedGloballyVisible) { - this->impl->ImportedGloballyVisible = true; + if (!this->IsImportedGloballyVisible()) { + this->impl->TargetVisibility = VisibilityImportedGlobally; this->GetGlobalGenerator()->IndexTarget(this); } } else if (cmHasLiteralPrefix(prop, "IMPORTED_LIBNAME") && @@ -2555,14 +2554,48 @@ bool cmTarget::IsAIX() const return this->impl->IsAIX; } +bool cmTarget::IsNormal() const +{ + switch (this->impl->TargetVisibility) { + case VisibilityNormal: + return true; + case VisibilityImported: + case VisibilityImportedGlobally: + return false; + } + assert(false && "unknown visibility (IsNormal)"); + return false; +} + +bool cmTargetInternals::IsImported() const +{ + switch (this->TargetVisibility) { + case cmTarget::VisibilityImported: + case cmTarget::VisibilityImportedGlobally: + return true; + case cmTarget::VisibilityNormal: + return false; + } + assert(false && "unknown visibility (IsImported)"); + return false; +} + bool cmTarget::IsImported() const { - return this->impl->IsImportedTarget; + return this->impl->IsImported(); } bool cmTarget::IsImportedGloballyVisible() const { - return this->impl->ImportedGloballyVisible; + switch (this->impl->TargetVisibility) { + case VisibilityImportedGlobally: + return true; + case VisibilityNormal: + case VisibilityImported: + return false; + } + assert(false && "unknown visibility (IsImportedGloballyVisible)"); + return false; } bool cmTarget::IsPerConfig() const @@ -2858,7 +2891,7 @@ bool cmTargetInternals::CheckImportedLibName(std::string const& prop, std::string const& value) const { if (this->TargetType != cmStateEnums::INTERFACE_LIBRARY || - !this->IsImportedTarget) { + !this->IsImported()) { this->Makefile->IssueMessage( MessageType::FATAL_ERROR, prop + |