|
|
@@ -172,6 +172,36 @@ bool cmOutputRequiredFilesCommand::InitialPass(std::vector<std::string> const& a
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+void cmOutputRequiredFilesCommand::
|
|
|
+ListDependencies(cmDependInformation const *info,
|
|
|
+ FILE *fout,
|
|
|
+ std::set<cmDependInformation const*> *visited)
|
|
|
+{
|
|
|
+ // add info to the visited set
|
|
|
+ visited->insert(info);
|
|
|
+
|
|
|
+ // 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())
|
|
|
+ {
|
|
|
+ if(info->m_FullPath != "")
|
|
|
+ {
|
|
|
+ std::string tmp = (*d)->m_FullPath;
|
|
|
+ std::string::size_type pos = tmp.rfind('.');
|
|
|
+ if(pos != std::string::npos && tmp.substr(pos) == ".cxx")
|
|
|
+ {
|
|
|
+ tmp = tmp.substr(0, pos);
|
|
|
+ fprintf(fout,"%s\n",(*d)->m_FullPath.c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this->ListDependencies(*d,fout,visited);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void cmOutputRequiredFilesCommand::FinalPass()
|
|
|
{
|
|
|
|
|
|
@@ -191,18 +221,8 @@ void cmOutputRequiredFilesCommand::FinalPass()
|
|
|
{
|
|
|
// write them out
|
|
|
FILE *fout = fopen(m_OutputFile.c_str(),"w");
|
|
|
- for(cmDependInformation::DependencySet::const_iterator d =
|
|
|
- info->m_DependencySet.begin();
|
|
|
- d != info->m_DependencySet.end(); ++d)
|
|
|
- {
|
|
|
- std::string tmp = (*d)->m_FullPath;
|
|
|
- std::string::size_type pos = tmp.rfind('.');
|
|
|
- if(pos != std::string::npos && tmp.substr(pos) == ".cxx")
|
|
|
- {
|
|
|
- tmp = tmp.substr(0, pos);
|
|
|
- fprintf(fout,"%s\n",(*d)->m_FullPath.c_str());
|
|
|
- }
|
|
|
- }
|
|
|
+ std::set<cmDependInformation const*> visited;
|
|
|
+ this->ListDependencies(info,fout, &visited);
|
|
|
fclose(fout);
|
|
|
}
|
|
|
}
|