Update genfiles paths to work with a different execroot arrangement

Bazel is changing the way the execution root is organized (see https://github.com/bazelbuild/bazel/issues/1681
for details) and this updates the protobuf path logic to work with both old
and new versions of Bazel.
pull/2226/head
Kristina Chodorow 8 years ago
parent c9cd6acd71
commit 4e7ecde15c
  1. 28
      protobuf.bzl

@ -4,7 +4,24 @@ def _GetPath(ctx, path):
else: else:
return path return path
def _IsNewExternal(ctx):
# Bazel 0.4.4 and older have genfiles paths that look like:
# bazel-out/local-fastbuild/genfiles/external/repo/foo
# After the exec root rearrangement, they look like:
# ../repo/bazel-out/local-fastbuild/genfiles/foo
return ctx.label.workspace_root.startswith("../")
def _GenDir(ctx): def _GenDir(ctx):
if _IsNewExternal(ctx):
# We are using the fact that Bazel 0.4.4+ provides repository-relative paths
# for ctx.genfiles_dir.
return ctx.genfiles_dir.path + (
"/" + ctx.attr.includes[0] if ctx.attr.includes and ctx.attr.includes[0] else "")
# This means that we're either in the old version OR the new version in the local repo.
# Either way, appending the source path to the genfiles dir works.
return ctx.var["GENDIR"] + "/" + _SourceDir(ctx)
def _SourceDir(ctx):
if not ctx.attr.includes: if not ctx.attr.includes:
return ctx.label.workspace_root return ctx.label.workspace_root
if not ctx.attr.includes[0]: if not ctx.attr.includes[0]:
@ -51,9 +68,10 @@ def _proto_gen_impl(ctx):
srcs = ctx.files.srcs srcs = ctx.files.srcs
deps = [] deps = []
deps += ctx.files.srcs deps += ctx.files.srcs
source_dir = _SourceDir(ctx)
gen_dir = _GenDir(ctx) gen_dir = _GenDir(ctx)
if gen_dir: if source_dir:
import_flags = ["-I" + gen_dir, "-I" + ctx.var["GENDIR"] + "/" + gen_dir] import_flags = ["-I" + source_dir, "-I" + gen_dir]
else: else:
import_flags = ["-I."] import_flags = ["-I."]
@ -63,9 +81,9 @@ def _proto_gen_impl(ctx):
args = [] args = []
if ctx.attr.gen_cc: if ctx.attr.gen_cc:
args += ["--cpp_out=" + ctx.var["GENDIR"] + "/" + gen_dir] args += ["--cpp_out=" + gen_dir]
if ctx.attr.gen_py: if ctx.attr.gen_py:
args += ["--python_out=" + ctx.var["GENDIR"] + "/" + gen_dir] args += ["--python_out=" + gen_dir]
inputs = srcs + deps inputs = srcs + deps
if ctx.executable.plugin: if ctx.executable.plugin:
@ -76,7 +94,7 @@ def _proto_gen_impl(ctx):
if not lang: if not lang:
fail("cannot infer the target language of plugin", "plugin_language") fail("cannot infer the target language of plugin", "plugin_language")
outdir = ctx.var["GENDIR"] + "/" + gen_dir outdir = gen_dir
if ctx.attr.plugin_options: if ctx.attr.plugin_options:
outdir = ",".join(ctx.attr.plugin_options) + ":" + outdir outdir = ",".join(ctx.attr.plugin_options) + ":" + outdir
args += ["--plugin=protoc-gen-%s=%s" % (lang, plugin.path)] args += ["--plugin=protoc-gen-%s=%s" % (lang, plugin.path)]

Loading…
Cancel
Save