Fix fat-finger bug that left implicit rules with identical stem lengths

being sorted indeterminately.
This commit is contained in:
Paul Smith 2009-10-25 18:34:43 +00:00
parent 4e51b6d9a4
commit 76d2d2ca41
3 changed files with 18 additions and 10 deletions

View File

@ -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> 2009-10-24 Paul Smith <psmith@gnu.org>
* main.c (usage): Add --eval to the usage string. * main.c (usage): Add --eval to the usage string.

16
NEWS
View File

@ -1,6 +1,6 @@
GNU make NEWS -*-indented-text-*- GNU make NEWS -*-indented-text-*-
History of user-visible changes. History of user-visible changes.
12 Oct 2009 25 Oct 2009
See the end of this file for copyrights and conditions. See the end of this file for copyrights and conditions.
@ -20,12 +20,14 @@ Version 3.81.90
existing targets were provided in $?). existing targets were provided in $?).
* WARNING: Backward-incompatibility! * WARNING: Backward-incompatibility!
As a result of parser enhancements, two backward-compatibility issues exist: As a result of parser enhancements, three backward-compatibility issues
first, a prerequisite containing an "=" cannot be escaped with a backslash exist: first, a prerequisite containing an "=" cannot be escaped with a
any longer. You must create a variable containing an "=" and use that backslash any longer. You must create a variable containing an "=" and use
variable in the prerequisite. Second, variable names can no longer contain that variable in the prerequisite. Second, variable names can no longer
whitespace, unless you put the whitespace in a variable and use the contain whitespace, unless you put the whitespace in a variable and use the
variable. 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! * WARNING: Backward-incompatibility!
The pattern-specific variables and pattern rules are now applied in the The pattern-specific variables and pattern rules are now applied in the

View File

@ -180,10 +180,10 @@ struct tryrule
int int
stemlen_compare (const void *v1, const void *v2) stemlen_compare (const void *v1, const void *v2)
{ {
const struct tryrule *r1 = (const struct tryrule *)v1; const struct tryrule *r1 = v1;
const struct tryrule *r2 = (const struct tryrule *)v2; const struct tryrule *r2 = v2;
int r = r1->stemlen - r2->stemlen; 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 /* Search the pattern rules for a rule with an existing dependency to make