Merge topic 'cmState-CurrentDirs'

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.
This commit is contained in:
Brad King 2015-04-29 11:11:42 -04:00 committed by CMake Topic Stage
commit 72e380fb12
65 changed files with 313 additions and 195 deletions

View File

@ -37,9 +37,11 @@ void cmGlobalBorlandMakefileGenerator
} }
///! Create a local generator appropriate to this Global Generator ///! 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->SetIncludeDirective("!include");
lg->SetWindowsShell(true); lg->SetWindowsShell(true);
lg->SetDefineWindowsNULL(true); lg->SetDefineWindowsNULL(true);

View File

@ -36,7 +36,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -1878,9 +1878,10 @@ void cmGlobalGenerator::EnableInstallTarget()
this->InstallTargetEnabled = true; this->InstallTargetEnabled = true;
} }
cmLocalGenerator *cmGlobalGenerator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalGenerator::CreateLocalGenerator(cmLocalGenerator *parent)
{ {
cmLocalGenerator *lg = new cmLocalGenerator; cmLocalGenerator *lg = new cmLocalGenerator(parent);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -53,7 +53,7 @@ public:
virtual ~cmGlobalGenerator(); virtual ~cmGlobalGenerator();
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
///! Get the name for this generator ///! Get the name for this generator
virtual std::string GetName() const { return "Generic"; } virtual std::string GetName() const { return "Generic"; }

View File

@ -32,9 +32,10 @@ cmGlobalGhsMultiGenerator::~cmGlobalGhsMultiGenerator()
cmDeleteAll(TargetFolderBuildStreams); cmDeleteAll(TargetFolderBuildStreams);
} }
cmLocalGenerator *cmGlobalGhsMultiGenerator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalGhsMultiGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalGenerator *lg = new cmLocalGhsMultiGenerator; cmLocalGenerator *lg = new cmLocalGhsMultiGenerator(parent);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
this->SetCurrentLocalGenerator(lg); this->SetCurrentLocalGenerator(lg);
return lg; return lg;

View File

@ -31,7 +31,7 @@ public:
{ return new cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>(); } { return new cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>(); }
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
/// @return the name of this generator. /// @return the name of this generator.
static std::string GetActualName() { return "Green Hills MULTI"; } static std::string GetActualName() { return "Green Hills MULTI"; }

View File

@ -45,9 +45,11 @@ void cmGlobalJOMMakefileGenerator
} }
///! Create a local generator appropriate to this Global Generator ///! 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->SetDefineWindowsNULL(true);
lg->SetWindowsShell(true); lg->SetWindowsShell(true);
lg->SetMakeSilentFlag("/nologo"); lg->SetMakeSilentFlag("/nologo");

View File

@ -37,7 +37,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -93,9 +93,11 @@ void cmGlobalMSYSMakefileGenerator
} }
///! Create a local generator appropriate to this Global Generator ///! 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->SetWindowsShell(false);
lg->SetMSYSShell(true); lg->SetMSYSShell(true);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);

View File

@ -36,7 +36,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -31,9 +31,11 @@ void cmGlobalMinGWMakefileGenerator
} }
///! Create a local generator appropriate to this Global Generator ///! 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->SetWindowsShell(true);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
lg->SetIgnoreLibPrefix(true); lg->SetIgnoreLibPrefix(true);

View File

@ -35,7 +35,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -45,9 +45,11 @@ void cmGlobalNMakeMakefileGenerator
} }
///! Create a local generator appropriate to this Global Generator ///! 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->SetDefineWindowsNULL(true);
lg->SetWindowsShell(true); lg->SetWindowsShell(true);
lg->SetMakeSilentFlag("/nologo"); lg->SetMakeSilentFlag("/nologo");

View File

