This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  d70c4bfbee1754595bde4ee0cc2f0e4efb35cebb (commit)
       via  46f6a5f458d7d9ef074820d3e90960af2793bd33 (commit)
       via  3a041c59495df26c2b7b0ee58069d27a03bd18ff (commit)
       via  ae6c8a9d68120229a2960a83b51241fdb926700a (commit)
       via  86f3cd0f7e0e0a0db210b5ed3f01766624dbc67f (commit)
       via  a48aebcb67a66bd2fee1318bb971cc5e3b016410 (commit)
       via  e4c78b37cec74c505e8a4951276c17f7e64e5f67 (commit)
       via  410f39a43ef3ad900bcaed15e6838f97f034f0e7 (commit)
       via  397b6298602f1496d1b946f5db827f5807d6ed23 (commit)
      from  69b8d8e4f6f6c3ad1520050ecd6bf355c8e8d3da (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d70c4bfbee1754595bde4ee0cc2f0e4efb35cebb
commit d70c4bfbee1754595bde4ee0cc2f0e4efb35cebb
Merge: 69b8d8e 46f6a5f
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Tue Apr 28 02:04:03 2015 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Tue Apr 28 02:04:03 2015 -0400

    Merge topic 'cmState-CurrentDirs' into next
    
    46f6a5f4 cmState: Store the Current directories.
    3a041c59 Introduce cmState::Snapshot.
    ae6c8a9d cmState: Store the Source and Binary directories.
    86f3cd0f cmMakefile: Require the localGenerator in the constructor.
    a48aebcb cmLocalGenerator: Require a parent in the constructor.
    e4c78b37 cmMakefile: Inline SetHome* methods into last remaining caller.
    410f39a4 cmMakefile: Delegate storage of Home dirs to the cmake class.
    397b6298 CMake Nightly Date Stamp

diff --cc Source/cmMakefile.cxx
index b46c99f,0935383..1853754
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@@ -171,13 -53,32 +171,30 @@@ public
  };
  
  // default is not to be building executables
- cmMakefile::cmMakefile(): Internal(new Internals)
+ cmMakefile::cmMakefile(cmLocalGenerator* localGenerator)
+   : Internal(new Internals),
+     LocalGenerator(localGenerator),
+     StateSnapshot(localGenerator->GetGlobalGenerator()
+                                 ->GetCMakeInstance()->GetState())
  {
 -  const cmDefinitions& defs = cmDefinitions();
 -  const std::set<std::string> globalKeys = defs.LocalKeys();
 -  this->Internal->VarStack.push(defs);
 -  this->Internal->VarInitStack.push(globalKeys);
 -  this->Internal->VarUsageStack.push(globalKeys);
 +  this->Internal->PushDefinitions();
 +  this->Internal->VarInitStack.push(std::set<std::string>());
 +  this->Internal->VarUsageStack.push(std::set<std::string>());
    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;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=46f6a5f458d7d9ef074820d3e90960af2793bd33
commit 46f6a5f458d7d9ef074820d3e90960af2793bd33
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Tue Apr 28 07:50:31 2015 +0200
Commit:     Stephen Kelly <steve...@gmail.com>
CommitDate: Tue Apr 28 07:57:21 2015 +0200

    cmState: Store the Current directories.

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;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3a041c59495df26c2b7b0ee58069d27a03bd18ff
commit 3a041c59495df26c2b7b0ee58069d27a03bd18ff
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Sat Apr 11 18:38:16 2015 +0200
Commit:     Stephen Kelly <steve...@gmail.com>
CommitDate: Tue Apr 28 07:57:01 2015 +0200

    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.

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 8c6b195..5d48f58 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -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;
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index d120fb3..447dadc 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -922,7 +922,7 @@ private:
   cmMakefile& operator=(const cmMakefile& mf);
   void Initialize();
 
-
+  cmState::Snapshot StateSnapshot;
 
   bool ReadListFileInternal(const char* filenametoread,
                             bool noPolicyScope,
diff --git a/Source/cmState.cxx b/Source/cmState.cxx
index 6fbbc4b..610257e 100644
--- a/Source/cmState.cxx
+++ b/Source/cmState.cxx
@@ -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)
+{
+
+}
diff --git a/Source/cmState.h b/Source/cmState.h
index afacc36..f35cbd6 100644
--- a/Source/cmState.h
+++ b/Source/cmState.h
@@ -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;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ae6c8a9d68120229a2960a83b51241fdb926700a
commit ae6c8a9d68120229a2960a83b51241fdb926700a
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Sun Apr 12 15:26:54 2015 +0200
Commit:     Stephen Kelly <steve...@gmail.com>
CommitDate: Tue Apr 28 07:50:57 2015 +0200

    cmState: Store the Source and Binary directories.

diff --git a/Source/cmState.cxx b/Source/cmState.cxx
index 96f8a51..6fbbc4b 100644
--- a/Source/cmState.cxx
+++ b/Source/cmState.cxx
@@ -444,3 +444,25 @@ bool cmState::GetGlobalPropertyAsBool(const std::string& 
prop)
 {
   return cmSystemTools::IsOn(this->GetGlobalProperty(prop));
 }
+
+void cmState::SetSourceDirectory(std::string const& sourceDirectory)
+{
+  this->SourceDirectory = sourceDirectory;
+  cmSystemTools::ConvertToUnixSlashes(this->SourceDirectory);
+}
+
+const char* cmState::GetSourceDirectory() const
+{
+  return this->SourceDirectory.c_str();
+}
+
+void cmState::SetBinaryDirectory(std::string const& binaryDirectory)
+{
+  this->BinaryDirectory = binaryDirectory;
+  cmSystemTools::ConvertToUnixSlashes(this->BinaryDirectory);
+}
+
+const char* cmState::GetBinaryDirectory() const
+{
+  return this->BinaryDirectory.c_str();
+}
diff --git a/Source/cmState.h b/Source/cmState.h
index 34b2ccf..afacc36 100644
--- a/Source/cmState.h
+++ b/Source/cmState.h
@@ -95,12 +95,19 @@ public:
   const char *GetGlobalProperty(const std::string& prop);
   bool GetGlobalPropertyAsBool(const std::string& prop);
 
+  const char* GetSourceDirectory() const;
+  void SetSourceDirectory(std::string const& sourceDirectory);
+  const char* GetBinaryDirectory() const;
+  void SetBinaryDirectory(std::string const& binaryDirectory);
+
 private:
   std::map<cmProperty::ScopeType, cmPropertyDefinitionMap> PropertyDefinitions;
   std::vector<std::string> EnabledLanguages;
   std::map<std::string, cmCommand*> Commands;
   cmPropertyMap GlobalProperties;
   cmake* CMakeInstance;
+  std::string SourceDirectory;
+  std::string BinaryDirectory;
   bool IsInTryCompile;
 };
 
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index f72b088..5c5c428 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -978,24 +978,22 @@ cmGlobalGenerator* cmake::CreateGlobalGenerator(const 
std::string& gname)
 
 void cmake::SetHomeDirectory(const std::string& dir)
 {
-  this->cmHomeDirectory = dir;
-  cmSystemTools::ConvertToUnixSlashes(this->cmHomeDirectory);
+  this->State->SetSourceDirectory(dir);
 }
 
 const char* cmake::GetHomeDirectory() const
 {
-  return this->cmHomeDirectory.c_str();
+  return this->State->GetSourceDirectory();
 }
 
 void cmake::SetHomeOutputDirectory(const std::string& dir)
 {
-  this->HomeOutputDirectory = dir;
-  cmSystemTools::ConvertToUnixSlashes(this->HomeOutputDirectory);
+  this->State->SetBinaryDirectory(dir);
 }
 
 const char* cmake::GetHomeOutputDirectory() const
 {
-  return this->HomeOutputDirectory.c_str();
+  return this->State->GetBinaryDirectory();
 }
 
 void cmake::SetGlobalGenerator(cmGlobalGenerator *gg)
