
Add a test that ensures that the checked in version is up to date. The license generation is tied closely to the Bazel build and the layout of the Gerrit source tree. By checking in the license files, alternative builds (such as the Google internal build) do not have to replicate the license generation step, or rerun the upstream Gerrit bazel build. Change-Id: I500717e38de6c337ce552815e46562648df48b2f
58 lines
2.2 KiB
Python
58 lines
2.2 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 + ".gen.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],
|
|
)
|