Created attachment 215496 [details] move openmpi pkgconfig files in standard location currently (net/openmpi 4.3.0) the whole port, including pkgconfig (.pc) files, is installed under /usr/local/mpi/openmpi/. This makes the pkgconfig files (/usr/local/mpi/openmpi/libdata/pkgconfig/*.pc) hard to access (standard pkgconfig needs fiddling with environment variables, with cmake this feels hackish). As proof I present the ports which are not using pkgconfig but are passing openmpi libs and other paths as variables from the port Makefile. By simply moving the .pc files to their standard location (/usr/local/libdata/pkgconfig/) correct usage of openmpi gets much easier. Attached patch fixes that, passes poudriere and the results have been verified against cad/freecad (I can drop the mpi path fiddling from freecad). Consumers of openmpi do not have to change right now - the actual openmpi software and locations haven't been changed.
I wonder if this explains issues I have with net/mpich seemingly conflicting with openmpi. I discovered FreeCAD was incorrectly linking to mpich, even though its build cmake log shows it found openmpi. I started checking my system and found nothing was dependent on openmpi, even though some should be. $} pkg info -r mpich mpich-3.2.1_6: FreeCAD-0.18.4_9 ---> openmpi hypre-2.19.0 vtk8-8.2.0 ---> openmpi arpack-ng-3.7.0.49 PETSc-3.10.2_4 I then noticed hypre has a knob to choose so I rebuilt it. and found it was linked to openmpi but tracked a dependency on mpich instead. /usr/ports/science/hypre|$} ldd /usr/local/lib/libHYPRE.so /usr/local/lib/libHYPRE.so: liblapack.so.4 => /usr/local/lib/liblapack.so.4 (0x801600000) libblas.so.2 => /usr/local/lib/libblas.so.2 (0x801e16000) libm.so.5 => /lib/libm.so.5 (0x80066f000) libmpi.so.40 => /usr/local/mpi/openmpi/lib/libmpi.so.40 (0x802069000) libthr.so.3 => /lib/libthr.so.3 (0x8006a1000) libc.so.7 => /lib/libc.so.7 (0x80024a000) libgfortran.so.5 => /usr/local/lib/gcc9/libgfortran.so.5 (0x802400000) libquadmath.so.0 => /usr/local/lib/gcc9/libquadmath.so.0 (0x802891000) libopen-rte.so.40 => /usr/local/mpi/openmpi/lib/libopen-rte.so.40 (0x802ad7000) libopen-pal.so.40 => /usr/local/mpi/openmpi/lib/libopen-pal.so.40 (0x802d8b000) libexecinfo.so.1 => /usr/lib/libexecinfo.so.1 (0x8006cd000) libutil.so.9 => /lib/libutil.so.9 (0x8006d2000) libz.so.6 => /lib/libz.so.6 (0x8006e9000) libhwloc.so.5 => /usr/local/lib/libhwloc.so.5 (0x800703000) libevent-2.1.so.7 => /usr/local/lib/libevent-2.1.so.7 (0x800736000) libevent_pthreads-2.1.so.7 => /usr/local/lib/libevent_pthreads-2.1.so.7 (0x80078a000) libgcc_s.so.1 => /usr/local/lib/gcc9/libgcc_s.so.1 (0x803035000) libelf.so.2 => /lib/libelf.so.2 (0x80078f000) libpciaccess.so.0 => /usr/local/lib/libpciaccess.so.0 (0x8007a9000) libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x80140f000) liblzma.so.5 => /usr/lib/liblzma.so.5 (0x8007b3000) /usr/ports/science/hypre|$} pkg info -dr mpich mpich-3.2.1_6 Depends on : perl5-5.30.3 gcc9-9.3.0_1 hwloc-1.11.11 Required by : hypre-2.19.0 ---> built with openmpi knob, unset mpich FreeCAD-0.18.4_9 vtk8-8.2.0 arpack-ng-3.7.0.49 PETSc-3.10.2_4 I gave up and removed mpich and all things requiring costing me scilab, but freecad was more important to me. they do not play nice together, and something about them being installed breaks pkgng. I'm assuming this might be related to pkgconfig items in the bug. I just wanted to post my experience to document you cannot have mpich and openmpi on your system without very weird issues, most times mpich is what is linked, I guessed due to it being in the LDD path ahead of the openmpi prefix, but even when openmpi links pkgng cannot track it. as with hypre above. I'm hoping the pkgconfig files might help, id be willing to test if the patch is accepted.
Hi, I was resisting this change to be able to have multiple openmpi's versions installed. Also, to keep the consistency between all the installations (not have files in different locations for different versions). See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237750 Maybe it would be good to have just one OpenMPI in ports, but right now some ports don't build with net/openmpi, just with net/openmpi3. But they are not too many. I'll consider doing this change during the week. I'm not sure, but maybe your patch breaks some consumers of net/openmpi. Did you check that? Thanks.
(In reply to Danilo Egea Gondolfo from comment #2) I didn't test all consumers of openmpi, but a "random sample" - they all passed poudriere without modifications. Further, I couldn't find (by grepping in Makefiles and patches) any port setting PKG_CONFIG_PATH or similar for openmpi, all those ports just inject the openmpi paths into CFLAGS/LDFLAGS (via environment, cmake options, patching Makefiles, etc). I think that somehow proves my point that having pkgconfig files outside their standard location is not that helpful :) In the intermediate run, I'd argue for pushing everything from openmpi3 to openmpi: as of https://raw.githubusercontent.com/open-mpi/ompi/v3.1.x/NEWS "v3.1.7 will likely never be released.", marking openmpi3 more or less EOL. And while we're at this: there's a openmpi 4.0.4 (June 10th) - upgrade for net/openmpi seems trivial; do you want me to prepare a patch?
I was working to move all the consumers to net/openmpi but 3 of them are not compiling: benchmarks/imb net/py-mpi4py math/vtk6 But yeah, I still want to move all of them to net/openmpi. I already have the version 4.0.4 in the patch I'll commit this week (hopefuly), thanks :)
A commit references this bug: Author: danilo Date: Fri Jun 26 07:17:46 UTC 2020 New revision: 540422 URL: https://svnweb.freebsd.org/changeset/ports/540422 Log: - Update to 4.0.4 - Install .pc files to ${LOCALBASE} to simplify how consumers look for openmpi [1] PR: 247212 Submitted by: cmt [1] Changes: head/net/openmpi/Makefile head/net/openmpi/distinfo head/net/openmpi/pkg-plist
Committed, thanks!