diff --git a/Source/cmake.h b/Source/cmake.h
index 9dd7c31..0d1977e 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -336,8 +336,6 @@ protected:
   cmPolicies *Policies;
   cmGlobalGenerator *GlobalGenerator;
   cmCacheManager *CacheManager;
-  std::string cmHomeDirectory;
-  std::string HomeOutputDirectory;
   bool SuppressDevWarnings;
   bool DoSuppressDevWarnings;
   std::string GeneratorPlatform;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=86f3cd0f7e0e0a0db210b5ed3f01766624dbc67f
commit 86f3cd0f7e0e0a0db210b5ed3f01766624dbc67f
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Mon Apr 27 22:38:45 2015 +0200
Commit:     Stephen Kelly <steve...@gmail.com>
CommitDate: Tue Apr 28 07:50:57 2015 +0200

    cmMakefile: Require the localGenerator in the constructor.
    
    Move the contents of cmMakeile::SetLocalGenerator to the Initialize
    method.

diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 6d17171..6b705e8 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -253,8 +253,7 @@ void cmLocalGenerator::SetupPathConversions()
 void cmLocalGenerator::SetGlobalGenerator(cmGlobalGenerator *gg)
 {
   this->GlobalGenerator = gg;
-  this->Makefile = new cmMakefile;
-  this->Makefile->SetLocalGenerator(this);
+  this->Makefile = new cmMakefile(this);
 }
 
 void cmLocalGenerator::ConfigureFinalPass()
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index a00b8eb..8c6b195 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -53,7 +53,8 @@ public:
 };
 
 // default is not to be building executables
-cmMakefile::cmMakefile(): Internal(new Internals)
+cmMakefile::cmMakefile(cmLocalGenerator* localGenerator)
+  : Internal(new Internals)
 {
   const cmDefinitions& defs = cmDefinitions();
   const std::set<std::string> globalKeys = defs.LocalKeys();
@@ -97,7 +98,7 @@ cmMakefile::cmMakefile(): Internal(new Internals)
   this->HeaderFileExtensions.push_back( "txx" );
 
   this->DefineFlags = " ";
-  this->LocalGenerator = 0;
+  this->LocalGenerator = localGenerator;
 
   this->AddDefaultDefinitions();
   this->Initialize();
@@ -126,6 +127,39 @@ void cmMakefile::Initialize()
   // By default the check is not done.  It is enabled by
   // cmListFileCache in the top level if necessary.
   this->CheckCMP0000 = false;
+
+#if defined(CMAKE_BUILD_WITH_CMAKE)
+  this->AddSourceGroup("", "^.*$");
+  this->AddSourceGroup
+    ("Source Files",
+     "\\.(C|M|c|c\\+\\+|cc|cpp|cxx|f|f90|for|fpp"
+     "|ftn|m|mm|rc|def|r|odl|idl|hpj|bat)$");
+  this->AddSourceGroup("Header Files", CM_HEADER_REGEX);
+  this->AddSourceGroup("CMake Rules", "\\.rule$");
+  this->AddSourceGroup("Resources", "\\.plist$");
+  this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$");
+#endif
+
+  this->Properties.SetCMakeInstance(this->GetCMakeInstance());
+  this->WarnUnused = this->GetCMakeInstance()->GetWarnUnused();
+  this->CheckSystemVars = this->GetCMakeInstance()->GetCheckSystemVars();
+
+  {
+  const char* dir = this->GetCMakeInstance()->GetHomeDirectory();
+  this->AddDefinition("CMAKE_SOURCE_DIR", dir);
+  if ( !this->GetDefinition("CMAKE_CURRENT_SOURCE_DIR") )
+    {
+    this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", dir);
+    }
+  }
+  {
+  const char* dir = this->GetCMakeInstance()->GetHomeOutputDirectory();
+  this->AddDefinition("CMAKE_BINARY_DIR", dir);
+  if ( !this->GetDefinition("CMAKE_CURRENT_BINARY_DIR") )
+    {
+    this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", dir);
+    }
+  }
 }
 
 cmMakefile::~cmMakefile()
@@ -630,46 +664,6 @@ void cmMakefile::EnforceDirectoryLevelRules() const
     }
 }
 
