aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bbot/worker/worker.cxx120
-rw-r--r--doc/manual.cli7
-rw-r--r--tests/integration/testscript29
3 files changed, 138 insertions, 18 deletions
diff --git a/bbot/worker/worker.cxx b/bbot/worker/worker.cxx
index ce62ae9..234e804 100644
--- a/bbot/worker/worker.cxx
+++ b/bbot/worker/worker.cxx
@@ -789,7 +789,7 @@ upload_manifest (tracer& trace,
}
}
-static const string worker_checksum ("2"); // Logic version.
+static const string worker_checksum ("3"); // Logic version.
static int bbot::
build (size_t argc, const char* argv[])
@@ -1099,6 +1099,7 @@ build (size_t argc, const char* argv[])
const version& ver (tm.version);
const string repo (tm.repository.string ());
const dir_path pkg_dir (pkg + '-' + ver.string ());
+ const string pkg_var (tm.name.variable ());
// Specify the revision explicitly for the bpkg-build command not to end
// up with a race condition building the latest revision rather than the
@@ -1427,7 +1428,7 @@ build (size_t argc, const char* argv[])
optional<string> bootstrap_import;
if (bootstrap)
- bootstrap_import = "!config.import." + tm.name.variable () + "=" +
+ bootstrap_import = "!config.import." + pkg_var + "=" +
(rwd / main_pkg_conf).string ();
// Configure.
@@ -1934,6 +1935,11 @@ build (size_t argc, const char* argv[])
//
// First, prepare the common and package arguments.
//
+ // Add the config.<pkg>.develop=false variables for the main and
+ // external test packages to trigger their package skeleton creation and
+ // loading. This way we make sure that these packages can be used as
+ // dependencies of dependents with configuration clauses.
+ //
strings common_args;
strings pkg_args;
@@ -1942,7 +1948,8 @@ build (size_t argc, const char* argv[])
// The overall command looks like this:
//
// bpkg build --configure-only <env-config-args> <config-args> --
- // <pkg> <runtime-test>...
+ // { config.<pkg-name>.develop=false }+ <pkg>
+ // { config.<runtime-test-name>.develop=false }+ <runtime-test>...
//
step_id s (step_id::bpkg_target_configure_build);
step_id f1 (step_id::b_configure);
@@ -1957,22 +1964,43 @@ build (size_t argc, const char* argv[])
common_args.insert (common_args.end (), eas.begin (), eas.end ());
common_args.insert (common_args.end (), cas.begin (), cas.end ());
+ // @@ config.<pkg>.develop=false
+ //
+#if 1
+ pkg_args.push_back ("{");
+ pkg_args.push_back ("config." + pkg_var + ".develop=false");
+ pkg_args.push_back ("}+");
+#endif
+
pkg_args.push_back (pkg_rev);
- // Add test dependency package constraints (for example 'bar > 1.0.0').
- //
- for (auto t: runtime_tests)
+ for (const auto& t: runtime_tests)
+ {
+ // @@ config.<pkg>.develop=false
+ //
+#if 1
+ pkg_args.push_back ("{");
+ pkg_args.push_back ("config." +
+ t.name.variable () +
+ ".develop=false");
+ pkg_args.push_back ("}+");
+#endif
+
+ // Add test dependency package constraints (for example
+ // 'bar > 1.0.0').
+ //
pkg_args.push_back (t.string ());
+ }
}
else
{
// The overall command looks like this (but some parts may be omitted):
//
// bpkg build --configure-only <env-config-args> <config-args> --
- // { <build-config> <env-config-args> <config-args> }+ <pkg>
- // { <build-config> <env-config-args> <config-args> }+ { <runtime-test>... }
+ // { <build-config> <env-config-args> <config-args> config.<pkg-name>.develop=false }+ <pkg>
+ // { <build-config> <env-config-args> <config-args> config.<runtime-test-name>.develop=false }+ <runtime-test>...
// { <install-config> <env-config-args> <config-args> }+ <pkg>
- // { <target-config> <env-config-args> <config-args> }+ { <buildtime-test>... }
+ // { <target-config> <env-config-args> <config-args> config.<buildtime-test-name>.develop=false }+ <buildtime-test>...
//
// Add the main package args.
@@ -2011,6 +2039,12 @@ build (size_t argc, const char* argv[])
pkg_args.insert (pkg_args.end (), eas.begin (), eas.end ());
pkg_args.insert (pkg_args.end (), cas.begin (), cas.end ());
+ // @@ config.<pkg>.develop=false
+ //
+#if 1
+ pkg_args.push_back ("config." + pkg_var + ".develop=false");
+#endif
+
pkg_args.push_back ("}+");
pkg_args.push_back (pkg_rev);
@@ -2018,6 +2052,34 @@ build (size_t argc, const char* argv[])
// Add the runtime test packages.
//
+ // @@ config.<pkg>.develop=false
+ //
+#if 1
+ for (const auto& t: runtime_tests)
+ {
+ pkg_args.push_back ("{");
+
+ pkg_args.push_back ("--config-uuid");
+ pkg_args.push_back (conf_uuid);
+
+ pkg_args.push_back ("--checkout-root");
+ pkg_args.push_back (dist_root.string ());
+
+ if (bootstrap_import)
+ pkg_args.push_back (*bootstrap_import);
+
+ pkg_args.insert (pkg_args.end (), eas.begin (), eas.end ());
+ pkg_args.insert (pkg_args.end (), cas.begin (), cas.end ());
+
+ pkg_args.push_back ("config." +
+ t.name.variable () +
+ ".develop=false");
+
+ pkg_args.push_back ("}+");
+
+ pkg_args.push_back (t.string ());
+ }
+#else
if (has_runtime_tests)
{
pkg_args.push_back ("{");
@@ -2042,12 +2104,13 @@ build (size_t argc, const char* argv[])
if (runtime_tests.size () != 1)
pkg_args.push_back ("{");
- for (auto t: runtime_tests)
+ for (const auto& t: runtime_tests)
pkg_args.push_back (t.string ());
if (runtime_tests.size () != 1)
pkg_args.push_back ("}");
}
+#endif
}
// Add the main package configured in the install configuration and
@@ -2090,6 +2153,36 @@ build (size_t argc, const char* argv[])
// Add the build-time test packages.
//
+ // @@ config.<pkg>.develop=false
+ //
+#if 1
+ for (const auto& t: buildtime_tests)
+ {
+ pkg_args.push_back ("{");
+
+ pkg_args.push_back ("--config-uuid");
+ pkg_args.push_back (target_uuid);
+
+ pkg_args.push_back ("--checkout-root");
+ pkg_args.push_back (dist_root.string ());
+
+ if (bootstrap_import)
+ pkg_args.push_back (*bootstrap_import);
+
+ pkg_args.insert (pkg_args.end (), eas.begin (), eas.end ());
+ pkg_args.insert (pkg_args.end (), cas.begin (), cas.end ());
+
+ pkg_args.push_back ("config." +
+ t.name.variable () +
+ ".develop=false");
+
+ pkg_args.push_back ("}+");
+
+ // Strip the build-time mark.
+ //
+ pkg_args.push_back (t.dependency::string ());
+ }
+#else
if (has_buildtime_tests)
{
pkg_args.push_back ("{");
@@ -2116,12 +2209,13 @@ build (size_t argc, const char* argv[])
// Strip the build-time mark.
//
- for (auto t: buildtime_tests)
+ for (const auto& t: buildtime_tests)
pkg_args.push_back (t.dependency::string ());
if (buildtime_tests.size () != 1)
pkg_args.push_back ("}");
}
+#endif
}
}
@@ -3056,7 +3150,7 @@ build (size_t argc, const char* argv[])
if (og && runtime_tests.size () != 1)
pkg_args.push_back ("{");
- for (auto t: runtime_tests)
+ for (const auto& t: runtime_tests)
pkg_args.push_back (t.string ());
if (og && runtime_tests.size () != 1)
@@ -3067,7 +3161,7 @@ build (size_t argc, const char* argv[])
{
// Strip the build-time mark.
//
- for (auto t: buildtime_tests)
+ for (const auto& t: buildtime_tests)
pkg_args.push_back (t.dependency::string ());
}
diff --git a/doc/manual.cli b/doc/manual.cli
index 86b90ba..52cfc83 100644
--- a/doc/manual.cli
+++ b/doc/manual.cli
@@ -945,6 +945,13 @@ by always using the \c{bpkg.global.configure.build} prefix step id for global
(as opposed to package-specific) \l{bpkg-pkg-build(1)} options. The
\c{bpkg.global.configure.build} prefix id has no fallback ids.
+Note finally that the worker adds the \c{config.<name>.develop=false}
+configuration variables for the main and external test packages at the
+\c{bpkg.configure.build} step to trigger their package skeleton creation and
+loading. This makes sure that these packages can be used as dependencies of
+dependents with configuration clauses. To keep the below listings concise,
+these variables are not shown.
+
Worker script for \c{target} packages:
\
diff --git a/tests/integration/testscript b/tests/integration/testscript
index 2a49dfd..4b27b7f 100644
--- a/tests/integration/testscript
+++ b/tests/integration/testscript
@@ -60,7 +60,7 @@ rfp = yes
#\
pkg = hello
-ver = 1.0.0+6
+ver = 1.0.0+8
rep_url = "https://git.build2.org/hello/hello.git"
rep_type = git
rfp = yes
@@ -68,7 +68,7 @@ rfp = yes
#\
pkg = libstudxml
-ver = 1.1.0-b.9.20210202082911.e729667b0f34
+ver = 1.1.0-b.10
rep_url = https://stage.build2.org/1
rep_type = pkg
rfp = yes
@@ -109,7 +109,7 @@ host='host: true'
#\
pkg = curl
-ver = 7.67.0+8
+ver = 7.76.0
rep_url = https://pkg.cppget.org/1/testing
rep_type = pkg
rfp = yes
@@ -131,7 +131,7 @@ host='host: true'
#\
pkg = libxsd
-ver = 4.2.0-b.1.20211007072931.2239061347d1
+ver = 4.2.0-b.3.20220224113525.516981000564
rep_url = "https://git.codesynthesis.com/xsd/xsd.git#master"
rep_type = git
#rep_url = https://stage.build2.org/1
@@ -156,8 +156,18 @@ host='host: true'
#\
#\
+pkg = odb
+ver = 2.5.0-b.22.20220629083600.4a9af07ee566
+rep_url = "https://git.codesynthesis.com/odb/odb.git#master"
+rep_type = git
+rfp = yes
+requires='requires: host'
+host='host: true'
+#\
+
+#\
pkg = libcmark-gfm-extensions
-ver = 0.29.0-a.1+7
+ver = 0.29.0-a.4
rep_url = https://stage.build2.org/1
rep_type = pkg
rfp = yes
@@ -172,6 +182,15 @@ rep_type = pkg
rfp = yes
#\
+#\
+pkg = fmt
+ver = 8.1.1
+rep_url = "https://github.com/build2-packaging/fmt.git"
+#rep_url = "git+file:/tmp/fmt#master"
+rep_type = git
+rfp = yes
+#\
+
# Note that we also need to make sure that the installed package libraries are
# properly imported when configuring and running tests, and that the installed
# executables are runnable.