#! -*-perl-*-

$description = "Test the behaviour of the .SECONDARY target.";

$details = "\
Test the behavior of the .SECONDARY special target.
Create a makefile where a file would not normally be considered
intermediate, then specify it as .SECONDARY.  Build and note that it's
not automatically deleted.  Delete the file.  Rebuild to ensure that
it's not created if it doesn't exist but doesn't need to be built.
Change the original and ensure that the secondary file and the ultimate
target are both rebuilt, and that the secondary file is not deleted.

Try this with implicit rules and explicit rules: both should work.\n";

open(MAKEFILE,"> $makefile");

print MAKEFILE <<'EOF';

.SECONDARY: foo.e

# Implicit rule test
%.d : %.e ; cp $< $@
%.e : %.f ; cp $< $@

foo.d: foo.e

# Explicit rule test
foo.c: foo.e ; cp $< $@
EOF

close(MAKEFILE);

# TEST #1

&utouch(-20, 'foo.f');

&run_make_with_options($makefile,'foo.d',&get_logfile);
$answer = "cp foo.f foo.e\ncp foo.e foo.d\n";
&compare_output($answer, &get_logfile(1));

# TEST #2

unlink('foo.e');

&run_make_with_options($makefile,'foo.d',&get_logfile);
$answer = "$make_name: 'foo.d' is up to date.\n";
&compare_output($answer, &get_logfile(1));

# TEST #3

&utouch(-10, 'foo.d');
&touch('foo.f');

&run_make_with_options($makefile,'foo.d',&get_logfile);
$answer = "cp foo.f foo.e\ncp foo.e foo.d\n";
&compare_output($answer, &get_logfile(1));

# TEST #4

&run_make_with_options($makefile,'foo.c',&get_logfile);
$answer = "cp foo.e foo.c\n";
&compare_output($answer, &get_logfile(1));

# TEST #5

unlink('foo.e');

&run_make_with_options($makefile,'foo.c',&get_logfile);
$answer = "$make_name: 'foo.c' is up to date.\n";
&compare_output($answer, &get_logfile(1));

# TEST #6

&utouch(-10, 'foo.c');
&touch('foo.f');

&run_make_with_options($makefile,'foo.c',&get_logfile);
$answer = "cp foo.f foo.e\ncp foo.e foo.c\n";
&compare_output($answer, &get_logfile(1));

unlink('foo.f', 'foo.e', 'foo.d', 'foo.c');

# TEST #7 -- test the "global" .SECONDARY, with no targets.

$makefile2 = &get_tmpfile;

open(MAKEFILE, "> $makefile2");

print MAKEFILE <<'EOF';
.SECONDARY:

final: intermediate
intermediate: source

final intermediate source:
	echo $< > $@
EOF

close(MAKEFILE);

&utouch(-10, 'source');
touch('final');

&run_make_with_options($makefile2, '', &get_logfile);
$answer = "$make_name: 'final' is up to date.\n";
&compare_output($answer, &get_logfile(1));

unlink('source', 'final', 'intermediate');


# TEST #8 -- test the "global" .SECONDARY, with .PHONY.

touch('version2');
run_make_test('
.PHONY: version
.SECONDARY:
version2: version ; @echo GOOD
all: version2',
              'all', 'GOOD');

unlink('version2');

# TEST #9 -- Savannah bug #15919
# The original fix for this bug caused a new bug, shown here.

touch(qw(1.a 2.a));

run_make_test('
%.c : %.b ; cp $< $@
%.b : %.a ; cp $< $@
all : 1.c 2.c
2.a: 1.c', '-rR -j',
'cp 1.a 1.b
cp 1.b 1.c
cp 2.a 2.b
cp 2.b 2.c
rm 1.b 2.b');

unlink(qw(1.a 2.a 1.c 2.c));

# TEST #10 -- Savannah bug #15919
touch('test.0');
run_make_test('
.SECONDARY : test.1 test.2 test.3

test : test.4

%.4 : %.int %.3 ; touch $@

%.int : %.3 %.2 ; touch $@

%.3 : | %.2 ; touch $@

%.2 : %.1 ; touch $@

%.1 : %.0 ; touch $@', '-rR -j 2',
'touch test.1
touch test.2
touch test.3
touch test.int
touch test.4
rm test.int');

# After a touch of test.0 it should give the same output, except we don't need
# to rebuild test.3 (order-only)
sleep(1);
touch('test.0');
run_make_test(undef, '-rR -j 2',
'touch test.1
touch test.2
touch test.int
touch test.4
rm test.int');

# With both test.0 and test.3 updated it should still build everything except
# test.3
sleep(1);
touch('test.0', 'test.3');
run_make_test(undef, '-rR -j 2',
'touch test.1
touch test.2
touch test.int
touch test.4
rm test.int');

unlink(qw(test.0 test.1 test.2 test.3 test.4));

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