# Simple assignments (with bad formatting, as an additional test) simple-recursive=foo simple-immediate:=bar # Should become recursive simple-recursive-2+=baz whitespaced = foo # Simple += test. += should preserve the flavor of the variable (simple vs. # recursive). preserve-recursive = foo preserve-recursive += bar preserve-immediate := foo preserve-immediate += bar # Recursive substitution recursive = $(foo) $(bar) $($(b-char)a$(z-char)) recursive += $(indir) foo = abc bar = def baz = ghi b-char = b z-char = z indir = jkl $(indir-2) indir-2 = mno # Immediate substitution def = foo immediate := $(undef)$(def)$(undef)$(def) def = bar undef = bar # Function calls # Chained function call quote = "$(1)" "$(2)" rev-quote = $(quote,$(2),$(1)) surround-rev-quote = $(0) $(rev-quote,$(1),$(2)) $(0) surround-rev-quote-unused-arg = $(surround-rev-quote,$(1),$(2)) $(3) # No value is passed for $(3), so it expands to nothing fn-indir = surround-rev-quote messy-fn-res = $($(fn-indir)-unused-arg, a b (,) , c d ) # Special characters in function call comma = , right-paren = ) dollar = $ left-paren = ( fn = "$(1)" special-chars-fn-res = $(fn,$(comma)$(dollar)$(left-paren)foo$(right-paren)) # Variable expansions in various locations (verified by checking how the symbol # prints) qaz = QAZ echo = $(1) ignore-first = $(2) config PRINT_ME string "$(ENV_1)" if ($(echo,FOO) && $(echo,BAR)) || !$(echo,BAZ) || !(($(qaz))) default "$(echo,"foo")" if "foo $(echo,"bar") baz" = "$(undefined)" # Expansion within a symbol token, with deliberate sloppiness config PRINT_$(ignore-first, ,ME)_TOO bool "foo" default FOO$(ignore-first, ,BAR)BAZ$(qaz) if $(qaz)&&$(qaz)FOO&&x$(ignore-first, ,xx) # Recursive expansion (throws an exception) rec-1 = x $(rec-2) y rec-2 = x $(rec-3) y rec-3 = x $(rec-1) y # Functions are allowed to reference themselves, but an exception is thrown if # the function seems to be stuck (the recursion gets too deep) safe-fn-rec = $($(1)) safe-fn-rec-2 = $(safe-fn-rec,safe-fn-rec-3) safe-fn-rec-3 = foo safe-fn-rec-res = $(safe-fn-rec,safe-fn-rec-2) unsafe-fn-rec = $(unsafe-fn-rec,$(1)) # Expansion in the left-hand side of assignments dummy-arg-fn = bar lhs-indir-1 = lhs-indir-2 lhs-indir-2 = -baz rhs = value # LHS expands to foo-bar-baz foo-$(dummy-arg-fn, ignored argument )$($(lhs-indir-1)) = $(rhs) # Expands to empty string, accepted $(undefined) # Variable with a space in its name empty = space = $(empty) $(empty) foo$(space)bar = value space-var-res = $(foo bar) # Built-in functions # Expands to "baz qaz" shell-res = $(shell,false && echo foo bar || echo baz qaz) # Warns about output on stderr, expands to nothing shell-stderr-res := $(shell,echo message on stderr >&2) # Nested parens in macro call. Should give a single argument. Test it with # $(shell) to get a free argument number check. parens-res = pre-$(shell,echo '(a,$(b-char),(c,d),e)')-post # Expands to the current location location-res := $(filename):$(lineno) # Adds one warning, expands to nothing $(warning-if,,no warning) $(warning-if,n,no warning) warning-res := $(warning-if,y,a warning) # Does not cause an error, expands to nothing error-n-res := $(error-if,n,oops) # Causes an error when expanded error-y-res = $(error-if,y,oops) # Environment variables (for testing Kconfig.env_vars). ENV_1 is already # referenced above. env_ref_1 := xxx $(ENV_2) xxx env_ref_2 := $(shell,echo $(ENV_3)) env_ref_3 := env_ref_3 += $(ENV_4) $(warning-if,$(ENV_5),$(ENV_UNDEFINED)) source "$(ENV_6)" env_ref_4 = $(ENV_7) # Never evaluated