diff options
Diffstat (limited to 'src/build.cc')
-rw-r--r-- | src/build.cc | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/src/build.cc b/src/build.cc index b4229c4..701fa92 100644 --- a/src/build.cc +++ b/src/build.cc @@ -256,9 +256,9 @@ void BuildStatus::PrintStatus(Edge* edge) { bool force_full_command = config_.verbosity == BuildConfig::VERBOSE; - string to_print = edge->GetDescription(); + string to_print = edge->GetBinding("description"); if (to_print.empty() || force_full_command) - to_print = edge->EvaluateCommand(); + to_print = edge->GetBinding("command"); #ifdef _WIN32 CONSOLE_SCREEN_BUFFER_INFO csbi; @@ -612,7 +612,7 @@ void Builder::Cleanup() { for (vector<Edge*>::iterator i = active_edges.begin(); i != active_edges.end(); ++i) { - bool has_depfile = !(*i)->rule_->depfile().empty(); + string depfile = (*i)->GetBinding("depfile"); for (vector<Node*>::iterator ni = (*i)->outputs_.begin(); ni != (*i)->outputs_.end(); ++ni) { // Only delete this output if it was actually modified. This is @@ -622,12 +622,13 @@ void Builder::Cleanup() { // need to rebuild an output because of a modified header file // mentioned in a depfile, and the command touches its depfile // but is interrupted before it touches its output file.) - if (has_depfile || - (*ni)->mtime() != disk_interface_->Stat((*ni)->path())) + if (!depfile.empty() || + (*ni)->mtime() != disk_interface_->Stat((*ni)->path())) { disk_interface_->RemoveFile((*ni)->path()); + } } - if (has_depfile) - disk_interface_->RemoveFile((*i)->EvaluateDepFile()); + if (!depfile.empty()) + disk_interface_->RemoveFile(depfile); } } } @@ -771,11 +772,11 @@ bool Builder::StartEdge(Edge* edge, string* err) { // Create response file, if needed // XXX: this may also block; do we care? - if (edge->HasRspFile()) { - if (!disk_interface_->WriteFile(edge->GetRspFile(), - edge->GetRspFileContent())) { + string rspfile = edge->GetBinding("rspfile"); + if (!rspfile.empty()) { + string content = edge->GetBinding("rspfile_content"); + if (!disk_interface_->WriteFile(rspfile, content)) return false; - } } // start command computing and run it @@ -792,7 +793,7 @@ void Builder::FinishEdge(Edge* edge, bool success, const string& output) { TimeStamp restat_mtime = 0; if (success) { - if (edge->rule().restat() && !config_.dry_run) { + if (edge->GetBindingBool("restat") && !config_.dry_run) { bool node_cleaned = false; for (vector<Node*>::iterator i = edge->outputs_.begin(); @@ -817,9 +818,9 @@ void Builder::FinishEdge(Edge* edge, bool success, const string& output) { restat_mtime = input_mtime; } - if (restat_mtime != 0 && !edge->rule().depfile().empty()) { - TimeStamp depfile_mtime = - disk_interface_->Stat(edge->EvaluateDepFile()); + string depfile = edge->GetBinding("depfile"); + if (restat_mtime != 0 && !depfile.empty()) { + TimeStamp depfile_mtime = disk_interface_->Stat(depfile); if (depfile_mtime > restat_mtime) restat_mtime = depfile_mtime; } @@ -830,9 +831,10 @@ void Builder::FinishEdge(Edge* edge, bool success, const string& output) { } } - // delete the response file on success (if exists) - if (edge->HasRspFile()) - disk_interface_->RemoveFile(edge->GetRspFile()); + // Delete the response file on success (if exists) + string rspfile = edge->GetBinding("rspfile"); + if (!rspfile.empty()) + disk_interface_->RemoveFile(rspfile); plan_.EdgeFinished(edge); } |