Merge "Support soong config value variables on Configurable properties" into main am: c15b0234e9 am: 341d2f51ba

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/3097980

Change-Id: Ibdf179121877bafd0862194d5d66e55fb2977c43
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Cole Faust
2024-05-23 00:36:38 +00:00
committed by Automerger Merge Worker
2 changed files with 45 additions and 5 deletions

View File

@@ -729,6 +729,38 @@ func TestSelects(t *testing.T) {
}, },
}, },
}, },
{
name: "Soong config value variable on configurable property",
bp: `
soong_config_module_type {
name: "soong_config_my_module_type",
module_type: "my_module_type",
config_namespace: "my_namespace",
value_variables: ["my_variable"],
properties: ["my_string", "my_string_list"],
}
soong_config_my_module_type {
name: "foo",
my_string_list: ["before.cpp"],
soong_config_variables: {
my_variable: {
my_string_list: ["after_%s.cpp"],
my_string: "%s.cpp",
},
},
}
`,
provider: selectsTestProvider{
my_string: proptools.StringPtr("foo.cpp"),
my_string_list: &[]string{"before.cpp", "after_foo.cpp"},
},
vendorVars: map[string]map[string]string{
"my_namespace": {
"my_variable": "foo",
},
},
},
} }
for _, tc := range testCases { for _, tc := range testCases {
@@ -736,6 +768,7 @@ func TestSelects(t *testing.T) {
fixtures := GroupFixturePreparers( fixtures := GroupFixturePreparers(
PrepareForTestWithDefaults, PrepareForTestWithDefaults,
PrepareForTestWithArchMutator, PrepareForTestWithArchMutator,
PrepareForTestWithSoongConfigModuleBuildComponents,
FixtureRegisterWithContext(func(ctx RegistrationContext) { FixtureRegisterWithContext(func(ctx RegistrationContext) {
ctx.RegisterModuleType("my_module_type", newSelectsMockModule) ctx.RegisterModuleType("my_module_type", newSelectsMockModule)
ctx.RegisterModuleType("my_defaults", newSelectsMockModuleDefaults) ctx.RegisterModuleType("my_defaults", newSelectsMockModuleDefaults)
@@ -790,7 +823,7 @@ func (p *selectsTestProvider) String() string {
myStringStr = *p.my_string myStringStr = *p.my_string
} }
myNonconfigurableStringStr := "nil" myNonconfigurableStringStr := "nil"
if p.my_string != nil { if p.my_nonconfigurable_string != nil {
myNonconfigurableStringStr = *p.my_nonconfigurable_string myNonconfigurableStringStr = *p.my_nonconfigurable_string
} }
return fmt.Sprintf(`selectsTestProvider { return fmt.Sprintf(`selectsTestProvider {

View File

@@ -733,11 +733,18 @@ func (s *valueVariable) printfIntoPropertyRecursive(fieldName []string, propStru
case reflect.Bool: case reflect.Bool:
// Nothing to do // Nothing to do
case reflect.Struct: case reflect.Struct:
fieldName = append(fieldName, propStruct.Type().Field(i).Name) if proptools.IsConfigurable(field.Type()) {
if err := s.printfIntoPropertyRecursive(fieldName, field, configValue); err != nil { if err := proptools.PrintfIntoConfigurable(field.Interface(), configValue); err != nil {
return err fieldName = append(fieldName, propStruct.Type().Field(i).Name)
return fmt.Errorf("soong_config_variables.%s.%s: %s", s.variable, strings.Join(fieldName, "."), err)
}
} else {
fieldName = append(fieldName, propStruct.Type().Field(i).Name)
if err := s.printfIntoPropertyRecursive(fieldName, field, configValue); err != nil {
return err
}
fieldName = fieldName[:len(fieldName)-1]
} }
fieldName = fieldName[:len(fieldName)-1]
default: default:
fieldName = append(fieldName, propStruct.Type().Field(i).Name) fieldName = append(fieldName, propStruct.Type().Field(i).Name)
return fmt.Errorf("soong_config_variables.%s.%s: unsupported property type %q", s.variable, strings.Join(fieldName, "."), kind) return fmt.Errorf("soong_config_variables.%s.%s: unsupported property type %q", s.variable, strings.Join(fieldName, "."), kind)