summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-10-08 17:08:30 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2015-10-08 17:08:30 (GMT)
commitdb266aaade6ac6e7a37be11338b0f8336976ead2 (patch)
tree8cb12a93f0567100cf8d1937383b8ce6f66c6b9a
parent45e9f48f9ca51f2bd32a8dd09ce58cf2ec4197e5 (diff)
parent28749903b67d71b35f6ff74dab7c6db1a648a1c8 (diff)
downloadCMake-db266aaade6ac6e7a37be11338b0f8336976ead2.zip
CMake-db266aaade6ac6e7a37be11338b0f8336976ead2.tar.gz
CMake-db266aaade6ac6e7a37be11338b0f8336976ead2.tar.bz2
Merge topic 'refactor-current-dir-initialization'
28749903 cmState: Internalize the initialization of a snapshot from its parent. 6c02f62f Remove now-unused directory setters. 360e4e1d Set the current dirs on the snapshot before creating the cmMakefile. f716460e cmMakefile: Move invokation to initialize snapshot.
-rw-r--r--Source/CTest/cmCTestScriptHandler.cxx9
-rw-r--r--Source/cmGlobalGenerator.cxx12
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.cxx7
-rw-r--r--Source/cmMakefile.cxx59
-rw-r--r--Source/cmMakefile.h2
-rw-r--r--Source/cmQtAutoGenerators.cxx5
-rw-r--r--Source/cmState.cxx2
-rw-r--r--Source/cmState.h5
-rw-r--r--Source/cmake.cxx14
-rw-r--r--Source/cmcmd.cxx6
10 files changed, 59 insertions, 62 deletions
diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx
index 2f125aa..b9016af 100644
--- a/Source/CTest/cmCTestScriptHandler.cxx
+++ b/Source/CTest/cmCTestScriptHandler.cxx
@@ -318,16 +318,13 @@ void cmCTestScriptHandler::CreateCMake()
this->GlobalGenerator = new cmGlobalGenerator(this->CMake);
cmState::Snapshot snapshot = this->CMake->GetCurrentSnapshot();
+ std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
+ snapshot.GetDirectory().SetCurrentSource(cwd);
+ snapshot.GetDirectory().SetCurrentBinary(cwd);
this->Makefile = new cmMakefile(this->GlobalGenerator, snapshot);
this->CMake->SetProgressCallback(ctestScriptProgressCallback, this->CTest);
- // Set CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_BINARY_DIR.
- // Also, some commands need Makefile->GetCurrentSourceDirectory().
- std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
- this->Makefile->SetCurrentSourceDirectory(cwd);
- this->Makefile->SetCurrentBinaryDirectory(cwd);
-
// remove all cmake commands which are not scriptable, since they can't be
// used in ctest scripts
this->CMake->GetState()->RemoveUnscriptableCommands();
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 05f1029..715a927 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1108,16 +1108,16 @@ void cmGlobalGenerator::Configure()
this->FirstTimeProgress = 0.0f;
this->ClearGeneratorMembers();
- cmMakefile* dirMf =
- new cmMakefile(this, this->GetCMakeInstance()->GetCurrentSnapshot());
- this->Makefiles.push_back(dirMf);
+ cmState::Snapshot snapshot = this->CMakeInstance->GetCurrentSnapshot();
- // set the Start directories
- dirMf->SetCurrentSourceDirectory
+ snapshot.GetDirectory().SetCurrentSource
(this->CMakeInstance->GetHomeDirectory());
- dirMf->SetCurrentBinaryDirectory
+ snapshot.GetDirectory().SetCurrentBinary
(this->CMakeInstance->GetHomeOutputDirectory());
+ cmMakefile* dirMf = new cmMakefile(this, snapshot);
+ this->Makefiles.push_back(dirMf);
+
this->BinaryDirectories.insert(
this->CMakeInstance->GetHomeOutputDirectory());
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index 0064713..cb13fcf 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -585,12 +585,11 @@ void cmGlobalUnixMakefileGenerator3
else
{
cmState::Snapshot snapshot = this->CMakeInstance->GetCurrentSnapshot();
- mf = new cmMakefile(this, snapshot);
- // set the Start directories
- mf->SetCurrentSourceDirectory
+ snapshot.GetDirectory().SetCurrentSource
(this->CMakeInstance->GetHomeDirectory());
- mf->SetCurrentBinaryDirectory
+ snapshot.GetDirectory().SetCurrentBinary
(this->CMakeInstance->GetHomeOutputDirectory());
+ mf = new cmMakefile(this, snapshot);
}
std::string tname = targetName;
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 077470d..c060505 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -120,15 +120,34 @@ cmMakefile::cmMakefile(cmGlobalGenerator* globalGenerator,
this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$");
#endif
+ this->AddDefinition("CMAKE_SOURCE_DIR",
+ this->GetCMakeInstance()->GetHomeDirectory());
+ this->AddDefinition("CMAKE_BINARY_DIR",
+ this->GetCMakeInstance()->GetHomeOutputDirectory());
{
- const char* dir = this->GetCMakeInstance()->GetHomeDirectory();
- this->AddDefinition("CMAKE_SOURCE_DIR", dir);
- this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", dir);
+ const char* dir = this->StateSnapshot.GetDirectory().GetCurrentSource();
+ if (dir)
+ {
+ this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR", dir);
+ }
+ else
+ {
+ this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR",
+ this->GetCMakeInstance()->GetHomeDirectory());
+ }
}
{
- const char* dir = this->GetCMakeInstance()->GetHomeOutputDirectory();
- this->AddDefinition("CMAKE_BINARY_DIR", dir);
- this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", dir);
+ const char* dir = this->StateSnapshot.GetDirectory().GetCurrentBinary();
+ if (dir)
+ {
+ cmSystemTools::MakeDirectory(dir);
+ this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", dir);
+ }
+ else
+ {
+ this->AddDefinition("CMAKE_CURRENT_BINARY_DIR",
+ this->GetCMakeInstance()->GetHomeOutputDirectory());
+ }
}
}
@@ -1472,13 +1491,6 @@ void cmMakefile::AddLinkLibrary(const std::string& lib)
void cmMakefile::InitializeFromParent(cmMakefile* parent)
{
- this->StateSnapshot.InitializeFromParent();
-
- this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR",
- this->GetCurrentSourceDirectory());
- this->AddDefinition("CMAKE_CURRENT_BINARY_DIR",
- this->GetCurrentBinaryDirectory());
-
this->SystemIncludeDirectories = parent->SystemIncludeDirectories;
// define flags
@@ -1749,12 +1761,12 @@ void cmMakefile::AddSubDirectory(const std::string& srcPath,
this->ContextStack.back()->Name,
this->ContextStack.back()->Line);
+ newSnapshot.GetDirectory().SetCurrentSource(srcPath);
+ newSnapshot.GetDirectory().SetCurrentBinary(binPath);
+
cmMakefile* subMf = new cmMakefile(this->GlobalGenerator, newSnapshot);
this->GetGlobalGenerator()->AddMakefile(subMf);
- // set the subdirs start dirs
- subMf->SetCurrentSourceDirectory(srcPath);
- subMf->SetCurrentBinaryDirectory(binPath);
if(excludeFromAll)
{
subMf->SetProperty("EXCLUDE_FROM_ALL", "TRUE");
@@ -1770,26 +1782,11 @@ void cmMakefile::AddSubDirectory(const std::string& srcPath,
}
}
-void cmMakefile::SetCurrentSourceDirectory(const std::string& dir)
-{
- this->StateSnapshot.GetDirectory().SetCurrentSource(dir);
- this->AddDefinition("CMAKE_CURRENT_SOURCE_DIR",
- this->StateSnapshot.GetDirectory().GetCurrentSource());
-}
-
const char* cmMakefile::GetCurrentSourceDirectory() const
{
return this->StateSnapshot.GetDirectory().GetCurrentSource();
}
-void cmMakefile::SetCurrentBinaryDirectory(const std::string& dir)
-{
- this->StateSnapshot.GetDirectory().SetCurrentBinary(dir);
- const char* binDir = this->StateSnapshot.GetDirectory().GetCurrentBinary();
- cmSystemTools::MakeDirectory(binDir);
- this->AddDefinition("CMAKE_CURRENT_BINARY_DIR", binDir);
-}
-
const char* cmMakefile::GetCurrentBinaryDirectory() const
{
return this->StateSnapshot.GetDirectory().GetCurrentBinary();
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 8724c6e..459d34c 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -353,9 +353,7 @@ public:
*/
void SetArgcArgv(const std::vector<std::string>& args);
- void SetCurrentSourceDirectory(const std::string& dir);
const char* GetCurrentSourceDirectory() const;
- void SetCurrentBinaryDirectory(const std::string& dir);
const char* GetCurrentBinaryDirectory() const;
//@}
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index bbeb3dc..36b1305 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -178,9 +178,10 @@ bool cmQtAutoGenerators::Run(const std::string& targetDirectory,
cmGlobalGenerator gg(&cm);
cmState::Snapshot snapshot = cm.GetCurrentSnapshot();
+ snapshot.GetDirectory().SetCurrentBinary(targetDirectory);
+ snapshot.GetDirectory().SetCurrentSource(targetDirectory);
+
cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(&gg, snapshot));
- mf->SetCurrentBinaryDirectory(targetDirectory);
- mf->SetCurrentSourceDirectory(targetDirectory);
gg.SetCurrentMakefile(mf.get());
this->ReadAutogenInfoFile(mf.get(), targetDirectory, config);
diff --git a/Source/cmState.cxx b/Source/cmState.cxx
index ce9ff32..db7519b 100644
--- a/Source/cmState.cxx
+++ b/Source/cmState.cxx
@@ -805,8 +805,10 @@ cmState::CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot,
pos->Parent = origin;
pos->Root = origin;
pos->Vars = this->VarTree.Extend(origin);
+
cmState::Snapshot snapshot = cmState::Snapshot(this, pos);
originSnapshot.Position->BuildSystemDirectory->Children.push_back(snapshot);
+ snapshot.InitializeFromParent();
return snapshot;
}
diff --git a/Source/cmState.h b/Source/cmState.h
index 99e537c..1ffc4bf 100644
--- a/Source/cmState.h
+++ b/Source/cmState.h
@@ -75,8 +75,6 @@ public:
Snapshot GetCallStackParent() const;
SnapshotType GetType() const;
- void InitializeFromParent();
-
void SetPolicy(cmPolicies::PolicyID id, cmPolicies::PolicyStatus status);
cmPolicies::PolicyStatus GetPolicy(cmPolicies::PolicyID id) const;
bool HasDefinedPolicyCMP0011();
@@ -105,6 +103,9 @@ public:
friend class cmState;
friend class Directory;
friend struct StrictWeakOrder;
+
+ void InitializeFromParent();
+
cmState* State;
cmState::PositionType Position;
};
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 2aa092a..fececfd 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -377,11 +377,11 @@ void cmake::ReadListFile(const std::vector<std::string>& args,
this->SetHomeDirectory(cmSystemTools::GetCurrentWorkingDirectory());
this->SetHomeOutputDirectory(cmSystemTools::GetCurrentWorkingDirectory());
cmState::Snapshot snapshot = this->GetCurrentSnapshot();
- cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(gg, snapshot));
- mf->SetCurrentBinaryDirectory
+ snapshot.GetDirectory().SetCurrentBinary
(cmSystemTools::GetCurrentWorkingDirectory());
- mf->SetCurrentSourceDirectory
+ snapshot.GetDirectory().SetCurrentSource
(cmSystemTools::GetCurrentWorkingDirectory());
+ cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(gg, snapshot));
if (this->GetWorkingMode() != NORMAL_MODE)
{
std::string file(cmSystemTools::CollapseFullPath(path));
@@ -418,13 +418,13 @@ bool cmake::FindPackage(const std::vector<std::string>& args)
this->SetGlobalGenerator(gg);
cmState::Snapshot snapshot = this->GetCurrentSnapshot();
+ snapshot.GetDirectory().SetCurrentBinary
+ (cmSystemTools::GetCurrentWorkingDirectory());
+ snapshot.GetDirectory().SetCurrentSource
+ (cmSystemTools::GetCurrentWorkingDirectory());
// read in the list file to fill the cache
cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(gg, snapshot));
cmsys::auto_ptr<cmLocalGenerator> lg(gg->CreateLocalGenerator(mf.get()));
- mf->SetCurrentBinaryDirectory
- (cmSystemTools::GetCurrentWorkingDirectory());
- mf->SetCurrentSourceDirectory
- (cmSystemTools::GetCurrentWorkingDirectory());
mf->SetArgcArgv(args);
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index f44c77d..ca46111 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -769,11 +769,13 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
{
cm.SetGlobalGenerator(ggd);
cmState::Snapshot snapshot = cm.GetCurrentSnapshot();
+ snapshot.GetDirectory().SetCurrentBinary
+ (cmSystemTools::GetCurrentWorkingDirectory());
+ snapshot.GetDirectory().SetCurrentSource
+ (cmSystemTools::GetCurrentWorkingDirectory());
cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(ggd, snapshot));
cmsys::auto_ptr<cmLocalGenerator> lgd(
ggd->CreateLocalGenerator(mf.get()));
- lgd->GetMakefile()->SetCurrentSourceDirectory(startDir);
- lgd->GetMakefile()->SetCurrentBinaryDirectory(startOutDir);
// Actually scan dependencies.
return lgd->UpdateDependencies(depInfo.c_str(),