X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fbuilder.cpp;h=b73618f25ae637b36d5b1c96ffca2f55ccd4b0d2;hb=8a2579d4b8e510405402ec316d53a509152aa6ea;hp=bbb95b6634cb03292ae1d37a017bd82094ce6eba;hpb=1dad660f7bbda5ef3239fd6374e0f8a77e19eaaa;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index bbb95b6..b73618f 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -98,9 +98,57 @@ void Builder::set_logger(const Logger *l) logger = (l ? l : &default_logger); } -void Builder::problem(const string &p, const string &d) +list Builder::collect_problems() const { - problems.push_back(Problem(p, d)); + list problems; + set broken_packages; + set broken_components; + set broken_tools; + + const BuildGraph::TargetMap &targets = build_graph.get_targets(); + for(BuildGraph::TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i) + if(i->second->is_broken()) + { + const list &tgt_problems = i->second->get_problems(); + for(list::const_iterator j=tgt_problems.begin(); j!=tgt_problems.end(); ++j) + problems.push_back(format("%s: %s", i->second->get_name(), *j)); + + const Package *package = i->second->get_package(); + if(package && !package->get_problems().empty()) + broken_packages.insert(package); + + const Component *component = i->second->get_component(); + if(component && !component->get_problems().empty()) + broken_components.insert(component); + + const Tool *tool = i->second->get_tool(); + if(tool && !tool->get_problems().empty()) + broken_tools.insert(tool); + } + + // TODO Sort components after their packages, and targets last + for(set::const_iterator i=broken_packages.begin(); i!=broken_packages.end(); ++i) + { + const list &pkg_problems = (*i)->get_problems(); + for(list::const_iterator j=pkg_problems.begin(); j!=pkg_problems.end(); ++j) + problems.push_back(format("%s: %s", (*i)->get_name(), *j)); + } + + for(set::const_iterator i=broken_components.begin(); i!=broken_components.end(); ++i) + { + const list &comp_problems = (*i)->get_problems(); + for(list::const_iterator j=comp_problems.begin(); j!=comp_problems.end(); ++j) + problems.push_back(format("%s/%s: %s", (*i)->get_package().get_name(), (*i)->get_name(), *j)); + } + + for(set::const_iterator i=broken_tools.begin(); i!=broken_tools.end(); ++i) + { + const list &tool_problems = (*i)->get_problems(); + for(list::const_iterator j=tool_problems.begin(); j!=tool_problems.end(); ++j) + problems.push_back(format("%s: %s", (*i)->get_tag(), *j)); + } + + return problems; } void Builder::load_build_file(const FS::Path &fn, const Config::InputOptions *opts, bool all) @@ -252,7 +300,6 @@ Builder::Loader::Loader(Builder &b, const Config::InputOptions *o, bool a): add("architecture", &Loader::architecture); add("binary_package", &Loader::binpkg); add("build_type", &Loader::build_type); - add("profile", &Loader::profile); add("package", &Loader::package); if(!obj.top_loader) @@ -288,11 +335,6 @@ void Builder::Loader::build_type(const string &n) obj.build_type = &i->second; } -void Builder::Loader::profile(const string &) -{ - IO::print("Profiles are deprecated\n"); -} - void Builder::Loader::package(const string &n) { SourcePackage *pkg = new SourcePackage(obj, n, get_source());