1*f578df4fSJingwen Chen# Copyright 2022 Google LLC 2*f578df4fSJingwen Chen# 3*f578df4fSJingwen Chen# Licensed under the Apache License, Version 2.0 (the "License"); 4*f578df4fSJingwen Chen# you may not use this file except in compliance with the License. 5*f578df4fSJingwen Chen# You may obtain a copy of the License at 6*f578df4fSJingwen Chen# 7*f578df4fSJingwen Chen# https://www.apache.org/licenses/LICENSE-2.0 8*f578df4fSJingwen Chen# 9*f578df4fSJingwen Chen# Unless required by applicable law or agreed to in writing, software 10*f578df4fSJingwen Chen# distributed under the License is distributed on an "AS IS" BASIS, 11*f578df4fSJingwen Chen# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*f578df4fSJingwen Chen# See the License for the specific language governing permissions and 13*f578df4fSJingwen Chen# limitations under the License. 14*f578df4fSJingwen Chen"""Proof of concept. License restriction.""" 15*f578df4fSJingwen Chen 16*f578df4fSJingwen Chenload("@rules_license//rules:providers.bzl", "LicenseKindInfo") 17*f578df4fSJingwen Chen 18*f578df4fSJingwen Chen# 19*f578df4fSJingwen Chen# License Kind: The declaration of a well known category of license, for example, 20*f578df4fSJingwen Chen# Apache, MIT, LGPL v2. An organization may also declare its own license kinds 21*f578df4fSJingwen Chen# that it may user privately. 22*f578df4fSJingwen Chen# 23*f578df4fSJingwen Chen 24*f578df4fSJingwen Chendef _license_kind_impl(ctx): 25*f578df4fSJingwen Chen provider = LicenseKindInfo( 26*f578df4fSJingwen Chen name = ctx.attr.name, 27*f578df4fSJingwen Chen label = "@%s//%s:%s" % ( 28*f578df4fSJingwen Chen ctx.label.workspace_name, 29*f578df4fSJingwen Chen ctx.label.package, 30*f578df4fSJingwen Chen ctx.label.name, 31*f578df4fSJingwen Chen ), 32*f578df4fSJingwen Chen long_name = ctx.attr.long_name, 33*f578df4fSJingwen Chen conditions = ctx.attr.conditions, 34*f578df4fSJingwen Chen ) 35*f578df4fSJingwen Chen return [provider] 36*f578df4fSJingwen Chen 37*f578df4fSJingwen Chen_license_kind = rule( 38*f578df4fSJingwen Chen implementation = _license_kind_impl, 39*f578df4fSJingwen Chen attrs = { 40*f578df4fSJingwen Chen "conditions": attr.string_list( 41*f578df4fSJingwen Chen doc = "Conditions to be met when using software under this license." + 42*f578df4fSJingwen Chen " Conditions are defined by the organization using this license.", 43*f578df4fSJingwen Chen mandatory = True, 44*f578df4fSJingwen Chen ), 45*f578df4fSJingwen Chen "canonical_text": attr.label( 46*f578df4fSJingwen Chen doc = "File containing the canonical text for this license. Must be UTF-8 encoded.", 47*f578df4fSJingwen Chen allow_single_file = True, 48*f578df4fSJingwen Chen ), 49*f578df4fSJingwen Chen "long_name": attr.string(doc = "Human readable long name of license."), 50*f578df4fSJingwen Chen "url": attr.string(doc = "URL pointing to canonical license definition"), 51*f578df4fSJingwen Chen }, 52*f578df4fSJingwen Chen) 53*f578df4fSJingwen Chen 54*f578df4fSJingwen Chendef license_kind(name, **kwargs): 55*f578df4fSJingwen Chen """Wrapper for license_kind. 56*f578df4fSJingwen Chen 57*f578df4fSJingwen Chen @wraps(_license_kind) 58*f578df4fSJingwen Chen """ 59*f578df4fSJingwen Chen if "conditions" not in kwargs: 60*f578df4fSJingwen Chen kwargs["conditions"] = [] 61*f578df4fSJingwen Chen if "long_name" not in kwargs: 62*f578df4fSJingwen Chen kwargs["long_name"] = name 63*f578df4fSJingwen Chen _license_kind( 64*f578df4fSJingwen Chen name = name, 65*f578df4fSJingwen Chen applicable_licenses = [], 66*f578df4fSJingwen Chen **kwargs 67*f578df4fSJingwen Chen ) 68