浏览代码

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.
Stephen Kelly 10 年之前
父节点
当前提交
a48aebcb67
共有 59 个文件被更改,包括 132 次插入86 次删除
  1. 4 2
      Source/cmGlobalBorlandMakefileGenerator.cxx
  2. 1 1
      Source/cmGlobalBorlandMakefileGenerator.h
  3. 3 2
      Source/cmGlobalGenerator.cxx
  4. 1 1
      Source/cmGlobalGenerator.h
  5. 3 2
      Source/cmGlobalGhsMultiGenerator.cxx
  6. 1 1
      Source/cmGlobalGhsMultiGenerator.h
  7. 4 2
      Source/cmGlobalJOMMakefileGenerator.cxx
  8. 1 1
      Source/cmGlobalJOMMakefileGenerator.h
  9. 4 2
      Source/cmGlobalMSYSMakefileGenerator.cxx
  10. 1 1
      Source/cmGlobalMSYSMakefileGenerator.h
  11. 4 2
      Source/cmGlobalMinGWMakefileGenerator.cxx
  12. 1 1
      Source/cmGlobalMinGWMakefileGenerator.h
  13. 4 2
      Source/cmGlobalNMakeMakefileGenerator.cxx
  14. 1 1
      Source/cmGlobalNMakeMakefileGenerator.h
  15. 3 2
      Source/cmGlobalNinjaGenerator.cxx
  16. 1 1
      Source/cmGlobalNinjaGenerator.h
  17. 3 2
      Source/cmGlobalUnixMakefileGenerator3.cxx
  18. 1 1
      Source/cmGlobalUnixMakefileGenerator3.h
  19. 4 2
      Source/cmGlobalVisualStudio10Generator.cxx
  20. 1 1
      Source/cmGlobalVisualStudio10Generator.h
  21. 4 2
      Source/cmGlobalVisualStudio11Generator.cxx
  22. 1 1
      Source/cmGlobalVisualStudio11Generator.h
  23. 4 2
      Source/cmGlobalVisualStudio12Generator.cxx
  24. 1 1
      Source/cmGlobalVisualStudio12Generator.h
  25. 4 2
      Source/cmGlobalVisualStudio14Generator.cxx
  26. 1 1
      Source/cmGlobalVisualStudio14Generator.h
  27. 3 2
      Source/cmGlobalVisualStudio6Generator.cxx
  28. 1 1
      Source/cmGlobalVisualStudio6Generator.h
  29. 4 2
      Source/cmGlobalVisualStudio71Generator.cxx
  30. 1 1
      Source/cmGlobalVisualStudio71Generator.h
  31. 4 2
      Source/cmGlobalVisualStudio7Generator.cxx
  32. 1 1
      Source/cmGlobalVisualStudio7Generator.h
  33. 4 2
      Source/cmGlobalVisualStudio8Generator.cxx
  34. 1 1
      Source/cmGlobalVisualStudio8Generator.h
  35. 4 2
      Source/cmGlobalVisualStudio9Generator.cxx
  36. 1 1
      Source/cmGlobalVisualStudio9Generator.h
  37. 4 2
      Source/cmGlobalWatcomWMakeGenerator.cxx
  38. 1 1
      Source/cmGlobalWatcomWMakeGenerator.h
  39. 3 2
      Source/cmGlobalXCodeGenerator.cxx
  40. 1 1
      Source/cmGlobalXCodeGenerator.h
  41. 6 2
      Source/cmLocalGenerator.cxx
  42. 1 2
      Source/cmLocalGenerator.h
  43. 2 1
      Source/cmLocalGhsMultiGenerator.cxx
  44. 1 1
      Source/cmLocalGhsMultiGenerator.h
  45. 2 2
      Source/cmLocalNinjaGenerator.cxx
  46. 1 1
      Source/cmLocalNinjaGenerator.h
  47. 3 1
      Source/cmLocalUnixMakefileGenerator3.cxx
  48. 1 1
      Source/cmLocalUnixMakefileGenerator3.h
  49. 3 2
      Source/cmLocalVisualStudio10Generator.cxx
  50. 1 1
      Source/cmLocalVisualStudio10Generator.h
  51. 3 2
      Source/cmLocalVisualStudio6Generator.cxx
  52. 1 1
      Source/cmLocalVisualStudio6Generator.h
  53. 3 2
      Source/cmLocalVisualStudio7Generator.cxx
  54. 1 1
      Source/cmLocalVisualStudio7Generator.h
  55. 3 1
      Source/cmLocalVisualStudioGenerator.cxx
  56. 1 1
      Source/cmLocalVisualStudioGenerator.h
  57. 2 1
      Source/cmLocalXCodeGenerator.cxx
  58. 1 1
      Source/cmLocalXCodeGenerator.h
  59. 2 2
      Source/cmMakefile.cxx

