aboutsummaryrefslogtreecommitdiff
path: root/bpkg/pkg-build.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2023-08-26 14:21:54 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2023-09-25 11:35:25 +0300
commite826ff4361bced296a8d7af57228755d22a31f15 (patch)
tree95e97586ad4481700eb6d8ea13514a77a48f1a71 /bpkg/pkg-build.cxx
parentb48bd809a4760bc6e8718adc38837fe62bce1c20 (diff)
Fix configuration negotiation for cases when existing dependent collection is postponed
Diffstat (limited to 'bpkg/pkg-build.cxx')
-rw-r--r--bpkg/pkg-build.cxx62
1 files changed, 39 insertions, 23 deletions
diff --git a/bpkg/pkg-build.cxx b/bpkg/pkg-build.cxx
index 79f89bb..02ced21 100644
--- a/bpkg/pkg-build.cxx
+++ b/bpkg/pkg-build.cxx
@@ -4350,11 +4350,6 @@ namespace bpkg
}
else
{
- // Wouldn't be here otherwise.
- //
- assert (postponed_deps.find (package_key {ddb, d.name}) ==
- postponed_deps.end ());
-
shared_ptr<selected_package> sp (
ddb.find<selected_package> (d.name));
@@ -4366,7 +4361,7 @@ namespace bpkg
// Marking upgraded dependencies as "required by command line"
// may seem redundant as they should already be pre-entered as
// such (see above). But remember dependencies upgraded with
- // -i|-r? Note that the required_by data member should never be
+ // -i|-r? Note that the required_by data member should never be
// empty, as it is used in prompts/diagnostics.
//
build_package p {
@@ -4396,25 +4391,46 @@ namespace bpkg
? build_package::build_replace
: uint16_t (0))};
- build_package_refs dep_chain;
+ package_key pk {ddb, d.name};
- // Note: recursive.
+ // Similar to the user-selected packages, collect non-
+ // recursively the dependencies for which recursive collection
+ // is postponed (see above for details).
//
- pkgs.collect_build (o,
- move (p),
- replaced_vers,
- postponed_cfgs,
- &dep_chain,
- true /* initial_collection */,
- find_prereq_database,
- add_priv_cfg,
- &rpt_depts,
- &postponed_repo,
- &postponed_alts,
- &postponed_recs,
- &postponed_edeps,
- &postponed_deps,
- &unacceptable_alts);
+ auto i (postponed_deps.find (pk));
+ if (i == postponed_deps.end ())
+ {
+ build_package_refs dep_chain;
+
+ // Note: recursive.
+ //
+ pkgs.collect_build (o,
+ move (p),
+ replaced_vers,
+ postponed_cfgs,
+ &dep_chain,
+ true /* initial_collection */,
+ find_prereq_database,
+ add_priv_cfg,
+ &rpt_depts,
+ &postponed_repo,
+ &postponed_alts,
+ &postponed_recs,
+ &postponed_edeps,
+ &postponed_deps,
+ &unacceptable_alts);
+ }
+ else
+ {
+ i->second.wout_config = true;
+
+ l5 ([&]{trace << "dep-postpone user-specified dependency "
+ << pk;});
+
+ // Note: not recursive.
+ //
+ pkgs.collect_build (o, move (p), replaced_vers, postponed_cfgs);
+ }
}
}