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

Commit 7162b95f authored by Cole Faust's avatar Cole Faust
Browse files

Deduplicate multiple $(inherit-product) calls

The makefile product inheritance code was supposed
to deduplicate inheritance calls, but there was
a bug in the uniq-word function that caused it
to not work when duplicated words were adjacent.
$(subst |||x|||,||| |||,|||x|||x|||) produces
||| |||x||| instead of ||| ||| |||.

Rewrite the uniq-word function to fix the bug.

This issue was causing a discrepency between
the makefile and starlark based product configurations,
as the starlark implementation didn't have this bug.

Bug: 237019892
Test: ./build/bazel/ci/rbc_dashboard.py --quick on an internal-only product
Change-Id: I543a80746412ffcb9743203399413a0e707111e6
parent dc08c346
Loading
Loading
Loading
Loading
+8 −18
Original line number Diff line number Diff line
@@ -83,27 +83,17 @@ endef
# If needle appears multiple times, only the first occurrance
# will survive.
#
# How it works:
#
# - Stick everything in haystack into a single word,
#   with "|||" separating the words.
# - Replace occurrances of "|||$(needle)|||" with "||| |||",
#   breaking haystack back into multiple words, with spaces
#   where needle appeared.
# - Add needle between the first and second words of haystack.
# - Replace "|||" with spaces, breaking haystack back into
#   individual words.
#
define uniq-word
$(strip \
  $(if $(filter-out 0 1,$(words $(filter $(2),$(1)))), \
    $(eval h := |||$(subst $(space),|||,$(strip $(1)))|||) \
    $(eval h := $(subst |||$(strip $(2))|||,|||$(space)|||,$(h))) \
    $(eval h := $(word 1,$(h)) $(2) $(wordlist 2,9999,$(h))) \
    $(subst |||,$(space),$(h)) \
   , \
    $(1) \
 ))
    $(eval _uniq_word_seen :=) \
    $(foreach w,$(1), \
      $(if $(filter $(2),$(w)), \
        $(if $(_uniq_word_seen),, \
          $(w) \
          $(eval _uniq_word_seen := true)), \
        $(w))), \
  $(1)))
endef

INHERIT_TAG := @inherit:
+1 −1
Original line number Diff line number Diff line
@@ -404,7 +404,7 @@ define inherit-product
    $(eval current_mk := $(strip $(word 1,$(_include_stack)))) \
    $(eval inherit_var := PRODUCTS.$(current_mk).INHERITS_FROM) \
    $(eval $(inherit_var) := $(sort $($(inherit_var)) $(np))) \
    $(call dump-inherit,$(strip $(word 1,$(_include_stack))),$(1)) \
    $(call dump-inherit,$(current_mk),$(1)) \
    $(call dump-config-vals,$(current_mk),inherit))
endef