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