Check that a product variable is set
Store product variables in pointers so that we can only apply the
properties if the product variable was set to a value. Also only apply
bool properties if they are true, adn rearrange the code to do the
cheapest checks first.
Remove device_uses_logd, it doesn't exist any more.
Change-Id: Icf42408f57bd611746f8d985bfceb50c7f95ea59
diff --git a/common/variable.go b/common/variable.go
index b1116ea..0118a6a 100644
--- a/common/variable.go
+++ b/common/variable.go
@@ -31,10 +31,6 @@
type variableProperties struct {
Product_variables struct {
- Device_uses_logd struct {
- Cflags []string
- Srcs []string
- }
Device_uses_dlmalloc struct {
Cflags []string
Srcs []string
@@ -54,16 +50,18 @@
var zeroProductVariables variableProperties
type productVariables struct {
- Device_uses_logd bool
- Device_uses_jemalloc bool
- Device_uses_dlmalloc bool
- Dlmalloc_alignment int
+ Device_uses_jemalloc *bool `json:",omitempty"`
+ Device_uses_dlmalloc *bool `json:",omitempty"`
+ Dlmalloc_alignment *int `json:",omitempty"`
+}
+
+func boolPtr(v bool) *bool {
+ return &v
}
func (productVariables) DefaultConfig() jsonConfigurable {
v := productVariables{
- Device_uses_logd: true,
- Device_uses_jemalloc: true,
+ Device_uses_jemalloc: boolPtr(true),
}
return v
}
@@ -83,18 +81,28 @@
for i := 0; i < variableValues.NumField(); i++ {
variableValue := variableValues.Field(i)
zeroValue := zeroValues.Field(i)
- if reflect.DeepEqual(variableValue, zeroValue) {
- continue
- }
-
name := variableValues.Type().Field(i).Name
property := "product_variables." + proptools.PropertyNameForField(name)
+ // Check that the variable was set for the product
val := reflect.ValueOf(mctx.Config().(Config).ProductVariables).FieldByName(name)
-
- if mctx.ContainsProperty(property) && val.IsValid() {
- a.setVariableProperties(mctx, property, variableValue, val.Interface())
+ if !val.IsValid() || val.Kind() != reflect.Ptr || val.IsNil() {
+ continue
}
+
+ val = val.Elem()
+
+ // For bools, check that the value is true
+ if val.Kind() == reflect.Bool && val.Bool() == false {
+ continue
+ }
+
+ // Check if any properties were set for the module
+ if reflect.DeepEqual(variableValue.Interface(), zeroValue.Interface()) {
+ continue
+ }
+
+ a.setVariableProperties(mctx, property, variableValue, val.Interface())
}
}