FS#68662 - [makepkg]: Packages without version info in provides are ignored for depends
Attached to Project:
Pacman
Opened by gesh (gesh) - Wednesday, 18 November 2020, 11:31 GMT
Last edited by Allan McRae (Allan) - Wednesday, 18 November 2020, 12:53 GMT
Opened by gesh (gesh) - Wednesday, 18 November 2020, 11:31 GMT
Last edited by Allan McRae (Allan) - Wednesday, 18 November 2020, 12:53 GMT
|
Details
Summary and Info:
Given a package that `depends=("foo>=$ver")`, an installed package that `provides=('foo')` and has `$pkgver` larger than `$ver` should as far as I can tell satisfy the dependency. However, makepkg ignores such packages, and instead opts for replacing the installed dependency with the most up-to-date version it can find. Concretely, this can be seen with the AUR package `stack-static`: it is currently at 2.5.1-1, whereas `stack` in community is at 2.5.1-26. The provided PKGBUILD for `stack-static` doesn't specify the version in its `provides` array. Now, with `stack-static` installed, trying to build a PKGBUILD that `depends=('stack>=1.7.0')` should succeed, accepting the installed package as good enough. Instead, makepkg tries installing `stack`, replacing it for `stack-static`. Steps to Reproduce: Write a PKGBUILD for a package `foo` in community with `pkgrel>1` that has the same `pkgver` but `pkgrel=1`, and have it installed. Write another PKGBUILD that `depends=('foo>=$pkgver')`. Try building the latter with `makepkg -s`. |
This task depends upon
Comment by Allan McRae (Allan) -
Wednesday, 18 November 2020, 11:43 GMT
Comment by gesh (gesh) - Wednesday,
18 November 2020, 12:51 GMT
Comment by Allan McRae (Allan) -
Wednesday, 18 November 2020, 12:53 GMT
You need to use provides=("foo=$ver"). The versions do not need to
match. For example, libjpeg-turbo version 2.0.5 provides
libjpeg=8.2.2
- Field changed: Percent Complete (100% → 0%)
This policy means a bare provides=('foo') is useless when there is
a package named foo. If this is the approach Arch wants to take,
at least the documentation should reflect this.
provides=('foo') works for depends=('foo'). If you depend on a
specific version, you are asking for that version. If the package
does not have a provide with a version, there is no way to know if
it satisfies a versioned dependency. Closing - will not be
reopened.