#                                                              -*-mode: perl-*-

$description = "Test GNU Make's auto-reinvocation feature.";

$details = "\
If the makefile or one it includes can be rebuilt then it is, and make
is reinvoked.  We create a rule to rebuild the makefile from a temp
file, then touch the temp file to make it newer than the makefile.";

$omkfile = $makefile;

&utouch(-600, 'incl.mk');
# For some reason if we don't do this then the test fails for systems
# with sub-second timestamps, maybe + NFS?  Not sure.
&utouch(-1, 'incl-1.mk');

run_make_test('
all: ; @echo running rules.

#MAKEFILE# incl.mk: incl-1.mk ; @echo rebuilding $@; echo >> $@

include incl.mk',
              '', "rebuilding incl.mk\nrunning rules.\n");

# Make sure updating the makefile itself also works

&utouch(-600, $omkfile);

run_make_test(undef, '', "rebuilding #MAKEFILE#\nrunning rules.\n");

&rmfiles('incl.mk', 'incl-1.mk');


# In this test we create an included file that's out-of-date, but then
# the rule doesn't update it.  Make shouldn't re-exec.

&utouch(-600, 'b','a');
#&utouch(-10, 'a');
&touch('c');

run_make_test('
all: ; @echo hello

a : b ; echo >> $@

b : c ; test -f $@ || echo >> $@

c: ; echo >> $@

include $(F)',
              'F=a', "test -f b || echo >> b\nhello\n");

# Now try with the file we're not updating being the actual file we're
# including: this and the previous one test different parts of the code.

run_make_test(undef, 'F=b', "test -f b || echo >> b\nhello\n");

&rmfiles('a','b','c');

# Ensure command line variables are preserved properly across re-exec
# Tests for Savannah bug #30723

run_make_test('
ifdef RECURSE
-include foo30723
endif
recurse: ; @$(MAKE) -f $(MAKEFILE_LIST) RECURSE=1 test
test: ; @echo F.O=$(F.O)
foo30723: ; @touch $@
',
              '--no-print-directory F.O=bar', "F.O=bar\n");

unlink('foo30723');

# If ANY makefile is rebuilt then we should re-exec

run_make_test('
all: ; @echo RESTARTS=$(MAKE_RESTARTS)

m1.d: ; @echo $@; touch $@

m2.d: m1.d ; @test -f $< || { echo $@; touch $@; }

include m1.d
-include m2.d
',
              '', "m1.d\nRESTARTS=1\n");

unlink('m1.d', 'm2.d');

# Same as before but be sure we get error messages for un-created makefiles
run_make_test('
all: ; @echo RESTARTS=$(MAKE_RESTARTS)

m1.d: ; @echo $@; touch $@

m2.d: m1.d ; @test -f $< || { echo $@; touch $@; }

include m1.d m2.d
', '',
              # This runs afoul of https://savannah.gnu.org/bugs/?61226
              0 ? "m1.d\n#MAKEFILE#:8: m2.d: $ERR_no_such_file"
                  : "m1.d\nRESTARTS=1",
              0 ? 512 : 0);

unlink('m1.d', 'm2.d');

# sv 61226.
# This set of four cases tests two aspects of make.
#
# 1. If a rule has no prerequisites or recipe, and the target of the rule is a
# nonexistent file, then make imagines this target to have been updated
# whenever its rule is run.
#
# 2. Make does not re-execute itself in this case of imagined target.
#
# Test case 1.
# Make imagines hello.d was updated by a rule without recipe and without
# prereqs.
# This should succeed.
# Make should not re-execute itself.
run_make_test('
hello.o: hello.d; $(info RESTARTS=$(MAKE_RESTARTS))
hello.d:
include hello.d
', '', "RESTARTS=\n#MAKE#: 'hello.o' is up to date.");

# Test case 2.
# Make imagines hello.d was updated by a rule with a recipe and without
# prereqs.
# This should succeed.
# Make should not re-execute itself.
run_make_test('
hello.o: hello.d; $(info RESTARTS=$(MAKE_RESTARTS))
hello.d:; $(info $@)
include hello.d
', '', "hello.d\nRESTARTS=\n#MAKE#: 'hello.o' is up to date.");

&touch('hello.td');
# Test case 3.
# Make imagines hello.d was updated by a rule without a recipe and with
# prereqs.
# This should succeed.
# Make should not re-execute itself.
run_make_test('
hello.o: hello.d; $(info RESTARTS=$(MAKE_RESTARTS))
hello.d: hello.td
include hello.d
', '', "RESTARTS=\n#MAKE#: 'hello.o' is up to date.");

# Test case 4.
# Same test as three tests above, but the rule has both recipe and prereqs.
# Make should report this error.
run_make_test('
hello.o: hello.d; $(info $@)
hello.d: hello.td; $(info $@)
include hello.d
', '',
              # This runs afoul of https://savannah.gnu.org/bugs/?61226
              0 ? "hello.d\n#MAKEFILE#:4: hello.d: $ERR_no_such_file"
                  : "hello.d\nhello.o\n#MAKE#: 'hello.o' is up to date.",
              0 ? 512 : 0);

unlink('hello.td');

# Test SV 62088 : make sure we don't re-invoke for stdin makefiles.
# The test framework doesn't seem to have a good way to do this.

create_file('input.mk', "all:;\$(info all)\n");

close(STDIN);
open(STDIN, "<", 'input.mk') || die "input.mk: $!\n";

run_make_test('', '-sf -', "all\n");


# This close MUST come at the end of the test!!
close(STDIN);
unlink('input.mk');

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