Use product variables from the overridden apex

override_apex's bp2build converter had a bug where it was looking at
the product variables for the override_apex module itself instead of
for the base module it is overriding.

Fixes: 271424349
Test: go test
Change-Id: If1e2653d3751fa908faf0ab97dfa2e943ebe98ec
This commit is contained in:
Cole Faust
2023-03-08 12:29:50 -08:00
parent 8eb8ae649c
commit 912bc8862e
7 changed files with 96 additions and 15 deletions

View File

@@ -61,7 +61,10 @@ func registerOverrideApexModuleTypes(ctx android.RegistrationContext) {
ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory)
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
ctx.RegisterModuleType("apex", apex.BundleFactory)
ctx.RegisterModuleType("apex_defaults", apex.DefaultsFactory)
ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory)
ctx.RegisterModuleType("soong_config_module_type", android.SoongConfigModuleTypeFactory)
ctx.RegisterModuleType("soong_config_string_variable", android.SoongConfigStringVariableDummyFactory)
}
func TestApexBundleSimple(t *testing.T) {
@@ -1359,3 +1362,87 @@ apex_test {
}),
}})
}
func TestApexBundle_overridePlusProductVars(t *testing.T) {
// Reproduction of b/271424349
// Tests that overriding an apex that uses product variables correctly copies the product var
// selects over to the override.
runOverrideApexTestCase(t, Bp2buildTestCase{
Description: "apex - overriding a module that uses product vars",
ModuleTypeUnderTest: "override_apex",
ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
Blueprint: `
soong_config_string_variable {
name: "library_linking_strategy",
values: [
"prefer_static",
],
}
soong_config_module_type {
name: "library_linking_strategy_apex_defaults",
module_type: "apex_defaults",
config_namespace: "ANDROID",
variables: ["library_linking_strategy"],
properties: [
"manifest",
"min_sdk_version",
],
}
library_linking_strategy_apex_defaults {
name: "higher_min_sdk_when_prefer_static",
soong_config_variables: {
library_linking_strategy: {
// Use the R min_sdk_version
prefer_static: {},
// Override the R min_sdk_version to min_sdk_version that supports dcla
conditions_default: {
min_sdk_version: "31",
},
},
},
}
filegroup {
name: "foo-file_contexts",
srcs: [
"com.android.apogee-file_contexts",
],
bazel_module: { bp2build_available: false },
}
apex {
name: "foo",
defaults: ["higher_min_sdk_when_prefer_static"],
min_sdk_version: "30",
package_name: "pkg_name",
file_contexts: ":foo-file_contexts",
}
override_apex {
name: "override_foo",
base: ":foo",
package_name: "override_pkg_name",
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("apex", "foo", AttrNameToString{
"file_contexts": `":foo-file_contexts"`,
"manifest": `"apex_manifest.json"`,
"min_sdk_version": `select({
"//build/bazel/product_variables:android__library_linking_strategy__prefer_static": "30",
"//conditions:default": "31",
})`,
"package_name": `"pkg_name"`,
}), MakeBazelTarget("apex", "override_foo", AttrNameToString{
"base_apex_name": `"foo"`,
"file_contexts": `":foo-file_contexts"`,
"manifest": `"apex_manifest.json"`,
"min_sdk_version": `select({
"//build/bazel/product_variables:android__library_linking_strategy__prefer_static": "30",
"//conditions:default": "31",
})`,
"package_name": `"override_pkg_name"`,
}),
}})
}