From 1a46a0a1c3b0b463e13c46550998a3df1db0fdbe Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 9 Jan 2017 15:40:05 +0200 Subject: Implement test.target variable The plan is to use it for the portable path conversions. --- build/root.build | 4 ++++ build2/test/init.cxx | 47 ++++++++++++++++++++++++++++++----------------- build2/test/rule.cxx | 5 ++++- tests/build/root.build | 5 ++++- 4 files changed, 42 insertions(+), 19 deletions(-) diff --git a/build/root.build b/build/root.build index 57f70ac..78e3abd 100644 --- a/build/root.build +++ b/build/root.build @@ -31,3 +31,7 @@ if! $cli.configured # tests/exe{*}: test = true unit-tests/exe{*}: test = true + +# Specify the test target for cross-testing. +# +test.target = $cxx.target diff --git a/build2/test/init.cxx b/build2/test/init.cxx index af83aea..f592568 100644 --- a/build2/test/init.cxx +++ b/build2/test/init.cxx @@ -37,25 +37,38 @@ namespace build2 // Enter module variables. Do it during boot in case they get assigned // in bootstrap.build. // + auto& vp (var_pool); + + // Note: none are overridable. + // + // The test variable is a name which can be a path (with the + // true/false special values) or a target name. + // + vp.insert ("test", variable_visibility::target); + vp.insert ("test.input", variable_visibility::project); + vp.insert ("test.output", variable_visibility::project); + vp.insert ("test.roundtrip", variable_visibility::project); + vp.insert ("test.options", variable_visibility::project); + vp.insert ("test.arguments", variable_visibility::project); + + // These are only used in testscript. + // + vp.insert ("test.redirects", variable_visibility::project); + vp.insert ("test.cleanups", variable_visibility::project); + + // Test target platform. + // + // Unless already set, default test.target to build.host. Note that it + // can still be overriden by the user, e.g., in root.build. + // { - auto& v (var_pool); + value& v ( + rs.assign ( + vp.insert ( + "test.target", variable_visibility::project))); - // Note: none are overridable. - // - // The test variable is a name which can be a path (with the - // true/false special values) or a target name. - // - v.insert ("test", variable_visibility::target); - v.insert ("test.input", variable_visibility::project); - v.insert ("test.output", variable_visibility::project); - v.insert ("test.roundtrip", variable_visibility::project); - v.insert ("test.options", variable_visibility::project); - v.insert ("test.arguments", variable_visibility::project); - - // These are only used in testscript. - // - v.insert ("test.redirects", variable_visibility::project); - v.insert ("test.cleanups", variable_visibility::project); + if (!v || v.empty ()) + v = cast ((*global_scope)["build.host"]); } } diff --git a/build2/test/rule.cxx b/build2/test/rule.cxx index 5851e2f..ccbf932 100644 --- a/build2/test/rule.cxx +++ b/build2/test/rule.cxx @@ -419,7 +419,10 @@ namespace build2 auto run = [&t, &wd] (testscript& ts) { if (verb) - text << "test " << t << " with " << ts; + { + const auto& tt (cast (t["test.target"])); + text << "test " << t << " with " << ts << " on " << tt; + } script::parser p; script::script s (t, ts, wd); diff --git a/tests/build/root.build b/tests/build/root.build index 2792187..1903c41 100644 --- a/tests/build/root.build +++ b/tests/build/root.build @@ -13,5 +13,8 @@ cxx{*}: extension = cxx # as our $build.path). # import b = build2%exe{b} - dir{*}: test = $b + +# Specify the test target for cross-testing. +# +test.target = $cxx.target -- cgit v1.1