diff options
Diffstat (limited to 'extras/bindata.bzl')
-rw-r--r-- | extras/bindata.bzl | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/extras/bindata.bzl b/extras/bindata.bzl new file mode 100644 index 00000000..40c119f9 --- /dev/null +++ b/extras/bindata.bzl @@ -0,0 +1,87 @@ +# Copyright 2018 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""bindata.bzl provides the bindata rule for embedding data in .go files""" + +load( + "//go:def.bzl", + "go_context", +) +load( + "//go/private:go_toolchain.bzl", + "GO_TOOLCHAIN", +) + +def _bindata_impl(ctx): + print("Embedding is now better handled by using rules_go's built-in embedding functionality (https://github.com/bazelbuild/rules_go/blob/master/docs/go/core/rules.md#go_library-embedsrcs). The `bindata` rule is deprecated and will be removed in rules_go version 0.39.") + go = go_context(ctx) + out = go.declare_file(go, ext = ".go") + arguments = ctx.actions.args() + arguments.add_all([ + "-o", + out, + "-pkg", + ctx.attr.package, + "-prefix", + ctx.label.package, + ]) + if not ctx.attr.compress: + arguments.add("-nocompress") + if not ctx.attr.metadata: + arguments.add("-nometadata") + if not ctx.attr.memcopy: + arguments.add("-nomemcopy") + if not ctx.attr.modtime: + arguments.add_all(["-modtime", "0"]) + if ctx.attr.extra_args: + arguments.add_all(ctx.attr.extra_args) + srcs = [f.path for f in ctx.files.srcs] + if ctx.attr.strip_external and any([f.startswith("external/") for f in srcs]): + arguments.add("-prefix", ctx.label.workspace_root + "/" + ctx.label.package) + arguments.add_all(srcs) + ctx.actions.run( + inputs = ctx.files.srcs, + outputs = [out], + mnemonic = "GoBindata", + executable = ctx.executable._bindata, + arguments = [arguments], + ) + return [ + DefaultInfo( + files = depset([out]), + ), + ] + +bindata = rule( + implementation = _bindata_impl, + attrs = { + "srcs": attr.label_list(allow_files = True), + "package": attr.string(mandatory = True), + "compress": attr.bool(default = True), + "metadata": attr.bool(default = False), + "memcopy": attr.bool(default = True), + "modtime": attr.bool(default = False), + "strip_external": attr.bool(default = False), + "extra_args": attr.string_list(), + "_bindata": attr.label( + executable = True, + cfg = "exec", + default = "@com_github_kevinburke_go_bindata//go-bindata:go-bindata", + ), + "_go_context_data": attr.label( + default = "//:go_context_data", + ), + }, + toolchains = [GO_TOOLCHAIN], +) |