On 10/25/07, Hisham Muhammad <[EMAIL PROTECTED]> wrote:
> On 10/24/07, Michael Homer <[EMAIL PROTECTED]> wrote:
> > 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.
>
> Yes, the example is correct. For HAL and HAL-Info, we have that HAL is
> a 'build dependency' for HAL-Info, but HAL-Info is a 'runtime-only
> dependency' for HAL.
>
> It occurs to me now that everytime we talked about optional
> dependencies we end up talking about use-flags as well as we never get
> anywhere. One thing we could do would be to implement extensions to
> the Dependencies format _first_ and worry about use-flags later.
>
> How about something adding a bracketed list of tags, like:
>
> Foo >= 1.0, < 2.0 [build-only, optional, i686]
> Bar >= 0.3.5 [runtime-only, !ppc]
>
> (I thought about dropping the "-only", but the fact that adding
> [build] would implicitly disable [runtime] looked a bit weird, as it
> seemed that a regular dependency implictly meant [build, runtime].
> Anyway, opinions are welcome.)
I like this a lot. It's flexible and it allows for covering all the
special cases that come up. It also keeps everything in one place,
which I like more than having separate files for different kinds of
dependency. It would also allow more complicated entries like "Foo >=
1.0 on i686, Foo >= 1.2 on ppc" to work by just adding multiple lines
with arbitrarily complex settings.

>From the perspective of graph cycles in Freshen, they'd be avoided by
injecting the runtime dependencies as depending on the base program,
but not vice-versa, so they'd tend to end up immediately afterwards in
the ordering. The DBus/Xorg-type situation probably wouldn't be
resolved directly by that, but cleverer dependency handling can
probably reduce that problem to an occasional minor inconvenience.
-Michael
_______________________________________________
gobolinux-devel mailing list
gobolinux-devel@lists.gobolinux.org
http://lists.gobolinux.org/mailman/listinfo/gobolinux-devel

Reply via email to