[Pkg-octave-devel] Bug#686926: liboctave-dev: creates broken .oct files when the OpenMPI flavor of HDF5 (libhdf5-openmpi-dev) is installed

Mike Miller mtmiller at ieee.org
Sun Mar 31 23:08:47 UTC 2013

CC'ing pkg-octave-devel since this impacts Octave packaging as well.

Bradley M. Froehle wrote:
> The fix for this bug provided in 1.8.9-1~exp2 has cause me a good deal of
> headache today.
> For me, the issue is triggered as some C++ code containing:
> #include <hdf5.h>   // sets OMPI_SKIP_MPICXX 1
> #include <mpi.h>  // MPI C++ namespace now is NOT available
> Note that even trying to unset OMPI_SKIP_MPICXX before including mpi.h
> won't work
> because OMPI_MPI_H will still be defined and the mpi.h header won't be
> processed again.

If you switch the order so mpi.h is included first does that fix it?
I'm not dismissing, just making sure I understand the problem.

> I respectfully request that this patch be backed out until a better
> solution can be
> worked out.  Totally disabling the MPI C++ bindings when including HDF5 is
> not
> an acceptable side effect.
> I've looked into this bug a bit today and I'd suggest that instead the
> `mkoctfile-mpi.diff` patch in src:octave (from bug #598227) be modified to
> be something more like:
> +: ${XTRA_CXXFLAGS=-I/usr/include/mpi -DOMPI_SKIP_MPICXX=1
> That would contain the bug fix to Octave (which is the only place where the
> bug seems to have surfaced).

Reverting this patch and moving the fix into Octave would be one
acceptable solution that should have the same effect as far as Octave
is concerned. IMHO this is still an HDF5 bug, see below.

> Normally this is not an issue --- a developer would use mpicc or mpicxx to
> do the compilation
> and linking and this would automatically ensure that the correct mpi
> libraries are used.  Octave
> is broken because it is using g++ and hacking in the MPI include directory
> without following it
> up with the necessary link flags.

Octave is not broken, it is simply using HDF5 in a C++ source file and
does not care about or use MPI. However we do want to support
co-installation for users that do want both Octave and MPI. Octave
shouldn't have to care which flavor of HDF5 is installed. Consider
these simple examples:

$ cat hdf5test.c
#include <hdf5.h>
// C source file follows
main() {}

$ cat hdf5test.cc
#include <hdf5.h>
// C++ source file follows
main() {}

$ gcc -o hdf5test hdf5test.c -lhdf5
$ g++ -o hdf5test hdf5test.cc -lhdf5

Works if libhdf5-7 and libhdf5-dev are installed. If HDF5 were
providing a consistent interface this would also work with
libhdf5-openmpi-7 and libhdf5-openmpi-dev installed. As it stands now,
however, I need to compile with (assuming the patch is reverted)

$ gcc -I/usr/include/mpi -o hdf5test hdf5test.c -lhdf5
$ g++ -I/usr/include/mpi -DOMPI_SKIP_MPICXX -o hdf5test hdf5test.cc -lhdf5
$ g++ -I/usr/include/mpi -o hdf5test hdf5test.cc -lhdf5 -lmpi++ -lmpi

Not ideal and could certainly affect users other than Octave.


More information about the Pkg-octave-devel mailing list