Dealing with circular dependencies
Dealing with Circular Dependencies
Circular dependencies (A->B->A) result in portage errors like this:
* Error: circular dependencies:
(dev-go/luci-go-0.0.1-r4:0/0::chromiumos, ebuild scheduled for merge) depends on
(dev-util/android-provision-0.0.1-r111:0/0.0.1-r111::chromiumos, binary scheduled for merge) (buildtime)
(dev-go/luci-go-0.0.1-r4:0/0::chromiumos, ebuild scheduled for merge) (runtime)
* Note that circular dependencies can often be avoided by temporarily
* disabling USE flags that trigger optional dependencies.
Refactoring
In case of A->B->A dependencies, breaking up the A package into
A1->B->A2 is always the preferred solution.
PDEPEND
In cases where breaking up packages would require an excessive time investment
AND if the circular dependency is only a runtime dependency,
rather than compile-time dependency, PDEPEND can be used.
The PDEPEND variable specifies runtime dependencies that do not require being
satisfied during build time, and can be merged after the depending package.