aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2019-06-14 11:26:09 -0700
committerMichael Bestas <mkbestas@lineageos.org>2019-12-11 19:03:32 +0200
commitfc679b405d36276e4af0082727e4306d3355124f (patch)
tree0d54d248c2e238436a5ce6e442c7e03e941dd174
parent0697a5efd8e47e1ff50911a40eea01e00c35cb9e (diff)
downloadbuild_soong-fc679b405d36276e4af0082727e4306d3355124f.tar.gz
build_soong-fc679b405d36276e4af0082727e4306d3355124f.tar.bz2
build_soong-fc679b405d36276e4af0082727e4306d3355124f.zip
Give Blueprint modules access to all namespaces
Don't enforce namespaces on Blueprint modules like bootstrap_go_package, their dependencies are handled before namespaces are initialized in namespaceMutator. Fixes: 135246048 Test: TestDependingOnBlueprintModuleInRootNamespace Change-Id: I7cf1c26bb8512eed59d6b4eb42a49f7080ffa281
-rw-r--r--android/namespace.go5
-rw-r--r--android/namespace_test.go43
2 files changed, 48 insertions, 0 deletions
diff --git a/android/namespace.go b/android/namespace.go
index 50bdcba7..84478348 100644
--- a/android/namespace.go
+++ b/android/namespace.go
@@ -228,6 +228,11 @@ func (r *NameResolver) parseFullyQualifiedName(name string) (namespaceName strin
}
func (r *NameResolver) getNamespacesToSearchForModule(sourceNamespace *Namespace) (searchOrder []*Namespace) {
+ if sourceNamespace.visibleNamespaces == nil {
+ // When handling dependencies before namespaceMutator, assume they are non-Soong Blueprint modules and give
+ // access to all namespaces.
+ return r.sortedNamespaces.sortedItems()
+ }
return sourceNamespace.visibleNamespaces
}
diff --git a/android/namespace_test.go b/android/namespace_test.go
index 9a791a53..ec392dfc 100644
--- a/android/namespace_test.go
+++ b/android/namespace_test.go
@@ -93,6 +93,28 @@ func TestImplicitlyImportRootNamespace(t *testing.T) {
// setupTest will report any errors
}
+func TestDependingOnBlueprintModuleInRootNamespace(t *testing.T) {
+ _ = setupTest(t,
+ map[string]string{
+ ".": `
+ blueprint_test_module {
+ name: "a",
+ }
+ `,
+ "dir1": `
+ soong_namespace {
+ }
+ blueprint_test_module {
+ name: "b",
+ deps: ["a"],
+ }
+ `,
+ },
+ )
+
+ // setupTest will report any errors
+}
+
func TestDependingOnModuleInImportedNamespace(t *testing.T) {
ctx := setupTest(t,
map[string]string{
@@ -625,6 +647,7 @@ func setupTestFromFiles(bps map[string][]byte) (ctx *TestContext, errs []error)
ctx.MockFileSystem(bps)
ctx.RegisterModuleType("test_module", ModuleFactoryAdaptor(newTestModule))
ctx.RegisterModuleType("soong_namespace", ModuleFactoryAdaptor(NamespaceFactory))
+ ctx.RegisterModuleType("blueprint_test_module", newBlueprintTestModule)
ctx.PreArchMutators(RegisterNamespaceMutator)
ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
ctx.BottomUp("rename", renameMutator)
@@ -649,6 +672,7 @@ func setupTestExpectErrs(bps map[string]string) (ctx *TestContext, errs []error)
}
func setupTest(t *testing.T, bps map[string]string) (ctx *TestContext) {
+ t.Helper()
ctx, errs := setupTestExpectErrs(bps)
FailIfErrored(t, errs)
return ctx
@@ -726,3 +750,22 @@ func newTestModule() Module {
InitAndroidModule(m)
return m
}
+
+type blueprintTestModule struct {
+ blueprint.SimpleName
+ properties struct {
+ Deps []string
+ }
+}
+
+func (b *blueprintTestModule) DynamicDependencies(ctx blueprint.DynamicDependerModuleContext) []string {
+ return b.properties.Deps
+}
+
+func (b *blueprintTestModule) GenerateBuildActions(blueprint.ModuleContext) {
+}
+
+func newBlueprintTestModule() (blueprint.Module, []interface{}) {
+ m := &blueprintTestModule{}
+ return m, []interface{}{&m.properties, &m.SimpleName.Properties}
+}