summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmDepends.h9
-rw-r--r--Source/cmDependsC.cxx7
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx1
3 files changed, 13 insertions, 4 deletions
diff --git a/Source/cmDepends.h b/Source/cmDepends.h
index a0b1b6b..80a9c79 100644
--- a/Source/cmDepends.h
+++ b/Source/cmDepends.h
@@ -37,6 +37,11 @@ public:
/** at what level will the compile be done from */
void SetCompileDirectory(const char *dir) {this->CompileDirectory = dir;};
+
+ /** Set the full path to the top of the build tree. This is
+ the base path from which dependencies are referenced as
+ relative paths. */
+ void SetHomeOutputDirectory(const char *dir) {this->HomeOutputDirectory = dir;};
/** should this be verbose in its output */
void SetVerbose(bool verb) { this->Verbose = verb; }
@@ -71,9 +76,11 @@ protected:
virtual bool CheckDependencies(std::istream& internalDepends);
// The directory in which the build rule for the target file is executed.
- std::string Directory;
std::string CompileDirectory;
+ // The full path to the top of the build tree.
+ std::string HomeOutputDirectory;
+
// Flag for verbose output.
bool Verbose;
cmFileTimeComparison* FileComparison;
diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx
index 2e198ee..13ebdcd 100644
--- a/Source/cmDependsC.cxx
+++ b/Source/cmDependsC.cxx
@@ -26,7 +26,6 @@ cmDependsC::cmDependsC():
IncludePath(0), GeneratedFiles(0)
{
}
-
//----------------------------------------------------------------------------
// yummy look at all those constructor arguments
cmDependsC::cmDependsC(std::vector<std::string> const& includes,
@@ -85,6 +84,7 @@ bool cmDependsC::WriteDependencies(const char *src, const char *obj,
this->Encountered.insert(src);
std::set<cmStdString> dependencies;
std::set<cmStdString> scanned;
+
while(!this->Unscanned.empty())
{
// Get the next file to scan.
@@ -367,9 +367,10 @@ bool cmDependsC::FileExistsOrIsGenerated(const std::string& fname,
else if(cmSystemTools::FileIsFullPath(fname.c_str()))
{
// The generated file may have been listed with a relative path.
- std::string dir = cmSystemTools::CollapseFullPath(this->Directory.c_str());
+ // Note that CMAKE_GENERATED_FILES is written with a conversion
+ // relative to the home output directory.
std::string rname =
- cmSystemTools::RelativePath(dir.c_str(), fname.c_str());
+ cmSystemTools::RelativePath(this->HomeOutputDirectory.c_str(), fname.c_str());
if(this->FileIsGenerated(rname, scanned, dependencies))
{
return true;
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index efd4642..165c997 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -1275,6 +1275,7 @@ cmLocalUnixMakefileGenerator3
includeRegexScan.c_str(),
includeRegexComplain.c_str(),
generatedFiles, includeCacheFileName);
+ scanner->SetHomeOutputDirectory(mf->GetHomeOutputDirectory());
}
#ifdef CMAKE_BUILD_WITH_CMAKE
else if(lang == "Fortran")