From 5dc555e26d19871cb8baeb40466d7660001abe5c Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 8 Mar 2005 09:24:24 -0500 Subject: [PATCH] BUG: Dependency scans and checks must always set the current working directory to the directory containing the Makefile. --- Source/cmDepends.cxx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Source/cmDepends.cxx b/Source/cmDepends.cxx index feb6625e7..8601f81e2 100644 --- a/Source/cmDepends.cxx +++ b/Source/cmDepends.cxx @@ -19,6 +19,8 @@ #include "cmGeneratedFileStream.h" #include "cmSystemTools.h" +#include + //---------------------------------------------------------------------------- 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()); + } } //----------------------------------------------------------------------------