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
Task Type Bug Report
Category makepkg
Status Closed
Assigned To No-one
Architecture All
Severity Low
Priority Normal
Reported Version 5.2.1
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No

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

Closed by  Allan McRae (Allan)
Wednesday, 18 November 2020, 12:53 GMT
Reason for closing:  Not a bug
Comment by Allan McRae (Allan) - Wednesday, 18 November 2020, 11:43 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
Comment by gesh (gesh) - Wednesday, 18 November 2020, 12:51 GMT
  • 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.
Comment by Allan McRae (Allan) - Wednesday, 18 November 2020, 12:53 GMT
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.

Loading...