ec0836af3a
Effective_license_text contains paths to files that are copied from one module to another and so need to be converted to Paths within the context of the owning module as the paths are relative to the owning module's directory. The previous code did convert the license_text property to paths but converted it back to strings again which was confusing and does not follow the normal pattern. Bug: 181569894 Test: m nothing Change-Id: Iea09ee7f3de1187a2c3e41455ca83b0233d904b2
94 lines
3 KiB
Go
94 lines
3 KiB
Go
// Copyright 2020 Google Inc. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package android
|
|
|
|
import (
|
|
"github.com/google/blueprint"
|
|
)
|
|
|
|
type licenseKindDependencyTag struct {
|
|
blueprint.BaseDependencyTag
|
|
}
|
|
|
|
var (
|
|
licenseKindTag = licenseKindDependencyTag{}
|
|
)
|
|
|
|
func init() {
|
|
RegisterLicenseBuildComponents(InitRegistrationContext)
|
|
}
|
|
|
|
// Register the license module type.
|
|
func RegisterLicenseBuildComponents(ctx RegistrationContext) {
|
|
ctx.RegisterModuleType("license", LicenseFactory)
|
|
}
|
|
|
|
type licenseProperties struct {
|
|
// Specifies the kinds of license that apply.
|
|
License_kinds []string
|
|
// Specifies a short copyright notice to use for the license.
|
|
Copyright_notice *string
|
|
// Specifies the path or label for the text of the license.
|
|
License_text []string `android:"path"`
|
|
// Specifies the package name to which the license applies.
|
|
Package_name *string
|
|
// Specifies where this license can be used
|
|
Visibility []string
|
|
}
|
|
|
|
type licenseModule struct {
|
|
ModuleBase
|
|
DefaultableModuleBase
|
|
SdkBase
|
|
|
|
properties licenseProperties
|
|
}
|
|
|
|
func (m *licenseModule) DepsMutator(ctx BottomUpMutatorContext) {
|
|
ctx.AddVariationDependencies(nil, licenseKindTag, m.properties.License_kinds...)
|
|
}
|
|
|
|
func (m *licenseModule) GenerateAndroidBuildActions(ctx ModuleContext) {
|
|
// license modules have no licenses, but license_kinds must refer to license_kind modules
|
|
mergeStringProps(&m.base().commonProperties.Effective_licenses, ctx.ModuleName())
|
|
mergePathProps(&m.base().commonProperties.Effective_license_text, PathsForModuleSrc(ctx, m.properties.License_text)...)
|
|
for _, module := range ctx.GetDirectDepsWithTag(licenseKindTag) {
|
|
if lk, ok := module.(*licenseKindModule); ok {
|
|
mergeStringProps(&m.base().commonProperties.Effective_license_conditions, lk.properties.Conditions...)
|
|
mergeStringProps(&m.base().commonProperties.Effective_license_kinds, ctx.OtherModuleName(module))
|
|
} else {
|
|
ctx.ModuleErrorf("license_kinds property %q is not a license_kind module", ctx.OtherModuleName(module))
|
|
}
|
|
}
|
|
}
|
|
|
|
func LicenseFactory() Module {
|
|
module := &licenseModule{}
|
|
|
|
base := module.base()
|
|
module.AddProperties(&base.nameProperties, &module.properties)
|
|
|
|
base.generalProperties = module.GetProperties()
|
|
base.customizableProperties = module.GetProperties()
|
|
|
|
// The visibility property needs to be checked and parsed by the visibility module.
|
|
setPrimaryVisibilityProperty(module, "visibility", &module.properties.Visibility)
|
|
|
|
InitSdkAwareModule(module)
|
|
initAndroidModuleBase(module)
|
|
InitDefaultableModule(module)
|
|
|
|
return module
|
|
}
|