mirror of
https://git.savannah.gnu.org/git/make.git
synced 2025-01-27 01:27:58 +00:00
Fixed Savannah bug #12267.
This commit is contained in:
parent
18251c4633
commit
d584d0c1c6
4 changed files with 60 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
|||
2005-03-10 Boris Kolpackov <boris@kolpackov.net>
|
||||
|
||||
* implicit.c (pattern_search): Mark an intermediate target as
|
||||
precious if it happened to be a prerequisite of some (other)
|
||||
target. Fixes Savannah bug #12267.
|
||||
|
||||
2005-03-09 Boris Kolpackov <boris@kolpackov.net>
|
||||
|
||||
* main.c (main): Use o_file instead of o_default when defining
|
||||
|
|
22
implicit.c
22
implicit.c
|
@ -798,15 +798,29 @@ pattern_search (struct file *file, int archive,
|
|||
of F below are null before we change them. */
|
||||
|
||||
struct file *imf = d->intermediate_file;
|
||||
register struct file *f = enter_file (imf->name);
|
||||
register 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
|
||||
precious. */
|
||||
if (f != 0)
|
||||
f->precious = 1;
|
||||
else
|
||||
f = enter_file (imf->name);
|
||||
|
||||
f->deps = imf->deps;
|
||||
f->cmds = imf->cmds;
|
||||
f->stem = imf->stem;
|
||||
f->also_make = imf->also_make;
|
||||
f->is_target = 1;
|
||||
imf = lookup_file (d->intermediate_pattern);
|
||||
if (imf != 0 && imf->precious)
|
||||
f->precious = 1;
|
||||
|
||||
if (!f->precious)
|
||||
{
|
||||
imf = lookup_file (d->intermediate_pattern);
|
||||
if (imf != 0 && imf->precious)
|
||||
f->precious = 1;
|
||||
}
|
||||
|
||||
f->intermediate = 1;
|
||||
f->tried_implicit = 1;
|
||||
for (dep = f->deps; dep != 0; dep = dep->next)
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2005-03-10 Boris Kolpackov <boris@kolpackov.net>
|
||||
|
||||
* scripts/features/patternrules: Add a test for Savannah bug #12267.
|
||||
|
||||
2005-03-09 Boris Kolpackov <boris@kolpackov.net>
|
||||
|
||||
* scripts/variables/DEFAULT_TARGET: Add a test for Savannah
|
||||
|
|
|
@ -4,6 +4,12 @@ $description = "Test pattern rules.";
|
|||
|
||||
$details = "";
|
||||
|
||||
use Cwd;
|
||||
|
||||
$dir = cwd;
|
||||
$dir =~ s,.*/([^/]+)$,../$1,;
|
||||
|
||||
|
||||
# TEST #1: Make sure that multiple patterns where the same target
|
||||
# can be built are searched even if the first one fails
|
||||
# to match properly.
|
||||
|
@ -63,5 +69,31 @@ foo.in: ; @:
|
|||
foo.out');
|
||||
|
||||
|
||||
# TEST #3: make sure intermidite files that also happened to be
|
||||
# prerequisites are not removed (Savannah bug #12267).
|
||||
#
|
||||
run_make_test('
|
||||
$(dir)/foo.o:
|
||||
|
||||
$(dir)/foo.y:
|
||||
@echo $@
|
||||
|
||||
%.c: %.y
|
||||
touch $@
|
||||
|
||||
%.o: %.c
|
||||
@echo $@
|
||||
|
||||
.PHONY: install
|
||||
install: $(dir)/foo.c
|
||||
|
||||
',
|
||||
"dir=$dir",
|
||||
"$dir/foo.y
|
||||
touch $dir/foo.c
|
||||
$dir/foo.o");
|
||||
|
||||
unlink("$dir/foo.c");
|
||||
|
||||
# This tells the test driver that the perl test script executed properly.
|
||||
1;
|
||||
|
|
Loading…
Reference in a new issue