diff --git a/androidmk/cmd/androidmk/androidmk_test.go b/androidmk/cmd/androidmk/androidmk_test.go index 98d4506a1..2976a0cd6 100644 --- a/androidmk/cmd/androidmk/androidmk_test.go +++ b/androidmk/cmd/androidmk/androidmk_test.go @@ -1073,6 +1073,25 @@ vts_config { expected: ` // Comment line 1 \ // Comment line 2 +`, + }, + { + desc: "Merge with variable reference", + in: ` +include $(CLEAR_VARS) +LOCAL_MODULE := foo +LOCAL_STATIC_ANDROID_LIBRARIES := $(FOO) +LOCAL_STATIC_JAVA_LIBRARIES := javalib +LOCAL_JAVA_RESOURCE_DIRS := $(FOO) +include $(BUILD_PACKAGE) +`, + expected: ` +android_app { + name: "foo", + static_libs: FOO, + static_libs: ["javalib"], + java_resource_dirs: FOO, +} `, }, } diff --git a/bpfix/bpfix/bpfix.go b/bpfix/bpfix/bpfix.go index ba6435e09..706c0ec25 100644 --- a/bpfix/bpfix/bpfix.go +++ b/bpfix/bpfix/bpfix.go @@ -786,6 +786,14 @@ func mergeMatchingProperties(properties *[]*parser.Property, buf []byte, patchli } func mergeProperties(a, b *parser.Property, buf []byte, patchlist *parser.PatchList) error { + // The value of one of the properties may be a variable reference with no type assigned + // Bail out in this case. Soong will notice duplicate entries and will tell to merge them. + if _, isVar := a.Value.(*parser.Variable); isVar { + return nil + } + if _, isVar := b.Value.(*parser.Variable); isVar { + return nil + } if a.Value.Type() != b.Value.Type() { return fmt.Errorf("type mismatch when merging properties %q: %s and %s", a.Name, a.Value.Type(), b.Value.Type()) }