summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2002-12-10 14:28:05 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2002-12-10 14:28:05 (GMT)
commit5a676508c4e18f55d5489fee6d266f715521263f (patch)
tree42b561aee5d93f114362cb5da2dca4e4ca214206
parentad3478cd1daa50f094827a9e8687ef06b29aed44 (diff)
downloadCMake-5a676508c4e18f55d5489fee6d266f715521263f.zip
CMake-5a676508c4e18f55d5489fee6d266f715521263f.tar.gz
CMake-5a676508c4e18f55d5489fee6d266f715521263f.tar.bz2
BUG: fix bug in depends
-rw-r--r--Source/cmLocalUnixMakefileGenerator.cxx42
-rw-r--r--Source/cmLocalUnixMakefileGenerator.h4
-rw-r--r--Source/cmMakeDepend.cxx6
3 files changed, 34 insertions, 18 deletions
diff --git a/Source/cmLocalUnixMakefileGenerator.cxx b/Source/cmLocalUnixMakefileGenerator.cxx
index 55d87eb..f71a464 100644
--- a/Source/cmLocalUnixMakefileGenerator.cxx
+++ b/Source/cmLocalUnixMakefileGenerator.cxx
@@ -91,6 +91,31 @@ void cmLocalUnixMakefileGenerator::Generate(bool fromTheTop)
this->OutputMakefile(dest.c_str(), !fromTheTop);
}
+void
+cmLocalUnixMakefileGenerator::AddDependenciesToSourceFile(cmDependInformation const *info,
+ cmSourceFile *i,
+ std::set<cmDependInformation const*> *visited)
+{
+ // add info to the visited set
+ visited->insert(info);
+
+ // add this dependency and the recurse
+ if(info->m_FullPath != "")
+ {
+ // now recurse with info's dependencies
+ for(cmDependInformation::DependencySet::const_iterator d =
+ info->m_DependencySet.begin();
+ d != info->m_DependencySet.end(); ++d)
+ {
+ if (visited->find(*d) == visited->end())
+ {
+ i->GetDepends().push_back((*d)->m_FullPath);
+ this->AddDependenciesToSourceFile(*d,i,visited);
+ }
+ }
+ }
+}
+
void cmLocalUnixMakefileGenerator::ProcessDepends(const cmMakeDepend &md)
{
// Now create cmDependInformation objects for files in the directory
@@ -109,21 +134,14 @@ void cmLocalUnixMakefileGenerator::ProcessDepends(const cmMakeDepend &md)
// Delete any hints from the source file's dependencies.
(*i)->GetDepends().erase((*i)->GetDepends().begin(), (*i)->GetDepends().end());
-
+ std::cerr << "get depends for " << (*i)->GetFullPath() << "\n";
+
// Now add the real dependencies for the file.
if (info)
{
- for(cmDependInformation::DependencySet::const_iterator d =
- info->m_DependencySet.begin();
- d != info->m_DependencySet.end(); ++d)
- {
- // Make sure the full path is given. If not, the dependency was
- // not found.
- if((*d)->m_FullPath != "")
- {
- (*i)->GetDepends().push_back((*d)->m_FullPath);
- }
- }
+ // create visited set
+ std::set<cmDependInformation const*> visited;
+ this->AddDependenciesToSourceFile(info,*i, &visited);
}
}
}
diff --git a/Source/cmLocalUnixMakefileGenerator.h b/Source/cmLocalUnixMakefileGenerator.h
index c2604f0..c8fcd18 100644
--- a/Source/cmLocalUnixMakefileGenerator.h
+++ b/Source/cmLocalUnixMakefileGenerator.h
@@ -19,6 +19,7 @@
#include "cmLocalGenerator.h"
+class cmDependInformation;
class cmMakeDepend;
class cmTarget;
class cmSourceFile;
@@ -77,6 +78,9 @@ public:
void SetMakefileVariableSize(int s) { m_MakefileVariableSize = s; }
protected:
+ void AddDependenciesToSourceFile(cmDependInformation const*info,
+ cmSourceFile *i,
+ std::set<cmDependInformation const*> *visited);
virtual const char* GetSafeDefinition(const char*);
virtual void ProcessDepends(const cmMakeDepend &md);
virtual void OutputMakefile(const char* file, bool withDepends);
diff --git a/Source/cmMakeDepend.cxx b/Source/cmMakeDepend.cxx
index a5ba60b..61354b5 100644
--- a/Source/cmMakeDepend.cxx
+++ b/Source/cmMakeDepend.cxx
@@ -24,12 +24,6 @@ void cmDependInformation::AddDependencies(cmDependInformation* info)
if(this != info)
{
m_DependencySet.insert(info);
- for (cmDependInformation::DependencySet::const_iterator
- d = info->m_DependencySet.begin();
- d != info->m_DependencySet.end(); ++d)
- {
- m_DependencySet.insert(*d);
- }
}
}