cmState: Move directory Properties from cmMakefile.
This commit is contained in:
parent
0178754725
commit
f4150bd88d
@ -4075,152 +4075,28 @@ int cmMakefile::ConfigureFile(const char* infile, const char* outfile,
|
|||||||
|
|
||||||
void cmMakefile::SetProperty(const std::string& prop, const char* value)
|
void cmMakefile::SetProperty(const std::string& prop, const char* value)
|
||||||
{
|
{
|
||||||
if (prop == "INCLUDE_DIRECTORIES")
|
cmListFileBacktrace lfbt = this->GetBacktrace();
|
||||||
{
|
this->StateSnapshot.GetDirectory().SetProperty(prop, value, lfbt);
|
||||||
if (!value)
|
|
||||||
{
|
|
||||||
this->StateSnapshot.GetDirectory().ClearIncludeDirectories();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cmListFileBacktrace lfbt = this->GetBacktrace();
|
|
||||||
this->StateSnapshot.GetDirectory().SetIncludeDirectories(value, lfbt);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (prop == "COMPILE_OPTIONS")
|
|
||||||
{
|
|
||||||
if (!value)
|
|
||||||
{
|
|
||||||
this->StateSnapshot.GetDirectory().ClearCompileOptions();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cmListFileBacktrace lfbt = this->GetBacktrace();
|
|
||||||
this->StateSnapshot.GetDirectory().SetCompileOptions(value, lfbt);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (prop == "COMPILE_DEFINITIONS")
|
|
||||||
{
|
|
||||||
if (!value)
|
|
||||||
{
|
|
||||||
this->StateSnapshot.GetDirectory().ClearCompileDefinitions();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cmListFileBacktrace lfbt = this->GetBacktrace();
|
|
||||||
this->StateSnapshot.GetDirectory().SetCompileDefinitions(value, lfbt);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this->Properties.SetProperty(prop, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmMakefile::AppendProperty(const std::string& prop,
|
void cmMakefile::AppendProperty(const std::string& prop,
|
||||||
const char* value,
|
const char* value,
|
||||||
bool asString)
|
bool asString)
|
||||||
{
|
{
|
||||||
if (prop == "INCLUDE_DIRECTORIES")
|
cmListFileBacktrace lfbt = this->GetBacktrace();
|
||||||
{
|
this->StateSnapshot.GetDirectory().AppendProperty(prop, value,
|
||||||
cmListFileBacktrace lfbt = this->GetBacktrace();
|
asString, lfbt);
|
||||||
this->StateSnapshot.GetDirectory().AppendIncludeDirectoriesEntry(value,
|
|
||||||
lfbt);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (prop == "COMPILE_OPTIONS")
|
|
||||||
{
|
|
||||||
cmListFileBacktrace lfbt = this->GetBacktrace();
|
|
||||||
this->StateSnapshot.GetDirectory().AppendCompileOptionsEntry(value, lfbt);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (prop == "COMPILE_DEFINITIONS")
|
|
||||||
{
|
|
||||||
cmListFileBacktrace lfbt = this->GetBacktrace();
|
|
||||||
this->StateSnapshot.GetDirectory().AppendCompileDefinitionsEntry(value,
|
|
||||||
lfbt);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this->Properties.AppendProperty(prop, value, asString);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *cmMakefile::GetProperty(const std::string& prop) const
|
const char *cmMakefile::GetProperty(const std::string& prop) const
|
||||||
{
|
{
|
||||||
const bool chain = this->GetState()->
|
return this->StateSnapshot.GetDirectory().GetProperty(prop);
|
||||||
IsPropertyChained(prop, cmProperty::DIRECTORY);
|
|
||||||
return this->GetProperty(prop, chain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *cmMakefile::GetProperty(const std::string& prop,
|
const char *cmMakefile::GetProperty(const std::string& prop,
|
||||||
bool chain) const
|
bool chain) const
|
||||||
{
|
{
|
||||||
// watch for specific properties
|
return this->StateSnapshot.GetDirectory().GetProperty(prop, chain);
|
||||||
static std::string output;
|
|
||||||
output = "";
|
|
||||||
if (prop == "PARENT_DIRECTORY")
|
|
||||||
{
|
|
||||||
cmState::Snapshot parent =
|
|
||||||
this->StateSnapshot.GetBuildsystemDirectoryParent();
|
|
||||||
if(parent.IsValid())
|
|
||||||
{
|
|
||||||
return parent.GetDirectory().GetCurrentSource();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
else if (prop == "LISTFILE_STACK")
|
|
||||||
{
|
|
||||||
std::vector<std::string> listFiles;
|
|
||||||
cmState::Snapshot snp = this->StateSnapshot;
|
|
||||||
while (snp.IsValid())
|
|
||||||
{
|
|
||||||
listFiles.push_back(snp.GetExecutionListFile());
|
|
||||||
snp = snp.GetCallStackParent();
|
|
||||||
}
|
|
||||||
std::reverse(listFiles.begin(), listFiles.end());
|
|
||||||
output = cmJoin(listFiles, ";");
|
|
||||||
return output.c_str();
|
|
||||||
}
|
|
||||||
else if ( prop == "CACHE_VARIABLES" )
|
|
||||||
{
|
|
||||||
output = cmJoin(this->GetState()->GetCacheEntryKeys(), ";");
|
|
||||||
return output.c_str();
|
|
||||||
}
|
|
||||||
else if (prop == "VARIABLES")
|
|
||||||
{
|
|
||||||
std::vector<std::string> res = this->StateSnapshot.ClosureKeys();
|
|
||||||
std::vector<std::string> cacheKeys = this->GetState()->GetCacheEntryKeys();
|
|
||||||
res.insert(res.end(), cacheKeys.begin(), cacheKeys.end());
|
|
||||||
std::sort(res.begin(), res.end());
|
|
||||||
output = cmJoin(res, ";");
|
|
||||||
return output.c_str();
|
|
||||||
}
|
|
||||||
else if (prop == "INCLUDE_DIRECTORIES")
|
|
||||||
{
|
|
||||||
output = cmJoin(this->StateSnapshot.GetDirectory()
|
|
||||||
.GetIncludeDirectoriesEntries(), ";");
|
|
||||||
return output.c_str();
|
|
||||||
}
|
|
||||||
else if (prop == "COMPILE_OPTIONS")
|
|
||||||
{
|
|
||||||
output = cmJoin(this->StateSnapshot.GetDirectory()
|
|
||||||
.GetCompileOptionsEntries(), ";");
|
|
||||||
return output.c_str();
|
|
||||||
}
|
|
||||||
else if (prop == "COMPILE_DEFINITIONS")
|
|
||||||
{
|
|
||||||
output = cmJoin(this->StateSnapshot.GetDirectory()
|
|
||||||
.GetCompileDefinitionsEntries(), ";");
|
|
||||||
return output.c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *retVal = this->Properties.GetPropertyValue(prop);
|
|
||||||
if (!retVal && chain)
|
|
||||||
{
|
|
||||||
if(this->LocalGenerator->GetParent())
|
|
||||||
{
|
|
||||||
return this->LocalGenerator->GetParent()->GetMakefile()->
|
|
||||||
GetProperty(prop, chain);
|
|
||||||
}
|
|
||||||
return this->GetState()->GetGlobalProperty(prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
return retVal;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmMakefile::GetPropertyAsBool(const std::string& prop) const
|
bool cmMakefile::GetPropertyAsBool(const std::string& prop) const
|
||||||
@ -4230,14 +4106,7 @@ bool cmMakefile::GetPropertyAsBool(const std::string& prop) const
|
|||||||
|
|
||||||
std::vector<std::string> cmMakefile::GetPropertyKeys() const
|
std::vector<std::string> cmMakefile::GetPropertyKeys() const
|
||||||
{
|
{
|
||||||
std::vector<std::string> keys;
|
return this->StateSnapshot.GetDirectory().GetPropertyKeys();
|
||||||
keys.reserve(this->Properties.size());
|
|
||||||
for(cmPropertyMap::const_iterator it = this->Properties.begin();
|
|
||||||
it != this->Properties.end(); ++it)
|
|
||||||
{
|
|
||||||
keys.push_back(it->first);
|
|
||||||
}
|
|
||||||
return keys;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmTarget* cmMakefile::FindTarget(const std::string& name,
|
cmTarget* cmMakefile::FindTarget(const std::string& name,
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
#include "cmExecutionStatus.h"
|
#include "cmExecutionStatus.h"
|
||||||
#include "cmListFileCache.h"
|
#include "cmListFileCache.h"
|
||||||
#include "cmPropertyMap.h"
|
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
#include "cmTarget.h"
|
#include "cmTarget.h"
|
||||||
#include "cmNewLineStyle.h"
|
#include "cmNewLineStyle.h"
|
||||||
@ -903,8 +902,6 @@ private:
|
|||||||
|
|
||||||
std::vector<cmGeneratorExpressionEvaluationFile*> EvaluationFiles;
|
std::vector<cmGeneratorExpressionEvaluationFile*> EvaluationFiles;
|
||||||
|
|
||||||
cmPropertyMap Properties;
|
|
||||||
|
|
||||||
std::vector<cmCommandContext const*> ContextStack;
|
std::vector<cmCommandContext const*> ContextStack;
|
||||||
std::vector<cmExecutionStatus*> ExecutionStatusStack;
|
std::vector<cmExecutionStatus*> ExecutionStatusStack;
|
||||||
friend class cmMakefileCall;
|
friend class cmMakefileCall;
|
||||||
|
@ -74,6 +74,8 @@ struct cmState::BuildsystemDirectoryStateType
|
|||||||
|
|
||||||
std::vector<std::string> CompileOptions;
|
std::vector<std::string> CompileOptions;
|
||||||
std::vector<cmListFileBacktrace> CompileOptionsBacktraces;
|
std::vector<cmListFileBacktrace> CompileOptionsBacktraces;
|
||||||
|
|
||||||
|
cmPropertyMap Properties;
|
||||||
};
|
};
|
||||||
|
|
||||||
cmState::cmState(cmake* cm)
|
cmState::cmState(cmake* cm)
|
||||||
@ -271,6 +273,7 @@ cmState::Snapshot cmState::Reset()
|
|||||||
it->CompileOptions.clear();
|
it->CompileOptions.clear();
|
||||||
it->CompileOptionsBacktraces.clear();
|
it->CompileOptionsBacktraces.clear();
|
||||||
it->DirectoryEnd = pos;
|
it->DirectoryEnd = pos;
|
||||||
|
it->Properties.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
this->PolicyStack.Clear();
|
this->PolicyStack.Clear();
|
||||||
@ -1538,3 +1541,163 @@ bool cmState::Snapshot::StrictWeakOrder::operator()(
|
|||||||
{
|
{
|
||||||
return lhs.Position.StrictWeakOrdered(rhs.Position);
|
return lhs.Position.StrictWeakOrdered(rhs.Position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmState::Directory::SetProperty(const std::string& prop,
|
||||||
|
const char* value,
|
||||||
|
cmListFileBacktrace lfbt)
|
||||||
|
{
|
||||||
|
if (prop == "INCLUDE_DIRECTORIES")
|
||||||
|
{
|
||||||
|
if (!value)
|
||||||
|
{
|
||||||
|
this->ClearIncludeDirectories();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this->SetIncludeDirectories(value, lfbt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (prop == "COMPILE_OPTIONS")
|
||||||
|
{
|
||||||
|
if (!value)
|
||||||
|
{
|
||||||
|
this->ClearCompileOptions();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this->SetCompileOptions(value, lfbt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (prop == "COMPILE_DEFINITIONS")
|
||||||
|
{
|
||||||
|
if (!value)
|
||||||
|
{
|
||||||
|
this->ClearCompileDefinitions();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this->SetCompileDefinitions(value, lfbt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->DirectoryState->Properties.SetProperty(prop, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmState::Directory::AppendProperty(const std::string& prop,
|
||||||
|
const char* value,
|
||||||
|
bool asString,
|
||||||
|
cmListFileBacktrace lfbt)
|
||||||
|
{
|
||||||
|
if (prop == "INCLUDE_DIRECTORIES")
|
||||||
|
{
|
||||||
|
this->AppendIncludeDirectoriesEntry(value, lfbt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (prop == "COMPILE_OPTIONS")
|
||||||
|
{
|
||||||
|
this->AppendCompileOptionsEntry(value, lfbt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (prop == "COMPILE_DEFINITIONS")
|
||||||
|
{
|
||||||
|
this->AppendCompileDefinitionsEntry(value, lfbt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->DirectoryState->Properties.AppendProperty(prop, value, asString);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char*cmState::Directory::GetProperty(const std::string& prop) const
|
||||||
|
{
|
||||||
|
const bool chain = this->Snapshot_.State->
|
||||||
|
IsPropertyChained(prop, cmProperty::DIRECTORY);
|
||||||
|
return this->GetProperty(prop, chain);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char*
|
||||||
|
cmState::Directory::GetProperty(const std::string& prop, bool chain) const
|
||||||
|
{
|
||||||
|
static std::string output;
|
||||||
|
output = "";
|
||||||
|
if (prop == "PARENT_DIRECTORY")
|
||||||
|
{
|
||||||
|
cmState::Snapshot parent =
|
||||||
|
this->Snapshot_.GetBuildsystemDirectoryParent();
|
||||||
|
if(parent.IsValid())
|
||||||
|
{
|
||||||
|
return parent.GetDirectory().GetCurrentSource();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
else if (prop == "LISTFILE_STACK")
|
||||||
|
{
|
||||||
|
std::vector<std::string> listFiles;
|
||||||
|
cmState::Snapshot snp = this->Snapshot_;
|
||||||
|
while (snp.IsValid())
|
||||||
|
{
|
||||||
|
listFiles.push_back(snp.GetExecutionListFile());
|
||||||
|
snp = snp.GetCallStackParent();
|
||||||
|
}
|
||||||
|
std::reverse(listFiles.begin(), listFiles.end());
|
||||||
|
output = cmJoin(listFiles, ";");
|
||||||
|
return output.c_str();
|
||||||
|
}
|
||||||
|
else if ( prop == "CACHE_VARIABLES" )
|
||||||
|
{
|
||||||
|
output = cmJoin(this->Snapshot_.State->GetCacheEntryKeys(), ";");
|
||||||
|
return output.c_str();
|
||||||
|
}
|
||||||
|
else if (prop == "VARIABLES")
|
||||||
|
{
|
||||||
|
std::vector<std::string> res = this->Snapshot_.ClosureKeys();
|
||||||
|
std::vector<std::string> cacheKeys =
|
||||||
|
this->Snapshot_.State->GetCacheEntryKeys();
|
||||||
|
res.insert(res.end(), cacheKeys.begin(), cacheKeys.end());
|
||||||
|
std::sort(res.begin(), res.end());
|
||||||
|
output = cmJoin(res, ";");
|
||||||
|
return output.c_str();
|
||||||
|
}
|
||||||
|
else if (prop == "INCLUDE_DIRECTORIES")
|
||||||
|
{
|
||||||
|
output = cmJoin(this->GetIncludeDirectoriesEntries(), ";");
|
||||||
|
return output.c_str();
|
||||||
|
}
|
||||||
|
else if (prop == "COMPILE_OPTIONS")
|
||||||
|
{
|
||||||
|
output = cmJoin(this->GetCompileOptionsEntries(), ";");
|
||||||
|
return output.c_str();
|
||||||
|
}
|
||||||
|
else if (prop == "COMPILE_DEFINITIONS")
|
||||||
|
{
|
||||||
|
output = cmJoin(this->GetCompileDefinitionsEntries(), ";");
|
||||||
|
return output.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *retVal = this->DirectoryState->Properties.GetPropertyValue(prop);
|
||||||
|
if (!retVal && chain)
|
||||||
|
{
|
||||||
|
Snapshot parentSnapshot = this->Snapshot_.GetBuildsystemDirectoryParent();
|
||||||
|
if (parentSnapshot.IsValid())
|
||||||
|
{
|
||||||
|
return parentSnapshot.GetDirectory().GetProperty(prop, chain);
|
||||||
|
}
|
||||||
|
return this->Snapshot_.State->GetGlobalProperty(prop);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmState::Directory::GetPropertyAsBool(const std::string& prop) const
|
||||||
|
{
|
||||||
|
return cmSystemTools::IsOn(this->GetProperty(prop));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> cmState::Directory::GetPropertyKeys() const
|
||||||
|
{
|
||||||
|
std::vector<std::string> keys;
|
||||||
|
keys.reserve(this->DirectoryState->Properties.size());
|
||||||
|
for(cmPropertyMap::const_iterator it =
|
||||||
|
this->DirectoryState->Properties.begin();
|
||||||
|
it != this->DirectoryState->Properties.end(); ++it)
|
||||||
|
{
|
||||||
|
keys.push_back(it->first);
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
@ -146,6 +146,15 @@ public:
|
|||||||
cmListFileBacktrace const& lfbt);
|
cmListFileBacktrace const& lfbt);
|
||||||
void ClearCompileOptions();
|
void ClearCompileOptions();
|
||||||
|
|
||||||
|
void SetProperty(const std::string& prop, const char *value,
|
||||||
|
cmListFileBacktrace lfbt);
|
||||||
|
void AppendProperty(const std::string& prop, const char *value,
|
||||||
|
bool asString, cmListFileBacktrace lfbt);
|
||||||
|
const char *GetProperty(const std::string& prop) const;
|
||||||
|
const char *GetProperty(const std::string& prop, bool chain) const;
|
||||||
|
bool GetPropertyAsBool(const std::string& prop) const;
|
||||||
|
std::vector<std::string> GetPropertyKeys() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ComputeRelativePathTopSource();
|
void ComputeRelativePathTopSource();
|
||||||
void ComputeRelativePathTopBinary();
|
void ComputeRelativePathTopBinary();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user