Fixed Savannah bug #12267.

This commit is contained in:
Boris Kolpackov 2005-03-10 09:14:09 +00:00
parent 18251c4633
commit d584d0c1c6
4 changed files with 60 additions and 4 deletions

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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;