diff options
author | Brad King <brad.king@kitware.com> | 2005-03-08 14:24:24 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2005-03-08 14:24:24 (GMT) |
commit | 5dc555e26d19871cb8baeb40466d7660001abe5c (patch) | |
tree | 4f67f268f08029419da944a92845b6722707b4b5 /Source/cmDepends.cxx | |
parent | 59a7019305d1c017c1a0f70a1be401570cd74bf7 (diff) | |
download | CMake-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.cxx | 20 |
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()); + } } //---------------------------------------------------------------------------- |