mirror of
https://github.com/mirror/make.git
synced 2025-02-05 01:00:11 +08:00
Fixed bug in implicit rule prerequisite evaluation code. Added test.
This commit is contained in:
parent
6e51d9c90a
commit
73e7767ffc
@ -1,3 +1,11 @@
|
|||||||
|
2004-09-21 Boris Kolpackov <boris@kolpackov.net>
|
||||||
|
|
||||||
|
* file.c (snap_deps): Mark .PHONY prerequisites as targets.
|
||||||
|
|
||||||
|
* implicit.c (pattern_search): When considering an implicit rule's
|
||||||
|
prerequisite check that it is actually a target rather then
|
||||||
|
just an entry in the file hashtable.
|
||||||
|
|
||||||
2004-09-21 Paul D. Smith <psmith@gnu.org>
|
2004-09-21 Paul D. Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* read.c (readstring): Fix some logic errors in backslash handling.
|
* read.c (readstring): Fix some logic errors in backslash handling.
|
||||||
|
3
file.c
3
file.c
@ -455,8 +455,9 @@ snap_deps (void)
|
|||||||
for (d = f->deps; d != 0; d = d->next)
|
for (d = f->deps; d != 0; d = d->next)
|
||||||
for (f2 = d->file; f2 != 0; f2 = f2->prev)
|
for (f2 = d->file; f2 != 0; f2 = f2->prev)
|
||||||
{
|
{
|
||||||
/* Mark this file as phony and nonexistent. */
|
/* Mark this file as phony nonexistent target. */
|
||||||
f2->phony = 1;
|
f2->phony = 1;
|
||||||
|
f2->is_target = 1;
|
||||||
f2->last_mtime = NONEXISTENT_MTIME;
|
f2->last_mtime = NONEXISTENT_MTIME;
|
||||||
f2->mtime_before_update = NONEXISTENT_MTIME;
|
f2->mtime_before_update = NONEXISTENT_MTIME;
|
||||||
}
|
}
|
||||||
|
@ -342,6 +342,8 @@ pattern_search (struct file *file, int archive,
|
|||||||
deps_found = 0;
|
deps_found = 0;
|
||||||
for (dep = rule->deps; dep != 0; dep = dep->next)
|
for (dep = rule->deps; dep != 0; dep = dep->next)
|
||||||
{
|
{
|
||||||
|
struct file *f;
|
||||||
|
|
||||||
/* If the dependency name has a %, substitute the stem. */
|
/* If the dependency name has a %, substitute the stem. */
|
||||||
p = strchr (dep_name (dep), '%');
|
p = strchr (dep_name (dep), '%');
|
||||||
if (p != 0)
|
if (p != 0)
|
||||||
@ -396,7 +398,7 @@ pattern_search (struct file *file, int archive,
|
|||||||
directory (the one gotten by prepending FILENAME's directory),
|
directory (the one gotten by prepending FILENAME's directory),
|
||||||
so it might actually exist. */
|
so it might actually exist. */
|
||||||
|
|
||||||
if (lookup_file (p) != 0
|
if (((f = lookup_file (p)) != 0 && f->is_target)
|
||||||
|| ((!dep->changed || check_lastslash) && file_exists_p (p)))
|
|| ((!dep->changed || check_lastslash) && file_exists_p (p)))
|
||||||
{
|
{
|
||||||
found_files_im[deps_found] = dep->ignore_mtime;
|
found_files_im[deps_found] = dep->ignore_mtime;
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2004-09-21 Boris Kolpackov <boris@kolpackov.net>
|
||||||
|
|
||||||
|
* run_make_tests.pl: Change `#!/usr/local/bin/perl' to be
|
||||||
|
`#!/usr/bin/env perl'.
|
||||||
|
|
||||||
|
* scripts/features/implicit_prereq_eval: Test implicit rule
|
||||||
|
prerequisite evaluation code.
|
||||||
|
|
||||||
2004-09-21 Paul D. Smith <psmith@gnu.org>
|
2004-09-21 Paul D. Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* run_make_tests.pl (run_make_test): Enhance to allow the make
|
* run_make_tests.pl (run_make_test): Enhance to allow the make
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/local/bin/perl
|
#!/usr/bin/env perl
|
||||||
# -*-perl-*-
|
# -*-perl-*-
|
||||||
|
|
||||||
# Test driver for the Make test suite
|
# Test driver for the Make test suite
|
||||||
|
64
tests/scripts/features/implicit_prereq_eval
Normal file
64
tests/scripts/features/implicit_prereq_eval
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
$description = "Test implicit rule prerequisite evaluation code.";
|
||||||
|
|
||||||
|
$details = "The makefile created by this test has a set of implicit rule
|
||||||
|
pairs with the first rule usually not applying because its prerequisites
|
||||||
|
cannot be made and the second rule which should succeed.";
|
||||||
|
|
||||||
|
open(MAKEFILE,"> $makefile");
|
||||||
|
|
||||||
|
# The contents of the Makefile ...
|
||||||
|
|
||||||
|
print MAKEFILE <<EOF;
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
all: case.1 case.2 case.3
|
||||||
|
|
||||||
|
a: void
|
||||||
|
|
||||||
|
# 1 - existing file
|
||||||
|
#
|
||||||
|
%.1: void
|
||||||
|
\@false
|
||||||
|
|
||||||
|
%.1: $makefile
|
||||||
|
\@true
|
||||||
|
|
||||||
|
|
||||||
|
# 2 - phony
|
||||||
|
#
|
||||||
|
%.2: void
|
||||||
|
\@false
|
||||||
|
|
||||||
|
%.2: 2.phony
|
||||||
|
\@true
|
||||||
|
|
||||||
|
.PHONY: 2.phony
|
||||||
|
|
||||||
|
|
||||||
|
# 3 - implicit-phony
|
||||||
|
#
|
||||||
|
%.3: void
|
||||||
|
\@false
|
||||||
|
|
||||||
|
%.3: 3.implicit-phony
|
||||||
|
\@true
|
||||||
|
|
||||||
|
3.implicit-phony:
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
close(MAKEFILE);
|
||||||
|
|
||||||
|
&run_make_with_options($makefile,
|
||||||
|
"",
|
||||||
|
&get_logfile,
|
||||||
|
0);
|
||||||
|
|
||||||
|
|
||||||
|
# This makefile doesn't produce anything except exit code.
|
||||||
|
#
|
||||||
|
&compare_output("",&get_logfile(1));
|
||||||
|
|
||||||
|
# This tells the test driver that the perl test script executed properly.
|
||||||
|
1;
|
Loading…
Reference in New Issue
Block a user