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>
* main.c (usage): Add --eval to the usage string.

16
NEWS
View file

@ -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

View file

@ -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