From b9d3ba2f169e172f2d73330f6a1d1f0436baa859 Mon Sep 17 00:00:00 2001 From: Frank Henigman Date: Sun, 17 Dec 2017 23:30:03 -0500 Subject: 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. --- src/clean.cc | 23 +++++++++++++++-------- 1 file 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(); -- cgit v0.12