# a hypothetical situation: parameter transportation through multiple functions

case	:= default
#case	:= recursive_one
#case	:= recursive_two

# after change in source code, recompiling...
#case	:= non_recursive

eco	= $(call eco1,${1})
eco1	= $(call eco2,${1})
ifneq (${case},recursive_one)
eco2	= $(call eco3,${1})
eco3	= $(shell echo '${1}')
else
eco2	= $(shell echo '${1}')
endif

.SUFFIXES:
.SUFFIXES: .o .c .h

DefaultTarget: a

a:a.c

ifeq (${case},recursive_one)
a:CFLAGS += -DX='"$(call eco,$$$$$$$$$$$$$$$$)"'
endif

ifeq (${case},recursive_two)
a:CFLAGS += -DX='"$(call eco,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$)"'
endif

ifneq (,$(findstring ${case},non_recursive default))
a:CFLAGS += -DX='"$(call eco,$$)"'
endif
