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

$details = "";

# TEST #0: Test handing of '$' in prerequisites with and without second
# expansion.

# If we don't support archives then the prerequisite is different
my $prereq = exists $FEATURES{'archives'} ? '$' : '$(PRE)';

run_make_test(q!
ifdef SE
  .SECONDEXPANSION:
endif
foo$$bar: bar$$baz bar$$biz ; @echo '$@ : $^'
PRE = one two
bar$$baz: $$(PRE)
baraz: $$(PRE)
PRE = three four
.DEFAULT: ; @echo '$@'
!,
              '',
              "$prereq\nbar\$biz\nfoo\$bar : bar\$baz bar\$biz");

run_make_test(undef, 'SE=1', "three\nfour\nbariz\nfoo\$bar : baraz bariz");

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

foo: bar baz

foo: biz | buz

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

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


# Test #2: target/pattern -specific variables.
#
run_make_test(q!
.SECONDEXPANSION:
.DEFAULT: ; @echo '$@'

foo.x: $$a $$b

foo.x: a := bar

%.x: b := baz
!,
'',
'bar
baz
');


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

all: foo bar baz

# Subtest #1
foo: foo.1; @:
foo: foo.2
foo: foo.3

# Subtest #2
bar: bar.2
bar: bar.1; @:
bar: bar.3

# Subtest #3
baz: baz.1
baz: baz.2
baz: ; @:
!,
'',
'foo.1
foo.2
foo.3
bar.1
bar.2
bar.3
baz.1
baz.2
');

# TEST #4: eval in a context where there is no reading_file
run_make_test(q!
.SECONDEXPANSION:
all : $$(eval $$(info test))
!,
            '', "test\n#MAKE#: Nothing to be done for 'all'.\n");

# TEST #5: (NEGATIVE) catch eval in a prereq list trying to create new
# target/prereq relationships.

run_make_test(q!
.SECONDEXPANSION:
proj1.exe : proj1.o $$(eval $$(test))
define test
proj1.o : proj1.c
proj1.c: proj1.h
endef
!,
              '', "#MAKE#: *** prerequisites cannot be defined in recipes.  Stop.\n", 512);


# Automatic $$+ variable expansion issue.  Savannah bug #25780
run_make_test(q!
all : foo foo
.SECONDEXPANSION:
all : $$+ ; @echo '$+'
foo : ;
!,
                  '', "foo foo foo foo\n");


# Automatic $$+ variable expansion issue.  Savannah bug #25780
run_make_test(q!
all : bar bar
bar : ;
q%x : ;
.SECONDEXPANSION:
a%l: q1x $$+ q2x ; @echo '$+'
!,
                  '', "q1x bar bar q2x bar bar\n");


# Allow patsubst shorthand in second expansion context.
# Requires the colon to be quoted.  Savannah bug #16545
run_make_test(q!
.PHONY: foo.bar
.SECONDEXPANSION:
foo: $$(@\\:%=%.bar); @echo '$^'
!,
              '', "foo.bar\n");

# SV 54549 : Ensure we don't free used variable_sets
run_make_test(q!
foo: -lcat

# Removing second expansion prevents segfault
.SECONDEXPANSION:
foo: $$@.o ;

# Having an empty command here prevents segfault unless,
# the environment is empty. `env -i make foo`
# MFLAGS=-w or MAKEFLAGS=-w `env MFLAGS=-w make foo`
# libcat.a target calls an extra command, `@true \n @touch $@`
# odd.
%.o: ; @true

# Having an empty command prevents segfault.
-l%: lib%.a ; @true

# Not creating libcat.a here prevents segfault,
libcat.a: ; @touch $@
!,
              '', q!#MAKEFILE#:16: Recipe was specified for file '-lcat' at #MAKEFILE#:19,
#MAKEFILE#:16: but '-lcat' is now considered the same file as 'libcat.a'.
#MAKEFILE#:16: Recipe for 'libcat.a' will be ignored in favor of the one for '-lcat'.!);
unlink('libcat.a');

# SV 28456 : Don't reset $$< for default recipes
run_make_test(q!
.SECONDEXPANSION:

.PHONY: biz baz
biz: baz ;
biz: $$(info $$<)
!,
              '', "baz\n#MAKE#: Nothing to be done for 'biz'.\n");

1;
