1*2bece88fSMasahiro Yamada# SPDX-License-Identifier: GPL-2.0
2*2bece88fSMasahiro Yamada
3*2bece88fSMasahiro Yamada# Shorthand
4*2bece88fSMasahiro Yamadawarning = $(warning-if,y,$(1))
5*2bece88fSMasahiro Yamada
6*2bece88fSMasahiro Yamada# You can not pass commas directly to a function since they are treated as
7*2bece88fSMasahiro Yamada# delimiters. You can use the following trick to do so.
8*2bece88fSMasahiro Yamadacomma   := ,
9*2bece88fSMasahiro Yamada$(warning,hello$(comma) world)
10*2bece88fSMasahiro Yamada
11*2bece88fSMasahiro Yamada# Like Make, single quotes, double quotes, spaces are treated verbatim.
12*2bece88fSMasahiro Yamada# The following prints the text as-is.
13*2bece88fSMasahiro Yamada$(warning,  ' " '"   ' ''' "'")
14*2bece88fSMasahiro Yamada
15*2bece88fSMasahiro Yamada# Unlike Make, '$' has special meaning only when it is followed by '('.
16*2bece88fSMasahiro Yamada# No need to escape '$' itself.
17*2bece88fSMasahiro Yamada$(warning,$)
18*2bece88fSMasahiro Yamada$(warning,$$)
19*2bece88fSMasahiro Yamada$ := 1
20*2bece88fSMasahiro Yamada$(warning,$($))
21*2bece88fSMasahiro Yamada
22*2bece88fSMasahiro Yamada# You need a trick to escape '$' followed by '('
23*2bece88fSMasahiro Yamada# The following should print "$(X)". It should not be expanded further.
24*2bece88fSMasahiro Yamadadollar := $
25*2bece88fSMasahiro Yamada$(warning,$(dollar)(X))
26*2bece88fSMasahiro Yamada
27*2bece88fSMasahiro Yamada# You need a trick to treat unbalanced parentheses.
28*2bece88fSMasahiro Yamada# The following should print "(".
29*2bece88fSMasahiro Yamadaleft_paren := (
30*2bece88fSMasahiro Yamada$(warning,$(left_paren))
31*2bece88fSMasahiro Yamada
32*2bece88fSMasahiro Yamada# A simple expanded should not be expanded multiple times.
33*2bece88fSMasahiro Yamada# The following should print "$(X)". It should not be expanded further.
34*2bece88fSMasahiro YamadaY := $(dollar)(X)
35*2bece88fSMasahiro Yamada$(warning,$(Y))
36*2bece88fSMasahiro Yamada
37*2bece88fSMasahiro Yamada# The following should print "$(X)" as well.
38*2bece88fSMasahiro YamadaY = $(dollar)(X)
39*2bece88fSMasahiro Yamada$(warning,$(Y))
40*2bece88fSMasahiro Yamada
41*2bece88fSMasahiro Yamada# The following should print "$(".
42*2bece88fSMasahiro Yamada# It should not be emit "unterminated reference" error.
43*2bece88fSMasahiro Yamadaunterminated := $(dollar)(
44*2bece88fSMasahiro Yamada$(warning,$(unterminated))
45