[SV 62088] Avoid re-exec due to stdin.

The fix for SV 60595 causes make to re-execute when the makefile is
read from stdin.  E.g.
    $ printf 'all:; $(info hello)' | make -sf -

Reported by Sergei Trofimovich <siarheit@google.com>
Test added by Paul Smith <psmith@gnu.org>

* src/main.c (main): Set the mtime of the stdin temporary file.
* tests/scripts/features/reinvoke: Add a test.
This commit is contained in:
Dmitry Goncharov 2022-02-26 17:12:03 -05:00 committed by Paul Smith
parent 1bc35a7ae7
commit 40a6751abf
2 changed files with 14 additions and 0 deletions

View file

@ -1849,6 +1849,8 @@ main (int argc, char **argv, char **envp)
make re-exec. */
f->intermediate = 0;
f->dontcare = 0;
/* Avoid re-exec due to stdin. */
f->last_mtime = f->mtime_before_update = f_mtime (f, 0);
}
}
}

View file

@ -163,5 +163,17 @@ include hello.d
unlink('hello.td');
# Test DV 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");
unlink('input.mk');
# This tells the test driver that the perl test script executed properly.
1;