#1082580 octave: does not find nvector/nvector_serial.h from sundials 7

Package:
octave
Source:
octave
Description:
GNU Octave language for numerical computations
Submitter:
Drew Parsons
Date:
2025-12-07 16:39:01 UTC
Severity:
normal
Tags:
#1082580#5
Date:
2024-09-22 13:24:47 UTC
From:
To:
sundials 7 is now available in experimental

In principle octave 9.2 is already patched to support sundials 7, and
indeed configure does find ida/ida.h, SUNLinSol_Dense,
SUNSparseMatrix_Reallocate etc.

But it misses nvector_serial.h for some reason, and consequently loses
support for ode15i and ode15s

checking for klu.h... yes
checking for klu_solve in -lklu ... yes
checking for UMFPACK separate complex matrix and rhs split... yes
checking for nvector_serial.h... no
checking for nvector/nvector_serial.h... no
configure: WARNING: SUNDIALS NVECTOR serial library not found.  The solvers ode15i and ode15s will be disabled.

Not quite sure why it's missing nvector/nvector_serial.h. It's still
provided by libsundials-dev 7.1.1+dfsg1-1exp1

There is one point to keep in mind for sundials 7.  MPI support is now
moved into the core library because of sunmpicomm, introduced in
https://github.com/LLNL/sundials/pull/370
So a standard build might fail with
"sundials_types.h:57:10: fatal error: mpi.h: No such file or directory"
which can be worked around by setting CC=mpicc

But the nvector error message doesn't refer to mpi, so not certain if
that's why configuration missed nvector_serial.h

#1082580#10
Date:
2024-09-22 17:49:34 UTC
From:
To:
I've confirmed current octave source builds successfully against
sundials 7.

So this bug will not be Severity: serious when the library transition
starts, but patching might be needed to reinstate support for ode15i
and ode15s.

#1082580#15
Date:
2024-12-24 13:23:58 UTC
From:
To:
Hi Drew,

Le dimanche 22 septembre 2024 à 15:24 +0200, Drew Parsons a écrit :

Looking at config.log, I confirm that the problem comes from mpi.h not
being found.

However I’m quite reluctant to compiling Octave with a MPI compiler
wrapper, as you suggest. This is not the recommended way of compiling
Octave, and I am not really willing to deal with the issues that could
arise because of that change.

If I understand correctly what happened in sundials upstream, an
alternative could be to provide distinct Debian packages of sundials
without MPI support. But of course that means more work for you.

#1082580#28
Date:
2025-11-30 21:02:00 UTC
From:
To:
Hi Markus,

Le mercredi 12 novembre 2025 à 10:55 +0100, Markus Muetzel a écrit :

Thanks for suggesting this workaround, and sorry for my late reply.

I’ve tried to rebuild the octave in Debian unstable, using your
proposed patch.

Sundials is correctly detected at the configure step, but then I get
the following compilation error:

libtool: compile:  g++ -DHAVE_CONFIG_H -I. -Iliboctave -I./liboctave -I./liboctave/array -Iliboctave/numeric -I./liboctave/numeric -Iliboctave/operators -I./liboctave/operators -I./liboctave/system -I./liboctave/util -I./libinterp/octave-value -Ilibinterp -I./libinterp -I./libinterp/operators -Ilibinterp/parse-tree -I./libinterp/parse-tree -Ilibinterp/corefcn -I./libinterp/corefcn -I./liboctave/wrappers -I/usr/include/hdf5/serial -I/usr/include/GraphicsMagick -I./libinterp/dldfcn/replace-mpi -I/usr/include/suitesparse -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -pthread -fopenmp -Wall -W -Wshadow -Woverloaded-virtual -Wold-style-cast -Wformat -Wpointer-arith -Wwrite-strings -Wcast-align -Wcast-qual -g -O2 -ffile-prefix-map=/home/sebastien/debian/octave=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c libinterp/dldfcn/__ode15__.cc  -fPIC -DPIC -o libinterp/dldfcn/.libs/__ode15___la-__ode15__.o
In file included from /usr/include/sundials/priv/sundials_context_impl.h:25,
                 from /usr/include/sundials/sundials_context.h:22,
                 from /usr/include/sundials/sundials_nvector.h:51,
                 from /usr/include/nvector/nvector_serial.h:42,
                 from libinterp/dldfcn/__ode15__.cc:50:
libinterp/dldfcn/__ode15__.cc: In member function 'void octave::IDA::initialize()':
libinterp/dldfcn/__ode15__.cc:593:26: error: 'MPI_COMM_NULL' was not declared in this scope; did you mean 'SUN_COMM_NULL'?
  593 |   if (SUNContext_Create (SUN_COMM_NULL, &m_sunContext) < 0)
      |                          ^~~~~~~~~~~~~

Best,

#1082580#33
Date:
2025-12-01 17:46:39 UTC
From:
To:
Hi Sébastien,

Am 30.11.2025 um 22:02 schrieb Sébastien Villemot:

Thank you for testing the patch. Sorry, it didn't work.

For some reason, that wasn't an issue when I tested in Ubuntu 25.10.
Maybe, they have a different version of SUNDIALS? Or something else is
different on my test system.

Does the attached updated version of the patch work for you? With that
patch, I'm still able to build Octave using the SUNDIALS 7.1.1+dsfg1-10
packages from Ubuntu 25.10.

Best,

Markus

#1082580#38
Date:
2025-12-07 16:35:15 UTC
From:
To:
Le lundi 01 décembre 2025 à 18:46 +0100, Markus Muetzel a écrit :

This new version of the patch seems to work as expected, thanks.

Do you recommend that I apply it to the Debian package, to restore
ode15s functionality?

#1082580#43
Date:
2025-12-07 16:37:11 UTC
From:
To:
Le dimanche 07 décembre 2025 à 17:35 +0100, Sébastien Villemot a
écrit :

Actually I hit the send button a bit too fast. Octave compiles fine,
but then the testsuite fails (it is exercised when building the
package, and also as part of Debian CI):

[…]
  ode/ode15i.m ...................................................*** The MPI_Comm_dup() function was called before MPI_INIT was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort.
[sid:136962] Local abort before MPI_INIT completed completed successfully, but am not able to aggregate error messages, and not able to guarantee that all other processes were killed!
make[6]: *** [Makefile:3448: check-local] Error 14
[…]