#                                                                    -*-perl-*-
# $Id$

$description = "Test the let function.";

$details = "This is a test of the let function in gnu make.
This function destructures a list of values and binds each
value to a variable name in a list of variable names.
Superfluous variable names are assigned the empty string and
the remaining values are assigned to the last variable name.
The binding holds for the duration of the evaluation of the
given text and no longer.  The general form of the command
is $(let \$vars,\$list,\$text).  Several types of let
assignments are tested\n";

# check for mismatched var and list word counts
run_make_test(q!
a = bad
b = news
x = $(let a b,1 2,$a $b)
y = $(let a,1 2,$a)
z = $(let a b,1,$a $b)
all:;@echo 'a=,$a,' 'b=,$b,' 'x=,$x,' 'y=,$y,' 'z=,$z,'
!,
    '', "a=,bad, b=,news, x=,1 2, y=,1 2, z=,1 ,\n");

# check for whitespace
run_make_test(q!
a = bad
b = news
x = $(let a b,   1   2   ,+$a+$b+)
y = $(let a,   1  2   ,+$a+)
z = $(let a b,  1   ,+$a+$b+)
all:;@echo 'a=,$a,' 'b=,$b,' 'x=,$x,' 'y=,$y,' 'z=,$z,'
!,
    '', "a=,bad, b=,news, x=,+1+2   +, y=,+1  2   +, z=,+1++,\n");

# Allow empty variable names and empty value list.
# We still expand the list and body.
run_make_test('
null =
v = $(let    ,$(info blankvar),abc)
x = $(let $(null),$(info side-effect),abc)
y = $(let y,,$ydef)
z = $(let a b, ,+$a+$b+)

all: ; @echo $v/$x/$y/$z',
              '', "blankvar\nside-effect\nabc/abc/def/+++\n");

# The example macro from the manual.
run_make_test('
reverse = $(let first rest,$1,$(if $(rest),$(call reverse,$(rest)) )$(first))

all: ; @echo $(call reverse, \
                 moe   miny  meeny eeny \
              )',
              '', "eeny meeny miny moe\n");


# Set an environment variable that we can test in the makefile.
$ENV{FOOFOO} = 'foo foo';

# Verify masking: expansion outside the scope of let is unaffected.
run_make_test('
auto_var = \
  udef \
  CC \
  FOOFOO \
  MAKE \
  foo \
  CFLAGS \
  WHITE \
  @ \
  <
av = $(foreach var, $(auto_var), $(origin $(var)) )
foo = bletch null @ garf
override WHITE := BLACK

define mktarget
target: foo := $(foo)
target: ; @echo $(AR)_$(foo)_
endef

all: auto target
auto: ; @echo $(let $(auto_var),,$(av)) $(av)
$(let AR foo,bar foo ,$(eval $(value mktarget)))',
              '-e WHITE=WHITE CFLAGS=',
              "automatic automatic automatic automatic automatic automatic automatic automatic automatic undefined default environment override default file command line override automatic automatic
ar_foo _
");


# Check some error conditions.
run_make_test('
x = $(let )
y = $x

all: ; @echo $y',
              '',
              "#MAKEFILE#:2: *** insufficient number of arguments (1) to function 'let'.  Stop.",
              512);

run_make_test('
x = $(let x,y)
y := $x

all: ; @echo $y',
              '',
              "#MAKEFILE#:2: *** insufficient number of arguments (2) to function 'let'.  Stop.",
              512);

1;
