diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2002-12-10 14:28:05 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2002-12-10 14:28:05 (GMT) |
commit | 5a676508c4e18f55d5489fee6d266f715521263f (patch) | |
tree | 42b561aee5d93f114362cb5da2dca4e4ca214206 | |
parent | ad3478cd1daa50f094827a9e8687ef06b29aed44 (diff) | |
download | CMake-5a676508c4e18f55d5489fee6d266f715521263f.zip CMake-5a676508c4e18f55d5489fee6d266f715521263f.tar.gz CMake-5a676508c4e18f55d5489fee6d266f715521263f.tar.bz2 |
BUG: fix bug in depends
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator.cxx | 42 | ||||
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator.h | 4 | ||||
-rw-r--r-- | Source/cmMakeDepend.cxx | 6 |
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); - } } } |