diff --git a/core/definitions.mk b/core/definitions.mk index 13855587c..d93cd1a38 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -890,41 +890,6 @@ $(shell $(call echo-error,$(LOCAL_MODULE_MAKEFILE),$(LOCAL_MODULE): $(1))) $(error done) endef -########################################################### -## Package filtering -########################################################### - -# Given a list of installed modules (short or long names) -# return a list of the packages (yes, .apk packages, not -# modules in general) that are overridden by this list and, -# therefore, should not be installed. -# $(1): mixed list of installed modules -# TODO: This is fragile; find a reliable way to get this information. -define _get-package-overrides - $(eval ### Discard any words containing slashes, unless they end in .apk, \ - ### in which case trim off the directory component and the suffix. \ - ### If there are no slashes, keep the entire word.) - $(eval _gpo_names := $(subst /,@@@ @@@,$(1))) - $(eval _gpo_names := \ - $(filter %.apk,$(_gpo_names)) \ - $(filter-out %@@@ @@@%,$(_gpo_names))) - $(eval _gpo_names := $(patsubst %.apk,%,$(_gpo_names))) - $(eval _gpo_names := $(patsubst @@@%,%,$(_gpo_names))) - - $(eval ### Remove any remaining words that contain dots.) - $(eval _gpo_names := $(subst .,@@@ @@@,$(_gpo_names))) - $(eval _gpo_names := $(filter-out %@@@ @@@%,$(_gpo_names))) - - $(eval ### Now we have a list of any words that could possibly refer to \ - ### packages, although there may be words that do not. Only \ - ### real packages will be present under PACKAGES.*, though.) - $(foreach _gpo_name,$(_gpo_names),$(PACKAGES.$(_gpo_name).OVERRIDES)) -endef - -define get-package-overrides -$(sort $(strip $(call _get-package-overrides,$(1)))) -endef - ########################################################### ## Output the command lines, or not ########################################################### diff --git a/core/main.mk b/core/main.mk index df22f6911..54d7c23d6 100644 --- a/core/main.mk +++ b/core/main.mk @@ -902,18 +902,31 @@ $(foreach lt,$(ALL_LINK_TYPES),\ # Of the modules defined by the component makefiles, # determine what we actually want to build. + +# Expand a list of modules to the modules that they override (if any) +# $(1): The list of modules. +define module-overrides +$(foreach m,$(1),$(PACKAGES.$(m).OVERRIDES) $(EXECUTABLES.$(m).OVERRIDES)) +endef + ########################################################### ## Expand a module name list with REQUIRED modules ########################################################### # $(1): The variable name that holds the initial module name list. # the variable will be modified to hold the expanded results. # $(2): The initial module name list. +# $(3): The list of overridden modules. # Returns empty string (maybe with some whitespaces). define expand-required-modules $(eval _erm_req := $(foreach m,$(2),$(ALL_MODULES.$(m).REQUIRED))) \ -$(eval _erm_new_modules := $(sort $(filter-out $($(1)),$(_erm_req))))\ -$(if $(_erm_new_modules),$(eval $(1) += $(_erm_new_modules))\ - $(call expand-required-modules,$(1),$(_erm_new_modules))) +$(eval _erm_new_modules := $(sort $(filter-out $($(1)),$(_erm_req)))) \ +$(eval _erm_new_overrides := $(call module-overrides,$(_erm_new_modules))) \ +$(eval _erm_all_overrides := $(3) $(_erm_new_overrides)) \ +$(eval _erm_new_modules := $(filter-out $(_erm_all_overrides), $(_erm_new_modules))) \ +$(eval $(1) := $(filter-out $(_erm_new_overrides),$($(1)))) \ +$(eval $(1) += $(_erm_new_modules)) \ +$(if $(_erm_new_modules),\ + $(call expand-required-modules,$(1),$(_erm_new_modules),$(_erm_all_overrides))) endef # Transforms paths relative to PRODUCT_OUT to absolute paths. @@ -953,8 +966,7 @@ define product-installed-files $(if $(BOARD_VNDK_VERSION),vndk_package) \ ) \ $(eval ### Filter out the overridden packages and executables before doing expansion) \ - $(eval _pif_overrides := $(foreach p, $(_pif_modules), $(PACKAGES.$(p).OVERRIDES))) \ - $(eval _pif_overrides += $(foreach m, $(_pif_modules), $(EXECUTABLES.$(m).OVERRIDES))) \ + $(eval _pif_overrides := $(call module-overrides,$(_pif_modules))) \ $(eval _pif_modules := $(filter-out $(_pif_overrides), $(_pif_modules))) \ $(eval ### Resolve the :32 :64 module name) \ $(eval _pif_modules_32 := $(patsubst %:32,%,$(filter %:32, $(_pif_modules)))) \ @@ -966,7 +978,7 @@ define product-installed-files $(eval ### For the rest we add both) \ $(eval _pif_modules += $(call get-32-bit-modules, $(_pif_modules_rest))) \ $(eval _pif_modules += $(_pif_modules_rest)) \ - $(call expand-required-modules,_pif_modules,$(_pif_modules)) \ + $(call expand-required-modules,_pif_modules,$(_pif_modules),$(_pif_overrides)) \ $(call module-installed-files, $(_pif_modules)) \ $(call resolve-product-relative-paths,\ $(foreach cf,$(PRODUCTS.$(_mk).PRODUCT_COPY_FILES),$(call word-colon,2,$(cf)))) @@ -1056,18 +1068,6 @@ modules_to_install := $(sort \ $(CUSTOM_MODULES) \ ) -# Some packages may override others using LOCAL_OVERRIDES_PACKAGES. -# Filter out (do not install) any overridden packages. -overridden_packages := $(call get-package-overrides,$(modules_to_install)) -ifdef overridden_packages -# old_modules_to_install := $(modules_to_install) - modules_to_install := \ - $(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk %/$(p).odex %/$(p).vdex), \ - $(modules_to_install)) -endif -#$(error filtered out -# $(filter-out $(modules_to_install),$(old_modules_to_install))) - # Don't include any GNU General Public License shared objects or static # libraries in SDK images. GPL executables (not static/dynamic libraries) # are okay if they don't link against any closed source libraries (directly