#                                                                    -*-perl-*-
$description = "Test pattern-specific variable settings.";

$details = "\
Create a makefile containing various flavors of pattern-specific variable
settings, override and non-override, and using various variable expansion
rules, semicolon interference, etc.";

open(MAKEFILE,"> $makefile");

print MAKEFILE <<'EOF';
all: one.x two.x three.x
FOO = foo
BAR = bar
BAZ = baz
one.x: override FOO = one
%.x: BAR = two
t%.x: BAR = four
thr% : override BAZ = three
one.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ)
four.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ)
baz: ; @echo $@: $(FOO) $(BAR) $(BAZ)

# test matching multiple patterns
a%: AAA = aaa
%b: BBB = ccc
a%: BBB += ddd
%b: AAA ?= xxx
%b: AAA += bbb
.PHONY: ab
ab: ; @echo $(AAA); echo $(BBB)
EOF

close(MAKEFILE);


# TEST #1 -- basics

&run_make_with_options($makefile, "", &get_logfile);
$answer = "one.x: one two baz\ntwo.x: foo four baz\nthree.x: foo four three\n";
&compare_output($answer,&get_logfile(1));


# TEST #2 -- try the override feature

&run_make_with_options($makefile, "BAZ=five", &get_logfile);
$answer = "one.x: one two five\ntwo.x: foo four five\nthree.x: foo four three\n";
&compare_output($answer,&get_logfile(1));


# TEST #3 -- make sure patterns are inherited properly

&run_make_with_options($makefile, "four.x", &get_logfile);
$answer = "baz: foo two baz\nfour.x: foo two baz\n";
&compare_output($answer,&get_logfile(1));


# TEST #4 -- test multiple patterns matching the same target

&run_make_with_options($makefile, "ab", &get_logfile);
$answer = "aaa bbb\nccc ddd\n";
&compare_output($answer,&get_logfile(1));

# TEST #5 -- test pattern-specific exported variables
#
run_make_test('
/%: export foo := foo

/bar:
	@echo $(foo) $$foo
', '', 'foo foo');


# TEST #6 -- test expansion of pattern-specific simple variables
#
run_make_test('
.PHONY: all

all: inherit := good $$t
all: bar baz

b%: pattern := good $$t

global := original $$t


# normal target
#
ifdef rec
bar: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
else
bar: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
endif

bar: ; @echo \'normal: $a;\'


# pattern target
#
ifdef rec
%z: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
else
%z: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
endif

%z: ; @echo \'pattern: $a;\'


global := new $$t
',
'',
'normal: global: original $t pattern:  inherit: ;
pattern: global: original $t pattern:  inherit: ;');


# TEST #7 -- test expansion of pattern-specific recursive variables
#
run_make_test(undef, # reuse previous makefile
'rec=1',
'normal: global: new $t pattern: good $t inherit: good $t;
pattern: global: new $t pattern: good $t inherit: good $t;');

# TEST #8: override in pattern-specific variables

run_make_test('
a%: override FOO += f1
a%: FOO += f2
ab: ; @echo "$(FOO)"
',
              '', "f1\n");

run_make_test(undef, 'FOO=C', "C f1\n");

# TEST #9: Test shortest stem selection in pattern-specific variables.

run_make_test('
%-mt.x: x := two
%.x: x := one

all: foo.x foo-mt.x

foo.x: ;@echo $x
foo-mt.x: ;@echo $x
',
'',
"one\ntwo");

1;