-// Set the make file
-void cmMakefile::SetLocalGenerator(cmLocalGenerator* lg)
-{
-  this->LocalGenerator = lg;
-  // the source groups need to access the global generator
-  // so don't create them until the lg is set
-#if defined(CMAKE_BUILD_WITH_CMAKE)
-  this->AddSourceGroup("", "^.*$");
-  this->AddSourceGroup
-    ("Source Files",
-     "\\.(C|M|c|c\\+\\+|cc|cpp|cxx|f|f90|for|fpp"
-     "|ftn|m|mm|rc|def|r|odl|idl|hpj|bat)$");
-  this->AddSourceGroup("Header Files", CM_HEADER_REGEX);
-  this->AddSourceGroup("CMake Rules", "\\.rule$");
-  this->AddSourceGroup("Resources", "\\.plist$");
-  this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$");
-#endif
-
-  this->Properties.SetCMakeInstance(this->GetCMakeInstance());
-  this->WarnUnused = this->GetCMakeInstance()->GetWarnUnused();
-  this->CheckSystemVars = this->GetCMakeInstance()->GetCheckSystemVars();
-
-  {
-  const char* dir = this->GetCMakeInstance()->GetHomeDirectory();
-  this->AddDefinition("CMAKE_SOURCE_DIR", dir);
-  if ( !this->GetDefinition("CMAKE_CURRENT_SOURCE_DIR") )
-    {
-    this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", dir);
-    }
-  }
-  {
-  const char* dir = this->GetCMakeInstance()->GetHomeOutputDirectory();
-  this->AddDefinition("CMAKE_BINARY_DIR", dir);
-  if ( !this->GetDefinition("CMAKE_CURRENT_BINARY_DIR") )
-    {
-    this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", dir);
-    }
-  }
-}
-
 namespace
 {
   struct file_not_persistent
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index dcf56e1..d120fb3 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -74,7 +74,7 @@ public:
   /**
    * Construct an empty makefile.
    */
-  cmMakefile();
+  cmMakefile(cmLocalGenerator* localGenerator);
 
   /**
    * Destructor.
@@ -138,13 +138,6 @@ public:
 
   bool GetIsSourceFileTryCompile() const;
 
-  /**
-   * Specify the makefile generator. This is platform/compiler
-   * dependent, although the interface is through a generic
-   * superclass.
-   */
-  void SetLocalGenerator(cmLocalGenerator*);
-
   ///! Get the current makefile generator.
   cmLocalGenerator* GetLocalGenerator() const
     { return this->LocalGenerator;}

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a48aebcb67a66bd2fee1318bb971cc5e3b016410
commit a48aebcb67a66bd2fee1318bb971cc5e3b016410
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Tue Apr 28 07:50:52 2015 +0200
Commit:     Stephen Kelly <steve...@gmail.com>
CommitDate: Tue Apr 28 07:50:52 2015 +0200

    cmLocalGenerator: Require a parent in the constructor.
    
    Pass the parent though cmGlobalGenerator::CreateLocalGenerator.
    
    This will make it easy to initialize state scopes independent of
    cmMakefile.

diff --git a/Source/cmGlobalBorlandMakefileGenerator.cxx 
b/Source/cmGlobalBorlandMakefileGenerator.cxx
index e557619..597e08e 100644
--- a/Source/cmGlobalBorlandMakefileGenerator.cxx
+++ b/Source/cmGlobalBorlandMakefileGenerator.cxx
@@ -37,9 +37,11 @@ void cmGlobalBorlandMakefileGenerator
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalBorlandMakefileGenerator::CreateLocalGenerator()
+cmLocalGenerator *cmGlobalBorlandMakefileGenerator::CreateLocalGenerator(
+    cmLocalGenerator* parent)
 {
-  cmLocalUnixMakefileGenerator3* lg = new cmLocalUnixMakefileGenerator3;
+  cmLocalUnixMakefileGenerator3* lg =
+      new cmLocalUnixMakefileGenerator3(parent);
   lg->SetIncludeDirective("!include");
   lg->SetWindowsShell(true);
   lg->SetDefineWindowsNULL(true);
diff --git a/Source/cmGlobalBorlandMakefileGenerator.h 
b/Source/cmGlobalBorlandMakefileGenerator.h
index 005f0d6..3f79414 100644
--- a/Source/cmGlobalBorlandMakefileGenerator.h
+++ b/Source/cmGlobalBorlandMakefileGenerator.h
@@ -36,7 +36,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 774b172..384f023 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1878,9 +1878,10 @@ void cmGlobalGenerator::EnableInstallTarget()
   this->InstallTargetEnabled = true;
 }
 
-cmLocalGenerator *cmGlobalGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalGenerator::CreateLocalGenerator(cmLocalGenerator *parent)
 {
-  cmLocalGenerator *lg = new cmLocalGenerator;
+  cmLocalGenerator *lg = new cmLocalGenerator(parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index ce3f037..b51bd47 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -53,7 +53,7 @@ public:
   virtual ~cmGlobalGenerator();
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   ///! Get the name for this generator
   virtual std::string GetName() const { return "Generic"; }
diff --git a/Source/cmGlobalGhsMultiGenerator.cxx 
b/Source/cmGlobalGhsMultiGenerator.cxx
index bba29b1..181a517 100644
--- a/Source/cmGlobalGhsMultiGenerator.cxx
+++ b/Source/cmGlobalGhsMultiGenerator.cxx
@@ -32,9 +32,10 @@ cmGlobalGhsMultiGenerator::~cmGlobalGhsMultiGenerator()
   cmDeleteAll(TargetFolderBuildStreams);
 }
 
-cmLocalGenerator *cmGlobalGhsMultiGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalGhsMultiGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalGenerator *lg = new cmLocalGhsMultiGenerator;
+  cmLocalGenerator *lg = new cmLocalGhsMultiGenerator(parent);
   lg->SetGlobalGenerator(this);
   this->SetCurrentLocalGenerator(lg);
   return lg;
diff --git a/Source/cmGlobalGhsMultiGenerator.h 
b/Source/cmGlobalGhsMultiGenerator.h
index b934c3a..6464f5c 100644
--- a/Source/cmGlobalGhsMultiGenerator.h
+++ b/Source/cmGlobalGhsMultiGenerator.h
@@ -31,7 +31,7 @@ public:
   { return new cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>(); }
 
   ///! create the correct local generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /// @return the name of this generator.
   static std::string GetActualName() { return "Green Hills MULTI"; }
diff --git a/Source/cmGlobalJOMMakefileGenerator.cxx 
b/Source/cmGlobalJOMMakefileGenerator.cxx
index bc15ef2..cfa5072 100644
--- a/Source/cmGlobalJOMMakefileGenerator.cxx
+++ b/Source/cmGlobalJOMMakefileGenerator.cxx
@@ -45,9 +45,11 @@ void cmGlobalJOMMakefileGenerator
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalJOMMakefileGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalJOMMakefileGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalUnixMakefileGenerator3* lg = new cmLocalUnixMakefileGenerator3;
+  cmLocalUnixMakefileGenerator3* lg
+      = new cmLocalUnixMakefileGenerator3(parent);
   lg->SetDefineWindowsNULL(true);
   lg->SetWindowsShell(true);
   lg->SetMakeSilentFlag("/nologo");
diff --git a/Source/cmGlobalJOMMakefileGenerator.h 
b/Source/cmGlobalJOMMakefileGenerator.h
index fbb35f3..4831309 100644
--- a/Source/cmGlobalJOMMakefileGenerator.h
+++ b/Source/cmGlobalJOMMakefileGenerator.h
@@ -37,7 +37,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalMSYSMakefileGenerator.cxx 
b/Source/cmGlobalMSYSMakefileGenerator.cxx
index 16f05e5..fa23491 100644
--- a/Source/cmGlobalMSYSMakefileGenerator.cxx
+++ b/Source/cmGlobalMSYSMakefileGenerator.cxx
@@ -93,9 +93,11 @@ void cmGlobalMSYSMakefileGenerator
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalMSYSMakefileGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalMSYSMakefileGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalUnixMakefileGenerator3* lg = new cmLocalUnixMakefileGenerator3;
+  cmLocalUnixMakefileGenerator3* lg =
+      new cmLocalUnixMakefileGenerator3(parent);
   lg->SetWindowsShell(false);
   lg->SetMSYSShell(true);
   lg->SetGlobalGenerator(this);
diff --git a/Source/cmGlobalMSYSMakefileGenerator.h 
b/Source/cmGlobalMSYSMakefileGenerator.h
index baecde7..1795d86 100644
--- a/Source/cmGlobalMSYSMakefileGenerator.h
+++ b/Source/cmGlobalMSYSMakefileGenerator.h
@@ -36,7 +36,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalMinGWMakefileGenerator.cxx 
b/Source/cmGlobalMinGWMakefileGenerator.cxx
index e00c7dd..c9389aa 100644
--- a/Source/cmGlobalMinGWMakefileGenerator.cxx
+++ b/Source/cmGlobalMinGWMakefileGenerator.cxx
@@ -31,9 +31,11 @@ void cmGlobalMinGWMakefileGenerator
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalMinGWMakefileGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalMinGWMakefileGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalUnixMakefileGenerator3* lg = new cmLocalUnixMakefileGenerator3;
+  cmLocalUnixMakefileGenerator3* lg =
+      new cmLocalUnixMakefileGenerator3(parent);
   lg->SetWindowsShell(true);
   lg->SetGlobalGenerator(this);
   lg->SetIgnoreLibPrefix(true);
diff --git a/Source/cmGlobalMinGWMakefileGenerator.h 
b/Source/cmGlobalMinGWMakefileGenerator.h
index fa8d9f2..93f67be 100644
--- a/Source/cmGlobalMinGWMakefileGenerator.h
+++ b/Source/cmGlobalMinGWMakefileGenerator.h
@@ -35,7 +35,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalNMakeMakefileGenerator.cxx 
b/Source/cmGlobalNMakeMakefileGenerator.cxx
index 4fbabe4..a3b3dd7 100644
--- a/Source/cmGlobalNMakeMakefileGenerator.cxx
+++ b/Source/cmGlobalNMakeMakefileGenerator.cxx
@@ -45,9 +45,11 @@ void cmGlobalNMakeMakefileGenerator
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalNMakeMakefileGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalNMakeMakefileGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalUnixMakefileGenerator3* lg = new cmLocalUnixMakefileGenerator3;
+  cmLocalUnixMakefileGenerator3* lg =
+      new cmLocalUnixMakefileGenerator3(parent);
   lg->SetDefineWindowsNULL(true);
   lg->SetWindowsShell(true);
   lg->SetMakeSilentFlag("/nologo");
diff --git a/Source/cmGlobalNMakeMakefileGenerator.h 
b/Source/cmGlobalNMakeMakefileGenerator.h
index e7b03dd..cb898ba 100644
--- a/Source/cmGlobalNMakeMakefileGenerator.h
+++ b/Source/cmGlobalNMakeMakefileGenerator.h
@@ -35,7 +35,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalNinjaGenerator.cxx 
b/Source/cmGlobalNinjaGenerator.cxx
index 76f2e14..074c4d1 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -496,9 +496,10 @@ cmGlobalNinjaGenerator::cmGlobalNinjaGenerator()
 //----------------------------------------------------------------------------
 // Virtual public methods.
 
-cmLocalGenerator* cmGlobalNinjaGenerator::CreateLocalGenerator()
+cmLocalGenerator*
+cmGlobalNinjaGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalGenerator* lg = new cmLocalNinjaGenerator;
+  cmLocalGenerator* lg = new cmLocalNinjaGenerator(parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h
index 6aa76f9..d7b3add 100644
--- a/Source/cmGlobalNinjaGenerator.h
+++ b/Source/cmGlobalNinjaGenerator.h
@@ -171,7 +171,7 @@ public:
   virtual ~cmGlobalNinjaGenerator() { }
 
   /// Overloaded methods. @see cmGlobalGenerator::CreateLocalGenerator()
-  virtual cmLocalGenerator* CreateLocalGenerator();
+  virtual cmLocalGenerator* CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /// Overloaded methods. @see cmGlobalGenerator::GetName().
   virtual std::string GetName() const {
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx 
b/Source/cmGlobalUnixMakefileGenerator3.cxx
index 8cf6be1..95998ae 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -53,9 +53,10 @@ void cmGlobalUnixMakefileGenerator3
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalUnixMakefileGenerator3::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalUnixMakefileGenerator3::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalGenerator* lg = new cmLocalUnixMakefileGenerator3;
+  cmLocalGenerator* lg = new cmLocalUnixMakefileGenerator3(parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h 
b/Source/cmGlobalUnixMakefileGenerator3.h
index a76a835..165a3c8 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -68,7 +68,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator3
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx 
b/Source/cmGlobalVisualStudio10Generator.cxx
index 8240099..6481ec2 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -308,10 +308,12 @@ void 
cmGlobalVisualStudio10Generator::WriteSLNHeader(std::ostream& fout)
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalVisualStudio10Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio10Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio10Generator* lg =
-    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS10);
+    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS10,
+                                       parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalVisualStudio10Generator.h 
b/Source/cmGlobalVisualStudio10Generator.h
index f0dd7d7..8cb2588 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -46,7 +46,7 @@ public:
     );
 
   ///! create the correct local generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalVisualStudio11Generator.cxx 
b/Source/cmGlobalVisualStudio11Generator.cxx
index 5d3ae16..45d6d95 100644
--- a/Source/cmGlobalVisualStudio11Generator.cxx
+++ b/Source/cmGlobalVisualStudio11Generator.cxx
@@ -237,10 +237,12 @@ void 
cmGlobalVisualStudio11Generator::WriteSLNHeader(std::ostream& fout)
 }
 
 //----------------------------------------------------------------------------
-cmLocalGenerator *cmGlobalVisualStudio11Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio11Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio10Generator* lg =
-    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS11);
+    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS11,
+                                       parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalVisualStudio11Generator.h 
b/Source/cmGlobalVisualStudio11Generator.h
index 6d434eb..ae4b888 100644
--- a/Source/cmGlobalVisualStudio11Generator.h
+++ b/Source/cmGlobalVisualStudio11Generator.h
@@ -29,7 +29,7 @@ public:
   virtual void WriteSLNHeader(std::ostream& fout);
 
   ///! create the correct local generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
 protected:
   virtual bool InitializeWindowsPhone(cmMakefile* mf);
diff --git a/Source/cmGlobalVisualStudio12Generator.cxx 
b/Source/cmGlobalVisualStudio12Generator.cxx
index e70e082..e298b06 100644
--- a/Source/cmGlobalVisualStudio12Generator.cxx
+++ b/Source/cmGlobalVisualStudio12Generator.cxx
@@ -217,10 +217,12 @@ void 
cmGlobalVisualStudio12Generator::WriteSLNHeader(std::ostream& fout)
 }
 
 //----------------------------------------------------------------------------
