Introduce cmState::Snapshot.

Create snapshots for buildsystem directories during configure time.

This class will be extended in follow up commits to snapshot
all values in the cmState.
This commit is contained in:
Stephen Kelly 2015-04-11 18:38:16 +02:00
parent ae6c8a9d68
commit 3a041c5949
4 changed files with 48 additions and 2 deletions

View File

@ -54,7 +54,10 @@ public:
// default is not to be building executables
cmMakefile::cmMakefile(cmLocalGenerator* localGenerator)
: Internal(new Internals)
: Internal(new Internals),
LocalGenerator(localGenerator),
StateSnapshot(localGenerator->GetGlobalGenerator()
->GetCMakeInstance()->GetState())
{
const cmDefinitions& defs = cmDefinitions();
const std::set<std::string> globalKeys = defs.LocalKeys();
@ -63,6 +66,19 @@ cmMakefile::cmMakefile(cmLocalGenerator* localGenerator)
this->Internal->VarUsageStack.push(globalKeys);
this->Internal->IsSourceFileTryCompile = false;
if (this->LocalGenerator->GetParent())
{
cmMakefile* parentMf = this->LocalGenerator->GetParent()->GetMakefile();
this->StateSnapshot =
this->GetState()->CreateSnapshot(parentMf->StateSnapshot);
}
else
{
this->StateSnapshot =
this->GetState()->CreateSnapshot(this->StateSnapshot);
}
// Initialize these first since AddDefaultDefinitions calls AddDefinition
this->WarnUnused = false;
this->CheckSystemVars = false;

View File

@ -922,7 +922,7 @@ private:
cmMakefile& operator=(const cmMakefile& mf);
void Initialize();
cmState::Snapshot StateSnapshot;
bool ReadListFileInternal(const char* filenametoread,
bool noPolicyScope,

View File

@ -22,6 +22,7 @@ cmState::cmState(cmake* cm)
: CMakeInstance(cm),
IsInTryCompile(false)
{
this->CreateSnapshot(Snapshot());
this->Initialize();
}
@ -466,3 +467,17 @@ const char* cmState::GetBinaryDirectory() const
{
return this->BinaryDirectory.c_str();
}
cmState::Snapshot cmState::CreateSnapshot(Snapshot originSnapshot)
{
PositionType pos = this->ParentPositions.size();
this->ParentPositions.push_back(originSnapshot.Position);
return cmState::Snapshot(this, pos);
}
cmState::Snapshot::Snapshot(cmState* state, PositionType position)
: State(state),
Position(position)
{
}

View File

@ -21,10 +21,24 @@ class cmCommand;
class cmState
{
typedef std::vector<std::string>::size_type PositionType;
friend class Snapshot;
public:
cmState(cmake* cm);
~cmState();
class Snapshot {
public:
Snapshot(cmState* state = 0, PositionType position = 0);
private:
friend class cmState;
cmState* State;
cmState::PositionType Position;
};
Snapshot CreateSnapshot(Snapshot originSnapshot);
enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC,
UNINITIALIZED };
static CacheEntryType StringToCacheEntryType(const char*);
@ -106,6 +120,7 @@ private:
std::map<std::string, cmCommand*> Commands;
cmPropertyMap GlobalProperties;
cmake* CMakeInstance;
std::vector<PositionType> ParentPositions;
std::string SourceDirectory;
std::string BinaryDirectory;
bool IsInTryCompile;