summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmOutputRequiredFilesCommand.cxx44
-rw-r--r--Source/cmOutputRequiredFilesCommand.h4
2 files changed, 36 insertions, 12 deletions
diff --git a/Source/cmOutputRequiredFilesCommand.cxx b/Source/cmOutputRequiredFilesCommand.cxx
index 8f95dee..a34d6db 100644
--- a/Source/cmOutputRequiredFilesCommand.cxx
+++ b/Source/cmOutputRequiredFilesCommand.cxx
@@ -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);
}
}
diff --git a/Source/cmOutputRequiredFilesCommand.h b/Source/cmOutputRequiredFilesCommand.h
index c6a3fc4..4bf0a94 100644
--- a/Source/cmOutputRequiredFilesCommand.h
+++ b/Source/cmOutputRequiredFilesCommand.h
@@ -68,6 +68,10 @@ public:
}
cmTypeMacro(cmOutputRequiredFilesCommand, cmCommand);
+ void ListDependencies(cmDependInformation const *info,
+ FILE *fout,
+ std::set<cmDependInformation const*> *visited);
+
private:
std::string m_File;
std::string m_OutputFile;