X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=7b0f0187f762cf03defc63645cc285f9db647934;hb=92ab07ba1704c3d66dcc5e3e6a1c78e5d2738515;hp=1c90aa8e2229ac6192fcc9bff7c92b7c59417e2a;hpb=edb6076ccae6347acb84868563144a63e6ceba02;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index 1c90aa8..7b0f018 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -457,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) @@ -488,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; @@ -505,6 +513,7 @@ int Builder::do_build() fail = true; if(tasks.empty() && fail) finish = true; + starved = false; } else ++i; @@ -518,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; }