-cmLocalGenerator *cmGlobalVisualStudio12Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio12Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio10Generator* lg =
-    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS12);
+    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS12,
+                                       parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalVisualStudio12Generator.h 
b/Source/cmGlobalVisualStudio12Generator.h
index 5e5b5f7..d304bc1 100644
--- a/Source/cmGlobalVisualStudio12Generator.h
+++ b/Source/cmGlobalVisualStudio12Generator.h
@@ -29,7 +29,7 @@ public:
   virtual void WriteSLNHeader(std::ostream& fout);
 
   ///! create the correct local generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   //in Visual Studio 2013 they detached the MSBuild tools version
   //from the .Net Framework version and instead made it have it's own
diff --git a/Source/cmGlobalVisualStudio14Generator.cxx 
b/Source/cmGlobalVisualStudio14Generator.cxx
index 7b1dd24..6642d88 100644
--- a/Source/cmGlobalVisualStudio14Generator.cxx
+++ b/Source/cmGlobalVisualStudio14Generator.cxx
@@ -128,10 +128,12 @@ void 
cmGlobalVisualStudio14Generator::WriteSLNHeader(std::ostream& fout)
 }
 
 //----------------------------------------------------------------------------
-cmLocalGenerator *cmGlobalVisualStudio14Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio14Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio10Generator* lg =
-    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS14);
+    new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS14,
+                                       parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalVisualStudio14Generator.h 
b/Source/cmGlobalVisualStudio14Generator.h
index ad1a460..59f1e60 100644
--- a/Source/cmGlobalVisualStudio14Generator.h
+++ b/Source/cmGlobalVisualStudio14Generator.h
@@ -29,7 +29,7 @@ public:
   virtual void WriteSLNHeader(std::ostream& fout);
 
   ///! create the correct local generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   virtual const char* GetToolsVersion() { return "14.0"; }
 protected:
diff --git a/Source/cmGlobalVisualStudio6Generator.cxx 
b/Source/cmGlobalVisualStudio6Generator.cxx
index 0852db6..55e70b3 100644
--- a/Source/cmGlobalVisualStudio6Generator.cxx
+++ b/Source/cmGlobalVisualStudio6Generator.cxx
@@ -170,9 +170,10 @@ cmGlobalVisualStudio6Generator::GenerateBuildCommand(
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalVisualStudio6Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio6Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalGenerator *lg = new cmLocalVisualStudio6Generator;
+  cmLocalGenerator *lg = new cmLocalVisualStudio6Generator(parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalVisualStudio6Generator.h 
b/Source/cmGlobalVisualStudio6Generator.h
index a59a0b2..d748a85 100644
--- a/Source/cmGlobalVisualStudio6Generator.h
+++ b/Source/cmGlobalVisualStudio6Generator.h
@@ -39,7 +39,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalVisualStudio71Generator.cxx 
b/Source/cmGlobalVisualStudio71Generator.cxx
index a67a649..db34d44 100644
--- a/Source/cmGlobalVisualStudio71Generator.cxx
+++ b/Source/cmGlobalVisualStudio71Generator.cxx
@@ -25,10 +25,12 @@ 
cmGlobalVisualStudio71Generator::cmGlobalVisualStudio71Generator(
 
 //----------------------------------------------------------------------------
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalVisualStudio71Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio71Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio7Generator *lg =
-    new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS71);
+    new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS71,
+                                      parent);
   lg->SetExtraFlagTable(this->GetExtraFlagTableVS7());
   lg->SetGlobalGenerator(this);
   return lg;
diff --git a/Source/cmGlobalVisualStudio71Generator.h 
b/Source/cmGlobalVisualStudio71Generator.h
index 2b5259a..ad6c153 100644
--- a/Source/cmGlobalVisualStudio71Generator.h
+++ b/Source/cmGlobalVisualStudio71Generator.h
@@ -37,7 +37,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Where does this version of Visual Studio look for macros for the
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx 
b/Source/cmGlobalVisualStudio7Generator.cxx
index 1b03193..de90f7e 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -250,10 +250,12 @@ void cmGlobalVisualStudio7Generator::GenerateBuildCommand(
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalVisualStudio7Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio7Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio7Generator *lg =
-    new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS7);
+    new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS7,
+                                      parent);
   lg->SetExtraFlagTable(this->GetExtraFlagTableVS7());
   lg->SetGlobalGenerator(this);
   return lg;
diff --git a/Source/cmGlobalVisualStudio7Generator.h 
b/Source/cmGlobalVisualStudio7Generator.h
index d641c02..92c5f1a 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/Source/cmGlobalVisualStudio7Generator.h
@@ -42,7 +42,7 @@ public:
   std::string const& GetPlatformName() const;
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   virtual bool SetSystemName(std::string const& s, cmMakefile* mf);
 
