X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcomponent.cpp;h=6545b28b95c460ed9b1f34b8ca679cd8aa77e677;hb=9f885c3eec8f065b7dc400acfb9dd67158284fcf;hp=98b6ff76590e1067709895ed1277d6535ed61e58;hpb=302977793935e100a5bf37822836531cafb03bf3;p=builder.git diff --git a/source/component.cpp b/source/component.cpp index 98b6ff7..6545b28 100644 --- a/source/component.cpp +++ b/source/component.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -30,18 +31,23 @@ void Component::create_build_info() const Package::Requirements &pkg_reqs = package.get_required_packages(); Package::Requirements direct_reqs = requires; direct_reqs.insert(direct_reqs.end(), pkg_reqs.begin(), pkg_reqs.end()); + for(Package *r: direct_reqs) + final_build_info.update_from(r->get_exported_build_info(), BuildInfo::DEPENDENCY); Package::Requirements all_reqs = direct_reqs; - for(Package *r: all_reqs) + deque queue(direct_reqs.begin(), direct_reqs.end()); + while(!queue.empty()) { - BuildInfo::UpdateLevel level = BuildInfo::CHAINED; - if(any_equals(direct_reqs, r)) - level = BuildInfo::DEPENDENCY; - final_build_info.update_from(r->get_exported_build_info(), level); - - for(Package *q: r->get_required_packages()) - if(!any_equals(all_reqs, q)) - all_reqs.push_back(q); + Package *req = queue.front(); + queue.pop_front(); + + for(Package *r: req->get_required_packages()) + if(!any_equals(all_reqs, r)) + { + final_build_info.update_from(r->get_exported_build_info(), BuildInfo::CHAINED); + all_reqs.push_back(r); + queue.push_back(r); + } } final_build_info.update_from(package.get_build_info());