summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--function.c4
-rw-r--r--remake.c5
-rw-r--r--tests/ChangeLog2
-rw-r--r--tests/scripts/options/dash-B28
-rw-r--r--tests/scripts/options/dash-q49
6 files changed, 54 insertions, 49 deletions
diff --git a/ChangeLog b/ChangeLog
index 4696420..b9f4ad7 100644
--- a/ChangeLog
+++ b/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>
* misc.c (end_of_token): Make argument const.
diff --git a/function.c b/function.c
index 66d23fd..c2bd16f 100644
--- a/function.c
+++ b/function.c
@@ -771,6 +771,10 @@ func_wordlist (char *o, char **argv, const char *funcname UNUSED)
_("non-numeric second argument to `wordlist' function"));
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;
if (count > 0)
diff --git a/remake.c b/remake.c
index e1def64..eb34c92 100644
--- a/remake.c
+++ b/remake.c
@@ -176,7 +176,7 @@ update_goal_chain (struct dep *goals)
/* If -q just triggered, stop immediately. It doesn't
matter how much more we run, since we already know
the answer to return. */
- stop = (!keep_going_flag && !question_flag
+ stop = (question_flag && !keep_going_flag
&& !rebuilding_makefiles);
}
else
@@ -307,8 +307,9 @@ update_file (struct file *file, unsigned int depth)
status |= update_file_1 (f, depth);
check_renamed (f);
+ /* If we got an error, don't bother with double_colon etc. */
if (status != 0 && !keep_going_flag)
- break;
+ return status;
if (f->command_state == cs_running
|| f->command_state == cs_deps_running)
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 41c9b34..1979324 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,5 +1,7 @@
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
timestamps. Can't use filename dash-L because it conflicts with
dash-l on case-insensitive filesystems.
diff --git a/tests/scripts/options/dash-B b/tests/scripts/options/dash-B
index 32992b3..4ac377f 100644
--- a/tests/scripts/options/dash-B
+++ b/tests/scripts/options/dash-B
@@ -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
is built again.";
-open(MAKEFILE,"> $makefile");
+&touch('bar.x');
-print MAKEFILE <<'EOF';
+run_make_test('
.SUFFIXES:
.PHONY: all
@@ -19,25 +19,21 @@ all: foo
foo: bar.x
@echo cp $< $@
@echo "" > $@
-EOF
-
-close(MAKEFILE);
+',
+ '', 'cp bar.x foo');
+run_make_test(undef, '', "#MAKE#: Nothing to be done for `all'.");
+run_make_test(undef, '-B', 'cp bar.x foo');
-&touch('bar.x');
+# Put the timestamp for foo into the future; it should still be remade.
-&run_make_with_options($makefile, '', &get_logfile);
-$answer = "cp bar.x foo\n";
-&compare_output($answer, &get_logfile(1));
+utouch(1000, 'foo');
+run_make_test(undef, '', "#MAKE#: Nothing to be done for `all'.");
+run_make_test(undef, '-B', 'cp bar.x foo');
-&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));
+# Clean up
-unlink('bar.x', 'foo') unless $keep;
+rmfiles('bar.x', 'foo');
1;
diff --git a/tests/scripts/options/dash-q b/tests/scripts/options/dash-q
index 923e4c4..56f04a1 100644
--- a/tests/scripts/options/dash-q
+++ b/tests/scripts/options/dash-q
@@ -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";
-open(MAKEFILE, "> $makefile");
-
-# The Contents of the MAKEFILE ...
+# TEST 0
-print MAKEFILE <<'EOMAKE';
+run_make_test('
one:
two: ;
three: ; :
@@ -21,50 +19,39 @@ seven: ; \
$(.XY)
: foo
$(.XY)
-EOMAKE
-
-close(MAKEFILE);
-
-# TEST 0
-
-&run_make_with_options($makefile, "-q one", &get_logfile);
-$answer = "";
-&compare_output($answer, &get_logfile(1));
+',
+ '-q one', '');
# TEST 1
-&run_make_with_options($makefile, "-q two", &get_logfile);
-$answer = "";
-&compare_output($answer, &get_logfile(1));
+run_make_test(undef, '-q two', '');
# TEST 2
-&run_make_with_options($makefile, "-q three", &get_logfile, 256);
-$answer = "";
-&compare_output($answer, &get_logfile(1));
+run_make_test(undef, '-q three', '', 256);
# TEST 3
-&run_make_with_options($makefile, "-q four", &get_logfile);
-$answer = "";
-&compare_output($answer, &get_logfile(1));
+run_make_test(undef, '-q four', '');
# TEST 4
-&run_make_with_options($makefile, "-q five", &get_logfile);
-$answer = "";
-&compare_output($answer, &get_logfile(1));
+run_make_test(undef, '-q five', '');
# TEST 5
-&run_make_with_options($makefile, "-q six", &get_logfile);
-$answer = "";
-&compare_output($answer, &get_logfile(1));
+run_make_test(undef, '-q six', '');
# TEST 6
-&run_make_with_options($makefile, "-q seven", &get_logfile, 256);
-$answer = "";
-&compare_output($answer, &get_logfile(1));
+run_make_test(undef, '-q seven', '', 256);
+
+# TEST 7 : Savannah bug # 7144
+
+run_make_test('
+one:: ; @echo one
+one:: ; @echo two
+',
+ '-q', '', 256);
1;