Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f297068 authored by Cole Faust's avatar Cole Faust
Browse files

Support soong config value variables on Configurable properties

Configurable properties were previously not having their %s's
substituted with the actual value.

Bug: 323382414
Test: m nothing --no-skip-soong-tests
Change-Id: Id317e58a1fd878db5452d5d0a5df588021bcdcdb
parent a6428535
Loading
Loading
Loading
Loading
+34 −1
Original line number Diff line number Diff line
@@ -711,6 +711,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 {
@@ -718,6 +750,7 @@ func TestSelects(t *testing.T) {
			fixtures := GroupFixturePreparers(
				PrepareForTestWithDefaults,
				PrepareForTestWithArchMutator,
				PrepareForTestWithSoongConfigModuleBuildComponents,
				FixtureRegisterWithContext(func(ctx RegistrationContext) {
					ctx.RegisterModuleType("my_module_type", newSelectsMockModule)
					ctx.RegisterModuleType("my_defaults", newSelectsMockModuleDefaults)
@@ -772,7 +805,7 @@ func (p *selectsTestProvider) String() string {
		myStringStr = *p.my_string
	}
	myNonconfigurableStringStr := "nil"
	if p.my_string != nil {
	if p.my_nonconfigurable_string != nil {
		myNonconfigurableStringStr = *p.my_nonconfigurable_string
	}
	return fmt.Sprintf(`selectsTestProvider {
+11 −4
Original line number Diff line number Diff line
@@ -733,11 +733,18 @@ func (s *valueVariable) printfIntoPropertyRecursive(fieldName []string, propStru
		case reflect.Bool:
			// Nothing to do
		case reflect.Struct:
			if proptools.IsConfigurable(field.Type()) {
				if err := proptools.PrintfIntoConfigurable(field.Interface(), configValue); err != nil {
					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]
			}
		default:
			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)