BUG: fix bug in depends

This commit is contained in:
Bill Hoffman 2002-12-10 09:28:05 -05:00
parent ad3478cd1d
commit 5a676508c4
3 changed files with 34 additions and 18 deletions

View File

@ -91,6 +91,31 @@ void cmLocalUnixMakefileGenerator::Generate(bool fromTheTop)
this->OutputMakefile(dest.c_str(), !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) void cmLocalUnixMakefileGenerator::ProcessDepends(const cmMakeDepend &md)
{ {
// Now create cmDependInformation objects for files in the directory // 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. // Delete any hints from the source file's dependencies.
(*i)->GetDepends().erase((*i)->GetDepends().begin(), (*i)->GetDepends().end()); (*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. // Now add the real dependencies for the file.
if (info) if (info)
{ {
for(cmDependInformation::DependencySet::const_iterator d = // create visited set
info->m_DependencySet.begin(); std::set<cmDependInformation const*> visited;
d != info->m_DependencySet.end(); ++d) this->AddDependenciesToSourceFile(info,*i, &visited);
{
// 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);
}
}
} }
} }
} }

View File

@ -19,6 +19,7 @@
#include "cmLocalGenerator.h" #include "cmLocalGenerator.h"
class cmDependInformation;
class cmMakeDepend; class cmMakeDepend;
class cmTarget; class cmTarget;
class cmSourceFile; class cmSourceFile;
@ -77,6 +78,9 @@ public:
void SetMakefileVariableSize(int s) { m_MakefileVariableSize = s; } void SetMakefileVariableSize(int s) { m_MakefileVariableSize = s; }
protected: protected:
void AddDependenciesToSourceFile(cmDependInformation const*info,
cmSourceFile *i,
std::set<cmDependInformation const*> *visited);
virtual const char* GetSafeDefinition(const char*); virtual const char* GetSafeDefinition(const char*);
virtual void ProcessDepends(const cmMakeDepend &md); virtual void ProcessDepends(const cmMakeDepend &md);
virtual void OutputMakefile(const char* file, bool withDepends); virtual void OutputMakefile(const char* file, bool withDepends);

View File

@ -24,12 +24,6 @@ void cmDependInformation::AddDependencies(cmDependInformation* info)
if(this != info) if(this != info)
{ {
m_DependencySet.insert(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);
}
} }
} }