diff options
author | Frank Henigman <fjhenigman@google.com> | 2017-12-18 04:30:03 (GMT) |
---|---|---|
committer | Frank Henigman <fjhenigman@chromium.org> | 2018-04-05 03:02:09 (GMT) |
commit | b9d3ba2f169e172f2d73330f6a1d1f0436baa859 (patch) | |
tree | 6cdb82615568743e53fb9486a87198789daf3356 /src/clean.cc | |
parent | a741b119e6d29061a4fbdedf35dc196e4cee67ec (diff) | |
download | Ninja-b9d3ba2f169e172f2d73330f6a1d1f0436baa859.zip Ninja-b9d3ba2f169e172f2d73330f6a1d1f0436baa859.tar.gz Ninja-b9d3ba2f169e172f2d73330f6a1d1f0436baa859.tar.bz2 |
Canonicalize targets of clean command.
This corrects an inconsistency where build targets were canonicalized
but clean targets were not. For example you could build ./foo but not
clean ./foo.
Diffstat (limited to 'src/clean.cc')
-rw-r--r-- | src/clean.cc | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/clean.cc b/src/clean.cc index 1d6ba9e..4f31a03 100644 --- a/src/clean.cc +++ b/src/clean.cc @@ -180,15 +180,22 @@ int Cleaner::CleanTargets(int target_count, char* targets[]) { Reset(); PrintHeader(); for (int i = 0; i < target_count; ++i) { - const char* target_name = targets[i]; - Node* target = state_->LookupNode(target_name); - if (target) { - if (IsVerbose()) - printf("Target %s\n", target_name); - DoCleanTarget(target); - } else { - Error("unknown target '%s'", target_name); + string target_name = targets[i]; + uint64_t slash_bits; + string err; + if (!CanonicalizePath(&target_name, &slash_bits, &err)) { + Error("failed to canonicalize '%s': %s", target_name.c_str(), err.c_str()); status_ = 1; + } else { + Node* target = state_->LookupNode(target_name); + if (target) { + if (IsVerbose()) + printf("Target %s\n", target_name.c_str()); + DoCleanTarget(target); + } else { + Error("unknown target '%s'", target_name.c_str()); + status_ = 1; + } } } PrintFooter(); |