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