aboutsummaryrefslogtreecommitdiffstats
path: root/lib/_emerge/depgraph.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2023-12-05 22:05:46 -0800
committerZac Medico <zmedico@gentoo.org>2023-12-06 12:23:14 -0800
commit1d856747ada48f8d32c033091b1156cc655efed3 (patch)
tree00e6fb24946f0ce13fb29dd46211e72bcb13df95 /lib/_emerge/depgraph.py
parentBuildLogger: Close self._stdin after fork (diff)
downloadgentoo-portage-1d856747ada48f8d32c033091b1156cc655efed3.tar.xz
gentoo-portage-1d856747ada48f8d32c033091b1156cc655efed3.zip
DepPriority{Normal,Satisfied}Range: weaken _ignore_runtime for cross root
When the dependency parent is for a cross root (ROOT != /) package, weaken _ignore_runtime in order to tolerate runtime cycles that are less problematic for cross root packages. The included test case fails with this error without the fix: * Error: circular dependencies: (dev-libs/gmp-6.3.0:0/10.4::test_repo, binary scheduled for merge to '/tmp/tmp25nwdjn7/cross_root/') depends on (sys-devel/gcc-13.2.1_p20230826:0/0::test_repo, binary scheduled for merge to '/tmp/tmp25nwdjn7/cross_root/') (runtime) (dev-libs/gmp-6.3.0:0/10.4::test_repo, binary scheduled for merge to '/tmp/tmp25nwdjn7/cross_root/') (runtime_slot_op) It might be possible to break this cycle by applying the following change: - dev-libs/gmp-6.3.0 (Change USE: -cxx) Bug: https://bugs.gentoo.org/919174 Signed-off-by: Zac Medico <zmedico@gentoo.org>
Diffstat (limited to 'lib/_emerge/depgraph.py')
-rw-r--r--lib/_emerge/depgraph.py46
1 files changed, 36 insertions, 10 deletions
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index 9b09701021dc..59c78c73543c 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -3630,7 +3630,7 @@ class depgraph:
blocker=False,
depth=depth,
parent=pkg,
- priority=self._priority(runtime=True),
+ priority=self._priority(cross=self._cross(pkg.root), runtime=True),
root=pkg.root,
)
if not self._add_dep(dep, allow_unsatisfied=allow_unsatisfied):
@@ -3968,17 +3968,26 @@ class depgraph:
# _dep_disjunctive_stack first, so that choices for build-time
# deps influence choices for run-time deps (bug 639346).
deps = (
- (myroot, edepend["RDEPEND"], self._priority(runtime=True)),
+ (
+ myroot,
+ edepend["RDEPEND"],
+ self._priority(cross=self._cross(pkg.root), runtime=True),
+ ),
(
self._frozen_config._running_root.root,
edepend["IDEPEND"],
- self._priority(runtime=True),
+ self._priority(cross=self._cross(pkg.root), runtime=True),
+ ),
+ (
+ myroot,
+ edepend["PDEPEND"],
+ self._priority(cross=self._cross(pkg.root), runtime_post=True),
),
- (myroot, edepend["PDEPEND"], self._priority(runtime_post=True)),
(
depend_root,
edepend["DEPEND"],
self._priority(
+ cross=self._cross(pkg.root),
buildtime=True,
optional=(pkg.built or ignore_depend_deps),
ignored=ignore_depend_deps,
@@ -3988,6 +3997,7 @@ class depgraph:
self._frozen_config._running_root.root,
edepend["BDEPEND"],
self._priority(
+ cross=self._cross(pkg.root),
buildtime=True,
optional=(pkg.built or ignore_bdepend_deps),
ignored=ignore_bdepend_deps,
@@ -4036,7 +4046,9 @@ class depgraph:
self._queue_disjunctive_deps(
pkg,
dep_root,
- self._priority(runtime_post=True),
+ self._priority(
+ cross=self._cross(pkg.root), runtime_post=True
+ ),
test_deps,
)
)
@@ -4044,7 +4056,9 @@ class depgraph:
if test_deps and not self._add_pkg_dep_string(
pkg,
dep_root,
- self._priority(runtime_post=True),
+ self._priority(
+ cross=self._cross(pkg.root), runtime_post=True
+ ),
test_deps,
allow_unsatisfied,
):
@@ -4359,7 +4373,10 @@ class depgraph:
return 0
for atom, child in self._minimize_children(
- pkg, self._priority(runtime=True), root_config, atoms
+ pkg,
+ self._priority(cross=self._cross(pkg.root), runtime=True),
+ root_config,
+ atoms,
):
# If this was a specially generated virtual atom
# from dep_check, map it back to the original, in
@@ -4369,7 +4386,7 @@ class depgraph:
atom = getattr(atom, "_orig_atom", atom)
# This is a GLEP 37 virtual, so its deps are all runtime.
- mypriority = self._priority(runtime=True)
+ mypriority = self._priority(cross=self._cross(pkg.root), runtime=True)
if not atom.blocker:
inst_pkgs = [
inst_pkg
@@ -4616,6 +4633,13 @@ class depgraph:
priority_constructor = DepPriority
return priority_constructor(**kwargs)
+ def _cross(self, eroot):
+ """
+ Returns True if the ROOT for the given EROOT is not /,
+ or EROOT is cross-prefix.
+ """
+ return eroot != self._frozen_config._running_root.root
+
def _dep_expand(self, root_config, atom_without_category):
"""
@param root_config: a root config instance
@@ -5788,7 +5812,9 @@ class depgraph:
node_priority = priority.copy()
else:
# virtuals only have runtime deps
- node_priority = self._priority(runtime=True)
+ node_priority = self._priority(
+ cross=self._cross(node_parent.root), runtime=True
+ )
k = Dependency(
atom=parent_atom,
@@ -5874,7 +5900,7 @@ class depgraph:
pkg._metadata.get("RDEPEND", ""),
myuse=self._pkg_use_enabled(pkg),
parent=pkg,
- priority=self._priority(runtime=True),
+ priority=self._priority(cross=self._cross(pkg.root), runtime=True),
)
except InvalidDependString as e:
if not pkg.installed: