#                                                                    -*-perl-*-

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

$details = "";

# old-style basic define/endef

run_make_test('
define multi
@echo hi
echo there
endef

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

# 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)
#TAB#$(simple)
#TAB#$(posix)
#TAB#$(append)
#TAB#$(cond)
',
              '', "echo hi\nhi\nthere\nfoo\nfoo\na\nb\nfirst\n");

# Various new-style define/endef, with no spaces

run_make_test(q!
FOO = foo

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

define simple:=
@echo $(FOO)
endef

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

define posixbsd:::=
@echo '$(FOO)$$bar'
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)
#TAB#$(simple)
#TAB#$(posix)
#TAB#$(posixbsd)
#TAB#$(append)
#TAB#$(cond)
!,
              '', "echo hi\nhi\nthere\nfoo\nfoo\nfoo\$bar\na\nb\nfirst\n");

# 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");

# define in false section of conditional (containing conditional)

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

# nested define (supported?)

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

$(eval $(outer))

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

# NEGATIVE: Missing variable name

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

# 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");

# 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");

# 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.

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

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

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

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

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

# 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
');

# Ensure that define can be a target when not appearing in a variable
# definition context.  See SV 59870

run_make_test(q!
define = define

$(define) : ;@echo $@

%:define

all: define foo

%.x : define

foo:;
!,
    '', "define\n");

# Verify that define indented by TAB is warned about.
# This will be an error in future versions.

run_make_test(q!
#TAB#define foo
  @echo foo
endef

all:;$(foo)
!,
              '', "#MAKEFILE#:2: warning: directive lines cannot start with TAB\nfoo\n");

# The failure doesn't happen at define time for nested defines, it happens
# at eval time

run_make_test(q!
foo = echo foo

define bar
#TAB#define foo
#TAB#  echo bar
#TAB#endef
endef

all:;@$(foo)
!,
              '', "foo\n");

run_make_test(q!
foo = echo foo

define bar
#TAB#define foo
#TAB#  echo bar
#TAB#endef
endef

$(eval $(bar))

all:;@echo foo
!,
              '', "#MAKEFILE#:10: warning: directive lines cannot start with TAB\n#MAKEFILE#:10: *** missing 'endef', unterminated 'define'.  Stop.\n",
              512);

# endef indented by TAB is an error; this has always been true!

run_make_test(q!
define foo
  @echo foo
#TAB#endef

all:;$(foo)
!,
              '', "#MAKEFILE#:2: *** missing 'endef', unterminated 'define'.  Stop.\n", 512);

1;