@ -35,7 +35,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -496,9 +496,10 @@ cmGlobalNinjaGenerator::cmGlobalNinjaGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// Virtual public methods. // Virtual public methods.
cmLocalGenerator* cmGlobalNinjaGenerator::CreateLocalGenerator() cmLocalGenerator*
cmGlobalNinjaGenerator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalGenerator* lg = new cmLocalNinjaGenerator; cmLocalGenerator* lg = new cmLocalNinjaGenerator(parent);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -171,7 +171,7 @@ public:
virtual ~cmGlobalNinjaGenerator() { } virtual ~cmGlobalNinjaGenerator() { }
/// Overloaded methods. @see cmGlobalGenerator::CreateLocalGenerator() /// Overloaded methods. @see cmGlobalGenerator::CreateLocalGenerator()
virtual cmLocalGenerator* CreateLocalGenerator(); virtual cmLocalGenerator* CreateLocalGenerator(cmLocalGenerator* parent = 0);
/// Overloaded methods. @see cmGlobalGenerator::GetName(). /// Overloaded methods. @see cmGlobalGenerator::GetName().
virtual std::string GetName() const { virtual std::string GetName() const {

View File

@ -53,9 +53,10 @@ void cmGlobalUnixMakefileGenerator3
} }
///! Create a local generator appropriate to this Global Generator ///! 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); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -68,7 +68,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator3 ///! 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 * Try to determine system information such as shared library

View File

