Przeglądaj źródła

updated for changes in Depend Calcs

Ken Martin 23 lat temu
rodzic
commit
7928df0817

+ 32 - 12
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);
     }
 }

+ 4 - 0
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;