aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2019-03-03 17:36:08 -0800
committerColin Cross <ccross@android.com>2019-03-03 17:36:33 -0800
commitd8000d21a919a4087f23d8a2df97a5f5ad67679d (patch)
tree4bcd21ef263fa06abceff63d69b3a86726c6bf94
parent2a80a36834c1b53dec5717bd3815dd1169a0f959 (diff)
parent17a0b9644053af3d227672901d662daf8b9f005c (diff)
downloadandroid_build_blueprint-d8000d21a919a4087f23d8a2df97a5f5ad67679d.tar.gz
android_build_blueprint-d8000d21a919a4087f23d8a2df97a5f5ad67679d.tar.bz2
android_build_blueprint-d8000d21a919a4087f23d8a2df97a5f5ad67679d.zip
Merge remote-tracking branch 'aosp/upstream' into master
* aosp/upstream: Add more OtherModule* methods Run go 1.11 and go 1.12 in travis Support go 1.12 Test: m checkbuild Change-Id: I9ed244b6c1a928590fb8220fb00cc8b1d4ef8c60
-rw-r--r--.travis.yml2
-rw-r--r--module_ctx.go26
-rw-r--r--package_ctx.go30
3 files changed, 40 insertions, 18 deletions
diff --git a/.travis.yml b/.travis.yml
index 3397bfd..6abd686 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,6 +3,8 @@ language: go
go:
- 1.9
- "1.10"
+ - "1.11"
+ - "1.12"
cache:
directories:
diff --git a/module_ctx.go b/module_ctx.go
index 9dbf43d..d127c0e 100644
--- a/module_ctx.go
+++ b/module_ctx.go
@@ -123,6 +123,7 @@ type DynamicDependerModule interface {
type BaseModuleContext interface {
ModuleName() string
ModuleDir() string
+ ModuleType() string
Config() interface{}
ContainsProperty(name string) bool
@@ -154,6 +155,9 @@ type ModuleContext interface {
BaseModuleContext
OtherModuleName(m Module) string
+ OtherModuleDir(m Module) string
+ OtherModuleSubDir(m Module) string
+ OtherModuleType(m Module) string
OtherModuleErrorf(m Module, fmt string, args ...interface{})
OtherModuleDependencyTag(m Module) DependencyTag
@@ -199,6 +203,10 @@ func (d *baseModuleContext) ModuleName() string {
return d.module.Name()
}
+func (d *baseModuleContext) ModuleType() string {
+ return d.module.typeName
+}
+
func (d *baseModuleContext) ContainsProperty(name string) bool {
_, ok := d.module.propertyPos[name]
return ok
@@ -291,6 +299,21 @@ func (m *baseModuleContext) OtherModuleName(logicModule Module) string {
return module.Name()
}
+func (m *baseModuleContext) OtherModuleDir(logicModule Module) string {
+ module := m.context.moduleInfo[logicModule]
+ return filepath.Dir(module.relBlueprintsFile)
+}
+
+func (m *baseModuleContext) OtherModuleSubDir(logicModule Module) string {
+ module := m.context.moduleInfo[logicModule]
+ return module.variantName
+}
+
+func (m *baseModuleContext) OtherModuleType(logicModule Module) string {
+ module := m.context.moduleInfo[logicModule]
+ return module.typeName
+}
+
func (m *baseModuleContext) OtherModuleErrorf(logicModule Module, format string,
args ...interface{}) {
@@ -559,6 +582,9 @@ type TopDownMutatorContext interface {
baseMutatorContext
OtherModuleName(m Module) string
+ OtherModuleDir(m Module) string
+ OtherModuleSubDir(m Module) string
+ OtherModuleType(m Module) string
OtherModuleErrorf(m Module, fmt string, args ...interface{})
OtherModuleDependencyTag(m Module) DependencyTag
diff --git a/package_ctx.go b/package_ctx.go
index 0c64e45..e0a03c8 100644
--- a/package_ctx.go
+++ b/package_ctx.go
@@ -18,6 +18,7 @@ import (
"errors"
"fmt"
"reflect"
+ "regexp"
"runtime"
"strings"
"sync"
@@ -137,12 +138,17 @@ func checkCalledFromInit() {
panic("not called from an init func")
}
- if funcName == "init" || strings.HasPrefix(funcName, "init·") {
+ if funcName == "init" || strings.HasPrefix(funcName, "init·") ||
+ funcName == "init.ializers" || strings.HasPrefix(funcName, "init.") {
return
}
}
}
+// A regex to find a package path within a function name. It finds the shortest string that is
+// followed by '.' and doesn't have any '/'s left.
+var pkgPathRe = regexp.MustCompile(`^(.*?)\.([^/]+)$`)
+
// callerName returns the package path and function name of the calling
// function. The skip argument has the same meaning as the skip argument of
// runtime.Callers.
@@ -153,25 +159,13 @@ func callerName(skip int) (pkgPath, funcName string, ok bool) {
return "", "", false
}
- f := runtime.FuncForPC(pc[0])
- fullName := f.Name()
-
- lastDotIndex := strings.LastIndex(fullName, ".")
- if lastDotIndex == -1 {
- panic("unable to distinguish function name from package")
- }
-
- if fullName[lastDotIndex-1] == ')' {
- // The caller is a method on some type, so it's name looks like
- // "pkg/path.(type).method". We need to go back one dot farther to get
- // to the package name.
- lastDotIndex = strings.LastIndex(fullName[:lastDotIndex], ".")
+ f := runtime.FuncForPC(pc[0]).Name()
+ s := pkgPathRe.FindStringSubmatch(f)
+ if len(s) < 3 {
+ panic(fmt.Errorf("failed to extract package path and function name from %q", f))
}
- pkgPath = fullName[:lastDotIndex]
- funcName = fullName[lastDotIndex+1:]
- ok = true
- return
+ return s[1], s[2], true
}
// pkgPathToName makes a Ninja-friendly name out of a Go package name by