@ -308,10 +308,12 @@ void cmGlobalVisualStudio10Generator::WriteSLNHeader(std::ostream& fout)
} }
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio10Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio10Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio10Generator* lg = cmLocalVisualStudio10Generator* lg =
new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS10); new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS10,
parent);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -46,7 +46,7 @@ public:
); );
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
/** /**
* Try to determine system information such as shared library * Try to determine system information such as shared library

View File

@ -237,10 +237,12 @@ void cmGlobalVisualStudio11Generator::WriteSLNHeader(std::ostream& fout)
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalGenerator *cmGlobalVisualStudio11Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio11Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio10Generator* lg = cmLocalVisualStudio10Generator* lg =
new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS11); new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS11,
parent);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -29,7 +29,7 @@ public:
virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout);
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
protected: protected:
virtual bool InitializeWindowsPhone(cmMakefile* mf); virtual bool InitializeWindowsPhone(cmMakefile* mf);

View File

@ -217,10 +217,12 @@ void cmGlobalVisualStudio12Generator::WriteSLNHeader(std::ostream& fout)
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalGenerator *cmGlobalVisualStudio12Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio12Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio10Generator* lg = cmLocalVisualStudio10Generator* lg =
new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS12); new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS12,
parent);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -29,7 +29,7 @@ public:
virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout);
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
//in Visual Studio 2013 they detached the MSBuild tools version //in Visual Studio 2013 they detached the MSBuild tools version
//from the .Net Framework version and instead made it have it's own //from the .Net Framework version and instead made it have it's own

View File

@ -128,10 +128,12 @@ void cmGlobalVisualStudio14Generator::WriteSLNHeader(std::ostream& fout)
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalGenerator *cmGlobalVisualStudio14Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio14Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio10Generator* lg = cmLocalVisualStudio10Generator* lg =
new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS14); new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS14,
parent);
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -29,7 +29,7 @@ public:
virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout);
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
virtual const char* GetToolsVersion() { return "14.0"; } virtual const char* GetToolsVersion() { return "14.0"; }
protected: protected:

View File

@ -170,9 +170,10 @@ cmGlobalVisualStudio6Generator::GenerateBuildCommand(
} }
///! Create a local generator appropriate to this Global Generator ///! 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); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -39,7 +39,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -25,10 +25,12 @@ cmGlobalVisualStudio71Generator::cmGlobalVisualStudio71Generator(
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio71Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio71Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio7Generator *lg = cmLocalVisualStudio7Generator *lg =
new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS71); new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS71,
parent);
lg->SetExtraFlagTable(this->GetExtraFlagTableVS7()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS7());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;

View File

@ -37,7 +37,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Where does this version of Visual Studio look for macros for the

View File

@ -250,10 +250,12 @@ void cmGlobalVisualStudio7Generator::GenerateBuildCommand(
} }
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio7Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio7Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio7Generator *lg = cmLocalVisualStudio7Generator *lg =
new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS7); new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS7,
parent);
lg->SetExtraFlagTable(this->GetExtraFlagTableVS7()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS7());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;

View File

@ -42,7 +42,7 @@ public:
std::string const& GetPlatformName() const; std::string const& GetPlatformName() const;
///! Create a local generator appropriate to this Global Generator ///! 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); virtual bool SetSystemName(std::string const& s, cmMakefile* mf);

View File

@ -125,10 +125,12 @@ std::string cmGlobalVisualStudio8Generator::FindDevEnvCommand()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio8Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio8Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio7Generator *lg = cmLocalVisualStudio7Generator *lg =
new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS8); new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS8,
parent);
lg->SetExtraFlagTable(this->GetExtraFlagTableVS8()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;

View File

@ -34,7 +34,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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, virtual void EnableLanguage(std::vector<std::string>const& languages,
cmMakefile *, bool optional); cmMakefile *, bool optional);

View File

@ -114,10 +114,12 @@ void cmGlobalVisualStudio9Generator::WriteSLNHeader(std::ostream& fout)
} }
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio9Generator::CreateLocalGenerator() cmLocalGenerator *
cmGlobalVisualStudio9Generator::CreateLocalGenerator(cmLocalGenerator* parent)
{ {
cmLocalVisualStudio7Generator *lg cmLocalVisualStudio7Generator *lg
= new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS9); = new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS9,
parent);
lg->SetExtraFlagTable(this->GetExtraFlagTableVS8()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;

View File

@ -29,7 +29,7 @@ public:
static cmGlobalGeneratorFactory* NewFactory(); static cmGlobalGeneratorFactory* NewFactory();
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator(cmLocalGenerator* parent = 0);
/** /**
* Try to determine system information such as shared library * Try to determine system information such as shared library

View File

@ -41,9 +41,11 @@ void cmGlobalWatcomWMakeGenerator
} }
///! Create a local generator appropriate to this Global Generator ///! 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); lg->SetDefineWindowsNULL(true);
#ifdef _WIN32 #ifdef _WIN32
lg->SetWindowsShell(true); lg->SetWindowsShell(true);

View File

@ -35,7 +35,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -368,9 +368,10 @@ cmGlobalXCodeGenerator::GenerateBuildCommand(
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
///! Create a local generator appropriate to this Global Generator ///! 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); lg->SetGlobalGenerator(this);
return lg; return lg;
} }

View File

@ -41,7 +41,7 @@ public:
static void GetDocumentation(cmDocumentationEntry& entry); static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! 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 * Try to determine system information such as shared library

View File

@ -43,10 +43,14 @@
#include <StorageDefs.h> #include <StorageDefs.h>
#endif #endif
cmLocalGenerator::cmLocalGenerator() cmLocalGenerator::cmLocalGenerator(cmLocalGenerator* parent)
{ {
this->Makefile = 0; // moved to after set on global this->Makefile = 0; // moved to after set on global
this->Parent = 0; this->Parent = parent;
if (parent)
{
parent->AddChild(this);
}
this->WindowsShell = false; this->WindowsShell = false;
this->WindowsVSIDE = false; this->WindowsVSIDE = false;
this->WatcomWMake = false; this->WatcomWMake = false;
@ -249,8 +253,7 @@ void cmLocalGenerator::SetupPathConversions()
void cmLocalGenerator::SetGlobalGenerator(cmGlobalGenerator *gg) void cmLocalGenerator::SetGlobalGenerator(cmGlobalGenerator *gg)
{ {
this->GlobalGenerator = gg; this->GlobalGenerator = gg;
this->Makefile = new cmMakefile; this->Makefile = new cmMakefile(this);
this->Makefile->SetLocalGenerator(this);
} }
void cmLocalGenerator::ConfigureFinalPass() void cmLocalGenerator::ConfigureFinalPass()

View File

@ -33,7 +33,7 @@ class cmCustomCommandGenerator;
class cmLocalGenerator class cmLocalGenerator
{ {
public: public:
cmLocalGenerator(); cmLocalGenerator(cmLocalGenerator* parent);
virtual ~cmLocalGenerator(); virtual ~cmLocalGenerator();
/** /**
@ -131,7 +131,6 @@ public:
///! set/get the parent generator ///! set/get the parent generator
cmLocalGenerator* GetParent() const {return this->Parent;} cmLocalGenerator* GetParent() const {return this->Parent;}
void SetParent(cmLocalGenerator* g) { this->Parent = g; g->AddChild(this); }
///! set/get the children ///! set/get the children
void AddChild(cmLocalGenerator* g) { this->Children.push_back(g); } void AddChild(cmLocalGenerator* g) { this->Children.push_back(g); }

View File

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

View File

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

View File

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

View File

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

View File

@ -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->WindowsShell = false;
this->IncludeDirective = "include"; this->IncludeDirective = "include";

View File

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

View File

@ -61,8 +61,9 @@ class cmVS10XMLParser : public cmXMLParser
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalVisualStudio10Generator::cmLocalVisualStudio10Generator(VSVersion v): cmLocalVisualStudio10Generator
cmLocalVisualStudio7Generator(v) ::cmLocalVisualStudio10Generator(VSVersion v, cmLocalGenerator* parent):
cmLocalVisualStudio7Generator(v, parent)
{ {
} }

View File

@ -25,7 +25,7 @@ class cmLocalVisualStudio10Generator : public cmLocalVisualStudio7Generator
{ {
public: public:
///! Set cache only and recurse to false by default. ///! Set cache only and recurse to false by default.
cmLocalVisualStudio10Generator(VSVersion v); cmLocalVisualStudio10Generator(VSVersion v, cmLocalGenerator* parent);
virtual ~cmLocalVisualStudio10Generator(); virtual ~cmLocalVisualStudio10Generator();

View File

@ -23,8 +23,9 @@
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
#include <cmsys/FStream.hxx> #include <cmsys/FStream.hxx>
cmLocalVisualStudio6Generator::cmLocalVisualStudio6Generator(): cmLocalVisualStudio6Generator
cmLocalVisualStudioGenerator(VS6) ::cmLocalVisualStudio6Generator(cmLocalGenerator* parent):
cmLocalVisualStudioGenerator(VS6, parent)
{ {
} }

View File

@ -29,7 +29,7 @@ class cmLocalVisualStudio6Generator : public cmLocalVisualStudioGenerator
{ {
public: public:
///! Set cache only and recurse to false by default. ///! Set cache only and recurse to false by default.
cmLocalVisualStudio6Generator(); cmLocalVisualStudio6Generator(cmLocalGenerator* parent);
virtual ~cmLocalVisualStudio6Generator(); virtual ~cmLocalVisualStudio6Generator();

View File

@ -54,8 +54,9 @@ static void cmConvertToWindowsSlash(std::string& s)
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalVisualStudio7Generator::cmLocalVisualStudio7Generator(VSVersion v): cmLocalVisualStudio7Generator
cmLocalVisualStudioGenerator(v) ::cmLocalVisualStudio7Generator(VSVersion v, cmLocalGenerator* parent):
cmLocalVisualStudioGenerator(v, parent)
{ {
this->ExtraFlagTable = 0; this->ExtraFlagTable = 0;
this->Internal = new cmLocalVisualStudio7GeneratorInternals(this); this->Internal = new cmLocalVisualStudio7GeneratorInternals(this);

View File

@ -35,7 +35,7 @@ class cmLocalVisualStudio7Generator : public cmLocalVisualStudioGenerator
{ {
public: public:
///! Set cache only and recurse to false by default. ///! Set cache only and recurse to false by default.
cmLocalVisualStudio7Generator(VSVersion v); cmLocalVisualStudio7Generator(VSVersion v, cmLocalGenerator* parent);
virtual ~cmLocalVisualStudio7Generator(); virtual ~cmLocalVisualStudio7Generator();

View File

@ -18,7 +18,9 @@
#include "windows.h" #include "windows.h"
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalVisualStudioGenerator::cmLocalVisualStudioGenerator(VSVersion v) cmLocalVisualStudioGenerator
::cmLocalVisualStudioGenerator(VSVersion v, cmLocalGenerator* parent)
: cmLocalGenerator(parent)
{ {
this->WindowsShell = true; this->WindowsShell = true;
this->WindowsVSIDE = true; this->WindowsVSIDE = true;

View File

@ -45,7 +45,7 @@ public:
VS14 = 140 VS14 = 140
}; };
cmLocalVisualStudioGenerator(VSVersion v); cmLocalVisualStudioGenerator(VSVersion v, cmLocalGenerator* parent);
virtual ~cmLocalVisualStudioGenerator(); virtual ~cmLocalVisualStudioGenerator();
/** Construct a script from the given list of command lines. */ /** Construct a script from the given list of command lines. */

