Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29357f5e authored by Chris Sarbora's avatar Chris Sarbora
Browse files

Allow finer control over how product variables are inherited.

Change-Id: I3abc22eea94293d1d0ebf0a81b396ebea0baf5a8
parent d559aacd
Loading
Loading
Loading
Loading
+56 −7
Original line number Diff line number Diff line
@@ -114,24 +114,66 @@ define dump-products
$(foreach p,$(PRODUCTS),$(call dump-product,$(p)))
endef

#
# Internal function. Appends inherited product variables to an existing one.
#
# $(1): Product variable to operate on
# $(2): Value to append
#
define inherit-product_append-var
  $(eval $(1) := $($(1)) $(INHERIT_TAG)$(strip $(2)))
endef

#
# Internal function. Prepends inherited product variables to an existing one.
#
# $(1): Product variable to operate on
# $(2): Value to prepend
#
define inherit-product_prepend-var
  $(eval $(1) := $(INHERIT_TAG)$(strip $(2)) $($(1)))
endef

#
# Internal function. Tracks visited notes during inheritance resolution.
#
# $(1): Product being inherited
#
define inherit-product_track-node
  $(eval inherit_var := \
      PRODUCTS.$(strip $(word 1,$(_include_stack))).INHERITS_FROM) \
  $(eval $(inherit_var) := $(sort $($(inherit_var)) $(strip $(1)))) \
  $(eval inherit_var:=) \
  $(eval ALL_PRODUCTS := $(sort $(ALL_PRODUCTS) $(word 1,$(_include_stack))))
endef

#
# $(1): product to inherit
#
# Does three things:
#  1. Inherits all of the variables from $1.
#  1. Inherits all of the variables from $1, prioritizing existing settings.
#  2. Records the inheritance in the .INHERITS_FROM variable
#  3. Records that we've visited this node, in ALL_PRODUCTS
#
define inherit-product
  $(foreach v,$(_product_var_list), \
      $(eval $(v) := $($(v)) $(INHERIT_TAG)$(strip $(1)))) \
  $(eval inherit_var := \
      PRODUCTS.$(strip $(word 1,$(_include_stack))).INHERITS_FROM) \
  $(eval $(inherit_var) := $(sort $($(inherit_var)) $(strip $(1)))) \
  $(eval inherit_var:=) \
  $(eval ALL_PRODUCTS := $(sort $(ALL_PRODUCTS) $(word 1,$(_include_stack))))
      $(call inherit-product_append-var,$(v),$(1))) \
  $(call inherit-product_track-node,$(1))
endef

#
# $(1): product to inherit
#
# Does three things:
#  1. Inherits all of the variables from $1, prioritizing inherited settings.
#  2. Records the inheritance in the .INHERITS_FROM variable
#  3. Records that we've visited this node, in ALL_PRODUCTS
#
define prepend-product
  $(foreach v,$(_product_var_list), \
      $(call inherit-product_prepend-var,$(v),$(1))) \
  $(call inherit-product_track-node,$(1))
endef

#
# Do inherit-product only if $(1) exists
@@ -140,6 +182,13 @@ define inherit-product-if-exists
  $(if $(wildcard $(1)),$(call inherit-product,$(1)),)
endef

#
# Do inherit-product-prepend only if $(1) exists
#
define prepend-product-if-exists
  $(if $(wildcard $(1)),$(call prepend-product,$(1)),)
endef

#
# $(1): product makefile list
#