From fb545bf2f39019014b53e36bb0b344e747a087f1 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sun, 10 Jan 2021 17:47:46 +0100 Subject: [PATCH] Make sure prebuilt modules are exported before attempting to use them Fixes an issue where prebuilt module under unexported soong namespace overrides source modules when flag `prefer` was set. Test: Create two modules under the same name, use cc_library_shared for first one and cc_prebuilt_library_shared with `prefer` set to true. Then put the prebuilt module under `soong_namespace {}` and attempt to compile it without appending the namespace path to product namespaces. Without this change it should fail to resolve the cc_library_shared module even if it should be available. Change-Id: I506641218e6af94a0b5f048e09e06d83602e50f5 --- android/prebuilt.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/android/prebuilt.go b/android/prebuilt.go index 2fc4782be..40bcdfd8c 100644 --- a/android/prebuilt.go +++ b/android/prebuilt.go @@ -339,6 +339,13 @@ func (p *Prebuilt) usePrebuilt(ctx TopDownMutatorContext, source Module, prebuil return false } + // Skip prebuilt modules under unexported namespaces so that we won't + // end up shadowing non-prebuilt module when prebuilt module under same + // name happens to have a `Prefer` property set to true. + if ctx.Config().KatiEnabled() && !prebuilt.ExportedToMake() { + return false + } + // TODO: use p.Properties.Name and ctx.ModuleDir to override preference if Bool(p.properties.Prefer) { return true