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
This commit is contained in:
@@ -979,6 +979,11 @@ ifneq (,$(LOCAL_SOONG_INSTALLED_MODULE))
|
||||
$(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 @@ else ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE))
|
||||
$(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
|
||||
|
@@ -810,12 +810,14 @@ $(call add-all-host-cross-to-host-cross-required-modules-deps)
|
||||
|
||||
# Sets up dependencies such that whenever a target module is installed,
|
||||
# any other target modules listed in $(ALL_MODULES.$(m).REQUIRED_FROM_TARGET) will also be installed
|
||||
# This doesn't apply to ORDERONLY_INSTALLED items.
|
||||
define add-all-target-to-target-required-modules-deps
|
||||
$(foreach m,$(ALL_MODULES), \
|
||||
$(eval r := $(ALL_MODULES.$(m).REQUIRED_FROM_TARGET)) \
|
||||
$(if $(r), \
|
||||
$(eval r := $(call module-installed-files,$(r))) \
|
||||
$(eval t_m := $(filter $(TARGET_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \
|
||||
$(eval t_m := $(filter-out $(ALL_MODULES.$(m).ORDERONLY_INSTALLED), $(ALL_MODULES.$(m).INSTALLED))) \
|
||||
$(eval t_r := $(filter $(TARGET_OUT_ROOT)/%, $(r))) \
|
||||
$(eval t_r := $(filter-out $(t_m), $(t_r))) \
|
||||
$(if $(t_m), $(eval $(call add-required-deps, $(t_m),$(t_r)))) \
|
||||
|
Reference in New Issue
Block a user