On Wed, Jan 19, 2011 at 13:21, Allan McRae <[email protected]> wrote: > On 19/01/11 23:09, Magnus Therning wrote: >> >> On Wed, Jan 19, 2011 at 13:07, Allan McRae<[email protected]> wrote: >>> >>> On 19/01/11 22:49, Magnus Therning wrote: >>>> >>>> On Wed, Jan 19, 2011 at 12:50, Allan McRae<[email protected]> >>>> wrote: >>>>> >>>>> On 19/01/11 22:20, Thomas Bächler wrote: >>>>>> >>>>>> Am 19.01.2011 08:08, schrieb Allan McRae: >>>>>>> >>>>>>> If we want to be really pedantic about dependencies, we should list >>>>>>> _ALL_ dependencies and not remove the ones that are dependencies of >>>>>>> dependencies. >>>>>> >>>>>> Why don't we just do the correct thing: >>>>>> >>>>>> If package A depends on package B, and B depends on C, then A might >>>>>> depend on C explicitly because it accesses C directly. Or it might >>>>>> only >>>>>> depend on indirectly C because B accesses C. We should reflect that in >>>>>> dependencies (in the first case, A depends on C, in the second case it >>>>>> doesn't). >>>>>> >>>>>> The result is this: Whenever the dependencies of B change (e.g., C is >>>>>> removed), A will still work correctly. >>>>> >>>>> I agree that would be the correct thing to do. In fact, I looked at >>>>> doing >>>>> this to the extent of including ever package that a program linked to >>>>> in >>>>> its >>>>> dependencies. This increases the number of dependencies needed for the >>>>> average package in the repos greatly (from memory it averaged a several >>>>> fold >>>>> increase). >>>> >>>> I don't quite understand what you mean, did you add the transitive >>>> closure of all dependencies to the package, or did you only add all >>>> direct dependencies? >>> >>> Essentially "readelf -d" on the files and add all needed packages to the >>> dependencies. I.e. list all packages that are directly linked. >>> >>> Its has been many years since I did graph theory... but isn't a >>> "transitive >>> closure" essentially what we have been doing with only listing the top >>> level >>> of dependencies and having them cover the rest? >> >> Nope, it's the "opposite": >> >> • A depends on B >> • B depends on C >> >> If the PKGBUILD for A lists the transitive closure, then it would have >> >> depends=(B C) >> >> As we do now the transitive closure is calculated by pacman in order >> to make sure all dependencies are installed. >> > > Nope. We currently list depends=(B) and pacman just checks B is installed.
All right, I need to clarify. If B *isn't* installed, then pacman will install both B *and* C; and there's the transitive closure. /M -- Magnus Therning OpenPGP: 0xAB4DFBA4 email: [email protected] jabber: [email protected] twitter: magthe http://therning.org/magnus
