summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2011-05-01 02:50:49 (GMT)
committerEvan Martin <martine@danga.com>2011-05-01 02:52:02 (GMT)
commit4629f032b1580c67ede3ef879e72293e56f0010c (patch)
tree8236e4f881755a0df3f3b2585366e314bfdcba44 /src
parent5c7ac5c72d986570766db0ce9b9a9714ff8a4032 (diff)
downloadNinja-4629f032b1580c67ede3ef879e72293e56f0010c.zip
Ninja-4629f032b1580c67ede3ef879e72293e56f0010c.tar.gz
Ninja-4629f032b1580c67ede3ef879e72293e56f0010c.tar.bz2
use refactored function to support implicit "all" target
Diffstat (limited to 'src')
-rw-r--r--src/build.cc15
-rw-r--r--src/build.h1
-rw-r--r--src/ninja.cc20
3 files changed, 20 insertions, 16 deletions
diff --git a/src/build.cc b/src/build.cc
index deef7aa..2549553 100644
--- a/src/build.cc
+++ b/src/build.cc
@@ -372,17 +372,24 @@ Node* Builder::AddTarget(const string& name, string* err) {
*err = "unknown target: '" + name + "'";
return NULL;
}
+ if (!AddTarget(node, err))
+ return NULL;
+ return node;
+}
+
+bool Builder::AddTarget(Node* node, string* err) {
node->file_->StatIfNecessary(disk_interface_);
if (node->in_edge_) {
if (!node->in_edge_->RecomputeDirty(state_, disk_interface_, err))
- return NULL;
+ return false;
}
if (!node->dirty_)
- return NULL; // Intentionally no error.
+ return false; // Intentionally no error.
if (!plan_.AddTarget(node, err))
- return NULL;
- return node;
+ return false;
+
+ return true;
}
bool Builder::Build(string* err) {
diff --git a/src/build.h b/src/build.h
index b5f53da..feb83d5 100644
--- a/src/build.h
+++ b/src/build.h
@@ -97,6 +97,7 @@ struct Builder {
Builder(State* state, const BuildConfig& config);
Node* AddTarget(const string& name, string* err);
+ bool AddTarget(Node* target, string* err);
bool Build(string* err);
bool StartEdge(Edge* edge, string* err);
diff --git a/src/ninja.cc b/src/ninja.cc
index 96530f6..43b19ea 100644
--- a/src/ninja.cc
+++ b/src/ninja.cc
@@ -374,11 +374,6 @@ int main(int argc, char** argv) {
return 1;
}
}
- if (optind >= argc && tool.empty()) {
- Error("expected target to build");
- usage(config);
- return 1;
- }
argv += optind;
argc -= optind;
@@ -440,14 +435,15 @@ int main(int argc, char** argv) {
return 1;
}
- Builder builder(&state, config);
- for (int i = 0; i < argc; ++i) {
- string path = argv[i];
- string err;
- if (!CanonicalizePath(&path, &err))
- Fatal("can't canonicalize '%s': %s", path.c_str(), err.c_str());
+ vector<Node*> targets;
+ if (!CollectTargetsFromArgs(&state, argc, argv, &targets, &err)) {
+ Error("%s", err.c_str());
+ return 1;
+ }
- if (!builder.AddTarget(path, &err)) {
+ Builder builder(&state, config);
+ for (size_t i = 0; i < targets.size(); ++i) {
+ if (!builder.AddTarget(targets[i], &err)) {
if (!err.empty()) {
Error("%s", err.c_str());
return 1;