Subject: Re: CVS commit: pkgsrc/mk/buildlink3
To: Robert Elz <kre@munnari.OZ.AU>
From: Quentin Garnier <netbsd@quatriemek.com>
List: tech-pkg
Date: 01/25/2004 20:16:40
Le Mon, 26 Jan 2004 01:43:27 +0700
Robert Elz a ecrit :
>     Date:        Sun, 25 Jan 2004 16:46:21 +0000 (UTC)
>     From:        "Johnny C. Lam" <jlam@NetBSD.org>
>     Message-ID:  <20040125164621.3C8392DA1D@cvs.netbsd.org>
> 
>   | The new standard for modifying BUILDLINK_DEPENDS.<pkg> is to append
>   to the| value instead of overriding.  The reason is so that the most
>   restrictive| <pkg> dependency will always be a part of the dependency
>   list.
> 
> I don't understand this.   How can a package possibly have more than
> one version of some other package that it depends upon?   That is, if
> A depends upon B, it might need B version x.y, or better, or between
> x.y and x.z or something (or just possibly might not care at all), but
> it cannot rationally require 2 different versions.
> 
> If somehow this has to do with dependencies of dependencies, then I
> believe it is all on the wrong track - if A depends upon B, and both
> A and B depend upon C, then B needs to be installed first, which will
> mean that a suitable version of C for B will also be installed.   When
> A comes to be installed, the version of C currently installed (which is
> good enough for B) is either good enough for A, or it is not.  If it is,
> then all is fine.   If not, C needs to be upgraded (which probably means
> removing B to allow that to happen, the way things currently work).
> When that's done, B will get re-installed, if the version of C now
> installed is OK for B, everyone is happy - if not, then A and B are
> simply incompatible, and cannot both be installed (because of requiring
> different versions of C installed).

Correct me if I'm wrong, but it's not about binary packages here.  What
the change allows is to keep track of the most restrictive condition for a
dependency.

With the ?= assignment, package A could assign BL_DEPENDS.xxx xxx>=2, and
then package B (in the order of bl.mk inclusion) assign BL_DEPENDS.xxx
xxx>=1 (because it only depends on a tiny subset of the API that hasn't
change between 1 and 2 for package xxx).  Then, the system would not
rebuild xxx if xxx-1 is installed, although A needs xxx-2.

With the += assignement, all conditions are kept, and then you can still
have the most restrictive in the list, and use that one.

When buildling a package, you can't depend on several versions of a
dependency, since there is still only one provided by the pkgsrc tree.

Of course, bl3 has to make sure only one condition is recorded in the
binary package, but this is another issue.

-- 
Quentin Garnier - cube@cubidou.net - cube@NetBSD.org
"Feels like I'm fiddling while Rome is burning down.
Should I lay my fiddle down and take a rifle from the ground ?"
Leigh Nash/Sixpence None The Richer, Paralyzed, Divine Discontents, 2002.