diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2022-04-05 19:43:39 (GMT) |
---|---|---|
committer | Ben Boeckel <ben.boeckel@kitware.com> | 2022-04-25 18:29:17 (GMT) |
commit | 5da4fe30a994208bb188c347ac9d0e394498dcc2 (patch) | |
tree | 63205fe6c49a3074beb86bdd6c1c12ca61d3bca0 | |
parent | c89580487b38d365dad56afea587f698ae101947 (diff) | |
download | CMake-5da4fe30a994208bb188c347ac9d0e394498dcc2.zip CMake-5da4fe30a994208bb188c347ac9d0e394498dcc2.tar.gz CMake-5da4fe30a994208bb188c347ac9d0e394498dcc2.tar.bz2 |
cmTarget: factor out fileset property manipulation
-rw-r--r-- | Source/cmTarget.cxx | 230 |
1 files changed, 114 insertions, 116 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index e85cc33..fc4d9f4 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -13,6 +13,7 @@ #include <unordered_set> #include <cm/memory> +#include <cm/string_view> #include <cmext/algorithm> #include <cmext/string_view> @@ -216,6 +217,19 @@ public: std::string const& value) const; std::string ProcessSourceItemCMP0049(const std::string& s) const; + + template <typename ValueType> + void AddDirectoryToFileSet(cmTarget* self, std::string const& fileSetName, + ValueType value, cm::string_view description, + bool clear); + template <typename ValueType> + void AddPathToFileSet(cmTarget* self, std::string const& fileSetName, + ValueType value, cm::string_view description, + bool clear); + cmValue GetFileSetDirectories(cmTarget const* self, + std::string const& fileSetName) const; + cmValue GetFileSetPaths(cmTarget const* self, + std::string const& fileSetName) const; }; namespace { @@ -1240,6 +1254,12 @@ bool StringIsEmpty<cmValue>(cmValue const& value) { return value.IsEmpty(); } + +template <> +bool StringIsEmpty<std::string>(std::string const& value) +{ + return value.empty(); +} } template <typename ValueType> @@ -1423,31 +1443,11 @@ void cmTarget::StoreProperty(const std::string& prop, ValueType value) this->impl->LanguageStandardProperties.erase(prop); } } else if (prop == propHEADER_DIRS) { - auto* fileSet = this->GetFileSet("HEADERS"); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - "The default header set has not yet been created."); - return; - } - fileSet->ClearDirectoryEntries(); - if (!StringIsEmpty(value)) { - fileSet->AddDirectoryEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); - } + this->impl->AddDirectoryToFileSet(this, "HEADERS", value, + "The default header set"_s, true); } else if (prop == propHEADER_SET) { - auto* fileSet = this->GetFileSet("HEADERS"); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - "The default header set has not yet been created."); - return; - } - fileSet->ClearFileEntries(); - if (!StringIsEmpty(value)) { - fileSet->AddFileEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); - } + this->impl->AddPathToFileSet(this, "HEADERS", value, + "The default header set"_s, true); } else if (cmHasLiteralPrefix(prop, "HEADER_DIRS_")) { auto fileSetName = prop.substr(cmStrLen("HEADER_DIRS_")); if (fileSetName.empty()) { @@ -1455,19 +1455,9 @@ void cmTarget::StoreProperty(const std::string& prop, ValueType value) "Header set name cannot be empty."); return; } - auto* fileSet = this->GetFileSet(fileSetName); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - cmStrCat("Header set \"", fileSetName, - "\" has not yet been created.")); - return; - } - fileSet->ClearDirectoryEntries(); - if (!StringIsEmpty(value)) { - fileSet->AddDirectoryEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); - } + this->impl->AddDirectoryToFileSet( + this, fileSetName, value, cmStrCat("Header set \"", fileSetName, "\""), + true); } else if (cmHasLiteralPrefix(prop, "HEADER_SET_")) { auto fileSetName = prop.substr(cmStrLen("HEADER_SET_")); if (fileSetName.empty()) { @@ -1475,19 +1465,9 @@ void cmTarget::StoreProperty(const std::string& prop, ValueType value) "Header set name cannot be empty."); return; } - auto* fileSet = this->GetFileSet(fileSetName); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - cmStrCat("Header set \"", fileSetName, - "\" has not yet been created.")); - return; - } - fileSet->ClearFileEntries(); - if (!StringIsEmpty(value)) { - fileSet->AddFileEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); - } + this->impl->AddPathToFileSet(this, fileSetName, value, + cmStrCat("Header set \"", fileSetName, "\""), + true); } else if (prop == propHEADER_SETS) { this->impl->Makefile->IssueMessage(MessageType::FATAL_ERROR, "HEADER_SETS property is read-only\n"); @@ -1608,15 +1588,8 @@ void cmTarget::AppendProperty(const std::string& prop, this->impl->Makefile->IssueMessage( MessageType::FATAL_ERROR, prop + " property may not be appended."); } else if (prop == "HEADER_DIRS") { - auto* fileSet = this->GetFileSet("HEADERS"); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - "The default header set has not yet been created."); - return; - } - fileSet->AddDirectoryEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); + this->impl->AddDirectoryToFileSet(this, "HEADERS", value, + "The default header set"_s, false); } else if (cmHasLiteralPrefix(prop, "HEADER_DIRS_")) { auto fileSetName = prop.substr(cmStrLen("HEADER_DIRS_")); if (fileSetName.empty()) { @@ -1624,26 +1597,12 @@ void cmTarget::AppendProperty(const std::string& prop, "Header set name cannot be empty."); return; } - auto* fileSet = this->GetFileSet(fileSetName); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - cmStrCat("Header set \"", fileSetName, - "\" has not yet been created.")); - return; - } - fileSet->AddDirectoryEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); + this->impl->AddDirectoryToFileSet( + this, fileSetName, value, cmStrCat("Header set \"", fileSetName, "\""), + false); } else if (prop == "HEADER_SET") { - auto* fileSet = this->GetFileSet("HEADERS"); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - "The default header set has not yet been created."); - return; - } - fileSet->AddFileEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); + this->impl->AddPathToFileSet(this, "HEADERS", value, + "The default header set"_s, false); } else if (cmHasLiteralPrefix(prop, "HEADER_SET_")) { auto fileSetName = prop.substr(cmStrLen("HEADER_SET_")); if (fileSetName.empty()) { @@ -1651,16 +1610,9 @@ void cmTarget::AppendProperty(const std::string& prop, "Header set name cannot be empty."); return; } - auto* fileSet = this->GetFileSet(fileSetName); - if (!fileSet) { - this->impl->Makefile->IssueMessage( - MessageType::FATAL_ERROR, - cmStrCat("Header set \"", fileSetName, - "\" has not yet been created.")); - return; - } - fileSet->AddFileEntry( - BT<std::string>(value, this->impl->Makefile->GetBacktrace())); + this->impl->AddPathToFileSet(this, fileSetName, value, + cmStrCat("Header set \"", fileSetName, "\""), + false); } else if (prop == "HEADER_SETS") { this->impl->Makefile->IssueMessage(MessageType::FATAL_ERROR, "HEADER_SETS property is read-only\n"); @@ -1684,6 +1636,76 @@ void cmTarget::SetProperty(const std::string& prop, cmValue value) this->StoreProperty(prop, value); } +template <typename ValueType> +void cmTargetInternals::AddDirectoryToFileSet(cmTarget* self, + std::string const& fileSetName, + ValueType value, + cm::string_view description, + bool clear) +{ + auto* fileSet = self->GetFileSet(fileSetName); + if (!fileSet) { + this->Makefile->IssueMessage( + MessageType::FATAL_ERROR, + cmStrCat(description, "has not yet been created.")); + return; + } + if (clear) { + fileSet->ClearDirectoryEntries(); + } + if (!StringIsEmpty(value)) { + fileSet->AddDirectoryEntry( + BT<std::string>(value, this->Makefile->GetBacktrace())); + } +} + +template <typename ValueType> +void cmTargetInternals::AddPathToFileSet(cmTarget* self, + std::string const& fileSetName, + ValueType value, + cm::string_view description, + bool clear) +{ + auto* fileSet = self->GetFileSet(fileSetName); + if (!fileSet) { + this->Makefile->IssueMessage( + MessageType::FATAL_ERROR, + cmStrCat(description, "has not yet been created.")); + return; + } + if (clear) { + fileSet->ClearFileEntries(); + } + if (!StringIsEmpty(value)) { + fileSet->AddFileEntry( + BT<std::string>(value, this->Makefile->GetBacktrace())); + } +} + +cmValue cmTargetInternals::GetFileSetDirectories( + cmTarget const* self, std::string const& fileSetName) const +{ + auto const* fileSet = self->GetFileSet(fileSetName); + if (!fileSet) { + return nullptr; + } + static std::string output; + output = cmJoin(fileSet->GetDirectoryEntries(), ";"_s); + return cmValue(output); +} + +cmValue cmTargetInternals::GetFileSetPaths( + cmTarget const* self, std::string const& fileSetName) const +{ + auto const* fileSet = self->GetFileSet(fileSetName); + if (!fileSet) { + return nullptr; + } + static std::string output; + output = cmJoin(fileSet->GetFileEntries(), ";"_s); + return cmValue(output); +} + void cmTarget::AppendBuildInterfaceIncludes() { if (this->GetType() != cmStateEnums::SHARED_LIBRARY && @@ -2076,22 +2098,10 @@ cmValue cmTarget::GetProperty(const std::string& prop) const .GetCurrentSource()); } if (prop == propHEADER_DIRS) { - auto const* fileSet = this->GetFileSet("HEADERS"); - if (!fileSet) { - return nullptr; - } - static std::string output; - output = cmJoin(fileSet->GetDirectoryEntries(), ";"_s); - return cmValue(output); + return this->impl->GetFileSetDirectories(this, "HEADERS"); } if (prop == propHEADER_SET) { - auto const* fileSet = this->GetFileSet("HEADERS"); - if (!fileSet) { - return nullptr; - } - static std::string output; - output = cmJoin(fileSet->GetFileEntries(), ";"_s); - return cmValue(output); + return this->impl->GetFileSetPaths(this, "HEADERS"); } if (prop == propHEADER_SETS) { std::vector<std::string> set_names; @@ -2122,26 +2132,14 @@ cmValue cmTarget::GetProperty(const std::string& prop) const if (fileSetName.empty()) { return nullptr; } - auto const* fileSet = this->GetFileSet(fileSetName); - if (!fileSet) { - return nullptr; - } - static std::string output; - output = cmJoin(fileSet->GetDirectoryEntries(), ";"_s); - return cmValue(output); + return this->impl->GetFileSetDirectories(this, fileSetName); } if (cmHasLiteralPrefix(prop, "HEADER_SET_")) { std::string fileSetName = prop.substr(cmStrLen("HEADER_SET_")); if (fileSetName.empty()) { return nullptr; } - auto const* fileSet = this->GetFileSet(fileSetName); - if (!fileSet) { - return nullptr; - } - static std::string output; - output = cmJoin(fileSet->GetFileEntries(), ";"_s); - return cmValue(output); + return this->impl->GetFileSetPaths(this, fileSetName); } cmValue retVal = this->impl->Properties.GetPropertyValue(prop); |