On Wed, 23 Apr 2025 at 10:26:03 +0100, Simon McVittie wrote:
While checking why the fix for #1057621 wasn't migrating to testing, I
noticed that the updated valgrind has failed to build on [32-bit]
...
I see that valgrind's configure check for mpi-c is failing:

checking for mpicc... /usr/bin/mpicc
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for mpi-c... no
gcc: error: unrecognized command-line option '-showme:compile'
gcc: error: unrecognized command-line option '-showme:link'
checking primary target for usable MPI2-compliant C compiler and mpi.h... no

It looks like this is a combination of two factors.

One is that 32-bit architectures use mpich, which dropped the mpi-c.pc entry point in 4.3.x (this is a regression in its own right, tracked as #1102928). 64-bit architectures are unaffected because they use OpenMPI instead. This can be bypassed if the libmpich-dev package either registers a "slave" alternative for mpi-c.pc again (#1102928, #1088919), or is rolled back to a 4.2.1+really4.3.0 version for trixie.

The other is that upstream valgrind discovers how to link MPI libraries by using mpicc(1), which probably works with either OpenMPI or mpich, but Debian's valgrind uses pkg-config instead as a result of a Debian-specific patch to fix cross-compilation, originating in #902297.
(debian/patches/10_mpi-pkg-config.patch)

If mpi-c.pc is not found, 10_mpi-pkg-config.patch falls back to calling `mpicc -showme:compile` and `mpicc -showme:link`, but those options appear to be OpenMPI-specific. The mpich equivalents seem to be
`mpicc -show-compile-info` and `mpicc -show-link-info`.

Does mpi-defaults have a specification for what is the interoperable API of an MPI implementation? If there's no documented spec, "the mpi-defaults autopkgtest should pass" is probably the closest we have (and at the moment that includes requiring a working implementation of mpi-c.pc and mpi-fort.pc).

Perhaps as a pragmatic short-term answer to this it would be better for 10_mpi-pkg-config.patch to fall back from mpi-c.pc (which mpich doesn't currently provide) to mpi.pc (which it still does) before resorting to non-pkg-config mechanisms? That might result in some overlinking (for mpich it additionally includes -lmpichfort -lpthread -lhwloc) but that seems better than failing to build.

     smcv

Reply via email to