From 4be39f9509d2c249fabc0cfbe0c62f66290ce6c5 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Thu, 20 Jun 2024 12:57:43 -0700 Subject: [PATCH] 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 --- android/module.go | 15 ++++++++++++++- android/selects_test.go | 39 +++++++++++++++++++++++++++++++++------ android/variable.go | 3 ++- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/android/module.go b/android/module.go index d629aa5a6..df410573f 100644 --- a/android/module.go +++ b/android/module.go @@ -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() diff --git a/android/selects_test.go b/android/selects_test.go index 3093deb11..e2dc4035d 100644 --- a/android/selects_test.go +++ b/android/selects_test.go @@ -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 != "" { diff --git a/android/variable.go b/android/variable.go index a4b6a30e7..2a3f9aade 100644 --- a/android/variable.go +++ b/android/variable.go @@ -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"`