summaryrefslogtreecommitdiff
path: root/tests/scripts/variables/DEFAULT_GOAL
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2005-05-03 13:57:20 +0000
committerPaul Smith <psmith@gnu.org>2005-05-03 13:57:20 +0000
commit9d5b5bd2f57cad88b2ea689bdce4f3d8662e73a4 (patch)
tree9cbe48582bbbf5a6d6754676cfc58e404feeb5e0 /tests/scripts/variables/DEFAULT_GOAL
parent49ee105c685cb84bc3057e8b7666fc0cc7090047 (diff)
downloadgunmake-9d5b5bd2f57cad88b2ea689bdce4f3d8662e73a4.tar.gz
Fix problems with losing tokens in the jobserver, reported by Grant
Taylor. There are two forms of this: first, it was possible to lose tokens when using -j and -l at the same time, because waiting jobs were not checked when determining whether any jobs were outstanding. Second, if you had an exported recursive variable that contained a $(shell ...) function there is a possibility to lose tokens, since a token was taken but the child list was not updated until after the shell function was complete. To resolve this I introduced a new variable that counted the number of tokens we have obtained, rather than checking whether there were any children on the list. I also added some sanity checks to make sure we weren't writing back too many or not enough tokens. And, the master make will drain the token pipe before exiting and compare the count of tokens at the end to what was written there at the beginning. Also: * Ensure a bug in the environment (missing "=") doesn't cause make to core. * Rename the .DEFAULT_TARGET variable to .DEFAULT_GOAL, to match the terminology in the documentation and other variables like MAKECMDGOALS. * Add documentation of the .DEFAULT_GOAL special variable. Still need to document the secondary expansion stuff...
Diffstat (limited to 'tests/scripts/variables/DEFAULT_GOAL')
-rw-r--r--tests/scripts/variables/DEFAULT_GOAL78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/scripts/variables/DEFAULT_GOAL b/tests/scripts/variables/DEFAULT_GOAL
new file mode 100644
index 0000000..897bd4a
--- /dev/null
+++ b/tests/scripts/variables/DEFAULT_GOAL
@@ -0,0 +1,78 @@
+# -*-perl-*-
+$description = "Test the .DEFAULT_GOAL special variable.";
+
+$details = "";
+
+
+# Test #1: basic logic.
+#
+run_make_test('
+# Basics.
+#
+foo: ; @:
+
+ifneq ($(.DEFAULT_GOAL),foo)
+$(error )
+endif
+
+# Reset to empty.
+#
+.DEFAULT_GOAL :=
+
+bar: ; @:
+
+ifneq ($(.DEFAULT_GOAL),bar)
+$(error )
+endif
+
+# Change to a different goal.
+#
+
+.DEFAULT_GOAL := baz
+
+baz: ; @echo $@
+',
+'',
+'baz');
+
+
+# Test #2: unknown goal.
+#
+run_make_test('
+.DEFAULT_GOAL = foo
+',
+'',
+'#MAKE#: *** No rule to make target `foo\'. Stop.',
+512);
+
+
+# Test #3: more than one goal.
+#
+run_make_test('
+.DEFAULT_GOAL := foo bar
+',
+'',
+'#MAKE#: *** .DEFAULT_GOAL contains more than one target. Stop.',
+512);
+
+
+# Test #4: Savannah bug #12226.
+#
+run_make_test('
+define rule
+foo: ; @echo $$@
+endef
+
+define make-rule
+$(eval $(rule))
+endef
+
+$(call make-rule)
+
+',
+'',
+'foo');
+
+
+# This tells the test driver that the perl test script executed properly.
+1;