mirror of
https://github.com/reactos/CMake.git
synced 2025-01-09 21:21:07 +00:00
fc1c7cf85d
The storage of a pointer means that the ownership and lifetime are externally determined, which is harder to reason about. It also imposes API constraints, requiring APIs to return references to backtraces. This pointer storage was introduced in commit v3.1.0-rc1~425^2~3 (genex: remove the need for backtraces, 2014-05-23). As backtraces are now cheap to copy around, just do that instead.
143 lines
4.0 KiB
C++
143 lines
4.0 KiB
C++
/*============================================================================
|
|
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"
|
|
#include "cmAlgorithms.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
cmInstalledFile::cmInstalledFile():
|
|
NameExpression(0)
|
|
{
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
cmInstalledFile::~cmInstalledFile()
|
|
{
|
|
if(NameExpression)
|
|
{
|
|
delete NameExpression;
|
|
}
|
|
}
|
|
|
|
cmInstalledFile::Property::Property()
|
|
{
|
|
|
|
}
|
|
|
|
cmInstalledFile::Property::~Property()
|
|
{
|
|
cmDeleteAll(this->ValueExpressions);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void cmInstalledFile::SetName(cmMakefile* mf, const std::string& name)
|
|
{
|
|
cmListFileBacktrace backtrace = mf->GetBacktrace();
|
|
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();
|
|
cmGeneratorExpression ge(backtrace);
|
|
|
|
Property& property = this->Properties[prop];
|
|
property.ValueExpressions.push_back(ge.Parse(value).release());
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool cmInstalledFile::HasProperty(
|
|
const std::string& prop) const
|
|
{
|
|
return this->Properties.find(prop) != this->Properties.end();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
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());
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void cmInstalledFile::GetPropertyAsList(const std::string& prop,
|
|
std::vector<std::string>& list) const
|
|
{
|
|
std::string value;
|
|
this->GetProperty(prop, value);
|
|
|
|
list.clear();
|
|
cmSystemTools::ExpandListArgument(value, list);
|
|
}
|