From ec810545481e6530b5f3c3da788e09aaae187c83 Mon Sep 17 00:00:00 2001 From: Yu Liu Date: Mon, 26 Aug 2024 18:09:15 +0000 Subject: [PATCH] Remove licenseMetadataFile and installFiles from ModuleBase. Bug: 358425833 Test: Manually verified all the generated ninja and mk files and CI. Change-Id: I447ec74b7f9c3b8c686ed41511e2051f40ac88f8 --- android/androidmk.go | 8 +++++--- android/androidmk_test.go | 4 ++-- android/module.go | 28 ++++++++++++++-------------- android/module_context.go | 5 ++++- android/notices.go | 24 ++++++++++++++++++------ 5 files changed, 43 insertions(+), 26 deletions(-) diff --git a/android/androidmk.go b/android/androidmk.go index f6f488998..02bcb65fc 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -157,6 +157,7 @@ type AndroidMkEntries struct { } type AndroidMkEntriesContext interface { + OtherModuleProviderContext Config() Config } @@ -354,14 +355,15 @@ func (a *AndroidMkEntries) getDistContributions(mod blueprint.Module) *distContr availableTaggedDists = availableTaggedDists.addPathsForTag(DefaultDistTag, a.OutputFile.Path()) } + info := OtherModuleProviderOrDefault(a.entryContext, mod, InstallFilesProvider) // If the distFiles created by GenerateTaggedDistFiles contains paths for the // DefaultDistTag then that takes priority so delete any existing paths. - if _, ok := amod.distFiles[DefaultDistTag]; ok { + if _, ok := info.DistFiles[DefaultDistTag]; ok { delete(availableTaggedDists, DefaultDistTag) } // Finally, merge the distFiles created by GenerateTaggedDistFiles. - availableTaggedDists = availableTaggedDists.merge(amod.distFiles) + availableTaggedDists = availableTaggedDists.merge(info.DistFiles) if len(availableTaggedDists) == 0 { // Nothing dist-able for this module. @@ -372,7 +374,7 @@ func (a *AndroidMkEntries) getDistContributions(mod blueprint.Module) *distContr distContributions := &distContributions{} if !exemptFromRequiredApplicableLicensesProperty(mod.(Module)) { - distContributions.licenseMetadataFile = amod.licenseMetadataFile + distContributions.licenseMetadataFile = info.LicenseMetadataFile } // Iterate over this module's dist structs, merged from the dist and dists properties. diff --git a/android/androidmk_test.go b/android/androidmk_test.go index 72b8654a7..c37eeabff 100644 --- a/android/androidmk_test.go +++ b/android/androidmk_test.go @@ -46,7 +46,6 @@ const ( func (m *customModule) GenerateAndroidBuildActions(ctx ModuleContext) { - m.base().licenseMetadataFile = PathForOutput(ctx, "meta_lic") var defaultDistPaths Paths // If the dist_output_file: true then create an output file that is stored in @@ -276,7 +275,8 @@ func TestGetDistForGoals(t *testing.T) { ) } for idx, line := range androidMkLines { - expectedLine := strings.ReplaceAll(expectedAndroidMkLines[idx], "meta_lic", module.base().licenseMetadataFile.String()) + expectedLine := strings.ReplaceAll(expectedAndroidMkLines[idx], "meta_lic", + OtherModuleProviderOrDefault(ctx, module, InstallFilesProvider).LicenseMetadataFile.String()) if line != expectedLine { t.Errorf( "Expected AndroidMk line to be '%s', got '%s'", diff --git a/android/module.go b/android/module.go index 9e882ec06..0f01f0477 100644 --- a/android/module.go +++ b/android/module.go @@ -842,9 +842,6 @@ type ModuleBase struct { katiInitRcInstalls katiInstalls katiVintfInstalls katiInstalls - // The files to copy to the dist as explicitly specified in the .bp file. - distFiles TaggedDistFiles - hooks hooks registerProps []interface{} @@ -863,9 +860,6 @@ type ModuleBase struct { // Merged Aconfig files for all transitive deps. aconfigFilePaths Paths - // The path to the generated license metadata file for the module. - licenseMetadataFile WritablePath - // moduleInfoJSON can be filled out by GenerateAndroidBuildActions to write a JSON file that will // be included in the final module-info.json produced by Make. moduleInfoJSON *ModuleInfoJSON @@ -1768,12 +1762,17 @@ type InstallFilesInfo struct { PackagingSpecs []PackagingSpec // katiInstalls tracks the install rules that were created by Soong but are being exported // to Make to convert to ninja rules so that Make can add additional dependencies. - KatiInstalls katiInstalls - KatiSymlinks katiInstalls - TestData []DataPath - // This was private before, make it private again once we have better solution. - TransitiveInstallFiles *DepSet[InstallPath] + KatiInstalls katiInstalls + KatiSymlinks katiInstalls + TestData []DataPath TransitivePackagingSpecs *DepSet[PackagingSpec] + LicenseMetadataFile WritablePath + + // The following fields are private before, make it private again once we have + // better solution. + TransitiveInstallFiles *DepSet[InstallPath] + // The files to copy to the dist as explicitly specified in the .bp file. + DistFiles TaggedDistFiles } var InstallFilesProvider = blueprint.NewProvider[InstallFilesInfo]() @@ -1799,7 +1798,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) setContainerInfo(ctx) - m.licenseMetadataFile = PathForModuleOut(ctx, "meta_lic") + ctx.licenseMetadataFile = PathForModuleOut(ctx, "meta_lic") dependencyInstallFiles, dependencyPackagingSpecs := m.computeInstallDeps(ctx) // set the TransitiveInstallFiles to only the transitive dependencies to be used as the dependencies @@ -1967,11 +1966,12 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) // as GenerateTaggedDistFiles() calls OutputFiles(tag) and so relies on the // output paths being set which must be done before or during // GenerateAndroidBuildActions. - m.distFiles = m.GenerateTaggedDistFiles(ctx) + installFiles.DistFiles = m.GenerateTaggedDistFiles(ctx) if ctx.Failed() { return } + installFiles.LicenseMetadataFile = ctx.licenseMetadataFile installFiles.InstallFiles = ctx.installFiles installFiles.CheckbuildFiles = ctx.checkbuildFiles installFiles.PackagingSpecs = ctx.packagingSpecs @@ -1999,7 +1999,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) installFiles.TransitivePackagingSpecs = m.packagingSpecsDepSet SetProvider(ctx, InstallFilesProvider, installFiles) - buildLicenseMetadata(ctx, m.licenseMetadataFile) + buildLicenseMetadata(ctx, ctx.licenseMetadataFile) if m.moduleInfoJSON != nil { var installed InstallPaths diff --git a/android/module_context.go b/android/module_context.go index 632fc961c..f5104b842 100644 --- a/android/module_context.go +++ b/android/module_context.go @@ -246,6 +246,9 @@ type moduleContext struct { // apex containers. licenseInstallMap []string + // The path to the generated license metadata file for the module. + licenseMetadataFile WritablePath + katiInstalls katiInstalls katiSymlinks katiInstalls @@ -714,7 +717,7 @@ func (m *moduleContext) blueprintModuleContext() blueprint.ModuleContext { } func (m *moduleContext) LicenseMetadataFile() Path { - return m.module.base().licenseMetadataFile + return m.licenseMetadataFile } func (m *moduleContext) ModuleInfoJSON() *ModuleInfoJSON { diff --git a/android/notices.go b/android/notices.go index b9c1682e3..3c41d924e 100644 --- a/android/notices.go +++ b/android/notices.go @@ -36,10 +36,22 @@ func modulesOutputDirs(ctx BuilderContext, modules ...Module) []string { return SortedUniqueStrings(dirs) } -func modulesLicenseMetadata(ctx BuilderContext, modules ...Module) Paths { +type BuilderAndOtherModuleProviderContext interface { + BuilderContext + OtherModuleProviderContext +} + +func modulesLicenseMetadata(ctx OtherModuleProviderContext, modules ...Module) Paths { result := make(Paths, 0, len(modules)) + mctx, isMctx := ctx.(ModuleContext) for _, module := range modules { - if mf := module.base().licenseMetadataFile; mf != nil { + var mf Path + if isMctx && mctx.Module() == module { + mf = mctx.LicenseMetadataFile() + } else { + mf = OtherModuleProviderOrDefault(ctx, module, InstallFilesProvider).LicenseMetadataFile + } + if mf != nil { result = append(result, mf) } } @@ -48,7 +60,7 @@ func modulesLicenseMetadata(ctx BuilderContext, modules ...Module) Paths { // buildNoticeOutputFromLicenseMetadata writes out a notice file. func buildNoticeOutputFromLicenseMetadata( - ctx BuilderContext, tool, ruleName string, outputFile WritablePath, + ctx BuilderAndOtherModuleProviderContext, tool, ruleName string, outputFile WritablePath, libraryName string, stripPrefix []string, modules ...Module) { depsFile := outputFile.ReplaceExtension(ctx, strings.TrimPrefix(outputFile.Ext()+".d", ".")) rule := NewRuleBuilder(pctx, ctx) @@ -84,7 +96,7 @@ func buildNoticeOutputFromLicenseMetadata( // on the license metadata files for the input `modules` defaulting to the // current context module if none given. func BuildNoticeTextOutputFromLicenseMetadata( - ctx BuilderContext, outputFile WritablePath, ruleName, libraryName string, + ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string, stripPrefix []string, modules ...Module) { buildNoticeOutputFromLicenseMetadata(ctx, "textnotice", "text_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...) @@ -94,7 +106,7 @@ func BuildNoticeTextOutputFromLicenseMetadata( // on the license metadata files for the input `modules` defaulting to the // current context module if none given. func BuildNoticeHtmlOutputFromLicenseMetadata( - ctx BuilderContext, outputFile WritablePath, ruleName, libraryName string, + ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string, stripPrefix []string, modules ...Module) { buildNoticeOutputFromLicenseMetadata(ctx, "htmlnotice", "html_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...) @@ -104,7 +116,7 @@ func BuildNoticeHtmlOutputFromLicenseMetadata( // on the license metadata files for the input `modules` defaulting to the // current context module if none given. func BuildNoticeXmlOutputFromLicenseMetadata( - ctx BuilderContext, outputFile WritablePath, ruleName, libraryName string, + ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string, stripPrefix []string, modules ...Module) { buildNoticeOutputFromLicenseMetadata(ctx, "xmlnotice", "xml_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...)