+int Builder::build()
+{
+ Target *cmdline=get_target("cmdline");
+ list<Action *> actions;
+ bool fail=false;
+
+ while(cmdline->get_rebuild() && !fail)
+ {
+ if(actions.empty() && !fail)
+ {
+ Target *tgt=cmdline->get_buildable_target();
+ if(tgt)
+ {
+ cout<<"Build "<<tgt->get_name()<<'\n';
+ Action *action=tgt->build();
+ if(action)
+ actions.push_back(action);
+ }
+ }
+ else
+ sleep(10*Time::msec);
+
+ for(list<Action *>::iterator i=actions.begin(); i!=actions.end();)
+ {
+ int status=(*i)->check();
+ if(status>=0)
+ {
+ delete *i;
+ i=actions.erase(i);
+ if(status>0)
+ fail=true;
+ }
+ }
+ }
+
+ return 0;
+}
+