xref: /aosp_15_r20/build/make/common/json.mk (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
1*9e94795aSAndroid Build Coastguard Worker4space :=$= $(space)$(space)$(space)$(space)
2*9e94795aSAndroid Build Coastguard Workerinvert_bool =$= $(if $(strip $(1)),,true)
3*9e94795aSAndroid Build Coastguard Worker
4*9e94795aSAndroid Build Coastguard Worker# Converts a list to a JSON list.
5*9e94795aSAndroid Build Coastguard Worker# $1: List separator.
6*9e94795aSAndroid Build Coastguard Worker# $2: List.
7*9e94795aSAndroid Build Coastguard Worker_json_list =$= [$(if $(2),"$(subst $(1),"$(comma)",$(2))")]
8*9e94795aSAndroid Build Coastguard Worker
9*9e94795aSAndroid Build Coastguard Worker# Converts a space-separated list to a JSON list.
10*9e94795aSAndroid Build Coastguard Workerjson_list =$= $(call _json_list,$(space),$(1))
11*9e94795aSAndroid Build Coastguard Worker
12*9e94795aSAndroid Build Coastguard Worker# Converts a comma-separated list to a JSON list.
13*9e94795aSAndroid Build Coastguard Workercsv_to_json_list =$= $(call _json_list,$(comma),$(1))
14*9e94795aSAndroid Build Coastguard Worker
15*9e94795aSAndroid Build Coastguard Worker# Adds or removes 4 spaces from _json_indent
16*9e94795aSAndroid Build Coastguard Workerjson_increase_indent =$= $(eval _json_indent := $$(_json_indent)$$(4space))
17*9e94795aSAndroid Build Coastguard Workerjson_decrease_indent =$= $(eval _json_indent := $$(subst _,$$(space),$$(patsubst %____,%,$$(subst $$(space),_,$$(_json_indent)))))
18*9e94795aSAndroid Build Coastguard Worker
19*9e94795aSAndroid Build Coastguard Worker# 1: Key name
20*9e94795aSAndroid Build Coastguard Worker# 2: Value
21*9e94795aSAndroid Build Coastguard Workeradd_json_val =$= $(eval _json_contents := $$(_json_contents)$$(_json_indent)"$$(strip $$(1))": $$(strip $$(2))$$(comma)$$(newline))
22*9e94795aSAndroid Build Coastguard Workeradd_json_str =$= $(call add_json_val,$(1),"$(strip $(2))")
23*9e94795aSAndroid Build Coastguard Workeradd_json_list =$= $(call add_json_val,$(1),$(call json_list,$(patsubst %,%,$(2))))
24*9e94795aSAndroid Build Coastguard Workeradd_json_csv =$= $(call add_json_val,$(1),$(call csv_to_json_list,$(strip $(2))))
25*9e94795aSAndroid Build Coastguard Workeradd_json_bool =$= $(call add_json_val,$(1),$(if $(strip $(2)),true,false))
26*9e94795aSAndroid Build Coastguard Workeradd_json_map =$= $(eval _json_contents := $$(_json_contents)$$(_json_indent)"$$(strip $$(1))": {$$(newline))$(json_increase_indent)
27*9e94795aSAndroid Build Coastguard Workeradd_json_map_anon =$= $(eval _json_contents := $$(_json_contents)$$(_json_indent){$$(newline))$(json_increase_indent)
28*9e94795aSAndroid Build Coastguard Workerend_json_map =$= $(json_decrease_indent)$(eval _json_contents := $$(_json_contents)$$(if $$(filter %$$(comma),$$(lastword $$(_json_contents))),__SV_END)$$(_json_indent)},$$(newline))
29*9e94795aSAndroid Build Coastguard Workeradd_json_array =$= $(eval _json_contents := $$(_json_contents)$$(_json_indent)"$$(strip $$(1))": [$$(newline))$(json_increase_indent)
30*9e94795aSAndroid Build Coastguard Workerend_json_array =$= $(json_decrease_indent)$(eval _json_contents := $$(_json_contents)$$(if $$(filter %$$(comma),$$(lastword $$(_json_contents))),__SV_END)$$(_json_indent)],$$(newline))
31*9e94795aSAndroid Build Coastguard Worker
32*9e94795aSAndroid Build Coastguard Worker# Clears _json_contents to start a new json file
33*9e94795aSAndroid Build Coastguard Workerjson_start =$= $(eval _json_contents := {$$(newline))$(eval _json_indent := $$(4space))
34*9e94795aSAndroid Build Coastguard Worker
35*9e94795aSAndroid Build Coastguard Worker# Adds the trailing close brace to _json_contents, and removes any trailing commas if necessary
36*9e94795aSAndroid Build Coastguard Workerjson_end =$= $(eval _json_contents := $$(subst $$(comma)$$(newline)__SV_END,$$(newline),$$(_json_contents)__SV_END}$$(newline)))
37*9e94795aSAndroid Build Coastguard Worker
38*9e94795aSAndroid Build Coastguard Workerjson_contents =$= $(_json_contents)
39