mirror of
https://github.com/mirror/make.git
synced 2024-12-27 13:20:34 +08:00
- 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:
parent
d2516343bc
commit
a2232470c2
15
ChangeLog
15
ChangeLog
@ -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.
|
||||||
|
@ -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)
|
||||||
|
5
remake.c
5
remake.c
@ -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)
|
||||||
|
@ -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.
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user