Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 723112 - MULTILIB_USEDEP in BDEPEND breaks cross-emerge
Summary: MULTILIB_USEDEP in BDEPEND breaks cross-emerge
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Multilib team
URL:
Whiteboard:
Keywords: PullRequest
Depends on:
Blocks:
 
Reported: 2020-05-14 23:00 UTC by Mike Gilbert
Modified: 2021-01-29 18:00 UTC (History)
4 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mike Gilbert gentoo-dev 2020-05-14 23:00:53 UTC
I am filing this bug as a sanity check before I adjust ebuilds that currently set BDEPEND="virtual/pkgconfg[${MULTILIB_USEDEP}]".

When building packages using cross-emerge from crossdev, we have the following scenario:

/ has MULTILIB_ABIS that correspond to CBUILD/CHOST. On an amd64 system, MULTLIB_ABIS may contain some combination of amd64, x32, and x86.

/usr/${CTARGET} has MULTILIB_ABIS that correspond to CTARGET. Taking riscv as an example, it may contain some combination of lp64 and lp64d.

If we try to use MULTILIB_USEDEP in a BDEPEND-class dependency when cross-compiling in /usr/${CTARGET}, we end up with something like this:

BDEPEND="virtual/pkgconfig[abi_riscv_lp64,abi_riscv_lp64d]"

This can never be satisfied because the CBUILD system will have something like the following installed:

virtual/pkgconfig[abi_x86_64,abi_x86_x32,abi_x86_32]

Here's a real example:

> naomi ~ # riscv64-unknown-linux-gnu-emerge -av1 sys-apps/systemd
> 
> These are the packages that would be merged, in order:
> 
> Calculating dependencies... done!
> 
> emerge: there are no ebuilds to satisfy > "virtual/pkgconfig[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_riscv_lp64d(-)?,abi_riscv_lp64(-)?,abi_s390_32(-)?,abi_s390_64(-)?]".
> (dependency required by "sys-apps/systemd-245-r5::gentoo" [ebuild])
> (dependency required by "sys-apps/systemd" [argument])

A workaround is to add virtual/pkgconfig-1 to /etc/portage/profile/package.provided.

The only solution I can think of is to ban MULTILIB_USEDEP in BDEPEND.
Comment 1 James Le Cuirot gentoo-dev 2020-05-14 23:10:05 UTC
I need to think about this a bit more but I always thought pkgconfig's use of multilib was a bit weird. We don't apply the same logic under crossdev. I wonder whether it should simply have a forced multilib flag instead like glibc does.
Comment 2 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2020-05-15 07:07:27 UTC
I guess it's not really important for pkgconfig.  Have you grepped for other cases of MULTILIB_USEDEP in BDEPEND?
Comment 3 Arfrever Frehtes Taifersar Arahesis 2020-05-15 07:30:31 UTC
Some packages install ${CHOST}-*config scripts. Some examples:
  x86_64-pc-linux-gnu-cups-config
  x86_64-pc-linux-gnu-curl-config
  x86_64-pc-linux-gnu-gpg-error-config
  x86_64-pc-linux-gnu-icu-config
  x86_64-pc-linux-gnu-krb5-config
  x86_64-pc-linux-gnu-libgcrypt-config
  x86_64-pc-linux-gnu-mariadb_config
  x86_64-pc-linux-gnu-mysql_config
  x86_64-pc-linux-gnu-nspr-config
  x86_64-pc-linux-gnu-nss-config
  x86_64-pc-linux-gnu-pcre-config
  x86_64-pc-linux-gnu-pcre2-config
  x86_64-pc-linux-gnu-xml2-config
  x86_64-pc-linux-gnu-xslt-config

If such scripts are used, then dependency with [${MULTILIB_USEDEP}] in BDEPEND seems valid.
Comment 4 Alexis Ballier gentoo-dev 2020-05-15 09:09:50 UTC
I don't think MULTILIB_USEDEP in BDEPEND makes sense.

