From 9b21596db47b409b1fd540ab67b4c60cbf6351b2 Mon Sep 17 00:00:00 2001 From: Zi Wang Date: Thu, 27 Jun 2024 21:51:33 +0000 Subject: [PATCH] Revert "Use OutputFilesProvider on buildinfo_prop and some android test modules" This reverts commit 89e4ff60d361cc7e0542f5da7a31c64f90b6d3b8. Reason for revert: build breakage on aosp-main/mainline_modules_sdks-trunk_staging-userdebug Change-Id: I5ddac59f66a0e7a96fab39647d406499e3875f6a --- android/androidmk_test.go | 55 +++++++++++++++++++++++---------------- android/buildinfo_prop.go | 14 ++++++++-- android/paths_test.go | 20 ++++++++++---- android/prebuilt_test.go | 15 ++++++++--- 4 files changed, 72 insertions(+), 32 deletions(-) diff --git a/android/androidmk_test.go b/android/androidmk_test.go index 72b8654a7..ae2187f48 100644 --- a/android/androidmk_test.go +++ b/android/androidmk_test.go @@ -36,6 +36,10 @@ type customModule struct { data AndroidMkData distFiles TaggedDistFiles outputFile OptionalPath + + // The paths that will be used as the default dist paths if no tag is + // specified. + defaultDistPaths Paths } const ( @@ -47,7 +51,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 // the OutputFile property of the AndroidMkEntry. @@ -59,7 +62,7 @@ func (m *customModule) GenerateAndroidBuildActions(ctx ModuleContext) { // property in AndroidMkEntry when determining the default dist paths. // Setting this first allows it to be overridden based on the // default_dist_files setting replicating that previous behavior. - defaultDistPaths = Paths{path} + m.defaultDistPaths = Paths{path} } // Based on the setting of the default_dist_files property possibly create a @@ -68,40 +71,29 @@ func (m *customModule) GenerateAndroidBuildActions(ctx ModuleContext) { defaultDistFiles := proptools.StringDefault(m.properties.Default_dist_files, defaultDistFiles_Tagged) switch defaultDistFiles { case defaultDistFiles_None: - m.setOutputFiles(ctx, defaultDistPaths) + // Do nothing case defaultDistFiles_Default: path := PathForTesting("default-dist.out") - defaultDistPaths = Paths{path} - m.setOutputFiles(ctx, defaultDistPaths) + m.defaultDistPaths = Paths{path} m.distFiles = MakeDefaultDistFiles(path) case defaultDistFiles_Tagged: // Module types that set AndroidMkEntry.DistFiles to the result of calling // GenerateTaggedDistFiles(ctx) relied on no tag being treated as "" which - // meant that the default dist paths would be the same as empty-string-tag - // output files. In order to preserve that behavior when treating no tag - // as being equal to DefaultDistTag this ensures that DefaultDistTag output - // will be the same as empty-string-tag output. - defaultDistPaths = PathsForTesting("one.out") - m.setOutputFiles(ctx, defaultDistPaths) + // meant that the default dist paths would be whatever was returned by + // OutputFiles(""). In order to preserve that behavior when treating no tag + // as being equal to DefaultDistTag this ensures that + // OutputFiles(DefaultDistTag) will return the same as OutputFiles(""). + m.defaultDistPaths = PathsForTesting("one.out") // This must be called after setting defaultDistPaths/outputFile as - // GenerateTaggedDistFiles calls into outputFiles property which may use - // those fields. + // GenerateTaggedDistFiles calls into OutputFiles(tag) which may use those + // fields. m.distFiles = m.GenerateTaggedDistFiles(ctx) } } -func (m *customModule) setOutputFiles(ctx ModuleContext, defaultDistPaths Paths) { - ctx.SetOutputFiles(PathsForTesting("one.out"), "") - ctx.SetOutputFiles(PathsForTesting("two.out", "three/four.out"), ".multiple") - ctx.SetOutputFiles(PathsForTesting("another.out"), ".another-tag") - if defaultDistPaths != nil { - ctx.SetOutputFiles(defaultDistPaths, DefaultDistTag) - } -} - func (m *customModule) AndroidMk() AndroidMkData { return AndroidMkData{ Custom: func(w io.Writer, name, prefix, moduleDir string, data AndroidMkData) { @@ -110,6 +102,25 @@ func (m *customModule) AndroidMk() AndroidMkData { } } +func (m *customModule) OutputFiles(tag string) (Paths, error) { + switch tag { + case DefaultDistTag: + if m.defaultDistPaths != nil { + return m.defaultDistPaths, nil + } else { + return nil, fmt.Errorf("default dist tag is not available") + } + case "": + return PathsForTesting("one.out"), nil + case ".multiple": + return PathsForTesting("two.out", "three/four.out"), nil + case ".another-tag": + return PathsForTesting("another.out"), nil + default: + return nil, fmt.Errorf("unsupported module reference tag %q", tag) + } +} + func (m *customModule) AndroidMkEntries() []AndroidMkEntries { return []AndroidMkEntries{ { diff --git a/android/buildinfo_prop.go b/android/buildinfo_prop.go index 05ae18be0..defbff0b0 100644 --- a/android/buildinfo_prop.go +++ b/android/buildinfo_prop.go @@ -15,6 +15,8 @@ package android import ( + "fmt" + "github.com/google/blueprint/proptools" ) @@ -39,10 +41,20 @@ type buildinfoPropModule struct { installPath InstallPath } +var _ OutputFileProducer = (*buildinfoPropModule)(nil) + func (p *buildinfoPropModule) installable() bool { return proptools.BoolDefault(p.properties.Installable, true) } +// OutputFileProducer +func (p *buildinfoPropModule) OutputFiles(tag string) (Paths, error) { + if tag != "" { + return nil, fmt.Errorf("unsupported tag %q", tag) + } + return Paths{p.outputFilePath}, nil +} + func shouldAddBuildThumbprint(config Config) bool { knownOemProperties := []string{ "ro.product.brand", @@ -103,8 +115,6 @@ func (p *buildinfoPropModule) GenerateAndroidBuildActions(ctx ModuleContext) { p.installPath = PathForModuleInstall(ctx) ctx.InstallFile(p.installPath, p.Name(), p.outputFilePath) - - ctx.SetOutputFiles(Paths{p.outputFilePath}, "") } func (p *buildinfoPropModule) AndroidMkEntries() []AndroidMkEntries { diff --git a/android/paths_test.go b/android/paths_test.go index 941f0ca78..93b9b9a16 100644 --- a/android/paths_test.go +++ b/android/paths_test.go @@ -1183,6 +1183,9 @@ type pathForModuleSrcOutputFileProviderModule struct { Outs []string Tagged []string } + + outs Paths + tagged Paths } func pathForModuleSrcOutputFileProviderModuleFactory() Module { @@ -1193,17 +1196,24 @@ func pathForModuleSrcOutputFileProviderModuleFactory() Module { } func (p *pathForModuleSrcOutputFileProviderModule) GenerateAndroidBuildActions(ctx ModuleContext) { - var outs, taggedOuts Paths for _, out := range p.props.Outs { - outs = append(outs, PathForModuleOut(ctx, out)) + p.outs = append(p.outs, PathForModuleOut(ctx, out)) } for _, tagged := range p.props.Tagged { - taggedOuts = append(taggedOuts, PathForModuleOut(ctx, tagged)) + p.tagged = append(p.tagged, PathForModuleOut(ctx, tagged)) } +} - ctx.SetOutputFiles(outs, "") - ctx.SetOutputFiles(taggedOuts, ".tagged") +func (p *pathForModuleSrcOutputFileProviderModule) OutputFiles(tag string) (Paths, error) { + switch tag { + case "": + return p.outs, nil + case ".tagged": + return p.tagged, nil + default: + return nil, fmt.Errorf("unsupported tag %q", tag) + } } type pathForModuleSrcTestCase struct { diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go index 6e4fc0c2f..d775ac356 100644 --- a/android/prebuilt_test.go +++ b/android/prebuilt_test.go @@ -15,6 +15,7 @@ package android import ( + "fmt" "testing" "github.com/google/blueprint" @@ -493,6 +494,7 @@ type prebuiltModule struct { properties struct { Srcs []string `android:"path,arch_variant"` } + src Path } func newPrebuiltModule() Module { @@ -508,17 +510,24 @@ func (p *prebuiltModule) Name() string { } func (p *prebuiltModule) GenerateAndroidBuildActions(ctx ModuleContext) { - var src Path if len(p.properties.Srcs) >= 1 { - src = p.prebuilt.SingleSourcePath(ctx) + p.src = p.prebuilt.SingleSourcePath(ctx) } - ctx.SetOutputFiles(Paths{src}, "") } func (p *prebuiltModule) Prebuilt() *Prebuilt { return &p.prebuilt } +func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) { + switch tag { + case "": + return Paths{p.src}, nil + default: + return nil, fmt.Errorf("unsupported module reference tag %q", tag) + } +} + type sourceModuleProperties struct { Deps []string `android:"path,arch_variant"` }