# vars for use by utils
empty :=
space := $(empty) $(empty)
colon := $(empty):$(empty)
underscore := $(empty)_$(empty)
# $(call match-word,w1,w2)
# checks if w1 == w2
# How it works
# if (w1-w2 not empty or w2-w1 not empty) then not_match else match
#
# returns true or empty
#$(warning :$(1): :$(2): :$(subst $(1),,$(2)):) \
#$(warning :$(2): :$(1): :$(subst $(2),,$(1)):) \
#
define match-word
$(strip \
$(if $(or $(subst $(1),$(empty),$(2)),$(subst $(2),$(empty),$(1))),,true) \
)
endef
# $(call find-word-in-list,w,wlist)
# finds an exact match of word w in word list wlist
#
# How it works
# fill wlist spaces with colon
# wrap w with colon
# search word w in list wl, if found match m, return stripped word w
#
# returns stripped word or empty
define find-word-in-list
$(strip \
$(eval wl:= $(colon)$(subst $(space),$(colon),$(strip $(2)))$(colon)) \
$(eval w:= $(colon)$(strip $(1))$(colon)) \
$(eval m:= $(findstring $(w),$(wl))) \
$(if $(m),$(1),) \
)
endef
# $(call match-word-in-list,w,wlist)
# does an exact match of word w in word list wlist
# How it works
# if the input word is not empty
# return output of an exact match of word w in wordlist wlist
# else
# return empty
# returns true or empty
define match-word-in-list
$(strip \
$(if $(strip $(1)), \
$(call match-word,$(call find-word-in-list,$(1),$(2)),$(strip $(1))), \
) \
)
endef
# $(call match-prefix,p,delim,w/wlist)
# matches prefix p in wlist using delimiter delim
#
# How it works
# trim the words in wlist w
# if find-word-in-list returns not empty
# return true
# else
# return empty
#
define match-prefix
$(strip \
$(eval w := $(strip $(1)$(strip $(2)))) \
$(eval text := $(patsubst $(w)%,$(1),$(3))) \
$(if $(call match-word-in-list,$(1),$(text)),true,) \
)
endef
# ----
# The following utilities are meant for board platform specific
# featurisation
# $(call get-vendor-board-platforms,v)
# returns list of board platforms for vendor v
define get-vendor-board-platforms
$($(1)_BOARD_PLATFORMS)
endef
# $(call is-board-platform,bp)
# returns true or empty
define is-board-platform
$(call match-word,$(1),$(TARGET_BOARD_PLATFORM))
endef
# $(call is-not-board-platform,bp)
# returns true or empty
define is-not-board-platform
$(if $(call match-word,$(1),$(TARGET_BOARD_PLATFORM)),,true)
endef
# $(call is-board-platform-in-list,bpl)
# returns true or empty
define is-board-platform-in-list
$(call match-word-in-list,$(TARGET_BOARD_PLATFORM),$(1))
endef
# $(call is-vendor-board-platform,vendor)
# returns true or empty
define is-vendor-board-platform
$(strip \
$(call match-word-in-list,$(TARGET_BOARD_PLATFORM),\
$(call get-vendor-board-platforms,$(1)) \
) \
)
endef
# $(call is-chipset-in-board-platform,chipset)
# does a prefix match of chipset in TARGET_BOARD_PLATFORM
# uses underscore as a delimiter
#
# returns true or empty
define is-chipset-in-board-platform
$(call match-prefix,$(1),$(underscore),$(TARGET_BOARD_PLATFORM))
endef
# $(call is-chipset-prefix-in-board-platform,prefix)
# does a chipset prefix match in TARGET_BOARD_PLATFORM
# assumes '_' and 'a' as the delimiter to the chipset prefix
#
# How it works
# if ($(prefix)_ or $(prefix)a match in board platform)
# return true
# else
# return empty
#
define is-chipset-prefix-in-board-platform
$(strip \
$(eval delim_a := $(empty)a$(empty)) \
$(if \
$(or \
$(call match-prefix,$(1),$(delim_a),$(TARGET_BOARD_PLATFORM)), \
$(call match-prefix,$(1),$(underscore),$(TARGET_BOARD_PLATFORM)), \
), \
true, \
) \
)
endef
#----
# The following utilities are meant for Android Code Name
# specific featurisation
#
# refer http://source.android.com/source/build-numbers.html
# for code names and associated sdk versions
CUPCAKE_SDK_VERSIONS := 3
DONUT_SDK_VERSIONS := 4
ECLAIR_SDK_VERSIONS := 5 6 7
FROYO_SDK_VERSIONS := 8
GINGERBREAD_SDK_VERSIONS := 9 10
HONEYCOMB_SDK_VERSIONS := 11 12 13
ICECREAM_SANDWICH_SDK_VERSIONS := 14 15
JELLY_BEAN_SDK_VERSIONS := 16 17 18
# $(call is-platform-sdk-version-at-least,version)
# version is a numeric SDK_VERSION defined above
define is-platform-sdk-version-at-least
$(strip \
$(if $(filter 1,$(shell echo "$$(( $(PLATFORM_SDK_VERSION) >= $(1) ))" )), \
true, \
) \
)
endef
# $(call is-android-codename,codename)
# codename is one of cupcake,donut,eclair,froyo,gingerbread,icecream
# please refer the $(codename)_SDK_VERSIONS declared above
define is-android-codename
$(strip \
$(if \
$(call match-word-in-list,$(PLATFORM_SDK_VERSION),$($(1)_SDK_VERSIONS)), \
true, \
) \
)
endef
# $(call is-android-codename-in-list,cnlist)
# cnlist is combination/list of android codenames
define is-android-codename-in-list
$(strip \
$(eval acn := $(empty)) \
$(foreach \
i,$(1),\
$(eval acn += \
$(if \
$(call \
match-word-in-list,\
$(PLATFORM_SDK_VERSION),\
$($(i)_SDK_VERSIONS)\
),\
true,\
)\
)\
) \
$(if $(strip $(acn)),true,) \
)
endef