1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2021 The Android Open Source Project 2*7594170eSAndroid Build Coastguard Worker# 3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*7594170eSAndroid Build Coastguard Worker# 7*7594170eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*7594170eSAndroid Build Coastguard Worker# 9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*7594170eSAndroid Build Coastguard Worker# limitations under the License. 14*7594170eSAndroid Build Coastguard Worker 15*7594170eSAndroid Build Coastguard Worker# Rules for declaring Android licenses used by a package. 16*7594170eSAndroid Build Coastguard Worker# See: go/license-checking-v2 17*7594170eSAndroid Build Coastguard Worker 18*7594170eSAndroid Build Coastguard Workerload("@rules_license//rules:license.bzl", "license") 19*7594170eSAndroid Build Coastguard Worker 20*7594170eSAndroid Build Coastguard Worker_special_licenses = { 21*7594170eSAndroid Build Coastguard Worker "legacy_by_exception_only": 0, 22*7594170eSAndroid Build Coastguard Worker "legacy_not_a_contribution": 0, 23*7594170eSAndroid Build Coastguard Worker "legacy_not_allowed": 0, 24*7594170eSAndroid Build Coastguard Worker "legacy_notice": 0, 25*7594170eSAndroid Build Coastguard Worker "legacy_permissive": 0, 26*7594170eSAndroid Build Coastguard Worker "legacy_proprietary": 0, 27*7594170eSAndroid Build Coastguard Worker "legacy_reciprocal": 0, 28*7594170eSAndroid Build Coastguard Worker "legacy_restricted": 0, 29*7594170eSAndroid Build Coastguard Worker "legacy_unencumbered": 0, 30*7594170eSAndroid Build Coastguard Worker "legacy_unknown": 0, 31*7594170eSAndroid Build Coastguard Worker} 32*7594170eSAndroid Build Coastguard Worker_spdx_license_prefix = "SPDX-license-identifier-" 33*7594170eSAndroid Build Coastguard Worker_spdx_package = "//build/soong/licenses:" 34*7594170eSAndroid Build Coastguard Worker 35*7594170eSAndroid Build Coastguard Workerdef _remap_license_kind(license_kind): 36*7594170eSAndroid Build Coastguard Worker # In bazel license_kind is a label. 37*7594170eSAndroid Build Coastguard Worker # First, map legacy license kinds. 38*7594170eSAndroid Build Coastguard Worker if license_kind in _special_licenses: 39*7594170eSAndroid Build Coastguard Worker return _spdx_package + license_kind 40*7594170eSAndroid Build Coastguard Worker 41*7594170eSAndroid Build Coastguard Worker # Map SPDX licenses to the ones defined in build/soong/licenses. 42*7594170eSAndroid Build Coastguard Worker if license_kind.startswith(_spdx_license_prefix): 43*7594170eSAndroid Build Coastguard Worker return _spdx_package + license_kind 44*7594170eSAndroid Build Coastguard Worker 45*7594170eSAndroid Build Coastguard Worker # Last resort. 46*7594170eSAndroid Build Coastguard Worker return license_kind 47*7594170eSAndroid Build Coastguard Worker 48*7594170eSAndroid Build Coastguard Worker# buildifier: disable=function-docstring-args 49*7594170eSAndroid Build Coastguard Workerdef android_license( 50*7594170eSAndroid Build Coastguard Worker name, 51*7594170eSAndroid Build Coastguard Worker license_text = "__NO_LICENSE__", # needed as `license` expects it 52*7594170eSAndroid Build Coastguard Worker visibility = ["//visibility:public"], 53*7594170eSAndroid Build Coastguard Worker license_kinds = [], 54*7594170eSAndroid Build Coastguard Worker copyright_notice = None, 55*7594170eSAndroid Build Coastguard Worker package_name = None, 56*7594170eSAndroid Build Coastguard Worker tags = []): 57*7594170eSAndroid Build Coastguard Worker """Wrapper for license rule. 58*7594170eSAndroid Build Coastguard Worker 59*7594170eSAndroid Build Coastguard Worker Args: 60*7594170eSAndroid Build Coastguard Worker name: str target name. 61*7594170eSAndroid Build Coastguard Worker license_text: str Filename of the license file 62*7594170eSAndroid Build Coastguard Worker visibility: list(label) visibility spec 63*7594170eSAndroid Build Coastguard Worker license_kinds: list(text) list of license_kind targets. 64*7594170eSAndroid Build Coastguard Worker copyright_notice: str Copyright notice associated with this package. 65*7594170eSAndroid Build Coastguard Worker package_name : str A human readable name identifying this package. This 66*7594170eSAndroid Build Coastguard Worker may be used to produce an index of OSS packages used by 67*7594170eSAndroid Build Coastguard Worker an application. 68*7594170eSAndroid Build Coastguard Worker tags: list(str) tags applied to the rule 69*7594170eSAndroid Build Coastguard Worker """ 70*7594170eSAndroid Build Coastguard Worker 71*7594170eSAndroid Build Coastguard Worker license( 72*7594170eSAndroid Build Coastguard Worker name = name, 73*7594170eSAndroid Build Coastguard Worker license_kinds = [_remap_license_kind(x) for x in license_kinds], 74*7594170eSAndroid Build Coastguard Worker license_text = license_text, 75*7594170eSAndroid Build Coastguard Worker copyright_notice = copyright_notice, 76*7594170eSAndroid Build Coastguard Worker package_name = package_name, 77*7594170eSAndroid Build Coastguard Worker visibility = visibility, 78*7594170eSAndroid Build Coastguard Worker tags = tags, 79*7594170eSAndroid Build Coastguard Worker ) 80