View File

@ -15,7 +15,8 @@
#include "cmMakefile.h" #include "cmMakefile.h"
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalXCodeGenerator::cmLocalXCodeGenerator() cmLocalXCodeGenerator::cmLocalXCodeGenerator(cmLocalGenerator* parent)
: cmLocalGenerator(parent)
{ {
// the global generator does this, so do not // the global generator does this, so do not
// put these flags into the language flags // put these flags into the language flags

View File

@ -24,7 +24,7 @@ class cmLocalXCodeGenerator : public cmLocalGenerator
{ {
public: public:
///! Set cache only and recurse to false by default. ///! Set cache only and recurse to false by default.
cmLocalXCodeGenerator(); cmLocalXCodeGenerator(cmLocalGenerator* parent);
virtual ~cmLocalXCodeGenerator(); virtual ~cmLocalXCodeGenerator();
virtual std::string GetTargetDirectory(cmTarget const& target) const; virtual std::string GetTargetDirectory(cmTarget const& target) const;

View File

@ -53,7 +53,11 @@ public:
}; };
// default is not to be building executables // 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 cmDefinitions& defs = cmDefinitions();
const std::set<std::string> globalKeys = defs.LocalKeys(); const std::set<std::string> globalKeys = defs.LocalKeys();
@ -62,6 +66,19 @@ cmMakefile::cmMakefile(): Internal(new Internals)
this->Internal->VarUsageStack.push(globalKeys); this->Internal->VarUsageStack.push(globalKeys);
this->Internal->IsSourceFileTryCompile = false; 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 // Initialize these first since AddDefaultDefinitions calls AddDefinition
this->WarnUnused = false; this->WarnUnused = false;
this->CheckSystemVars = false; this->CheckSystemVars = false;
@ -97,7 +114,7 @@ cmMakefile::cmMakefile(): Internal(new Internals)
this->HeaderFileExtensions.push_back( "txx" ); this->HeaderFileExtensions.push_back( "txx" );
this->DefineFlags = " "; this->DefineFlags = " ";
this->LocalGenerator = 0; this->LocalGenerator = localGenerator;
this->AddDefaultDefinitions(); this->AddDefaultDefinitions();
this->Initialize(); this->Initialize();
@ -126,6 +143,39 @@ void cmMakefile::Initialize()
// By default the check is not done. It is enabled by // By default the check is not done. It is enabled by
// cmListFileCache in the top level if necessary. // cmListFileCache in the top level if necessary.
this->CheckCMP0000 = false; 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() cmMakefile::~cmMakefile()
@ -181,11 +231,11 @@ void cmMakefile::Print() const
std::cout << " this->StartOutputDirectory; " << std::cout << " this->StartOutputDirectory; " <<
this->GetCurrentBinaryDirectory() << std::endl; this->GetCurrentBinaryDirectory() << std::endl;
std::cout << " this->HomeOutputDirectory; " << std::cout << " this->HomeOutputDirectory; " <<
this->HomeOutputDirectory << std::endl; this->GetHomeOutputDirectory() << std::endl;
std::cout << " this->cmStartDirectory; " << std::cout << " this->cmStartDirectory; " <<
this->GetCurrentSourceDirectory() << std::endl; this->GetCurrentSourceDirectory() << std::endl;
std::cout << " this->cmHomeDirectory; " << std::cout << " this->cmHomeDirectory; " <<
this->cmHomeDirectory << std::endl; this->GetHomeDirectory() << std::endl;
std::cout << " this->ProjectName; " std::cout << " this->ProjectName; "
<< this->ProjectName << std::endl; << this->ProjectName << std::endl;
this->PrintStringVector("this->LinkDirectories", this->LinkDirectories); this->PrintStringVector("this->LinkDirectories", this->LinkDirectories);
@ -630,32 +680,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();
this->SetHomeDirectory(this->GetCMakeInstance()->GetHomeDirectory());
this->SetHomeOutputDirectory(
this->GetCMakeInstance()->GetHomeOutputDirectory());
}
namespace namespace
{ {
struct file_not_persistent struct file_not_persistent
@ -1603,8 +1627,8 @@ void cmMakefile::AddSubDirectory(const std::string& srcPath,
// create a new local generator and set its parent // create a new local generator and set its parent
cmLocalGenerator *lg2 = cmLocalGenerator *lg2 =
this->LocalGenerator->GetGlobalGenerator()->CreateLocalGenerator(); this->LocalGenerator->GetGlobalGenerator()
lg2->SetParent(this->LocalGenerator); ->CreateLocalGenerator(this->LocalGenerator);
this->LocalGenerator->GetGlobalGenerator()->AddLocalGenerator(lg2); this->LocalGenerator->GetGlobalGenerator()->AddLocalGenerator(lg2);
// set the subdirs start dirs // set the subdirs start dirs
@ -1623,33 +1647,27 @@ void cmMakefile::AddSubDirectory(const std::string& srcPath,
void cmMakefile::SetCurrentSourceDirectory(const std::string& dir) void cmMakefile::SetCurrentSourceDirectory(const std::string& dir)
{ {
this->cmStartDirectory = dir; this->StateSnapshot.SetCurrentSourceDirectory(dir);
cmSystemTools::ConvertToUnixSlashes(this->cmStartDirectory);
this->cmStartDirectory =
cmSystemTools::CollapseFullPath(this->cmStartDirectory);
this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR",
this->cmStartDirectory.c_str()); this->StateSnapshot.GetCurrentSourceDirectory());
} }
const char* cmMakefile::GetCurrentSourceDirectory() const const char* cmMakefile::GetCurrentSourceDirectory() const
{ {
return this->cmStartDirectory.c_str(); return this->StateSnapshot.GetCurrentSourceDirectory();
} }
void cmMakefile::SetCurrentBinaryDirectory(const std::string& dir) void cmMakefile::SetCurrentBinaryDirectory(const std::string& dir)
{ {
this->StartOutputDirectory = dir; this->StateSnapshot.SetCurrentBinaryDirectory(dir);
cmSystemTools::ConvertToUnixSlashes(this->StartOutputDirectory); const char* binDir = this->StateSnapshot.GetCurrentBinaryDirectory();
this->StartOutputDirectory = cmSystemTools::MakeDirectory(binDir);
cmSystemTools::CollapseFullPath(this->StartOutputDirectory); this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", binDir);
cmSystemTools::MakeDirectory(this->StartOutputDirectory.c_str());
this->AddDefinition("CMAKE_CURRENT_BINARY_DIR",
this->StartOutputDirectory.c_str());
} }
const char* cmMakefile::GetCurrentBinaryDirectory() const const char* cmMakefile::GetCurrentBinaryDirectory() const
{ {
return this->StartOutputDirectory.c_str(); return this->StateSnapshot.GetCurrentBinaryDirectory();
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -3382,35 +3400,12 @@ cmMakefile::LexicalPushPop::~LexicalPushPop()
const char* cmMakefile::GetHomeDirectory() const 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());
if ( !this->GetDefinition("CMAKE_CURRENT_SOURCE_DIR") )
{
this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", this->GetHomeDirectory());
}
} }
const char* cmMakefile::GetHomeOutputDirectory() const 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());
if ( !this->GetDefinition("CMAKE_CURRENT_BINARY_DIR") )
{
this->AddDefinition("CMAKE_CURRENT_BINARY_DIR",
this->GetHomeOutputDirectory());
}
} }
void cmMakefile::SetScriptModeFile(const char* scriptfile) void cmMakefile::SetScriptModeFile(const char* scriptfile)

