X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=2c137ca406841a1159269851f8177261504c91c9;hb=e36dac301c41799d374b6d537129b2be63f05fb2;hp=cb8ddf610fe7b0237fb5a9f078ebcd122144e3ee;hpb=0d80cabf649b931b26e7055385156c75a7385d35;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index cb8ddf6..2c137ca 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -132,11 +132,15 @@ Package *Builder::get_package(const string &n) Package *pkg=Package::create(*this, n); packages.insert(PackageMap::value_type(n, pkg)); - new_pkgs.push_back(pkg); + if(pkg) + new_pkgs.push_back(pkg); return pkg; } +/** +Returns the target with the given name, or 0 if no such target exists. +*/ Target *Builder::get_target(const string &n) { TargetMap::iterator i=targets.find(n); @@ -213,17 +217,12 @@ int Builder::main() std::list missing; for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i) - { - const list &requires=i->second->get_requires(); - for(list::const_iterator j=requires.begin(); j!=requires.end(); ++j) - if(!j->get_package()) - missing.push_back(j->get_name()); - } + if(!i->second) + missing.push_back(i->first); if(!missing.empty()) { missing.sort(); - missing.unique(); cerr<<"The following packages were not found on the system:\n"; for(list::iterator i=missing.begin(); i!=missing.end(); ++i) cerr<<" "<<*i<<'\n'; @@ -233,15 +232,6 @@ int Builder::main() default_pkg->create_build_info(); - /*cout<<"Active packages:"; - for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i) - { - cout<<' '<second->get_name(); - if(i->second->get_buildable()) - cout<<'*'; - } - cout<<'\n';*/ - if(create_targets()) return 1; @@ -261,8 +251,6 @@ int Builder::main() } } - //cout<<"Active targets: "<analyze(); @@ -313,6 +301,10 @@ int Builder::create_targets() if(!i->second->get_buildable()) continue; + Path::Path inst_base; + if(i->second->get_config().is_option("prefix")) + inst_base=i->second->get_config().get_option("prefix").value; + const ComponentList &components=i->second->get_components(); for(ComponentList::const_iterator j=components.begin(); j!=components.end(); ++j) { @@ -325,8 +317,6 @@ int Builder::create_targets() files.push_back(*k / *l); } - Path::Path inst_base=i->second->get_config().get_option("prefix").value; - bool build_exe=j->get_type()!=Component::HEADERS; list objs; @@ -396,6 +386,8 @@ int Builder::create_targets() Target *tgt=new_tgts.front(); new_tgts.erase(new_tgts.begin()); tgt->find_depends(); + if(!tgt->get_depends_ready()) + new_tgts.push_back(tgt); } Target *cmdline=new VirtualTarget(*this, "cmdline"); @@ -465,7 +457,7 @@ int Builder::build() while(!finish) { - if(actions.size()get_buildable_target(); if(tgt) @@ -506,7 +498,9 @@ int Builder::build() delete actions[i]; actions.erase(actions.begin()+i); if(status>0) - finish=fail=true; + fail=true; + if(actions.empty() && fail) + finish=true; } else ++i;