[protobuf] Make proto_library gn configs path independent

For V8 to switch to Chrome's protobuf also in V8's stand-alone
checkout, we need to store protobof under a different path than in
Chrome (because of crbug.com/338008085).

To make the gn configs work also under another location, this change
removes hard-coded references to the location of protobuf within
protobuf and instead computes them dynamically when the gn script
is included.

Bug: 337736622
Change-Id: Id466b71977f22f060375839ee25b140c3670f576
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5508496
Reviewed-by: Tommy Nyquist <nyquist@chromium.org>
Commit-Queue: Michael Achenbach <machenbach@chromium.org>
Reviewed-by: Peter Boström <pbos@chromium.org>
Reviewed-by: Leonard Grey <lgrey@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1295963}
diff --git a/third_party/protobuf/proto_library.gni b/third_party/protobuf/proto_library.gni
index 9136904..f43ac07 100644
--- a/third_party/protobuf/proto_library.gni
+++ b/third_party/protobuf/proto_library.gni
@@ -157,7 +157,14 @@
   _host_executable_suffix = ""
 }
 
-_protoc_label = "//third_party/protobuf:protoc($host_toolchain)"
+# TODO(https://crbug.com/337736622): V8 shares this dependency and stores
+# it in a different location. Hence, all references to this folder should
+# use this variable instead of hard-coding //third_party/protobuf.
+# This can be switched back to //third_party/protobuf in M129, or earlier in
+# case crbug.com/338008085 is resolved.
+_this_dir = get_path_info(".", "abspath")
+
+_protoc_label = "$_this_dir:protoc($host_toolchain)"
 _protoc_path = get_label_info(_protoc_label, "root_out_dir") + "/protoc" +
                _host_executable_suffix
 _protoc_gen_js_label =
@@ -529,7 +536,7 @@
 
       sources = protogens_js
 
-      deps = [ "//third_party/protobuf:js_proto" ]
+      deps = [ "$_this_dir:js_proto" ]
 
       extra_deps = [ ":$action_name" ]
     }
@@ -563,8 +570,8 @@
     }
 
     public_configs = [
-      "//third_party/protobuf:using_proto",
-      "//third_party/protobuf:allow_deprecated_proto_fields",
+      "$_this_dir:using_proto",
+      "$_this_dir:allow_deprecated_proto_fields",
     ]
     public_deps = []
 
@@ -592,9 +599,9 @@
       if (generate_cc) {
         if (defined(invoker.use_protobuf_full) &&
             invoker.use_protobuf_full == true) {
-          public_deps += [ "//third_party/protobuf:protobuf_full" ]
+          public_deps += [ "$_this_dir:protobuf_full" ]
         } else {
-          public_deps += [ "//third_party/protobuf:protobuf_lite" ]
+          public_deps += [ "$_this_dir:protobuf_lite" ]
         }
 
         if (is_win) {
@@ -627,7 +634,7 @@
       data = protogens_py
       deps = [
         ":$action_name",
-        "//third_party/protobuf:py_proto_runtime",
+        "$_this_dir:py_proto_runtime",
       ]
     }
   }