#                                                                    -*-perl-*-

$description = "Test define/endef variable assignments.";

$details = "";

# TEST 0: old-style basic define/endef

run_make_test('
define multi
@echo hi
echo there
endef

all: ; $(multi)
',
              '', "hi\necho there\nthere\n");

# TEST 1: Various new-style define/endef

run_make_test('
FOO = foo

define multi =
echo hi
@echo $(FOO)
endef # this is the end

define simple :=
@echo $(FOO)
endef

define posix ::=
@echo $(FOO)
endef

append = @echo a

define append +=

@echo b
endef

define cond ?= # this is a conditional
@echo first
endef

define cond ?=
@echo second
endef

FOO = there

all: ; $(multi)
	$(simple)
	$(posix)
	$(append)
	$(cond)
',
              '', "echo hi\nhi\nthere\nfoo\nfoo\na\nb\nfirst\n");

# TEST 1a: Various new-style define/endef, with no spaces

run_make_test('
FOO = foo

define multi=
echo hi
@echo $(FOO)
endef # this is the end

define simple:=
@echo $(FOO)
endef

define posix::=
@echo $(FOO)
endef

append = @echo a

define append+=

@echo b
endef

define cond?= # this is a conditional
@echo first
endef

define cond?=
@echo second
endef

FOO = there

all: ; $(multi)
	$(simple)
	$(posix)
	$(append)
	$(cond)
',
              '', "echo hi\nhi\nthere\nfoo\nfoo\na\nb\nfirst\n");

# TEST 2: define in true section of conditional (containing conditional)

run_make_test('
FOO = foo
NAME = def
def =
ifdef BOGUS
 define  $(subst e,e,$(NAME))     =
  ifeq (1,1)
   FOO = bar
  endif
 endef
endif

$(eval $(def))
all: ; @echo $(FOO)
',
              'BOGUS=1', "bar\n");

# TEST 3: define in false section of conditional (containing conditional)

run_make_test(undef, '', "foo\n");

# TEST 4: nested define (supported?)

run_make_test('
define outer
 define inner
  A = B
 endef
endef

$(eval $(outer))

outer: ; @echo $(inner)
',
              '', "A = B\n");

# TEST 5: NEGATIVE: Missing variable name

run_make_test('
NAME =
define $(NAME)  =
ouch
endef
all: ; @echo ouch
',
              '', "#MAKEFILE#:3: *** empty variable name.  Stop.\n", 512);

# TEST 6: NEGATIVE: extra text after define

run_make_test('
NAME =
define NAME = $(NAME)
ouch
endef
all: ; @echo ok
',
              '', "#MAKEFILE#:3: extraneous text after 'define' directive\nok\n");

# TEST 7: NEGATIVE: extra text after endef

run_make_test('
NAME =
define NAME =
ouch
endef $(NAME)
all: ; @echo ok
',
              '', "#MAKEFILE#:5: extraneous text after 'endef' directive\nok\n");

# TEST 8: NEGATIVE: missing endef

run_make_test('
NAME =
all: ; @echo ok
define NAME =
ouch
endef$(NAME)
',
              '', "#MAKEFILE#:4: *** missing 'endef', unterminated 'define'.  Stop.\n", 512);

# -------------------------
# Make sure that prefix characters apply properly to define/endef values.
#
# There's a bit of oddness here if you try to use a variable to hold the
# prefix character for a define.  Even though something like this:
#
#       define foo
#       echo bar
#       endef
#
#       all: ; $(V)$(foo)
#
# (where V=@) can be seen by the user to be obviously different than this:
#
#       define foo
#       $(V)echo bar
#       endef
#
#       all: ; $(foo)
#
# and the user thinks it should behave the same as when the "@" is literal
# instead of in a variable, that can't happen because by the time make
# expands the variables for the command line and sees it begins with a "@" it
# can't know anymore whether the prefix character came before the variable
# reference or was included in the first line of the variable reference.

# TEST #5
# -------

run_make_test('
define FOO
$(V1)echo hello
$(V2)echo world
endef
all: ; @$(FOO)
', '', 'hello
world');

# TEST #6
# -------

run_make_test(undef, 'V1=@ V2=@', 'hello
world');

# TEST #7
# -------

run_make_test('
define FOO
$(V1)echo hello
$(V2)echo world
endef
all: ; $(FOO)
', 'V1=@', 'hello
echo world
world');

# TEST #8
# -------

run_make_test(undef, 'V2=@', 'echo hello
hello
world');

# TEST #9
# -------

run_make_test(undef, 'V1=@ V2=@', 'hello
world');

# TEST #10
# -------
# Test the basics; a "@" internally to the variable applies to only one line.
# A "@" before the variable applies to the entire variable.

run_make_test('
define FOO
@echo hello
echo world
endef
define BAR
echo hello
echo world
endef

all: foo bar
foo: ; $(FOO)
bar: ; @$(BAR)
', '', 'hello
echo world
world
hello
world
');

1;
