mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-11-25 04:35:44 +00:00
Use the same algorithm for counting the number of words to sort as we
use to break up the list of words, so we're sure to get the same number. Fixes Savannah bug #33125
This commit is contained in:
parent
dc90160079
commit
6979e7e43b
4 changed files with 52 additions and 59 deletions
|
@ -1,5 +1,9 @@
|
|||
2011-05-02 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* function.c (func_sort): Use the same algorithm to count the
|
||||
number of words we will get after the split, as we use to split.
|
||||
Based on a patch from Matthias Hopf. Fixes Savannah bug #33125.
|
||||
|
||||
* make.h: Make global variable stack_limit extern.
|
||||
Fixes Savannah bug #32753.
|
||||
|
||||
|
|
17
function.c
17
function.c
|
@ -706,7 +706,7 @@ func_words (char *o, char **argv, const char *funcname UNUSED)
|
|||
const char *word_iterator = argv[0];
|
||||
char buf[20];
|
||||
|
||||
while (find_next_token (&word_iterator, (unsigned int *) 0) != 0)
|
||||
while (find_next_token (&word_iterator, NULL) != 0)
|
||||
++i;
|
||||
|
||||
sprintf (buf, "%d", i);
|
||||
|
@ -1133,21 +1133,14 @@ func_sort (char *o, char **argv, const char *funcname UNUSED)
|
|||
|
||||
/* Find the maximum number of words we'll have. */
|
||||
t = argv[0];
|
||||
wordi = 1;
|
||||
while (*t != '\0')
|
||||
wordi = 0;
|
||||
while ((p = find_next_token (&t, NULL)) != 0)
|
||||
{
|
||||
char c = *(t++);
|
||||
|
||||
if (! isspace ((unsigned char)c))
|
||||
continue;
|
||||
|
||||
++t;
|
||||
++wordi;
|
||||
|
||||
while (isspace ((unsigned char)*t))
|
||||
++t;
|
||||
}
|
||||
|
||||
words = xmalloc (wordi * sizeof (char *));
|
||||
words = xmalloc ((wordi == 0 ? 1 : wordi) * sizeof (char *));
|
||||
|
||||
/* Now assign pointers to each string in the array. */
|
||||
t = argv[0];
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2011-05-02 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* scripts/functions/sort: Add a test for Savannah bug #33125.
|
||||
|
||||
2011-04-17 David A. Wheeler <dwheeler@dwheeler.com>
|
||||
|
||||
* scripts/features/shell_assignment: Regression for "!=" feature
|
||||
|
|
|
@ -1,55 +1,47 @@
|
|||
$description = "The following test creates a makefile to verify\n"
|
||||
."the ability of make to sort lists of object. Sort\n"
|
||||
."will also remove any duplicate entries. This will also\n"
|
||||
."be tested.";
|
||||
# -*-perl-*-
|
||||
|
||||
$details = "The make file is built with a list of object in a random order\n"
|
||||
."and includes some duplicates. Make should sort all of the elements\n"
|
||||
."remove all duplicates\n";
|
||||
$description = "The following test creates a makefile to verify
|
||||
the ability of make to sort lists of object. Sort
|
||||
will also remove any duplicate entries. This will also
|
||||
be tested.";
|
||||
|
||||
open(MAKEFILE,"> $makefile");
|
||||
$details = "The make file is built with a list of object in a random order
|
||||
and includes some duplicates. Make should sort all of the elements
|
||||
remove all duplicates\n";
|
||||
|
||||
# The Contents of the MAKEFILE ...
|
||||
|
||||
print MAKEFILE "foo := moon_light days \n"
|
||||
."foo1:= jazz\n"
|
||||
."bar := captured \n"
|
||||
."bar2 = boy end, has rise A midnight \n"
|
||||
."bar3:= \$(foo)\n"
|
||||
."s1 := _by\n"
|
||||
."s2 := _and_a\n"
|
||||
."t1 := \$(addsuffix \$(s1), \$(bar) )\n"
|
||||
."t2 := \$(addsuffix \$(s2), \$(foo1) )\n"
|
||||
."t3 := \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \n"
|
||||
."t4 := \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \n"
|
||||
."t5 := \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \n"
|
||||
."t6 := \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \n"
|
||||
."t7 := \$(t6) \$(t6) \$(t6) \n"
|
||||
."p1 := \$(addprefix \$(foo1), \$(s2) )\n"
|
||||
."blank:= \n"
|
||||
."all:\n"
|
||||
."\t\@echo \$(sort \$(bar2) \$(foo) \$(addsuffix \$(s1), \$(bar) ) \$(t2) \$(bar2) \$(bar3))\n"
|
||||
."\t\@echo \$(sort \$(blank) \$(foo) \$(bar2) \$(t1) \$(p1) )\n"
|
||||
."\t\@echo \$(sort \$(foo) \$(bar2) \$(t1) \$(t4) \$(t5) \$(t7) \$(t6) )\n";
|
||||
run_make_test('
|
||||
foo := moon_light days
|
||||
foo1:= jazz
|
||||
bar := captured
|
||||
bar2 = boy end, has rise A midnight
|
||||
bar3:= $(foo)
|
||||
s1 := _by
|
||||
s2 := _and_a
|
||||
t1 := $(addsuffix $(s1), $(bar) )
|
||||
t2 := $(addsuffix $(s2), $(foo1) )
|
||||
t3 := $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2)
|
||||
t4 := $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3)
|
||||
t5 := $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4)
|
||||
t6 := $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5)
|
||||
t7 := $(t6) $(t6) $(t6)
|
||||
p1 := $(addprefix $(foo1), $(s2) )
|
||||
blank:=
|
||||
all:
|
||||
@echo $(sort $(bar2) $(foo) $(addsuffix $(s1), $(bar) ) $(t2) $(bar2) $(bar3))
|
||||
@echo $(sort $(blank) $(foo) $(bar2) $(t1) $(p1) )
|
||||
@echo $(sort $(foo) $(bar2) $(t1) $(t4) $(t5) $(t7) $(t6) )
|
||||
',
|
||||
'', 'A boy captured_by days end, has jazz_and_a midnight moon_light rise
|
||||
A boy captured_by days end, has jazz_and_a midnight moon_light rise
|
||||
A boy captured_by days end, has jazz_and_a midnight moon_light rise
|
||||
');
|
||||
|
||||
|
||||
# END of Contents of MAKEFILE
|
||||
# Test with non-space/tab whitespace. Note that you can't see the
|
||||
# original bug except using valgrind.
|
||||
|
||||
close(MAKEFILE);
|
||||
|
||||
&run_make_with_options($makefile,"",&get_logfile);
|
||||
|
||||
# Create the answer to what should be produced by this Makefile
|
||||
$answer = "A boy captured_by days end, has jazz_and_a midnight moon_light rise\n"
|
||||
."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n"
|
||||
."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n";
|
||||
|
||||
&compare_output($answer,&get_logfile(1));
|
||||
run_make_test("FOO = a b\tc\rd\fe \f \f \f \f \ff
|
||||
all: ; \@echo \$(words \$(sort \$(FOO)))\n",
|
||||
'', "5\n");
|
||||
|
||||
1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue