From 969d5acad55a691df2d5b38efd49562d64919321 Mon Sep 17 00:00:00 2001 From: psmith Date: Sun, 25 Oct 2009 18:34:43 +0000 Subject: [PATCH] Fix fat-finger bug that left implicit rules with identical stem lengths being sorted indeterminately. --- ChangeLog | 6 ++++++ NEWS | 16 +++++++++------- implicit.c | 6 +++--- 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 + + * 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 * 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 -- 2.11.4.GIT