diff --git a/Source/cmGlobalVisualStudio8Generator.cxx 
b/Source/cmGlobalVisualStudio8Generator.cxx
index bb50633..7174f21 100644
--- a/Source/cmGlobalVisualStudio8Generator.cxx
+++ b/Source/cmGlobalVisualStudio8Generator.cxx
@@ -125,10 +125,12 @@ std::string 
cmGlobalVisualStudio8Generator::FindDevEnvCommand()
 
 //----------------------------------------------------------------------------
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalVisualStudio8Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio8Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio7Generator *lg =
-    new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS8);
+    new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS8,
+                                      parent);
   lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
   lg->SetGlobalGenerator(this);
   return lg;
diff --git a/Source/cmGlobalVisualStudio8Generator.h 
b/Source/cmGlobalVisualStudio8Generator.h
index 4b41ed7..ee5ba9f 100644
--- a/Source/cmGlobalVisualStudio8Generator.h
+++ b/Source/cmGlobalVisualStudio8Generator.h
@@ -34,7 +34,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   virtual void EnableLanguage(std::vector<std::string>const& languages,
                               cmMakefile *, bool optional);
diff --git a/Source/cmGlobalVisualStudio9Generator.cxx 
b/Source/cmGlobalVisualStudio9Generator.cxx
index 1bc627f..0303c27 100644
--- a/Source/cmGlobalVisualStudio9Generator.cxx
+++ b/Source/cmGlobalVisualStudio9Generator.cxx
@@ -114,10 +114,12 @@ void 
cmGlobalVisualStudio9Generator::WriteSLNHeader(std::ostream& fout)
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalVisualStudio9Generator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalVisualStudio9Generator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
   cmLocalVisualStudio7Generator *lg
-    = new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS9);
+    = new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS9,
+                                        parent);
   lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
   lg->SetGlobalGenerator(this);
   return lg;
diff --git a/Source/cmGlobalVisualStudio9Generator.h 
b/Source/cmGlobalVisualStudio9Generator.h
index 0a191cd..97b7804 100644
--- a/Source/cmGlobalVisualStudio9Generator.h
+++ b/Source/cmGlobalVisualStudio9Generator.h
@@ -29,7 +29,7 @@ public:
   static cmGlobalGeneratorFactory* NewFactory();
 
   ///! create the correct local generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalWatcomWMakeGenerator.cxx 
b/Source/cmGlobalWatcomWMakeGenerator.cxx
index e44ed79..77c6474 100644
--- a/Source/cmGlobalWatcomWMakeGenerator.cxx
+++ b/Source/cmGlobalWatcomWMakeGenerator.cxx
@@ -41,9 +41,11 @@ void cmGlobalWatcomWMakeGenerator
 }
 
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalWatcomWMakeGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalWatcomWMakeGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalUnixMakefileGenerator3* lg = new cmLocalUnixMakefileGenerator3;
+  cmLocalUnixMakefileGenerator3* lg
+      = new cmLocalUnixMakefileGenerator3(parent);
   lg->SetDefineWindowsNULL(true);
 #ifdef _WIN32
   lg->SetWindowsShell(true);
