| /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying | 
 |    file LICENSE.rst or https://cmake.org/licensing for details.  */ | 
 | #include "cmInstalledFile.h" | 
 |  | 
 | #include <utility> | 
 |  | 
 | #include "cmGeneratorExpression.h" | 
 | #include "cmList.h" | 
 | #include "cmListFileCache.h" | 
 | #include "cmMakefile.h" | 
 | #include "cmValue.h" | 
 |  | 
 | cmInstalledFile::cmInstalledFile() = default; | 
 |  | 
 | cmInstalledFile::~cmInstalledFile() = default; | 
 |  | 
 | cmInstalledFile::Property::Property() = default; | 
 |  | 
 | cmInstalledFile::Property::~Property() = default; | 
 |  | 
 | void cmInstalledFile::SetName(cmMakefile* mf, std::string const& name) | 
 | { | 
 |   cmListFileBacktrace backtrace = mf->GetBacktrace(); | 
 |   cmGeneratorExpression ge(*mf->GetCMakeInstance(), backtrace); | 
 |  | 
 |   this->Name = name; | 
 |   this->NameExpression = ge.Parse(name); | 
 | } | 
 |  | 
 | std::string const& cmInstalledFile::GetName() const | 
 | { | 
 |   return this->Name; | 
 | } | 
 |  | 
 | cmCompiledGeneratorExpression const& cmInstalledFile::GetNameExpression() const | 
 | { | 
 |   return *(this->NameExpression); | 
 | } | 
 |  | 
 | void cmInstalledFile::RemoveProperty(std::string const& prop) | 
 | { | 
 |   this->Properties.erase(prop); | 
 | } | 
 |  | 
 | void cmInstalledFile::SetProperty(cmMakefile const* mf, | 
 |                                   std::string const& prop, | 
 |                                   std::string const& value) | 
 | { | 
 |   this->RemoveProperty(prop); | 
 |   this->AppendProperty(mf, prop, value); | 
 | } | 
 |  | 
 | void cmInstalledFile::AppendProperty(cmMakefile const* mf, | 
 |                                      std::string const& prop, | 
 |                                      std::string const& value, | 
 |                                      bool /*asString*/) | 
 | { | 
 |   cmListFileBacktrace backtrace = mf->GetBacktrace(); | 
 |   cmGeneratorExpression ge(*mf->GetCMakeInstance(), backtrace); | 
 |  | 
 |   Property& property = this->Properties[prop]; | 
 |   property.ValueExpressions.push_back(ge.Parse(value)); | 
 | } | 
 |  | 
 | bool cmInstalledFile::HasProperty(std::string const& prop) const | 
 | { | 
 |   return this->Properties.find(prop) != this->Properties.end(); | 
 | } | 
 |  | 
 | bool cmInstalledFile::GetProperty(std::string const& prop, | 
 |                                   std::string& value) const | 
 | { | 
 |   auto i = this->Properties.find(prop); | 
 |   if (i == this->Properties.end()) { | 
 |     return false; | 
 |   } | 
 |  | 
 |   Property const& property = i->second; | 
 |  | 
 |   std::string output; | 
 |   std::string separator; | 
 |  | 
 |   for (auto const& ve : property.ValueExpressions) { | 
 |     output += separator; | 
 |     output += ve->GetInput(); | 
 |     separator = ";"; | 
 |   } | 
 |  | 
 |   value = output; | 
 |   return true; | 
 | } | 
 |  | 
 | bool cmInstalledFile::GetPropertyAsBool(std::string const& prop) const | 
 | { | 
 |   std::string value; | 
 |   bool isSet = this->GetProperty(prop, value); | 
 |   return isSet && cmIsOn(value); | 
 | } | 
 |  | 
 | std::vector<std::string> cmInstalledFile::GetPropertyAsList( | 
 |   std::string const& prop) const | 
 | { | 
 |   std::string value; | 
 |   this->GetProperty(prop, value); | 
 |  | 
 |   return std::move(cmList(value).data()); | 
 | } |