summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-12-20 15:50:30 -0800
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2024-12-20 15:50:30 -0800
commit9008a045b0bb17a8adbccb8dfdb217243dbb9e2a (patch)
tree04f88a0267bb76f180273715e62a7e745c676219
parent4366d9172b9d3d6f2746c64d3ee6621d4ca27f5e (diff)
parenta04b589994551350112a4e0d439b17bc11d32fe5 (diff)
Merge "Add a removed_package module type" into main
-rw-r--r--android/Android.bp1
-rw-r--r--android/removed_package.go60
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)
+}