gerrit/tools/bzl/license.bzl
David Ostrovsky a9bb94b9bc Bazel: Replace PACKAGE_NAME constant with package_name() function
PACKAGE_NAME was deprecated in favor of package_name() function and is
going to be removed in future Bazel releases. Moreover Bazel is trying
to set --incompatible_package_name_is_a_function=true per default to
enforce Bazel users to stop using it: [1].

[1] https://github.com/bazelbuild/bazel/issues/5827

Change-Id: I4d1a6ccbeae611fdd0e9c1e9fdd89b6dd1294f36
2018-09-11 07:58:12 +02:00

58 lines
2.1 KiB
Python

def normalize_target_name(target):
return target.replace("//", "").replace("/", "__").replace(":", "___")
def license_map(name, targets = [], opts = [], **kwargs):
"""Generate XML for all targets that depend directly on a LICENSE file"""
xmls = []
tools = ["//tools/bzl:license-map.py", "//lib:all-licenses"]
for target in targets:
subname = name + "_" + normalize_target_name(target) + ".xml"
xmls.append("$(location :%s)" % subname)
tools.append(subname)
native.genquery(
name = subname,
scope = [target],
# Find everything that depends on a license file, but remove
# the license files themselves from this list.
expression = 'rdeps(%s, filter("//lib:LICENSE.*", deps(%s)),1) - filter("//lib:LICENSE.*", deps(%s))' % (target, target, target),
# We are interested in the edges of the graph ({java_library,
# license-file} tuples). 'query' provides this in the XML output.
opts = ["--output=xml"],
)
# post process the XML into our favorite format.
native.genrule(
name = "gen_license_txt_" + name,
cmd = "python $(location //tools/bzl:license-map.py) %s %s > $@" % (" ".join(opts), " ".join(xmls)),
outs = [name + ".txt"],
tools = tools,
**kwargs
)
def license_test(name, target):
"""Make sure a target doesn't depend on DO_NOT_DISTRIBUTE license"""
txt = name + "-forbidden.txt"
# fully qualify target name.
if target[0] not in ":/":
target = ":" + target
if target[0] != "/":
target = "//" + native.package_name() + target
forbidden = "//lib:LICENSE-DO_NOT_DISTRIBUTE"
native.genquery(
name = txt,
scope = [target, forbidden],
# Find everything that depends on a license file, but remove
# the license files themselves from this list.
expression = 'rdeps(%s, "%s", 1) - rdeps(%s, "%s", 0)' % (target, forbidden, target, forbidden),
)
native.sh_test(
name = name,
srcs = ["//tools/bzl:test_license.sh"],
args = ["$(location :%s)" % txt],
data = [txt],
)