Allow soong config variables to be boolean-typed

So that you can use `true` instead of `"true"` in select expressions.

Bug: 323382414
Test: m nothing --no-skip-soong-tests
Change-Id: I950bd8e04f8fab5187ea5075514d476227943f33
This commit is contained in:
Cole Faust 2024-06-20 12:57:43 -07:00 committed by Bartłomiej Rudecki
parent 5b91c24c11
commit 4be39f9509
Signed by: przekichane
GPG key ID: 751F23C6F014EF76
3 changed files with 49 additions and 8 deletions

View file

@ -2208,7 +2208,20 @@ func (e configurationEvalutor) EvaluateConfiguration(condition proptools.Configu
variable := condition.Arg(1)
if n, ok := ctx.Config().productVariables.VendorVars[namespace]; ok {
if v, ok := n[variable]; ok {
return proptools.ConfigurableValueString(v)
ty := ""
if namespaces, ok := ctx.Config().productVariables.VendorVarTypes[namespace]; ok {
ty = namespaces[variable]
}
switch ty {
case "":
// strings are the default, we don't bother writing them to the soong variables json file
return proptools.ConfigurableValueString(v)
case "bool":
return proptools.ConfigurableValueBool(v == "true")
default:
panic("unhandled soong config variable type: " + ty)
}
}
}
return proptools.ConfigurableValueUndefined()

View file

@ -25,12 +25,13 @@ import (
func TestSelects(t *testing.T) {
testCases := []struct {
name string
bp string
provider selectsTestProvider
providers map[string]selectsTestProvider
vendorVars map[string]map[string]string
expectedError string
name string
bp string
provider selectsTestProvider
providers map[string]selectsTestProvider
vendorVars map[string]map[string]string
vendorVarTypes map[string]map[string]string
expectedError string
}{
{
name: "basic string list",
@ -583,6 +584,31 @@ func TestSelects(t *testing.T) {
my_string: proptools.StringPtr("t"),
},
},
{
name: "Select on boolean soong config variable",
bp: `
my_module_type {
name: "foo",
my_string: select(soong_config_variable("my_namespace", "my_variable"), {
true: "t",
false: "f",
}),
}
`,
vendorVars: map[string]map[string]string{
"my_namespace": {
"my_variable": "true",
},
},
vendorVarTypes: map[string]map[string]string{
"my_namespace": {
"my_variable": "bool",
},
},
provider: selectsTestProvider{
my_string: proptools.StringPtr("t"),
},
},
{
name: "Select on boolean false",
bp: `
@ -813,6 +839,7 @@ func TestSelects(t *testing.T) {
}),
FixtureModifyProductVariables(func(variables FixtureProductVariables) {
variables.VendorVars = tc.vendorVars
variables.VendorVarTypes = tc.vendorVarTypes
}),
)
if tc.expectedError != "" {

View file

@ -412,7 +412,8 @@ type ProductVariables struct {
PlatformSepolicyCompatVersions []string `json:",omitempty"`
VendorVars map[string]map[string]string `json:",omitempty"`
VendorVars map[string]map[string]string `json:",omitempty"`
VendorVarTypes map[string]map[string]string `json:",omitempty"`
Ndk_abis *bool `json:",omitempty"`