[arch-dev-public] Versioned Provisions

Xavier 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:
> provides=(bar=1.2)
> 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 mailing list