[debian-mysql] More on Multi-Arch and MariaDB

Helmut Grohne helmut at subdivi.de
Wed Nov 16 06:21:55 UTC 2016


Hi Otto,

On Tue, Nov 15, 2016 at 05:48:58PM +0200, Otto Kekäläinen wrote:
> Multi-arch seems now to be fixed for the shared libraries. However,
> the -dev library issues remain.

Thank you. I do note that working on the -dev packages has much less
impact than the libraries. If you look at the conflicts table of
https://bootstrap.debian.net/cross_all.html, you see that they are not
involved in many packages.

> Now multi-arch linter complains about the fact that the
> libmariadbclient-dev and libmariadb-dev packages are not Multi-Arch.
> Actually, they cannot even be because they contain binaries like
> mysql_config:

Can you show a reference to those complaints? I cannot find them atm.
Note that it takes most buildd builds plus a day for the hints to
stabilize. Maybe you looked too early?

> libmariadbclient-dev:
>   usr/bin/mysql_config

This is hard and probably is a blocker to cross building. It is
equivalent to #794103 (worthy a read, elaborate explanation of the
problem and approaches).

Basically, the problem with it is that it needs to be run during build
(thus the binary needs to be a build architecture executable), but it
needs to tell things about the host architecture library. Thus we'd need
(number of release architectures)^2 number of mysql_configs. That's not
gonna work.

The only workable solution (long term) is to switch to pkg-config
(strongly preferred) or to an implementation in a scripting language.

>   usr/include/mysql/*.h
>   usr/include/mysql/psi/*.h

If these really conflicts (did you check?), just move them to
/usr/include/$(DEB_HOST_MULTIARCH). It works equivalent to
/usr/lib/$(DEB_HOST_MULTIARCH). gcc and clang search it by default. You
may still have to update mysql_config to emit it and test reverse
dependencies, but this is a rather simple matter.

>   usr/lib/*/libmariadbclient.a
>   usr/lib/*/libmariadbclient.so
>   usr/lib/*/libmariadbclient_r.a
>   usr/lib/*/libmariadbclient_r.so*
>   usr/lib/*/libmysqlservices.a

Your "*" indicates a multiarch triplet. Thus these paths are different
per architecture and thus not a problem to multiarch. In fact moving
stuff to multiarch paths is the primary tool to allow coinstallability.

>   usr/share/aclocal/mysql.m4

Does this vary across architectures? I suppose no. Thus not a problem.

> Should I maybe remove the "Multi-Arch: same" from
> libmariadb-dev-compat package  so it maches it's dependencies are so
> too?

I'd argue "no". You are correct that it kinda is useless when
dependencies are not ready, but it helps analyzing the whole situation
to know that libmariadb-dev-compat is ready in principle. Dependency
resolvers know how to cope with such situations.

If you intend to work on multiarching -dev packages, focus on
mysql_config. The remainders are much simpler.

Hope this helps.

Helmut



More information about the pkg-mysql-maint mailing list