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"""Providers for transitively gathering all license and package_info targets. 15*f578df4fSJingwen Chen 16*f578df4fSJingwen ChenWarning: This is private to the aspect that walks the tree. The API is subject 17*f578df4fSJingwen Chento change at any release. 18*f578df4fSJingwen Chen""" 19*f578df4fSJingwen Chen 20*f578df4fSJingwen ChenLicensedTargetInfo = provider( 21*f578df4fSJingwen Chen doc = """Lists the licenses directly used by a single target.""", 22*f578df4fSJingwen Chen fields = { 23*f578df4fSJingwen Chen "target_under_license": "Label: The target label", 24*f578df4fSJingwen Chen "licenses": "list(label of a license rule)", 25*f578df4fSJingwen Chen }, 26*f578df4fSJingwen Chen) 27*f578df4fSJingwen Chen 28*f578df4fSJingwen Chendef licenses_info(): 29*f578df4fSJingwen Chen return provider( 30*f578df4fSJingwen Chen doc = """The transitive set of licenses used by a target.""", 31*f578df4fSJingwen Chen fields = { 32*f578df4fSJingwen Chen "target_under_license": "Label: The top level target label.", 33*f578df4fSJingwen Chen "deps": "depset(LicensedTargetInfo): The transitive list of dependencies that have licenses.", 34*f578df4fSJingwen Chen "licenses": "depset(LicenseInfo)", 35*f578df4fSJingwen Chen "traces": "list(string) - diagnostic for tracing a dependency relationship to a target.", 36*f578df4fSJingwen Chen }, 37*f578df4fSJingwen Chen ) 38*f578df4fSJingwen Chen 39*f578df4fSJingwen Chen# This provider is used by the aspect that is used by manifest() rules. 40*f578df4fSJingwen ChenTransitiveLicensesInfo = licenses_info() 41*f578df4fSJingwen Chen 42*f578df4fSJingwen ChenTransitiveMetadataInfo = provider( 43*f578df4fSJingwen Chen doc = """The transitive set of licenses used by a target.""", 44*f578df4fSJingwen Chen fields = { 45*f578df4fSJingwen Chen "top_level_target": "Label: The top level target label we are examining.", 46*f578df4fSJingwen Chen "other_metadata": "depset(ExperimentalMetatdataInfo)", 47*f578df4fSJingwen Chen "licenses": "depset(LicenseInfo)", 48*f578df4fSJingwen Chen "package_info": "depset(PackageInfo)", 49*f578df4fSJingwen Chen 50*f578df4fSJingwen Chen "target_under_license": "Label: A target which will be associated with some licenses.", 51*f578df4fSJingwen Chen "deps": "depset(LicensedTargetInfo): The transitive list of dependencies that have licenses.", 52*f578df4fSJingwen Chen "traces": "list(string) - diagnostic for tracing a dependency relationship to a target.", 53*f578df4fSJingwen Chen }, 54*f578df4fSJingwen Chen) 55