Do not install required modules from order-only deps
When a vintf_fragments or init_rc file is shared by two modules,
unintended modules are installed due to the shared file.
This was caused by add-all-target-to-target-required-modules-deps.
With the following definitions:
cc_binary {
name: "foo",
vintf_fragments: ["shared.xml"],
required: ["foo-req"],
}
cc_binary {
name: "bar",
vintf_fragments: ["shared.xml"],
}
When installing "bar", surprisingly, "foo-req" is installed due to the
link between "shared.xml" and "foo-req" added by
add-all-target-to-target-required-modules-deps.
To fix that, in this change, vintf_fragments and init_rc files are
marked as "order-only" deps. In
add-all-target-to-target-required-modules-deps, order-only deps are not
used to add links to "required" modules.
Now, with the same definitions, installing "bar" won't installs
"foo-req".
Bug: 198818343
Test: (see above)
Change-Id: I16be0dcb84564c559cb2f4223e2812321ee14729
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 3fef1e4..998cb0d 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -979,6 +979,11 @@
$(my_init_rc_pairs) \
$(my_test_data_pairs) \
$(my_vintf_pairs))
+ # Store the list of vintf/init_rc as order-only dependencies
+ ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED := \
+ $(strip $(ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED) \
+ $(my_init_rc_installed) \
+ $(my_vintf_installed))
else ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE))
ALL_MODULES.$(my_register_name).INSTALLED := \
$(strip $(ALL_MODULES.$(my_register_name).INSTALLED) \
@@ -988,6 +993,10 @@
$(strip $(ALL_MODULES.$(my_register_name).BUILT_INSTALLED) \
$(LOCAL_BUILT_MODULE):$(LOCAL_INSTALLED_MODULE) \
$(my_init_rc_pairs) $(my_test_data_pairs) $(my_vintf_pairs))
+ ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED := \
+ $(strip $(ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED) \
+ $(my_init_rc_installed) \
+ $(my_vintf_installed))
endif
ifdef LOCAL_PICKUP_FILES
# Files or directories ready to pick up by the build system