1*9e94795aSAndroid Build Coastguard Worker// Copyright 2021 Google LLC 2*9e94795aSAndroid Build Coastguard Worker// 3*9e94795aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*9e94795aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*9e94795aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*9e94795aSAndroid Build Coastguard Worker// 7*9e94795aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*9e94795aSAndroid Build Coastguard Worker// 9*9e94795aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*9e94795aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*9e94795aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9e94795aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*9e94795aSAndroid Build Coastguard Worker// limitations under the License. 14*9e94795aSAndroid Build Coastguard Worker 15*9e94795aSAndroid Build Coastguard Workerpackage compliance 16*9e94795aSAndroid Build Coastguard Worker 17*9e94795aSAndroid Build Coastguard Workerimport ( 18*9e94795aSAndroid Build Coastguard Worker "fmt" 19*9e94795aSAndroid Build Coastguard Worker) 20*9e94795aSAndroid Build Coastguard Worker 21*9e94795aSAndroid Build Coastguard Worker// LicenseCondition identifies a recognized license condition by setting the 22*9e94795aSAndroid Build Coastguard Worker// corresponding bit. 23*9e94795aSAndroid Build Coastguard Workertype LicenseCondition uint16 24*9e94795aSAndroid Build Coastguard Worker 25*9e94795aSAndroid Build Coastguard Worker// LicenseConditionMask is a bitmask for the recognized license conditions. 26*9e94795aSAndroid Build Coastguard Workerconst LicenseConditionMask = LicenseCondition(0x1ff) 27*9e94795aSAndroid Build Coastguard Worker 28*9e94795aSAndroid Build Coastguard Workerconst ( 29*9e94795aSAndroid Build Coastguard Worker // UnencumberedCondition identifies public domain or public domain- 30*9e94795aSAndroid Build Coastguard Worker // like license that disclaims copyright. 31*9e94795aSAndroid Build Coastguard Worker UnencumberedCondition = LicenseCondition(0x0001) 32*9e94795aSAndroid Build Coastguard Worker // PermissiveCondition identifies a license without notice or other 33*9e94795aSAndroid Build Coastguard Worker // significant requirements. 34*9e94795aSAndroid Build Coastguard Worker PermissiveCondition = LicenseCondition(0x0002) 35*9e94795aSAndroid Build Coastguard Worker // NoticeCondition identifies a typical open-source license with only 36*9e94795aSAndroid Build Coastguard Worker // notice or attribution requirements. 37*9e94795aSAndroid Build Coastguard Worker NoticeCondition = LicenseCondition(0x0004) 38*9e94795aSAndroid Build Coastguard Worker // ReciprocalCondition identifies a license with requirement to share 39*9e94795aSAndroid Build Coastguard Worker // the module's source only. 40*9e94795aSAndroid Build Coastguard Worker ReciprocalCondition = LicenseCondition(0x0008) 41*9e94795aSAndroid Build Coastguard Worker // RestrictedCondition identifies a license with requirement to share 42*9e94795aSAndroid Build Coastguard Worker // all source code linked to the module's source. 43*9e94795aSAndroid Build Coastguard Worker RestrictedCondition = LicenseCondition(0x0010) 44*9e94795aSAndroid Build Coastguard Worker // WeaklyRestrictedCondition identifies a RestrictedCondition waived 45*9e94795aSAndroid Build Coastguard Worker // for dynamic linking. 46*9e94795aSAndroid Build Coastguard Worker WeaklyRestrictedCondition = LicenseCondition(0x0020) 47*9e94795aSAndroid Build Coastguard Worker // ProprietaryCondition identifies a license with source privacy 48*9e94795aSAndroid Build Coastguard Worker // requirements. 49*9e94795aSAndroid Build Coastguard Worker ProprietaryCondition = LicenseCondition(0x0040) 50*9e94795aSAndroid Build Coastguard Worker // ByExceptionOnly identifies a license where policy requires product 51*9e94795aSAndroid Build Coastguard Worker // counsel review prior to use. 52*9e94795aSAndroid Build Coastguard Worker ByExceptionOnlyCondition = LicenseCondition(0x0080) 53*9e94795aSAndroid Build Coastguard Worker // NotAllowedCondition identifies a license with onerous conditions 54*9e94795aSAndroid Build Coastguard Worker // where policy prohibits use. 55*9e94795aSAndroid Build Coastguard Worker NotAllowedCondition = LicenseCondition(0x0100) 56*9e94795aSAndroid Build Coastguard Worker) 57*9e94795aSAndroid Build Coastguard Worker 58*9e94795aSAndroid Build Coastguard Workervar ( 59*9e94795aSAndroid Build Coastguard Worker // RecognizedConditionNames maps condition strings to LicenseCondition. 60*9e94795aSAndroid Build Coastguard Worker RecognizedConditionNames = map[string]LicenseCondition{ 61*9e94795aSAndroid Build Coastguard Worker "unencumbered": UnencumberedCondition, 62*9e94795aSAndroid Build Coastguard Worker "permissive": PermissiveCondition, 63*9e94795aSAndroid Build Coastguard Worker "notice": NoticeCondition, 64*9e94795aSAndroid Build Coastguard Worker "reciprocal": ReciprocalCondition, 65*9e94795aSAndroid Build Coastguard Worker "restricted": RestrictedCondition, 66*9e94795aSAndroid Build Coastguard Worker "restricted_if_statically_linked": WeaklyRestrictedCondition, 67*9e94795aSAndroid Build Coastguard Worker "proprietary": ProprietaryCondition, 68*9e94795aSAndroid Build Coastguard Worker "by_exception_only": ByExceptionOnlyCondition, 69*9e94795aSAndroid Build Coastguard Worker "not_allowed": NotAllowedCondition, 70*9e94795aSAndroid Build Coastguard Worker } 71*9e94795aSAndroid Build Coastguard Worker) 72*9e94795aSAndroid Build Coastguard Worker 73*9e94795aSAndroid Build Coastguard Worker// Name returns the condition string corresponding to the LicenseCondition. 74*9e94795aSAndroid Build Coastguard Workerfunc (lc LicenseCondition) Name() string { 75*9e94795aSAndroid Build Coastguard Worker switch lc { 76*9e94795aSAndroid Build Coastguard Worker case UnencumberedCondition: 77*9e94795aSAndroid Build Coastguard Worker return "unencumbered" 78*9e94795aSAndroid Build Coastguard Worker case PermissiveCondition: 79*9e94795aSAndroid Build Coastguard Worker return "permissive" 80*9e94795aSAndroid Build Coastguard Worker case NoticeCondition: 81*9e94795aSAndroid Build Coastguard Worker return "notice" 82*9e94795aSAndroid Build Coastguard Worker case ReciprocalCondition: 83*9e94795aSAndroid Build Coastguard Worker return "reciprocal" 84*9e94795aSAndroid Build Coastguard Worker case RestrictedCondition: 85*9e94795aSAndroid Build Coastguard Worker return "restricted" 86*9e94795aSAndroid Build Coastguard Worker case WeaklyRestrictedCondition: 87*9e94795aSAndroid Build Coastguard Worker return "restricted_if_statically_linked" 88*9e94795aSAndroid Build Coastguard Worker case ProprietaryCondition: 89*9e94795aSAndroid Build Coastguard Worker return "proprietary" 90*9e94795aSAndroid Build Coastguard Worker case ByExceptionOnlyCondition: 91*9e94795aSAndroid Build Coastguard Worker return "by_exception_only" 92*9e94795aSAndroid Build Coastguard Worker case NotAllowedCondition: 93*9e94795aSAndroid Build Coastguard Worker return "not_allowed" 94*9e94795aSAndroid Build Coastguard Worker } 95*9e94795aSAndroid Build Coastguard Worker panic(fmt.Errorf("unrecognized license condition: %#v", lc)) 96*9e94795aSAndroid Build Coastguard Worker} 97