aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mod/mod-build-task.cxx36
1 files changed, 30 insertions, 6 deletions
diff --git a/mod/mod-build-task.cxx b/mod/mod-build-task.cxx
index 7373ffe..4dd1e3d 100644
--- a/mod/mod-build-task.cxx
+++ b/mod/mod-build-task.cxx
@@ -1237,7 +1237,7 @@ handle (request& rq, response& rs)
// Collect the test packages and the auxiliary machines for their
// default build configurations. Exclude external test packages which
- // exclude the task build configuration.
+ // exclude the current target configuration.
//
small_vector<bpkg::test_dependency, 1> tests;
@@ -1255,7 +1255,13 @@ handle (request& rq, response& rs)
{
shared_ptr<build_package> tp (td.package.load ());
- // Use the default test package configuration.
+ // Try to use the test package configuration named the same as the
+ // current configuration of the main package. If there is no such
+ // a configuration or it excludes the current target
+ // configuration, then fallback to using the default configuration
+ // (which must exist). If in this case the default configuration
+ // excludes the current target configuration, then exclude this
+ // external test package from the build task.
//
// Note that potentially the test package default configuration
// may contain some (bpkg) arguments associated, but we currently
@@ -1263,8 +1269,7 @@ handle (request& rq, response& rs)
// however, is probably too far fetched so let's keep it simple
// for now.
//
- const build_package_config* tpc (find ("default", tp->configs));
- assert (tpc != nullptr); // Must always be present.
+ const build_package_config* tpc (find (pc.name, tp->configs));
// Use the `all` class as a least restrictive default underlying
// build class set. Note that we should only apply the explicit
@@ -1274,13 +1279,32 @@ handle (request& rq, response& rs)
//
build_db_->load (*tp, tp->constraints_section);
- if (exclude (*tpc,
+ if (tpc == nullptr ||
+ exclude (*tpc,
tp->builds,
tp->constraints,
tc,
nullptr /* reason */,
true /* default_all_ucs */))
- continue;
+ {
+ // If the current package configuration is "default", then we
+ // cannot fallback and just exclude the test package outright.
+ //
+ if (pc.name == "default")
+ continue;
+
+ tpc = find ("default", tp->configs);
+
+ assert (tpc != nullptr); // Must always be present.
+
+ if (exclude (*tpc,
+ tp->builds,
+ tp->constraints,
+ tc,
+ nullptr /* reason */,
+ true /* default_all_ucs */))
+ continue;
+ }
for (const build_auxiliary& ba:
tpc->effective_auxiliaries (tp->auxiliaries))