Split *ModuleContext out of module.go
Move EarlyModuleContext, BaseModuleContext and ModuleContext out of module.go and into early_module_context, base_module_context and module_context.go respectively. Test: builds Change-Id: I52e6eb1589d1478233c1c55d770b395a16eaa1a3
This commit is contained in:
169
android/early_module_context.go
Normal file
169
android/early_module_context.go
Normal file
@@ -0,0 +1,169 @@
|
||||
// Copyright 2015 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"
|
||||
"os"
|
||||
"text/scanner"
|
||||
)
|
||||
|
||||
// EarlyModuleContext provides methods that can be called early, as soon as the properties have
|
||||
// been parsed into the module and before any mutators have run.
|
||||
type EarlyModuleContext interface {
|
||||
// Module returns the current module as a Module. It should rarely be necessary, as the module already has a
|
||||
// reference to itself.
|
||||
Module() Module
|
||||
|
||||
// ModuleName returns the name of the module. This is generally the value that was returned by Module.Name() when
|
||||
// the module was created, but may have been modified by calls to BaseMutatorContext.Rename.
|
||||
ModuleName() string
|
||||
|
||||
// ModuleDir returns the path to the directory that contains the definition of the module.
|
||||
ModuleDir() string
|
||||
|
||||
// ModuleType returns the name of the module type that was used to create the module, as specified in
|
||||
// RegisterModuleType.
|
||||
ModuleType() string
|
||||
|
||||
// BlueprintFile returns the name of the blueprint file that contains the definition of this
|
||||
// module.
|
||||
BlueprintsFile() string
|
||||
|
||||
// ContainsProperty returns true if the specified property name was set in the module definition.
|
||||
ContainsProperty(name string) bool
|
||||
|
||||
// Errorf reports an error at the specified position of the module definition file.
|
||||
Errorf(pos scanner.Position, fmt string, args ...interface{})
|
||||
|
||||
// ModuleErrorf reports an error at the line number of the module type in the module definition.
|
||||
ModuleErrorf(fmt string, args ...interface{})
|
||||
|
||||
// PropertyErrorf reports an error at the line number of a property in the module definition.
|
||||
PropertyErrorf(property, fmt string, args ...interface{})
|
||||
|
||||
// Failed returns true if any errors have been reported. In most cases the module can continue with generating
|
||||
// build rules after an error, allowing it to report additional errors in a single run, but in cases where the error
|
||||
// has prevented the module from creating necessary data it can return early when Failed returns true.
|
||||
Failed() bool
|
||||
|
||||
// AddNinjaFileDeps adds dependencies on the specified files to the rule that creates the ninja manifest. The
|
||||
// primary builder will be rerun whenever the specified files are modified.
|
||||
AddNinjaFileDeps(deps ...string)
|
||||
|
||||
DeviceSpecific() bool
|
||||
SocSpecific() bool
|
||||
ProductSpecific() bool
|
||||
SystemExtSpecific() bool
|
||||
Platform() bool
|
||||
|
||||
Config() Config
|
||||
DeviceConfig() DeviceConfig
|
||||
|
||||
// Deprecated: use Config()
|
||||
AConfig() Config
|
||||
|
||||
// GlobWithDeps returns a list of files that match the specified pattern but do not match any
|
||||
// of the patterns in excludes. It also adds efficient dependencies to rerun the primary
|
||||
// builder whenever a file matching the pattern as added or removed, without rerunning if a
|
||||
// file that does not match the pattern is added to a searched directory.
|
||||
GlobWithDeps(pattern string, excludes []string) ([]string, error)
|
||||
|
||||
Glob(globPattern string, excludes []string) Paths
|
||||
GlobFiles(globPattern string, excludes []string) Paths
|
||||
IsSymlink(path Path) bool
|
||||
Readlink(path Path) string
|
||||
|
||||
// Namespace returns the Namespace object provided by the NameInterface set by Context.SetNameInterface, or the
|
||||
// default SimpleNameInterface if Context.SetNameInterface was not called.
|
||||
Namespace() *Namespace
|
||||
}
|
||||
|
||||
// Deprecated: use EarlyModuleContext instead
|
||||
type BaseContext interface {
|
||||
EarlyModuleContext
|
||||
}
|
||||
|
||||
type earlyModuleContext struct {
|
||||
blueprint.EarlyModuleContext
|
||||
|
||||
kind moduleKind
|
||||
config Config
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) Glob(globPattern string, excludes []string) Paths {
|
||||
return Glob(e, globPattern, excludes)
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) GlobFiles(globPattern string, excludes []string) Paths {
|
||||
return GlobFiles(e, globPattern, excludes)
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) IsSymlink(path Path) bool {
|
||||
fileInfo, err := e.config.fs.Lstat(path.String())
|
||||
if err != nil {
|
||||
e.ModuleErrorf("os.Lstat(%q) failed: %s", path.String(), err)
|
||||
}
|
||||
return fileInfo.Mode()&os.ModeSymlink == os.ModeSymlink
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) Readlink(path Path) string {
|
||||
dest, err := e.config.fs.Readlink(path.String())
|
||||
if err != nil {
|
||||
e.ModuleErrorf("os.Readlink(%q) failed: %s", path.String(), err)
|
||||
}
|
||||
return dest
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) Module() Module {
|
||||
module, _ := e.EarlyModuleContext.Module().(Module)
|
||||
return module
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) Config() Config {
|
||||
return e.EarlyModuleContext.Config().(Config)
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) AConfig() Config {
|
||||
return e.config
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) DeviceConfig() DeviceConfig {
|
||||
return DeviceConfig{e.config.deviceConfig}
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) Platform() bool {
|
||||
return e.kind == platformModule
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) DeviceSpecific() bool {
|
||||
return e.kind == deviceSpecificModule
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) SocSpecific() bool {
|
||||
return e.kind == socSpecificModule
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) ProductSpecific() bool {
|
||||
return e.kind == productSpecificModule
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) SystemExtSpecific() bool {
|
||||
return e.kind == systemExtSpecificModule
|
||||
}
|
||||
|
||||
func (e *earlyModuleContext) Namespace() *Namespace {
|
||||
return e.EarlyModuleContext.Namespace().(*Namespace)
|
||||
}
|
Reference in New Issue
Block a user