Cleanups for compatibility with future Bazel releases (#162)
* Cleanups for compatibility with future Bazel releases
Many of the changes were made using Buildifier (which is why the files
are reformatted).
Also, update some of the dependencies
* Add TODO for depsets
diff --git a/WORKSPACE b/WORKSPACE
index 089c935..042cf24 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -30,23 +30,29 @@
)
load("//proto:repositories.bzl", "rust_proto_repositories")
+
rust_proto_repositories()
# Used for documenting Rust rules.
-git_repository(
+http_archive(
name = "io_bazel_rules_sass",
- remote = "https://github.com/bazelbuild/rules_sass.git",
- tag = "0.0.3",
+ sha256 = "76ae498b9a96fa029f026f8358ed44b93c934dde4691a798cb3a4137c307b7dc",
+ strip_prefix = "rules_sass-1.15.1",
+ url = "https://github.com/bazelbuild/rules_sass/archive/1.15.1.zip",
)
-load("@io_bazel_rules_sass//sass:sass.bzl", "sass_repositories")
+load("@io_bazel_rules_sass//:package.bzl", "rules_sass_dependencies")
+
+rules_sass_dependencies()
+
+load("@io_bazel_rules_sass//:defs.bzl", "sass_repositories")
sass_repositories()
git_repository(
name = "io_bazel_skydoc",
+ commit = "9bbdf62c03b5c3fed231604f78d3976f47753d79", # 2018-11-20
remote = "https://github.com/bazelbuild/skydoc.git",
- tag = "0.1.4",
)
load("@io_bazel_skydoc//skylark:skylark.bzl", "skydoc_repositories")
@@ -65,10 +71,11 @@
http_archive(
name = "bazel_skylib",
- url = "https://github.com/bazelbuild/bazel-skylib/archive/0.5.0.tar.gz",
sha256 = "b5f6abe419da897b7901f90cbab08af958b97a8f3575b0d3dd062ac7ce78541f",
- strip_prefix = "bazel-skylib-0.5.0"
+ strip_prefix = "bazel-skylib-0.5.0",
+ url = "https://github.com/bazelbuild/bazel-skylib/archive/0.5.0.tar.gz",
)
load(":workspace.bzl", "bazel_version")
+
bazel_version(name = "bazel_version")
diff --git a/proto/proto.bzl b/proto/proto.bzl
index b166be3..3140776 100644
--- a/proto/proto.bzl
+++ b/proto/proto.bzl
@@ -34,13 +34,12 @@
load(
"//proto:toolchain.bzl",
- "rust_proto_toolchain",
- "PROTO_COMPILE_DEPS",
"GRPC_COMPILE_DEPS",
- _generate_proto = "rust_generate_proto",
+ "PROTO_COMPILE_DEPS",
_file_stem = "file_stem",
+ _generate_proto = "rust_generate_proto",
)
-load("//rust:private/rustc.bzl", "CrateInfo", "DepInfo", "rustc_compile_action")
+load("//rust:private/rustc.bzl", "CrateInfo", "rustc_compile_action")
load("//rust:private/utils.bzl", "find_toolchain")
def _gen_lib(ctx, grpc, deps, srcs, lib):
@@ -67,7 +66,7 @@
# Create all the source in a specific folder
toolchain = ctx.toolchains["@io_bazel_rules_rust//proto:toolchain"]
output_dir = "%s.%s.rust" % (crate_name, "grpc" if grpc else "proto")
-
+
# Generate the proto stubs
srcs = _generate_proto(
ctx,
@@ -87,7 +86,10 @@
# And simulate rust_library behavior
output_hash = repr(hash(lib_rs.path))
rust_lib = ctx.actions.declare_file("%s/lib%s-%s.rlib" % (
- output_dir, crate_name, output_hash))
+ output_dir,
+ crate_name,
+ output_hash,
+ ))
result = rustc_compile_action(
ctx = ctx,
toolchain = find_toolchain(ctx),
diff --git a/proto/repositories.bzl b/proto/repositories.bzl
index 84f60ed..cee12d6 100644
--- a/proto/repositories.bzl
+++ b/proto/repositories.bzl
@@ -12,22 +12,21 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-load("//proto/raze:crates.bzl", _crate_deps="raze_fetch_remote_crates")
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("//proto/raze:crates.bzl", _crate_deps = "raze_fetch_remote_crates")
+load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
def rust_proto_repositories():
- """Declare dependencies needed for proto compilation."""
- if not native.existing_rule("com_google_protobuf"):
- http_archive(
- name="com_google_protobuf",
- urls=["https://github.com/google/protobuf/archive/v3.5.1.zip"],
- strip_prefix="protobuf-3.5.1",
- sha256="1f8b9b202e9a4e467ff0b0f25facb1642727cdf5e69092038f15b37c75b99e45",
- )
+ """Declare dependencies needed for proto compilation."""
+ if not native.existing_rule("com_google_protobuf"):
+ git_repository(
+ name = "com_google_protobuf",
+ remote = "https://github.com/protocolbuffers/protobuf.git",
+ commit = "7b28271a61a3da0a37f6fda399b0c4c86464e5b3", # 2018-11-16
+ )
- _crate_deps()
-
- # Register toolchains
- native.register_toolchains(
- "@io_bazel_rules_rust//proto:default-proto-toolchain",
- )
\ No newline at end of file
+ _crate_deps()
+
+ # Register toolchains
+ native.register_toolchains(
+ "@io_bazel_rules_rust//proto:default-proto-toolchain",
+ )
diff --git a/proto/toolchain.bzl b/proto/toolchain.bzl
index bd00614..bc9ec81 100644
--- a/proto/toolchain.bzl
+++ b/proto/toolchain.bzl
@@ -59,6 +59,7 @@
# Add grpc stubs to the list of outputs
grpc_files = [ctx.actions.declare_file(path + "_grpc.rs") for path in paths]
outs.extend(grpc_files)
+
# gRPC stubs is generated only if a service is defined in the proto,
# so we create an empty grpc module in the other case.
tools.append(proto_toolchain.grpc_plugin)
diff --git a/rust/private/rust.bzl b/rust/private/rust.bzl
index 6835eea..29f9098 100644
--- a/rust/private/rust.bzl
+++ b/rust/private/rust.bzl
@@ -13,7 +13,7 @@
# limitations under the License.
load("@io_bazel_rules_rust//rust:private/rustc.bzl", "CrateInfo", "rustc_compile_action")
-load("@io_bazel_rules_rust//rust:private/utils.bzl", "find_toolchain", "relative_path")
+load("@io_bazel_rules_rust//rust:private/utils.bzl", "find_toolchain")
# TODO(marco): Separate each rule into its own file.
@@ -149,21 +149,21 @@
bench_script = ctx.outputs.executable
# Build the underlying benchmark binary.
- bench_binary = ctx.new_file(
- ctx.configuration.bin_dir,
+ bench_binary = ctx.actions.declare_file(
"{}_bin".format(bench_script.basename),
+ sibling = ctx.configuration.bin_dir,
)
info = _rust_test_common(ctx, bench_binary)
# Wrap the benchmark to run it as cargo would.
- ctx.file_action(
+ ctx.actions.write(
output = bench_script,
content = "\n".join([
"#!/usr/bin/env bash",
"set -e",
"{} --bench".format(bench_binary.short_path),
]),
- executable = True,
+ is_executable = True,
)
runfiles = ctx.runfiles(
@@ -176,23 +176,20 @@
_rust_common_attrs = {
"srcs": attr.label_list(allow_files = [".rs"]),
"crate_root": attr.label(
- allow_files = [".rs"],
- single_file = True,
+ allow_single_file = [".rs"],
),
"data": attr.label_list(
allow_files = True,
- cfg = "data",
),
"deps": attr.label_list(),
"crate_features": attr.string_list(),
"rustc_flags": attr.string_list(),
"version": attr.string(default = "0.0.0"),
"out_dir_tar": attr.label(
- allow_files = [
+ allow_single_file = [
".tar",
".tar.gz",
],
- single_file = True,
),
"_cc_toolchain": attr.label(default = "@bazel_tools//tools/cpp:current_cc_toolchain"),
}
diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
index c0315a3..984f481 100644
--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-load("@io_bazel_rules_rust//rust:private/utils.bzl", "find_toolchain", "relative_path")
+load("@io_bazel_rules_rust//rust:private/utils.bzl", "relative_path")
load(
"@bazel_tools//tools/build_defs/cc:action_names.bzl",
"CPP_LINK_EXECUTABLE_ACTION_NAME",
@@ -92,6 +92,8 @@
Returns:
Returns a DepInfo provider.
"""
+
+ # TODO: Fix depset union (https://docs.bazel.build/versions/master/skylark/depsets.html)
direct_crates = depset()
transitive_crates = depset()
transitive_dylibs = depset(order = "topological") # dylib link flag ordering matters.
@@ -115,7 +117,9 @@
crate_list = transitive_crates.to_list()
transitive_libs = depset([c.output for c in crate_list]) + transitive_staticlibs + transitive_dylibs
- indirect_crates = depset([crate for crate in crate_list if crate not in direct_crates])
+
+ # TODO: Avoid depset flattening.
+ indirect_crates = depset([crate for crate in crate_list if crate not in direct_crates.to_list()])
return DepInfo(
direct_crates = direct_crates,
@@ -123,7 +127,7 @@
transitive_crates = transitive_crates,
transitive_dylibs = transitive_dylibs,
transitive_staticlibs = transitive_staticlibs,
- transitive_libs = list(transitive_libs),
+ transitive_libs = transitive_libs.to_list(),
)
def _get_linker_and_args(ctx, rpaths):
@@ -304,7 +308,8 @@
dep_info.transitive_crates,
map_each = _get_crate_dirname,
uniquify = True,
- format_each = "-Ldependency=%s")
+ format_each = "-Ldependency=%s",
+ )
def _crate_to_link_flag(crate_info):
return ["--extern", "{}={}".format(crate_info.name, crate_info.output.path)]
diff --git a/rust/private/rustdoc.bzl b/rust/private/rustdoc.bzl
index e18d744..ad47107 100644
--- a/rust/private/rustdoc.bzl
+++ b/rust/private/rustdoc.bzl
@@ -79,9 +79,9 @@
attrs = {
"dep": attr.label(mandatory = True),
"markdown_css": attr.label_list(allow_files = [".css"]),
- "html_in_header": attr.label(allow_files = [".html", ".md"], single_file = True),
- "html_before_content": attr.label(allow_files = [".html", ".md"], single_file = True),
- "html_after_content": attr.label(allow_files = [".html", ".md"], single_file = True),
+ "html_in_header": attr.label(allow_single_file = [".html", ".md"]),
+ "html_before_content": attr.label(allow_single_file = [".html", ".md"]),
+ "html_after_content": attr.label(allow_single_file = [".html", ".md"]),
"_zipper": attr.label(default = Label("@bazel_tools//tools/zip:zipper"), cfg = "host", executable = True),
},
outputs = {
diff --git a/rust/private/rustdoc_test.bzl b/rust/private/rustdoc_test.bzl
index 9d40daf..4d2a0f6 100644
--- a/rust/private/rustdoc_test.bzl
+++ b/rust/private/rustdoc_test.bzl
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-load("@io_bazel_rules_rust//rust:private/rustc.bzl", "CrateInfo", "DepInfo", "collect_deps", "get_lib_name")
+load("@io_bazel_rules_rust//rust:private/rustc.bzl", "CrateInfo", "DepInfo", "get_lib_name")
load("@io_bazel_rules_rust//rust:private/utils.bzl", "find_toolchain")
def _rust_doc_test_impl(ctx):
@@ -28,10 +28,10 @@
# Construct rustdoc test command, which will be written to a shell script
# to be executed to run the test.
- ctx.file_action(
+ ctx.actions.write(
output = rust_doc_test,
content = _build_rustdoc_test_script(toolchain, dep_info, crate),
- executable = True,
+ is_executable = True,
)
# The test script compiles the crate and runs it, so it needs both compile and runtime inputs.
@@ -91,7 +91,7 @@
rust_doc_test = rule(
_rust_doc_test_impl,
attrs = {
- "dep": attr.label(mandatory = True, providers=[CrateInfo]),
+ "dep": attr.label(mandatory = True, providers = [CrateInfo]),
},
executable = True,
test = True,