summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2015-04-28 05:50:31 (GMT)
committerStephen Kelly <steveire@gmail.com>2015-04-28 05:57:21 (GMT)
commit46f6a5f458d7d9ef074820d3e90960af2793bd33 (patch)
treec95187cef9179a3f105e8d0acb5a9fb59ecfc5e8
parent3a041c59495df26c2b7b0ee58069d27a03bd18ff (diff)
downloadCMake-46f6a5f458d7d9ef074820d3e90960af2793bd33.zip
CMake-46f6a5f458d7d9ef074820d3e90960af2793bd33.tar.gz
CMake-46f6a5f458d7d9ef074820d3e90960af2793bd33.tar.bz2
cmState: Store the Current directories.
-rw-r--r--Source/cmMakefile.cxx22
-rw-r--r--Source/cmMakefile.h2
-rw-r--r--Source/cmState.cxx33
-rw-r--r--Source/cmState.h7
4 files changed, 48 insertions, 16 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 5d48f58..0935383 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -1647,33 +1647,27 @@ void cmMakefile::AddSubDirectory(const std::string& srcPath,
void cmMakefile::SetCurrentSourceDirectory(const std::string& dir)
{
- this->cmStartDirectory = dir;
- cmSystemTools::ConvertToUnixSlashes(this->cmStartDirectory);
- this->cmStartDirectory =
- cmSystemTools::CollapseFullPath(this->cmStartDirectory);
+ this->StateSnapshot.SetCurrentSourceDirectory(dir);
this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR",
- this->cmStartDirectory.c_str());
+ this->StateSnapshot.GetCurrentSourceDirectory());
}
const char* cmMakefile::GetCurrentSourceDirectory() const
{
- return this->cmStartDirectory.c_str();
+ return this->StateSnapshot.GetCurrentSourceDirectory();
}
void cmMakefile::SetCurrentBinaryDirectory(const std::string& dir)
{
- this->StartOutputDirectory = dir;
- cmSystemTools::ConvertToUnixSlashes(this->StartOutputDirectory);
- this->StartOutputDirectory =
- cmSystemTools::CollapseFullPath(this->StartOutputDirectory);
- cmSystemTools::MakeDirectory(this->StartOutputDirectory.c_str());
- this->AddDefinition("CMAKE_CURRENT_BINARY_DIR",
- this->StartOutputDirectory.c_str());
+ this->StateSnapshot.SetCurrentBinaryDirectory(dir);
+ const char* binDir = this->StateSnapshot.GetCurrentBinaryDirectory();
+ cmSystemTools::MakeDirectory(binDir);
+ this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", binDir);
}
const char* cmMakefile::GetCurrentBinaryDirectory() const
{
- return this->StartOutputDirectory.c_str();
+ return this->StateSnapshot.GetCurrentBinaryDirectory();
}
//----------------------------------------------------------------------------
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 447dadc..8968e81 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -858,8 +858,6 @@ protected:
// Check for a an unused variable
void CheckForUnused(const char* reason, const std::string& name) const;
- std::string cmStartDirectory;
- std::string StartOutputDirectory;
std::string cmCurrentListFile;
std::string ProjectName; // project name
diff --git a/Source/cmState.cxx b/Source/cmState.cxx
index 610257e..d6899a4 100644
--- a/Source/cmState.cxx
+++ b/Source/cmState.cxx
@@ -472,6 +472,8 @@ cmState::Snapshot cmState::CreateSnapshot(Snapshot originSnapshot)
{
PositionType pos = this->ParentPositions.size();
this->ParentPositions.push_back(originSnapshot.Position);
+ this->Locations.resize(this->Locations.size() + 1);
+ this->OutputLocations.resize(this->OutputLocations.size() + 1);
return cmState::Snapshot(this, pos);
}
@@ -481,3 +483,34 @@ cmState::Snapshot::Snapshot(cmState* state, PositionType position)
{
}
+
+const char* cmState::Snapshot::GetCurrentSourceDirectory() const
+{
+ return this->State->Locations[this->Position].c_str();
+}
+
+void cmState::Snapshot::SetCurrentSourceDirectory(std::string const& dir)
+{
+ assert(this->State->Locations.size() > this->Position);
+ this->State->Locations[this->Position] = dir;
+ cmSystemTools::ConvertToUnixSlashes(
+ this->State->Locations[this->Position]);
+ this->State->Locations[this->Position] =
+ cmSystemTools::CollapseFullPath(this->State->Locations[this->Position]);
+}
+
+const char* cmState::Snapshot::GetCurrentBinaryDirectory() const
+{
+ return this->State->OutputLocations[this->Position].c_str();
+}
+
+void cmState::Snapshot::SetCurrentBinaryDirectory(std::string const& dir)
+{
+ assert(this->State->OutputLocations.size() > this->Position);
+ this->State->OutputLocations[this->Position] = dir;
+ cmSystemTools::ConvertToUnixSlashes(
+ this->State->OutputLocations[this->Position]);
+ this->State->OutputLocations[this->Position] =
+ cmSystemTools::CollapseFullPath(
+ this->State->OutputLocations[this->Position]);
+}
diff --git a/Source/cmState.h b/Source/cmState.h
index f35cbd6..9902db9 100644
--- a/Source/cmState.h
+++ b/Source/cmState.h
@@ -31,6 +31,11 @@ public:
public:
Snapshot(cmState* state = 0, PositionType position = 0);
+ const char* GetCurrentSourceDirectory() const;
+ void SetCurrentSourceDirectory(std::string const& dir);
+ const char* GetCurrentBinaryDirectory() const;
+ void SetCurrentBinaryDirectory(std::string const& dir);
+
private:
friend class cmState;
cmState* State;
@@ -120,6 +125,8 @@ private:
std::map<std::string, cmCommand*> Commands;
cmPropertyMap GlobalProperties;
cmake* CMakeInstance;
+ std::vector<std::string> Locations;
+ std::vector<std::string> OutputLocations;
std::vector<PositionType> ParentPositions;
std::string SourceDirectory;
std::string BinaryDirectory;