Handle multiple outs per input (for plugins)

pull/3981/head
Fahrzin Hemmati 7 years ago
parent a6501e4a2b
commit b3c2ec7073
  1. 47
      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(

Loading…
Cancel
Save