On 10/23/07, Jonas Karlsson <[EMAIL PROTECTED]> wrote:
> I've just realized that my recent commits created (at least) one new
> dependency loop: GTK+ -> Cairo -> LibRSVG -> GTK+
> How shold we handle these loops? By declaring LibRSVG as optional
> dependency for Cairo we can weaken the loop, but since we don't
> support such flags yet...
> The problem exists primarily for Freshen and cyclic graphs, but
> there's a problem with Compile as one have to bulid in the right order
> (and rebuild Cairo once LibRSVG is built). It's only a annoyance with
> InstallPackage as the user will get the same question twice.
> How should we handle these cyclic dependencies?
For Freshen's part, at least, it can probably be dealt with by more
intelligent dependency handling, but I'm not sure how to go about that
yet. At least for the cases that do have a well-defined and usable
order, and ignoring the bootstrapping situation. I think that could be
satisfied by stripping the dependencies that are already satisfied and
allowing the rest to progress as normal.

The problem really arises when there are circular dependencies that
aren't already satisfied in part. The manual solution to that is
probably to upgrade to an intermediate version of one of them that
does allow some of the other dependencies to be satisfied, and
continue until the tree is resolvable. I don't know how to manage that
automatically; I would really rather they didn't exist. I think this
is the kind you're talking about here.

So long as the version requirements make it possible to resolve,
Freshen should be able to deal with it (normative should, it might not
actually do it), provided that the user has a sufficiently recent
version of GTK+ installed (meaning, they meet the dependency for the
newest LibRSVG). If they don't, diagnosing the problem and telling
them what to do about it would be nice. Fixing it magically is
theoretically possible but practically messy.

Another situation is that in some cases (HAL and HAL-Info are one, I
think), what really matters is that they're both there at the end. I
don't think HAL actually requires HAL-Info to build, but the reverse
might be true (if not, it was a bad example, so substitute another).
Portage allows a sort of reverse dependency, where a package specifies
that it requires something to be installed -after- it. Being able to
specify that kind of relationship in the dependencies would be
helpful, I think.

I think there are other cases too, but I don't remember them off-hand.
There are probably better ways of handling those as well, I'm just
throwing out ideas at the moment.
-Michael
_______________________________________________
gobolinux-devel mailing list
gobolinux-devel@lists.gobolinux.org
http://lists.gobolinux.org/mailman/listinfo/gobolinux-devel

Reply via email to