Bug#1107591: openmpi: unsatisfiable cross Build-Depends
Helmut Grohne
helmut at subdivi.de
Tue Jun 10 11:45:57 BST 2025
Source: openmpi
Version: 5.0.7-1
Tags: patch
User: debian-cross at lists.debian.org
Usertags: cross-satisfiability
openmpi cannot be cross built from source, because three of its
Build-Depends are not installable. The sphinx-related dependencies are
relatively easiy. sphinx really is needed for an arch-only build as it
is used for generating manual pages. Hence, we cannot move them to
B-D-I. Whilst sphinx can be used in architecture-dependent ways and
therefore is not flagged Multi-Arch: foreign, that's not its most common
use. As a result, sphinx-related dependencies often need to be annotated
:native and that's also the case here.
Nextup is the gfortran dependency. It is requesting a native compiler
for the host architecture. If that were installable, you couldn't expect
to be able to run it. What is needed here is gfortran-for-host, but it
comes with a catch. Once you depend on it, you are no longer entitled to
use the bare gfortran command. Instead, the toolchain must now be
prefixed with the architecture (even for native builds). Fortunately,
dpkg's buildtools.mk knows a suitable value (not being f77) and can
export it as FC. And then we may satisfy cross build-depends.
Please be aware that exporting triplet-prefixed build tools affects
binary packages as OpenMPI embeds the compiler names in tons of files
including headers and shared libraries. Having triplet-prefixed values
there generally is beneficial, but keep in mind that this change does
affect binary packages.
Also note that this does not make openmpi cross buildable. It merely
means that cross building can be attempted. OpenMPI has a lot of sizeof
checks for Fortran that are not implemented using compiler bisection.
Those readily fail. The typical workaround here is supplying cached
values, but I don't think it scales well for Debian's openmpi package.
Instead, implementing bisection at the upstream side would likely be
more useful.
In any case, I'm attaching a patch with the changes necessary to satisfy
cross Build-Depends. It's meant for forky.
Helmut
-------------- next part --------------
diff --minimal -Nru openmpi-5.0.7/debian/changelog openmpi-5.0.7/debian/changelog
--- openmpi-5.0.7/debian/changelog 2025-02-17 14:09:46.000000000 +0100
+++ openmpi-5.0.7/debian/changelog 2025-06-10 11:43:09.000000000 +0200
@@ -1,3 +1,10 @@
+openmpi (5.0.7-1.1) UNRELEASED; urgency=medium
+
+ * Non-maintainer upload.
+ * Make Build-Depends compatible with cross building. (Closes: #-1)
+
+ -- Helmut Grohne <helmut at subdivi.de> Tue, 10 Jun 2025 11:43:09 +0200
+
openmpi (5.0.7-1) unstable; urgency=medium
* New upstream release
diff --minimal -Nru openmpi-5.0.7/debian/control openmpi-5.0.7/debian/control
--- openmpi-5.0.7/debian/control 2025-02-17 14:09:46.000000000 +0100
+++ openmpi-5.0.7/debian/control 2025-06-10 11:43:09.000000000 +0200
@@ -12,7 +12,7 @@
libpmix-dev (>= 5.0.6-2),
libucx-dev [amd64 arm64 ppc64el riscv64],
zlib1g-dev,
- gfortran,
+ gfortran-for-host,
libhwloc-dev,
pkgconf,
libibverbs-dev (>= 1.1.7) [!hurd-any],
@@ -20,8 +20,8 @@
libnuma-dev [!hurd-any],
libpsm-infinipath1-dev [amd64],
libpsm2-dev [amd64],
- python3-sphinx-rtd-theme,
- python3-recommonmark,
+ python3-sphinx-rtd-theme:native,
+ python3-recommonmark:native,
default-jdk [!hurd-any !alpha !ppc64 !sparc64] <!nojava>,
chrpath,
flex
diff --minimal -Nru openmpi-5.0.7/debian/rules openmpi-5.0.7/debian/rules
--- openmpi-5.0.7/debian/rules 2025-02-17 14:09:46.000000000 +0100
+++ openmpi-5.0.7/debian/rules 2025-06-10 11:43:09.000000000 +0200
@@ -4,6 +4,8 @@
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk
+DPKG_EXPORT_BUILDTOOLS = 1
+include /usr/share/dpkg/buildtools.mk
DESTDIR:=$(CURDIR)/debian/tmp/
BUILDDIR_FLANG=debian/build-flang
@@ -51,11 +53,6 @@
FMODDIR:=/usr/lib/$(DEB_HOST_MULTIARCH)/fortran/$(GFORTRAN_MOD_VERSION)
# arch-neutral version we can put in openmpi-common configs
FMODDIR_STRING:="\${libdir}/fortran/$(GFORTRAN_MOD_VERSION)"
-# FC set to f77 by default in make
-# Read default compiler name unless FC is actually set
-ifeq ($(FC),f77)
- FC:=$(shell basename $(shell readlink /etc/alternatives/f95))
-endif
# Drop '-g' flag with flang. Known failure with 2018122 version
ifneq ($(filter flang,$(FC)),)
More information about the debian-science-maintainers
mailing list