188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copyright (C) 2007 The Android Open Source Project 388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Licensed under the Apache License, Version 2.0 (the "License"); 588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# you may not use this file except in compliance with the License. 688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# You may obtain a copy of the License at 788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# http://www.apache.org/licenses/LICENSE-2.0 988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Unless required by applicable law or agreed to in writing, software 1188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# distributed under the License is distributed on an "AS IS" BASIS, 1288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# See the License for the specific language governing permissions and 1488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# limitations under the License. 1588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 1788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Clears a list of variables using ":=". 1988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 2088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# E.g., 2188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(call clear-var-list,A B C) 2288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# would be the same as: 2388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# A := 2488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# B := 2588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# C := 2688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 2788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): list of variable names to clear 2888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 2988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine clear-var-list 3088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach v,$(1),$(eval $(v):=)) 3188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 3288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 3388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 3488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copies a list of variables into another list of variables. 3588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The target list is the same as the source list, but has 3688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# a dotted prefix affixed to it. 3788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 3888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# E.g., 3988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(call copy-var-list, PREFIX, A B) 4088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# would be the same as: 4188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# PREFIX.A := $(A) 4288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# PREFIX.B := $(B) 4388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 4488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): destination prefix 4588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): list of variable names to copy 4688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 4788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-var-list 4888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach v,$(2),$(eval $(strip $(1)).$(v):=$($(v)))) 4988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 5088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 5188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 5288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Moves a list of variables into another list of variables. 5388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The variable names differ by a prefix. After moving, the 5488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# source variable is cleared. 5588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 5688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# NOTE: Spaces are not allowed around the prefixes. 5788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 5888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# E.g., 5988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(call move-var-list,SRC,DST,A B) 6088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# would be the same as: 6188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# DST.A := $(SRC.A) 6288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# SRC.A := 6388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# DST.B := $(SRC.B) 6488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# SRC.B := 6588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 6688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): source prefix 6788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): destination prefix 6888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(3): list of variable names to move 6988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 7088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine move-var-list 7188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach v,$(3), \ 7288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(2).$(v) := $($(1).$(v))) \ 7388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(1).$(v) :=) \ 7488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) 7588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 7688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 7788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 7888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): haystack 7988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): needle 8088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 8188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Guarantees that needle appears at most once in haystack, 8288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# without changing the order of other elements in haystack. 8388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# If needle appears multiple times, only the first occurrance 8488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# will survive. 8588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 8688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# How it works: 8788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 8888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# - Stick everything in haystack into a single word, 8988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# with "|||" separating the words. 9088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# - Replace occurrances of "|||$(needle)|||" with "||| |||", 9188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# breaking haystack back into multiple words, with spaces 9288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# where needle appeared. 9388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# - Add needle between the first and second words of haystack. 9488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# - Replace "|||" with spaces, breaking haystack back into 9588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# individual words. 9688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 9788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine uniq-word 9888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip \ 9901efddb0b8c641a9ebfd955173dd58e015fbe903Jeff Brown $(if $(filter-out 0 1,$(words $(filter $(2),$(1)))), \ 10088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval h := |||$(subst $(space),|||,$(strip $(1)))|||) \ 10188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval h := $(subst |||$(strip $(2))|||,|||$(space)|||,$(h))) \ 10288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval h := $(word 1,$(h)) $(2) $(wordlist 2,9999,$(h))) \ 10388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(subst |||,$(space),$(h)) \ 10488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project , \ 10588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(1) \ 10688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )) 10788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 10888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 10988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectINHERIT_TAG := @inherit: 11088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 11188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 11288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Walks through the list of variables, each qualified by the prefix, 11388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# and finds instances of words beginning with INHERIT_TAG. Scrape 11488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# off INHERIT_TAG from each matching word, and return the sorted, 11588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# unique set of those words. 11688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 11788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# E.g., given 11888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# PREFIX.A := A $(INHERIT_TAG)aaa B C 11988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# PREFIX.B := B $(INHERIT_TAG)aaa C $(INHERIT_TAG)bbb D E 12088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Then 12188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(call get-inherited-nodes,PREFIX,A B) 12288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# returns 12388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# aaa bbb 12488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 12588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): variable prefix 12688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): list of variables to check 12788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 12888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine get-inherited-nodes 12988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(sort \ 13088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(subst $(INHERIT_TAG),, \ 13188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(filter $(INHERIT_TAG)%, \ 13288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach v,$(2),$($(1).$(v))) \ 13388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ))) 13488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 13588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 13688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 13788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# for each variable ( (prefix + name) * vars ): 13888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# get list of inherited words; if not empty: 13988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# for each inherit: 14088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# replace the first occurrence with (prefix + inherited + var) 14188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# clear the source var so we can't inherit the value twice 14288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 14388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): context prefix 14488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): name of this node 14588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(3): list of variable names 14688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 14788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _expand-inherited-values 14888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach v,$(3), \ 14988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### "Shorthand for the name of the target variable") \ 15088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _eiv_tv := $(1).$(2).$(v)) \ 15188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### "Get the list of nodes that this variable inherits") \ 15288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _eiv_i := \ 15388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(sort \ 15488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(patsubst $(INHERIT_TAG)%,%, \ 15588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(filter $(INHERIT_TAG)%, $($(_eiv_tv)) \ 15688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )))) \ 15788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach i,$(_eiv_i), \ 15888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### "Make sure that this inherit appears only once") \ 15988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(_eiv_tv) := \ 16088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call uniq-word,$($(_eiv_tv)),$(INHERIT_TAG)$(i))) \ 16188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### "Expand the inherit tag") \ 16288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(_eiv_tv) := \ 1631d89773c1dd0e433a2dbd0ef8aedaf4c20f6ff74Doug Zongker $(strip \ 1641d89773c1dd0e433a2dbd0ef8aedaf4c20f6ff74Doug Zongker $(patsubst $(INHERIT_TAG)$(i),$($(1).$(i).$(v)), \ 1651d89773c1dd0e433a2dbd0ef8aedaf4c20f6ff74Doug Zongker $($(_eiv_tv))))) \ 16688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### "Clear the child so DAGs don't create duplicate entries" ) \ 16788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(1).$(i).$(v) :=) \ 16888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### "If we just inherited ourselves, it's a cycle.") \ 16988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(filter $(INHERIT_TAG)$(2),$($(_eiv_tv))), \ 17088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(warning Cycle detected between "$(2)" and "$(i)" for context "$(1)") \ 17188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(error import of "$(2)" failed) \ 17288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 17388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 17488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 17588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _eiv_tv :=) \ 17688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _eiv_i :=) 17788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 17888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 17988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 18088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): context prefix 18188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): makefile representing this node 18288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(3): list of node variable names 18388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1846a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project# _include_stack contains the list of included files, with the most recent files first. 18588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _import-node 1866a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(eval _include_stack := $(2) $$(_include_stack)) 18788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call clear-var-list, $(3)) 188d47804e929eaa69a41f04a5acb7aed1dfbfb4388Sean McNeil $(eval LOCAL_PATH := $(patsubst %/,%,$(dir $(2)))) 1897b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato $(eval MAKEFILE_LIST :=) 19088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval include $(2)) 1917b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato $(eval _included := $(filter-out $(2),$(MAKEFILE_LIST))) 1927b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato $(eval MAKEFILE_LIST :=) 193d47804e929eaa69a41f04a5acb7aed1dfbfb4388Sean McNeil $(eval LOCAL_PATH :=) 19488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call copy-var-list, $(1).$(2), $(3)) 19588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call clear-var-list, $(3)) 19688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 19788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(1).$(2).inherited := \ 19888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call get-inherited-nodes,$(1).$(2),$(3))) 19988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call _import-nodes-inner,$(1),$($(1).$(2).inherited),$(3)) 20088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 20188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call _expand-inherited-values,$(1),$(2),$(3)) 20288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 20388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(1).$(2).inherited :=) 2046a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(eval _include_stack := $(wordlist 2,9999,$$(_include_stack))) 20588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 20688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 20788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 2087b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato# This will generate a warning for _included above 2097b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato# $(if $(_included), \ 2107b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato# $(eval $(warning product spec file: $(2)))\ 2117b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato# $(foreach _inc,$(_included),$(eval $(warning $(space)$(space)$(space)includes: $(_inc)))),) 2127b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato# 2137b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato 2147b86bfb03ee785cb828139c94bb86817d3249667Joe Onorato# 21588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): context prefix 21688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): list of makefiles representing nodes to import 21788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(3): list of node variable names 21888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 21988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: Make the "does not exist" message more helpful; 22088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# should print out the name of the file trying to include it. 22188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _import-nodes-inner 22288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach _in,$(2), \ 22388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(wildcard $(_in)), \ 22488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $($(1).$(_in).seen), \ 22588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### "skipping already-imported $(_in)") \ 22688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project , \ 22788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(1).$(_in).seen := true) \ 22888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call _import-node,$(1),$(strip $(_in)),$(3)) \ 22988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 23088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project , \ 23188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(error $(1): "$(_in)" does not exist) \ 23288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 23388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) 23488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 23588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 23688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 23788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): output list variable name, like "PRODUCTS" or "DEVICES" 23888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): list of makefiles representing nodes to import 23988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(3): list of node variable names 24088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 24188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine import-nodes 24288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(if \ 24388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach _in,$(2), \ 24488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _node_import_context := _nic.$(1).[[$(_in)]]) \ 2456a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(if $(_include_stack),$(eval $(error ASSERTION FAILED: _include_stack \ 2466a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project should be empty here: $(_include_stack))),) \ 2476a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(eval _include_stack := ) \ 24888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call _import-nodes-inner,$(_node_import_context),$(_in),$(3)) \ 24988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(call move-var-list,$(_node_import_context).$(_in),$(1).$(_in),$(3)) \ 25088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _node_import_context :=) \ 25188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval $(1) := $($(1)) $(_in)) \ 2526a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(if $(_include_stack),$(eval $(error ASSERTION FAILED: _include_stack \ 2536a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project should be empty here: $(_include_stack))),) \ 25488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 25588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project,) 25688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 257