Re: Circular dependencies in RPM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2014-08-24, Nico Kadel-Garcia <nkadel@xxxxxxxxx> wrote:
> Installation scripting is not the only source of the problem. Perl
> modules have been prone to this.
>
> * Perl module  A requires perl module B.
> * Perl module B requires perl module C.
> * One small script or macro in module C requires one small script from
> module A. It may not even be a critical component of C, and may be
> easily segregated, but suddenly there is a circular dependency.
>
There is no algorithmic difference between Perl packages and any other
packages.

Specifically to Perl, we employ %perl_bootstrap macro which guards the
`not even a critical' dependency which allows us to break the dependency
cycle.

Perl SIG exhibits weekly rebuilds
<https://ppisar.fedorapeople.org/perl_rebuild/scratch/index.xhtml> which
allow us to watch that all Perl packages are buildable.

> The vortex enters when the author of module B updates to a new
> dependency or build dependency that is not in the current version of
> C, and C introduces a new dependency on A but it's based on an older
> version of A, that has since discarded that macro due to a code
> cleanup. Hilarity ensues.....
>
If you need to do such an upgrade, provided you've already deployed the
%perl_bootstrap condition, you just define perl_bootstrap temporarily in
one of the upgraded packages, and after upgrading the connected
component, you remove the macro definition and rebuild the package
again.

> The underlying point is that it's sometimes very helpful to split
> upstream packages to smaller, individual components, precisely to
> segregate these dependencies. It's especially useful with Perl
> modules.

Definitely. Once packageres realize that Perl modules can move beetween
RPM packages freely, once they realize that specifying all direct
dependencies without relying on transitive dependencies is the best
practice and a must for healthy distribution, then splitting packages is
obvious solution.

Although splitting cannot solve all issues, especially if the splitted
modules are really interdependend. Then there is no point in the split.
However that's a upstream issue.

-- Petr

-- 
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/devel
Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux