#                                                                    -*-perl-*-
$description = "Test second expansion in ordinary rules.";

$details = "";

use Cwd;

$dir = cwd;
$dir =~ s,.*/([^/]+)$,../$1,;


# Test #1: automatic variables.
#
run_make_test(q!
.SECONDEXPANSION:
.DEFAULT: ; @echo '$@'

foo.a: bar baz

foo.a: biz | buz

foo.%: 1.$$@ \
       2.$$< \
       $$(addprefix 3.,$$^) \
       $$(addprefix 4.,$$+) \
       5.$$| \
       6.$$*
	@:

1.foo.a \
2.bar \
3.bar \
3.baz \
3.biz \
4.bar \
4.baz \
4.biz \
5.buz \
6.a:
	@echo '$@'

!,
'',
'1.foo.a
2.bar
3.bar
3.baz
3.biz
4.bar
4.baz
4.biz
5.buz
6.a
bar
baz
biz
buz
');


# Test #2: target/pattern -specific variables.
#
run_make_test(q!
.SECONDEXPANSION:
foo.x:

foo.%: $$(%_a) $$(%_b) bar
	@:

foo.x: x_a := bar

%.x: x_b := baz

bar baz: ; @echo '$@'
!,
              '', "bar\nbaz\n");


# Test #3: order of prerequisites.
#
run_make_test(q!
.SECONDEXPANSION:
.DEFAULT: ; @echo '$@'

all: foo bar baz


# Subtest #1
#
%oo: %oo.1; @:

foo: foo.2

foo: foo.3

foo.1: ; @echo '$@'


# Subtest #2
#
bar: bar.2

%ar: %ar.1; @:

bar: bar.3

bar.1: ; @echo '$@'


# Subtest #3
#
baz: baz.1

baz: baz.2

%az: ; @:
!,
              '',
'foo.1
foo.2
foo.3
bar.1
bar.2
bar.3
baz.1
baz.2
');


# Test #4: stem splitting logic.
#
run_make_test(q!
.SECONDEXPANSION:
$(dir)/tmp/bar.o:

$(dir)/tmp/foo/bar.c: ; @echo '$@'
$(dir)/tmp/bar/bar.c: ; @echo '$@'
foo.h: ; @echo '$@'

%.o: $$(addsuffix /%.c,foo bar) foo.h
	@echo '$@: {$<} $^'
!,
              "dir=$dir", "$dir/tmp/foo/bar.c
$dir/tmp/bar/bar.c
foo.h
$dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h
");


# Test #5: stem splitting logic and order-only prerequisites.
#
run_make_test(q!
.SECONDEXPANSION:
$(dir)/tmp/foo.o: $(dir)/tmp/foo.c
$(dir)/tmp/foo.c: ; @echo '$@'
bar.h: ; @echo '$@'

%.o: %.c|bar.h
	@echo '$@: {$<} {$|} $^'

!,
              "dir=$dir", "$dir/tmp/foo.c
bar.h
$dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c
");


# Test #6: lack of implicit prerequisites.
#
run_make_test(q!
.SECONDEXPANSION:
foo.o: foo.c
foo.c: ; @echo '$@'

%.o:
	@echo '$@: {$<} $^'
!,
              '', "foo.c\nfoo.o: {foo.c} foo.c\n");


# Test #7: Test stem from the middle of the name.
#
run_make_test(q!
.SECONDEXPANSION:
foobarbaz:

foo%baz: % $$*.1
	@echo '$*'

bar bar.1:
	@echo '$@'
!,
              '', "bar\nbar.1\nbar\n");


# Test #8: Make sure stem triple-expansion does not happen.
#
run_make_test(q!
.SECONDEXPANSION:
foo$$bar:

f%r: % $$*.1
	@echo '$*'

oo$$ba oo$$ba.1:
	@echo '$@'
!,
              '', 'oo$ba
oo$ba.1
oo$ba
');

# Test #9: Check the value of $^
run_make_test(q!
.SECONDEXPANSION:

%.so: | $$(extra) ; @echo $^

foo.so: extra := foo.o
foo.so:
foo.o:
!,
              '', "\n");

# Test #10: Test second expansion with second expansion prerequisites
# Ensures pattern_search() recurses with SE prereqs.
touch('a');
run_make_test(q!
.SECONDEXPANSION:
sim_base_rgg := just_a_name
sim_base_src := a
sim_base_f := a a a
sim_%.f: $${sim_$$*_f}
	echo $@
sim_%.src: $${sim_$$*_src}
	echo $@
sim_%: \
	$$(if $$(sim_$$*_src),sim_%.src) \
	$$(if $$(sim_$$*_f),sim_%.f) \
	$$(if $$(sim_$$*_rgg),$$(sim_$$*_rgg).s)
	echo $@
!,
              '-s sim_base', "#MAKE#: *** No rule to make target 'sim_base'.  Stop.", 512);

unlink('a');

# Ensure that order-only tokens embedded in second expansions are parsed
run_make_test(q!
.SECONDEXPANSION:
PREREQS=p1|p2
P2=p2
all : foo bar
f%o: $$(PREREQS) ; @echo '$@' from '$^' and '$|'
b%r: p1|$$(P2)   ; @echo '$@' from '$^' and '$|'
p% : ; : $@
!,
              "", ": p1\n: p2\nfoo from p1 and p2\nbar from p1 and p2\n");

# This tells the test driver that the perl test script executed properly.
1;
