diff options
| author | 2024-12-20 15:50:30 -0800 | |
|---|---|---|
| committer | 2024-12-20 15:50:30 -0800 | |
| commit | 9008a045b0bb17a8adbccb8dfdb217243dbb9e2a (patch) | |
| tree | 04f88a0267bb76f180273715e62a7e745c676219 | |
| parent | 4366d9172b9d3d6f2746c64d3ee6621d4ca27f5e (diff) | |
| parent | a04b589994551350112a4e0d439b17bc11d32fe5 (diff) | |
Merge "Add a removed_package module type" into main
| -rw-r--r-- | android/Android.bp | 1 | ||||
| -rw-r--r-- | android/removed_package.go | 60 |
2 files changed, 61 insertions, 0 deletions
diff --git a/android/Android.bp b/android/Android.bp index 4e2006d8b..bb16856dc 100644 --- a/android/Android.bp +++ b/android/Android.bp @@ -98,6 +98,7 @@ bootstrap_go_package { "raw_files.go", "recovery_build_prop.go", "register.go", + "removed_package.go", "rule_builder.go", "sandbox.go", "sbom.go", diff --git a/android/removed_package.go b/android/removed_package.go new file mode 100644 index 000000000..aa54c2a13 --- /dev/null +++ b/android/removed_package.go @@ -0,0 +1,60 @@ +package android + +import ( + "fmt" + + "github.com/google/blueprint" + "github.com/google/blueprint/proptools" +) + +func init() { + InitRegistrationContext.RegisterModuleType("removed_package", removedPackageModuleFactory) +} + +type removedPackageModuleProps struct { + // The error message to display when this module is built. This is optional, there is a + // reasonable default message. + Message *string +} + +type removedPackageModule struct { + ModuleBase + properties removedPackageModuleProps +} + +// removed_package will cause a build failure when it's included in PRODUCT_PACKAGES. It's needed +// because currently you can add non-existent packages to PRODUCT_PACKAGES, and the build will +// not notice/complain, unless you opt-into enforcement via $(call enforce-product-packages-exist). +// Opting into the enforcement is difficult in some cases, because a package exists on some source +// trees but not on others. removed_package is an intermediate solution that allows you to remove +// a package and still get an error if it remains in PRODUCT_PACKAGES somewhere. +func removedPackageModuleFactory() Module { + m := &removedPackageModule{} + InitAndroidModule(m) + m.AddProperties(&m.properties) + return m +} + +var removedPackageRule = pctx.AndroidStaticRule("removed_package", blueprint.RuleParams{ + Command: "echo $message && false", +}, "message") + +func (m *removedPackageModule) GenerateAndroidBuildActions(ctx ModuleContext) { + // Unchecked module so that checkbuild doesn't fail + ctx.UncheckedModule() + + out := PathForModuleOut(ctx, "out.txt") + message := fmt.Sprintf("%s has been removed, and can no longer be used.", ctx.ModuleName()) + if m.properties.Message != nil { + message = *m.properties.Message + } + ctx.Build(pctx, BuildParams{ + Rule: removedPackageRule, + Output: out, + Args: map[string]string{ + "message": proptools.ShellEscape(message), + }, + }) + + ctx.InstallFile(PathForModuleInstall(ctx, "removed_module"), ctx.ModuleName(), out) +} |