Hi all,

I looked various packages in the [core] repository to check if they
specify their external shared libraries in provides=(). I opened
several task on Flyspray [1], but it was turned out that still many
packages don't specify them. It was turned out also that adding these
libraries to provides=() can be easily automated in makepkg, so we
don't actually need to add these entries manually. Allan already
implemented it [2] for the next pacman release, but in an incompatible
way, he changed the naming e.g. from 'libglib-2.0.so=0-64' to
'lib:libglib-2.0.so.0'. I think we should decide if we want to keep the
current naming schema, or deprecate it and switch to the new one, and
then make a migration plan. Switching to the new naming schema will be
more complicated.

== Keep the current naming schema ==

In this case we can simply add and enable a new option for makepkg to
add shared libraries to provides=() automatically during build, and
then mass remove the existing *.so entries from provides=() in every
packages. Dependencies are no need to be updated, since we keep the
current naming schema.

== Use the new naming schema ==

In this case we have to keep the existing *.so entries in provides=()
for a while, because removing them would cause missing dependencies in
other packages.

1. We have to add and enable a new option for makepkg to add shared
libraries to provides=() automatically, following the new naming
schema.

2. We also have to update each package manually to replace *.so entries
in depends=(), and adapt changes to automate library dependencies (see
below).

3. Once all dependent packages are updated, we can remove the *.so
entries from provides=(), and rely on the new naming schema entirely.

== Automate library dependencies ==

Allan's implementation will also add library dependencies to packages
automatically. I think we should enable adding libraries to
provides=(), but disable adding libraries to depends=() by default,
because the latter needs manual changes in each PKGBUILD. It does not
support to mark dependencies optional yet, but I sent a merge request
[3] to make it possible via a new optbinaries=() entry in PKGBUILD.

This feature is completely optional if we keep the existing naming
schema. But if the new naming schema adopted, there is no easy way to
avoid it, because the new name will contain the major version of the
library, so manually specified library entries in depends=() would need
to be updated manually on each soname bump.


What are your opinions? Which naming schema we should follow? Is there
any other issues?


[1]
https://bugs.archlinux.org/index.php?string=Add+libraries+to+provides%3D%28%29&project=1&search_for_all=1
[2]
https://lists.archlinux.org/archives/list/pacman-...@lists.archlinux.org/thread/2QGC64MLN375SCD2KUNSLGYERVCOVI7X/
[3] https://gitlab.archlinux.org/pacman/pacman/-/merge_requests/58


--
György Balló
Package Maintainer / Trusted User

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to