aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bpkg/pkg-build.cxx107
-rw-r--r--tests/pkg-build.testscript240
2 files changed, 259 insertions, 88 deletions
diff --git a/bpkg/pkg-build.cxx b/bpkg/pkg-build.cxx
index 94d83cf..b98a068 100644
--- a/bpkg/pkg-build.cxx
+++ b/bpkg/pkg-build.cxx
@@ -6,6 +6,7 @@
#include <map>
#include <set>
#include <list>
+#include <limits>
#include <cstring> // strlen()
#include <iostream> // cout
#include <functional> // ref()
@@ -1242,6 +1243,13 @@ namespace bpkg
#endif
}
+ bool
+ existing_dependent (const config_package& cp) const
+ {
+ auto i (dependents.find (cp));
+ return i != dependents.end () && i->second.existing;
+ }
+
// Return the postponed configuration string representation in the form:
//
// {<dependent>[ <dependent>]* | <dependency>[ <dependency>]*}
@@ -1448,6 +1456,18 @@ namespace bpkg
return true;
}
+
+ bool
+ existing_dependent (const config_package& cp) const
+ {
+ for (const postponed_configuration& cfg: *this)
+ {
+ if (cfg.existing_dependent (cp))
+ return true;
+ }
+
+ return false;
+ }
};
static ostream&
@@ -1591,6 +1611,10 @@ namespace bpkg
postpone (const config_package& cp,
const postponed_configurations& postponed_cfgs)
{
+ // @@ DPT
+ //
+ return false;
+
auto i (find (cp));
if (i == end ())
@@ -2258,8 +2282,10 @@ namespace bpkg
rpt_prereq_flags == nullptr &&
(pkg.config_vars.empty () ||
!has_buildfile_clause (ap->dependencies)) &&
- ((i = postponed_dpts.find (cp)) == postponed_dpts.end () ||
- !i->second.config))
+// @@ DPT
+// ((i = postponed_dpts.find (cp)) == postponed_dpts.end () ||
+// !i->second.config))
+ !postponed_cfgs.existing_dependent (cp))
{
l5 ([&]{trace << "skip configured "
<< pkg.available_name_version_db ();});
@@ -3386,6 +3412,11 @@ namespace bpkg
}
else if (bp->recursive_collection)
{
+ // @@ DPT
+ //
+ bool existing (cfg != nullptr &&
+ cfg->existing_dependent (cp));
+
// The possible reason we ended up here is the configuration
// cycle.
//
@@ -3423,12 +3454,20 @@ namespace bpkg
// original package, and their common direct dependent.
//
{
- l5 ([&]{trace << "cannot cfg-postpone dependency "
- << bp->available_name_version_db ()
- << " of dependent "
- << pkg.available_name_version_db ()
- << " (collected prematurely), checking for "
- << "configuration cycle";});
+ if (!existing)
+ l5 ([&]{trace << "cannot cfg-postpone dependency "
+ << bp->available_name_version_db ()
+ << " of dependent "
+ << pkg.available_name_version_db ()
+ << " (collected prematurely), checking for "
+ << "configuration cycle";});
+ else
+ l5 ([&]{trace << "dependency "
+ << bp->available_name_version_db ()
+ << " of existing dependent "
+ << pkg.available_name_version_db ()
+ << " is already collected, checking for "
+ << "configuration cycle";});
// Create a temporary clusters list.
//
@@ -3446,11 +3485,12 @@ namespace bpkg
}
}
- cfgs.add (cp,
- false /* existing */,
- di + 1,
- postponed_configuration::packages ({dcp}),
- true /* allow_negotiated */);
+ if (!existing) // @@ DPT
+ cfgs.add (cp,
+ false /* existing */,
+ di + 1,
+ postponed_configuration::packages ({dcp}),
+ true /* allow_negotiated */);
// Iterate over the clusters.
//
@@ -3617,13 +3657,19 @@ namespace bpkg
}
}
- l5 ([&]{trace << "no configuration cycle, throwing";});
+ if (!existing) // @@ DPT
+ {
+ l5 ([&]{trace << "no configuration cycle, throwing";});
- // Don't print the "while satisfying..." chain.
- //
- dep_chain.clear ();
+ // Don't print the "while satisfying..." chain.
+ //
+ dep_chain.clear ();
- throw postpone_dependency (move (dcp));
+ throw postpone_dependency (move (dcp));
+ }
+ else
+ l5 ([&]{trace << "no configuration cycle, skipping "
+ << "collected dependency";});
}
else
{
@@ -4418,7 +4464,7 @@ namespace bpkg
if (!dependents.empty ())
{
- l5 ([&]{trace << "re-evaluate existing dependents";});
+ l5 ([&]{trace << "re-evaluate existing dependents for " << *pcfg;});
for (auto& d: dependents)
{
@@ -4449,8 +4495,17 @@ namespace bpkg
set<config_package> (
ds.begin (), ds.end ()), // Required by (dependency).
false, // Required by dependents.
- 0}; // State flags.
-
+ build_package::adjust_reconfigure}; // State flags. // @@ DPT
+
+ // @@ DPT What to do if the version replacement occurred in this
+ // function call? We could theoretically incorporate the
+ // version replacement check into
+ // query_configuring_dependents() and skip such dependents,
+ // but what if such replacement entry will turn out to be
+ // bogus and we will end up not considering this dependent
+ // for negotiation. Do we need to throw on bogus negotiations
+ // or some such?
+ //
collect_build (o,
move (p),
fdb,
@@ -4518,15 +4573,17 @@ namespace bpkg
for (const auto& p: pcfg->dependents)
{
+ // @@ DPT (commented out the below code)
+ //
// @@ TMP Re-evaluated existing dependents should not be
// distingushed from others here (they will also have
// postponed_dependency_alternatives present, etc).
//
- if (p.second.existing)
- continue;
+ //if (p.second.existing)
+ // continue;
build_package* b (this->entered_build (p.first));
- assert (b != nullptr && b->postponed_dependency_alternatives);
+ assert (b != nullptr);
build_package_refs dep_chain;
@@ -4543,7 +4600,7 @@ namespace bpkg
dep_chain,
&postponed_repo,
&postponed_alts,
- b->postponed_dependency_alternatives->size (),
+ numeric_limits<size_t>::max (),
postponed_deps);
}
diff --git a/tests/pkg-build.testscript b/tests/pkg-build.testscript
index fc41224..af57ab8 100644
--- a/tests/pkg-build.testscript
+++ b/tests/pkg-build.testscript
@@ -5273,7 +5273,7 @@ test.options += --no-progress
trace: collect_build_postponed (0): begin
trace: collect_build_postponed (1): begin
%.*
- trace: collect_build_postponed (1): re-evaluate existing dependents
+ trace: collect_build_postponed (1): re-evaluate existing dependents for { | libfoo->{}}
trace: collect_build: add foo/1.0.0
trace: postponed_configurations::add: add {foo | libfoo->{foo/1}} to { | libfoo->{}}
trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1}}
@@ -5281,6 +5281,12 @@ test.options += --no-progress
trace: collect_build_prerequisites: begin libfoo/0.1.0
trace: collect_build_prerequisites: end libfoo/0.1.0
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
+ %.*
+ trace: collect_build_prerequisites: begin foo/1.0.0
+ %.*
+ trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/0.1.0 of dependent foo/1.0.0
+ trace: collect_build_prerequisites: end foo/1.0.0
trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo->{foo/1}}
trace: collect_build_postponed (1): end
trace: collect_build_postponed (0): end
@@ -5302,13 +5308,18 @@ test.options += --no-progress
trace: collect_build_postponed (0): begin
trace: collect_build_postponed (1): begin
%.*
- trace: collect_build_postponed (1): re-evaluate existing dependents
+ trace: collect_build_postponed (1): re-evaluate existing dependents for { | libfoo->{}}
trace: collect_build: add foo/1.0.0
trace: postponed_configurations::add: add {foo | libfoo->{foo/1}} to { | libfoo->{}}
trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
trace: collect_build_prerequisites: skip configured libfoo/0.1.0
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
+ %.*
+ trace: collect_build_prerequisites: begin foo/1.0.0
+ %.*
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/0.1.0 of dependent foo/1.0.0
+ trace: collect_build_prerequisites: end foo/1.0.0
trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo->{foo/1}}
trace: collect_build_postponed (1): end
trace: collect_build_postponed (0): end
@@ -7361,12 +7372,11 @@ test.options += --no-progress
# Configuration clusters:
#
- # {tix | libbar->{tix/1}}
- # {tix | tex->{tix/2}}
+ # {tex tix | libbar->{tex/1 tix/1}}
#
# Fail at:
#
- # tex -> libbar
+ # tix -> tex
#
$* tix 2>>~%EOE% != 0;
%.*
@@ -7382,29 +7392,92 @@ test.options += --no-progress
trace: collect_build_postponed (0): begin
trace: collect_build_postponed (1): begin
%.*
- trace: collect_build_postponed (1): re-evaluate existing dependents
+ trace: collect_build_postponed (1): re-evaluate existing dependents for {tix | libbar->{tix/1}}
trace: collect_build: add tex/1.0.0
trace: postponed_configurations::add: add {tex | libbar->{tex/1}} to {tix | libbar->{tix/1}}
trace: collect_build_postponed (1): cfg-negotiate begin {tex tix | libbar->{tex/1 tix/1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
trace: collect_build_prerequisites: skip configured libbar/1.0.0
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
+ %.*
+ trace: collect_build_prerequisites: begin tex/1.0.0
+ %.*
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tex/1.0.0
+ %.*
+ trace: collect_build: add libfoo/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0
+ trace: postponed_configurations::add: create {tex | libfoo->{tex/2}}
+ trace: collect_build_prerequisites: postpone tex/1.0.0
+ trace: collect_build_prerequisites: resume tix/1.0.0
+ %.*
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tix/1.0.0
+ %.*
+ trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 (collected prematurely), checking for configuration cycle
+ trace: collect_build_prerequisites: being negotiated: {tex tix | libbar->{tex/1 tix/1}}
+ trace: postponed_configurations::add: create {tix | tex->{tix/2}}
+ trace: collect_build_prerequisites: verifying {tex tix | libbar->{tex/1 tix/1}}
+ error: package tix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency tex/1.0.0 negotiates configuration of libbar/1.0.0
+ info: consider reordering dependencies of tix/1.0.0
+ %.*
+ EOE
+
+ # @@ These tests fail complaining on tix/1.0.0->tex/1.0.0 cycle.
+ # However, we downgrade tex to 0.1.0 or 0.2.0 for which there
+ # is no cycle (0.2.0 depends on libbar without config clause and
+ # 0.1.0 doesn't depend at all).
+ #
+ #$* tix ?tex/0.1.0 2>|;
+ #$* tix ?tex/0.2.0 2>|;
+
+ $* tix tex/0.1.0 2>>~%EOE%;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: collect_build: add tix/1.0.0
+ trace: collect_build: add tex/0.1.0
+ trace: collect_build_prerequisites: begin tix/1.0.0
+ %.*
+ trace: collect_build: add libbar/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tix/1.0.0
+ trace: postponed_configurations::add: create {tix | libbar->{tix/1}}
+ trace: collect_build_prerequisites: postpone tix/1.0.0
+ %.*
+ trace: collect_build_prerequisites: begin tex/0.1.0
+ %.*
+ trace: collect_build: add libfoo/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/0.1.0
+ trace: postponed_configurations::add: create {tex | libfoo->{tex/1}}
+ trace: collect_build_prerequisites: postpone tex/0.1.0
+ trace: collect_build_postponed (0): begin
+ trace: collect_build_postponed (1): begin
+ %.*
+ trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1}}
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: skip configured libbar/1.0.0
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
trace: collect_build_prerequisites: resume tix/1.0.0
%.*
trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tix/1.0.0
%.*
- trace: collect_build: cannot collect prematurely cfg-negotiated existing dependent tex, throwing
- trace: pkg_build: collection failed due to prematurely cfg-negotiated existing dependent, retry from scratch
+ trace: collect_build: pick tex/0.1.0 over tex/1.0.0
+ trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/0.1.0 of dependent tix/1.0.0 (collected prematurely), checking for configuration cycle
+ trace: collect_build_prerequisites: being negotiated: {tix | libbar->{tix/1}}
+ trace: postponed_configurations::add: create {tix | tex->{tix/2}}
+ trace: collect_build_prerequisites: verifying {tix | libbar->{tix/1}}
+ trace: collect_build_prerequisites: no configuration cycle, throwing
+ trace: pkg_build: collection failed due to prematurely collected dependency (tex), retry from scratch
%.*
trace: pkg_build: refine package collection/plan execution from scratch
%.*
trace: collect_build: add tix/1.0.0
+ trace: collect_build: add tex/0.1.0
trace: collect_build_prerequisites: begin tix/1.0.0
%.*
trace: collect_build: add libbar/1.0.0
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tix/1.0.0
trace: postponed_configurations::add: create {tix | libbar->{tix/1}}
trace: collect_build_prerequisites: postpone tix/1.0.0
+ trace: pkg_build: dep-postpone user-specified tex
trace: collect_build_postponed (0): begin
trace: collect_build_postponed (1): begin
%.*
@@ -7416,8 +7489,8 @@ test.options += --no-progress
%.*
trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tix/1.0.0
%.*
- trace: collect_build: add tex/1.0.0
- trace: collect_build_prerequisites: cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0
+ trace: collect_build: pick tex/0.1.0 over tex/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency tex/0.1.0 of dependent tix/1.0.0
trace: postponed_configurations::add: create {tix | tex->{tix/2}}
trace: collect_build_prerequisites: postpone tix/1.0.0
trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1}}
@@ -7425,27 +7498,40 @@ test.options += --no-progress
%.*
trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2}}
trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies
- trace: collect_build_prerequisites: begin tex/1.0.0
+ trace: collect_build_prerequisites: begin tex/0.1.0
%.*
- trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 (collected prematurely), checking for configuration cycle
- trace: collect_build_prerequisites: negotiated: {tix | libbar->{tix/1}}
- trace: collect_build_prerequisites: being negotiated: {tix | tex->{tix/2}}
- trace: postponed_configurations::add: add {tex | libbar->{tex/1}} to {tix | libbar->{tix/1}}
- trace: collect_build_prerequisites: verifying {tex tix | libbar->{tex/1 tix/1}}
- error: package tix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency tex/1.0.0 negotiates configuration of libbar/1.0.0
- info: consider reordering dependencies of tix/1.0.0
+ trace: collect_build: add libfoo/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/0.1.0
+ trace: postponed_configurations::add: create {tex | libfoo->{tex/1}}
+ trace: collect_build_prerequisites: postpone tex/0.1.0
+ trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents
+ trace: collect_build_prerequisites: resume tix/1.0.0
+ %.*
+ trace: collect_build: pick tex/0.1.0 over tex/1.0.0
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency tex/0.1.0 of dependent tix/1.0.0
+ trace: collect_build_prerequisites: end tix/1.0.0
+ trace: collect_build_postponed (2): cfg-negotiate end {tix | tex->{tix/2}}
+ trace: collect_build_postponed (3): begin
+ %.*
+ trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/1}}
+ trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: skip configured libfoo/1.0.0
+ trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents
+ trace: collect_build_prerequisites: resume tex/0.1.0
+ %.*
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent tex/0.1.0
+ trace: collect_build_prerequisites: end tex/0.1.0
+ trace: collect_build_postponed (3): cfg-negotiate end {tex | libfoo->{tex/1}}
+ trace: collect_build_postponed (3): end
+ trace: collect_build_postponed (2): end
+ trace: collect_build_postponed (1): end
+ trace: collect_build_postponed (0): end
+ %.*
+ trace: execute_plan: simulate: yes
%.*
EOE
- # @@ These tests fail complaining on tix/1.0.0->tex/1.0.0 cycle.
- # However, we downgrade tex to 0.1.0 or 0.2.0 for which there
- # is no cycle (0.2.0 depends on libbar without config clause and
- # 0.1.0 doesn't depend at all).
- #
- #$* tix ?tex/0.1.0 2>|;
- #$* tix ?tex/0.2.0 2>|;
-
- $pkg_drop tex
+ $pkg_drop tex tix
}
}
}
@@ -8451,13 +8537,18 @@ test.options += --no-progress
#
$* dex 2>!;
- # @@ Here we would expect to fail due to the config cycle but we
- # don't.
+ # Configuration clusters:
+ #
+ # {bar dix | libbar->{bar/1 dix/1}}
+ # {dex | bar->{dex/1}}
+ # {dix | libbox->{dix/2}}
+ # {dex | libfoo->{dex/2}}
+ # {dix | dox->{dix/3}}
#
# Fail at:
#
+ # dox -> dex
#
- #\
$* dix 2>>~%EOE% != 0;
%.*
trace: pkg_build: refine package collection/plan execution from scratch
@@ -8472,13 +8563,16 @@ test.options += --no-progress
trace: collect_build_postponed (0): begin
trace: collect_build_postponed (1): begin
%.*
- trace: collect_build_postponed (1): re-evaluate existing dependents
+ trace: collect_build_postponed (1): re-evaluate existing dependents for {dix | libbar->{dix/1}}
trace: collect_build: add bar/1.0.0
trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {dix | libbar->{dix/1}}
trace: collect_build_postponed (1): cfg-negotiate begin {bar dix | libbar->{bar/1 dix/1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
trace: collect_build_prerequisites: skip configured libbar/1.0.0
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
+ %.*
+ trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of existing dependent dex/1.0.0
+ trace: postponed_configurations::add: create { | bar->{}}
trace: collect_build_prerequisites: resume dix/1.0.0
%.*
trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent dix/1.0.0
@@ -8490,11 +8584,38 @@ test.options += --no-progress
trace: collect_build_postponed (1): cfg-negotiate end {bar dix | libbar->{bar/1 dix/1}}
trace: collect_build_postponed (2): begin
%.*
- trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2}}
+ trace: collect_build_postponed (2): re-evaluate existing dependents for { | bar->{}}
+ trace: collect_build: add dex/1.0.0
+ trace: postponed_configurations::add: add {dex | bar->{dex/1}} to { | bar->{}}
+ trace: collect_build_postponed (2): cfg-negotiate begin {dex | bar->{dex/1}}
trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin bar/1.0.0
+ %.*
+ trace: collect_build_prerequisites: dependency libbar/1.0.0 of existing dependent bar/1.0.0 is already collected, checking for configuration cycle
+ trace: collect_build_prerequisites: negotiated: {bar dix | libbar->{bar/1 dix/1}}
+ trace: collect_build_prerequisites: being negotiated: {dex | bar->{dex/1}}
+ trace: collect_build_prerequisites: verifying {bar dix | libbar->{bar/1 dix/1}}
+ trace: collect_build_prerequisites: verifying {dex | bar->{dex/1}}
+ trace: collect_build_prerequisites: no configuration cycle, skipping collected dependency
+ trace: collect_build_prerequisites: end bar/1.0.0
+ trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents
+ %.*
+ trace: collect_build_prerequisites: begin dex/1.0.0
+ %.*
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency bar/1.0.0 of dependent dex/1.0.0
+ %.*
+ trace: collect_build: add libfoo/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent dex/1.0.0
+ trace: postponed_configurations::add: create {dex | libfoo->{dex/2}}
+ trace: collect_build_prerequisites: postpone dex/1.0.0
+ trace: collect_build_postponed (2): cfg-negotiate end {dex | bar->{dex/1}}
+ trace: collect_build_postponed (3): begin
+ %.*
+ trace: collect_build_postponed (3): cfg-negotiate begin {dix | libbox->{dix/2}}
+ trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies
trace: collect_build_prerequisites: begin libbox/1.0.0
trace: collect_build_prerequisites: end libbox/1.0.0
- trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents
+ trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents
trace: collect_build_prerequisites: resume dix/1.0.0
%.*
trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent dix/1.0.0
@@ -8503,43 +8624,36 @@ test.options += --no-progress
trace: collect_build_prerequisites: cfg-postpone dependency dox/1.0.0 of dependent dix/1.0.0
trace: postponed_configurations::add: create {dix | dox->{dix/3}}
trace: collect_build_prerequisites: postpone dix/1.0.0
- trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2}}
- trace: collect_build_postponed (3): begin
- %.*
- trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3}}
- trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies
- trace: collect_build_prerequisites: begin dox/1.0.0
- %.*
- trace: collect_build: add dex/1.0.0
- trace: collect_build_prerequisites: cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0
- trace: postponed_configurations::add: create {dox | dex->{dox/1}}
- trace: collect_build_prerequisites: postpone dox/1.0.0
- trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents
- trace: collect_build_prerequisites: resume dix/1.0.0
- %.*
- trace: collect_build_prerequisites: skip cfg-negotiated dependency dox/1.0.0 of dependent dix/1.0.0
- trace: collect_build_prerequisites: end dix/1.0.0
- trace: collect_build_postponed (3): cfg-negotiate end {dix | dox->{dix/3}}
+ trace: collect_build_postponed (3): cfg-negotiate end {dix | libbox->{dix/2}}
trace: collect_build_postponed (4): begin
%.*
- trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1}}
+ trace: collect_build_postponed (4): cfg-negotiate begin {dex | libfoo->{dex/2}}
trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies
- trace: collect_build_prerequisites: skip configured dex/1.0.0
+ trace: collect_build_prerequisites: skip configured libfoo/1.0.0
trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents
- trace: collect_build_prerequisites: resume dox/1.0.0
+ trace: collect_build_prerequisites: resume dex/1.0.0
%.*
- trace: collect_build_prerequisites: skip cfg-negotiated dependency dex/1.0.0 of dependent dox/1.0.0
- trace: collect_build_prerequisites: end dox/1.0.0
- trace: collect_build_postponed (4): cfg-negotiate end {dox | dex->{dox/1}}
- trace: collect_build_postponed (4): end
- trace: collect_build_postponed (3): end
- trace: collect_build_postponed (2): end
- trace: collect_build_postponed (1): end
- trace: collect_build_postponed (0): end
- trace: execute_plan: simulate: yes
+ trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent dex/1.0.0
+ trace: collect_build_prerequisites: end dex/1.0.0
+ trace: collect_build_postponed (4): cfg-negotiate end {dex | libfoo->{dex/2}}
+ trace: collect_build_postponed (5): begin
+ %.*
+ trace: collect_build_postponed (5): cfg-negotiate begin {dix | dox->{dix/3}}
+ trace: collect_build_postponed (5): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin dox/1.0.0
+ %.*
+ trace: collect_build_prerequisites: cannot cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 (collected prematurely), checking for configuration cycle
+ trace: collect_build_prerequisites: negotiated: {bar dix | libbar->{bar/1 dix/1}}
+ trace: collect_build_prerequisites: negotiated: {dex | bar->{dex/1}}
+ trace: collect_build_prerequisites: negotiated: {dix | libbox->{dix/2}}
+ trace: collect_build_prerequisites: negotiated: {dex | libfoo->{dex/2}}
+ trace: collect_build_prerequisites: being negotiated: {dix | dox->{dix/3}}
+ trace: postponed_configurations::add: create {dox | dex->{dox/1}}
+ trace: collect_build_prerequisites: verifying {bar dix | libbar->{bar/1 dix/1}}
+ error: package dix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency bar/1.0.0 negotiates configuration of libbar/1.0.0
+ info: consider reordering dependencies of dix/1.0.0
%.*
EOE
- #\
$pkg_drop dex
}