diff options
author | Boris Kolpackov <boris@kolpackov.net> | 2004-09-21 20:23:12 +0000 |
---|---|---|
committer | Boris Kolpackov <boris@kolpackov.net> | 2004-09-21 20:23:12 +0000 |
commit | 73e7767ffc14fad98dd2e78791a1237bcb3d6fe3 (patch) | |
tree | 4772e03f4350bbebfde62605316e340153d4813a | |
parent | 6e51d9c90a92933e6cf84ae494076b6b1cd17c3b (diff) | |
download | gunmake-73e7767ffc14fad98dd2e78791a1237bcb3d6fe3.tar.gz |
Fixed bug in implicit rule prerequisite evaluation code. Added test.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | file.c | 3 | ||||
-rw-r--r-- | implicit.c | 4 | ||||
-rw-r--r-- | tests/ChangeLog | 8 | ||||
-rwxr-xr-x | tests/run_make_tests.pl | 2 | ||||
-rw-r--r-- | tests/scripts/features/implicit_prereq_eval | 64 |
6 files changed, 86 insertions, 3 deletions
@@ -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> * read.c (readstring): Fix some logic errors in backslash handling. @@ -455,8 +455,9 @@ snap_deps (void) for (d = f->deps; d != 0; d = d->next) 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->is_target = 1; f2->last_mtime = NONEXISTENT_MTIME; f2->mtime_before_update = NONEXISTENT_MTIME; } @@ -342,6 +342,8 @@ pattern_search (struct file *file, int archive, deps_found = 0; for (dep = rule->deps; dep != 0; dep = dep->next) { + struct file *f; + /* If the dependency name has a %, substitute the stem. */ p = strchr (dep_name (dep), '%'); if (p != 0) @@ -396,7 +398,7 @@ pattern_search (struct file *file, int archive, directory (the one gotten by prepending FILENAME's directory), 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))) { found_files_im[deps_found] = dep->ignore_mtime; diff --git a/tests/ChangeLog b/tests/ChangeLog index ba6b59e..0a7ed0c 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -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> * run_make_tests.pl (run_make_test): Enhance to allow the make diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl index 5d49014..a4c4330 100755 --- a/tests/run_make_tests.pl +++ b/tests/run_make_tests.pl @@ -1,4 +1,4 @@ -#!/usr/local/bin/perl +#!/usr/bin/env perl # -*-perl-*- # Test driver for the Make test suite diff --git a/tests/scripts/features/implicit_prereq_eval b/tests/scripts/features/implicit_prereq_eval new file mode 100644 index 0000000..f549a79 --- /dev/null +++ b/tests/scripts/features/implicit_prereq_eval @@ -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; |