Previously, the processing of the license module was done in the licensesPropertyFlattener method which is called for all modules before their GenerateAndroidBuildActions method is called. This change moves the processing into the license module's GenerateAndroidBuildActions method which was previously empty to match the normal practice. Bug: 181569894 Test: m nothing Change-Id: I3736879bfa4b4d1f4e2b35770852a02d09b3db83
95 lines
3.0 KiB
Go
95 lines
3.0 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
|
|
mergeProps(&m.base().commonProperties.Effective_licenses, ctx.ModuleName())
|
|
mergeProps(&m.base().commonProperties.Effective_license_text, PathsForModuleSrc(ctx, m.properties.License_text).Strings()...)
|
|
for _, module := range ctx.GetDirectDepsWithTag(licenseKindTag) {
|
|
if lk, ok := module.(*licenseKindModule); ok {
|
|
mergeProps(&m.base().commonProperties.Effective_license_conditions, lk.properties.Conditions...)
|
|
mergeProps(&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
|
|
}
|