=== ----- 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