| Index: tools/gn/function_rebase_path.cc
|
| diff --git a/tools/gn/function_rebase_path.cc b/tools/gn/function_rebase_path.cc
|
| index ef5ef40f984046cab216970f62b9eaaac27ea21c..f3b14bb0dd75de2e4b17a03158127f120e31b603 100644
|
| --- a/tools/gn/function_rebase_path.cc
|
| +++ b/tools/gn/function_rebase_path.cc
|
| @@ -98,13 +98,23 @@ Value ConvertOnePath(const Scope* scope,
|
| scope->settings()->build_settings()->root_path_utf8());
|
| MakeSlashEndingMatchInput(string_value, &result.string_value());
|
| } else {
|
| - result.string_value() = RebasePath(
|
| + SourceFile resolved_file =
|
| from_dir.ResolveRelativeFile(value, err,
|
| - scope->settings()->build_settings()->root_path_utf8()).value(),
|
| - to_dir,
|
| - scope->settings()->build_settings()->root_path_utf8());
|
| + scope->settings()->build_settings()->root_path_utf8());
|
| if (err->has_error())
|
| return Value();
|
| + // Special case:
|
| + // rebase_path("//foo", "//bar") ==> "../foo"
|
| + // rebase_path("//foo", "//foo") ==> "." and not "../foo"
|
| + if (resolved_file.value() ==
|
| + to_dir.value().substr(0, to_dir.value().size() - 1)) {
|
| + result.string_value() = ".";
|
| + } else {
|
| + result.string_value() = RebasePath(
|
| + resolved_file.value(),
|
| + to_dir,
|
| + scope->settings()->build_settings()->root_path_utf8());
|
| + }
|
| }
|
|
|
| return result;
|
|
|