Implement $?
diff --git a/src/command.cc b/src/command.cc
index 5268b9e..431b8ae 100644
--- a/src/command.cc
+++ b/src/command.cc
@@ -21,6 +21,7 @@
#include "dep.h"
#include "eval.h"
+#include "fileutil.h"
#include "flags.h"
#include "log.h"
#include "strutil.h"
@@ -67,6 +68,7 @@
DECLARE_AUTO_VAR_CLASS(AutoHatVar);
DECLARE_AUTO_VAR_CLASS(AutoPlusVar);
DECLARE_AUTO_VAR_CLASS(AutoStarVar);
+DECLARE_AUTO_VAR_CLASS(AutoQuestionVar);
DECLARE_AUTO_VAR_CLASS(AutoNotImplementedVar);
class AutoSuffixDVar : public AutoVar {
@@ -125,6 +127,18 @@
pat.Stem(n->output.str()).AppendToString(s);
}
+void AutoQuestionVar::Eval(Evaluator*, string* s) const {
+ unordered_set<StringPiece> seen;
+ WordWriter ww(s);
+ double target_age = GetTimestamp(ce_->current_dep_node()->output.str());
+ for (Symbol ai : ce_->current_dep_node()->actual_inputs) {
+ if (seen.insert(ai.str()).second
+ && GetTimestamp(ai.str()) > target_age) {
+ ww.Write(ai.str());
+ }
+ }
+}
+
void AutoNotImplementedVar::Eval(Evaluator* ev, string*) const {
ev->Error(StringPrintf("Automatic variable `$%s' isn't supported yet", sym_));
}
@@ -179,9 +193,9 @@
INSERT_AUTO_VAR(AutoHatVar, "^");
INSERT_AUTO_VAR(AutoPlusVar, "+");
INSERT_AUTO_VAR(AutoStarVar, "*");
+ INSERT_AUTO_VAR(AutoQuestionVar, "?");
// TODO: Implement them.
INSERT_AUTO_VAR(AutoNotImplementedVar, "%");
- INSERT_AUTO_VAR(AutoNotImplementedVar, "?");
INSERT_AUTO_VAR(AutoNotImplementedVar, "|");
}