time_t restat_mtime = 0;
if (success) {
- if (edge->rule_->restat_) {
+ if (edge->rule().restat_) {
bool node_cleaned = false;
for (vector<Node*>::iterator i = edge->outputs_.begin();
restat_mtime = input_mtime;
}
- if (restat_mtime != 0 && !edge->rule_->depfile_.empty()) {
+ if (restat_mtime != 0 && !edge->rule().depfile_.empty()) {
time_t depfile_mtime = disk_interface_->Stat(edge->EvaluateDepFile());
if (depfile_mtime == 0)
restat_mtime = 0;
bool BuildTest::StartCommand(Edge* edge) {
assert(!last_command_);
commands_ran_.push_back(edge->EvaluateCommand());
- if (edge->rule_->name_ == "cat" || edge->rule_->name_ == "cc" ||
- edge->rule_->name_ == "touch") {
+ if (edge->rule().name_ == "cat" || edge->rule_->name_ == "cc" ||
+ edge->rule().name_ == "touch") {
for (vector<Node*>::iterator out = edge->outputs_.begin();
out != edge->outputs_.end(); ++out) {
fs_.Create((*out)->file_->path_, now_, "");
}
- } else if (edge->rule_->name_ == "true" ||
- edge->rule_->name_ == "fail") {
+ } else if (edge->rule().name_ == "true" ||
+ edge->rule().name_ == "fail") {
// Don't do anything.
} else {
printf("unknown command\n");
Edge* BuildTest::WaitForCommand(bool* success, string* output) {
if (Edge* edge = last_command_) {
- if (edge->rule_->name_ == "fail")
+ if (edge->rule().name_ == "fail")
*success = false;
else
*success = true;
if ((*e)->rule_ == &State::kPhonyRule)
continue;
// Do not remove generator's files unless generator specified.
- if (!generator && (*e)->rule_->generator_)
+ if (!generator && (*e)->rule().generator_)
continue;
for (vector<Node*>::iterator out_node = (*e)->outputs_.begin();
out_node != (*e)->outputs_.end(); ++out_node) {
Remove((*out_node)->file_->path_);
}
- if (!(*e)->rule_->depfile_.empty())
+ if (!(*e)->rule().depfile_.empty())
Remove((*e)->EvaluateDepFile());
}
PrintFooter();
for (vector<Edge*>::iterator e = state_->edges_.begin();
e != state_->edges_.end();
++e)
- if ((*e)->rule_->name_ == rule->name_)
+ if ((*e)->rule().name_ == rule->name_)
for (vector<Node*>::iterator out_node = (*e)->outputs_.begin();
out_node != (*e)->outputs_.end();
++out_node)
Env* env_;
bool outputs_ready_;
+ const Rule& rule() const { return *rule_; }
bool outputs_ready() const { return outputs_ready_; }
// XXX There are three types of inputs.