xref: /aosp_15_r20/build/make/tools/compliance/condition.go (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
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