summaryrefslogtreecommitdiffstats
path: root/Source/cmDepends.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2005-03-08 14:24:24 (GMT)
committerBrad King <brad.king@kitware.com>2005-03-08 14:24:24 (GMT)
commit5dc555e26d19871cb8baeb40466d7660001abe5c (patch)
tree4f67f268f08029419da944a92845b6722707b4b5 /Source/cmDepends.cxx
parent59a7019305d1c017c1a0f70a1be401570cd74bf7 (diff)
downloadCMake-5dc555e26d19871cb8baeb40466d7660001abe5c.zip
CMake-5dc555e26d19871cb8baeb40466d7660001abe5c.tar.gz
CMake-5dc555e26d19871cb8baeb40466d7660001abe5c.tar.bz2
BUG: Dependency scans and checks must always set the current working directory to the directory containing the Makefile.
Diffstat (limited to 'Source/cmDepends.cxx')
-rw-r--r--Source/cmDepends.cxx20
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/cmDepends.cxx b/Source/cmDepends.cxx
index feb6625..8601f81 100644
--- a/Source/cmDepends.cxx
+++ b/Source/cmDepends.cxx
@@ -19,6 +19,8 @@
#include "cmGeneratedFileStream.h"
#include "cmSystemTools.h"
+#include <assert.h>
+
//----------------------------------------------------------------------------
cmDepends::cmDepends(const char* dir, const char* targetFile):
m_Directory(dir),
@@ -44,6 +46,10 @@ cmDepends::~cmDepends()
//----------------------------------------------------------------------------
bool cmDepends::Write()
{
+ // Dependency generation must always be done in the current working
+ // directory.
+ assert(m_Directory == ".");
+
// Try to generate dependencies for the target file.
cmGeneratedFileStream fout(m_DependsMakeFile.c_str());
fout << "# Dependencies for " << m_TargetFile.c_str() << std::endl;
@@ -63,6 +69,14 @@ bool cmDepends::Write()
//----------------------------------------------------------------------------
void cmDepends::Check()
{
+ // Dependency checks must be done in proper working directory.
+ std::string oldcwd = ".";
+ if(m_Directory != ".")
+ {
+ oldcwd = cmSystemTools::GetCurrentWorkingDirectory();
+ cmSystemTools::ChangeDirectory(m_Directory.c_str());
+ }
+
// Check whether dependencies must be regenerated.
std::ifstream fin(m_DependsMakeFile.c_str());
if(!(fin && this->CheckDependencies(fin)))
@@ -70,6 +84,12 @@ void cmDepends::Check()
// Clear all dependencies so they will be regenerated.
this->Clear();
}
+
+ // Restore working directory.
+ if(oldcwd != ".")
+ {
+ cmSystemTools::ChangeDirectory(oldcwd.c_str());
+ }
}
//----------------------------------------------------------------------------