From 6dd9fcc314d0f1a3df8eb186a0c550b8d291337e Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Wed, 22 May 2024 17:22:10 +0000 Subject: [PATCH] Drop blueprint_package_includes This feature can be used to prune Android.bp files from analysis. This was introduced in `T` to support co-existence of BA and Go apexes. With the recent changes to apex prebuilt build rules, this pruning is no longer necessary to support co-existence. Pruning via PRODUCT_SOURCE_ROOT_DIRS is still supported. Bug: 308188212 Test: m nothing Change-Id: I1e1391665963b1ad7cb3837dc67500b69b0833af --- bootstrap/command.go | 1 - context.go | 79 -------------------------------------------- context_test.go | 74 ----------------------------------------- 3 files changed, 154 deletions(-) diff --git a/bootstrap/command.go b/bootstrap/command.go index 301f0e3..3071e3e 100644 --- a/bootstrap/command.go +++ b/bootstrap/command.go @@ -102,7 +102,6 @@ func RunBlueprint(args Args, stopBefore StopBefore, ctx *blueprint.Context, conf ctx.RegisterBottomUpMutator("bootstrap_plugin_deps", pluginDeps) ctx.RegisterSingletonType("bootstrap", newSingletonFactory(), false) RegisterGoModuleTypes(ctx) - blueprint.RegisterPackageIncludesModuleType(ctx) ctx.BeginEvent("parse_bp") if blueprintFiles, errs := ctx.ParseFileList(".", filesToParse, config); len(errs) > 0 { diff --git a/context.go b/context.go index 46f2985..1591b3c 100644 --- a/context.go +++ b/context.go @@ -812,43 +812,10 @@ type shouldVisitFileInfo struct { // This should be processed before adding any modules to the build graph func shouldVisitFile(c *Context, file *parser.File) shouldVisitFileInfo { skippedModules := []string{} - var blueprintPackageIncludes *PackageIncludes for _, def := range file.Defs { switch def := def.(type) { case *parser.Module: skippedModules = append(skippedModules, def.Name()) - if def.Type != "blueprint_package_includes" { - continue - } - module, errs := processModuleDef(def, file.Name, c.moduleFactories, nil, c.ignoreUnknownModuleTypes) - if len(errs) > 0 { - // This file contains errors in blueprint_package_includes - // Visit anyways so that we can report errors on other modules in the file - return shouldVisitFileInfo{ - shouldVisitFile: true, - errs: errs, - } - } - logicModule, _ := c.cloneLogicModule(module) - blueprintPackageIncludes = logicModule.(*PackageIncludes) - } - } - - if blueprintPackageIncludes != nil { - packageMatches, err := blueprintPackageIncludes.matchesIncludeTags(c) - if err != nil { - return shouldVisitFileInfo{ - errs: []error{err}, - } - } else if !packageMatches { - return shouldVisitFileInfo{ - shouldVisitFile: false, - skippedModules: skippedModules, - reasonForSkip: fmt.Sprintf( - "module is defined in %q which contains a blueprint_package_includes module with unsatisfied tags", - file.Name, - ), - } } } @@ -5214,52 +5181,6 @@ Singleton: {{.name}} Factory: {{.goFactory}} ` -// Blueprint module type that can be used to gate blueprint files beneath this directory -type PackageIncludes struct { - properties struct { - // Package will be included if all include tags in this list are set - Match_all []string - } - name *string `blueprint:"mutated"` -} - -func (pi *PackageIncludes) Name() string { - return proptools.String(pi.name) -} - -// This module type does not have any build actions -func (pi *PackageIncludes) GenerateBuildActions(ctx ModuleContext) { -} - -func newPackageIncludesFactory() (Module, []interface{}) { - module := &PackageIncludes{} - AddLoadHook(module, func(ctx LoadHookContext) { - module.name = proptools.StringPtr(ctx.ModuleDir() + "_includes") // Generate a synthetic name - }) - return module, []interface{}{&module.properties} -} - -func RegisterPackageIncludesModuleType(ctx *Context) { - ctx.RegisterModuleType("blueprint_package_includes", newPackageIncludesFactory) -} - -func (pi *PackageIncludes) MatchAll() []string { - return pi.properties.Match_all -} - -// Returns true if all requested include tags are set in the Context object -func (pi *PackageIncludes) matchesIncludeTags(ctx *Context) (bool, error) { - if len(pi.MatchAll()) == 0 { - return false, ctx.ModuleErrorf(pi, "Match_all must be a non-empty list") - } - for _, includeTag := range pi.MatchAll() { - if !ctx.ContainsIncludeTag(includeTag) { - return false, nil - } - } - return true, nil -} - func JoinPath(base, path string) string { if filepath.IsAbs(path) { return path diff --git a/context_test.go b/context_test.go index e69f5da..d43b243 100644 --- a/context_test.go +++ b/context_test.go @@ -19,7 +19,6 @@ import ( "errors" "fmt" "hash/fnv" - "path/filepath" "reflect" "strconv" "strings" @@ -1089,78 +1088,6 @@ func Test_parallelVisit(t *testing.T) { }) } -func TestPackageIncludes(t *testing.T) { - dir1_foo_bp := ` - blueprint_package_includes { - match_all: ["use_dir1"], - } - foo_module { - name: "foo", - } - ` - dir2_foo_bp := ` - blueprint_package_includes { - match_all: ["use_dir2"], - } - foo_module { - name: "foo", - } - ` - mockFs := map[string][]byte{ - "dir1/Android.bp": []byte(dir1_foo_bp), - "dir2/Android.bp": []byte(dir2_foo_bp), - } - testCases := []struct { - desc string - includeTags []string - expectedDir string - expectedErr string - }{ - { - desc: "use_dir1 is set, use dir1 foo", - includeTags: []string{"use_dir1"}, - expectedDir: "dir1", - }, - { - desc: "use_dir2 is set, use dir2 foo", - includeTags: []string{"use_dir2"}, - expectedDir: "dir2", - }, - { - desc: "duplicate module error if both use_dir1 and use_dir2 are set", - includeTags: []string{"use_dir1", "use_dir2"}, - expectedDir: "", - expectedErr: `module "foo" already defined`, - }, - } - for _, tc := range testCases { - t.Run(tc.desc, func(t *testing.T) { - ctx := NewContext() - // Register mock FS - ctx.MockFileSystem(mockFs) - // Register module types - ctx.RegisterModuleType("foo_module", newFooModule) - RegisterPackageIncludesModuleType(ctx) - // Add include tags for test case - ctx.AddIncludeTags(tc.includeTags...) - // Run test - _, actualErrs := ctx.ParseFileList(".", []string{"dir1/Android.bp", "dir2/Android.bp"}, nil) - // Evaluate - if !strings.Contains(fmt.Sprintf("%s", actualErrs), fmt.Sprintf("%s", tc.expectedErr)) { - t.Errorf("Expected errors: %s, got errors: %s\n", tc.expectedErr, actualErrs) - } - if tc.expectedErr != "" { - return // expectedDir check not necessary - } - actualBpFile := ctx.moduleGroupFromName("foo", nil).modules.firstModule().relBlueprintsFile - if tc.expectedDir != filepath.Dir(actualBpFile) { - t.Errorf("Expected foo from %s, got %s\n", tc.expectedDir, filepath.Dir(actualBpFile)) - } - }) - } - -} - func TestDeduplicateOrderOnlyDeps(t *testing.T) { b := func(output string, inputs []string, orderOnlyDeps []string) *buildDef { return &buildDef{ @@ -1532,7 +1459,6 @@ func TestSourceRootDirs(t *testing.T) { ctx.RegisterModuleType("foo_module", newFooModule) ctx.RegisterBottomUpMutator("deps", depsMutator) ctx.AddSourceRootDirs(tc.sourceRootDirs...) - RegisterPackageIncludesModuleType(ctx) ctx.ParseFileList(".", fileList, nil) _, actualErrs := ctx.ResolveDependencies(nil)