summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2009-10-25 18:34:43 +0000
committerPaul Smith <psmith@gnu.org>2009-10-25 18:34:43 +0000
commit76d2d2ca41df98369945d0558e189f4023718256 (patch)
tree7bad04916ab780a43cdecdc0f47d8c47275d77b2
parent4e51b6d9a4eb7eef2272551d55d8abaadd5f01e3 (diff)
downloadgunmake-76d2d2ca41df98369945d0558e189f4023718256.tar.gz
Fix fat-finger bug that left implicit rules with identical stem lengths
being sorted indeterminately.
-rw-r--r--ChangeLog6
-rw-r--r--NEWS16
-rw-r--r--implicit.c6
3 files changed, 18 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index b475f4f..ebb1b66 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-25 Paul Smith <psmith@gnu.org>
+
+ * implicit.c (stemlen_compare): Fix qsort() compare bug that
+ caused implicit rules with equal stem lengths to be sorted
+ indeterminately.
+
2009-10-24 Paul Smith <psmith@gnu.org>
* main.c (usage): Add --eval to the usage string.
diff --git a/NEWS b/NEWS
index f050105..661f87b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,6 @@
GNU make NEWS -*-indented-text-*-
History of user-visible changes.
- 12 Oct 2009
+ 25 Oct 2009
See the end of this file for copyrights and conditions.
@@ -20,12 +20,14 @@ Version 3.81.90
existing targets were provided in $?).
* WARNING: Backward-incompatibility!
- As a result of parser enhancements, two backward-compatibility issues exist:
- first, a prerequisite containing an "=" cannot be escaped with a backslash
- any longer. You must create a variable containing an "=" and use that
- variable in the prerequisite. Second, variable names can no longer contain
- whitespace, unless you put the whitespace in a variable and use the
- variable.
+ As a result of parser enhancements, three backward-compatibility issues
+ exist: first, a prerequisite containing an "=" cannot be escaped with a
+ backslash any longer. You must create a variable containing an "=" and use
+ that variable in the prerequisite. Second, variable names can no longer
+ contain whitespace, unless you put the whitespace in a variable and use the
+ variable. Third, in previous versions of make it was sometimes not flagged
+ as an error for explicit and pattern targets to appear in the same rule.
+ Now this is always reported as an error.
* WARNING: Backward-incompatibility!
The pattern-specific variables and pattern rules are now applied in the
diff --git a/implicit.c b/implicit.c
index b4e843c..0bf89e0 100644
--- a/implicit.c
+++ b/implicit.c
@@ -180,10 +180,10 @@ struct tryrule
int
stemlen_compare (const void *v1, const void *v2)
{
- const struct tryrule *r1 = (const struct tryrule *)v1;
- const struct tryrule *r2 = (const struct tryrule *)v2;
+ const struct tryrule *r1 = v1;
+ const struct tryrule *r2 = v2;
int r = r1->stemlen - r2->stemlen;
- return r != 0 ? r : (int)(r1->order - r1->order);
+ return r != 0 ? r : (int)(r1->order - r2->order);
}
/* Search the pattern rules for a rule with an existing dependency to make