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