Integrate gen_notice with Make for dist.

Most exempt module types have no output. Support exempt module types
with output by requiring they must be 0p and have no license metadata.

Disallow `licenses: []` property on gen_notice.

Test: m cts dist

Change-Id: Ic992bd6420fa6898495866eac43495002ef4b6c8
Merged-in: Ic992bd6420fa6898495866eac43495002ef4b6c8
This commit is contained in:
Bob Badour 2022-09-12 16:06:03 -07:00
parent 2ba6d37e7b
commit 4660a9824c
3 changed files with 35 additions and 5 deletions

View file

@ -366,7 +366,9 @@ func (a *AndroidMkEntries) getDistContributions(mod blueprint.Module) *distContr
// Collate the contributions this module makes to the dist. // Collate the contributions this module makes to the dist.
distContributions := &distContributions{} distContributions := &distContributions{}
distContributions.licenseMetadataFile = amod.licenseMetadataFile if !exemptFromRequiredApplicableLicensesProperty(mod.(Module)) {
distContributions.licenseMetadataFile = amod.licenseMetadataFile
}
// Iterate over this module's dist structs, merged from the dist and dists properties. // Iterate over this module's dist structs, merged from the dist and dists properties.
for _, dist := range amod.Dists() { for _, dist := range amod.Dists() {
@ -458,10 +460,12 @@ func generateDistContributionsForMake(distContributions *distContributions) []st
ret = append(ret, fmt.Sprintf(".PHONY: %s\n", d.goals)) ret = append(ret, fmt.Sprintf(".PHONY: %s\n", d.goals))
// Create dist-for-goals calls for each of the copy instructions. // Create dist-for-goals calls for each of the copy instructions.
for _, c := range d.copies { for _, c := range d.copies {
ret = append( if distContributions.licenseMetadataFile != nil {
ret, ret = append(
fmt.Sprintf("$(if $(strip $(ALL_TARGETS.%s.META_LIC)),,$(eval ALL_TARGETS.%s.META_LIC := %s))\n", ret,
c.from.String(), c.from.String(), distContributions.licenseMetadataFile.String())) fmt.Sprintf("$(if $(strip $(ALL_TARGETS.%s.META_LIC)),,$(eval ALL_TARGETS.%s.META_LIC := %s))\n",
c.from.String(), c.from.String(), distContributions.licenseMetadataFile.String()))
}
ret = append( ret = append(
ret, ret,
fmt.Sprintf("$(call dist-for-goals,%s,%s:%s)\n", d.goals, c.from.String(), c.dest)) fmt.Sprintf("$(call dist-for-goals,%s,%s:%s)\n", d.goals, c.from.String(), c.dest))

View file

@ -111,6 +111,9 @@ type genNoticeModule struct {
} }
func (m *genNoticeModule) DepsMutator(ctx BottomUpMutatorContext) { func (m *genNoticeModule) DepsMutator(ctx BottomUpMutatorContext) {
if ctx.ContainsProperty("licenses") {
ctx.PropertyErrorf("licenses", "not supported on \"gen_notice\" modules")
}
if proptools.Bool(m.properties.Html) && proptools.Bool(m.properties.Xml) { if proptools.Bool(m.properties.Html) && proptools.Bool(m.properties.Xml) {
ctx.ModuleErrorf("can be html or xml but not both") ctx.ModuleErrorf("can be html or xml but not both")
} }
@ -195,6 +198,16 @@ func (m *genNoticeModule) OutputFiles(tag string) (Paths, error) {
return nil, fmt.Errorf("unrecognized tag %q", tag) return nil, fmt.Errorf("unrecognized tag %q", tag)
} }
var _ AndroidMkEntriesProvider = (*genNoticeModule)(nil)
// Implements AndroidMkEntriesProvider
func (m *genNoticeModule) AndroidMkEntries() []AndroidMkEntries {
return []AndroidMkEntries{AndroidMkEntries{
Class: "ETC",
OutputFile: OptionalPathForPath(m.output),
}}
}
// missingReferencesRule emits an ErrorRule for missing module references. // missingReferencesRule emits an ErrorRule for missing module references.
func missingReferencesRule(ctx BuilderContext, m *genNoticeModule) { func missingReferencesRule(ctx BuilderContext, m *genNoticeModule) {
if len(m.missing) < 1 { if len(m.missing) < 1 {

View file

@ -11,6 +11,19 @@ var genNoticeTests = []struct {
fs MockFS fs MockFS
expectedErrors []string expectedErrors []string
}{ }{
{
name: "gen_notice must not accept licenses property",
fs: map[string][]byte{
"top/Android.bp": []byte(`
gen_notice {
name: "top_license",
licenses: ["other_license"],
}`),
},
expectedErrors: []string{
`not supported on "gen_notice" modules`,
},
},
{ {
name: "bad gen_notice", name: "bad gen_notice",
fs: map[string][]byte{ fs: map[string][]byte{