From 15a8af21e8bd8354dfff2063e01f695f85efdeb8 Mon Sep 17 00:00:00 2001 From: Nils Gladitz Date: Thu, 15 May 2014 19:12:40 +0200 Subject: Add an "installed file" property scope Teach set_property and get_property an "INSTALL" property type to be associated with install-tree file paths. Make the properties available to CPack for use during packaging. Add a "prop_inst" Sphinx domain object type for documentation of such properties. --- Source/cmInstalledFile.cxx | 115 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Source/cmInstalledFile.cxx (limited to 'Source/cmInstalledFile.cxx') diff --git a/Source/cmInstalledFile.cxx b/Source/cmInstalledFile.cxx new file mode 100644 index 0000000000..7e78ec000d --- /dev/null +++ b/Source/cmInstalledFile.cxx @@ -0,0 +1,115 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2014 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmInstalledFile.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" + +//---------------------------------------------------------------------------- +cmInstalledFile::cmInstalledFile(): + NameExpression(0) +{ + +} + +//---------------------------------------------------------------------------- +cmInstalledFile::~cmInstalledFile() +{ + if(NameExpression) + { + delete NameExpression; + } +} + +//---------------------------------------------------------------------------- +void cmInstalledFile::SetName(cmMakefile* mf, const std::string& name) +{ + cmListFileBacktrace backtrace; + mf->GetBacktrace(backtrace); + cmGeneratorExpression ge(backtrace); + + this->Name = name; + this->NameExpression = ge.Parse(name).release(); +} + +//---------------------------------------------------------------------------- +std::string const& cmInstalledFile::GetName() const +{ + return this->Name; +} + +//---------------------------------------------------------------------------- +cmCompiledGeneratorExpression const& cmInstalledFile::GetNameExpression() const +{ + return *(this->NameExpression); +} + +//---------------------------------------------------------------------------- +void cmInstalledFile::RemoveProperty(const std::string& prop) +{ + this->Properties.erase(prop); +} + +//---------------------------------------------------------------------------- +void cmInstalledFile::SetProperty(cmMakefile const* mf, + const std::string& prop, const char* value) +{ + this->RemoveProperty(prop); + this->AppendProperty(mf, prop, value); +} + +//---------------------------------------------------------------------------- +void cmInstalledFile::AppendProperty(cmMakefile const* mf, + const std::string& prop, const char* value, bool /*asString*/) +{ + cmListFileBacktrace backtrace; + mf->GetBacktrace(backtrace); + cmGeneratorExpression ge(backtrace); + + Property& property = this->Properties[prop]; + property.ValueExpressions.push_back(ge.Parse(value).release()); +} + +//---------------------------------------------------------------------------- +bool cmInstalledFile::GetProperty( + const std::string& prop, std::string& value) const +{ + PropertyMapType::const_iterator i = this->Properties.find(prop); + if(i == this->Properties.end()) + { + return false; + } + + Property const& property = i->second; + + std::string output; + std::string separator; + + for(ExpressionVectorType::const_iterator + j = property.ValueExpressions.begin(); + j != property.ValueExpressions.end(); ++j) + { + output += separator; + output += (*j)->GetInput(); + separator = ";"; + } + + value = output; + return true; +} + +//---------------------------------------------------------------------------- +bool cmInstalledFile::GetPropertyAsBool(const std::string& prop) const +{ + std::string value; + bool isSet = this->GetProperty(prop, value); + return isSet && cmSystemTools::IsOn(value.c_str()); +} -- cgit v1.2.1