diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2022-03-07 21:58:40 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2022-03-08 14:23:04 +0300 |
commit | dd3c35fd102018c51d31e75345c4cf8ecab75848 (patch) | |
tree | 8eb1c9d877ae978f99ed415cdc70f6b006196621 /bbot | |
parent | 422563c63b2aedaa32fa217aca92b369ac4be755 (diff) |
Determine config.install.root differently for various primary package types
Diffstat (limited to 'bbot')
-rw-r--r-- | bbot/worker/worker.cxx | 97 |
1 files changed, 54 insertions, 43 deletions
diff --git a/bbot/worker/worker.cxx b/bbot/worker/worker.cxx index 18546e4..f2a3994 100644 --- a/bbot/worker/worker.cxx +++ b/bbot/worker/worker.cxx @@ -195,7 +195,7 @@ enum class step_id bpkg_update, bpkg_test, - // Note that separate test packages are configures as part of the + // Note that separate test packages are configured as part of the // bpkg_configure_build step above with options taken from // bpkg_{target,host}_configure_build, depending on tests package type. // @@ -1075,35 +1075,6 @@ build (size_t argc, const char* argv[]) return r; }; - // Search for config.install.root variable. If it is present and has a - // non-empty value, then test the package installation and uninstall. Note - // that passing [null] value would be meaningless, so we don't recognize - // it as a special one. - // - dir_path install_root; - { - size_t n (19); - auto space = [] (char c) {return c == ' ' || c == '\t';}; - - for (const char* s: - reverse_iterate (step_args (config_args, step_id::bpkg_create))) - { - if (strncmp (s, "config.install.root", n) == 0 && - (s[n] == '=' || space (s[n]))) - { - while (space (s[n])) ++n; // Skip spaces. - if (s[n] == '=') ++n; // Skip the equal sign. - while (space (s[n])) ++n; // Skip spaces. - - // Note that the config.install.root variable value may - // potentially be quoted. - // - install_root = dir_path (unquote (s + n)); - break; - } - } - } - // bpkg-rep-fetch trust options. // cstrings trust_ops; @@ -1290,6 +1261,56 @@ build (size_t argc, const char* argv[]) bool host_pkg (!module_pkg && requirement ("host")); bool target_pkg (!module_pkg && !host_pkg); + // Search for config.install.root variable. If it is present and has a + // non-empty value, then test the package installation and uninstall. Note + // that passing [null] value would be meaningless, so we don't recognize + // it as a special one. + // + // Note that the host package can only be installed for a self-hosted + // configuration, using bpkg configuration of the target type. + // + // Also note that the module package is always installed for a self-hosted + // configuration (and never otherwise), using config.install.root + // specified for ~build2 configuration. + // + // If present, indicates that the install, test installed, and uninstall + // operations need to be tested. + // + optional<dir_path> install_root; + + if (target_pkg || selfhost) + { + if (!module_pkg) + { + step_id s (step_id::bpkg_target_create); + step_id f1 (step_id::b_create); + step_id f2 (step_id::bpkg_create); + + size_t n (19); + auto space = [] (char c) {return c == ' ' || c == '\t';}; + + for (const char* a: + reverse_iterate (step_args (config_args, s, f1, f2))) + { + if (strncmp (a, "config.install.root", n) == 0 && + (a[n] == '=' || space (a[n]))) + { + while (space (a[n])) ++n; // Skip spaces. + if (a[n] == '=') ++n; // Skip the equal sign. + while (space (a[n])) ++n; // Skip spaces. + + // Note that the config.install.root variable value may potentially + // be quoted. + // + install_root = dir_path (unquote (a + n)); + break; + } + } + } + else + install_root = dir_path (); + } + // Split external test packages into the runtime and build-time lists. // // Note that runtime and build-time test packages are always configured in @@ -1379,7 +1400,7 @@ build (size_t argc, const char* argv[]) // Create the configuration for installing the main package of the host or // module type, unless it's not supposed to be installed. // - bool create_install (!target_pkg && !install_root.empty () && selfhost); + bool create_install (!target_pkg && install_root); // Root configuration through which we will be configuring the cluster // (note: does not necessarily match the main package type). @@ -2466,17 +2487,7 @@ build (size_t argc, const char* argv[]) // Install the package, optionally test the installation and uninstall // afterwards. // - // These operations are triggered by presence of config.install.root - // configuration variable having a non-empty value for - // bpkg.configure.create step. - // - if (install_root.empty ()) - break; - - // If this is not a self-hosted configuration, then skip installing host - // and module packages. - // - if (!target_pkg && !selfhost) + if (!install_root) break; // Now the overall plan is as follows: @@ -2577,7 +2588,7 @@ build (size_t argc, const char* argv[]) // beginning of the PATH environment variable value, so the installed // executables are found first. // - string paths ("PATH=" + (install_root / "bin").string ()); + string paths ("PATH=" + (*install_root / "bin").string ()); if (optional<string> s = getenv ("PATH")) { |