]> git.tdb.fi Git - builder.git/blobdiff - plugins/builtin/vssolutionfile.cpp
Refactor VsSolutionFile::find_dependencies as recursive
[builder.git] / plugins / builtin / vssolutionfile.cpp
index 691e1c60b8d82660c72644cd5b2aee021513aa18..38908df99ff7c842815db0363330992137328a11 100644 (file)
@@ -14,18 +14,18 @@ VsSolutionFile::VsSolutionFile(Builder &b, const SourcePackage &p):
 
 void VsSolutionFile::find_dependencies()
 {
-       if(FileTarget *project = builder.get_vfs().get_target(package->get_source_directory()/(package->get_name()+".vcxproj")))
-               add_dependency(*project);
+       find_dependencies(*package);
+}
 
-       Package::Requirements reqs = package->get_required_packages();
-       for(auto i=reqs.begin(); i!=reqs.end(); ++i)
-               if(const SourcePackage *spkg = dynamic_cast<const SourcePackage *>(*i))
+void VsSolutionFile::find_dependencies(const SourcePackage &spkg)
+{
+       if(FileTarget *project = builder.get_vfs().get_target(spkg.get_source_directory()/(spkg.get_name()+".vcxproj")))
+               if(!any_equals(depends, static_cast<Target *>(project)))
                {
-                       if(FileTarget *project = builder.get_vfs().get_target(spkg->get_source_directory()/(spkg->get_name()+".vcxproj")))
-                               add_dependency(*project);
+                       add_dependency(*project);
 
-                       for(Package *r: spkg->get_required_packages())
-                               if(!any_equals(reqs, r))
-                                       reqs.push_back(r);
+                       for(const Package *r: spkg.get_required_packages())
+                               if(const SourcePackage *s = dynamic_cast<const SourcePackage *>(r))
+                                       find_dependencies(*s);
                }
 }