// Copyright 2019 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" "github.com/google/blueprint/proptools" ) func init() { RegisterPackageBuildComponents(InitRegistrationContext) } var PrepareForTestWithPackageModule = FixtureRegisterWithContext(RegisterPackageBuildComponents) // Register the package module type. func RegisterPackageBuildComponents(ctx RegistrationContext) { ctx.RegisterModuleType("package", PackageFactory) } type packageProperties struct { // Specifies the default visibility for all modules defined in this package. Default_visibility []string // Specifies the default license terms for all modules defined in this package. Default_applicable_licenses []string Default_team *string `android:"path"` } type packageModule struct { ModuleBase properties packageProperties } func (p *packageModule) GenerateAndroidBuildActions(ModuleContext) { // Nothing to do. } func (p *packageModule) DepsMutator(ctx BottomUpMutatorContext) { // Add the dependency to do a validity check if p.properties.Default_team != nil { ctx.AddDependency(ctx.Module(), nil, *p.properties.Default_team) } } func (p *packageModule) GenerateBuildActions(ctx blueprint.ModuleContext) { // Nothing to do. } func (p *packageModule) qualifiedModuleId(ctx BaseModuleContext) qualifiedModuleName { // Override to create a package id. return newPackageId(ctx.ModuleDir()) } func PackageFactory() Module { module := &packageModule{} module.AddProperties(&module.properties) // The name is the relative path from build root to the directory containing this // module. Set that name at the earliest possible moment that information is available // which is in a LoadHook. AddLoadHook(module, func(ctx LoadHookContext) { module.nameProperties.Name = proptools.StringPtr("//" + ctx.ModuleDir()) }) // The default_visibility property needs to be checked and parsed by the visibility module during // its checking and parsing phases so make it the primary visibility property. setPrimaryVisibilityProperty(module, "default_visibility", &module.properties.Default_visibility) // The default_applicable_licenses property needs to be checked and parsed by the licenses module during // its checking and parsing phases so make it the primary licenses property. setPrimaryLicensesProperty(module, "default_applicable_licenses", &module.properties.Default_applicable_licenses) return module }