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