+ if(!tool)
+ {
+ // This special case is needed for VirtualTargets
+ state = UPTODATE;
+ return 0;
+ }
+
+ // XXX Minor breach of OO here
+ if(FileTarget *ft = dynamic_cast<FileTarget *>(this))
+ if(!builder.get_dry_run() && FS::exists(ft->get_path()))
+ FS::unlink(ft->get_path());
+
+ Task *task = tool->run(*this);
+ task->signal_finished.connect(sigc::mem_fun(this, &Target::build_finished));
+ state = BUILDING;
+
+ return task;