From 7928df081777e591eff37136131d7025046ed98d Mon Sep 17 00:00:00 2001 From: Ken Martin Date: Tue, 10 Dec 2002 14:10:15 -0500 Subject: [PATCH] updated for changes in Depend Calcs --- Source/cmOutputRequiredFilesCommand.cxx | 44 ++++++++++++++++++------- Source/cmOutputRequiredFilesCommand.h | 4 +++ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Source/cmOutputRequiredFilesCommand.cxx b/Source/cmOutputRequiredFilesCommand.cxx index 8f95deea6..a34d6db78 100644 --- a/Source/cmOutputRequiredFilesCommand.cxx +++ b/Source/cmOutputRequiredFilesCommand.cxx @@ -172,6 +172,36 @@ bool cmOutputRequiredFilesCommand::InitialPass(std::vector const& a return true; } +void cmOutputRequiredFilesCommand:: +ListDependencies(cmDependInformation const *info, + FILE *fout, + std::set *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 visited; + this->ListDependencies(info,fout, &visited); fclose(fout); } } diff --git a/Source/cmOutputRequiredFilesCommand.h b/Source/cmOutputRequiredFilesCommand.h index c6a3fc46e..4bf0a9448 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 *visited); + private: std::string m_File; std::string m_OutputFile;