Browse Source

cmState: Store the Current directories.

Stephen Kelly 10 years ago
parent
commit
46f6a5f458
4 changed files with 48 additions and 16 deletions
  1. 8 14
      Source/cmMakefile.cxx
  2. 0 2
      Source/cmMakefile.h
  3. 33 0
      Source/cmState.cxx
  4. 7 0
      Source/cmState.h

+ 8 - 14
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();
 }
 
 //----------------------------------------------------------------------------

+ 0 - 2
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

+ 33 - 0
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]);
+}

+ 7 - 0
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;