View File

@ -74,7 +74,7 @@ public:
/** /**
* Construct an empty makefile. * Construct an empty makefile.
*/ */
cmMakefile(); cmMakefile(cmLocalGenerator* localGenerator);
/** /**
* Destructor. * Destructor.
@ -138,13 +138,6 @@ public:
bool GetIsSourceFileTryCompile() const; 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. ///! Get the current makefile generator.
cmLocalGenerator* GetLocalGenerator() const cmLocalGenerator* GetLocalGenerator() const
{ return this->LocalGenerator;} { return this->LocalGenerator;}
@ -422,19 +415,8 @@ public:
bool HasCMP0054AlreadyBeenReported( bool HasCMP0054AlreadyBeenReported(
cmListFileContext context) const; 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; const char* GetHomeDirectory() const;
void SetHomeOutputDirectory(const std::string& dir);
const char* GetHomeOutputDirectory() const; const char* GetHomeOutputDirectory() const;
//@}
/** /**
* Set CMAKE_SCRIPT_MODE_FILE variable when running a -P script. * Set CMAKE_SCRIPT_MODE_FILE variable when running a -P script.
@ -876,10 +858,6 @@ protected:
// Check for a an unused variable // Check for a an unused variable
void CheckForUnused(const char* reason, const std::string& name) const; void CheckForUnused(const char* reason, const std::string& name) const;
std::string cmStartDirectory;
std::string StartOutputDirectory;
std::string cmHomeDirectory;
std::string HomeOutputDirectory;
std::string cmCurrentListFile; std::string cmCurrentListFile;
std::string ProjectName; // project name std::string ProjectName; // project name
@ -942,7 +920,7 @@ private:
cmMakefile& operator=(const cmMakefile& mf); cmMakefile& operator=(const cmMakefile& mf);
void Initialize(); void Initialize();
cmState::Snapshot StateSnapshot;
bool ReadListFileInternal(const char* filenametoread, bool ReadListFileInternal(const char* filenametoread,
bool noPolicyScope, bool noPolicyScope,

View File

@ -1210,10 +1210,11 @@ static cmGlobalGenerator* CreateGlobalGenerator(cmake* cm,
cmGlobalGenerator* gg = new cmGlobalGenerator(); cmGlobalGenerator* gg = new cmGlobalGenerator();
gg->SetCMakeInstance(cm); gg->SetCMakeInstance(cm);
cm->SetHomeOutputDirectory(targetDirectory);
cm->SetHomeDirectory(targetDirectory);
cmLocalGenerator* lg = gg->CreateLocalGenerator(); cmLocalGenerator* lg = gg->CreateLocalGenerator();
lg->GetMakefile()->SetHomeOutputDirectory(targetDirectory);
lg->GetMakefile()->SetCurrentBinaryDirectory(targetDirectory); lg->GetMakefile()->SetCurrentBinaryDirectory(targetDirectory);
lg->GetMakefile()->SetHomeDirectory(targetDirectory);
lg->GetMakefile()->SetCurrentSourceDirectory(targetDirectory); lg->GetMakefile()->SetCurrentSourceDirectory(targetDirectory);
gg->SetCurrentLocalGenerator(lg); gg->SetCurrentLocalGenerator(lg);
@ -1225,6 +1226,8 @@ bool cmQtAutoGenerators::Run(const std::string& targetDirectory,
{ {
bool success = true; bool success = true;
cmake cm; cmake cm;
cm.SetHomeOutputDirectory(targetDirectory);
cm.SetHomeDirectory(targetDirectory);
cmGlobalGenerator* gg = CreateGlobalGenerator(&cm, targetDirectory); cmGlobalGenerator* gg = CreateGlobalGenerator(&cm, targetDirectory);
cmMakefile* makefile = gg->GetCurrentLocalGenerator()->GetMakefile(); cmMakefile* makefile = gg->GetCurrentLocalGenerator()->GetMakefile();

View File

@ -22,6 +22,7 @@ cmState::cmState(cmake* cm)
: CMakeInstance(cm), : CMakeInstance(cm),
IsInTryCompile(false) IsInTryCompile(false)
{ {
this->CreateSnapshot(Snapshot());
this->Initialize(); this->Initialize();
} }
@ -444,3 +445,72 @@ bool cmState::GetGlobalPropertyAsBool(const std::string& prop)
{ {
return cmSystemTools::IsOn(this->GetGlobalProperty(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();
}
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);
}
cmState::Snapshot::Snapshot(cmState* state, PositionType position)
: State(state),
Position(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]);
}

View File

@ -21,10 +21,29 @@ class cmCommand;
class cmState class cmState
{ {
typedef std::vector<std::string>::size_type PositionType;
friend class Snapshot;
public: public:
cmState(cmake* cm); cmState(cmake* cm);
~cmState(); ~cmState();
class Snapshot {
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;
cmState::PositionType Position;
};
Snapshot CreateSnapshot(Snapshot originSnapshot);
enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC, enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC,
UNINITIALIZED }; UNINITIALIZED };
static CacheEntryType StringToCacheEntryType(const char*); static CacheEntryType StringToCacheEntryType(const char*);
@ -95,12 +114,22 @@ public:
const char *GetGlobalProperty(const std::string& prop); const char *GetGlobalProperty(const std::string& prop);
bool GetGlobalPropertyAsBool(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: private:
std::map<cmProperty::ScopeType, cmPropertyDefinitionMap> PropertyDefinitions; std::map<cmProperty::ScopeType, cmPropertyDefinitionMap> PropertyDefinitions;
std::vector<std::string> EnabledLanguages; std::vector<std::string> EnabledLanguages;
std::map<std::string, cmCommand*> Commands; std::map<std::string, cmCommand*> Commands;
cmPropertyMap GlobalProperties; cmPropertyMap GlobalProperties;
cmake* CMakeInstance; cmake* CMakeInstance;
std::vector<std::string> Locations;
std::vector<std::string> OutputLocations;
std::vector<PositionType> ParentPositions;
std::string SourceDirectory;
std::string BinaryDirectory;
bool IsInTryCompile; bool IsInTryCompile;
}; };

View File

@ -372,13 +372,13 @@ void cmake::ReadListFile(const std::vector<std::string>& args,
// read in the list file to fill the cache // read in the list file to fill the cache
if(path) 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()); cmsys::auto_ptr<cmLocalGenerator> lg(gg->CreateLocalGenerator());
lg->GetMakefile()->SetHomeOutputDirectory
(cmSystemTools::GetCurrentWorkingDirectory());
lg->GetMakefile()->SetCurrentBinaryDirectory lg->GetMakefile()->SetCurrentBinaryDirectory
(cmSystemTools::GetCurrentWorkingDirectory()); (cmSystemTools::GetCurrentWorkingDirectory());
lg->GetMakefile()->SetHomeDirectory
(cmSystemTools::GetCurrentWorkingDirectory());
lg->GetMakefile()->SetCurrentSourceDirectory lg->GetMakefile()->SetCurrentSourceDirectory
(cmSystemTools::GetCurrentWorkingDirectory()); (cmSystemTools::GetCurrentWorkingDirectory());
if (this->GetWorkingMode() != NORMAL_MODE) if (this->GetWorkingMode() != NORMAL_MODE)
@ -393,6 +393,8 @@ void cmake::ReadListFile(const std::vector<std::string>& args,
{ {
cmSystemTools::Error("Error processing file: ", path); cmSystemTools::Error("Error processing file: ", path);
} }
this->SetHomeDirectory(homeDir);
this->SetHomeOutputDirectory(homeOutputDir);
} }
// free generic one if generated // free generic one if generated
@ -976,24 +978,22 @@ cmGlobalGenerator* cmake::CreateGlobalGenerator(const std::string& gname)
void cmake::SetHomeDirectory(const std::string& dir) void cmake::SetHomeDirectory(const std::string& dir)
{ {
this->cmHomeDirectory = dir; this->State->SetSourceDirectory(dir);
cmSystemTools::ConvertToUnixSlashes(this->cmHomeDirectory);
} }
const char* cmake::GetHomeDirectory() const const char* cmake::GetHomeDirectory() const
{ {
return this->cmHomeDirectory.c_str(); return this->State->GetSourceDirectory();
} }
void cmake::SetHomeOutputDirectory(const std::string& dir) void cmake::SetHomeOutputDirectory(const std::string& dir)
{ {
this->HomeOutputDirectory = dir; this->State->SetBinaryDirectory(dir);
cmSystemTools::ConvertToUnixSlashes(this->HomeOutputDirectory);
} }
const char* cmake::GetHomeOutputDirectory() const const char* cmake::GetHomeOutputDirectory() const
{ {
return this->HomeOutputDirectory.c_str(); return this->State->GetBinaryDirectory();
} }
void cmake::SetGlobalGenerator(cmGlobalGenerator *gg) void cmake::SetGlobalGenerator(cmGlobalGenerator *gg)

View File

@ -336,8 +336,6 @@ protected:
cmPolicies *Policies; cmPolicies *Policies;
cmGlobalGenerator *GlobalGenerator; cmGlobalGenerator *GlobalGenerator;
cmCacheManager *CacheManager; cmCacheManager *CacheManager;
std::string cmHomeDirectory;
std::string HomeOutputDirectory;
bool SuppressDevWarnings; bool SuppressDevWarnings;
bool DoSuppressDevWarnings; bool DoSuppressDevWarnings;
std::string GeneratorPlatform; std::string GeneratorPlatform;