+ 4 - 2
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);

+ 1 - 1
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

+ 3 - 2
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;
 }

+ 1 - 1
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"; }

+ 3 - 2
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;

+ 1 - 1
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"; }

+ 4 - 2
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");

+ 1 - 1
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

+ 4 - 2
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);

+ 1 - 1
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

+ 4 - 2
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);

+ 1 - 1
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

+ 4 - 2
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");

+ 1 - 1
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

+ 3 - 2
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;
 }

+ 1 - 1
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 {

+ 3 - 2
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;
 }

+ 1 - 1
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

+ 4 - 2
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;
 }

+ 1 - 1
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

+ 4 - 2
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;
 }

+ 1 - 1
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);

+ 4 - 2
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;
 }

+ 1 - 1
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

+ 4 - 2
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;
 }

+ 1 - 1
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:

+ 3 - 2
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;
 }

+ 1 - 1
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

+ 4 - 2
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;

+ 1 - 1
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

+ 4 - 2
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;

+ 1 - 1
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);
 

+ 4 - 2
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;

+ 1 - 1
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);

+ 4 - 2
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;

+ 1 - 1
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

+ 4 - 2
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);

+ 1 - 1
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

+ 3 - 2
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;
 }

+ 1 - 1
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

+ 6 - 2
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;

+ 1 - 2
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); }

+ 2 - 1
Source/cmLocalGhsMultiGenerator.cxx

@@ -16,7 +16,8 @@
 #include "cmGhsMultiTargetGenerator.h"
 #include "cmGeneratedFileStream.h"
 
-cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator()
+cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator(cmLocalGenerator* parent)
+  : cmLocalGenerator(parent)
 {
 }
 

+ 1 - 1
Source/cmLocalGhsMultiGenerator.h

@@ -25,7 +25,7 @@ class cmGeneratedFileStream;
 class cmLocalGhsMultiGenerator : public cmLocalGenerator
 {
 public:
-  cmLocalGhsMultiGenerator();
+  cmLocalGhsMultiGenerator(cmLocalGenerator* parent);
 
   virtual ~cmLocalGhsMultiGenerator();
 

+ 2 - 2
Source/cmLocalNinjaGenerator.cxx

@@ -22,8 +22,8 @@
 
 #include <assert.h>
 
-cmLocalNinjaGenerator::cmLocalNinjaGenerator()
-  : cmLocalGenerator()
+cmLocalNinjaGenerator::cmLocalNinjaGenerator(cmLocalGenerator* parent)
+  : cmLocalGenerator(parent)
   , ConfigName("")
   , HomeRelativeOutputPath("")
 {

+ 1 - 1
Source/cmLocalNinjaGenerator.h

@@ -32,7 +32,7 @@ class cmLocalNinjaGenerator : public cmLocalGenerator
 {
 public:
   /// Default constructor.
-  cmLocalNinjaGenerator();
+  cmLocalNinjaGenerator(cmLocalGenerator* parent);
 
   /// Destructor.
   virtual ~cmLocalNinjaGenerator();

+ 3 - 1
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";

+ 1 - 1
Source/cmLocalUnixMakefileGenerator3.h

@@ -34,7 +34,7 @@ class cmSourceFile;
 class cmLocalUnixMakefileGenerator3 : public cmLocalGenerator
 {
 public:
-  cmLocalUnixMakefileGenerator3();
+  cmLocalUnixMakefileGenerator3(cmLocalGenerator* parent);
   virtual ~cmLocalUnixMakefileGenerator3();
 
   /**

+ 3 - 2
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)
 {
 }
 

+ 1 - 1
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();
 

+ 3 - 2
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)
 {
 }
 

+ 1 - 1
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();
 

+ 3 - 2
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);

+ 1 - 1
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();
 

+ 3 - 1
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;

+ 1 - 1
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.  */

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

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

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