diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmOutputRequiredFilesCommand.cxx | 44 | ||||
-rw-r--r-- | Source/cmOutputRequiredFilesCommand.h | 4 |
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; |