[arch-dev-public] Versioned Provisions
shiningxc at gmail.com
Thu Jan 17 16:49:07 EST 2008
Aaron Griffin wrote:
> This is a little "heads up" email to all the package maintainers out there.
> Pacman 3.1 has support for versioned provisions. But what this also
> means is that there's going to be some breakages in packages.
> Let me explain by way of example:
> package foo depends=(bar>=1.2)
> package omg provides=(bar)
> In the past, you could install both foo and omg at the same time and
> everything would be satisfied. Not now. Now, the provision of "omg"
> will fail, because it's not providing the right version.
> What does this mean? Well, a few things. First and foremost, versioned
> provisions are a little broken in 3.1.0, but 3.1.1 will fix all this
> py allowing you to say:
> Did I get this right? Dan, Xavier?
Yes, I only want to clarify that packagers need to wait for 3.1.1 to be
released before starting to update their packages.
And this feature is useful because in the above case, omg package could
be at version 0.1.
pacman 3.0 deduced from this that omg package provided bar-0.1
But there was no way to specify that omg actually provided bar-1.2, and
thus satisfied the bar>=1.2 dependency of foo package.
There is one point that wasn't appreciated by several people though.
When no provision version is specified, pacman no longer defaults to the
package version. Why?
Consider for example in the above case that the package omg is at
version 2.0, but doesn't provide 1.2 version of bar, only 1.0.
With the old behavior, pacman would still accept to install omg package
as a dependency of foo, which would result in a broken system.
Finally, there are quite a few cases where the package version and the
provision version are not related. You can have a look at all provides
lines in the /var/abs tree :
find /var/abs -name PKGBUILD | xargs egrep '^provides|^pkgname|^pkgver'
|grep provides -B2
First, there are virtual provisions, like sh, cron, smtp-server.
But there are other good candidates, here are a few ones:
nvidia-utils and fglrx-utils provide libgl
avahi provides howl and mdnsresponder
python provides python-ctypes
gamin provides fam
And then consider all the devel packages (cvs, svn, etc).
More information about the arch-dev-public