summaryrefslogtreecommitdiff
path: root/tools/build/v2/test/recursive.jam
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build/v2/test/recursive.jam')
-rw-r--r--tools/build/v2/test/recursive.jam117
1 files changed, 117 insertions, 0 deletions
diff --git a/tools/build/v2/test/recursive.jam b/tools/build/v2/test/recursive.jam
new file mode 100644
index 0000000000..8087f7da75
--- /dev/null
+++ b/tools/build/v2/test/recursive.jam
@@ -0,0 +1,117 @@
+# Copyright 2001, 2002 Dave Abrahams
+# Copyright 2005 Rene Rivera
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+##############################################################
+# Rules and actions that test Jam by invoking it recursively #
+# #
+# This is necessary for testing anything that requires Jam #
+# to execute build actions whose results must be checked, #
+# and anything which exits Jam with a failure code (e.g. a #
+# failed assertion). #
+##############################################################
+
+# Creates a fake target, always built, which succeeds in building if Invoking a
+# Jamfile containing the given string succeeds. If optional-expected-output is
+# supplied, creates another fake target which succeeds in building if
+# optional-expected-output is in the Jam output.
+#
+# RETURNS: the target name of the Jam command.
+rule Jam ( command : expected-output ? )
+{
+ local jam-cmd = "$(command:G=jam_command)" ;
+
+ NOTFILE "$(jam-cmd)" ;
+ ALWAYS "$(jam-cmd)" ;
+ DEPENDS all : "$(jam-cmd)" ;
+
+ if ($NT)
+ {
+ redirect on $(jam-cmd) = "nul" ;
+ }
+ else if $(UNIX)
+ {
+ redirect on $(jam-cmd) = "/dev/null" ;
+ }
+
+ if $(VERBOSE)
+ {
+ redirect on $(jam-cmd) = ;
+ }
+
+ invoke-Jam "$(jam-cmd)" ;
+
+ if $(expected-output)
+ {
+ redirect on $(jam-cmd) = "scratch-output.txt" ;
+ local output-target = "$(expected-output:G=$(command))" ;
+ NOTFILE "$(output-target)" ;
+ ALWAYS "$(output-target)" ;
+ DEPENDS all : "$(output-target)" ;
+ Expect-in-output "$(output-target)" ;
+
+ if $(VERBOSE)
+ {
+ if $(NT) { VERBOSE on $(output-target) = "type " ; }
+ else { VERBOSE on $(output-target) = "cat " ; }
+ }
+ }
+ return $(jam-cmd) ;
+}
+
+# Just like the "Jam" rule, above, but only succeeds if the Jam command /fails/.
+rule Jam-fail ( command : expected-output ? )
+{
+ local target = [ Jam $(command) : $(expected-output) ] ;
+ FAIL_EXPECTED $(target) ;
+ return $(target) ;
+}
+
+# The temporary jamfile we write is called "temp.jam". If the user has set
+# BOOST_BUILD_ROOT, it will be built there.
+gBOOST_TEST_JAMFILE = temp.jam ;
+LOCATE on gBOOST_TEST_JAMFILE ?= $(BOOST_BUILD_ROOT) ;
+
+# Runs Jam on a temporary Jamfile which contains the string in $(command:G=)
+# and redirects the results into a file whose name is given by $(redirect) on
+# command
+rule invoke-Jam ( command )
+{
+ PREFIX on $(command) = "actions unbuilt { } unbuilt all ;" ;
+ if $(NT)
+ {
+ REMOVE on $(command) = $(SystemRoot)\System32\find ;
+ }
+ REMOVE on $(command) ?= rm ;
+}
+actions invoke-Jam
+{
+ echo $(PREFIX) $(<:G=) > $(gBOOST_TEST_JAMFILE)
+ jam -sBOOST_ROOT=../../.. -sJAMFILE=$(gBOOST_TEST_JAMFILE) $(JAMARGS) >$(redirect)
+}
+# $(REMOVE) $(gBOOST_TEST_JAMFILE)
+
+
+# These actions expect to find the ungristed part of $(<) in scratch-output.txt
+# and return a nonzero exit code otherwise
+if $(NT)
+{
+ # Explicitly get the NT find command in case someone has another find in their path.
+ actions quietly Expect-in-output
+ {
+ $(VERBOSE)scratch-output.txt ;
+ $(SystemRoot)\System32\find /C "$(<:G=)" scratch-output.txt >nul
+ }
+}
+else
+{
+ # Not really the right actions for Unix; the argument will be interpreted as
+ # a regular expression. Is there a simpler find?
+ actions quietly Expect-in-output
+ {
+ $(VERBOSE)scratch-output.txt;
+ grep "$(<:G=)" scratch-output.txt
+ }
+}
+