X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=7b0f0187f762cf03defc63645cc285f9db647934;hb=1f65cfa34ee95345d2107bac8ff03f0e587bb311;hp=7b222df4997c1f05e31febfef670a10d46fc80dd;hpb=95d5743c0f2a0dd8b56928525b8caa5f6ee8cc1d;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index 7b222df..7b0f018 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -331,6 +331,14 @@ void Builder::add_target(Target *t) targets.insert(TargetMap::value_type(t->get_name(), t)); } +void Builder::add_primary_target(Target &t) +{ + get_target("world")->add_dependency(t); + + if(t.get_package()==main_pkg && t.get_component() && t.get_component()->is_default()) + get_target("default")->add_dependency(t); +} + void Builder::usage(const char *reason, const char *argv0, bool brief) { if(reason) @@ -357,7 +365,7 @@ int Builder::load_build_file(const FS::Path &fn) logger.log("files", format("Reading %s", fn)); DataFile::Parser parser(in, fn.str()); - Loader loader(*this, fn.subpath(0, fn.size()-1)); + Loader loader(*this); loader.load(parser); return 0; @@ -449,10 +457,11 @@ int Builder::do_build() bool fail = false; bool finish = false; + bool starved = false; while(!finish) { - if(tasks.size()get_buildable_target(); if(tgt) @@ -480,13 +489,20 @@ int Builder::do_build() } else if(tasks.empty()) finish = true; + else + starved = true; } else Time::sleep(10*Time::msec); for(unsigned i=0; icheck(); + Task::Status status; + if(jobs==1 || (tasks.size()==1 && starved)) + status = tasks[i]->wait(); + else + status = tasks[i]->check(); + if(status!=Task::RUNNING) { ++count; @@ -497,6 +513,7 @@ int Builder::do_build() fail = true; if(tasks.empty() && fail) finish = true; + starved = false; } else ++i; @@ -510,6 +527,13 @@ int Builder::do_build() else if(show_progress) logger.log("summary", "Build complete"); + if(!dry_run) + { + const PackageManager::PackageMap &packages = package_manager.get_packages(); + for(PackageManager::PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i) + i->second->save_caches(); + } + return fail; } @@ -571,9 +595,8 @@ string Builder::usagemsg; string Builder::helpmsg; -Builder::Loader::Loader(Builder &b, const FS::Path &s): - DataFile::ObjectLoader(b), - src(s) +Builder::Loader::Loader(Builder &b): + DataFile::ObjectLoader(b) { add("architecture", &Loader::architecture); add("binary_package", &Loader::binpkg); @@ -610,7 +633,7 @@ void Builder::Loader::profile(const string &) void Builder::Loader::package(const string &n) { - SourcePackage *pkg = new SourcePackage(obj, n, src); + SourcePackage *pkg = new SourcePackage(obj, n, get_source()); if(!obj.main_pkg) obj.main_pkg = pkg;