X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=d4669520abd93fd7aabaf4b9b1ba7cf2bfc690ac;hb=1968c546cfb30214e8dc5afc722bec14aa8373f5;hp=6ee210177f32a077935223d17203d924da9d45dd;hpb=c679a9dd1a97ae3b1ffa568143d42d02c2ca9e74;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index 6ee2101..d466952 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -12,6 +12,7 @@ Distributed under the LGPL #include #include #include +#include #include #include #include @@ -35,7 +36,7 @@ using namespace std; using namespace Msp; Builder::Builder(int argc, char **argv): - default_pkg(0), + main_pkg(0), analyzer(0), build(false), clean(0), @@ -174,6 +175,9 @@ Package *Builder::get_package(const string &n) packages.insert(PackageMap::value_type(n, pkg)); + if(!pkg) + problem(n, "not found"); + return pkg; } @@ -311,6 +315,11 @@ void Builder::apply_profile_template(Config &config, const string &pt) const } } +void Builder::problem(const string &p, const string &d) +{ + problems.push_back(Problem(p, d)); +} + /** Adds a target to both the target map and the new target queue. Called from Target constructor. @@ -329,7 +338,7 @@ int Builder::main() return 1; } - default_pkg->configure(cmdline_options, conf_all?2:1); + main_pkg->configure(cmdline_options, conf_all?2:1); if(help) { @@ -339,24 +348,24 @@ int Builder::main() return 0; } - StringMap problems; - for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i) + if(!conf_only && create_targets()) + return 1; + + PackageList all_reqs=main_pkg->collect_requires(); + + for(PackageList::const_iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i) { - SourcePackage *spkg=dynamic_cast(i->second); + SourcePackage *spkg=dynamic_cast(*i); string prob; - if(!i->second) - prob="missing"; - else if(spkg && spkg->get_arch()!=default_pkg->get_arch()) - prob="wrong architecture ("+spkg->get_arch()+")"; - if(!prob.empty()) - problems.insert(StringMap::value_type(i->first, prob)); + if(spkg && spkg->get_arch()!=main_pkg->get_arch()) + problem(spkg->get_name(), format("wrong architecture (%s)", spkg->get_arch())); } if(!problems.empty()) { cerr<<"The following problems were detected:\n"; - for(StringMap::iterator i=problems.begin(); i!=problems.end(); ++i) - cerr<<" "<first<<": "<second<<'\n'; + for(ProblemList::iterator i=problems.begin(); i!=problems.end(); ++i) + cerr<<" "<package<<": "<descr<<'\n'; cerr<<"Please fix them and try again.\n"; return 1; } @@ -364,21 +373,18 @@ int Builder::main() if(conf_only) return 0; - if(create_targets()) - return 1; - - cout<=2) { - for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i) + for(PackageList::const_iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i) { - cout<<' '<second->get_name(); - if(dynamic_cast(i->second)) + cout<<' '<<(*i)->get_name(); + if(dynamic_cast(*i)) cout<<'*'; unsigned count=0; unsigned ood_count=0; for(TargetMap::iterator j=targets.begin(); j!=targets.end(); ++j) - if(j->second->get_package()==i->second) + if(j->second->get_package()==*i) { ++count; if(j->second->get_rebuild()) @@ -492,9 +498,10 @@ int Builder::create_targets() Target *tarballs=new VirtualTarget(*this, "tarballs"); world->add_depend(tarballs); - for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i) + PackageList all_reqs=main_pkg->collect_requires(); + for(PackageList::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i) { - SourcePackage *spkg=dynamic_cast(i->second); + SourcePackage *spkg=dynamic_cast(*i); if(!spkg) continue; @@ -736,7 +743,7 @@ int Builder::do_clean() Target *tgt=queue.front(); queue.erase(queue.begin()); - if(tgt->get_buildable() && (tgt->get_package()==default_pkg || clean>=2)) + if(tgt->get_buildable() && (tgt->get_package()==main_pkg || clean>=2)) clean_tgts.insert(tgt); const TargetList &deps=tgt->get_depends(); @@ -760,11 +767,11 @@ Prints out information about the default package. */ void Builder::package_help() { - const Config &config=default_pkg->get_config(); + const Config &config=main_pkg->get_config(); const Config::OptionMap &options=config.get_options(); cout<<"Required packages:\n "; - const PackageList &requires=default_pkg->get_requires(); + const PackageList &requires=main_pkg->get_requires(); for(PackageList::const_iterator i=requires.begin(); i!=requires.end(); ++i) { if(i!=requires.begin()) @@ -815,8 +822,8 @@ void Builder::Loader::profile(const string &n) void Builder::Loader::package(const string &n) { SourcePackage *pkg=new SourcePackage(bld, n, src); - if(!bld.default_pkg) - bld.default_pkg=pkg; + if(!bld.main_pkg) + bld.main_pkg=pkg; load_sub(*pkg); bld.packages.insert(PackageMap::value_type(n, pkg));