• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Test cases for license rules: Sample app
2
3load("@rules_license//sample_reports:licenses_used.bzl", "licenses_used")
4load("@rules_python//python:defs.bzl", "py_test")
5
6package(default_visibility = ["//examples:__subpackages__"])
7
8# Note that the app explicitly depends only on a library and some legacy
9# style licensed code.
10cc_binary(
11    name = "an_app",
12    srcs = ["an_app.cc"],
13    deps = [
14        ":level4",
15        # "@rules_license//rules/tests/legacy:another_library_with_legacy_license_clause",
16        # "@rules_license//rules/tests/legacy:library_with_legacy_license_clause",
17    ],
18)
19
20# pointless chain of libraries to show transitive rule gathering, culminating
21# in a diamond dependency on a library under license.
22# Note that the lowest level depends on some third party code
23[
24    genrule(
25        name = "level_%d_src" % level,
26        outs = ["level_%d.cc" % level],
27        # Note to reviewers: This should use string format, but format
28        # is broken when
29        cmd = """cat >$@ <<END
30            #include <iostream>
31            extern void {lower}();
32            void lib_level_{level}() {{
33                std::cout << "This is level {level}" << std::endl;
34                {lower}();
35                }}
36END
37            """.format(
38            level = level,
39            lower = "lib_level_%d" % (level - 1) if level > 0 else "new_lib_func",
40        ),
41    )
42    for level in range(5)
43]
44
45[
46    cc_library(
47        name = "level%d" % level,
48        srcs = [":level_%d.cc" % level],
49        deps = [
50            (":level%d" % (level - 1) if level > 0 else "@rules_license//tests/thrdparty:new_style_lib"),
51        ],
52    )
53    for level in range(5)
54]
55
56licenses_used(
57    name = "an_app_licenses",
58    out = "an_app_licenses.json",
59    deps = [":an_app"],
60)
61
62# Examining the golden file shows that we depend on both kinds of license.
63py_test(
64    name = "an_app_licenses_test",
65    srcs = ["an_app_licenses_test.py"],
66    data = [":an_app_licenses.json"],
67    python_version = "PY3",
68    deps = [
69        "@rules_license//tests:license_test_utils",
70    ],
71)
72