- Fix bug #7144 (infinite loop sometimes with -q and double-colon rules)

- Resolve support request #103195 (rationalize wordlist fn arguments)
This commit is contained in:
Paul Smith 2005-02-28 09:41:25 +00:00
parent d2516343bc
commit a2232470c2
6 changed files with 56 additions and 51 deletions

View File

@ -1,3 +1,18 @@
2005-02-28 Paul D. Smith <psmith@gnu.org>
* doc/make.texi (Text Functions): Update docs to allow the end
ordinal for $(wordlist ...) to be 0.
* function.c (func_wordlist): Fail if the start ordinal for
$(wordlist ...) is <1. Matches documentation.
Resolves Savannah support request #103195.
* remake.c (update_goal_chain): Fix logic for stopping in -q:
previously we were stopping when !-q, exactly the opposite. This
has been wrong since version 1.34, in 1994!
(update_file): If we got an error don't break out to run more
double-colon rules: just return immediately.
Fixes Savannah bug #7144.
2005-02-27 Paul D. Smith <psmith@gnu.org> 2005-02-27 Paul D. Smith <psmith@gnu.org>
* misc.c (end_of_token): Make argument const. * misc.c (end_of_token): Make argument const.

View File

@ -771,6 +771,10 @@ func_wordlist (char *o, char **argv, const char *funcname UNUSED)
_("non-numeric second argument to `wordlist' function")); _("non-numeric second argument to `wordlist' function"));
start = atoi (argv[0]); start = atoi (argv[0]);
if (start < 1)
fatal (reading_file, "invalid first argument to `wordlist' function: '%d'",
message, start);
count = atoi (argv[1]) - start + 1; count = atoi (argv[1]) - start + 1;
if (count > 0) if (count > 0)

View File

@ -176,7 +176,7 @@ update_goal_chain (struct dep *goals)
/* If -q just triggered, stop immediately. It doesn't /* If -q just triggered, stop immediately. It doesn't
matter how much more we run, since we already know matter how much more we run, since we already know
the answer to return. */ the answer to return. */
stop = (!keep_going_flag && !question_flag stop = (question_flag && !keep_going_flag
&& !rebuilding_makefiles); && !rebuilding_makefiles);
} }
else else
@ -307,8 +307,9 @@ update_file (struct file *file, unsigned int depth)
status |= update_file_1 (f, depth); status |= update_file_1 (f, depth);
check_renamed (f); check_renamed (f);
/* If we got an error, don't bother with double_colon etc. */
if (status != 0 && !keep_going_flag) if (status != 0 && !keep_going_flag)
break; return status;
if (f->command_state == cs_running if (f->command_state == cs_running
|| f->command_state == cs_deps_running) || f->command_state == cs_deps_running)

View File

@ -1,5 +1,7 @@
2005-02-28 Paul D. Smith <psmith@gnu.org> 2005-02-28 Paul D. Smith <psmith@gnu.org>
* scripts/options/dash-q: Add a test for Savannah bug # 7144.
* scripts/options/symlinks: New file to test checking of symlink * scripts/options/symlinks: New file to test checking of symlink
timestamps. Can't use filename dash-L because it conflicts with timestamps. Can't use filename dash-L because it conflicts with
dash-l on case-insensitive filesystems. dash-l on case-insensitive filesystems.

View File

@ -8,9 +8,9 @@ Invoke make once, so it builds everything. Invoke it again and verify
that nothing is built. Then invoke it with -B and verify that everything that nothing is built. Then invoke it with -B and verify that everything
is built again."; is built again.";
open(MAKEFILE,"> $makefile"); &touch('bar.x');
print MAKEFILE <<'EOF'; run_make_test('
.SUFFIXES: .SUFFIXES:
.PHONY: all .PHONY: all
@ -19,25 +19,21 @@ all: foo
foo: bar.x foo: bar.x
@echo cp $< $@ @echo cp $< $@
@echo "" > $@ @echo "" > $@
EOF ',
'', 'cp bar.x foo');
close(MAKEFILE); run_make_test(undef, '', "#MAKE#: Nothing to be done for `all'.");
run_make_test(undef, '-B', 'cp bar.x foo');
# Put the timestamp for foo into the future; it should still be remade.
utouch(1000, 'foo');
run_make_test(undef, '', "#MAKE#: Nothing to be done for `all'.");
run_make_test(undef, '-B', 'cp bar.x foo');
&touch('bar.x'); # Clean up
&run_make_with_options($makefile, '', &get_logfile); rmfiles('bar.x', 'foo');
$answer = "cp bar.x foo\n";
&compare_output($answer, &get_logfile(1));
&run_make_with_options($makefile, '', &get_logfile);
$answer = "$make_name: Nothing to be done for `all'.\n";
&compare_output($answer, &get_logfile(1));
&run_make_with_options($makefile, '-B', &get_logfile);
$answer = "cp bar.x foo\n";
&compare_output($answer, &get_logfile(1));
unlink('bar.x', 'foo') unless $keep;
1; 1;

View File

@ -3,11 +3,9 @@ $description = "Test the -q option.\n";
$details = "Try various uses of -q and ensure they all give the correct results.\n"; $details = "Try various uses of -q and ensure they all give the correct results.\n";
open(MAKEFILE, "> $makefile"); # TEST 0
# The Contents of the MAKEFILE ... run_make_test('
print MAKEFILE <<'EOMAKE';
one: one:
two: ; two: ;
three: ; : three: ; :
@ -21,50 +19,39 @@ seven: ; \
$(.XY) $(.XY)
: foo : foo
$(.XY) $(.XY)
EOMAKE ',
'-q one', '');
close(MAKEFILE);
# TEST 0
&run_make_with_options($makefile, "-q one", &get_logfile);
$answer = "";
&compare_output($answer, &get_logfile(1));
# TEST 1 # TEST 1
&run_make_with_options($makefile, "-q two", &get_logfile); run_make_test(undef, '-q two', '');
$answer = "";
&compare_output($answer, &get_logfile(1));
# TEST 2 # TEST 2
&run_make_with_options($makefile, "-q three", &get_logfile, 256); run_make_test(undef, '-q three', '', 256);
$answer = "";
&compare_output($answer, &get_logfile(1));
# TEST 3 # TEST 3
&run_make_with_options($makefile, "-q four", &get_logfile); run_make_test(undef, '-q four', '');
$answer = "";
&compare_output($answer, &get_logfile(1));
# TEST 4 # TEST 4
&run_make_with_options($makefile, "-q five", &get_logfile); run_make_test(undef, '-q five', '');
$answer = "";
&compare_output($answer, &get_logfile(1));
# TEST 5 # TEST 5
&run_make_with_options($makefile, "-q six", &get_logfile); run_make_test(undef, '-q six', '');
$answer = "";
&compare_output($answer, &get_logfile(1));
# TEST 6 # TEST 6
&run_make_with_options($makefile, "-q seven", &get_logfile, 256); run_make_test(undef, '-q seven', '', 256);
$answer = "";
&compare_output($answer, &get_logfile(1)); # TEST 7 : Savannah bug # 7144
run_make_test('
one:: ; @echo one
one:: ; @echo two
',
'-q', '', 256);
1; 1;