Fix bug: allow multiple gen_notice modules.

Test: m cts dist reportmissinglicenses

Change-Id: I07963c83eaddfe363a04871e813b56fe7f1465ad
This commit is contained in:
Bob Badour
2022-05-20 16:37:26 -07:00
parent 1811ed3764
commit a5ea2479d3
6 changed files with 15 additions and 14 deletions

View File

@@ -67,7 +67,7 @@ func (s *genNoticeBuildRules) GenerateBuildActions(ctx SingletonContext) {
if ctx.Failed() { if ctx.Failed() {
return return
} }
out(ctx, gm.output, proptools.StringDefault(gm.properties.ArtifactName, defaultName), "", modules...) out(ctx, gm.output, ctx.ModuleName(gm), proptools.StringDefault(gm.properties.ArtifactName, defaultName), "", modules...)
}) })
} }

View File

@@ -47,14 +47,14 @@ func modulesLicenseMetadata(ctx BuilderContext, modules ...Module) Paths {
} }
// buildNoticeOutputFromLicenseMetadata writes out a notice file. // buildNoticeOutputFromLicenseMetadata writes out a notice file.
func buildNoticeOutputFromLicenseMetadata(ctx BuilderContext, tool, name string, outputFile WritablePath, libraryName, stripPrefix string, modules ...Module) { func buildNoticeOutputFromLicenseMetadata(ctx BuilderContext, tool, ruleName string, outputFile WritablePath, libraryName, stripPrefix string, modules ...Module) {
depsFile := outputFile.ReplaceExtension(ctx, strings.TrimPrefix(outputFile.Ext()+".d", ".")) depsFile := outputFile.ReplaceExtension(ctx, strings.TrimPrefix(outputFile.Ext()+".d", "."))
rule := NewRuleBuilder(pctx, ctx) rule := NewRuleBuilder(pctx, ctx)
if len(modules) == 0 { if len(modules) == 0 {
if mctx, ok := ctx.(ModuleContext); ok { if mctx, ok := ctx.(ModuleContext); ok {
modules = []Module{mctx.Module()} modules = []Module{mctx.Module()}
} else { } else {
panic(fmt.Errorf("%s %q needs a module to generate the notice for", name, libraryName)) panic(fmt.Errorf("%s %q needs a module to generate the notice for", ruleName, libraryName))
} }
} }
if libraryName == "" { if libraryName == "" {
@@ -75,26 +75,26 @@ func buildNoticeOutputFromLicenseMetadata(ctx BuilderContext, tool, name string,
cmd = cmd.FlagWithArg("--product ", libraryName) cmd = cmd.FlagWithArg("--product ", libraryName)
} }
cmd = cmd.Inputs(modulesLicenseMetadata(ctx, modules...)) cmd = cmd.Inputs(modulesLicenseMetadata(ctx, modules...))
rule.Build(name, "container notice file") rule.Build(ruleName, "container notice file")
} }
// BuildNoticeTextOutputFromLicenseMetadata writes out a notice text file based // BuildNoticeTextOutputFromLicenseMetadata writes out a notice text file based
// on the license metadata files for the input `modules` defaulting to the // on the license metadata files for the input `modules` defaulting to the
// current context module if none given. // current context module if none given.
func BuildNoticeTextOutputFromLicenseMetadata(ctx BuilderContext, outputFile WritablePath, libraryName, stripPrefix string, modules ...Module) { func BuildNoticeTextOutputFromLicenseMetadata(ctx BuilderContext, outputFile WritablePath, ruleName, libraryName, stripPrefix string, modules ...Module) {
buildNoticeOutputFromLicenseMetadata(ctx, "textnotice", "text_notice", outputFile, libraryName, stripPrefix, modules...) buildNoticeOutputFromLicenseMetadata(ctx, "textnotice", "text_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...)
} }
// BuildNoticeHtmlOutputFromLicenseMetadata writes out a notice text file based // BuildNoticeHtmlOutputFromLicenseMetadata writes out a notice text file based
// on the license metadata files for the input `modules` defaulting to the // on the license metadata files for the input `modules` defaulting to the
// current context module if none given. // current context module if none given.
func BuildNoticeHtmlOutputFromLicenseMetadata(ctx BuilderContext, outputFile WritablePath, libraryName, stripPrefix string, modules ...Module) { func BuildNoticeHtmlOutputFromLicenseMetadata(ctx BuilderContext, outputFile WritablePath, ruleName, libraryName, stripPrefix string, modules ...Module) {
buildNoticeOutputFromLicenseMetadata(ctx, "htmlnotice", "html_notice", outputFile, libraryName, stripPrefix, modules...) buildNoticeOutputFromLicenseMetadata(ctx, "htmlnotice", "html_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...)
} }
// BuildNoticeXmlOutputFromLicenseMetadata writes out a notice text file based // BuildNoticeXmlOutputFromLicenseMetadata writes out a notice text file based
// on the license metadata files for the input `modules` defaulting to the // on the license metadata files for the input `modules` defaulting to the
// current context module if none given. // current context module if none given.
func BuildNoticeXmlOutputFromLicenseMetadata(ctx BuilderContext, outputFile WritablePath, libraryName, stripPrefix string, modules ...Module) { func BuildNoticeXmlOutputFromLicenseMetadata(ctx BuilderContext, outputFile WritablePath, ruleName, libraryName, stripPrefix string, modules ...Module) {
buildNoticeOutputFromLicenseMetadata(ctx, "xmlnotice", "xml_notice", outputFile, libraryName, stripPrefix, modules...) buildNoticeOutputFromLicenseMetadata(ctx, "xmlnotice", "xml_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...)
} }

View File

@@ -272,7 +272,8 @@ func (s *singletonContextAdaptor) ModuleVariantsFromName(referer Module, name st
if depQualified.pkg != qualified.pkg { if depQualified.pkg != qualified.pkg {
rule := effectiveVisibilityRules(s.Config(), depQualified) rule := effectiveVisibilityRules(s.Config(), depQualified)
if !rule.matches(qualified) { if !rule.matches(qualified) {
s.ModuleErrorf(referer, "references %s which is not visible to this module\nYou may need to add %q to its visibility", depQualified, "//"+s.ModuleDir(m)) s.ModuleErrorf(referer, "module %q references %q which is not visible to this module\nYou may need to add %q to its visibility",
referer.Name(), depQualified, "//"+s.ModuleDir(referer))
continue continue
} }
} }

View File

@@ -124,7 +124,7 @@ func (s *sdkRepoHost) GenerateAndroidBuildActions(ctx android.ModuleContext) {
s.CopySpecsToDir(ctx, builder, packageSpecs, dir) s.CopySpecsToDir(ctx, builder, packageSpecs, dir)
noticeFile := android.PathForModuleOut(ctx, "NOTICES.txt") noticeFile := android.PathForModuleOut(ctx, "NOTICES.txt")
android.BuildNoticeTextOutputFromLicenseMetadata(ctx, noticeFile, "", outputZipFile.String()) android.BuildNoticeTextOutputFromLicenseMetadata(ctx, noticeFile, "", "", outputZipFile.String())
builder.Command().Text("cp"). builder.Command().Text("cp").
Input(noticeFile). Input(noticeFile).
Text(filepath.Join(dir.String(), "NOTICE.txt")) Text(filepath.Join(dir.String(), "NOTICE.txt"))

View File

@@ -618,7 +618,7 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) {
// Create a NOTICE file, and embed it as an asset file in the APEX. // Create a NOTICE file, and embed it as an asset file in the APEX.
a.htmlGzNotice = android.PathForModuleOut(ctx, "NOTICE.html.gz") a.htmlGzNotice = android.PathForModuleOut(ctx, "NOTICE.html.gz")
android.BuildNoticeHtmlOutputFromLicenseMetadata(ctx, a.htmlGzNotice, "", unsignedOutputFile.String()) android.BuildNoticeHtmlOutputFromLicenseMetadata(ctx, a.htmlGzNotice, "", "", unsignedOutputFile.String())
noticeAssetPath := android.PathForModuleOut(ctx, "NOTICE", "NOTICE.html.gz") noticeAssetPath := android.PathForModuleOut(ctx, "NOTICE", "NOTICE.html.gz")
builder := android.NewRuleBuilder(pctx, ctx) builder := android.NewRuleBuilder(pctx, ctx)
builder.Command().Text("cp"). builder.Command().Text("cp").

View File

@@ -656,7 +656,7 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
if Bool(a.appProperties.Embed_notices) || ctx.Config().IsEnvTrue("ALWAYS_EMBED_NOTICES") { if Bool(a.appProperties.Embed_notices) || ctx.Config().IsEnvTrue("ALWAYS_EMBED_NOTICES") {
noticeFile := android.PathForModuleOut(ctx, "NOTICE.html.gz") noticeFile := android.PathForModuleOut(ctx, "NOTICE.html.gz")
android.BuildNoticeHtmlOutputFromLicenseMetadata(ctx, noticeFile, "", a.outputFile.String()) android.BuildNoticeHtmlOutputFromLicenseMetadata(ctx, noticeFile, "", "", a.outputFile.String())
noticeAssetPath := android.PathForModuleOut(ctx, "NOTICE", "NOTICE.html.gz") noticeAssetPath := android.PathForModuleOut(ctx, "NOTICE", "NOTICE.html.gz")
builder := android.NewRuleBuilder(pctx, ctx) builder := android.NewRuleBuilder(pctx, ctx)
builder.Command().Text("cp"). builder.Command().Text("cp").