From ec0836af3a710e67e9a720ce459c271c9c9313ae Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Mon, 10 May 2021 22:53:30 +0100 Subject: [PATCH] Switch Effective_license_text from []string to Paths Effective_license_text contains paths to files that are copied from one module to another and so need to be converted to Paths within the context of the owning module as the paths are relative to the owning module's directory. The previous code did convert the license_text property to paths but converted it back to strings again which was confusing and does not follow the normal pattern. Bug: 181569894 Test: m nothing Change-Id: Iea09ee7f3de1187a2c3e41455ca83b0233d904b2 --- android/androidmk.go | 2 +- android/license.go | 8 ++++---- android/licenses.go | 27 +++++++++++++-------------- android/licenses_test.go | 2 +- android/module.go | 2 +- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/android/androidmk.go b/android/androidmk.go index 590eceba4..557e7bac8 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -501,7 +501,7 @@ func (a *AndroidMkEntries) fillInEntries(ctx fillInEntriesContext, mod blueprint a.SetString("LOCAL_MODULE", name+a.SubName) a.AddStrings("LOCAL_LICENSE_KINDS", amod.commonProperties.Effective_license_kinds...) a.AddStrings("LOCAL_LICENSE_CONDITIONS", amod.commonProperties.Effective_license_conditions...) - a.AddStrings("LOCAL_NOTICE_FILE", amod.commonProperties.Effective_license_text...) + a.AddStrings("LOCAL_NOTICE_FILE", amod.commonProperties.Effective_license_text.Strings()...) // TODO(b/151177513): Does this code need to set LOCAL_MODULE_IS_CONTAINER ? if amod.commonProperties.Effective_package_name != nil { a.SetString("LOCAL_LICENSE_PACKAGE_NAME", *amod.commonProperties.Effective_package_name) diff --git a/android/license.go b/android/license.go index d571b1f35..8bfd3baa2 100644 --- a/android/license.go +++ b/android/license.go @@ -62,12 +62,12 @@ func (m *licenseModule) DepsMutator(ctx BottomUpMutatorContext) { func (m *licenseModule) GenerateAndroidBuildActions(ctx ModuleContext) { // license modules have no licenses, but license_kinds must refer to license_kind modules - mergeProps(&m.base().commonProperties.Effective_licenses, ctx.ModuleName()) - mergeProps(&m.base().commonProperties.Effective_license_text, PathsForModuleSrc(ctx, m.properties.License_text).Strings()...) + mergeStringProps(&m.base().commonProperties.Effective_licenses, ctx.ModuleName()) + mergePathProps(&m.base().commonProperties.Effective_license_text, PathsForModuleSrc(ctx, m.properties.License_text)...) for _, module := range ctx.GetDirectDepsWithTag(licenseKindTag) { if lk, ok := module.(*licenseKindModule); ok { - mergeProps(&m.base().commonProperties.Effective_license_conditions, lk.properties.Conditions...) - mergeProps(&m.base().commonProperties.Effective_license_kinds, ctx.OtherModuleName(module)) + mergeStringProps(&m.base().commonProperties.Effective_license_conditions, lk.properties.Conditions...) + mergeStringProps(&m.base().commonProperties.Effective_license_kinds, ctx.OtherModuleName(module)) } else { ctx.ModuleErrorf("license_kinds property %q is not a license_kind module", ctx.OtherModuleName(module)) } diff --git a/android/licenses.go b/android/licenses.go index 933c2f7df..c9e1da40f 100644 --- a/android/licenses.go +++ b/android/licenses.go @@ -196,10 +196,10 @@ func licensesPropertyFlattener(ctx ModuleContext) { if m.base().commonProperties.Effective_package_name == nil && l.properties.Package_name != nil { m.base().commonProperties.Effective_package_name = l.properties.Package_name } - mergeProps(&m.base().commonProperties.Effective_licenses, module.base().commonProperties.Effective_licenses...) - mergeProps(&m.base().commonProperties.Effective_license_text, module.base().commonProperties.Effective_license_text...) - mergeProps(&m.base().commonProperties.Effective_license_kinds, module.base().commonProperties.Effective_license_kinds...) - mergeProps(&m.base().commonProperties.Effective_license_conditions, module.base().commonProperties.Effective_license_conditions...) + mergeStringProps(&m.base().commonProperties.Effective_licenses, module.base().commonProperties.Effective_licenses...) + mergePathProps(&m.base().commonProperties.Effective_license_text, module.base().commonProperties.Effective_license_text...) + mergeStringProps(&m.base().commonProperties.Effective_license_kinds, module.base().commonProperties.Effective_license_kinds...) + mergeStringProps(&m.base().commonProperties.Effective_license_conditions, module.base().commonProperties.Effective_license_conditions...) } else { propertyName := "licenses" primaryProperty := m.base().primaryLicensesProperty @@ -212,16 +212,15 @@ func licensesPropertyFlattener(ctx ModuleContext) { } // Update a property string array with a distinct union of its values and a list of new values. -func mergeProps(prop *[]string, values ...string) { - s := make(map[string]bool) - for _, v := range *prop { - s[v] = true - } - for _, v := range values { - s[v] = true - } - *prop = []string{} - *prop = append(*prop, SortedStringKeys(s)...) +func mergeStringProps(prop *[]string, values ...string) { + *prop = append(*prop, values...) + *prop = SortedUniqueStrings(*prop) +} + +// Update a property Path array with a distinct union of its values and a list of new values. +func mergePathProps(prop *Paths, values ...Path) { + *prop = append(*prop, values...) + *prop = SortedUniquePaths(*prop) } // Get the licenses property falling back to the package default. diff --git a/android/licenses_test.go b/android/licenses_test.go index 9b2e06c17..85033100f 100644 --- a/android/licenses_test.go +++ b/android/licenses_test.go @@ -658,7 +658,7 @@ func checkEffectiveNotices(t *testing.T, result *TestResult, effectiveNotices ma if base == nil { return } - actualNotices[m.Name()] = base.commonProperties.Effective_license_text + actualNotices[m.Name()] = base.commonProperties.Effective_license_text.Strings() }) for moduleName, expectedNotices := range effectiveNotices { diff --git a/android/module.go b/android/module.go index 99606d165..9bc27a749 100644 --- a/android/module.go +++ b/android/module.go @@ -688,7 +688,7 @@ type commonProperties struct { // Override of module name when reporting licenses Effective_package_name *string `blueprint:"mutated"` // Notice files - Effective_license_text []string `blueprint:"mutated"` + Effective_license_text Paths `blueprint:"mutated"` // License names Effective_license_kinds []string `blueprint:"mutated"` // License conditions