For pkg-config, in a cross-emerge setting, it will/should have variables set to point at $SYSROOT properly so that non chost-prefixed pkg-config will just work. IIRC crossdev wrappers merely do that so maybe it's time to promote those variables to an eapi or at least an eclass. In any case, $MULTILIB_USEDEP is not needed there, but maybe pkg-config should be treated more like glibc indeed.

For $CHOST-config scripts, you won't have them with multilib as they would be non-native. Such scripts are a PITA in a cross compile setting, but if you must use them, then I would put the dep in DEPEND and have it run the script from $SYSROOT. I think there are a few examples in the tree doing that already, but that also implies those -config scripts *must* be real scripts; that won't work with llvm-config for example (and I never managed to find a proper way to use that for cross compiling).
Comment 5 Mike Gilbert gentoo-dev 2020-05-31 02:35:51 UTC
(In reply to Arfrever Frehtes Taifersar Arahesis from comment #3)
> Some packages install ${CHOST}-*config scripts. Some examples:
>   x86_64-pc-linux-gnu-cups-config
>   x86_64-pc-linux-gnu-curl-config
>   x86_64-pc-linux-gnu-gpg-error-config
>   x86_64-pc-linux-gnu-icu-config
>   x86_64-pc-linux-gnu-krb5-config
>   x86_64-pc-linux-gnu-libgcrypt-config
>   x86_64-pc-linux-gnu-mariadb_config
>   x86_64-pc-linux-gnu-mysql_config
>   x86_64-pc-linux-gnu-nspr-config
>   x86_64-pc-linux-gnu-nss-config
>   x86_64-pc-linux-gnu-pcre-config
>   x86_64-pc-linux-gnu-pcre2-config
>   x86_64-pc-linux-gnu-xml2-config
>   x86_64-pc-linux-gnu-xslt-config
> 
> If such scripts are used, then dependency with [${MULTILIB_USEDEP}] in
> BDEPEND seems valid.

From what I can tell, those scripts generally emit settings that are specific to CHOST, not CBUILD. In that case, they belong in DEPEND, not BDEPEND.
Comment 6 Mike Gilbert gentoo-dev 2020-05-31 14:44:00 UTC
If I could get some eyeballs on https://github.com/gentoo/gentoo/pull/16025, that would be lovely.
Comment 7 Larry the Git Cow gentoo-dev 2020-06-13 17:05:12 UTC
The bug has been referenced in the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5008bbcb72fc5e5889b0ab9f94aae16fc3698a57

commit 5008bbcb72fc5e5889b0ab9f94aae16fc3698a57
Author:     Mike Gilbert <floppym@gentoo.org>
AuthorDate: 2020-05-31 02:42:45 +0000
Commit:     Mike Gilbert <floppym@gentoo.org>
CommitDate: 2020-06-13 16:58:11 +0000

    Remove MULTILIB_USEDEP from all virtual/pkgconfig dependencies
    
    Bug: https://bugs.gentoo.org/723112
    Signed-off-by: Mike Gilbert <floppym@gentoo.org>

 app-accessibility/at-spi2-atk/at-spi2-atk-2.32.0.ebuild           | 2 +-
 app-accessibility/at-spi2-atk/at-spi2-atk-2.34.2.ebuild           | 2 +-
 app-accessibility/at-spi2-core/at-spi2-core-2.32.1.ebuild         | 2 +-
 app-accessibility/at-spi2-core/at-spi2-core-2.34.0.ebuild         | 2 +-
 app-accessibility/at-spi2-core/at-spi2-core-2.36.0.ebuild         | 2 +-
 app-crypt/heimdal/heimdal-7.5.0.ebuild                            | 2 +-
 app-crypt/heimdal/heimdal-7.6.0.ebuild                            | 2 +-
 app-crypt/heimdal/heimdal-7.7.0-r1.ebuild                         | 2 +-
 app-crypt/libsecret/libsecret-0.18.8.ebuild                       | 2 +-
 app-crypt/libsecret/libsecret-0.20.2.ebuild                       | 2 +-
 app-crypt/libsecret/libsecret-0.20.3.ebuild                       | 2 +-
 .../gallium-nine-standalone/gallium-nine-standalone-0.5.ebuild    | 2 +-
 .../gallium-nine-standalone/gallium-nine-standalone-9999.ebuild   | 2 +-
 dev-cpp/gtkmm/gtkmm-2.24.5.ebuild                                 | 2 +-
 dev-cpp/libxmlpp/libxmlpp-3.0.1.ebuild                            | 2 +-
 dev-cpp/pangomm/pangomm-2.42.0.ebuild                             | 2 +-
 dev-cpp/pangomm/pangomm-2.42.1.ebuild                             | 2 +-
 dev-libs/atk/atk-2.34.1.ebuild                                    | 2 +-
 dev-libs/atk/atk-2.36.0.ebuild                                    | 2 +-
 dev-libs/fribidi/fribidi-1.0.9.ebuild                             | 2 +-
 dev-libs/fstrm/fstrm-0.3.0.ebuild                                 | 2 +-
 dev-libs/glib/glib-2.62.6.ebuild                                  | 2 +-
 dev-libs/glib/glib-2.64.3.ebuild                                  | 2 +-
 dev-libs/icu-layoutex/icu-layoutex-67.1.ebuild                    | 2 +-
 dev-libs/icu-le-hb/icu-le-hb-1.0.3-r1.ebuild                      | 2 +-
 dev-libs/json-glib/json-glib-1.4.4.ebuild                         | 2 +-
 dev-libs/libappindicator/libappindicator-12.10.0-r301.ebuild      | 2 +-
 dev-libs/libcroco/libcroco-0.6.13.ebuild                          | 2 +-
 dev-libs/libdbusmenu/libdbusmenu-16.04.0-r1.ebuild                | 2 +-
 dev-libs/libevdev/libevdev-1.9.0.ebuild                           | 2 +-
 dev-libs/libevdev/libevdev-9999.ebuild                            | 2 +-
 dev-libs/libgudev/libgudev-233-r1.ebuild                          | 2 +-
 dev-libs/libgusb/libgusb-0.3.3.ebuild                             | 2 +-
 dev-libs/libgusb/libgusb-0.3.4.ebuild                             | 2 +-
 dev-libs/libindicator/libindicator-12.10.1-r201.ebuild            | 2 +-
 dev-libs/libindicator/libindicator-12.10.1-r301.ebuild            | 2 +-
 dev-libs/libuv/libuv-1.35.0.ebuild                                | 2 +-
 dev-libs/libuv/libuv-1.37.0.ebuild                                | 2 +-
 dev-libs/libuv/libuv-1.38.0-r1.ebuild                             | 2 +-
 dev-libs/libuv/libuv-9999.ebuild                                  | 2 +-
 dev-libs/nss/nss-3.51.1.ebuild                                    | 2 +-
 dev-libs/nss/nss-3.51.ebuild                                      | 2 +-
 dev-libs/nss/nss-3.52.1-r1.ebuild                                 | 2 +-
 dev-libs/nss/nss-3.52.ebuild                                      | 2 +-
 dev-libs/protobuf-c/protobuf-c-1.3.2.ebuild                       | 2 +-
 dev-lua/LuaBitOp/LuaBitOp-1.0.2-r1.ebuild                         | 2 +-
 dev-lua/luaexpat/luaexpat-1.3.0-r1.ebuild                         | 2 +-
 dev-lua/luasocket/luasocket-3.0_rc1-r4.ebuild                     | 2 +-
 dev-python/subunit/subunit-1.2.0-r1.ebuild                        | 2 +-
 dev-python/subunit/subunit-1.4.0.ebuild                           | 2 +-
 dev-util/umockdev/umockdev-0.11.3.ebuild                          | 2 +-
 dev-util/umockdev/umockdev-0.12.1.ebuild                          | 2 +-
 eclass/gstreamer.eclass                                           | 2 +-
 eclass/xorg-2.eclass                                              | 8 ++------
 eclass/xorg-3.eclass                                              | 8 ++------
 gnome-base/gconf/gconf-3.2.6-r4.ebuild                            | 2 +-
 gnome-base/gnome-vfs/gnome-vfs-2.24.4-r5.ebuild                   | 2 +-
 gnome-base/libglade/libglade-2.6.4-r2.ebuild                      | 2 +-
 gnome-base/libgnomecanvas/libgnomecanvas-2.30.3-r1.ebuild         | 2 +-
 gnome-base/librsvg/librsvg-2.40.21.ebuild                         | 2 +-
 media-gfx/sane-backends/sane-backends-1.0.27-r3.ebuild            | 2 +-
 media-libs/fontconfig/fontconfig-2.13.1-r2.ebuild                 | 2 +-
 media-libs/gd/gd-2.2.5-r2.ebuild                                  | 2 +-
 media-libs/gd/gd-2.3.0.ebuild                                     | 2 +-
 media-libs/gstreamer/gstreamer-1.14.5.ebuild                      | 2 +-
 media-libs/gstreamer/gstreamer-1.16.2.ebuild                      | 2 +-
 media-libs/ilmbase/ilmbase-2.3.0.ebuild                           | 2 +-
 media-libs/libart_lgpl/libart_lgpl-2.3.21-r3.ebuild               | 2 +-
 media-libs/libgphoto2/libgphoto2-2.5.22.ebuild                    | 2 +-
 media-libs/libkate/libkate-0.4.1-r4.ebuild                        | 2 +-
 media-libs/libofa/libofa-0.9.3-r2.ebuild                          | 2 +-
 media-libs/libquicktime/libquicktime-1.2.4-r3.ebuild              | 2 +-
 media-libs/libquvi-scripts/libquvi-scripts-0.9.20131130-r1.ebuild | 2 +-
 media-libs/libquvi/libquvi-0.9.4-r1.ebuild                        | 2 +-
 media-libs/libsoundtouch/libsoundtouch-2.1.2.ebuild               | 2 +-
 media-libs/libtiger/libtiger-0.3.4-r1.ebuild                      | 2 +-
 media-libs/lilv/lilv-0.24.6.ebuild                                | 2 +-
 media-libs/opencv/opencv-3.4.1-r7.ebuild                          | 2 +-
 media-libs/opencv/opencv-4.1.2-r1.ebuild                          | 2 +-
 media-libs/opencv/opencv-4.1.2-r3.ebuild                          | 2 +-
 media-libs/openexr/openexr-2.3.0.ebuild                           | 2 +-
 media-libs/taglib/taglib-1.11.1_p20190920-r1.ebuild               | 2 +-
 .../gst-plugins-libav-1.14.4.4.1.3_p20190329.ebuild               | 2 +-
 .../gst-plugins-libav/gst-plugins-libav-1.16.2-r1.ebuild          | 2 +-
 .../gst-plugins-libnice/gst-plugins-libnice-0.1.15-r100.ebuild    | 2 +-
 media-plugins/gst-plugins-vaapi/gst-plugins-vaapi-1.14.5.ebuild   | 2 +-
 media-plugins/gst-plugins-vaapi/gst-plugins-vaapi-1.16.2.ebuild   | 2 +-
 media-plugins/libvisual-plugins/libvisual-plugins-0.4.0-r3.ebuild | 2 +-
 media-sound/fluidsynth/fluidsynth-2.0.7.ebuild                    | 2 +-
 media-sound/fluidsynth/fluidsynth-2.1.0.ebuild                    | 2 +-
 media-video/ffmpeg/ffmpeg-3.4.6-r1.ebuild                         | 2 +-
 media-video/ffmpeg/ffmpeg-4.1.3.ebuild                            | 2 +-
 media-video/ffmpeg/ffmpeg-4.1.4.ebuild                            | 2 +-
 media-video/ffmpeg/ffmpeg-4.2.1.ebuild                            | 2 +-
 media-video/ffmpeg/ffmpeg-4.2.2.ebuild                            | 2 +-
 media-video/ffmpeg/ffmpeg-4.2.3.ebuild                            | 2 +-
 media-video/ffmpeg/ffmpeg-9999.ebuild                             | 2 +-
 media-video/mjpegtools/mjpegtools-2.1.0-r4.ebuild                 | 2 +-
 media-video/vcdimager/vcdimager-2.0.1.ebuild                      | 2 +-
 net-dns/avahi/avahi-0.7-r2.ebuild                                 | 2 +-
 net-dns/avahi/avahi-0.7-r4.ebuild                                 | 2 +-
 net-dns/avahi/avahi-0.7-r5.ebuild                                 | 2 +-
 net-dns/avahi/avahi-0.8-r2.ebuild                                 | 2 +-
 net-libs/glib-networking/glib-networking-2.60.4.ebuild            | 2 +-
 net-libs/glib-networking/glib-networking-2.62.3.ebuild            | 2 +-
 net-libs/glib-networking/glib-networking-2.64.0.ebuild            | 2 +-
 net-libs/glib-networking/glib-networking-2.64.2.ebuild            | 2 +-
 net-libs/gssdp/gssdp-1.0.3.ebuild                                 | 2 +-
 net-libs/gssdp/gssdp-1.2.2.ebuild                                 | 2 +-
 net-libs/gupnp-igd/gupnp-igd-0.2.5-r10.ebuild                     | 2 +-
 net-libs/gupnp-igd/gupnp-igd-0.2.5.ebuild                         | 2 +-
 net-libs/gupnp/gupnp-1.0.4.ebuild                                 | 2 +-
 net-libs/gupnp/gupnp-1.2.2.ebuild                                 | 2 +-
 net-libs/libnice/libnice-0.1.13.ebuild                            | 2 +-
 net-libs/libnice/libnice-0.1.15.ebuild                            | 2 +-
 net-libs/libpcap/libpcap-1.9.1-r2.ebuild                          | 2 +-
 net-libs/libpcap/libpcap-1.9.1-r3.ebuild                          | 2 +-
 net-libs/libpcap/libpcap-1.9.1.ebuild                             | 2 +-
 net-libs/libpcap/libpcap-9999.ebuild                              | 2 +-
 net-libs/libproxy/libproxy-0.4.15-r1.ebuild                       | 2 +-
 net-libs/libsoup/libsoup-2.62.3.ebuild                            | 2 +-
 net-libs/libsoup/libsoup-2.66.4.ebuild                            | 2 +-
 net-libs/libsoup/libsoup-2.70.0.ebuild                            | 2 +-
 net-libs/libtirpc/libtirpc-1.2.5.ebuild                           | 2 +-
 net-libs/libtirpc/libtirpc-1.2.6.ebuild                           | 2 +-
 net-libs/neon/neon-0.30.2.ebuild                                  | 2 +-
 net-libs/neon/neon-0.31.0.ebuild                                  | 2 +-
 net-libs/neon/neon-0.31.1.ebuild                                  | 2 +-
 net-libs/rest/rest-0.8.1.ebuild                                   | 2 +-
 net-misc/curl/curl-7.68.0.ebuild                                  | 2 +-
 net-misc/curl/curl-7.69.1.ebuild                                  | 2 +-
 net-misc/curl/curl-7.70.0-r1.ebuild                               | 2 +-
 net-misc/networkmanager/networkmanager-1.18.4-r3.ebuild           | 2 +-
 net-misc/networkmanager/networkmanager-1.18.6.ebuild              | 2 +-
 net-misc/networkmanager/networkmanager-1.20.12.ebuild             | 2 +-
 net-misc/networkmanager/networkmanager-1.22.14.ebuild             | 2 +-
 net-misc/networkmanager/networkmanager-1.24.2.ebuild              | 2 +-
 net-print/cups/cups-2.2.13.ebuild                                 | 2 +-
 net-print/cups/cups-2.3.1.ebuild                                  | 2 +-
 net-print/cups/cups-2.3.3-r1.ebuild                               | 2 +-
 net-print/cups/cups-9999.ebuild                                   | 2 +-
 net-print/libgnomecups/libgnomecups-0.2.3-r5.ebuild               | 2 +-
 sys-apps/hwloc/hwloc-1.11.10.ebuild                               | 2 +-
 sys-apps/hwloc/hwloc-1.11.13.ebuild                               | 2 +-
 sys-apps/hwloc/hwloc-1.11.2-r1.ebuild                             | 2 +-
 sys-apps/hwloc/hwloc-2.0.4.ebuild                                 | 2 +-
 sys-apps/hwloc/hwloc-2.1.0.ebuild                                 | 2 +-
 sys-apps/systemd/systemd-245-r5.ebuild                            | 2 +-
 sys-auth/libnss-compat/libnss-compat-1.2.ebuild                   | 2 +-
 sys-auth/libnss-nis/libnss-nis-1.4.ebuild                         | 2 +-
 sys-auth/libnss-nis/libnss-nis-3.1.ebuild                         | 2 +-
 sys-fs/udev/udev-245.5.ebuild                                     | 2 +-
 sys-fs/udev/udev-245.ebuild                                       | 2 +-
 sys-fs/udev/udev-9999.ebuild                                      | 2 +-
 sys-libs/libavc1394/libavc1394-0.5.4-r2.ebuild                    | 2 +-
 sys-libs/libomp/libomp-10.0.0.ebuild                              | 2 +-
 sys-libs/libomp/libomp-10.0.1.9999.ebuild                         | 2 +-
 sys-libs/libomp/libomp-10.0.1_rc1.ebuild                          | 2 +-
 sys-libs/libomp/libomp-11.0.0.9999.ebuild                         | 2 +-
 sys-libs/libomp/libomp-8.0.1.ebuild                               | 2 +-
 sys-libs/libomp/libomp-9.0.1.ebuild                               | 2 +-
 sys-libs/pam/pam-1.3.1-r2.ebuild                                  | 2 +-
 sys-libs/pam/pam-1.3.1_p20200128-r1.ebuild                        | 2 +-
 sys-libs/tevent/tevent-0.10.2.ebuild                              | 2 +-
 x11-libs/gtk+/gtk+-2.24.32-r1.ebuild                              | 2 +-
 x11-libs/gtk+/gtk+-3.24.16.ebuild                                 | 2 +-
 x11-libs/gtk+/gtk+-3.24.18.ebuild                                 | 2 +-
 x11-libs/gtk+/gtk+-3.24.20.ebuild                                 | 2 +-
 x11-libs/gtkglext/gtkglext-1.2.0-r4.ebuild                        | 2 +-
 x11-libs/pango/pango-1.42.4-r2.ebuild                             | 2 +-
 x11-libs/pango/pango-1.44.7.ebuild                                | 2 +-
 x11-libs/tslib/tslib-1.21.ebuild                                  | 2 +-
 x11-libs/wxGTK/wxGTK-3.0.4-r2.ebuild                              | 2 +-
 x11-libs/wxGTK/wxGTK-3.0.4-r302.ebuild                            | 2 +-
 x11-misc/colord/colord-1.3.5.ebuild                               | 2 +-
 .../gtk-engines-murrine/gtk-engines-murrine-0.98.2-r1.ebuild      | 2 +-
 x11-themes/gtk-engines/gtk-engines-2.20.2-r2.ebuild               | 2 +-
 177 files changed, 179 insertions(+), 187 deletions(-)
Comment 8 Larry the Git Cow gentoo-dev 2020-06-29 05:12:53 UTC
The bug has been referenced in the following commit(s):

https://gitweb.gentoo.org/proj/musl.git/commit/?id=b9b551a9b87b193e7eea67032682736f5bd23c45

commit b9b551a9b87b193e7eea67032682736f5bd23c45
Author:     Georgy Yakovlev <gyakovlev@gentoo.org>
AuthorDate: 2020-06-29 05:08:13 +0000
Commit:     Georgy Yakovlev <gyakovlev@gentoo.org>
CommitDate: 2020-06-29 05:08:13 +0000

    */*: drop multilib from virtual/pkgconfig atoms
    
    Bug: https://bugs.gentoo.org/723112
    Signed-off-by: Georgy Yakovlev <gyakovlev@gentoo.org>

 net-misc/networkmanager/networkmanager-1.18.6.ebuild | 2 +-
 sys-libs/pam/pam-1.3.1-r2.ebuild                     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)