mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-25 05:29:46 +00:00
Do not force targets to be SECONDARY
In SV 43677 we forced targets to be secondary if we found an intermediate file that was listed as a prerequisite of another target. This overrides .INTERMEDIATE settings, so doesn't work. Now that we have an is_explicit flag in targets, use that instead. * src/implicit.c (pattern_search): Remove setting of secondary. Preserve the value of the is_explicit flag when creating a new file target, and consider it when setting the intermediate flag. * tests/scripts/features/patternrules: Add a test w/out INTERMEDIATE * tests/scripts/targets/INTERMEDIATE: Add a test with INTERMEDIATE
This commit is contained in:
parent
f2b130bda8
commit
6682fbc2cb
3 changed files with 28 additions and 8 deletions
|
@ -963,13 +963,7 @@ pattern_search (struct file *file, int archive,
|
|||
struct file *imf = pat->file;
|
||||
struct file *f = lookup_file (imf->name);
|
||||
|
||||
/* We don't want to delete an intermediate file that happened
|
||||
to be a prerequisite of some (other) target. Mark it as
|
||||
secondary. We don't want it to be precious as that disables
|
||||
DELETE_ON_ERROR etc. */
|
||||
if (f != 0)
|
||||
f->secondary = 1;
|
||||
else
|
||||
if (!f)
|
||||
f = enter_file (imf->name);
|
||||
|
||||
f->deps = imf->deps;
|
||||
|
@ -984,8 +978,9 @@ pattern_search (struct file *file, int archive,
|
|||
f->pat_searched = imf->pat_searched;
|
||||
f->also_make = imf->also_make;
|
||||
f->is_target = 1;
|
||||
f->is_explicit |= imf->is_explicit || pat->is_explicit;
|
||||
f->notintermediate |= imf->notintermediate;
|
||||
f->intermediate |= !(pat->is_explicit || f->notintermediate);
|
||||
f->intermediate |= !f->is_explicit && !f->notintermediate;
|
||||
f->tried_implicit = 1;
|
||||
|
||||
imf = lookup_file (pat->pattern);
|
||||
|
|
|
@ -444,5 +444,17 @@ hello.tsk:
|
|||
|
||||
unlink('hello.tsk');
|
||||
|
||||
# A target explicitly listed as a prerequisite of a pattern rule, is still
|
||||
# considered mentioned and "ought to exist".
|
||||
|
||||
run_make_test(q!
|
||||
1.all: 1.q ; touch $@
|
||||
%.q: 1.r ; touch $@
|
||||
%.r: ; touch $@
|
||||
!,
|
||||
'', "touch 1.r\ntouch 1.q\ntouch 1.all\n");
|
||||
|
||||
unlink('1.all', '1.q', '1.r');
|
||||
|
||||
# This tells the test driver that the perl test script executed properly.
|
||||
1;
|
||||
|
|
|
@ -120,5 +120,18 @@ all: hello.z
|
|||
|
||||
unlink('hello.z');
|
||||
|
||||
# A target explicitly listed as a prerequisite of a pattern rule, is still
|
||||
# considered mentioned and "ought to exist".
|
||||
|
||||
run_make_test(q!
|
||||
1.all: 1.q ; touch $@
|
||||
%.q: 1.r ; touch $@
|
||||
%.r: ; touch $@
|
||||
.INTERMEDIATE: 1.r
|
||||
!,
|
||||
'', "touch 1.r\ntouch 1.q\ntouch 1.all\nrm 1.r\n");
|
||||
|
||||
unlink('1.all', '1.q', '1.r');
|
||||
|
||||
# This tells the test driver that the perl test script executed properly.
|
||||
1;
|
||||
|
|
Loading…
Reference in a new issue