diff options
author | Stephen Kelly <steveire@gmail.com> | 2015-10-13 19:52:33 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2015-10-13 22:16:07 (GMT) |
commit | 2c219bafc045dfdf49529b8ad141fed3dbb4d8e9 (patch) | |
tree | 88438e304e55c8b3540f23940e95e3019326b3fe | |
parent | 84e0776e77e625ab43c1a5b2031a06a035ae0210 (diff) | |
download | CMake-2c219bafc045dfdf49529b8ad141fed3dbb4d8e9.zip CMake-2c219bafc045dfdf49529b8ad141fed3dbb4d8e9.tar.gz CMake-2c219bafc045dfdf49529b8ad141fed3dbb4d8e9.tar.bz2 |
cmState: Initialize top level source directories immediately.
Don't leave this as cmMakefile responsibility.
-rw-r--r-- | Source/cmMakefile.cxx | 4 | ||||
-rw-r--r-- | Source/cmState.cxx | 19 | ||||
-rw-r--r-- | Source/cmState.h | 2 | ||||
-rw-r--r-- | Source/cmake.cxx | 8 |
4 files changed, 29 insertions, 4 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index eea9d67..2c5501e 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -119,10 +119,6 @@ cmMakefile::cmMakefile(cmGlobalGenerator* globalGenerator, this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$"); #endif - this->StateSnapshot.SetDefinition("CMAKE_SOURCE_DIR", - this->GetCMakeInstance()->GetHomeDirectory()); - this->StateSnapshot.SetDefinition("CMAKE_BINARY_DIR", - this->GetCMakeInstance()->GetHomeOutputDirectory()); { const char* dir = this->StateSnapshot.GetDirectory().GetCurrentSource(); if (dir) diff --git a/Source/cmState.cxx b/Source/cmState.cxx index 72c7330..9de58d8 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -306,11 +306,21 @@ cmState::Snapshot cmState::Reset() pos->PolicyScope = this->PolicyStack.Root(); assert(pos->Policies.IsValid()); assert(pos->PolicyRoot.IsValid()); + + { + std::string srcDir = + cmDefinitions::Get("CMAKE_SOURCE_DIR", pos->Vars, pos->Root); + std::string binDir = + cmDefinitions::Get("CMAKE_BINARY_DIR", pos->Vars, pos->Root); this->VarTree.Clear(); pos->Vars = this->VarTree.Extend(this->VarTree.Root()); pos->Parent = this->VarTree.Root(); pos->Root = this->VarTree.Root(); + pos->Vars->Set("CMAKE_SOURCE_DIR", srcDir.c_str()); + pos->Vars->Set("CMAKE_BINARY_DIR", binDir.c_str()); + } + this->DefineProperty ("RULE_LAUNCH_COMPILE", cmProperty::DIRECTORY, "", "", true); @@ -838,6 +848,7 @@ cmState::CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot, cmState::Snapshot snapshot = cmState::Snapshot(this, pos); originSnapshot.Position->BuildSystemDirectory->Children.push_back(snapshot); snapshot.InitializeFromParent(); + snapshot.SetDirectoryDefinitions(); return snapshot; } @@ -1318,6 +1329,14 @@ void InitializeContentFromParent(T& parentContent, contentEndPosition = thisContent.size(); } +void cmState::Snapshot::SetDirectoryDefinitions() +{ + this->SetDefinition("CMAKE_SOURCE_DIR", + this->State->GetSourceDirectory()); + this->SetDefinition("CMAKE_BINARY_DIR", + this->State->GetBinaryDirectory()); +} + void cmState::Snapshot::InitializeFromParent() { PositionType parent = this->Position->DirectoryParent; diff --git a/Source/cmState.h b/Source/cmState.h index 2f66f7f..528da3b 100644 --- a/Source/cmState.h +++ b/Source/cmState.h @@ -96,6 +96,8 @@ public: const cmState::Snapshot& rhs) const; }; + void SetDirectoryDefinitions(); + private: friend bool operator==(const cmState::Snapshot& lhs, const cmState::Snapshot& rhs); diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 6846f1b..2ecd3d1 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -980,6 +980,10 @@ cmGlobalGenerator* cmake::CreateGlobalGenerator(const std::string& gname) void cmake::SetHomeDirectory(const std::string& dir) { this->State->SetSourceDirectory(dir); + if (this->CurrentSnapshot.IsValid()) + { + this->CurrentSnapshot.SetDefinition("CMAKE_SOURCE_DIR", dir); + } } const char* cmake::GetHomeDirectory() const @@ -990,6 +994,10 @@ const char* cmake::GetHomeDirectory() const void cmake::SetHomeOutputDirectory(const std::string& dir) { this->State->SetBinaryDirectory(dir); + if (this->CurrentSnapshot.IsValid()) + { + this->CurrentSnapshot.SetDefinition("CMAKE_BINARY_DIR", dir); + } } const char* cmake::GetHomeOutputDirectory() const |