===
----- Original Message -----
From: "Charles Wilson" <[EMAIL PROTECTED]>
To: "Robert Collins" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Thursday, November 29, 2001 10:18 PM
Subject: Re: setup current problems


> Robert Collins wrote:
>
> > It's actually a little harder than that. You need to either
> > a) limit the depth of recursion/stack growth
> > b) build a network of visited nodes and only recurse into unvisited
> > nodes.
> >
> > I've implemented a), which has the downside that in corner cases,
(in
> > this case, a chain 6 requires: statements long) packages may not get
> > grabbed. Mind you, this means that of those 7 packages, the user
must
> > select ONLY the first one, and no other packages can require: any
> > package further down the chain than the 2nd one. I.e. not much of an
> > issue :}.
> >
> > However b) is the proper solution IMO, but more time is needed to do
it
> > right, so I'm leaving that for another day.
>
>
> Hmmm...it seems like dependency graph traversal is a well-studied
> problem.  Perhaps there's a GPL'ed library out there we can use?
(since
> setup is independent of cygwin1.dll itself, we ARE allowed to use pure
> GPL, non-Red Hat owned code, right?)
>
> But, yah, leave it for later...(a) is good for now.

Yes we can use GPL code. And yes, graphs are a common tool.  However
we've got a real simple solution:
add_requried (packagemeta &pkg, list *foo= NULL)
{
...
if (!foo)
  foo = new list (this);
else
  if (foo->find (this))
    return 0;
  else
    foo->append (this);
...

//when recursing
add_required(recurse_too, foo);
}

It's more that the categories branch has no templates at all (which, BTW
I've started careful use of in the HEAD branch) so writing a new list is
a PITA, something I'm _very_ tired of by now.

Rob

Reply via email to