#                                                                    -*-perl-*-

$description = "Test the eval function.";

$details = "This is a test of the eval function in GNU make.
This function will evaluate inline makefile syntax and incorporate the
results into its internal database.\n";

open(MAKEFILE,"> $makefile");

print MAKEFILE <<'EOF';
define Y
  all:: ; @echo $AA
  A = B
endef

X = $(eval $(value Y))

$(eval $(shell echo A = A))
$(eval $(Y))
$(eval A = C)
$(eval $(X))
EOF

close(MAKEFILE);

&run_make_with_options($makefile, "", &get_logfile);

# Create the answer to what should be produced by this Makefile
$answer = "AA\nBA\n";

&compare_output($answer,&get_logfile(1));

# Test to make sure defining variables when we have extra scope pushed works
# as expected.

$makefile2 = &get_tmpfile;

open(MAKEFILE,"> $makefile2");

print MAKEFILE <<'EOF';
VARS = A B

VARSET = $(1) = $(2)

$(foreach v,$(VARS),$(eval $(call VARSET,$v,$v)))

all: ; @echo A = $(A) B = $(B)
EOF

close(MAKEFILE);

&run_make_with_options($makefile2, "", &get_logfile);

# Create the answer to what should be produced by this Makefile
$answer = "A = A B = B\n";

&compare_output($answer,&get_logfile(1));

# Test to make sure eval'ing inside conditionals works properly

$makefile3 = &get_tmpfile;

open(MAKEFILE,"> $makefile3");

print MAKEFILE <<'EOF';
FOO = foo

all:: ; @echo it

define Y
  all:: ; @echo worked
endef

ifdef BAR
$(eval $(Y))
endif

EOF

close(MAKEFILE);

&run_make_with_options($makefile3, "", &get_logfile);
$answer = "it\n";
&compare_output($answer,&get_logfile(1));

&run_make_with_options($makefile3, "BAR=1", &get_logfile);
$answer = "it\nworked\n";
&compare_output($answer,&get_logfile(1));


# TEST very recursive invocation of eval

$makefile3 = &get_tmpfile;

open(MAKEFILE,"> $makefile3");

print MAKEFILE <<'EOF';
..9 := 0 1 2 3 4 5 6 7 8 9
rev=$(eval res:=)$(foreach word,$1,$(eval res:=${word} ${res}))${res}
a:=$(call rev,${..9})
all: ; @echo '[$(a)]'

EOF

close(MAKEFILE);

&run_make_with_options($makefile3, "", &get_logfile);
$answer = "[         9 8 7 6 5 4 3 2 1 0 ]\n";
&compare_output($answer,&get_logfile(1));


# TEST eval with no filename context.
# The trick here is that because EVAR is taken from the environment, it must
# be evaluated before every command is invoked.  Make sure that works, when
# we have no file context for reading_file (bug # 6195)

$makefile4 = &get_tmpfile;

open(MAKEFILE,"> $makefile4");

print MAKEFILE <<'EOF';
EVAR = $(eval FOBAR = 1)
all: ; @echo "OK"

EOF

close(MAKEFILE);

$ENV{EVAR} = '1';
&run_make_with_options($makefile4, "", &get_logfile);
$answer = "OK\n";
&compare_output($answer,&get_logfile(1));


# Clean out previous information to allow new run_make_test() interface.
# If we ever convert all the above to run_make_test() we can remove this line.
$makefile = undef;

# Test handling of backslashes in strings to be evaled.

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

run_make_test('
define FOO
all: ; @echo '."'".'he\llo'."'".'
	@echo world
endef
$(eval $(FOO))
', '', 'he\llo
world');


# We don't allow new target/prerequisite relationships to be defined within a
# command script, because these are evaluated after snap_deps() and that
# causes lots of problems (like core dumps!)
# See Savannah bug # 12124.

run_make_test('deps: ; $(eval deps: foo)', '',
              '#MAKEFILE#:1: *** prerequisites cannot be defined in recipes.  Stop.',
              512);

1;