diff --git a/Source/cmGlobalWatcomWMakeGenerator.h 
b/Source/cmGlobalWatcomWMakeGenerator.h
index 7bc209b..3af2f9d 100644
--- a/Source/cmGlobalWatcomWMakeGenerator.h
+++ b/Source/cmGlobalWatcomWMakeGenerator.h
@@ -35,7 +35,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmGlobalXCodeGenerator.cxx 
b/Source/cmGlobalXCodeGenerator.cxx
index d333c1d..742750c 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -368,9 +368,10 @@ cmGlobalXCodeGenerator::GenerateBuildCommand(
 
 //----------------------------------------------------------------------------
 ///! Create a local generator appropriate to this Global Generator
-cmLocalGenerator *cmGlobalXCodeGenerator::CreateLocalGenerator()
+cmLocalGenerator *
+cmGlobalXCodeGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
 {
-  cmLocalGenerator *lg = new cmLocalXCodeGenerator;
+  cmLocalGenerator *lg = new cmLocalXCodeGenerator(parent);
   lg->SetGlobalGenerator(this);
   return lg;
 }
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index 1a69fce..6c911a4 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -41,7 +41,7 @@ public:
   static void GetDocumentation(cmDocumentationEntry& entry);
 
   ///! Create a local generator appropriate to this Global Generator
-  virtual cmLocalGenerator *CreateLocalGenerator();
+  virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
 
   /**
    * Try to determine system information such as shared library
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index dc74374..6d17171 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -43,10 +43,14 @@
 #include <StorageDefs.h>
 #endif
 
-cmLocalGenerator::cmLocalGenerator()
+cmLocalGenerator::cmLocalGenerator(cmLocalGenerator* parent)
 {
   this->Makefile = 0; // moved to after set on global
-  this->Parent = 0;
+  this->Parent = parent;
+  if (parent)
+    {
+    parent->AddChild(this);
+    }
   this->WindowsShell = false;
   this->WindowsVSIDE = false;
   this->WatcomWMake = false;
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index a005f5f..befddbf 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -33,7 +33,7 @@ class cmCustomCommandGenerator;
 class cmLocalGenerator
 {
 public:
-  cmLocalGenerator();
+  cmLocalGenerator(cmLocalGenerator* parent);
   virtual ~cmLocalGenerator();
 
   /**
@@ -131,7 +131,6 @@ public:
 
   ///! set/get the parent generator
   cmLocalGenerator* GetParent() const {return this->Parent;}
-  void SetParent(cmLocalGenerator* g) { this->Parent = g; g->AddChild(this); }
 
   ///! set/get the children
   void AddChild(cmLocalGenerator* g) { this->Children.push_back(g); }
diff --git a/Source/cmLocalGhsMultiGenerator.cxx 
b/Source/cmLocalGhsMultiGenerator.cxx
index a3edc45..fa2a1a5 100644
--- a/Source/cmLocalGhsMultiGenerator.cxx
+++ b/Source/cmLocalGhsMultiGenerator.cxx
@@ -16,7 +16,8 @@
 #include "cmGhsMultiTargetGenerator.h"
 #include "cmGeneratedFileStream.h"
 
-cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator()
+cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator(cmLocalGenerator* parent)
+  : cmLocalGenerator(parent)
 {
 }
 
diff --git a/Source/cmLocalGhsMultiGenerator.h 
b/Source/cmLocalGhsMultiGenerator.h
index a8df3e7..7afef56 100644
--- a/Source/cmLocalGhsMultiGenerator.h
+++ b/Source/cmLocalGhsMultiGenerator.h
@@ -25,7 +25,7 @@ class cmGeneratedFileStream;
 class cmLocalGhsMultiGenerator : public cmLocalGenerator
 {
 public:
-  cmLocalGhsMultiGenerator();
+  cmLocalGhsMultiGenerator(cmLocalGenerator* parent);
 
   virtual ~cmLocalGhsMultiGenerator();
 
diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx
index d4741a0..4e817a0 100644
--- a/Source/cmLocalNinjaGenerator.cxx
+++ b/Source/cmLocalNinjaGenerator.cxx
@@ -22,8 +22,8 @@
 
 #include <assert.h>
 
-cmLocalNinjaGenerator::cmLocalNinjaGenerator()
-  : cmLocalGenerator()
+cmLocalNinjaGenerator::cmLocalNinjaGenerator(cmLocalGenerator* parent)
+  : cmLocalGenerator(parent)
   , ConfigName("")
   , HomeRelativeOutputPath("")
 {
diff --git a/Source/cmLocalNinjaGenerator.h b/Source/cmLocalNinjaGenerator.h
index 01e16df..d72677b 100644
--- a/Source/cmLocalNinjaGenerator.h
+++ b/Source/cmLocalNinjaGenerator.h
@@ -32,7 +32,7 @@ class cmLocalNinjaGenerator : public cmLocalGenerator
 {
 public:
   /// Default constructor.
-  cmLocalNinjaGenerator();
+  cmLocalNinjaGenerator(cmLocalGenerator* parent);
 
   /// Destructor.
   virtual ~cmLocalNinjaGenerator();
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx 
b/Source/cmLocalUnixMakefileGenerator3.cxx
index f66b54a..bf6fb61 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -79,7 +79,9 @@ static std::string cmSplitExtension(std::string const& in, 
std::string& base)
 }
 
 //----------------------------------------------------------------------------
-cmLocalUnixMakefileGenerator3::cmLocalUnixMakefileGenerator3()
+cmLocalUnixMakefileGenerator3::
+cmLocalUnixMakefileGenerator3(cmLocalGenerator* parent)
+  : cmLocalGenerator(parent)
 {
   this->WindowsShell = false;
   this->IncludeDirective = "include";
diff --git a/Source/cmLocalUnixMakefileGenerator3.h 
b/Source/cmLocalUnixMakefileGenerator3.h
index a2f4245..9f83b86 100644
--- a/Source/cmLocalUnixMakefileGenerator3.h
+++ b/Source/cmLocalUnixMakefileGenerator3.h
@@ -34,7 +34,7 @@ class cmSourceFile;
 class cmLocalUnixMakefileGenerator3 : public cmLocalGenerator
 {
 public:
-  cmLocalUnixMakefileGenerator3();
+  cmLocalUnixMakefileGenerator3(cmLocalGenerator* parent);
   virtual ~cmLocalUnixMakefileGenerator3();
 
   /**
diff --git a/Source/cmLocalVisualStudio10Generator.cxx 
b/Source/cmLocalVisualStudio10Generator.cxx
index 2b67562..73a4ec8 100644
--- a/Source/cmLocalVisualStudio10Generator.cxx
+++ b/Source/cmLocalVisualStudio10Generator.cxx
@@ -61,8 +61,9 @@ class cmVS10XMLParser : public cmXMLParser
 
 
 //----------------------------------------------------------------------------
-cmLocalVisualStudio10Generator::cmLocalVisualStudio10Generator(VSVersion v):
-  cmLocalVisualStudio7Generator(v)
+cmLocalVisualStudio10Generator
+::cmLocalVisualStudio10Generator(VSVersion v, cmLocalGenerator* parent):
+  cmLocalVisualStudio7Generator(v, parent)
 {
 }
 
diff --git a/Source/cmLocalVisualStudio10Generator.h 
b/Source/cmLocalVisualStudio10Generator.h
index b50e345..f90daa0 100644
--- a/Source/cmLocalVisualStudio10Generator.h
+++ b/Source/cmLocalVisualStudio10Generator.h
@@ -25,7 +25,7 @@ class cmLocalVisualStudio10Generator : public 
cmLocalVisualStudio7Generator
 {
 public:
   ///! Set cache only and recurse to false by default.
-  cmLocalVisualStudio10Generator(VSVersion v);
+  cmLocalVisualStudio10Generator(VSVersion v, cmLocalGenerator* parent);
 
   virtual ~cmLocalVisualStudio10Generator();
 
diff --git a/Source/cmLocalVisualStudio6Generator.cxx 
b/Source/cmLocalVisualStudio6Generator.cxx
index 69da9fb..6d89b15 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -23,8 +23,9 @@
 #include <cmsys/RegularExpression.hxx>
 #include <cmsys/FStream.hxx>
 
-cmLocalVisualStudio6Generator::cmLocalVisualStudio6Generator():
-  cmLocalVisualStudioGenerator(VS6)
+cmLocalVisualStudio6Generator
+::cmLocalVisualStudio6Generator(cmLocalGenerator* parent):
+  cmLocalVisualStudioGenerator(VS6, parent)
 {
 }
 
diff --git a/Source/cmLocalVisualStudio6Generator.h 
b/Source/cmLocalVisualStudio6Generator.h
index 4771833..1a0a614 100644
--- a/Source/cmLocalVisualStudio6Generator.h
+++ b/Source/cmLocalVisualStudio6Generator.h
@@ -29,7 +29,7 @@ class cmLocalVisualStudio6Generator : public 
cmLocalVisualStudioGenerator
 {
 public:
   ///! Set cache only and recurse to false by default.
-  cmLocalVisualStudio6Generator();
+  cmLocalVisualStudio6Generator(cmLocalGenerator* parent);
 
   virtual ~cmLocalVisualStudio6Generator();
 
diff --git a/Source/cmLocalVisualStudio7Generator.cxx 
b/Source/cmLocalVisualStudio7Generator.cxx
index 928481c..2152f77 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -54,8 +54,9 @@ static void cmConvertToWindowsSlash(std::string& s)
 }
 
 //----------------------------------------------------------------------------
-cmLocalVisualStudio7Generator::cmLocalVisualStudio7Generator(VSVersion v):
-  cmLocalVisualStudioGenerator(v)
+cmLocalVisualStudio7Generator
+::cmLocalVisualStudio7Generator(VSVersion v, cmLocalGenerator* parent):
+  cmLocalVisualStudioGenerator(v, parent)
 {
   this->ExtraFlagTable = 0;
   this->Internal = new cmLocalVisualStudio7GeneratorInternals(this);
diff --git a/Source/cmLocalVisualStudio7Generator.h 
b/Source/cmLocalVisualStudio7Generator.h
index c2caa26..cfbc63c 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -35,7 +35,7 @@ class cmLocalVisualStudio7Generator : public 
cmLocalVisualStudioGenerator
 {
 public:
   ///! Set cache only and recurse to false by default.
-  cmLocalVisualStudio7Generator(VSVersion v);
+  cmLocalVisualStudio7Generator(VSVersion v, cmLocalGenerator* parent);
 
   virtual ~cmLocalVisualStudio7Generator();
 
diff --git a/Source/cmLocalVisualStudioGenerator.cxx 
b/Source/cmLocalVisualStudioGenerator.cxx
index f01aa6b..854ad34 100644
--- a/Source/cmLocalVisualStudioGenerator.cxx
+++ b/Source/cmLocalVisualStudioGenerator.cxx
@@ -18,7 +18,9 @@
 #include "windows.h"
 
 //----------------------------------------------------------------------------
-cmLocalVisualStudioGenerator::cmLocalVisualStudioGenerator(VSVersion v)
+cmLocalVisualStudioGenerator
+::cmLocalVisualStudioGenerator(VSVersion v, cmLocalGenerator* parent)
+  : cmLocalGenerator(parent)
 {
   this->WindowsShell = true;
   this->WindowsVSIDE = true;
diff --git a/Source/cmLocalVisualStudioGenerator.h 
b/Source/cmLocalVisualStudioGenerator.h
index d26c2ea..562d595 100644
--- a/Source/cmLocalVisualStudioGenerator.h
+++ b/Source/cmLocalVisualStudioGenerator.h
@@ -45,7 +45,7 @@ public:
     VS14 = 140
   };
 
-  cmLocalVisualStudioGenerator(VSVersion v);
+  cmLocalVisualStudioGenerator(VSVersion v, cmLocalGenerator* parent);
   virtual ~cmLocalVisualStudioGenerator();
 
   /** Construct a script from the given list of command lines.  */
diff --git a/Source/cmLocalXCodeGenerator.cxx b/Source/cmLocalXCodeGenerator.cxx
index 8ff6c87..1d3a8cf 100644
--- a/Source/cmLocalXCodeGenerator.cxx
+++ b/Source/cmLocalXCodeGenerator.cxx
@@ -15,7 +15,8 @@
 #include "cmMakefile.h"
 
 //----------------------------------------------------------------------------
-cmLocalXCodeGenerator::cmLocalXCodeGenerator()
+cmLocalXCodeGenerator::cmLocalXCodeGenerator(cmLocalGenerator* parent)
+  : cmLocalGenerator(parent)
 {
   // the global generator does this, so do not
   // put these flags into the language flags
diff --git a/Source/cmLocalXCodeGenerator.h b/Source/cmLocalXCodeGenerator.h
index f553a17..1a5760f 100644
--- a/Source/cmLocalXCodeGenerator.h
+++ b/Source/cmLocalXCodeGenerator.h
@@ -24,7 +24,7 @@ class cmLocalXCodeGenerator : public cmLocalGenerator
 {
 public:
   ///! Set cache only and recurse to false by default.
-  cmLocalXCodeGenerator();
+  cmLocalXCodeGenerator(cmLocalGenerator* parent);
 
   virtual ~cmLocalXCodeGenerator();
   virtual std::string GetTargetDirectory(cmTarget const& target) const;
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 4c68849..a00b8eb 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -1617,8 +1617,8 @@ void cmMakefile::AddSubDirectory(const std::string& 
srcPath,
 
   // create a new local generator and set its parent
   cmLocalGenerator *lg2 =
-    this->LocalGenerator->GetGlobalGenerator()->CreateLocalGenerator();
-  lg2->SetParent(this->LocalGenerator);
+    this->LocalGenerator->GetGlobalGenerator()
+        ->CreateLocalGenerator(this->LocalGenerator);
   this->LocalGenerator->GetGlobalGenerator()->AddLocalGenerator(lg2);
 
   // set the subdirs start dirs

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e4c78b37cec74c505e8a4951276c17f7e64e5f67
commit e4c78b37cec74c505e8a4951276c17f7e64e5f67
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Sun Apr 26 19:53:06 2015 +0200
Commit:     Stephen Kelly <steve...@gmail.com>
CommitDate: Tue Apr 28 07:50:02 2015 +0200

    cmMakefile: Inline SetHome* methods into last remaining caller.

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index c8b6849..4c68849 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -651,9 +651,23 @@ void cmMakefile::SetLocalGenerator(cmLocalGenerator* lg)
   this->Properties.SetCMakeInstance(this->GetCMakeInstance());
   this->WarnUnused = this->GetCMakeInstance()->GetWarnUnused();
   this->CheckSystemVars = this->GetCMakeInstance()->GetCheckSystemVars();
-  this->SetHomeDirectory(this->GetCMakeInstance()->GetHomeDirectory());
-  this->SetHomeOutputDirectory(
-    this->GetCMakeInstance()->GetHomeOutputDirectory());
+
+  {
+  const char* dir = this->GetCMakeInstance()->GetHomeDirectory();
+  this->AddDefinition("CMAKE_SOURCE_DIR", dir);
+  if ( !this->GetDefinition("CMAKE_CURRENT_SOURCE_DIR") )
+    {
+    this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", dir);
+    }
+  }
+  {
+  const char* dir = this->GetCMakeInstance()->GetHomeOutputDirectory();
+  this->AddDefinition("CMAKE_BINARY_DIR", dir);
+  if ( !this->GetDefinition("CMAKE_CURRENT_BINARY_DIR") )
+    {
+    this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", dir);
+    }
+  }
 }
 
 namespace
@@ -3385,29 +3399,11 @@ const char* cmMakefile::GetHomeDirectory() const
   return this->GetCMakeInstance()->GetHomeDirectory();
 }
 
-void cmMakefile::SetHomeDirectory(const std::string& dir)
-{
-  this->AddDefinition("CMAKE_SOURCE_DIR", dir.c_str());
-  if ( !this->GetDefinition("CMAKE_CURRENT_SOURCE_DIR") )
-    {
-    this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", dir.c_str());
-    }
-}
-
 const char* cmMakefile::GetHomeOutputDirectory() const
 {
   return this->GetCMakeInstance()->GetHomeOutputDirectory();
 }
 
-void cmMakefile::SetHomeOutputDirectory(const std::string& dir)
-{
-  this->AddDefinition("CMAKE_BINARY_DIR", dir.c_str());
-  if ( !this->GetDefinition("CMAKE_CURRENT_BINARY_DIR") )
-    {
-    this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", dir.c_str());
-    }
-}
-
 void cmMakefile::SetScriptModeFile(const char* scriptfile)
 {
   this->AddDefinition("CMAKE_SCRIPT_MODE_FILE", scriptfile);
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 8c5ccc9..dcf56e1 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -422,19 +422,8 @@ public:
   bool HasCMP0054AlreadyBeenReported(
     cmListFileContext context) const;
 
-  //@{
-  /**
-   * Set/Get the home directory (or output directory) in the project. The
-   * home directory is the top directory of the project. It is where
-   * CMakeSetup or configure was run. Remember that CMake processes
-   * CMakeLists files by recursing up the tree starting at the StartDirectory
-   * and going up until it reaches the HomeDirectory.
-   */
-  void SetHomeDirectory(const std::string& dir);
   const char* GetHomeDirectory() const;
-  void SetHomeOutputDirectory(const std::string& dir);
   const char* GetHomeOutputDirectory() const;
-  //@}
 
   /**
    * Set CMAKE_SCRIPT_MODE_FILE variable when running a -P script.

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=410f39a43ef3ad900bcaed15e6838f97f034f0e7
commit 410f39a43ef3ad900bcaed15e6838f97f034f0e7
Author:     Stephen Kelly <steve...@gmail.com>
AuthorDate: Sun Apr 26 17:18:27 2015 +0200
Commit:     Stephen Kelly <steve...@gmail.com>
CommitDate: Tue Apr 28 07:50:01 2015 +0200

    cmMakefile: Delegate storage of Home dirs to the cmake class.
    
    There is no need to duplicate these on every cmMakefile.

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index c77a90c..c8b6849 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -181,11 +181,11 @@ void cmMakefile::Print() const
   std::cout << " this->StartOutputDirectory; " <<
     this->GetCurrentBinaryDirectory() << std::endl;
   std::cout << " this->HomeOutputDirectory; " <<
-    this->HomeOutputDirectory << std::endl;
+    this->GetHomeOutputDirectory() << std::endl;
   std::cout << " this->cmStartDirectory; " <<
     this->GetCurrentSourceDirectory() << std::endl;
   std::cout << " this->cmHomeDirectory; " <<
-    this->cmHomeDirectory << std::endl;
+    this->GetHomeDirectory() << std::endl;
   std::cout << " this->ProjectName; "
             <<  this->ProjectName << std::endl;
   this->PrintStringVector("this->LinkDirectories", this->LinkDirectories);
@@ -3382,34 +3382,29 @@ cmMakefile::LexicalPushPop::~LexicalPushPop()
 
 const char* cmMakefile::GetHomeDirectory() const
 {
-  return this->cmHomeDirectory.c_str();
+  return this->GetCMakeInstance()->GetHomeDirectory();
 }
 
 void cmMakefile::SetHomeDirectory(const std::string& dir)
 {
-  this->cmHomeDirectory = dir;
-  cmSystemTools::ConvertToUnixSlashes(this->cmHomeDirectory);
-  this->AddDefinition("CMAKE_SOURCE_DIR", this->GetHomeDirectory());
+  this->AddDefinition("CMAKE_SOURCE_DIR", dir.c_str());
   if ( !this->GetDefinition("CMAKE_CURRENT_SOURCE_DIR") )
     {
-    this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", this->GetHomeDirectory());
+    this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", dir.c_str());
     }
 }
 
 const char* cmMakefile::GetHomeOutputDirectory() const
 {
-  return this->HomeOutputDirectory.c_str();
+  return this->GetCMakeInstance()->GetHomeOutputDirectory();
 }
 
 void cmMakefile::SetHomeOutputDirectory(const std::string& dir)
 {
-  this->HomeOutputDirectory = dir;
-  cmSystemTools::ConvertToUnixSlashes(this->HomeOutputDirectory);
-  this->AddDefinition("CMAKE_BINARY_DIR", this->GetHomeOutputDirectory());
+  this->AddDefinition("CMAKE_BINARY_DIR", dir.c_str());
   if ( !this->GetDefinition("CMAKE_CURRENT_BINARY_DIR") )
     {
-    this->AddDefinition("CMAKE_CURRENT_BINARY_DIR",
-                        this->GetHomeOutputDirectory());
+    this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", dir.c_str());
     }
 }
 
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 46e9391..8c5ccc9 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -878,8 +878,6 @@ protected:
 
   std::string cmStartDirectory;
   std::string StartOutputDirectory;
-  std::string cmHomeDirectory;
-  std::string HomeOutputDirectory;
   std::string cmCurrentListFile;
 
   std::string ProjectName;    // project name
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index 1548c36..91b2b27 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -1210,10 +1210,11 @@ static cmGlobalGenerator* CreateGlobalGenerator(cmake* 
cm,
   cmGlobalGenerator* gg = new cmGlobalGenerator();
   gg->SetCMakeInstance(cm);
 
+  cm->SetHomeOutputDirectory(targetDirectory);
+  cm->SetHomeDirectory(targetDirectory);
+
   cmLocalGenerator* lg = gg->CreateLocalGenerator();
-  lg->GetMakefile()->SetHomeOutputDirectory(targetDirectory);
   lg->GetMakefile()->SetCurrentBinaryDirectory(targetDirectory);
-  lg->GetMakefile()->SetHomeDirectory(targetDirectory);
   lg->GetMakefile()->SetCurrentSourceDirectory(targetDirectory);
   gg->SetCurrentLocalGenerator(lg);
 
@@ -1225,6 +1226,8 @@ bool cmQtAutoGenerators::Run(const std::string& 
targetDirectory,
 {
   bool success = true;
   cmake cm;
+  cm.SetHomeOutputDirectory(targetDirectory);
+  cm.SetHomeDirectory(targetDirectory);
   cmGlobalGenerator* gg = CreateGlobalGenerator(&cm, targetDirectory);
   cmMakefile* makefile = gg->GetCurrentLocalGenerator()->GetMakefile();
 
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 439cc54..f72b088 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -372,13 +372,13 @@ void cmake::ReadListFile(const std::vector<std::string>& 
args,
   // read in the list file to fill the cache
   if(path)
     {
+    std::string homeDir = this->GetHomeDirectory();
+    std::string homeOutputDir = this->GetHomeOutputDirectory();
+    this->SetHomeDirectory(cmSystemTools::GetCurrentWorkingDirectory());
+    this->SetHomeOutputDirectory(cmSystemTools::GetCurrentWorkingDirectory());
     cmsys::auto_ptr<cmLocalGenerator> lg(gg->CreateLocalGenerator());
-    lg->GetMakefile()->SetHomeOutputDirectory
-      (cmSystemTools::GetCurrentWorkingDirectory());
     lg->GetMakefile()->SetCurrentBinaryDirectory
       (cmSystemTools::GetCurrentWorkingDirectory());
-    lg->GetMakefile()->SetHomeDirectory
-      (cmSystemTools::GetCurrentWorkingDirectory());
     lg->GetMakefile()->SetCurrentSourceDirectory
       (cmSystemTools::GetCurrentWorkingDirectory());
     if (this->GetWorkingMode() != NORMAL_MODE)
@@ -393,6 +393,8 @@ void cmake::ReadListFile(const std::vector<std::string>& 
args,
       {
       cmSystemTools::Error("Error processing file: ", path);
       }
+    this->SetHomeDirectory(homeDir);
+    this->SetHomeOutputDirectory(homeOutputDir);
     }
 
   // free generic one if generated

-----------------------------------------------------------------------

Summary of changes:
 Source/CMakeVersion.cmake                   |    2 +-
 Source/cmGlobalBorlandMakefileGenerator.cxx |    6 +-
 Source/cmGlobalBorlandMakefileGenerator.h   |    2 +-
 Source/cmGlobalGenerator.cxx                |    5 +-
 Source/cmGlobalGenerator.h                  |    2 +-
 Source/cmGlobalGhsMultiGenerator.cxx        |    5 +-
 Source/cmGlobalGhsMultiGenerator.h          |    2 +-
 Source/cmGlobalJOMMakefileGenerator.cxx     |    6 +-
 Source/cmGlobalJOMMakefileGenerator.h       |    2 +-
 Source/cmGlobalMSYSMakefileGenerator.cxx    |    6 +-
 Source/cmGlobalMSYSMakefileGenerator.h      |    2 +-
 Source/cmGlobalMinGWMakefileGenerator.cxx   |    6 +-
 Source/cmGlobalMinGWMakefileGenerator.h     |    2 +-
 Source/cmGlobalNMakeMakefileGenerator.cxx   |    6 +-
 Source/cmGlobalNMakeMakefileGenerator.h     |    2 +-
 Source/cmGlobalNinjaGenerator.cxx           |    5 +-
 Source/cmGlobalNinjaGenerator.h             |    2 +-
 Source/cmGlobalUnixMakefileGenerator3.cxx   |    5 +-
 Source/cmGlobalUnixMakefileGenerator3.h     |    2 +-
 Source/cmGlobalVisualStudio10Generator.cxx  |    6 +-
 Source/cmGlobalVisualStudio10Generator.h    |    2 +-
 Source/cmGlobalVisualStudio11Generator.cxx  |    6 +-
 Source/cmGlobalVisualStudio11Generator.h    |    2 +-
 Source/cmGlobalVisualStudio12Generator.cxx  |    6 +-
 Source/cmGlobalVisualStudio12Generator.h    |    2 +-
 Source/cmGlobalVisualStudio14Generator.cxx  |    6 +-
 Source/cmGlobalVisualStudio14Generator.h    |    2 +-
 Source/cmGlobalVisualStudio6Generator.cxx   |    5 +-
 Source/cmGlobalVisualStudio6Generator.h     |    2 +-
 Source/cmGlobalVisualStudio71Generator.cxx  |    6 +-
 Source/cmGlobalVisualStudio71Generator.h    |    2 +-
 Source/cmGlobalVisualStudio7Generator.cxx   |    6 +-
 Source/cmGlobalVisualStudio7Generator.h     |    2 +-
 Source/cmGlobalVisualStudio8Generator.cxx   |    6 +-
 Source/cmGlobalVisualStudio8Generator.h     |    2 +-
 Source/cmGlobalVisualStudio9Generator.cxx   |    6 +-
 Source/cmGlobalVisualStudio9Generator.h     |    2 +-
 Source/cmGlobalWatcomWMakeGenerator.cxx     |    6 +-
 Source/cmGlobalWatcomWMakeGenerator.h       |    2 +-
 Source/cmGlobalXCodeGenerator.cxx           |    5 +-
 Source/cmGlobalXCodeGenerator.h             |    2 +-
 Source/cmLocalGenerator.cxx                 |   11 ++-
 Source/cmLocalGenerator.h                   |    3 +-
 Source/cmLocalGhsMultiGenerator.cxx         |    3 +-
 Source/cmLocalGhsMultiGenerator.h           |    2 +-
 Source/cmLocalNinjaGenerator.cxx            |    4 +-
 Source/cmLocalNinjaGenerator.h              |    2 +-
 Source/cmLocalUnixMakefileGenerator3.cxx    |    4 +-
 Source/cmLocalUnixMakefileGenerator3.h      |    2 +-
 Source/cmLocalVisualStudio10Generator.cxx   |    5 +-
 Source/cmLocalVisualStudio10Generator.h     |    2 +-
 Source/cmLocalVisualStudio6Generator.cxx    |    5 +-
 Source/cmLocalVisualStudio6Generator.h      |    2 +-
 Source/cmLocalVisualStudio7Generator.cxx    |    5 +-
 Source/cmLocalVisualStudio7Generator.h      |    2 +-
 Source/cmLocalVisualStudioGenerator.cxx     |    4 +-
 Source/cmLocalVisualStudioGenerator.h       |    2 +-
 Source/cmLocalXCodeGenerator.cxx            |    3 +-
 Source/cmLocalXCodeGenerator.h              |    2 +-
 Source/cmMakefile.cxx                       |  137 +++++++++++++--------------
 Source/cmMakefile.h                         |   26 +----
 Source/cmQtAutoGenerators.cxx               |    7 +-
 Source/cmState.cxx                          |   70 ++++++++++++++
 Source/cmState.h                            |   29 ++++++
 Source/cmake.cxx                            |   20 ++--
 Source/cmake.h                              |    2 -
 66 files changed, 314 insertions(+), 196 deletions(-)


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/mailman/listinfo/cmake-commits

Reply via email to