summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--implicit.c5
-rw-r--r--tests/ChangeLog4
-rw-r--r--tests/scripts/features/patternrules30
4 files changed, 45 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 5d30cff..917a304 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-12-09 Boris Kolpackov <boris@kolpackov.net>
+
+ * implicit.c (pattern_search): Mark other files that this rule
+ builds as targets so that they are not treated as intermediates
+ by the pattern rule search algorithm. Fixes bug #13022.
+
2005-12-07 Boris Kolpackov <boris@kolpackov.net>
* remake.c (notice_finished_file): Propagate the change of
diff --git a/implicit.c b/implicit.c
index ad873f1..cfd6629 100644
--- a/implicit.c
+++ b/implicit.c
@@ -928,6 +928,11 @@ pattern_search (struct file *file, int archive,
if (f && f->precious)
new->file->precious = 1;
+ /* Set the is_target flag so that this file is not treated
+ as intermediate by the pattern rule search algorithm and
+ file_exists_p cannot pick it up yet. */
+ new->file->is_target = 1;
+
file->also_make = new;
}
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 93cac87..e222ef1 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,7 @@
+2005-12-09 Boris Kolpackov <boris@kolpackov.net>
+
+ * scripts/features/patternrules: Add a test for bug #13022.
+
2005-12-07 Boris Kolpackov <boris@kolpackov.net>
* scripts/features/double_colon: Add a test for bug #14334.
diff --git a/tests/scripts/features/patternrules b/tests/scripts/features/patternrules
index 1753d4d..90525ae 100644
--- a/tests/scripts/features/patternrules
+++ b/tests/scripts/features/patternrules
@@ -115,5 +115,35 @@ $(dir)/foo.bar:
unlink("$dir/foo.bar");
+
+# TEST #5: make sure targets of a macthed implicit pattern rule never
+# never considered intermediate (Savannah bug #13022).
+#
+run_make_test('
+.PHONY: all
+all: foo.c foo.o
+
+%.h %.c: %.in
+ touch $*.h
+ touch $*.c
+
+%.o: %.c %.h
+ echo $+ >$@
+
+%.o: %.c
+ @echo wrong rule
+
+foo.in:
+ touch $@
+
+',
+'',
+'touch foo.in
+touch foo.h
+touch foo.c
+echo foo.c foo.h >foo.o');
+
+unlink('foo.in', 'foo.h', 'foo.c', 'foo.o');
+
# This tells the test driver that the perl test script executed properly.
1;