Explorar o código

Handle multiple outs per input (for plugins)

Fahrzin Hemmati %!s(int64=7) %!d(string=hai) anos
pai
achega
b3c2ec7073
Modificáronse 1 ficheiros con 25 adicións e 22 borrados
  1. 25 22
      protobuf.bzl

+ 25 - 22
protobuf.bzl

@@ -91,8 +91,10 @@ def _proto_gen_impl(ctx):
         ),  
     )   
 
-  for src, out in zip(srcs, ctx.outputs.outs):
+  for src in srcs:
     args = []
+    src_name = src.basename[:-len(".proto")]
+    outs = [out for out in ctx.outputs.outs if src_name in out.basename]
 
     in_gen_dir = src.root.path == gen_dir.rstrip('/')
     if in_gen_dir:
@@ -126,27 +128,28 @@ def _proto_gen_impl(ctx):
       args += ["--%s_out=%s" % (lang, outdir)]
       inputs += [plugin]
 
-    if in_gen_dir:
-      orig_command = " ".join(
-          ["$(realpath %s)" % ctx.executable.protoc.path] + args +
-          import_flags_real + ["-I.", src.basename])
-      command = ";".join([
-          'CMD="%s"' % orig_command,
-          "cd %s" % src.dirname,
-          "${CMD}",
-          "cd -",
-          "mv %s/%s %s" % (gen_dir, out.basename, out.path)
-      ])
-    else:
-      command = " ".join(
-          [ctx.executable.protoc.path] + args + import_flags + [src.path])
-    ctx.action(
-        inputs=inputs + [ctx.executable.protoc],
-        outputs=[out],
-        command=command,
-        mnemonic="ProtoCompile",
-        use_default_shell_env=True,
-    )   
+    for out in outs:
+      if in_gen_dir:
+        orig_command = " ".join(
+            ["$(realpath %s)" % ctx.executable.protoc.path] + args +
+            import_flags_real + ["-I.", src.basename])
+        command = ";".join([
+            'CMD="%s"' % orig_command,
+            "cd %s" % src.dirname,
+            "${CMD}",
+            "cd -",
+            "mv %s/%s %s" % (gen_dir, out.basename, out.path)
+        ])
+      else:
+        command = " ".join(
+            [ctx.executable.protoc.path] + args + import_flags + [src.path])
+      ctx.action(
+          inputs=inputs + [ctx.executable.protoc],
+          outputs=[out],
+          command=command,
+          mnemonic="ProtoCompile",
+          use_default_shell_env=True,
+      )
 
   return struct(
       proto=struct(