changeset 29646:3e8bc8bee8e9

liboctave/array: Add visibility flags to functions declared in headers (bug #60567). * liboctave/array/boolMatrix.h, liboctave/array/boolNDArray.h, liboctave/array/boolSparse.h, liboctave/array/CColVector.h, liboctave/array/CDiagMatrix.h, liboctave/array/chMatrix.h, liboctave/array/chNDArray.h, liboctave/array/CMatrix.h, liboctave/array/CNDArray.h, liboctave/array/CRowVector.h, liboctave/array/CSparse.h, liboctave/array/dColVector.h, liboctave/array/dDiagMatrix.h, liboctave/array/DiagArray2.h, liboctave/array/dim-vector.h, liboctave/array/dMatrix.h, liboctave/array/dNDArray.h, liboctave/array/dRowVector.h, liboctave/array/fCColVector.h, liboctave/array/fCDiagMatrix.h, liboctave/array/fCMatrix.h, liboctave/array/fCNDArray.h, liboctave/array/fColVector.h, liboctave/array/fCRowVector.h, liboctave/array/fDiagMatrix.h, liboctave/array/fMatrix.h, liboctave/array/fNDArray.h, liboctave/array/fRowVector.h, liboctave/array/idx-vector.h, liboctave/array/intNDArray.h, liboctave/array/MArray.h, liboctave/array/MDiagArray2.h, liboctave/array/PermMatrix.h: Add visibility flags to functions that are declared (but not defined) in headers.
author Markus Mützel <markus.muetzel@gmx.de>
date Mon, 10 May 2021 23:27:38 +0200
parents eb49c0c02a54
children bdb0cfffa2d0
files liboctave/array/CColVector.h liboctave/array/CDiagMatrix.h liboctave/array/CMatrix.h liboctave/array/CNDArray.h liboctave/array/CRowVector.h liboctave/array/CSparse.h liboctave/array/DiagArray2.h liboctave/array/MArray.h liboctave/array/MDiagArray2.h liboctave/array/PermMatrix.h liboctave/array/boolMatrix.h liboctave/array/boolNDArray.h liboctave/array/boolSparse.h liboctave/array/chMatrix.h liboctave/array/chNDArray.h liboctave/array/dColVector.h liboctave/array/dDiagMatrix.h liboctave/array/dMatrix.h liboctave/array/dNDArray.h liboctave/array/dRowVector.h liboctave/array/dim-vector.h liboctave/array/fCColVector.h liboctave/array/fCDiagMatrix.h liboctave/array/fCMatrix.h liboctave/array/fCNDArray.h liboctave/array/fCRowVector.h liboctave/array/fColVector.h liboctave/array/fDiagMatrix.h liboctave/array/fMatrix.h liboctave/array/fNDArray.h liboctave/array/fRowVector.h liboctave/array/idx-vector.h liboctave/array/intNDArray.h
diffstat 33 files changed, 2019 insertions(+), 1776 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/CColVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/CColVector.h	Mon May 10 23:27:38 2021 +0200
@@ -59,7 +59,7 @@
   ComplexColumnVector (const Array<Complex>& a)
     : MArray<Complex> (a.as_column ()) { }
 
-  explicit ComplexColumnVector (const ColumnVector& a);
+  explicit OCTAVE_API ComplexColumnVector (const ColumnVector& a);
 
   ComplexColumnVector& operator = (const ComplexColumnVector& a)
   {
@@ -67,39 +67,43 @@
     return *this;
   }
 
-  bool operator == (const ComplexColumnVector& a) const;
-  bool operator != (const ComplexColumnVector& a) const;
+  OCTAVE_API bool operator == (const ComplexColumnVector& a) const;
+  OCTAVE_API bool operator != (const ComplexColumnVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  ComplexColumnVector& insert (const ColumnVector& a, octave_idx_type r);
-  ComplexColumnVector& insert (const ComplexColumnVector& a, octave_idx_type r);
+  OCTAVE_API ComplexColumnVector&
+  insert (const ColumnVector& a, octave_idx_type r);
+  OCTAVE_API ComplexColumnVector&
+  insert (const ComplexColumnVector& a, octave_idx_type r);
 
-  ComplexColumnVector& fill (double val);
-  ComplexColumnVector& fill (const Complex& val);
-  ComplexColumnVector& fill (double val,
-                             octave_idx_type r1, octave_idx_type r2);
-  ComplexColumnVector& fill (const Complex& val,
-                             octave_idx_type r1, octave_idx_type r2);
+  OCTAVE_API ComplexColumnVector& fill (double val);
+  OCTAVE_API ComplexColumnVector& fill (const Complex& val);
+  OCTAVE_API ComplexColumnVector&
+  fill (double val, octave_idx_type r1, octave_idx_type r2);
+  OCTAVE_API ComplexColumnVector&
+  fill (const Complex& val, octave_idx_type r1, octave_idx_type r2);
 
-  ComplexColumnVector stack (const ColumnVector& a) const;
-  ComplexColumnVector stack (const ComplexColumnVector& a) const;
+  OCTAVE_API ComplexColumnVector stack (const ColumnVector& a) const;
+  OCTAVE_API ComplexColumnVector stack (const ComplexColumnVector& a) const;
 
-  ComplexRowVector hermitian (void) const;
-  ComplexRowVector transpose (void) const;
+  OCTAVE_API ComplexRowVector hermitian (void) const;
+  OCTAVE_API ComplexRowVector transpose (void) const;
 
   friend OCTAVE_API ComplexColumnVector conj (const ComplexColumnVector& a);
 
   // resize is the destructive equivalent for this one
 
-  ComplexColumnVector extract (octave_idx_type r1, octave_idx_type r2) const;
+  OCTAVE_API ComplexColumnVector
+  extract (octave_idx_type r1, octave_idx_type r2) const;
 
-  ComplexColumnVector extract_n (octave_idx_type r1, octave_idx_type n) const;
+  OCTAVE_API ComplexColumnVector
+  extract_n (octave_idx_type r1, octave_idx_type n) const;
 
   // column vector by column vector -> column vector operations
 
-  ComplexColumnVector& operator += (const ColumnVector& a);
-  ComplexColumnVector& operator -= (const ColumnVector& a);
+  OCTAVE_API ComplexColumnVector& operator += (const ColumnVector& a);
+  OCTAVE_API ComplexColumnVector& operator -= (const ColumnVector& a);
 
   // matrix by column vector -> column vector operations
 
@@ -127,10 +131,10 @@
 
   // other operations
 
-  Complex min (void) const;
-  Complex max (void) const;
+  OCTAVE_API Complex min (void) const;
+  OCTAVE_API Complex max (void) const;
 
-  ColumnVector abs (void) const;
+  OCTAVE_API ColumnVector abs (void) const;
 
   // i/o
 
--- a/liboctave/array/CDiagMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/CDiagMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -72,7 +72,7 @@
                      octave_idx_type c)
     : MDiagArray2<Complex> (a, r, c) { }
 
-  explicit ComplexDiagMatrix (const DiagMatrix& a);
+  explicit OCTAVE_API ComplexDiagMatrix (const DiagMatrix& a);
 
   ComplexDiagMatrix (const MDiagArray2<Complex>& a)
     : MDiagArray2<Complex> (a) { }
@@ -81,23 +81,26 @@
   ComplexDiagMatrix (const DiagArray2<U>& a)
     : MDiagArray2<Complex> (a) { }
 
-  bool operator == (const ComplexDiagMatrix& a) const;
-  bool operator != (const ComplexDiagMatrix& a) const;
+  OCTAVE_API bool operator == (const ComplexDiagMatrix& a) const;
+  OCTAVE_API bool operator != (const ComplexDiagMatrix& a) const;
 
-  ComplexDiagMatrix& fill (double val);
-  ComplexDiagMatrix& fill (const Complex& val);
-  ComplexDiagMatrix& fill (double val,
-                           octave_idx_type beg, octave_idx_type end);
-  ComplexDiagMatrix& fill (const Complex& val,
-                           octave_idx_type beg, octave_idx_type end);
-  ComplexDiagMatrix& fill (const ColumnVector& a);
-  ComplexDiagMatrix& fill (const ComplexColumnVector& a);
-  ComplexDiagMatrix& fill (const RowVector& a);
-  ComplexDiagMatrix& fill (const ComplexRowVector& a);
-  ComplexDiagMatrix& fill (const ColumnVector& a, octave_idx_type beg);
-  ComplexDiagMatrix& fill (const ComplexColumnVector& a, octave_idx_type beg);
-  ComplexDiagMatrix& fill (const RowVector& a, octave_idx_type beg);
-  ComplexDiagMatrix& fill (const ComplexRowVector& a, octave_idx_type beg);
+  OCTAVE_API ComplexDiagMatrix& fill (double val);
+  OCTAVE_API ComplexDiagMatrix& fill (const Complex& val);
+  OCTAVE_API ComplexDiagMatrix&
+  fill (double val, octave_idx_type beg, octave_idx_type end);
+  OCTAVE_API ComplexDiagMatrix&
+  fill (const Complex& val, octave_idx_type beg, octave_idx_type end);
+  OCTAVE_API ComplexDiagMatrix& fill (const ColumnVector& a);
+  OCTAVE_API ComplexDiagMatrix& fill (const ComplexColumnVector& a);
+  OCTAVE_API ComplexDiagMatrix& fill (const RowVector& a);
+  OCTAVE_API ComplexDiagMatrix& fill (const ComplexRowVector& a);
+  OCTAVE_API ComplexDiagMatrix&
+  fill (const ColumnVector& a, octave_idx_type beg);
+  OCTAVE_API ComplexDiagMatrix&
+  fill (const ComplexColumnVector& a, octave_idx_type beg);
+  OCTAVE_API ComplexDiagMatrix& fill (const RowVector& a, octave_idx_type beg);
+  OCTAVE_API ComplexDiagMatrix&
+  fill (const ComplexRowVector& a, octave_idx_type beg);
 
   ComplexDiagMatrix hermitian (void) const
   { return MDiagArray2<Complex>::hermitian (std::conj); }
@@ -109,40 +112,41 @@
 
   // resize is the destructive analog for this one
 
-  ComplexMatrix extract (octave_idx_type r1, octave_idx_type c1,
-                         octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API ComplexMatrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
   // extract row or column i
 
-  ComplexRowVector row (octave_idx_type i) const;
-  ComplexRowVector row (char *s) const;
+  OCTAVE_API ComplexRowVector row (octave_idx_type i) const;
+  OCTAVE_API ComplexRowVector row (char *s) const;
 
-  ComplexColumnVector column (octave_idx_type i) const;
-  ComplexColumnVector column (char *s) const;
+  OCTAVE_API ComplexColumnVector column (octave_idx_type i) const;
+  OCTAVE_API ComplexColumnVector column (char *s) const;
 
-  ComplexDiagMatrix inverse (octave_idx_type& info) const;
-  ComplexDiagMatrix inverse (void) const;
-  ComplexDiagMatrix pseudo_inverse (double tol = 0.0) const;
+  OCTAVE_API ComplexDiagMatrix inverse (octave_idx_type& info) const;
+  OCTAVE_API ComplexDiagMatrix inverse (void) const;
+  OCTAVE_API ComplexDiagMatrix pseudo_inverse (double tol = 0.0) const;
 
-  bool all_elements_are_real (void) const;
+  OCTAVE_API bool all_elements_are_real (void) const;
 
   // diagonal matrix by diagonal matrix -> diagonal matrix operations
 
-  ComplexDiagMatrix& operator += (const DiagMatrix& a);
-  ComplexDiagMatrix& operator -= (const DiagMatrix& a);
+  OCTAVE_API ComplexDiagMatrix& operator += (const DiagMatrix& a);
+  OCTAVE_API ComplexDiagMatrix& operator -= (const DiagMatrix& a);
 
   // other operations
 
   ComplexColumnVector extract_diag (octave_idx_type k = 0) const
   { return MDiagArray2<Complex>::extract_diag (k); }
 
-  ComplexDET determinant (void) const;
-  double rcond (void) const;
+  OCTAVE_API ComplexDET determinant (void) const;
+  OCTAVE_API double rcond (void) const;
 
   // i/o
 
-  friend std::ostream& operator << (std::ostream& os,
-                                    const ComplexDiagMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const ComplexDiagMatrix& a);
 
 };
 
--- a/liboctave/array/CMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/CMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -85,86 +85,87 @@
   template <typename U>
   ComplexMatrix (const Array<U>& a) : ComplexNDArray (a.as_matrix ()) { }
 
-  ComplexMatrix (const Matrix& re, const Matrix& im);
+  OCTAVE_API ComplexMatrix (const Matrix& re, const Matrix& im);
 
-  explicit ComplexMatrix (const Matrix& a);
+  explicit OCTAVE_API ComplexMatrix (const Matrix& a);
 
-  explicit ComplexMatrix (const RowVector& rv);
+  explicit OCTAVE_API ComplexMatrix (const RowVector& rv);
 
-  explicit ComplexMatrix (const ColumnVector& cv);
+  explicit OCTAVE_API ComplexMatrix (const ColumnVector& cv);
 
-  explicit ComplexMatrix (const DiagMatrix& a);
+  explicit OCTAVE_API ComplexMatrix (const DiagMatrix& a);
 
-  explicit ComplexMatrix (const MDiagArray2<double>& a);
+  explicit OCTAVE_API ComplexMatrix (const MDiagArray2<double>& a);
 
-  explicit ComplexMatrix (const DiagArray2<double>& a);
+  explicit OCTAVE_API ComplexMatrix (const DiagArray2<double>& a);
 
-  explicit ComplexMatrix (const ComplexRowVector& rv);
+  explicit OCTAVE_API ComplexMatrix (const ComplexRowVector& rv);
 
-  explicit ComplexMatrix (const ComplexColumnVector& cv);
+  explicit OCTAVE_API ComplexMatrix (const ComplexColumnVector& cv);
 
-  explicit ComplexMatrix (const ComplexDiagMatrix& a);
+  explicit OCTAVE_API ComplexMatrix (const ComplexDiagMatrix& a);
 
-  explicit ComplexMatrix (const MDiagArray2<Complex>& a);
+  explicit OCTAVE_API ComplexMatrix (const MDiagArray2<Complex>& a);
 
-  explicit ComplexMatrix (const DiagArray2<Complex>& a);
+  explicit OCTAVE_API ComplexMatrix (const DiagArray2<Complex>& a);
 
-  explicit ComplexMatrix (const boolMatrix& a);
+  explicit OCTAVE_API ComplexMatrix (const boolMatrix& a);
 
-  explicit ComplexMatrix (const charMatrix& a);
+  explicit OCTAVE_API ComplexMatrix (const charMatrix& a);
 
-  bool operator == (const ComplexMatrix& a) const;
-  bool operator != (const ComplexMatrix& a) const;
+  OCTAVE_API bool operator == (const ComplexMatrix& a) const;
+  OCTAVE_API bool operator != (const ComplexMatrix& a) const;
 
-  bool ishermitian (void) const;
+  OCTAVE_API bool ishermitian (void) const;
 
   // destructive insert/delete/reorder operations
 
-  ComplexMatrix& insert (const Matrix& a, octave_idx_type r, octave_idx_type c);
-  ComplexMatrix& insert (const RowVector& a,
-                         octave_idx_type r, octave_idx_type c);
-  ComplexMatrix& insert (const ColumnVector& a,
-                         octave_idx_type r, octave_idx_type c);
-  ComplexMatrix& insert (const DiagMatrix& a,
-                         octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const Matrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const RowVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const ColumnVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const DiagMatrix& a, octave_idx_type r, octave_idx_type c);
 
-  ComplexMatrix& insert (const ComplexMatrix& a,
-                         octave_idx_type r, octave_idx_type c);
-  ComplexMatrix& insert (const ComplexRowVector& a,
-                         octave_idx_type r, octave_idx_type c);
-  ComplexMatrix& insert (const ComplexColumnVector& a,
-                         octave_idx_type r, octave_idx_type c);
-  ComplexMatrix& insert (const ComplexDiagMatrix& a,
-                         octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const ComplexMatrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const ComplexRowVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const ComplexColumnVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexMatrix&
+  insert (const ComplexDiagMatrix& a, octave_idx_type r, octave_idx_type c);
 
-  ComplexMatrix& fill (double val);
-  ComplexMatrix& fill (const Complex& val);
-  ComplexMatrix& fill (double val,
-                       octave_idx_type r1, octave_idx_type c1,
-                       octave_idx_type r2, octave_idx_type c2);
-  ComplexMatrix& fill (const Complex& val,
-                       octave_idx_type r1, octave_idx_type c1,
-                       octave_idx_type r2, octave_idx_type c2);
+  OCTAVE_API ComplexMatrix& fill (double val);
+  OCTAVE_API ComplexMatrix& fill (const Complex& val);
+  OCTAVE_API ComplexMatrix&
+  fill (double val, octave_idx_type r1, octave_idx_type c1,
+        octave_idx_type r2, octave_idx_type c2);
+  OCTAVE_API ComplexMatrix&
+  fill (const Complex& val, octave_idx_type r1, octave_idx_type c1,
+        octave_idx_type r2, octave_idx_type c2);
 
-  ComplexMatrix append (const Matrix& a) const;
-  ComplexMatrix append (const RowVector& a) const;
-  ComplexMatrix append (const ColumnVector& a) const;
-  ComplexMatrix append (const DiagMatrix& a) const;
+  OCTAVE_API ComplexMatrix append (const Matrix& a) const;
+  OCTAVE_API ComplexMatrix append (const RowVector& a) const;
+  OCTAVE_API ComplexMatrix append (const ColumnVector& a) const;
+  OCTAVE_API ComplexMatrix append (const DiagMatrix& a) const;
 
-  ComplexMatrix append (const ComplexMatrix& a) const;
-  ComplexMatrix append (const ComplexRowVector& a) const;
-  ComplexMatrix append (const ComplexColumnVector& a) const;
-  ComplexMatrix append (const ComplexDiagMatrix& a) const;
+  OCTAVE_API ComplexMatrix append (const ComplexMatrix& a) const;
+  OCTAVE_API ComplexMatrix append (const ComplexRowVector& a) const;
+  OCTAVE_API ComplexMatrix append (const ComplexColumnVector& a) const;
+  OCTAVE_API ComplexMatrix append (const ComplexDiagMatrix& a) const;
 
-  ComplexMatrix stack (const Matrix& a) const;
-  ComplexMatrix stack (const RowVector& a) const;
-  ComplexMatrix stack (const ColumnVector& a) const;
-  ComplexMatrix stack (const DiagMatrix& a) const;
+  OCTAVE_API ComplexMatrix stack (const Matrix& a) const;
+  OCTAVE_API ComplexMatrix stack (const RowVector& a) const;
+  OCTAVE_API ComplexMatrix stack (const ColumnVector& a) const;
+  OCTAVE_API ComplexMatrix stack (const DiagMatrix& a) const;
 
-  ComplexMatrix stack (const ComplexMatrix& a) const;
-  ComplexMatrix stack (const ComplexRowVector& a) const;
-  ComplexMatrix stack (const ComplexColumnVector& a) const;
-  ComplexMatrix stack (const ComplexDiagMatrix& a) const;
+  OCTAVE_API ComplexMatrix stack (const ComplexMatrix& a) const;
+  OCTAVE_API ComplexMatrix stack (const ComplexRowVector& a) const;
+  OCTAVE_API ComplexMatrix stack (const ComplexColumnVector& a) const;
+  OCTAVE_API ComplexMatrix stack (const ComplexDiagMatrix& a) const;
 
   ComplexMatrix hermitian (void) const
   { return MArray<Complex>::hermitian (std::conj); }
@@ -175,17 +176,19 @@
 
   // resize is the destructive equivalent for this one
 
-  ComplexMatrix extract (octave_idx_type r1, octave_idx_type c1,
-                         octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API ComplexMatrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
-  ComplexMatrix extract_n (octave_idx_type r1, octave_idx_type c1,
-                           octave_idx_type nr, octave_idx_type nc) const;
+  OCTAVE_API ComplexMatrix
+  extract_n (octave_idx_type r1, octave_idx_type c1,
+             octave_idx_type nr, octave_idx_type nc) const;
 
   // extract row or column i.
 
-  ComplexRowVector row (octave_idx_type i) const;
+  OCTAVE_API ComplexRowVector row (octave_idx_type i) const;
 
-  ComplexColumnVector column (octave_idx_type i) const;
+  OCTAVE_API ComplexColumnVector column (octave_idx_type i) const;
 
   void resize (octave_idx_type nr, octave_idx_type nc,
                const Complex& rfv = Complex (0))
@@ -201,34 +204,38 @@
                           double& rcon, bool force, bool calc_cond) const;
 
 public:
-  ComplexMatrix inverse (void) const;
-  ComplexMatrix inverse (octave_idx_type& info) const;
-  ComplexMatrix inverse (octave_idx_type& info, double& rcon,
-                         bool force = false, bool calc_cond = true) const;
+  OCTAVE_API ComplexMatrix inverse (void) const;
+  OCTAVE_API ComplexMatrix inverse (octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  inverse (octave_idx_type& info, double& rcon,
+           bool force = false, bool calc_cond = true) const;
 
-  ComplexMatrix inverse (MatrixType& mattype) const;
-  ComplexMatrix inverse (MatrixType& mattype, octave_idx_type& info) const;
-  ComplexMatrix inverse (MatrixType& mattype, octave_idx_type& info,
-                         double& rcon, bool force = false,
-                         bool calc_cond = true) const;
+  OCTAVE_API ComplexMatrix inverse (MatrixType& mattype) const;
+  OCTAVE_API ComplexMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info, double& rcon,
+           bool force = false, bool calc_cond = true) const;
 
-  ComplexMatrix pseudo_inverse (double tol = 0.0) const;
+  OCTAVE_API ComplexMatrix pseudo_inverse (double tol = 0.0) const;
 
-  ComplexMatrix fourier (void) const;
-  ComplexMatrix ifourier (void) const;
+  OCTAVE_API ComplexMatrix fourier (void) const;
+  OCTAVE_API ComplexMatrix ifourier (void) const;
 
-  ComplexMatrix fourier2d (void) const;
-  ComplexMatrix ifourier2d (void) const;
+  OCTAVE_API ComplexMatrix fourier2d (void) const;
+  OCTAVE_API ComplexMatrix ifourier2d (void) const;
 
-  ComplexDET determinant (void) const;
-  ComplexDET determinant (octave_idx_type& info) const;
-  ComplexDET determinant (octave_idx_type& info, double& rcon,
-                          bool calc_cond = true) const;
-  ComplexDET determinant (MatrixType& mattype, octave_idx_type& info,
-                          double& rcon, bool calc_cond = true) const;
+  OCTAVE_API ComplexDET determinant (void) const;
+  OCTAVE_API ComplexDET determinant (octave_idx_type& info) const;
+  OCTAVE_API ComplexDET
+  determinant (octave_idx_type& info, double& rcon,
+               bool calc_cond = true) const;
+  OCTAVE_API ComplexDET
+  determinant (MatrixType& mattype, octave_idx_type& info, double& rcon,
+               bool calc_cond = true) const;
 
-  double rcond (void) const;
-  double rcond (MatrixType& mattype) const;
+  OCTAVE_API double rcond (void) const;
+  OCTAVE_API double rcond (MatrixType& mattype) const;
 
 private:
   // Upper triangular matrix solvers
@@ -253,170 +260,192 @@
 
 public:
   // Generic interface to solver with no probing of type
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b) const;
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b,
-                       octave_idx_type& info) const;
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b,
-                       octave_idx_type& info, double& rcon) const;
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b,
-                       octave_idx_type& info, double& rcon,
-                       solve_singularity_handler sing_handler,
-                       bool singular_fallback = true,
-                       blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexMatrix solve (MatrixType& mattype, const Matrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
+         double& rcon) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
+         double& rcon, solve_singularity_handler sing_handler,
+         bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
+
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b, octave_idx_type& info,
+         double& rcon) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b, octave_idx_type& info,
+         double& rcon, solve_singularity_handler sing_handler,
+         bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info, double& rcon) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info, double& rcon,
-                       solve_singularity_handler sing_handler,
-                       bool singular_fallback = true,
-                       blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b,
+         octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b, octave_idx_type& info,
+         double& rcon, solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                             octave_idx_type& info, double& rcon) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                             octave_idx_type& info, double& rcon,
-                             solve_singularity_handler sing_handler,
-                             blas_trans_type transt = blas_no_trans) const;
-
-  ComplexColumnVector solve (MatrixType& mattype,
-                             const ComplexColumnVector& b) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcon) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcon,
-                             solve_singularity_handler sing_handler,
-                             blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
   // Generic interface to solver with probing of type
-  ComplexMatrix solve (const Matrix& b) const;
-  ComplexMatrix solve (const Matrix& b, octave_idx_type& info) const;
-  ComplexMatrix solve (const Matrix& b, octave_idx_type& info,
-                       double& rcon) const;
-  ComplexMatrix solve (const Matrix& b, octave_idx_type& info, double& rcon,
-                       solve_singularity_handler sing_handler,
-                       blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexMatrix solve (const Matrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (const Matrix& b, octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ComplexMatrix
+  solve (const Matrix& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexMatrix solve (const ComplexMatrix& b) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info,
-                       double& rcon) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info,
-                       double& rcon,
-                       solve_singularity_handler sing_handler,
-                       blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexMatrix solve (const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexColumnVector solve (const ColumnVector& b) const;
-  ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info) const;
-  ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info,
-                             double& rcon) const;
-  ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info,
-                             double& rcon,
-                             solve_singularity_handler sing_handler,
-                             blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexColumnVector solve (const ColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexColumnVector solve (const ComplexColumnVector& b) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info,
-                             double& rcon) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info,
-                             double& rcon,
-                             solve_singularity_handler sing_handler,
-                             blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexColumnVector solve (const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info,
+         double& rcon) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexMatrix lssolve (const Matrix& b) const;
-  ComplexMatrix lssolve (const Matrix& b, octave_idx_type& info) const;
-  ComplexMatrix lssolve (const Matrix& b, octave_idx_type& info,
-                         octave_idx_type& rank) const;
-  ComplexMatrix lssolve (const Matrix& b, octave_idx_type& info,
-                         octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API ComplexMatrix lssolve (const Matrix& b) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const Matrix& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const Matrix& b, octave_idx_type& info,
+           octave_idx_type& rank, double& rcon) const;
 
-  ComplexMatrix lssolve (const ComplexMatrix& b) const;
-  ComplexMatrix lssolve (const ComplexMatrix& b, octave_idx_type& info) const;
-  ComplexMatrix lssolve (const ComplexMatrix& b, octave_idx_type& info,
-                         octave_idx_type& rank) const;
-  ComplexMatrix lssolve (const ComplexMatrix& b, octave_idx_type& info,
-                         octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API ComplexMatrix lssolve (const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const ComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const ComplexMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const ComplexMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank, double& rcon) const;
 
-  ComplexColumnVector lssolve (const ColumnVector& b) const;
-  ComplexColumnVector lssolve (const ColumnVector& b,
-                               octave_idx_type& info) const;
-  ComplexColumnVector lssolve (const ColumnVector& b, octave_idx_type& info,
-                               octave_idx_type& rank) const;
-  ComplexColumnVector lssolve (const ColumnVector& b, octave_idx_type& info,
-                               octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API ComplexColumnVector lssolve (const ColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, double& rcon) const;
 
-  ComplexColumnVector lssolve (const ComplexColumnVector& b) const;
-  ComplexColumnVector lssolve (const ComplexColumnVector& b,
-                               octave_idx_type& info) const;
-  ComplexColumnVector lssolve (const ComplexColumnVector& b,
-                               octave_idx_type& info,
-                               octave_idx_type& rank) const;
-  ComplexColumnVector lssolve (const ComplexColumnVector& b,
-                               octave_idx_type& info,
-                               octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API ComplexColumnVector lssolve (const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, double& rcon) const;
 
   // matrix by diagonal matrix -> matrix operations
 
-  ComplexMatrix& operator += (const DiagMatrix& a);
-  ComplexMatrix& operator -= (const DiagMatrix& a);
+  OCTAVE_API ComplexMatrix& operator += (const DiagMatrix& a);
+  OCTAVE_API ComplexMatrix& operator -= (const DiagMatrix& a);
 
-  ComplexMatrix& operator += (const ComplexDiagMatrix& a);
-  ComplexMatrix& operator -= (const ComplexDiagMatrix& a);
+  OCTAVE_API ComplexMatrix& operator += (const ComplexDiagMatrix& a);
+  OCTAVE_API ComplexMatrix& operator -= (const ComplexDiagMatrix& a);
 
   // matrix by matrix -> matrix operations
 
-  ComplexMatrix& operator += (const Matrix& a);
-  ComplexMatrix& operator -= (const Matrix& a);
+  OCTAVE_API ComplexMatrix& operator += (const Matrix& a);
+  OCTAVE_API ComplexMatrix& operator -= (const Matrix& a);
 
   // other operations
 
-  boolMatrix all (int dim = -1) const;
-  boolMatrix any (int dim = -1) const;
+  OCTAVE_API boolMatrix all (int dim = -1) const;
+  OCTAVE_API boolMatrix any (int dim = -1) const;
 
-  ComplexMatrix cumprod (int dim = -1) const;
-  ComplexMatrix cumsum (int dim = -1) const;
-  ComplexMatrix prod (int dim = -1) const;
-  ComplexMatrix sum (int dim = -1) const;
-  ComplexMatrix sumsq (int dim = -1) const;
-  Matrix abs (void) const;
+  OCTAVE_API ComplexMatrix cumprod (int dim = -1) const;
+  OCTAVE_API ComplexMatrix cumsum (int dim = -1) const;
+  OCTAVE_API ComplexMatrix prod (int dim = -1) const;
+  OCTAVE_API ComplexMatrix sum (int dim = -1) const;
+  OCTAVE_API ComplexMatrix sumsq (int dim = -1) const;
+  OCTAVE_API Matrix abs (void) const;
 
-  ComplexMatrix diag (octave_idx_type k = 0) const;
+  OCTAVE_API ComplexMatrix diag (octave_idx_type k = 0) const;
 
-  ComplexDiagMatrix diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API ComplexDiagMatrix
+  diag (octave_idx_type m, octave_idx_type n) const;
 
-  bool row_is_real_only (octave_idx_type) const;
-  bool column_is_real_only (octave_idx_type) const;
+  OCTAVE_API bool row_is_real_only (octave_idx_type) const;
+  OCTAVE_API bool column_is_real_only (octave_idx_type) const;
 
-  ComplexColumnVector row_min (void) const;
-  ComplexColumnVector row_max (void) const;
+  OCTAVE_API ComplexColumnVector row_min (void) const;
+  OCTAVE_API ComplexColumnVector row_max (void) const;
 
-  ComplexColumnVector row_min (Array<octave_idx_type>& index) const;
-  ComplexColumnVector row_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API ComplexColumnVector row_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API ComplexColumnVector row_max (Array<octave_idx_type>& index) const;
 
-  ComplexRowVector column_min (void) const;
-  ComplexRowVector column_max (void) const;
+  OCTAVE_API ComplexRowVector column_min (void) const;
+  OCTAVE_API ComplexRowVector column_max (void) const;
 
-  ComplexRowVector column_min (Array<octave_idx_type>& index) const;
-  ComplexRowVector column_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API ComplexRowVector column_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API ComplexRowVector column_max (Array<octave_idx_type>& index) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const ComplexMatrix& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is,
-                                               ComplexMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const ComplexMatrix& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, ComplexMatrix& a);
 };
 
 extern OCTAVE_API ComplexMatrix conj (const ComplexMatrix& a);
--- a/liboctave/array/CNDArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/CNDArray.h	Mon May 10 23:27:38 2021 +0200
@@ -64,73 +64,80 @@
 
   // unary operations
 
-  boolNDArray operator ! (void) const;
+  OCTAVE_API boolNDArray operator ! (void) const;
 
   // FIXME: this is not quite the right thing.
 
-  bool any_element_is_nan (void) const;
-  bool any_element_is_inf_or_nan (void) const;
-  bool all_elements_are_real (void) const;
-  bool all_integers (double& max_val, double& min_val) const;
-  bool too_large_for_float (void) const;
+  OCTAVE_API bool any_element_is_nan (void) const;
+  OCTAVE_API bool any_element_is_inf_or_nan (void) const;
+  OCTAVE_API bool all_elements_are_real (void) const;
+  OCTAVE_API bool all_integers (double& max_val, double& min_val) const;
+  OCTAVE_API bool too_large_for_float (void) const;
 
-  boolNDArray all (int dim = -1) const;
-  boolNDArray any (int dim = -1) const;
+  OCTAVE_API boolNDArray all (int dim = -1) const;
+  OCTAVE_API boolNDArray any (int dim = -1) const;
 
-  ComplexNDArray cumprod (int dim = -1) const;
-  ComplexNDArray cumsum (int dim = -1) const;
-  ComplexNDArray prod (int dim = -1) const;
-  ComplexNDArray sum (int dim = -1) const;
-  ComplexNDArray xsum (int dim = -1) const;
-  ComplexNDArray sumsq (int dim = -1) const;
-  ComplexNDArray concat (const ComplexNDArray& rb,
-                         const Array<octave_idx_type>& ra_idx);
-  ComplexNDArray concat (const NDArray& rb,
-                         const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API ComplexNDArray cumprod (int dim = -1) const;
+  OCTAVE_API ComplexNDArray cumsum (int dim = -1) const;
+  OCTAVE_API ComplexNDArray prod (int dim = -1) const;
+  OCTAVE_API ComplexNDArray sum (int dim = -1) const;
+  OCTAVE_API ComplexNDArray xsum (int dim = -1) const;
+  OCTAVE_API ComplexNDArray sumsq (int dim = -1) const;
+  OCTAVE_API ComplexNDArray
+  concat (const ComplexNDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API ComplexNDArray
+  concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx);
 
-  ComplexNDArray max (int dim = -1) const;
-  ComplexNDArray max (Array<octave_idx_type>& index, int dim = -1) const;
-  ComplexNDArray min (int dim = -1) const;
-  ComplexNDArray min (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API ComplexNDArray max (int dim = -1) const;
+  OCTAVE_API ComplexNDArray
+  max (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API ComplexNDArray min (int dim = -1) const;
+  OCTAVE_API ComplexNDArray
+  min (Array<octave_idx_type>& index, int dim = -1) const;
 
-  ComplexNDArray cummax (int dim = -1) const;
-  ComplexNDArray cummax (Array<octave_idx_type>& index, int dim = -1) const;
-  ComplexNDArray cummin (int dim = -1) const;
-  ComplexNDArray cummin (Array<octave_idx_type>& index, int dim = -1) const;
-
-  ComplexNDArray diff (octave_idx_type order = 1, int dim = -1) const;
+  OCTAVE_API ComplexNDArray cummax (int dim = -1) const;
+  OCTAVE_API ComplexNDArray
+  cummax (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API ComplexNDArray cummin (int dim = -1) const;
+  OCTAVE_API ComplexNDArray
+  cummin (Array<octave_idx_type>& index, int dim = -1) const;
 
-  ComplexNDArray& insert (const NDArray& a,
-                          octave_idx_type r, octave_idx_type c);
-  ComplexNDArray& insert (const ComplexNDArray& a,
-                          octave_idx_type r, octave_idx_type c);
-  ComplexNDArray& insert (const ComplexNDArray& a,
-                          const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API ComplexNDArray
+  diff (octave_idx_type order = 1, int dim = -1) const;
 
-  NDArray abs (void) const;
-  boolNDArray isnan (void) const;
-  boolNDArray isinf (void) const;
-  boolNDArray isfinite (void) const;
+  OCTAVE_API ComplexNDArray&
+  insert (const NDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexNDArray&
+  insert (const ComplexNDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API ComplexNDArray&
+  insert (const ComplexNDArray& a, const Array<octave_idx_type>& ra_idx);
+
+  OCTAVE_API NDArray abs (void) const;
+  OCTAVE_API boolNDArray isnan (void) const;
+  OCTAVE_API boolNDArray isinf (void) const;
+  OCTAVE_API boolNDArray isfinite (void) const;
 
   friend OCTAVE_API ComplexNDArray conj (const ComplexNDArray& a);
 
-  ComplexNDArray fourier (int dim = 1) const;
-  ComplexNDArray ifourier (int dim = 1) const;
+  OCTAVE_API ComplexNDArray fourier (int dim = 1) const;
+  OCTAVE_API ComplexNDArray ifourier (int dim = 1) const;
 
-  ComplexNDArray fourier2d (void) const;
-  ComplexNDArray ifourier2d (void) const;
+  OCTAVE_API ComplexNDArray fourier2d (void) const;
+  OCTAVE_API ComplexNDArray ifourier2d (void) const;
 
-  ComplexNDArray fourierNd (void) const;
-  ComplexNDArray ifourierNd (void) const;
+  OCTAVE_API ComplexNDArray fourierNd (void) const;
+  OCTAVE_API ComplexNDArray ifourierNd (void) const;
 
   ComplexNDArray squeeze (void) const { return MArray<Complex>::squeeze (); }
 
-  static void increment_index (Array<octave_idx_type>& ra_idx,
-                               const dim_vector& dimensions,
-                               int start_dimension = 0);
+  static OCTAVE_API void
+  increment_index (Array<octave_idx_type>& ra_idx,
+                   const dim_vector& dimensions,
+                   int start_dimension = 0);
 
-  static octave_idx_type compute_index (Array<octave_idx_type>& ra_idx,
-                                        const dim_vector& dimensions);
+  static OCTAVE_API octave_idx_type
+  compute_index (Array<octave_idx_type>& ra_idx,
+                 const dim_vector& dimensions);
 
   // i/o
 
@@ -142,9 +149,9 @@
   //  bool all_elements_are_real (void) const;
   //  bool all_integers (double& max_val, double& min_val) const;
 
-  ComplexNDArray diag (octave_idx_type k = 0) const;
+  OCTAVE_API ComplexNDArray diag (octave_idx_type k = 0) const;
 
-  ComplexNDArray diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API ComplexNDArray diag (octave_idx_type m, octave_idx_type n) const;
 
   ComplexNDArray& changesign (void)
   {
--- a/liboctave/array/CRowVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/CRowVector.h	Mon May 10 23:27:38 2021 +0200
@@ -66,57 +66,63 @@
     return *this;
   }
 
-  bool operator == (const ComplexRowVector& a) const;
-  bool operator != (const ComplexRowVector& a) const;
+  OCTAVE_API bool operator == (const ComplexRowVector& a) const;
+  OCTAVE_API bool operator != (const ComplexRowVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  ComplexRowVector& insert (const RowVector& a, octave_idx_type c);
-  ComplexRowVector& insert (const ComplexRowVector& a, octave_idx_type c);
+  OCTAVE_API ComplexRowVector&
+  insert (const RowVector& a, octave_idx_type c);
+  OCTAVE_API ComplexRowVector&
+  insert (const ComplexRowVector& a, octave_idx_type c);
 
-  ComplexRowVector& fill (double val);
-  ComplexRowVector& fill (const Complex& val);
-  ComplexRowVector& fill (double val, octave_idx_type c1, octave_idx_type c2);
-  ComplexRowVector& fill (const Complex& val,
-                          octave_idx_type c1, octave_idx_type c2);
+  OCTAVE_API ComplexRowVector& fill (double val);
+  OCTAVE_API ComplexRowVector& fill (const Complex& val);
+  OCTAVE_API ComplexRowVector&
+  fill (double val, octave_idx_type c1, octave_idx_type c2);
+  OCTAVE_API ComplexRowVector&
+  fill (const Complex& val, octave_idx_type c1, octave_idx_type c2);
 
-  ComplexRowVector append (const RowVector& a) const;
-  ComplexRowVector append (const ComplexRowVector& a) const;
+  OCTAVE_API ComplexRowVector append (const RowVector& a) const;
+  OCTAVE_API ComplexRowVector append (const ComplexRowVector& a) const;
 
-  ComplexColumnVector hermitian (void) const;
-  ComplexColumnVector transpose (void) const;
+  OCTAVE_API ComplexColumnVector hermitian (void) const;
+  OCTAVE_API ComplexColumnVector transpose (void) const;
 
-  friend ComplexRowVector conj (const ComplexRowVector& a);
+  friend OCTAVE_API ComplexRowVector conj (const ComplexRowVector& a);
 
   // resize is the destructive equivalent for this one
 
-  ComplexRowVector extract (octave_idx_type c1, octave_idx_type c2) const;
+  OCTAVE_API ComplexRowVector
+  extract (octave_idx_type c1, octave_idx_type c2) const;
 
-  ComplexRowVector extract_n (octave_idx_type c1, octave_idx_type n) const;
+  OCTAVE_API ComplexRowVector
+  extract_n (octave_idx_type c1, octave_idx_type n) const;
 
   // row vector by row vector -> row vector operations
 
-  ComplexRowVector& operator += (const RowVector& a);
-  ComplexRowVector& operator -= (const RowVector& a);
+  OCTAVE_API ComplexRowVector& operator += (const RowVector& a);
+  OCTAVE_API ComplexRowVector& operator -= (const RowVector& a);
 
   // row vector by matrix -> row vector
 
-  friend ComplexRowVector operator * (const ComplexRowVector& a,
-                                      const ComplexMatrix& b);
+  friend OCTAVE_API ComplexRowVector
+  operator * (const ComplexRowVector& a, const ComplexMatrix& b);
 
-  friend ComplexRowVector operator * (const RowVector& a,
-                                      const ComplexMatrix& b);
+  friend OCTAVE_API ComplexRowVector
+  operator * (const RowVector& a, const ComplexMatrix& b);
 
   // other operations
 
-  Complex min (void) const;
-  Complex max (void) const;
+  OCTAVE_API Complex min (void) const;
+  OCTAVE_API Complex max (void) const;
 
   // i/o
 
-  friend std::ostream& operator << (std::ostream& os,
-                                    const ComplexRowVector& a);
-  friend std::istream& operator >> (std::istream& is, ComplexRowVector& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const ComplexRowVector& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, ComplexRowVector& a);
 
   void resize (octave_idx_type n, const Complex& rfv = Complex (0))
   {
@@ -130,10 +136,10 @@
 
 // row vector by column vector -> scalar
 
-Complex OCTAVE_API operator * (const ComplexRowVector& a,
+OCTAVE_API Complex operator * (const ComplexRowVector& a,
                                const ColumnVector& b);
 
-Complex OCTAVE_API operator * (const ComplexRowVector& a,
+OCTAVE_API Complex operator * (const ComplexRowVector& a,
                                const ComplexColumnVector& b);
 
 // other operations
--- a/liboctave/array/CSparse.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/CSparse.h	Mon May 10 23:27:38 2021 +0200
@@ -94,11 +94,11 @@
                        octave_idx_type nzm = -1)
     : MSparse<Complex> (a, r, c, nr, nc, sum_terms, nzm) { }
 
-  explicit SparseComplexMatrix (const SparseMatrix& a);
+  explicit OCTAVE_API SparseComplexMatrix (const SparseMatrix& a);
 
-  explicit SparseComplexMatrix (const SparseBoolMatrix& a);
+  explicit OCTAVE_API SparseComplexMatrix (const SparseBoolMatrix& a);
 
-  explicit SparseComplexMatrix (const ComplexDiagMatrix& a);
+  explicit OCTAVE_API SparseComplexMatrix (const ComplexDiagMatrix& a);
 
   SparseComplexMatrix (octave_idx_type r, octave_idx_type c,
                        octave_idx_type num_nz)
@@ -110,43 +110,45 @@
     return *this;
   }
 
-  bool operator == (const SparseComplexMatrix& a) const;
-  bool operator != (const SparseComplexMatrix& a) const;
+  OCTAVE_API bool operator == (const SparseComplexMatrix& a) const;
+  OCTAVE_API bool operator != (const SparseComplexMatrix& a) const;
 
-  bool ishermitian (void) const;
+  OCTAVE_API bool ishermitian (void) const;
 
-  SparseComplexMatrix max (int dim = -1) const;
-  SparseComplexMatrix max (Array<octave_idx_type>& index, int dim = -1) const;
-  SparseComplexMatrix min (int dim = -1) const;
-  SparseComplexMatrix min (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix max (int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix
+  max (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix min (int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix
+  min (Array<octave_idx_type>& index, int dim = -1) const;
 
-  SparseComplexMatrix& insert (const SparseComplexMatrix& a,
-                               octave_idx_type r, octave_idx_type c);
-  SparseComplexMatrix& insert (const SparseMatrix& a,
-                               octave_idx_type r, octave_idx_type c);
-  SparseComplexMatrix& insert (const SparseComplexMatrix& a,
-                               const Array<octave_idx_type>& indx);
-  SparseComplexMatrix& insert (const SparseMatrix& a,
-                               const Array<octave_idx_type>& indx);
+  OCTAVE_API SparseComplexMatrix&
+  insert (const SparseComplexMatrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API SparseComplexMatrix&
+  insert (const SparseMatrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API SparseComplexMatrix&
+  insert (const SparseComplexMatrix& a, const Array<octave_idx_type>& indx);
+  OCTAVE_API SparseComplexMatrix&
+  insert (const SparseMatrix& a, const Array<octave_idx_type>& indx);
 
-  SparseComplexMatrix concat (const SparseComplexMatrix& rb,
-                              const Array<octave_idx_type>& ra_idx);
-  SparseComplexMatrix concat (const SparseMatrix& rb,
-                              const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API SparseComplexMatrix
+  concat (const SparseComplexMatrix& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API SparseComplexMatrix
+  concat (const SparseMatrix& rb, const Array<octave_idx_type>& ra_idx);
 
-  ComplexMatrix matrix_value (void) const;
+  OCTAVE_API ComplexMatrix matrix_value (void) const;
 
-  SparseComplexMatrix hermitian (void) const;  // complex conjugate transpose
+  OCTAVE_API SparseComplexMatrix hermitian (void) const;  // complex conjugate transpose
   SparseComplexMatrix transpose (void) const
   { return MSparse<Complex>::transpose (); }
 
-  friend SparseComplexMatrix conj (const SparseComplexMatrix& a);
+  friend OCTAVE_API SparseComplexMatrix conj (const SparseComplexMatrix& a);
 
   // extract row or column i.
 
-  ComplexRowVector row (octave_idx_type i) const;
+  OCTAVE_API ComplexRowVector row (octave_idx_type i) const;
 
-  ComplexColumnVector column (octave_idx_type i) const;
+  OCTAVE_API ComplexColumnVector column (octave_idx_type i) const;
 
 private:
   SparseComplexMatrix dinverse (MatrixType& mattype, octave_idx_type& info,
@@ -158,18 +160,19 @@
                                 const bool calccond = true) const;
 
 public:
-  SparseComplexMatrix inverse (void) const;
-  SparseComplexMatrix inverse (MatrixType& mattype) const;
-  SparseComplexMatrix inverse (MatrixType& mattype,
-                               octave_idx_type& info) const;
-  SparseComplexMatrix inverse (MatrixType& mattype, octave_idx_type& info,
-                               double& rcond, bool force = false,
-                               bool calc_cond = true) const;
+  OCTAVE_API SparseComplexMatrix inverse (void) const;
+  OCTAVE_API SparseComplexMatrix inverse (MatrixType& mattype) const;
+  OCTAVE_API SparseComplexMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info) const;
+  OCTAVE_API SparseComplexMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info, double& rcond,
+           bool force = false, bool calc_cond = true) const;
 
-  ComplexDET determinant (void) const;
-  ComplexDET determinant (octave_idx_type& info) const;
-  ComplexDET determinant (octave_idx_type& info, double& rcond,
-                          bool calc_cond = true) const;
+  OCTAVE_API ComplexDET determinant (void) const;
+  OCTAVE_API ComplexDET determinant (octave_idx_type& info) const;
+  OCTAVE_API ComplexDET
+  determinant (octave_idx_type& info, double& rcond,
+               bool calc_cond = true) const;
 
 private:
   // Diagonal matrix solvers
@@ -304,242 +307,266 @@
 
 public:
   // Generic interface to solver with no probing of type
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b) const;
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b,
-                       octave_idx_type& info) const;
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b,
-                       octave_idx_type& info, double& rcond) const;
-  ComplexMatrix solve (MatrixType& mattype, const Matrix& b,
-                       octave_idx_type& info,
-                       double& rcond, solve_singularity_handler sing_handler,
-                       bool singular_fallback = true) const;
+  OCTAVE_API ComplexMatrix solve (MatrixType& mattype, const Matrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
+         double& rcond) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
+         double& rcond, solve_singularity_handler sing_handler,
+         bool singular_fallback = true) const;
 
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info, double& rcond) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info, double& rcond,
-                       solve_singularity_handler sing_handler,
-                       bool singular_fallback = true) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b,
+         octave_idx_type& info, double& rcond) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b,
+         octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler,
+         bool singular_fallback = true) const;
 
-  SparseComplexMatrix solve (MatrixType& mattype, const SparseMatrix& b) const;
-  SparseComplexMatrix solve (MatrixType& mattype, const SparseMatrix& b,
-                             octave_idx_type& info) const;
-  SparseComplexMatrix solve (MatrixType& mattype, const SparseMatrix& b,
-                             octave_idx_type& info, double& rcond) const;
-  SparseComplexMatrix solve (MatrixType& mattype, const SparseMatrix& b,
-                             octave_idx_type& info, double& rcond,
-                             solve_singularity_handler sing_handler,
-                             bool singular_fallback = true) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseMatrix& b) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseMatrix& b, octave_idx_type& info,
+         double& rcond) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseMatrix& b, octave_idx_type& info,
+         double& rcond, solve_singularity_handler sing_handler,
+         bool singular_fallback = true) const;
 
-  SparseComplexMatrix solve (MatrixType& mattype,
-                             const SparseComplexMatrix& b) const;
-  SparseComplexMatrix solve (MatrixType& mattype, const SparseComplexMatrix& b,
-                             octave_idx_type& info) const;
-  SparseComplexMatrix solve (MatrixType& mattype, const SparseComplexMatrix& b,
-                             octave_idx_type& info, double& rcond) const;
-  SparseComplexMatrix solve (MatrixType& mattype, const SparseComplexMatrix& b,
-                             octave_idx_type& info, double& rcond,
-                             solve_singularity_handler sing_handler,
-                             bool singular_fallback = true) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseComplexMatrix& b) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseComplexMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseComplexMatrix& b,
+         octave_idx_type& info, double& rcond) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (MatrixType& mattype, const SparseComplexMatrix& b,
+         octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler,
+         bool singular_fallback = true) const;
 
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                             octave_idx_type& info, double& rcond) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                             octave_idx_type& info, double& rcond,
-                             solve_singularity_handler sing_handler) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b,
+         octave_idx_type& info, double& rcond) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b,
+         octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
-  ComplexColumnVector solve (MatrixType& mattype,
-                             const ComplexColumnVector& b) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcond) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcond,
-                             solve_singularity_handler sing_handler) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info, double& rcond) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
   // Generic interface to solver with probing of type
-  ComplexMatrix solve (const Matrix& b) const;
-  ComplexMatrix solve (const Matrix& b, octave_idx_type& info) const;
-  ComplexMatrix solve (const Matrix& b, octave_idx_type& info,
-                       double& rcond) const;
-  ComplexMatrix solve (const Matrix& b, octave_idx_type& info, double& rcond,
-                       solve_singularity_handler sing_handler) const;
+  OCTAVE_API ComplexMatrix solve (const Matrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (const Matrix& b, octave_idx_type& info, double& rcond) const;
+  OCTAVE_API ComplexMatrix
+  solve (const Matrix& b, octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
-  ComplexMatrix solve (const ComplexMatrix& b) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info,
-                       double& rcond) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info,
-                       double& rcond,
-                       solve_singularity_handler sing_handler) const;
+  OCTAVE_API ComplexMatrix solve (const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info, double& rcond) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
-  SparseComplexMatrix solve (const SparseMatrix& b) const;
-  SparseComplexMatrix solve (const SparseMatrix& b,
-                             octave_idx_type& info) const;
-  SparseComplexMatrix solve (const SparseMatrix& b, octave_idx_type& info,
-                             double& rcond) const;
-  SparseComplexMatrix solve (const SparseMatrix& b, octave_idx_type& info,
-                             double& rcond,
-                             solve_singularity_handler sing_handler) const;
+  OCTAVE_API SparseComplexMatrix solve (const SparseMatrix& b) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (const SparseMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (const SparseMatrix& b, octave_idx_type& info, double& rcond) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (const SparseMatrix& b, octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
-  SparseComplexMatrix solve (const SparseComplexMatrix& b) const;
-  SparseComplexMatrix solve (const SparseComplexMatrix& b,
-                             octave_idx_type& info) const;
-  SparseComplexMatrix solve (const SparseComplexMatrix& b,
-                             octave_idx_type& info, double& rcond) const;
-  SparseComplexMatrix solve (const SparseComplexMatrix& b,
-                             octave_idx_type& info, double& rcond,
-                             solve_singularity_handler sing_handler) const;
+  OCTAVE_API SparseComplexMatrix solve (const SparseComplexMatrix& b) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (const SparseComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (const SparseComplexMatrix& b, octave_idx_type& info,
+         double& rcond) const;
+  OCTAVE_API SparseComplexMatrix
+  solve (const SparseComplexMatrix& b, octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
-  ComplexColumnVector solve (const ColumnVector& b) const;
-  ComplexColumnVector solve (const ColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info,
-                             double& rcond) const;
-  ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info,
-                             double& rcond,
-                             solve_singularity_handler sing_handler) const;
+  OCTAVE_API ComplexColumnVector solve (const ColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info, double& rcond) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
-  ComplexColumnVector solve (const ComplexColumnVector& b) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcond) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcond,
-                             solve_singularity_handler sing_handler) const;
+  OCTAVE_API ComplexColumnVector solve (const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info,
+         double& rcond) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info, double& rcond,
+         solve_singularity_handler sing_handler) const;
 
-  SparseComplexMatrix squeeze (void) const;
+  OCTAVE_API SparseComplexMatrix squeeze (void) const;
 
-  SparseComplexMatrix reshape (const dim_vector& new_dims) const;
+  OCTAVE_API SparseComplexMatrix reshape (const dim_vector& new_dims) const;
 
-  SparseComplexMatrix permute (const Array<octave_idx_type>& vec,
-                               bool inv = false) const;
+  OCTAVE_API SparseComplexMatrix
+  permute (const Array<octave_idx_type>& vec, bool inv = false) const;
 
-  SparseComplexMatrix ipermute (const Array<octave_idx_type>& vec) const;
+  OCTAVE_API SparseComplexMatrix
+  ipermute (const Array<octave_idx_type>& vec) const;
 
-  bool any_element_is_nan (void) const;
-  bool any_element_is_inf_or_nan (void) const;
-  bool all_elements_are_real (void) const;
-  bool all_integers (double& max_val, double& min_val) const;
-  bool too_large_for_float (void) const;
+  OCTAVE_API bool any_element_is_nan (void) const;
+  OCTAVE_API bool any_element_is_inf_or_nan (void) const;
+  OCTAVE_API bool all_elements_are_real (void) const;
+  OCTAVE_API bool all_integers (double& max_val, double& min_val) const;
+  OCTAVE_API bool too_large_for_float (void) const;
 
-  SparseBoolMatrix operator ! (void) const;
+  OCTAVE_API SparseBoolMatrix operator ! (void) const;
 
-  SparseBoolMatrix all (int dim = -1) const;
-  SparseBoolMatrix any (int dim = -1) const;
+  OCTAVE_API SparseBoolMatrix all (int dim = -1) const;
+  OCTAVE_API SparseBoolMatrix any (int dim = -1) const;
 
-  SparseComplexMatrix cumprod (int dim = -1) const;
-  SparseComplexMatrix cumsum (int dim = -1) const;
-  SparseComplexMatrix prod (int dim = -1) const;
-  SparseComplexMatrix sum (int dim = -1) const;
-  SparseComplexMatrix sumsq (int dim = -1) const;
-  SparseMatrix abs (void) const;
+  OCTAVE_API SparseComplexMatrix cumprod (int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix cumsum (int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix prod (int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix sum (int dim = -1) const;
+  OCTAVE_API SparseComplexMatrix sumsq (int dim = -1) const;
+  OCTAVE_API SparseMatrix abs (void) const;
 
-  SparseComplexMatrix diag (octave_idx_type k = 0) const;
+  OCTAVE_API SparseComplexMatrix diag (octave_idx_type k = 0) const;
 
   // i/o
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const SparseComplexMatrix& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is,
-                                               SparseComplexMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const SparseComplexMatrix& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, SparseComplexMatrix& a);
 };
 
-extern OCTAVE_API SparseComplexMatrix operator * (const SparseMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&,
-                                                  const SparseMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&,
-                                                  const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const SparseMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const SparseComplexMatrix&, const SparseMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const SparseComplexMatrix&, const SparseComplexMatrix&);
 
-extern OCTAVE_API ComplexMatrix operator * (const Matrix&,
-                                            const SparseComplexMatrix&);
-extern OCTAVE_API ComplexMatrix operator * (const ComplexMatrix&,
-                                            const SparseMatrix&);
-extern OCTAVE_API ComplexMatrix operator * (const ComplexMatrix&,
-                                            const SparseComplexMatrix&);
-extern OCTAVE_API ComplexMatrix mul_trans (const ComplexMatrix&,
-                                           const SparseComplexMatrix&);
-extern OCTAVE_API ComplexMatrix mul_herm (const ComplexMatrix&,
-                                          const SparseComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+operator * (const Matrix&, const SparseComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+operator * (const ComplexMatrix&, const SparseMatrix&);
+extern OCTAVE_API ComplexMatrix
+operator * (const ComplexMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+mul_trans (const ComplexMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+mul_herm (const ComplexMatrix&, const SparseComplexMatrix&);
 
-extern OCTAVE_API ComplexMatrix operator * (const SparseMatrix&,
-                                            const ComplexMatrix&);
-extern OCTAVE_API ComplexMatrix operator * (const SparseComplexMatrix&,
-                                            const Matrix&);
-extern OCTAVE_API ComplexMatrix operator * (const SparseComplexMatrix&,
-                                            const ComplexMatrix&);
-extern OCTAVE_API ComplexMatrix trans_mul (const SparseComplexMatrix&,
-                                           const ComplexMatrix&);
-extern OCTAVE_API ComplexMatrix herm_mul (const SparseComplexMatrix&,
-                                          const ComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+operator * (const SparseMatrix&, const ComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+operator * (const SparseComplexMatrix&, const Matrix&);
+extern OCTAVE_API ComplexMatrix
+operator * (const SparseComplexMatrix&, const ComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+trans_mul (const SparseComplexMatrix&, const ComplexMatrix&);
+extern OCTAVE_API ComplexMatrix
+herm_mul (const SparseComplexMatrix&, const ComplexMatrix&);
 
-extern OCTAVE_API SparseComplexMatrix operator * (const DiagMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&,
-                                                  const DiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const DiagMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const SparseComplexMatrix&, const DiagMatrix&);
 
-extern OCTAVE_API SparseComplexMatrix operator * (const ComplexDiagMatrix&,
-                                                  const SparseMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator * (const SparseMatrix&,
-                                                  const ComplexDiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const ComplexDiagMatrix&, const SparseMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const SparseMatrix&, const ComplexDiagMatrix&);
 
-extern OCTAVE_API SparseComplexMatrix operator * (const ComplexDiagMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&,
-                                                  const ComplexDiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const ComplexDiagMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const SparseComplexMatrix&, const ComplexDiagMatrix&);
 
-extern OCTAVE_API SparseComplexMatrix operator + (const ComplexDiagMatrix&,
-                                                  const SparseMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator + (const DiagMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator + (const ComplexDiagMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator + (const SparseMatrix&,
-                                                  const ComplexDiagMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator + (const SparseComplexMatrix&,
-                                                  const DiagMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator + (const SparseComplexMatrix&,
-                                                  const ComplexDiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator + (const ComplexDiagMatrix&, const SparseMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator + (const DiagMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator + (const ComplexDiagMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator + (const SparseMatrix&, const ComplexDiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator + (const SparseComplexMatrix&, const DiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator + (const SparseComplexMatrix&, const ComplexDiagMatrix&);
 
-extern OCTAVE_API SparseComplexMatrix operator - (const ComplexDiagMatrix&,
-                                                  const SparseMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator - (const DiagMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator - (const ComplexDiagMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator - (const SparseMatrix&,
-                                                  const ComplexDiagMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator - (const SparseComplexMatrix&,
-                                                  const DiagMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator - (const SparseComplexMatrix&,
-                                                  const ComplexDiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator - (const ComplexDiagMatrix&, const SparseMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator - (const DiagMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator - (const ComplexDiagMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator - (const SparseMatrix&, const ComplexDiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator - (const SparseComplexMatrix&, const DiagMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator - (const SparseComplexMatrix&, const ComplexDiagMatrix&);
 
-extern OCTAVE_API SparseComplexMatrix operator * (const PermMatrix&,
-                                                  const SparseComplexMatrix&);
-extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&,
-                                                  const PermMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const PermMatrix&, const SparseComplexMatrix&);
+extern OCTAVE_API SparseComplexMatrix
+operator * (const SparseComplexMatrix&, const PermMatrix&);
 
-extern OCTAVE_API SparseComplexMatrix min (const Complex& c,
-                                           const SparseComplexMatrix& m);
-extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& m,
-                                           const Complex& c);
-extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& a,
-                                           const SparseComplexMatrix& b);
+extern OCTAVE_API SparseComplexMatrix
+min (const Complex& c, const SparseComplexMatrix& m);
+extern OCTAVE_API SparseComplexMatrix
+min (const SparseComplexMatrix& m, const Complex& c);
+extern OCTAVE_API SparseComplexMatrix
+min (const SparseComplexMatrix& a, const SparseComplexMatrix& b);
 
-extern OCTAVE_API SparseComplexMatrix max (const Complex& c,
-                                           const SparseComplexMatrix& m);
-extern OCTAVE_API SparseComplexMatrix max (const SparseComplexMatrix& m,
-                                           const Complex& c);
-extern OCTAVE_API SparseComplexMatrix max (const SparseComplexMatrix& a,
-                                           const SparseComplexMatrix& b);
+extern OCTAVE_API SparseComplexMatrix
+max (const Complex& c, const SparseComplexMatrix& m);
+extern OCTAVE_API SparseComplexMatrix
+max (const SparseComplexMatrix& m, const Complex& c);
+extern OCTAVE_API SparseComplexMatrix
+max (const SparseComplexMatrix& a, const SparseComplexMatrix& b);
 
 SPARSE_SMS_CMP_OP_DECLS (SparseComplexMatrix, Complex, OCTAVE_API)
 SPARSE_SMS_BOOL_OP_DECLS (SparseComplexMatrix, Complex, OCTAVE_API)
--- a/liboctave/array/DiagArray2.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/DiagArray2.h	Mon May 10 23:27:38 2021 +0200
@@ -104,7 +104,7 @@
 
   int ndims (void) const { return 2; }
 
-  Array<T> extract_diag (octave_idx_type k = 0) const;
+  OCTAVE_API Array<T> extract_diag (octave_idx_type k = 0) const;
 
   DiagArray2<T> build_diag_matrix () const
   {
@@ -119,7 +119,7 @@
     return (r == c) ? Array<T>::elem (r) : T (0);
   }
 
-  T& elem (octave_idx_type r, octave_idx_type c);
+  OCTAVE_API T& elem (octave_idx_type r, octave_idx_type c);
 
   T dgelem (octave_idx_type i) const
   { return Array<T>::elem (i); }
@@ -155,16 +155,16 @@
   T dgxelem (octave_idx_type i) const
   { return Array<T>::xelem (i); }
 
-  void resize (octave_idx_type n, octave_idx_type m, const T& rfv);
+  OCTAVE_API void resize (octave_idx_type n, octave_idx_type m, const T& rfv);
   void resize (octave_idx_type n, octave_idx_type m)
   {
     resize (n, m, Array<T>::resize_fill_value ());
   }
 
-  DiagArray2<T> transpose (void) const;
-  DiagArray2<T> hermitian (T (*fcn) (const T&) = nullptr) const;
+  OCTAVE_API DiagArray2<T> transpose (void) const;
+  OCTAVE_API DiagArray2<T> hermitian (T (*fcn) (const T&) = nullptr) const;
 
-  Array<T> array_value (void) const;
+  OCTAVE_API Array<T> array_value (void) const;
 
   const T * data (void) const { return Array<T>::data (); }
 
--- a/liboctave/array/MArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/MArray.h	Mon May 10 23:27:38 2021 +0200
@@ -112,17 +112,22 @@
 
   //! Performs indexed accumulative addition.
   //@{
-  void idx_add (const octave::idx_vector& idx, T val);
-  void idx_add (const octave::idx_vector& idx, const MArray<T>& vals);
+  OCTAVE_API void idx_add (const octave::idx_vector& idx, T val);
+  OCTAVE_API void
+  idx_add (const octave::idx_vector& idx, const MArray<T>& vals);
   //@}
 
-  void idx_min (const octave::idx_vector& idx, const MArray<T>& vals);
+  OCTAVE_API void
+  idx_min (const octave::idx_vector& idx, const MArray<T>& vals);
 
-  void idx_max (const octave::idx_vector& idx, const MArray<T>& vals);
+  OCTAVE_API void
+  idx_max (const octave::idx_vector& idx, const MArray<T>& vals);
 
-  void idx_add_nd (const octave::idx_vector& idx, const MArray<T>& vals, int dim = -1);
+  OCTAVE_API void
+  idx_add_nd (const octave::idx_vector& idx, const MArray<T>& vals,
+              int dim = -1);
 
-  void changesign (void);
+  OCTAVE_API void changesign (void);
 };
 
 // Define all the MArray forwarding functions for return type R and
--- a/liboctave/array/MDiagArray2.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/MDiagArray2.h	Mon May 10 23:27:38 2021 +0200
@@ -107,22 +107,25 @@
   MDiagArray2<T> hermitian (T (*fcn) (const T&) = nullptr) const
   { return DiagArray2<T>::hermitian (fcn); }
 
-  bool is_multiple_of_identity (T val) const;
+  OCTAVE_API bool is_multiple_of_identity (T val) const;
 
   // Currently, the OPS functions don't need to be friends, but that
   // may change.
 
-  friend MDiagArray2<T> operator + <> (const MDiagArray2<T>&);
-  friend MDiagArray2<T> operator - <> (const MDiagArray2<T>&);
-  friend MDiagArray2<T> operator * <> (const MDiagArray2<T>&, const T&);
-  friend MDiagArray2<T> operator / <> (const MDiagArray2<T>&, const T&);
-  friend MDiagArray2<T> operator * <> (const T&, const MDiagArray2<T>&);
-  friend MDiagArray2<T> operator + <> (const MDiagArray2<T>&,
-                                       const MDiagArray2<T>&);
-  friend MDiagArray2<T> operator - <> (const MDiagArray2<T>&,
-                                       const MDiagArray2<T>&);
-  friend MDiagArray2<T> product <> (const MDiagArray2<T>&,
-                                    const MDiagArray2<T>&);
+  friend OCTAVE_API MDiagArray2<T> operator + <> (const MDiagArray2<T>&);
+  friend OCTAVE_API MDiagArray2<T> operator - <> (const MDiagArray2<T>&);
+  friend OCTAVE_API MDiagArray2<T>
+  operator * <> (const MDiagArray2<T>&, const T&);
+  friend OCTAVE_API MDiagArray2<T>
+  operator / <> (const MDiagArray2<T>&, const T&);
+  friend OCTAVE_API MDiagArray2<T>
+  operator * <> (const T&, const MDiagArray2<T>&);
+  friend OCTAVE_API MDiagArray2<T>
+  operator + <> (const MDiagArray2<T>&, const MDiagArray2<T>&);
+  friend OCTAVE_API MDiagArray2<T>
+  operator - <> (const MDiagArray2<T>&, const MDiagArray2<T>&);
+  friend OCTAVE_API MDiagArray2<T>
+  product <> (const MDiagArray2<T>&, const MDiagArray2<T>&);
 
 };
 
--- a/liboctave/array/PermMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/PermMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -46,11 +46,13 @@
 
   ~PermMatrix (void) = default;
 
-  PermMatrix (octave_idx_type n);
+  OCTAVE_API PermMatrix (octave_idx_type n);
 
-  PermMatrix (const Array<octave_idx_type>& p, bool colp, bool check = true);
+  OCTAVE_API PermMatrix (const Array<octave_idx_type>& p, bool colp,
+                         bool check = true);
 
-  PermMatrix (const octave::idx_vector& idx, bool colp, octave_idx_type n = 0);
+  OCTAVE_API PermMatrix (const octave::idx_vector& idx, bool colp,
+                         octave_idx_type n = 0);
 
   octave_idx_type dim1 (void) const
   { return Array<octave_idx_type>::numel (); }
@@ -97,14 +99,14 @@
   }
 
   // These are, in fact, super-fast.
-  PermMatrix transpose (void) const;
-  PermMatrix inverse (void) const;
+  OCTAVE_API PermMatrix transpose (void) const;
+  OCTAVE_API PermMatrix inverse (void) const;
 
   // Determinant, i.e., the sign of permutation.
-  octave_idx_type determinant (void) const;
+  OCTAVE_API octave_idx_type determinant (void) const;
 
   // Efficient integer power of a permutation.
-  PermMatrix power (octave_idx_type n) const;
+  OCTAVE_API PermMatrix power (octave_idx_type n) const;
 
   bool is_col_perm (void) const { return true; }
   bool is_row_perm (void) const { return false; }
@@ -112,7 +114,7 @@
   void print_info (std::ostream& os, const std::string& prefix) const
   { Array<octave_idx_type>::print_info (os, prefix); }
 
-  static PermMatrix eye (octave_idx_type n);
+  static OCTAVE_API PermMatrix eye (octave_idx_type n);
 
 private:
 
@@ -124,8 +126,7 @@
 };
 
 // Multiplying permutations together.
-PermMatrix
-OCTAVE_API
+OCTAVE_API PermMatrix
 operator * (const PermMatrix& a, const PermMatrix& b);
 
 #endif
--- a/liboctave/array/boolMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/boolMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -60,29 +60,30 @@
 
   boolMatrix (const Array<bool>& a) : boolNDArray (a.as_matrix ()) { }
 
-  bool operator == (const boolMatrix& a) const;
-  bool operator != (const boolMatrix& a) const;
+  OCTAVE_API bool operator == (const boolMatrix& a) const;
+  OCTAVE_API bool operator != (const boolMatrix& a) const;
 
   boolMatrix transpose (void) const { return Array<bool>::transpose (); }
 
   // destructive insert/delete/reorder operations
 
-  boolMatrix& insert (const boolMatrix& a,
-                      octave_idx_type r, octave_idx_type c);
+  OCTAVE_API boolMatrix&
+  insert (const boolMatrix& a, octave_idx_type r, octave_idx_type c);
 
   // unary operations
 
-  boolMatrix operator ! (void) const;
+  OCTAVE_API boolMatrix operator ! (void) const;
 
   // other operations
 
-  boolMatrix diag (octave_idx_type k = 0) const;
+  OCTAVE_API boolMatrix diag (octave_idx_type k = 0) const;
 
 #if 0
   // i/o
 
-  friend std::ostream& operator << (std::ostream& os, const Matrix& a);
-  friend std::istream& operator >> (std::istream& is, Matrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const Matrix& a);
+  friend OCTAVE_API std::istream& operator >> (std::istream& is, Matrix& a);
 #endif
 
   void resize (octave_idx_type nr, octave_idx_type nc, bool rfv = false)
--- a/liboctave/array/boolNDArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/boolNDArray.h	Mon May 10 23:27:38 2021 +0200
@@ -60,33 +60,34 @@
 
   // unary operations
 
-  boolNDArray operator ! (void) const;
+  OCTAVE_API boolNDArray operator ! (void) const;
 
-  boolNDArray& invert (void);
+  OCTAVE_API boolNDArray& invert (void);
 
   bool any_element_is_nan (void) const { return false; }
 
   // FIXME: this is not quite the right thing.
 
-  boolNDArray all (int dim = -1) const;
-  boolNDArray any (int dim = -1) const;
+  OCTAVE_API boolNDArray all (int dim = -1) const;
+  OCTAVE_API boolNDArray any (int dim = -1) const;
 
-  boolNDArray concat (const boolNDArray& rb,
-                      const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API boolNDArray
+  concat (const boolNDArray& rb, const Array<octave_idx_type>& ra_idx);
 
-  boolNDArray& insert (const boolNDArray& a, octave_idx_type r,
-                       octave_idx_type c);
-  boolNDArray& insert (const boolNDArray& a,
-                       const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API boolNDArray&
+  insert (const boolNDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API boolNDArray&
+  insert (const boolNDArray& a, const Array<octave_idx_type>& ra_idx);
 
   boolNDArray squeeze (void) const { return Array<bool>::squeeze (); }
 
-  static void increment_index (Array<octave_idx_type>& ra_idx,
-                               const dim_vector& dimensions,
-                               int start_dimension = 0);
+  static OCTAVE_API void
+  increment_index (Array<octave_idx_type>& ra_idx,
+                   const dim_vector& dimensions, int start_dimension = 0);
 
-  static octave_idx_type compute_index (Array<octave_idx_type>& ra_idx,
-                                        const dim_vector& dimensions);
+  static OCTAVE_API octave_idx_type
+  compute_index (Array<octave_idx_type>& ra_idx,
+                 const dim_vector& dimensions);
 
   // i/o
 
@@ -96,9 +97,9 @@
   //  bool all_elements_are_real (void) const;
   //  bool all_integers (double& max_val, double& min_val) const;
 
-  boolNDArray diag (octave_idx_type k = 0) const;
+  OCTAVE_API boolNDArray diag (octave_idx_type k = 0) const;
 
-  boolNDArray diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API boolNDArray diag (octave_idx_type m, octave_idx_type n) const;
 };
 
 NDND_BOOL_OP_DECLS (boolNDArray, boolNDArray, OCTAVE_API)
--- a/liboctave/array/boolSparse.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/boolSparse.h	Mon May 10 23:27:38 2021 +0200
@@ -85,50 +85,53 @@
     return *this;
   }
 
-  bool operator == (const SparseBoolMatrix& a) const;
-  bool operator != (const SparseBoolMatrix& a) const;
+  OCTAVE_API bool operator == (const SparseBoolMatrix& a) const;
+  OCTAVE_API bool operator != (const SparseBoolMatrix& a) const;
 
   SparseBoolMatrix transpose (void) const
   { return Sparse<bool>::transpose (); }
 
   // destructive insert/delete/reorder operations
 
-  SparseBoolMatrix& insert (const SparseBoolMatrix& a,
-                            octave_idx_type r, octave_idx_type c);
+  OCTAVE_API SparseBoolMatrix&
+  insert (const SparseBoolMatrix& a, octave_idx_type r, octave_idx_type c);
 
-  SparseBoolMatrix& insert (const SparseBoolMatrix& a,
-                            const Array<octave_idx_type>& indx);
+  OCTAVE_API SparseBoolMatrix&
+  insert (const SparseBoolMatrix& a, const Array<octave_idx_type>& indx);
 
-  SparseBoolMatrix concat (const SparseBoolMatrix& rb,
-                           const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API SparseBoolMatrix
+  concat (const SparseBoolMatrix& rb, const Array<octave_idx_type>& ra_idx);
 
-  SparseBoolMatrix diag (octave_idx_type k = 0) const;
+  OCTAVE_API SparseBoolMatrix diag (octave_idx_type k = 0) const;
 
-  boolMatrix matrix_value (void) const;
+  OCTAVE_API boolMatrix matrix_value (void) const;
+
+  OCTAVE_API SparseBoolMatrix squeeze (void) const;
 
-  SparseBoolMatrix squeeze (void) const;
+  OCTAVE_API SparseBoolMatrix
+  index (const octave::idx_vector& i, bool resize_ok) const;
 
-  SparseBoolMatrix index (const octave::idx_vector& i, bool resize_ok) const;
-
-  SparseBoolMatrix index (const octave::idx_vector& i, const octave::idx_vector& j,
-                          bool resize_ok) const;
+  OCTAVE_API SparseBoolMatrix
+  index (const octave::idx_vector& i, const octave::idx_vector& j,
+         bool resize_ok) const;
 
-  SparseBoolMatrix reshape (const dim_vector& new_dims) const;
+  OCTAVE_API SparseBoolMatrix reshape (const dim_vector& new_dims) const;
 
-  SparseBoolMatrix permute (const Array<octave_idx_type>& vec,
-                            bool inv = false) const;
+  OCTAVE_API SparseBoolMatrix
+  permute (const Array<octave_idx_type>& vec, bool inv = false) const;
 
-  SparseBoolMatrix ipermute (const Array<octave_idx_type>& vec) const;
+  OCTAVE_API SparseBoolMatrix
+  ipermute (const Array<octave_idx_type>& vec) const;
 
   // unary operations
 
-  SparseBoolMatrix operator ! (void) const;
+  OCTAVE_API SparseBoolMatrix operator ! (void) const;
 
   // other operations
 
-  SparseBoolMatrix all (int dim = -1) const;
-  SparseBoolMatrix any (int dim = -1) const;
-  SparseMatrix sum (int dim = -1) const;
+  OCTAVE_API SparseBoolMatrix all (int dim = -1) const;
+  OCTAVE_API SparseBoolMatrix any (int dim = -1) const;
+  OCTAVE_API SparseMatrix sum (int dim = -1) const;
 
   // i/o
 
--- a/liboctave/array/chMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/chMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -74,23 +74,26 @@
   charMatrix (const string_vector& s, char fill_value = '\0')
     : charNDArray (s, fill_value) { }
 
-  bool operator == (const charMatrix& a) const;
-  bool operator != (const charMatrix& a) const;
+  OCTAVE_API bool operator == (const charMatrix& a) const;
+  OCTAVE_API bool operator != (const charMatrix& a) const;
 
   charMatrix transpose (void) const { return Array<char>::transpose (); }
 
   // destructive insert/delete/reorder operations
 
-  charMatrix& insert (const char *s, octave_idx_type r, octave_idx_type c);
-  charMatrix& insert (const charMatrix& a,
-                      octave_idx_type r, octave_idx_type c);
+  OCTAVE_API charMatrix&
+  insert (const char *s, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API charMatrix&
+  insert (const charMatrix& a, octave_idx_type r, octave_idx_type c);
 
-  std::string row_as_string (octave_idx_type, bool strip_ws = false) const;
+  OCTAVE_API std::string
+  row_as_string (octave_idx_type, bool strip_ws = false) const;
 
   // resize is the destructive equivalent for this one
 
-  charMatrix extract (octave_idx_type r1, octave_idx_type c1,
-                      octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API charMatrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
   void resize (octave_idx_type nr, octave_idx_type nc, char rfv = 0)
   {
@@ -100,8 +103,9 @@
 #if 0
   // i/o
 
-  friend std::ostream& operator << (std::ostream& os, const Matrix& a);
-  friend std::istream& operator >> (std::istream& is, Matrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const Matrix& a);
+  friend OCTAVE_API std::istream& operator >> (std::istream& is, Matrix& a);
 #endif
 };
 
--- a/liboctave/array/chNDArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/chNDArray.h	Mon May 10 23:27:38 2021 +0200
@@ -52,13 +52,13 @@
 
   charNDArray (const Array<char>& a) : Array<char> (a) { }
 
-  charNDArray (char c);
+  OCTAVE_API charNDArray (char c);
 
-  charNDArray (const char *s);
+  OCTAVE_API charNDArray (const char *s);
 
-  charNDArray (const std::string& s);
+  OCTAVE_API charNDArray (const std::string& s);
 
-  charNDArray (const string_vector& s, char fill_value = '\0');
+  OCTAVE_API charNDArray (const string_vector& s, char fill_value = '\0');
 
   charNDArray& operator = (const charNDArray& a)
   {
@@ -70,39 +70,44 @@
 
   // FIXME: this is not quite the right thing.
 
-  boolNDArray all (int dim = -1) const;
-  boolNDArray any (int dim = -1) const;
-  charNDArray concat (const charNDArray& rb,
-                      const Array<octave_idx_type>& ra_idx);
-  charNDArray concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API boolNDArray all (int dim = -1) const;
+  OCTAVE_API boolNDArray any (int dim = -1) const;
+  OCTAVE_API charNDArray
+  concat (const charNDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API charNDArray
+  concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx);
 
-  charNDArray max (int dim = -1) const;
-  charNDArray max (Array<octave_idx_type>& index, int dim = -1) const;
-  charNDArray min (int dim = -1) const;
-  charNDArray min (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API charNDArray max (int dim = -1) const;
+  OCTAVE_API charNDArray
+  max (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API charNDArray min (int dim = -1) const;
+  OCTAVE_API charNDArray
+  min (Array<octave_idx_type>& index, int dim = -1) const;
 
-  charNDArray& insert (const charNDArray& a,
-                       octave_idx_type r, octave_idx_type c);
-  charNDArray& insert (const charNDArray& a,
-                       const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API charNDArray&
+  insert (const charNDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API charNDArray&
+  insert (const charNDArray& a, const Array<octave_idx_type>& ra_idx);
 
   charNDArray squeeze (void) const { return Array<char>::squeeze (); }
 
-  static void increment_index (Array<octave_idx_type>& ra_idx,
-                               const dim_vector& dimensions,
-                               int start_dimension = 0);
+  static OCTAVE_API void
+  increment_index (Array<octave_idx_type>& ra_idx,
+                   const dim_vector& dimensions, int start_dimension = 0);
 
-  static octave_idx_type compute_index (Array<octave_idx_type>& ra_idx,
-                                        const dim_vector& dimensions);
+  static OCTAVE_API octave_idx_type
+  compute_index (Array<octave_idx_type>& ra_idx, const dim_vector& dimensions);
 
   // i/o
 
-  // friend std::ostream& operator << (std::ostream& os, const charNDArray& a);
-  // friend std::istream& operator >> (std::istream& is, charNDArray& a);
+  // friend OCTAVE_API std::ostream&
+  // operator << (std::ostream& os, const charNDArray& a);
+  // friend OCTAVE_API std::istream&
+  // operator >> (std::istream& is, charNDArray& a);
 
-  charNDArray diag (octave_idx_type k = 0) const;
+  OCTAVE_API charNDArray diag (octave_idx_type k = 0) const;
 
-  charNDArray diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API charNDArray diag (octave_idx_type m, octave_idx_type n) const;
 };
 
 extern OCTAVE_API charNDArray min (char d, const charNDArray& m);
--- a/liboctave/array/dColVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/dColVector.h	Mon May 10 23:27:38 2021 +0200
@@ -59,28 +59,31 @@
     return *this;
   }
 
-  bool operator == (const ColumnVector& a) const;
-  bool operator != (const ColumnVector& a) const;
+  OCTAVE_API bool operator == (const ColumnVector& a) const;
+  OCTAVE_API bool operator != (const ColumnVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  ColumnVector& insert (const ColumnVector& a, octave_idx_type r);
+  OCTAVE_API ColumnVector& insert (const ColumnVector& a, octave_idx_type r);
 
-  ColumnVector& fill (double val);
-  ColumnVector& fill (double val, octave_idx_type r1, octave_idx_type r2);
+  OCTAVE_API ColumnVector& fill (double val);
+  OCTAVE_API ColumnVector&
+  fill (double val, octave_idx_type r1, octave_idx_type r2);
 
-  ColumnVector stack (const ColumnVector& a) const;
+  OCTAVE_API ColumnVector stack (const ColumnVector& a) const;
 
-  RowVector transpose (void) const;
+  OCTAVE_API RowVector transpose (void) const;
 
   friend OCTAVE_API ColumnVector real (const ComplexColumnVector& a);
   friend OCTAVE_API ColumnVector imag (const ComplexColumnVector& a);
 
   // resize is the destructive equivalent for this one
 
-  ColumnVector extract (octave_idx_type r1, octave_idx_type r2) const;
+  OCTAVE_API ColumnVector
+  extract (octave_idx_type r1, octave_idx_type r2) const;
 
-  ColumnVector extract_n (octave_idx_type r1, octave_idx_type n) const;
+  OCTAVE_API ColumnVector
+  extract_n (octave_idx_type r1, octave_idx_type n) const;
 
   // matrix by column vector -> column vector operations
 
@@ -94,10 +97,10 @@
 
   // other operations
 
-  double min (void) const;
-  double max (void) const;
+  OCTAVE_API double min (void) const;
+  OCTAVE_API double max (void) const;
 
-  ColumnVector abs (void) const;
+  OCTAVE_API ColumnVector abs (void) const;
 
   // i/o
 
--- a/liboctave/array/dDiagMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/dDiagMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -66,15 +66,16 @@
   DiagMatrix (const Array<double>& a, octave_idx_type r, octave_idx_type c)
     : MDiagArray2<double> (a, r, c) { }
 
-  bool operator == (const DiagMatrix& a) const;
-  bool operator != (const DiagMatrix& a) const;
+  OCTAVE_API bool operator == (const DiagMatrix& a) const;
+  OCTAVE_API bool operator != (const DiagMatrix& a) const;
 
-  DiagMatrix& fill (double val);
-  DiagMatrix& fill (double val, octave_idx_type beg, octave_idx_type end);
-  DiagMatrix& fill (const ColumnVector& a);
-  DiagMatrix& fill (const RowVector& a);
-  DiagMatrix& fill (const ColumnVector& a, octave_idx_type beg);
-  DiagMatrix& fill (const RowVector& a, octave_idx_type beg);
+  OCTAVE_API DiagMatrix& fill (double val);
+  OCTAVE_API DiagMatrix&
+  fill (double val, octave_idx_type beg, octave_idx_type end);
+  OCTAVE_API DiagMatrix& fill (const ColumnVector& a);
+  OCTAVE_API DiagMatrix& fill (const RowVector& a);
+  OCTAVE_API DiagMatrix& fill (const ColumnVector& a, octave_idx_type beg);
+  OCTAVE_API DiagMatrix& fill (const RowVector& a, octave_idx_type beg);
 
   DiagMatrix transpose (void) const
   { return MDiagArray2<double>::transpose (); }
@@ -85,33 +86,34 @@
 
   // resize is the destructive analog for this one
 
-  Matrix extract (octave_idx_type r1, octave_idx_type c1,
-                  octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API Matrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
   // extract row or column i.
 
-  RowVector row (octave_idx_type i) const;
-  RowVector row (char *s) const;
+  OCTAVE_API RowVector row (octave_idx_type i) const;
+  OCTAVE_API RowVector row (char *s) const;
 
-  ColumnVector column (octave_idx_type i) const;
-  ColumnVector column (char *s) const;
+  OCTAVE_API ColumnVector column (octave_idx_type i) const;
+  OCTAVE_API ColumnVector column (char *s) const;
 
-  DiagMatrix inverse (void) const;
-  DiagMatrix inverse (octave_idx_type& info) const;
-  DiagMatrix pseudo_inverse (double tol = 0.0) const;
+  OCTAVE_API DiagMatrix inverse (void) const;
+  OCTAVE_API DiagMatrix inverse (octave_idx_type& info) const;
+  OCTAVE_API DiagMatrix pseudo_inverse (double tol = 0.0) const;
 
   // other operations
 
   ColumnVector extract_diag (octave_idx_type k = 0) const
   { return MDiagArray2<double>::extract_diag (k); }
 
-  DET determinant (void) const;
-  double rcond (void) const;
+  OCTAVE_API DET determinant (void) const;
+  OCTAVE_API double rcond (void) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const DiagMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const DiagMatrix& a);
 
 };
 
--- a/liboctave/array/dMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/dMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -84,47 +84,52 @@
   template <typename U>
   Matrix (const Array<U>& a) : NDArray (a.as_matrix ()) { }
 
-  explicit Matrix (const RowVector& rv);
+  explicit OCTAVE_API Matrix (const RowVector& rv);
 
-  explicit Matrix (const ColumnVector& cv);
+  explicit OCTAVE_API Matrix (const ColumnVector& cv);
 
-  explicit Matrix (const DiagMatrix& a);
+  explicit OCTAVE_API Matrix (const DiagMatrix& a);
 
-  explicit Matrix (const MDiagArray2<double>& a);
+  explicit OCTAVE_API Matrix (const MDiagArray2<double>& a);
 
-  explicit Matrix (const DiagArray2<double>& a);
+  explicit OCTAVE_API Matrix (const DiagArray2<double>& a);
 
-  explicit Matrix (const PermMatrix& a);
+  explicit OCTAVE_API Matrix (const PermMatrix& a);
 
-  explicit Matrix (const boolMatrix& a);
+  explicit OCTAVE_API Matrix (const boolMatrix& a);
 
   explicit Matrix (const charMatrix& a);
 
-  bool operator == (const Matrix& a) const;
-  bool operator != (const Matrix& a) const;
+  OCTAVE_API bool operator == (const Matrix& a) const;
+  OCTAVE_API bool operator != (const Matrix& a) const;
 
-  bool issymmetric (void) const;
+  OCTAVE_API bool issymmetric (void) const;
 
   // destructive insert/delete/reorder operations
 
-  Matrix& insert (const Matrix& a, octave_idx_type r, octave_idx_type c);
-  Matrix& insert (const RowVector& a, octave_idx_type r, octave_idx_type c);
-  Matrix& insert (const ColumnVector& a, octave_idx_type r, octave_idx_type c);
-  Matrix& insert (const DiagMatrix& a, octave_idx_type r, octave_idx_type c);
-
-  Matrix& fill (double val);
-  Matrix& fill (double val, octave_idx_type r1, octave_idx_type c1,
-                octave_idx_type r2, octave_idx_type c2);
+  OCTAVE_API Matrix&
+  insert (const Matrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API Matrix&
+  insert (const RowVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API Matrix&
+  insert (const ColumnVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API Matrix&
+  insert (const DiagMatrix& a, octave_idx_type r, octave_idx_type c);
 
-  Matrix append (const Matrix& a) const;
-  Matrix append (const RowVector& a) const;
-  Matrix append (const ColumnVector& a) const;
-  Matrix append (const DiagMatrix& a) const;
+  OCTAVE_API Matrix& fill (double val);
+  OCTAVE_API Matrix&
+  fill (double val, octave_idx_type r1, octave_idx_type c1,
+        octave_idx_type r2, octave_idx_type c2);
 
-  Matrix stack (const Matrix& a) const;
-  Matrix stack (const RowVector& a) const;
-  Matrix stack (const ColumnVector& a) const;
-  Matrix stack (const DiagMatrix& a) const;
+  OCTAVE_API Matrix append (const Matrix& a) const;
+  OCTAVE_API Matrix append (const RowVector& a) const;
+  OCTAVE_API Matrix append (const ColumnVector& a) const;
+  OCTAVE_API Matrix append (const DiagMatrix& a) const;
+
+  OCTAVE_API Matrix stack (const Matrix& a) const;
+  OCTAVE_API Matrix stack (const RowVector& a) const;
+  OCTAVE_API Matrix stack (const ColumnVector& a) const;
+  OCTAVE_API Matrix stack (const DiagMatrix& a) const;
 
   friend OCTAVE_API Matrix real (const ComplexMatrix& a);
   friend OCTAVE_API Matrix imag (const ComplexMatrix& a);
@@ -136,17 +141,19 @@
 
   // resize is the destructive equivalent for this one
 
-  Matrix extract (octave_idx_type r1, octave_idx_type c1,
-                  octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API Matrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
-  Matrix extract_n (octave_idx_type r1, octave_idx_type c1,
-                    octave_idx_type nr, octave_idx_type nc) const;
+  OCTAVE_API Matrix
+  extract_n (octave_idx_type r1, octave_idx_type c1,
+             octave_idx_type nr, octave_idx_type nc) const;
 
   // extract row or column i.
 
-  RowVector row (octave_idx_type i) const;
+  OCTAVE_API RowVector row (octave_idx_type i) const;
 
-  ColumnVector column (octave_idx_type i) const;
+  OCTAVE_API ColumnVector column (octave_idx_type i) const;
 
   void resize (octave_idx_type nr, octave_idx_type nc, double rfv = 0)
   {
@@ -161,33 +168,37 @@
                    bool force, bool calc_cond) const;
 
 public:
-  Matrix inverse (void) const;
-  Matrix inverse (octave_idx_type& info) const;
-  Matrix inverse (octave_idx_type& info, double& rcon, bool force = false,
-                  bool calc_cond = true) const;
+  OCTAVE_API Matrix inverse (void) const;
+  OCTAVE_API Matrix inverse (octave_idx_type& info) const;
+  OCTAVE_API Matrix
+  inverse (octave_idx_type& info, double& rcon, bool force = false,
+           bool calc_cond = true) const;
 
-  Matrix inverse (MatrixType& mattype) const;
-  Matrix inverse (MatrixType& mattype, octave_idx_type& info) const;
-  Matrix inverse (MatrixType& mattype, octave_idx_type& info, double& rcon,
-                  bool force = false, bool calc_cond = true) const;
+  OCTAVE_API Matrix inverse (MatrixType& mattype) const;
+  OCTAVE_API Matrix inverse (MatrixType& mattype, octave_idx_type& info) const;
+  OCTAVE_API Matrix
+  inverse (MatrixType& mattype, octave_idx_type& info, double& rcon,
+           bool force = false, bool calc_cond = true) const;
 
-  Matrix pseudo_inverse (double tol = 0.0) const;
+  OCTAVE_API Matrix pseudo_inverse (double tol = 0.0) const;
 
-  ComplexMatrix fourier (void) const;
-  ComplexMatrix ifourier (void) const;
+  OCTAVE_API ComplexMatrix fourier (void) const;
+  OCTAVE_API ComplexMatrix ifourier (void) const;
 
-  ComplexMatrix fourier2d (void) const;
-  ComplexMatrix ifourier2d (void) const;
+  OCTAVE_API ComplexMatrix fourier2d (void) const;
+  OCTAVE_API ComplexMatrix ifourier2d (void) const;
 
-  DET determinant (void) const;
-  DET determinant (octave_idx_type& info) const;
-  DET determinant (octave_idx_type& info, double& rcon,
-                   bool calc_cond = true) const;
-  DET determinant (MatrixType& mattype, octave_idx_type& info,
-                   double& rcon, bool calc_cond = true) const;
+  OCTAVE_API DET determinant (void) const;
+  OCTAVE_API DET determinant (octave_idx_type& info) const;
+  OCTAVE_API DET
+  determinant (octave_idx_type& info, double& rcon,
+               bool calc_cond = true) const;
+  OCTAVE_API DET
+  determinant (MatrixType& mattype, octave_idx_type& info,
+               double& rcon, bool calc_cond = true) const;
 
-  double rcond (void) const;
-  double rcond (MatrixType& mattype) const;
+  OCTAVE_API double rcond (void) const;
+  OCTAVE_API double rcond (MatrixType& mattype) const;
 
 private:
   // Upper triangular matrix solvers
@@ -209,154 +220,181 @@
 
 public:
   // Generic interface to solver with no probing of type
-  Matrix solve (MatrixType& mattype, const Matrix& b) const;
-  Matrix solve (MatrixType& mattype, const Matrix& b,
-                octave_idx_type& info) const;
-  Matrix solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
-                double& rcon) const;
-  Matrix solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
-                double& rcon, solve_singularity_handler sing_handler,
-                bool singular_fallback = true,
-                blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API Matrix solve (MatrixType& mattype, const Matrix& b) const;
+  OCTAVE_API Matrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API Matrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
+         double& rcon) const;
+  OCTAVE_API Matrix
+  solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
+         double& rcon, solve_singularity_handler sing_handler,
+         bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info, double& rcon) const;
-  ComplexMatrix solve (MatrixType& mattype, const ComplexMatrix& b,
-                       octave_idx_type& info, double& rcon,
-                       solve_singularity_handler sing_handler,
-                       bool singular_fallback = true,
-                       blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b,
+         octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ComplexMatrix
+  solve (MatrixType& mattype, const ComplexMatrix& b,
+         octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ColumnVector solve (MatrixType& mattype, const ColumnVector& b) const;
-  ColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                      octave_idx_type& info) const;
-  ColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                      octave_idx_type& info, double& rcon) const;
-  ColumnVector solve (MatrixType& mattype, const ColumnVector& b,
-                      octave_idx_type& info, double& rcon,
-                      solve_singularity_handler sing_handler,
-                      blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b) const;
+  OCTAVE_API ColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b,
+         octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ColumnVector
+  solve (MatrixType& mattype, const ColumnVector& b, octave_idx_type& info,
+         double& rcon, solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexColumnVector solve (MatrixType& mattype,
-                             const ComplexColumnVector& b) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcon) const;
-  ComplexColumnVector solve (MatrixType& mattype, const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcon,
-                             solve_singularity_handler sing_handler,
-                             blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ComplexColumnVector
+  solve (MatrixType& mattype, const ComplexColumnVector& b,
+         octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
   // Generic interface to solver with probing of type
-  Matrix solve (const Matrix& b) const;
-  Matrix solve (const Matrix& b, octave_idx_type& info) const;
-  Matrix solve (const Matrix& b, octave_idx_type& info, double& rcon) const;
-  Matrix solve (const Matrix& b, octave_idx_type& info, double& rcon,
-                solve_singularity_handler sing_handler,
-                blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API Matrix solve (const Matrix& b) const;
+  OCTAVE_API Matrix solve (const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API Matrix
+  solve (const Matrix& b, octave_idx_type& info, double& rcon) const;
+  OCTAVE_API Matrix
+  solve (const Matrix& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexMatrix solve (const ComplexMatrix& b) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info,
-                       double& rcon) const;
-  ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info,
-                       double& rcon,
-                       solve_singularity_handler sing_handler,
-                       blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexMatrix solve (const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info,
+         double& rcon) const;
+  OCTAVE_API ComplexMatrix
+  solve (const ComplexMatrix& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ColumnVector solve (const ColumnVector& b) const;
-  ColumnVector solve (const ColumnVector& b, octave_idx_type& info) const;
-  ColumnVector solve (const ColumnVector& b, octave_idx_type& info,
-                      double& rcon) const;
-  ColumnVector solve (const ColumnVector& b, octave_idx_type& info,
-                      double& rcon,
-                      solve_singularity_handler sing_handler,
-                      blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ColumnVector solve (const ColumnVector& b) const;
+  OCTAVE_API ColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info, double& rcon) const;
+  OCTAVE_API ColumnVector
+  solve (const ColumnVector& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  ComplexColumnVector solve (const ComplexColumnVector& b) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcon) const;
-  ComplexColumnVector solve (const ComplexColumnVector& b,
-                             octave_idx_type& info, double& rcon,
-                             solve_singularity_handler sing_handler,
-                             blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API ComplexColumnVector solve (const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info,
+         double& rcon) const;
+  OCTAVE_API ComplexColumnVector
+  solve (const ComplexColumnVector& b, octave_idx_type& info, double& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
   // Singular solvers
-  Matrix lssolve (const Matrix& b) const;
-  Matrix lssolve (const Matrix& b, octave_idx_type& info) const;
-  Matrix lssolve (const Matrix& b, octave_idx_type& info,
-                  octave_idx_type& rank) const;
-  Matrix lssolve (const Matrix& b, octave_idx_type& info,
-                  octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API Matrix lssolve (const Matrix& b) const;
+  OCTAVE_API Matrix lssolve (const Matrix& b, octave_idx_type& info) const;
+  OCTAVE_API Matrix
+  lssolve (const Matrix& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API Matrix
+  lssolve (const Matrix& b, octave_idx_type& info, octave_idx_type& rank,
+           double& rcon) const;
 
-  ComplexMatrix lssolve (const ComplexMatrix& b) const;
-  ComplexMatrix lssolve (const ComplexMatrix& b, octave_idx_type& info) const;
-  ComplexMatrix lssolve (const ComplexMatrix& b, octave_idx_type& info,
-                         octave_idx_type& rank) const;
-  ComplexMatrix lssolve (const ComplexMatrix& b, octave_idx_type& info,
-                         octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API ComplexMatrix lssolve (const ComplexMatrix& b) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const ComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const ComplexMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API ComplexMatrix
+  lssolve (const ComplexMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank, double& rcon) const;
 
-  ColumnVector lssolve (const ColumnVector& b) const;
-  ColumnVector lssolve (const ColumnVector& b, octave_idx_type& info) const;
-  ColumnVector lssolve (const ColumnVector& b, octave_idx_type& info,
-                        octave_idx_type& rank) const;
-  ColumnVector lssolve (const ColumnVector& b, octave_idx_type& info,
-                        octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API ColumnVector lssolve (const ColumnVector& b) const;
+  OCTAVE_API ColumnVector
+  lssolve (const ColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ColumnVector
+  lssolve (const ColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API ColumnVector
+  lssolve (const ColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, double& rcon) const;
 
-  ComplexColumnVector lssolve (const ComplexColumnVector& b) const;
-  ComplexColumnVector lssolve (const ComplexColumnVector& b,
-                               octave_idx_type& info) const;
-  ComplexColumnVector lssolve (const ComplexColumnVector& b,
-                               octave_idx_type& info,
-                               octave_idx_type& rank) const;
-  ComplexColumnVector lssolve (const ComplexColumnVector& b,
-                               octave_idx_type& info,
-                               octave_idx_type& rank, double& rcon) const;
+  OCTAVE_API ComplexColumnVector lssolve (const ComplexColumnVector& b) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API ComplexColumnVector
+  lssolve (const ComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, double& rcon) const;
 
-  Matrix& operator += (const DiagMatrix& a);
-  Matrix& operator -= (const DiagMatrix& a);
+  OCTAVE_API Matrix& operator += (const DiagMatrix& a);
+  OCTAVE_API Matrix& operator -= (const DiagMatrix& a);
 
   // unary operations
 
   // other operations
 
-  boolMatrix all (int dim = -1) const;
-  boolMatrix any (int dim = -1) const;
+  OCTAVE_API boolMatrix all (int dim = -1) const;
+  OCTAVE_API boolMatrix any (int dim = -1) const;
 
-  Matrix cumprod (int dim = -1) const;
-  Matrix cumsum (int dim = -1) const;
-  Matrix prod (int dim = -1) const;
-  Matrix sum (int dim = -1) const;
-  Matrix sumsq (int dim = -1) const;
-  Matrix abs (void) const;
+  OCTAVE_API Matrix cumprod (int dim = -1) const;
+  OCTAVE_API Matrix cumsum (int dim = -1) const;
+  OCTAVE_API Matrix prod (int dim = -1) const;
+  OCTAVE_API Matrix sum (int dim = -1) const;
+  OCTAVE_API Matrix sumsq (int dim = -1) const;
+  OCTAVE_API Matrix abs (void) const;
 
-  Matrix diag (octave_idx_type k = 0) const;
+  OCTAVE_API Matrix diag (octave_idx_type k = 0) const;
 
-  DiagMatrix diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API DiagMatrix diag (octave_idx_type m, octave_idx_type n) const;
 
-  ColumnVector row_min (void) const;
-  ColumnVector row_max (void) const;
+  OCTAVE_API ColumnVector row_min (void) const;
+  OCTAVE_API ColumnVector row_max (void) const;
 
-  ColumnVector row_min (Array<octave_idx_type>& index) const;
-  ColumnVector row_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API ColumnVector row_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API ColumnVector row_max (Array<octave_idx_type>& index) const;
 
-  RowVector column_min (void) const;
-  RowVector column_max (void) const;
+  OCTAVE_API RowVector column_min (void) const;
+  OCTAVE_API RowVector column_max (void) const;
 
-  RowVector column_min (Array<octave_idx_type>& index) const;
-  RowVector column_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API RowVector column_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API RowVector column_max (Array<octave_idx_type>& index) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const Matrix& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is, Matrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const Matrix& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, Matrix& a);
 };
 
 // Publish externally used friend functions.
--- a/liboctave/array/dNDArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/dNDArray.h	Mon May 10 23:27:38 2021 +0200
@@ -77,64 +77,69 @@
 
   // unary operations
 
-  boolNDArray operator ! (void) const;
+  OCTAVE_API boolNDArray operator ! (void) const;
 
-  bool any_element_is_negative (bool = false) const;
-  bool any_element_is_positive (bool = false) const;
-  bool any_element_is_nan (void) const;
-  bool any_element_is_inf_or_nan (void) const;
-  bool any_element_not_one_or_zero (void) const;
-  bool all_elements_are_zero (void) const;
-  bool all_elements_are_int_or_inf_or_nan (void) const;
-  bool all_integers (double& max_val, double& min_val) const;
-  bool all_integers (void) const;
-  bool too_large_for_float (void) const;
+  OCTAVE_API bool any_element_is_negative (bool = false) const;
+  OCTAVE_API bool any_element_is_positive (bool = false) const;
+  OCTAVE_API bool any_element_is_nan (void) const;
+  OCTAVE_API bool any_element_is_inf_or_nan (void) const;
+  OCTAVE_API bool any_element_not_one_or_zero (void) const;
+  OCTAVE_API bool all_elements_are_zero (void) const;
+  OCTAVE_API bool all_elements_are_int_or_inf_or_nan (void) const;
+  OCTAVE_API bool all_integers (double& max_val, double& min_val) const;
+  OCTAVE_API bool all_integers (void) const;
+  OCTAVE_API bool too_large_for_float (void) const;
 
   // FIXME: this is not quite the right thing.
 
-  boolNDArray all (int dim = -1) const;
-  boolNDArray any (int dim = -1) const;
+  OCTAVE_API boolNDArray all (int dim = -1) const;
+  OCTAVE_API boolNDArray any (int dim = -1) const;
 
-  NDArray cumprod (int dim = -1) const;
-  NDArray cumsum (int dim = -1) const;
-  NDArray prod (int dim = -1) const;
-  NDArray sum (int dim = -1) const;
-  NDArray xsum (int dim = -1) const;
-  NDArray sumsq (int dim = -1) const;
-  NDArray concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx);
-  ComplexNDArray concat (const ComplexNDArray& rb,
-                         const Array<octave_idx_type>& ra_idx);
-  charNDArray concat (const charNDArray& rb,
-                      const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API NDArray cumprod (int dim = -1) const;
+  OCTAVE_API NDArray cumsum (int dim = -1) const;
+  OCTAVE_API NDArray prod (int dim = -1) const;
+  OCTAVE_API NDArray sum (int dim = -1) const;
+  OCTAVE_API NDArray xsum (int dim = -1) const;
+  OCTAVE_API NDArray sumsq (int dim = -1) const;
+  OCTAVE_API NDArray
+  concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API ComplexNDArray
+  concat (const ComplexNDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API charNDArray
+  concat (const charNDArray& rb, const Array<octave_idx_type>& ra_idx);
 
-  NDArray max (int dim = -1) const;
-  NDArray max (Array<octave_idx_type>& index, int dim = -1) const;
-  NDArray min (int dim = -1) const;
-  NDArray min (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API NDArray max (int dim = -1) const;
+  OCTAVE_API NDArray max (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API NDArray min (int dim = -1) const;
+  OCTAVE_API NDArray min (Array<octave_idx_type>& index, int dim = -1) const;
 
-  NDArray cummax (int dim = -1) const;
-  NDArray cummax (Array<octave_idx_type>& index, int dim = -1) const;
-  NDArray cummin (int dim = -1) const;
-  NDArray cummin (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API NDArray cummax (int dim = -1) const;
+  OCTAVE_API NDArray
+  cummax (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API NDArray cummin (int dim = -1) const;
+  OCTAVE_API NDArray
+  cummin (Array<octave_idx_type>& index, int dim = -1) const;
 
-  NDArray diff (octave_idx_type order = 1, int dim = -1) const;
+  OCTAVE_API NDArray diff (octave_idx_type order = 1, int dim = -1) const;
 
-  NDArray& insert (const NDArray& a, octave_idx_type r, octave_idx_type c);
-  NDArray& insert (const NDArray& a, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API NDArray&
+  insert (const NDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API NDArray&
+  insert (const NDArray& a, const Array<octave_idx_type>& ra_idx);
 
-  NDArray abs (void) const;
-  boolNDArray isnan (void) const;
-  boolNDArray isinf (void) const;
-  boolNDArray isfinite (void) const;
+  OCTAVE_API NDArray abs (void) const;
+  OCTAVE_API boolNDArray isnan (void) const;
+  OCTAVE_API boolNDArray isinf (void) const;
+  OCTAVE_API boolNDArray isfinite (void) const;
 
-  ComplexNDArray fourier (int dim = 1) const;
-  ComplexNDArray ifourier (int dim = 1) const;
+  OCTAVE_API ComplexNDArray fourier (int dim = 1) const;
+  OCTAVE_API ComplexNDArray ifourier (int dim = 1) const;
 
-  ComplexNDArray fourier2d (void) const;
-  ComplexNDArray ifourier2d (void) const;
+  OCTAVE_API ComplexNDArray fourier2d (void) const;
+  OCTAVE_API ComplexNDArray ifourier2d (void) const;
 
-  ComplexNDArray fourierNd (void) const;
-  ComplexNDArray ifourierNd (void) const;
+  OCTAVE_API ComplexNDArray fourierNd (void) const;
+  OCTAVE_API ComplexNDArray ifourierNd (void) const;
 
   friend OCTAVE_API NDArray real (const ComplexNDArray& a);
   friend OCTAVE_API NDArray imag (const ComplexNDArray& a);
@@ -143,22 +148,22 @@
 
   NDArray squeeze (void) const { return MArray<double>::squeeze (); }
 
-  static void increment_index (Array<octave_idx_type>& ra_idx,
-                               const dim_vector& dimensions,
-                               int start_dimension = 0);
+  static OCTAVE_API void
+  increment_index (Array<octave_idx_type>& ra_idx,
+                   const dim_vector& dimensions, int start_dimension = 0);
 
-  static octave_idx_type compute_index (Array<octave_idx_type>& ra_idx,
-                                        const dim_vector& dimensions);
+  static OCTAVE_API octave_idx_type
+  compute_index (Array<octave_idx_type>& ra_idx, const dim_vector& dimensions);
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const NDArray& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const NDArray& a);
   friend OCTAVE_API std::istream& operator >> (std::istream& is, NDArray& a);
 
-  NDArray diag (octave_idx_type k = 0) const;
+  OCTAVE_API NDArray diag (octave_idx_type k = 0) const;
 
-  NDArray diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API NDArray diag (octave_idx_type m, octave_idx_type n) const;
 
   NDArray& changesign (void)
   {
--- a/liboctave/array/dRowVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/dRowVector.h	Mon May 10 23:27:38 2021 +0200
@@ -59,28 +59,28 @@
     return *this;
   }
 
-  bool operator == (const RowVector& a) const;
-  bool operator != (const RowVector& a) const;
+  OCTAVE_API bool operator == (const RowVector& a) const;
+  OCTAVE_API bool operator != (const RowVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  RowVector& insert (const RowVector& a, octave_idx_type c);
+  OCTAVE_API RowVector& insert (const RowVector& a, octave_idx_type c);
 
-  RowVector& fill (double val);
-  RowVector& fill (double val, octave_idx_type c1, octave_idx_type c2);
+  OCTAVE_API RowVector& fill (double val);
+  OCTAVE_API RowVector& fill (double val, octave_idx_type c1, octave_idx_type c2);
 
-  RowVector append (const RowVector& a) const;
+  OCTAVE_API RowVector append (const RowVector& a) const;
 
-  ColumnVector transpose (void) const;
+  OCTAVE_API ColumnVector transpose (void) const;
 
   friend OCTAVE_API RowVector real (const ComplexRowVector& a);
   friend OCTAVE_API RowVector imag (const ComplexRowVector& a);
 
   // resize is the destructive equivalent for this one
 
-  RowVector extract (octave_idx_type c1, octave_idx_type c2) const;
+  OCTAVE_API RowVector extract (octave_idx_type c1, octave_idx_type c2) const;
 
-  RowVector extract_n (octave_idx_type c1, octave_idx_type n) const;
+  OCTAVE_API RowVector extract_n (octave_idx_type c1, octave_idx_type n) const;
 
   // row vector by matrix -> row vector
 
@@ -88,8 +88,8 @@
 
   // other operations
 
-  double min (void) const;
-  double max (void) const;
+  OCTAVE_API double min (void) const;
+  OCTAVE_API double max (void) const;
 
   // i/o
 
@@ -109,9 +109,9 @@
 
 // row vector by column vector -> scalar
 
-double OCTAVE_API operator * (const RowVector& a, const ColumnVector& b);
+OCTAVE_API double operator * (const RowVector& a, const ColumnVector& b);
 
-Complex OCTAVE_API operator * (const RowVector& a,
+OCTAVE_API Complex operator * (const RowVector& a,
                                const ComplexColumnVector& b);
 
 // other operations
--- a/liboctave/array/dim-vector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/dim-vector.h	Mon May 10 23:27:38 2021 +0200
@@ -251,7 +251,7 @@
       }
   }
 
-  void chop_all_singletons (void);
+  OCTAVE_API void chop_all_singletons (void);
 
   // WARNING: Only call by jit
   octave_idx_type * to_jit (void) const
@@ -265,7 +265,7 @@
 
 public:
 
-  static octave_idx_type dim_max (void);
+  static OCTAVE_API octave_idx_type dim_max (void);
 
   explicit dim_vector (void) : rep (nil_rep ())
   { increment_count (); }
@@ -361,7 +361,7 @@
       }
   }
 
-  std::string str (char sep = 'x') const;
+  OCTAVE_API std::string str (char sep = 'x') const;
 
   bool all_zero (void) const
   {
@@ -385,7 +385,7 @@
                         [] (octave_idx_type dim) { return dim == 0; });
   }
 
-  int num_ones (void) const;
+  OCTAVE_API int num_ones (void) const;
 
   bool all_ones (void) const
   {
@@ -418,7 +418,7 @@
   //! function that is iterating over an array using octave_idx_type
   //! indices.
 
-  octave_idx_type safe_numel (void) const;
+  OCTAVE_API octave_idx_type safe_numel (void) const;
 
   bool any_neg (void) const
   {
@@ -426,21 +426,21 @@
                         [] (octave_idx_type dim) { return dim < 0; });
   }
 
-  dim_vector squeeze (void) const;
+  OCTAVE_API dim_vector squeeze (void) const;
 
   //! This corresponds to cat().
-  bool concat (const dim_vector& dvb, int dim);
+  OCTAVE_API bool concat (const dim_vector& dvb, int dim);
 
   //! This corresponds to [,] (horzcat, dim = 0) and [;] (vertcat, dim = 1).
   // The rules are more relaxed here.
-  bool hvcat (const dim_vector& dvb, int dim);
+  OCTAVE_API bool hvcat (const dim_vector& dvb, int dim);
 
   //! Force certain dimensionality, preserving numel ().  Missing
   //! dimensions are set to 1, redundant are folded into the trailing
   //! one.  If n = 1, the result is 2d and the second dim is 1
   //! (dim_vectors are always at least 2D).
 
-  dim_vector redim (int n) const;
+  OCTAVE_API dim_vector redim (int n) const;
 
   dim_vector as_column (void) const
   {
@@ -576,9 +576,10 @@
     return k;
   }
 
-  friend bool operator == (const dim_vector& a, const dim_vector& b);
+  friend OCTAVE_API bool
+  operator == (const dim_vector& a, const dim_vector& b);
 
-  Array<octave_idx_type> as_array (void) const;
+  OCTAVE_API Array<octave_idx_type> as_array (void) const;
 };
 
 inline bool
--- a/liboctave/array/fCColVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fCColVector.h	Mon May 10 23:27:38 2021 +0200
@@ -61,7 +61,7 @@
   FloatComplexColumnVector (const Array<FloatComplex>& a)
     : MArray<FloatComplex> (a.as_column ()) { }
 
-  explicit FloatComplexColumnVector (const FloatColumnVector& a);
+  explicit OCTAVE_API FloatComplexColumnVector (const FloatColumnVector& a);
 
   FloatComplexColumnVector& operator = (const FloatComplexColumnVector& a)
   {
@@ -69,44 +69,47 @@
     return *this;
   }
 
-  bool operator == (const FloatComplexColumnVector& a) const;
-  bool operator != (const FloatComplexColumnVector& a) const;
+  OCTAVE_API bool operator == (const FloatComplexColumnVector& a) const;
+  OCTAVE_API bool operator != (const FloatComplexColumnVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  FloatComplexColumnVector& insert (const FloatColumnVector& a,
-                                    octave_idx_type r);
-  FloatComplexColumnVector& insert (const FloatComplexColumnVector& a,
-                                    octave_idx_type r);
+  OCTAVE_API FloatComplexColumnVector&
+  insert (const FloatColumnVector& a, octave_idx_type r);
+  OCTAVE_API FloatComplexColumnVector&
+  insert (const FloatComplexColumnVector& a, octave_idx_type r);
 
-  FloatComplexColumnVector& fill (float val);
-  FloatComplexColumnVector& fill (const FloatComplex& val);
-  FloatComplexColumnVector& fill (float val,
-                                  octave_idx_type r1, octave_idx_type r2);
-  FloatComplexColumnVector& fill (const FloatComplex& val,
-                                  octave_idx_type r1, octave_idx_type r2);
+  OCTAVE_API FloatComplexColumnVector& fill (float val);
+  OCTAVE_API FloatComplexColumnVector& fill (const FloatComplex& val);
+  OCTAVE_API FloatComplexColumnVector&
+  fill (float val, octave_idx_type r1, octave_idx_type r2);
+  OCTAVE_API FloatComplexColumnVector&
+  fill (const FloatComplex& val, octave_idx_type r1, octave_idx_type r2);
 
-  FloatComplexColumnVector stack (const FloatColumnVector& a) const;
-  FloatComplexColumnVector stack (const FloatComplexColumnVector& a) const;
+  OCTAVE_API FloatComplexColumnVector stack (const FloatColumnVector& a) const;
+  OCTAVE_API FloatComplexColumnVector
+  stack (const FloatComplexColumnVector& a) const;
 
-  FloatComplexRowVector hermitian (void) const;
-  FloatComplexRowVector transpose (void) const;
+  OCTAVE_API FloatComplexRowVector hermitian (void) const;
+  OCTAVE_API FloatComplexRowVector transpose (void) const;
 
   friend OCTAVE_API FloatComplexColumnVector
-  conj (const FloatComplexColumnVector& a);
+  OCTAVE_API conj (const FloatComplexColumnVector& a);
 
   // resize is the destructive equivalent for this one
 
-  FloatComplexColumnVector extract (octave_idx_type r1,
-                                    octave_idx_type r2) const;
+  OCTAVE_API FloatComplexColumnVector
+  extract (octave_idx_type r1, octave_idx_type r2) const;
 
-  FloatComplexColumnVector extract_n (octave_idx_type r1,
-                                      octave_idx_type n) const;
+  OCTAVE_API FloatComplexColumnVector
+  extract_n (octave_idx_type r1, octave_idx_type n) const;
 
   // column vector by column vector -> column vector operations
 
-  FloatComplexColumnVector& operator += (const FloatColumnVector& a);
-  FloatComplexColumnVector& operator -= (const FloatColumnVector& a);
+  OCTAVE_API FloatComplexColumnVector&
+  operator += (const FloatColumnVector& a);
+  OCTAVE_API FloatComplexColumnVector&
+  operator -= (const FloatColumnVector& a);
 
   // matrix by column vector -> column vector operations
 
@@ -134,17 +137,17 @@
 
   // other operations
 
-  FloatComplex min (void) const;
-  FloatComplex max (void) const;
+  OCTAVE_API FloatComplex min (void) const;
+  OCTAVE_API FloatComplex max (void) const;
 
-  FloatColumnVector abs (void) const;
+  OCTAVE_API FloatColumnVector abs (void) const;
 
   // i/o
 
   friend OCTAVE_API std::ostream&
   operator << (std::ostream& os, const FloatComplexColumnVector& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is,
-                                               FloatComplexColumnVector& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, FloatComplexColumnVector& a);
 
   void resize (octave_idx_type n, const FloatComplex& rfv = FloatComplex (0))
   {
--- a/liboctave/array/fCDiagMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fCDiagMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -74,7 +74,7 @@
   explicit FloatComplexDiagMatrix (const Array<float>& a)
     : MDiagArray2<FloatComplex> (Array<FloatComplex> (a)) { }
 
-  explicit FloatComplexDiagMatrix (const FloatDiagMatrix& a);
+  explicit OCTAVE_API FloatComplexDiagMatrix (const FloatDiagMatrix& a);
 
   FloatComplexDiagMatrix (const MDiagArray2<FloatComplex>& a)
     : MDiagArray2<FloatComplex> (a) { }
@@ -83,72 +83,74 @@
   FloatComplexDiagMatrix (const DiagArray2<U>& a)
     : MDiagArray2<FloatComplex> (a) { }
 
-  bool operator == (const FloatComplexDiagMatrix& a) const;
-  bool operator != (const FloatComplexDiagMatrix& a) const;
+  OCTAVE_API bool operator == (const FloatComplexDiagMatrix& a) const;
+  OCTAVE_API bool operator != (const FloatComplexDiagMatrix& a) const;
 
-  FloatComplexDiagMatrix& fill (float val);
-  FloatComplexDiagMatrix& fill (const FloatComplex& val);
-  FloatComplexDiagMatrix& fill (float val,
-                                octave_idx_type beg, octave_idx_type end);
-  FloatComplexDiagMatrix& fill (const FloatComplex& val,
-                                octave_idx_type beg, octave_idx_type end);
-  FloatComplexDiagMatrix& fill (const FloatColumnVector& a);
-  FloatComplexDiagMatrix& fill (const FloatComplexColumnVector& a);
-  FloatComplexDiagMatrix& fill (const FloatRowVector& a);
-  FloatComplexDiagMatrix& fill (const FloatComplexRowVector& a);
-  FloatComplexDiagMatrix& fill (const FloatColumnVector& a,
-                                octave_idx_type beg);
-  FloatComplexDiagMatrix& fill (const FloatComplexColumnVector& a,
-                                octave_idx_type beg);
-  FloatComplexDiagMatrix& fill (const FloatRowVector& a, octave_idx_type beg);
-  FloatComplexDiagMatrix& fill (const FloatComplexRowVector& a,
-                                octave_idx_type beg);
+  OCTAVE_API FloatComplexDiagMatrix& fill (float val);
+  OCTAVE_API FloatComplexDiagMatrix& fill (const FloatComplex& val);
+  OCTAVE_API FloatComplexDiagMatrix&
+  fill (float val, octave_idx_type beg, octave_idx_type end);
+  OCTAVE_API FloatComplexDiagMatrix&
+  fill (const FloatComplex& val, octave_idx_type beg, octave_idx_type end);
+  OCTAVE_API FloatComplexDiagMatrix& fill (const FloatColumnVector& a);
+  OCTAVE_API FloatComplexDiagMatrix& fill (const FloatComplexColumnVector& a);
+  OCTAVE_API FloatComplexDiagMatrix& fill (const FloatRowVector& a);
+  OCTAVE_API FloatComplexDiagMatrix& fill (const FloatComplexRowVector& a);
+  OCTAVE_API FloatComplexDiagMatrix&
+  fill (const FloatColumnVector& a, octave_idx_type beg);
+  OCTAVE_API FloatComplexDiagMatrix&
+  fill (const FloatComplexColumnVector& a, octave_idx_type beg);
+  OCTAVE_API FloatComplexDiagMatrix&
+  fill (const FloatRowVector& a, octave_idx_type beg);
+  OCTAVE_API FloatComplexDiagMatrix&
+  fill (const FloatComplexRowVector& a, octave_idx_type beg);
 
   FloatComplexDiagMatrix hermitian (void) const
   { return MDiagArray2<FloatComplex>::hermitian (std::conj); }
   FloatComplexDiagMatrix transpose (void) const
   { return MDiagArray2<FloatComplex>::transpose (); }
-  FloatDiagMatrix abs (void) const;
+  OCTAVE_API FloatDiagMatrix abs (void) const;
 
   friend OCTAVE_API FloatComplexDiagMatrix
   conj (const FloatComplexDiagMatrix& a);
 
   // resize is the destructive analog for this one
 
-  FloatComplexMatrix extract (octave_idx_type r1, octave_idx_type c1,
-                              octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API FloatComplexMatrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
   // extract row or column i
 
-  FloatComplexRowVector row (octave_idx_type i) const;
-  FloatComplexRowVector row (char *s) const;
+  OCTAVE_API FloatComplexRowVector row (octave_idx_type i) const;
+  OCTAVE_API FloatComplexRowVector row (char *s) const;
 
-  FloatComplexColumnVector column (octave_idx_type i) const;
-  FloatComplexColumnVector column (char *s) const;
+  OCTAVE_API FloatComplexColumnVector column (octave_idx_type i) const;
+  OCTAVE_API FloatComplexColumnVector column (char *s) const;
 
-  FloatComplexDiagMatrix inverse (octave_idx_type& info) const;
-  FloatComplexDiagMatrix inverse (void) const;
-  FloatComplexDiagMatrix pseudo_inverse (float tol = 0.0f) const;
+  OCTAVE_API FloatComplexDiagMatrix inverse (octave_idx_type& info) const;
+  OCTAVE_API FloatComplexDiagMatrix inverse (void) const;
+  OCTAVE_API FloatComplexDiagMatrix pseudo_inverse (float tol = 0.0f) const;
 
-  bool all_elements_are_real (void) const;
+  OCTAVE_API bool all_elements_are_real (void) const;
 
   // diagonal matrix by diagonal matrix -> diagonal matrix operations
 
-  FloatComplexDiagMatrix& operator += (const FloatDiagMatrix& a);
-  FloatComplexDiagMatrix& operator -= (const FloatDiagMatrix& a);
+  OCTAVE_API FloatComplexDiagMatrix& operator += (const FloatDiagMatrix& a);
+  OCTAVE_API FloatComplexDiagMatrix& operator -= (const FloatDiagMatrix& a);
 
   // other operations
 
   FloatComplexColumnVector extract_diag (octave_idx_type k = 0) const
   { return MDiagArray2<FloatComplex>::extract_diag (k); }
 
-  FloatComplexDET determinant (void) const;
-  float rcond (void) const;
+  OCTAVE_API FloatComplexDET determinant (void) const;
+  OCTAVE_API float rcond (void) const;
 
   // i/o
 
-  friend std::ostream& operator << (std::ostream& os,
-                                    const FloatComplexDiagMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatComplexDiagMatrix& a);
 
 };
 
--- a/liboctave/array/fCMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fCMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -89,86 +89,91 @@
   FloatComplexMatrix (const Array<U>& a)
     : FloatComplexNDArray (a.as_matrix ()) { }
 
-  explicit FloatComplexMatrix (const FloatMatrix& a);
+  explicit OCTAVE_API FloatComplexMatrix (const FloatMatrix& a);
 
-  explicit FloatComplexMatrix (const FloatRowVector& rv);
+  explicit OCTAVE_API FloatComplexMatrix (const FloatRowVector& rv);
 
-  explicit FloatComplexMatrix (const FloatColumnVector& cv);
+  explicit OCTAVE_API FloatComplexMatrix (const FloatColumnVector& cv);
 
-  explicit FloatComplexMatrix (const FloatDiagMatrix& a);
+  explicit OCTAVE_API FloatComplexMatrix (const FloatDiagMatrix& a);
 
-  explicit FloatComplexMatrix (const MDiagArray2<float>& a);
+  explicit OCTAVE_API FloatComplexMatrix (const MDiagArray2<float>& a);
 
-  explicit FloatComplexMatrix (const DiagArray2<float>& a);
+  explicit OCTAVE_API FloatComplexMatrix (const DiagArray2<float>& a);
 
-  explicit FloatComplexMatrix (const FloatComplexRowVector& rv);
+  explicit OCTAVE_API FloatComplexMatrix (const FloatComplexRowVector& rv);
 
-  explicit FloatComplexMatrix (const FloatComplexColumnVector& cv);
+  explicit OCTAVE_API FloatComplexMatrix (const FloatComplexColumnVector& cv);
 
-  explicit FloatComplexMatrix (const FloatComplexDiagMatrix& a);
+  explicit OCTAVE_API FloatComplexMatrix (const FloatComplexDiagMatrix& a);
 
-  explicit FloatComplexMatrix (const MDiagArray2<FloatComplex>& a);
+  explicit OCTAVE_API FloatComplexMatrix (const MDiagArray2<FloatComplex>& a);
 
-  explicit FloatComplexMatrix (const DiagArray2<FloatComplex>& a);
+  explicit OCTAVE_API FloatComplexMatrix (const DiagArray2<FloatComplex>& a);
 
-  explicit FloatComplexMatrix (const boolMatrix& a);
+  explicit OCTAVE_API FloatComplexMatrix (const boolMatrix& a);
 
-  explicit FloatComplexMatrix (const charMatrix& a);
+  explicit OCTAVE_API FloatComplexMatrix (const charMatrix& a);
 
-  FloatComplexMatrix (const FloatMatrix& re, const FloatMatrix& im);
+  OCTAVE_API FloatComplexMatrix (const FloatMatrix& re, const FloatMatrix& im);
 
-  bool operator == (const FloatComplexMatrix& a) const;
-  bool operator != (const FloatComplexMatrix& a) const;
+  OCTAVE_API bool operator == (const FloatComplexMatrix& a) const;
+  OCTAVE_API bool operator != (const FloatComplexMatrix& a) const;
 
-  bool ishermitian (void) const;
+  OCTAVE_API bool ishermitian (void) const;
 
   // destructive insert/delete/reorder operations
 
-  FloatComplexMatrix& insert (const FloatMatrix& a,
-                              octave_idx_type r, octave_idx_type c);
-  FloatComplexMatrix& insert (const FloatRowVector& a,
-                              octave_idx_type r, octave_idx_type c);
-  FloatComplexMatrix& insert (const FloatColumnVector& a,
-                              octave_idx_type r, octave_idx_type c);
-  FloatComplexMatrix& insert (const FloatDiagMatrix& a,
-                              octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatMatrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatRowVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatColumnVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatDiagMatrix& a, octave_idx_type r, octave_idx_type c);
 
-  FloatComplexMatrix& insert (const FloatComplexMatrix& a,
-                              octave_idx_type r, octave_idx_type c);
-  FloatComplexMatrix& insert (const FloatComplexRowVector& a,
-                              octave_idx_type r, octave_idx_type c);
-  FloatComplexMatrix& insert (const FloatComplexColumnVector& a,
-                              octave_idx_type r, octave_idx_type c);
-  FloatComplexMatrix& insert (const FloatComplexDiagMatrix& a,
-                              octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatComplexMatrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatComplexRowVector& a, octave_idx_type r,
+          octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatComplexColumnVector& a, octave_idx_type r,
+          octave_idx_type c);
+  OCTAVE_API FloatComplexMatrix&
+  insert (const FloatComplexDiagMatrix& a, octave_idx_type r,
+          octave_idx_type c);
 
-  FloatComplexMatrix& fill (float val);
-  FloatComplexMatrix& fill (const FloatComplex& val);
-  FloatComplexMatrix& fill (float val, octave_idx_type r1, octave_idx_type c1,
-                            octave_idx_type r2, octave_idx_type c2);
-  FloatComplexMatrix& fill (const FloatComplex& val,
-                            octave_idx_type r1, octave_idx_type c1,
-                            octave_idx_type r2, octave_idx_type c2);
+  OCTAVE_API FloatComplexMatrix& fill (float val);
+  OCTAVE_API FloatComplexMatrix& fill (const FloatComplex& val);
+  OCTAVE_API FloatComplexMatrix&
+  fill (float val, octave_idx_type r1, octave_idx_type c1,
+        octave_idx_type r2, octave_idx_type c2);
+  OCTAVE_API FloatComplexMatrix&
+  fill (const FloatComplex& val, octave_idx_type r1, octave_idx_type c1,
+        octave_idx_type r2, octave_idx_type c2);
 
-  FloatComplexMatrix append (const FloatMatrix& a) const;
-  FloatComplexMatrix append (const FloatRowVector& a) const;
-  FloatComplexMatrix append (const FloatColumnVector& a) const;
-  FloatComplexMatrix append (const FloatDiagMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix append (const FloatMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix append (const FloatRowVector& a) const;
+  OCTAVE_API FloatComplexMatrix append (const FloatColumnVector& a) const;
+  OCTAVE_API FloatComplexMatrix append (const FloatDiagMatrix& a) const;
 
-  FloatComplexMatrix append (const FloatComplexMatrix& a) const;
-  FloatComplexMatrix append (const FloatComplexRowVector& a) const;
-  FloatComplexMatrix append (const FloatComplexColumnVector& a) const;
-  FloatComplexMatrix append (const FloatComplexDiagMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix append (const FloatComplexMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix append (const FloatComplexRowVector& a) const;
+  OCTAVE_API FloatComplexMatrix
+  append (const FloatComplexColumnVector& a) const;
+  OCTAVE_API FloatComplexMatrix append (const FloatComplexDiagMatrix& a) const;
 
-  FloatComplexMatrix stack (const FloatMatrix& a) const;
-  FloatComplexMatrix stack (const FloatRowVector& a) const;
-  FloatComplexMatrix stack (const FloatColumnVector& a) const;
-  FloatComplexMatrix stack (const FloatDiagMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatRowVector& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatColumnVector& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatDiagMatrix& a) const;
 
-  FloatComplexMatrix stack (const FloatComplexMatrix& a) const;
-  FloatComplexMatrix stack (const FloatComplexRowVector& a) const;
-  FloatComplexMatrix stack (const FloatComplexColumnVector& a) const;
-  FloatComplexMatrix stack (const FloatComplexDiagMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatComplexMatrix& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatComplexRowVector& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatComplexColumnVector& a) const;
+  OCTAVE_API FloatComplexMatrix stack (const FloatComplexDiagMatrix& a) const;
 
   FloatComplexMatrix hermitian (void) const
   { return MArray<FloatComplex>::hermitian (std::conj); }
@@ -179,17 +184,19 @@
 
   // resize is the destructive equivalent for this one
 
-  FloatComplexMatrix extract (octave_idx_type r1, octave_idx_type c1,
-                              octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API FloatComplexMatrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
-  FloatComplexMatrix extract_n (octave_idx_type r1, octave_idx_type c1,
-                                octave_idx_type nr, octave_idx_type nc) const;
+  OCTAVE_API FloatComplexMatrix
+  extract_n (octave_idx_type r1, octave_idx_type c1,
+             octave_idx_type nr, octave_idx_type nc) const;
 
   // extract row or column i.
 
-  FloatComplexRowVector row (octave_idx_type i) const;
+  OCTAVE_API FloatComplexRowVector row (octave_idx_type i) const;
 
-  FloatComplexColumnVector column (octave_idx_type i) const;
+  OCTAVE_API FloatComplexColumnVector column (octave_idx_type i) const;
 
   void resize (octave_idx_type nr, octave_idx_type nc,
                const FloatComplex& rfv = FloatComplex (0))
@@ -205,34 +212,38 @@
                                float& rcon, bool force, bool calc_cond) const;
 
 public:
-  FloatComplexMatrix inverse (void) const;
-  FloatComplexMatrix inverse (octave_idx_type& info) const;
-  FloatComplexMatrix inverse (octave_idx_type& info, float& rcon,
-                              bool force = false, bool calc_cond = true) const;
+  OCTAVE_API FloatComplexMatrix inverse (void) const;
+  OCTAVE_API FloatComplexMatrix inverse (octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  inverse (octave_idx_type& info, float& rcon, bool force = false,
+           bool calc_cond = true) const;
 
-  FloatComplexMatrix inverse (MatrixType& mattype) const;
-  FloatComplexMatrix inverse (MatrixType& mattype, octave_idx_type& info) const;
-  FloatComplexMatrix inverse (MatrixType& mattype, octave_idx_type& info,
-                              float& rcon, bool force = false,
-                              bool calc_cond = true) const;
+  OCTAVE_API FloatComplexMatrix inverse (MatrixType& mattype) const;
+  OCTAVE_API FloatComplexMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info, float& rcon,
+           bool force = false, bool calc_cond = true) const;
 
-  FloatComplexMatrix pseudo_inverse (float tol = 0.0) const;
+  OCTAVE_API FloatComplexMatrix pseudo_inverse (float tol = 0.0) const;
 
-  FloatComplexMatrix fourier (void) const;
-  FloatComplexMatrix ifourier (void) const;
+  OCTAVE_API FloatComplexMatrix fourier (void) const;
+  OCTAVE_API FloatComplexMatrix ifourier (void) const;
 
-  FloatComplexMatrix fourier2d (void) const;
-  FloatComplexMatrix ifourier2d (void) const;
+  OCTAVE_API FloatComplexMatrix fourier2d (void) const;
+  OCTAVE_API FloatComplexMatrix ifourier2d (void) const;
 
-  FloatComplexDET determinant (void) const;
-  FloatComplexDET determinant (octave_idx_type& info) const;
-  FloatComplexDET determinant (octave_idx_type& info, float& rcon,
-                               bool calc_cond = true) const;
-  FloatComplexDET determinant (MatrixType& mattype, octave_idx_type& info,
-                               float& rcon, bool calc_cond = true) const;
+  OCTAVE_API FloatComplexDET determinant (void) const;
+  OCTAVE_API FloatComplexDET determinant (octave_idx_type& info) const;
+  OCTAVE_API FloatComplexDET
+  determinant (octave_idx_type& info, float& rcon,
+               bool calc_cond = true) const;
+  OCTAVE_API FloatComplexDET
+  determinant (MatrixType& mattype, octave_idx_type& info,
+               float& rcon, bool calc_cond = true) const;
 
-  float rcond (void) const;
-  float rcond (MatrixType& mattype) const;
+  OCTAVE_API float rcond (void) const;
+  OCTAVE_API float rcond (MatrixType& mattype) const;
 
 private:
   // Upper triangular matrix solvers
@@ -257,187 +268,208 @@
 
 public:
   // Generic interface to solver with no probing of type
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatMatrix& b) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatMatrix& b,
-                            octave_idx_type& info) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatMatrix& b,
-                            octave_idx_type& info, float& rcon) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatMatrix& b,
-                            octave_idx_type& info,
-                            float& rcon, solve_singularity_handler sing_handler,
-                            bool singular_fallback = true,
-                            blas_trans_type transt = blas_no_trans) const;
-
-  FloatComplexMatrix solve (MatrixType& mattype,
-                            const FloatComplexMatrix& b) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatComplexMatrix& b,
-                            octave_idx_type& info) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatComplexMatrix& b,
-                            octave_idx_type& info, float& rcon) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatComplexMatrix& b,
-                            octave_idx_type& info, float& rcon,
-                            solve_singularity_handler sing_handler,
-                            bool singular_fallback = true,
-                            blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b, octave_idx_type& info,
+         float& rcon) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b, octave_idx_type& info,
+         float& rcon, solve_singularity_handler sing_handler,
+         bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatColumnVector& b) const;
-  FloatComplexColumnVector solve (MatrixType& mattype, const FloatColumnVector& b,
-                                  octave_idx_type& info) const;
-  FloatComplexColumnVector solve (MatrixType& mattype, const FloatColumnVector& b,
-                                  octave_idx_type& info, float& rcon) const;
-  FloatComplexColumnVector solve (MatrixType& mattype, const FloatColumnVector& b,
-                                  octave_idx_type& info, float& rcon,
-                                  solve_singularity_handler sing_handler,
-                                  blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b,
+         octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b,
+         octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b) const;
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b,
-                                  octave_idx_type& info) const;
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b,
-                                  octave_idx_type& info, float& rcon) const;
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b,
-                                  octave_idx_type& info, float& rcon,
-                                  solve_singularity_handler sing_handler,
-                                  blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b,
+         octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b,
+         octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
+
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b,
+         octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b,
+         octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
   // Generic interface to solver with probing of type
-  FloatComplexMatrix solve (const FloatMatrix& b) const;
-  FloatComplexMatrix solve (const FloatMatrix& b, octave_idx_type& info) const;
-  FloatComplexMatrix solve (const FloatMatrix& b, octave_idx_type& info,
-                            float& rcon) const;
-  FloatComplexMatrix solve (const FloatMatrix& b, octave_idx_type& info,
-                            float& rcon,
-                            solve_singularity_handler sing_handler,
-                            blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexMatrix solve (const FloatMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatMatrix& b, octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatMatrix& b, octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexMatrix solve (const FloatComplexMatrix& b) const;
-  FloatComplexMatrix solve (const FloatComplexMatrix& b,
-                            octave_idx_type& info) const;
-  FloatComplexMatrix solve (const FloatComplexMatrix& b, octave_idx_type& info,
-                            float& rcon) const;
-  FloatComplexMatrix solve (const FloatComplexMatrix& b, octave_idx_type& info,
-                            float& rcon,
-                            solve_singularity_handler sing_handler,
-                            blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexMatrix solve (const FloatComplexMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatComplexMatrix& b, octave_idx_type& info,
+         float& rcon) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatComplexMatrix& b, octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexColumnVector solve (const FloatColumnVector& b) const;
-  FloatComplexColumnVector solve (const FloatColumnVector& b,
-                                  octave_idx_type& info) const;
-  FloatComplexColumnVector solve (const FloatColumnVector& b,
-                                  octave_idx_type& info,
-                                  float& rcon) const;
-  FloatComplexColumnVector solve (const FloatColumnVector& b,
-                                  octave_idx_type& info, float& rcon,
-                                  solve_singularity_handler sing_handler,
-                                  blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexColumnVector solve (const FloatColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatColumnVector& b, octave_idx_type& info,
+         float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatColumnVector& b, octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b) const;
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b,
-                                  octave_idx_type& info) const;
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b,
-                                  octave_idx_type& info,
-                                  float& rcon) const;
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b,
-                                  octave_idx_type& info,
-                                  float& rcon,
-                                  solve_singularity_handler sing_handler,
-                                  blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b, octave_idx_type& info,
+         float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b, octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexMatrix lssolve (const FloatMatrix& b) const;
-  FloatComplexMatrix lssolve (const FloatMatrix& b,
-                              octave_idx_type& info) const;
-  FloatComplexMatrix lssolve (const FloatMatrix& b, octave_idx_type& info,
-                              octave_idx_type& rank) const;
-  FloatComplexMatrix lssolve (const FloatMatrix& b, octave_idx_type& info,
-                              octave_idx_type& rank, float& rcon) const;
+  OCTAVE_API FloatComplexMatrix lssolve (const FloatMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatMatrix& b, octave_idx_type& info, octave_idx_type& rank) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatMatrix& b, octave_idx_type& info, octave_idx_type& rank,
+           float& rcon) const;
 
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b) const;
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b,
-                              octave_idx_type& info) const;
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b,
-                              octave_idx_type& info, octave_idx_type& rank) const;
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b,
-                              octave_idx_type& info, octave_idx_type& rank, float& rcon) const;
+  OCTAVE_API FloatComplexMatrix lssolve (const FloatComplexMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatComplexMatrix& b, octave_idx_type& info,
+  octave_idx_type& rank) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatComplexMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank, float& rcon) const;
 
-  FloatComplexColumnVector lssolve (const FloatColumnVector& b) const;
-  FloatComplexColumnVector lssolve (const FloatColumnVector& b,
-                                    octave_idx_type& info) const;
-  FloatComplexColumnVector lssolve (const FloatColumnVector& b,
-                                    octave_idx_type& info,
-                                    octave_idx_type& rank) const;
-  FloatComplexColumnVector lssolve (const FloatColumnVector& b,
-                                    octave_idx_type& info,
-                                    octave_idx_type& rank, float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, float& rcon) const;
 
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b) const;
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b,
-                                    octave_idx_type& info) const;
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b,
-                                    octave_idx_type& info,
-                                    octave_idx_type& rank) const;
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b,
-                                    octave_idx_type& info,
-                                    octave_idx_type& rank, float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, float& rcon) const;
 
   // matrix by diagonal matrix -> matrix operations
 
-  FloatComplexMatrix& operator += (const FloatDiagMatrix& a);
-  FloatComplexMatrix& operator -= (const FloatDiagMatrix& a);
+  OCTAVE_API FloatComplexMatrix& operator += (const FloatDiagMatrix& a);
+  OCTAVE_API FloatComplexMatrix& operator -= (const FloatDiagMatrix& a);
 
-  FloatComplexMatrix& operator += (const FloatComplexDiagMatrix& a);
-  FloatComplexMatrix& operator -= (const FloatComplexDiagMatrix& a);
+  OCTAVE_API FloatComplexMatrix& operator += (const FloatComplexDiagMatrix& a);
+  OCTAVE_API FloatComplexMatrix& operator -= (const FloatComplexDiagMatrix& a);
 
   // matrix by matrix -> matrix operations
 
-  FloatComplexMatrix& operator += (const FloatMatrix& a);
-  FloatComplexMatrix& operator -= (const FloatMatrix& a);
+  OCTAVE_API FloatComplexMatrix& operator += (const FloatMatrix& a);
+  OCTAVE_API FloatComplexMatrix& operator -= (const FloatMatrix& a);
 
   // unary operations
 
-  boolMatrix operator ! (void) const;
+  OCTAVE_API boolMatrix operator ! (void) const;
 
   // other operations
 
-  boolMatrix all (int dim = -1) const;
-  boolMatrix any (int dim = -1) const;
+  OCTAVE_API boolMatrix all (int dim = -1) const;
+  OCTAVE_API boolMatrix any (int dim = -1) const;
 
-  FloatComplexMatrix cumprod (int dim = -1) const;
-  FloatComplexMatrix cumsum (int dim = -1) const;
-  FloatComplexMatrix prod (int dim = -1) const;
-  FloatComplexMatrix sum (int dim = -1) const;
-  FloatComplexMatrix sumsq (int dim = -1) const;
-  FloatMatrix abs (void) const;
+  OCTAVE_API FloatComplexMatrix cumprod (int dim = -1) const;
+  OCTAVE_API FloatComplexMatrix cumsum (int dim = -1) const;
+  OCTAVE_API FloatComplexMatrix prod (int dim = -1) const;
+  OCTAVE_API FloatComplexMatrix sum (int dim = -1) const;
+  OCTAVE_API FloatComplexMatrix sumsq (int dim = -1) const;
+  OCTAVE_API FloatMatrix abs (void) const;
 
-  FloatComplexMatrix diag (octave_idx_type k = 0) const;
+  OCTAVE_API FloatComplexMatrix diag (octave_idx_type k = 0) const;
 
-  FloatComplexDiagMatrix diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API FloatComplexDiagMatrix
+  diag (octave_idx_type m, octave_idx_type n) const;
 
-  bool row_is_real_only (octave_idx_type) const;
-  bool column_is_real_only (octave_idx_type) const;
+  OCTAVE_API bool row_is_real_only (octave_idx_type) const;
+  OCTAVE_API bool column_is_real_only (octave_idx_type) const;
 
-  FloatComplexColumnVector row_min (void) const;
-  FloatComplexColumnVector row_max (void) const;
+  OCTAVE_API FloatComplexColumnVector row_min (void) const;
+  OCTAVE_API FloatComplexColumnVector row_max (void) const;
 
-  FloatComplexColumnVector row_min (Array<octave_idx_type>& index) const;
-  FloatComplexColumnVector row_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatComplexColumnVector
+  row_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatComplexColumnVector
+  row_max (Array<octave_idx_type>& index) const;
 
-  FloatComplexRowVector column_min (void) const;
-  FloatComplexRowVector column_max (void) const;
+  OCTAVE_API FloatComplexRowVector column_min (void) const;
+  OCTAVE_API FloatComplexRowVector column_max (void) const;
 
-  FloatComplexRowVector column_min (Array<octave_idx_type>& index) const;
-  FloatComplexRowVector column_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatComplexRowVector
+  column_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatComplexRowVector
+  column_max (Array<octave_idx_type>& index) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const FloatComplexMatrix& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is,
-                                               FloatComplexMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatComplexMatrix& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, FloatComplexMatrix& a);
 };
 
 extern OCTAVE_API FloatComplexMatrix conj (const FloatComplexMatrix& a);
--- a/liboctave/array/fCNDArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fCNDArray.h	Mon May 10 23:27:38 2021 +0200
@@ -55,7 +55,7 @@
   template <typename U>
   FloatComplexNDArray (const Array<U>& a) : MArray<FloatComplex> (a) { }
 
-  FloatComplexNDArray (const charNDArray&);
+  OCTAVE_API FloatComplexNDArray (const charNDArray&);
 
   FloatComplexNDArray& operator = (const FloatComplexNDArray& a)
   {
@@ -65,77 +65,80 @@
 
   // unary operations
 
-  boolNDArray operator ! (void) const;
+  OCTAVE_API boolNDArray operator ! (void) const;
 
   // FIXME: this is not quite the right thing.
 
-  bool any_element_is_nan (void) const;
-  bool any_element_is_inf_or_nan (void) const;
-  bool all_elements_are_real (void) const;
-  bool all_integers (float& max_val, float& min_val) const;
-  bool too_large_for_float (void) const;
+  OCTAVE_API bool any_element_is_nan (void) const;
+  OCTAVE_API bool any_element_is_inf_or_nan (void) const;
+  OCTAVE_API bool all_elements_are_real (void) const;
+  OCTAVE_API bool all_integers (float& max_val, float& min_val) const;
+  OCTAVE_API bool too_large_for_float (void) const;
 
-  boolNDArray all (int dim = -1) const;
-  boolNDArray any (int dim = -1) const;
+  OCTAVE_API boolNDArray all (int dim = -1) const;
+  OCTAVE_API boolNDArray any (int dim = -1) const;
 
-  FloatComplexNDArray cumprod (int dim = -1) const;
-  FloatComplexNDArray cumsum (int dim = -1) const;
-  FloatComplexNDArray prod (int dim = -1) const;
-  ComplexNDArray dprod (int dim = -1) const;
-  FloatComplexNDArray sum (int dim = -1) const;
-  ComplexNDArray dsum (int dim = -1) const;
-  FloatComplexNDArray sumsq (int dim = -1) const;
-  FloatComplexNDArray concat (const FloatComplexNDArray& rb,
-                              const Array<octave_idx_type>& ra_idx);
-  FloatComplexNDArray concat (const FloatNDArray& rb,
-                              const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API FloatComplexNDArray cumprod (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray cumsum (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray prod (int dim = -1) const;
+  OCTAVE_API ComplexNDArray dprod (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray sum (int dim = -1) const;
+  OCTAVE_API ComplexNDArray dsum (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray sumsq (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray
+  concat (const FloatComplexNDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API FloatComplexNDArray
+  concat (const FloatNDArray& rb, const Array<octave_idx_type>& ra_idx);
 
-  FloatComplexNDArray max (int dim = -1) const;
-  FloatComplexNDArray max (Array<octave_idx_type>& index, int dim = -1) const;
-  FloatComplexNDArray min (int dim = -1) const;
-  FloatComplexNDArray min (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray max (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray
+  max (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray min (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray
+  min (Array<octave_idx_type>& index, int dim = -1) const;
 
-  FloatComplexNDArray cummax (int dim = -1) const;
-  FloatComplexNDArray cummax (Array<octave_idx_type>& index,
-                              int dim = -1) const;
-  FloatComplexNDArray cummin (int dim = -1) const;
-  FloatComplexNDArray cummin (Array<octave_idx_type>& index,
-                              int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray cummax (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray
+  cummax (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray cummin (int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray
+  cummin (Array<octave_idx_type>& index, int dim = -1) const;
 
-  FloatComplexNDArray diff (octave_idx_type order = 1, int dim = -1) const;
+  OCTAVE_API FloatComplexNDArray
+  diff (octave_idx_type order = 1, int dim = -1) const;
 
-  FloatComplexNDArray& insert (const NDArray& a,
-                               octave_idx_type r, octave_idx_type c);
-  FloatComplexNDArray& insert (const FloatComplexNDArray& a,
-                               octave_idx_type r, octave_idx_type c);
-  FloatComplexNDArray& insert (const FloatComplexNDArray& a,
-                               const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API FloatComplexNDArray&
+  insert (const NDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexNDArray&
+  insert (const FloatComplexNDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatComplexNDArray&
+  insert (const FloatComplexNDArray& a, const Array<octave_idx_type>& ra_idx);
 
-  FloatNDArray abs (void) const;
-  boolNDArray isnan (void) const;
-  boolNDArray isinf (void) const;
-  boolNDArray isfinite (void) const;
+  OCTAVE_API FloatNDArray abs (void) const;
+  OCTAVE_API boolNDArray isnan (void) const;
+  OCTAVE_API boolNDArray isinf (void) const;
+  OCTAVE_API boolNDArray isfinite (void) const;
 
   friend OCTAVE_API FloatComplexNDArray conj (const FloatComplexNDArray& a);
 
-  FloatComplexNDArray fourier (int dim = 1) const;
-  FloatComplexNDArray ifourier (int dim = 1) const;
+  OCTAVE_API FloatComplexNDArray fourier (int dim = 1) const;
+  OCTAVE_API FloatComplexNDArray ifourier (int dim = 1) const;
 
-  FloatComplexNDArray fourier2d (void) const;
-  FloatComplexNDArray ifourier2d (void) const;
+  OCTAVE_API FloatComplexNDArray fourier2d (void) const;
+  OCTAVE_API FloatComplexNDArray ifourier2d (void) const;
 
-  FloatComplexNDArray fourierNd (void) const;
-  FloatComplexNDArray ifourierNd (void) const;
+  OCTAVE_API FloatComplexNDArray fourierNd (void) const;
+  OCTAVE_API FloatComplexNDArray ifourierNd (void) const;
 
   FloatComplexNDArray squeeze (void) const
   { return MArray<FloatComplex>::squeeze (); }
 
-  static void increment_index (Array<octave_idx_type>& ra_idx,
-                               const dim_vector& dimensions,
-                               int start_dimension = 0);
+  static OCTAVE_API void
+  increment_index (Array<octave_idx_type>& ra_idx,
+                   const dim_vector& dimensions, int start_dimension = 0);
 
-  static octave_idx_type compute_index (Array<octave_idx_type>& ra_idx,
-                                        const dim_vector& dimensions);
+  static OCTAVE_API octave_idx_type
+  compute_index (Array<octave_idx_type>& ra_idx, const dim_vector& dimensions);
 
   // i/o
 
@@ -147,9 +150,10 @@
   //  bool all_elements_are_real (void) const;
   //  bool all_integers (float& max_val, float& min_val) const;
 
-  FloatComplexNDArray diag (octave_idx_type k = 0) const;
+  OCTAVE_API FloatComplexNDArray diag (octave_idx_type k = 0) const;
 
-  FloatComplexNDArray diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API FloatComplexNDArray
+  diag (octave_idx_type m, octave_idx_type n) const;
 
   FloatComplexNDArray& changesign (void)
   {
--- a/liboctave/array/fCRowVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fCRowVector.h	Mon May 10 23:27:38 2021 +0200
@@ -70,60 +70,65 @@
     return *this;
   }
 
-  bool operator == (const FloatComplexRowVector& a) const;
-  bool operator != (const FloatComplexRowVector& a) const;
+  OCTAVE_API bool operator == (const FloatComplexRowVector& a) const;
+  OCTAVE_API bool operator != (const FloatComplexRowVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  FloatComplexRowVector& insert (const FloatRowVector& a, octave_idx_type c);
-  FloatComplexRowVector& insert (const FloatComplexRowVector& a,
-                                 octave_idx_type c);
+  OCTAVE_API FloatComplexRowVector&
+  insert (const FloatRowVector& a, octave_idx_type c);
+  OCTAVE_API FloatComplexRowVector&
+  insert (const FloatComplexRowVector& a, octave_idx_type c);
 
-  FloatComplexRowVector& fill (float val);
-  FloatComplexRowVector& fill (const FloatComplex& val);
-  FloatComplexRowVector& fill (float val,
-                               octave_idx_type c1, octave_idx_type c2);
-  FloatComplexRowVector& fill (const FloatComplex& val,
-                               octave_idx_type c1, octave_idx_type c2);
+  OCTAVE_API FloatComplexRowVector& fill (float val);
+  OCTAVE_API FloatComplexRowVector& fill (const FloatComplex& val);
+  OCTAVE_API FloatComplexRowVector&
+  fill (float val, octave_idx_type c1, octave_idx_type c2);
+  OCTAVE_API FloatComplexRowVector&
+  fill (const FloatComplex& val, octave_idx_type c1, octave_idx_type c2);
 
-  FloatComplexRowVector append (const FloatRowVector& a) const;
-  FloatComplexRowVector append (const FloatComplexRowVector& a) const;
+  OCTAVE_API FloatComplexRowVector append (const FloatRowVector& a) const;
+  OCTAVE_API FloatComplexRowVector
+  append (const FloatComplexRowVector& a) const;
 
-  FloatComplexColumnVector hermitian (void) const;
-  FloatComplexColumnVector transpose (void) const;
+  OCTAVE_API FloatComplexColumnVector hermitian (void) const;
+  OCTAVE_API FloatComplexColumnVector transpose (void) const;
 
-  friend FloatComplexRowVector conj (const FloatComplexRowVector& a);
+  friend OCTAVE_API FloatComplexRowVector
+  conj (const FloatComplexRowVector& a);
 
   // resize is the destructive equivalent for this one
 
-  FloatComplexRowVector extract (octave_idx_type c1, octave_idx_type c2) const;
+  OCTAVE_API FloatComplexRowVector
+  extract (octave_idx_type c1, octave_idx_type c2) const;
 
-  FloatComplexRowVector extract_n (octave_idx_type c1, octave_idx_type n) const;
+  OCTAVE_API FloatComplexRowVector
+  extract_n (octave_idx_type c1, octave_idx_type n) const;
 
   // row vector by row vector -> row vector operations
 
-  FloatComplexRowVector& operator += (const FloatRowVector& a);
-  FloatComplexRowVector& operator -= (const FloatRowVector& a);
+  OCTAVE_API FloatComplexRowVector& operator += (const FloatRowVector& a);
+  OCTAVE_API FloatComplexRowVector& operator -= (const FloatRowVector& a);
 
   // row vector by matrix -> row vector
 
-  friend FloatComplexRowVector operator * (const FloatComplexRowVector& a,
-      const FloatComplexMatrix& b);
+  friend OCTAVE_API FloatComplexRowVector
+  operator * (const FloatComplexRowVector& a, const FloatComplexMatrix& b);
 
-  friend FloatComplexRowVector operator * (const FloatRowVector& a,
-      const FloatComplexMatrix& b);
+  friend OCTAVE_API FloatComplexRowVector
+  operator * (const FloatRowVector& a, const FloatComplexMatrix& b);
 
   // other operations
 
-  FloatComplex min (void) const;
-  FloatComplex max (void) const;
+  OCTAVE_API FloatComplex min (void) const;
+  OCTAVE_API FloatComplex max (void) const;
 
   // i/o
 
-  friend std::ostream& operator << (std::ostream& os,
-                                    const FloatComplexRowVector& a);
-  friend std::istream& operator >> (std::istream& is,
-                                    FloatComplexRowVector& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatComplexRowVector& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, FloatComplexRowVector& a);
 
   void resize (octave_idx_type n, const FloatComplex& rfv = FloatComplex (0))
   {
@@ -137,16 +142,16 @@
 
 // row vector by column vector -> scalar
 
-FloatComplex OCTAVE_API operator * (const FloatComplexRowVector& a,
-                                    const ColumnVector& b);
+OCTAVE_API FloatComplex
+operator * (const FloatComplexRowVector& a, const ColumnVector& b);
 
-FloatComplex OCTAVE_API operator * (const FloatComplexRowVector& a,
-                                    const FloatComplexColumnVector& b);
+OCTAVE_API FloatComplex
+operator * (const FloatComplexRowVector& a, const FloatComplexColumnVector& b);
 
 // other operations
 
-OCTAVE_API FloatComplexRowVector linspace (const FloatComplex& x1,
-    const FloatComplex& x2, octave_idx_type n);
+OCTAVE_API FloatComplexRowVector
+linspace (const FloatComplex& x1, const FloatComplex& x2, octave_idx_type n);
 
 MARRAY_FORWARD_DEFS (MArray, FloatComplexRowVector, FloatComplex)
 
--- a/liboctave/array/fColVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fColVector.h	Mon May 10 23:27:38 2021 +0200
@@ -62,52 +62,56 @@
     return *this;
   }
 
-  bool operator == (const FloatColumnVector& a) const;
-  bool operator != (const FloatColumnVector& a) const;
+  OCTAVE_API bool operator == (const FloatColumnVector& a) const;
+  OCTAVE_API bool operator != (const FloatColumnVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  FloatColumnVector& insert (const FloatColumnVector& a, octave_idx_type r);
+  OCTAVE_API FloatColumnVector&
+  insert (const FloatColumnVector& a, octave_idx_type r);
 
-  FloatColumnVector& fill (float val);
-  FloatColumnVector& fill (float val, octave_idx_type r1, octave_idx_type r2);
+  OCTAVE_API FloatColumnVector& fill (float val);
+  OCTAVE_API FloatColumnVector&
+  fill (float val, octave_idx_type r1, octave_idx_type r2);
 
-  FloatColumnVector stack (const FloatColumnVector& a) const;
+  OCTAVE_API FloatColumnVector stack (const FloatColumnVector& a) const;
 
-  FloatRowVector transpose (void) const;
+  OCTAVE_API FloatRowVector transpose (void) const;
 
   friend OCTAVE_API FloatColumnVector real (const FloatComplexColumnVector& a);
   friend OCTAVE_API FloatColumnVector imag (const FloatComplexColumnVector& a);
 
   // resize is the destructive equivalent for this one
 
-  FloatColumnVector extract (octave_idx_type r1, octave_idx_type r2) const;
+  OCTAVE_API FloatColumnVector
+  extract (octave_idx_type r1, octave_idx_type r2) const;
 
-  FloatColumnVector extract_n (octave_idx_type r1, octave_idx_type n) const;
+  OCTAVE_API FloatColumnVector
+  extract_n (octave_idx_type r1, octave_idx_type n) const;
 
   // matrix by column vector -> column vector operations
 
-  friend OCTAVE_API FloatColumnVector operator * (const FloatMatrix& a,
-                                                  const FloatColumnVector& b);
+  friend OCTAVE_API FloatColumnVector
+  operator * (const FloatMatrix& a, const FloatColumnVector& b);
 
   // diagonal matrix by column vector -> column vector operations
 
-  friend OCTAVE_API FloatColumnVector operator * (const FloatDiagMatrix& a,
-                                                  const FloatColumnVector& b);
+  friend OCTAVE_API FloatColumnVector
+  operator * (const FloatDiagMatrix& a, const FloatColumnVector& b);
 
   // other operations
 
-  float min (void) const;
-  float max (void) const;
+  OCTAVE_API float min (void) const;
+  OCTAVE_API float max (void) const;
 
-  FloatColumnVector abs (void) const;
+  OCTAVE_API FloatColumnVector abs (void) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const FloatColumnVector& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is,
-                                               FloatColumnVector& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatColumnVector& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, FloatColumnVector& a);
 
   void resize (octave_idx_type n, const float& rfv = 0)
   {
--- a/liboctave/array/fDiagMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fDiagMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -66,53 +66,57 @@
   FloatDiagMatrix (const Array<float>& a, octave_idx_type r, octave_idx_type c)
     : MDiagArray2<float> (a, r, c) { }
 
-  bool operator == (const FloatDiagMatrix& a) const;
-  bool operator != (const FloatDiagMatrix& a) const;
+  OCTAVE_API bool operator == (const FloatDiagMatrix& a) const;
+  OCTAVE_API bool operator != (const FloatDiagMatrix& a) const;
 
-  FloatDiagMatrix& fill (float val);
-  FloatDiagMatrix& fill (float val, octave_idx_type beg, octave_idx_type end);
-  FloatDiagMatrix& fill (const FloatColumnVector& a);
-  FloatDiagMatrix& fill (const FloatRowVector& a);
-  FloatDiagMatrix& fill (const FloatColumnVector& a, octave_idx_type beg);
-  FloatDiagMatrix& fill (const FloatRowVector& a, octave_idx_type beg);
+  OCTAVE_API FloatDiagMatrix& fill (float val);
+  OCTAVE_API FloatDiagMatrix&
+  fill (float val, octave_idx_type beg, octave_idx_type end);
+  OCTAVE_API FloatDiagMatrix& fill (const FloatColumnVector& a);
+  OCTAVE_API FloatDiagMatrix& fill (const FloatRowVector& a);
+  OCTAVE_API FloatDiagMatrix&
+  fill (const FloatColumnVector& a, octave_idx_type beg);
+  OCTAVE_API FloatDiagMatrix&
+  fill (const FloatRowVector& a, octave_idx_type beg);
 
   FloatDiagMatrix transpose (void) const
   { return MDiagArray2<float>::transpose (); }
 
-  FloatDiagMatrix abs (void) const;
+  OCTAVE_API FloatDiagMatrix abs (void) const;
 
   friend OCTAVE_API FloatDiagMatrix real (const FloatComplexDiagMatrix& a);
   friend OCTAVE_API FloatDiagMatrix imag (const FloatComplexDiagMatrix& a);
 
   // resize is the destructive analog for this one
 
-  FloatMatrix extract (octave_idx_type r1, octave_idx_type c1,
-                       octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API FloatMatrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
   // extract row or column i.
 
-  FloatRowVector row (octave_idx_type i) const;
-  FloatRowVector row (char *s) const;
+  OCTAVE_API FloatRowVector row (octave_idx_type i) const;
+  OCTAVE_API FloatRowVector row (char *s) const;
 
-  FloatColumnVector column (octave_idx_type i) const;
-  FloatColumnVector column (char *s) const;
+  OCTAVE_API FloatColumnVector column (octave_idx_type i) const;
+  OCTAVE_API FloatColumnVector column (char *s) const;
 
-  FloatDiagMatrix inverse (void) const;
-  FloatDiagMatrix inverse (octave_idx_type& info) const;
-  FloatDiagMatrix pseudo_inverse (float tol = 0.0f) const;
+  OCTAVE_API FloatDiagMatrix inverse (void) const;
+  OCTAVE_API FloatDiagMatrix inverse (octave_idx_type& info) const;
+  OCTAVE_API FloatDiagMatrix pseudo_inverse (float tol = 0.0f) const;
 
   // other operations
 
   FloatColumnVector extract_diag (octave_idx_type k = 0) const
   { return MDiagArray2<float>::extract_diag (k); }
 
-  FloatDET determinant (void) const;
-  float rcond (void) const;
+  OCTAVE_API FloatDET determinant (void) const;
+  OCTAVE_API float rcond (void) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const FloatDiagMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatDiagMatrix& a);
 
 };
 
@@ -121,8 +125,8 @@
 
 // diagonal matrix by diagonal matrix -> diagonal matrix operations
 
-OCTAVE_API FloatDiagMatrix operator * (const FloatDiagMatrix& a,
-                                       const FloatDiagMatrix& b);
+OCTAVE_API FloatDiagMatrix
+operator * (const FloatDiagMatrix& a, const FloatDiagMatrix& b);
 
 MDIAGARRAY2_FORWARD_DEFS (MDiagArray2, FloatDiagMatrix, float)
 
--- a/liboctave/array/fMatrix.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fMatrix.h	Mon May 10 23:27:38 2021 +0200
@@ -84,51 +84,52 @@
   template <typename U>
   FloatMatrix (const Array<U>& a) : FloatNDArray (a.as_matrix ()) { }
 
-  explicit FloatMatrix (const FloatRowVector& rv);
+  explicit OCTAVE_API FloatMatrix (const FloatRowVector& rv);
 
-  explicit FloatMatrix (const FloatColumnVector& cv);
+  explicit OCTAVE_API FloatMatrix (const FloatColumnVector& cv);
 
-  explicit FloatMatrix (const FloatDiagMatrix& a);
+  explicit OCTAVE_API FloatMatrix (const FloatDiagMatrix& a);
 
-  explicit FloatMatrix (const MDiagArray2<float>& a);
+  explicit OCTAVE_API FloatMatrix (const MDiagArray2<float>& a);
 
-  explicit FloatMatrix (const DiagArray2<float>& a);
+  explicit OCTAVE_API FloatMatrix (const DiagArray2<float>& a);
 
-  explicit FloatMatrix (const PermMatrix& a);
+  explicit OCTAVE_API FloatMatrix (const PermMatrix& a);
 
-  explicit FloatMatrix (const boolMatrix& a);
+  explicit OCTAVE_API FloatMatrix (const boolMatrix& a);
 
-  explicit FloatMatrix (const charMatrix& a);
+  explicit OCTAVE_API FloatMatrix (const charMatrix& a);
 
-  bool operator == (const FloatMatrix& a) const;
-  bool operator != (const FloatMatrix& a) const;
+  OCTAVE_API bool operator == (const FloatMatrix& a) const;
+  OCTAVE_API bool operator != (const FloatMatrix& a) const;
 
-  bool issymmetric (void) const;
+  OCTAVE_API bool issymmetric (void) const;
 
   // destructive insert/delete/reorder operations
 
-  FloatMatrix& insert (const FloatMatrix& a,
-                       octave_idx_type r, octave_idx_type c);
-  FloatMatrix& insert (const FloatRowVector& a,
-                       octave_idx_type r, octave_idx_type c);
-  FloatMatrix& insert (const FloatColumnVector& a,
-                       octave_idx_type r, octave_idx_type c);
-  FloatMatrix& insert (const FloatDiagMatrix& a,
-                       octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatMatrix&
+  insert (const FloatMatrix& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatMatrix&
+  insert (const FloatRowVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatMatrix&
+  insert (const FloatColumnVector& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatMatrix&
+  insert (const FloatDiagMatrix& a, octave_idx_type r, octave_idx_type c);
 
-  FloatMatrix& fill (float val);
-  FloatMatrix& fill (float val, octave_idx_type r1, octave_idx_type c1,
-                     octave_idx_type r2, octave_idx_type c2);
+  OCTAVE_API FloatMatrix& fill (float val);
+  OCTAVE_API FloatMatrix&
+  fill (float val, octave_idx_type r1, octave_idx_type c1,
+        octave_idx_type r2, octave_idx_type c2);
 
-  FloatMatrix append (const FloatMatrix& a) const;
-  FloatMatrix append (const FloatRowVector& a) const;
-  FloatMatrix append (const FloatColumnVector& a) const;
-  FloatMatrix append (const FloatDiagMatrix& a) const;
+  OCTAVE_API FloatMatrix append (const FloatMatrix& a) const;
+  OCTAVE_API FloatMatrix append (const FloatRowVector& a) const;
+  OCTAVE_API FloatMatrix append (const FloatColumnVector& a) const;
+  OCTAVE_API FloatMatrix append (const FloatDiagMatrix& a) const;
 
-  FloatMatrix stack (const FloatMatrix& a) const;
-  FloatMatrix stack (const FloatRowVector& a) const;
-  FloatMatrix stack (const FloatColumnVector& a) const;
-  FloatMatrix stack (const FloatDiagMatrix& a) const;
+  OCTAVE_API FloatMatrix stack (const FloatMatrix& a) const;
+  OCTAVE_API FloatMatrix stack (const FloatRowVector& a) const;
+  OCTAVE_API FloatMatrix stack (const FloatColumnVector& a) const;
+  OCTAVE_API FloatMatrix stack (const FloatDiagMatrix& a) const;
 
   friend OCTAVE_API FloatMatrix real (const FloatComplexMatrix& a);
   friend OCTAVE_API FloatMatrix imag (const FloatComplexMatrix& a);
@@ -140,17 +141,19 @@
 
   // resize is the destructive equivalent for this one
 
-  FloatMatrix extract (octave_idx_type r1, octave_idx_type c1,
-                       octave_idx_type r2, octave_idx_type c2) const;
+  OCTAVE_API FloatMatrix
+  extract (octave_idx_type r1, octave_idx_type c1,
+           octave_idx_type r2, octave_idx_type c2) const;
 
-  FloatMatrix extract_n (octave_idx_type r1, octave_idx_type c1,
-                         octave_idx_type nr, octave_idx_type nc) const;
+  OCTAVE_API FloatMatrix
+  extract_n (octave_idx_type r1, octave_idx_type c1,
+             octave_idx_type nr, octave_idx_type nc) const;
 
   // extract row or column i.
 
-  FloatRowVector row (octave_idx_type i) const;
+  OCTAVE_API FloatRowVector row (octave_idx_type i) const;
 
-  FloatColumnVector column (octave_idx_type i) const;
+  OCTAVE_API FloatColumnVector column (octave_idx_type i) const;
 
   void resize (octave_idx_type nr, octave_idx_type nc, float rfv = 0)
   {
@@ -165,33 +168,38 @@
                         float& rcon, bool force, bool calc_cond) const;
 
 public:
-  FloatMatrix inverse (void) const;
-  FloatMatrix inverse (octave_idx_type& info) const;
-  FloatMatrix inverse (octave_idx_type& info, float& rcon, bool force = false,
-                       bool calc_cond = true) const;
+  OCTAVE_API FloatMatrix inverse (void) const;
+  OCTAVE_API FloatMatrix inverse (octave_idx_type& info) const;
+  OCTAVE_API FloatMatrix
+  inverse (octave_idx_type& info, float& rcon, bool force = false,
+           bool calc_cond = true) const;
 
-  FloatMatrix inverse (MatrixType& mattype) const;
-  FloatMatrix inverse (MatrixType& mattype, octave_idx_type& info) const;
-  FloatMatrix inverse (MatrixType& mattype, octave_idx_type& info, float& rcon,
-                       bool force = false, bool calc_cond = true) const;
+  OCTAVE_API FloatMatrix inverse (MatrixType& mattype) const;
+  OCTAVE_API FloatMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info) const;
+  OCTAVE_API FloatMatrix
+  inverse (MatrixType& mattype, octave_idx_type& info, float& rcon,
+           bool force = false, bool calc_cond = true) const;
 
-  FloatMatrix pseudo_inverse (float tol = 0.0) const;
+  OCTAVE_API FloatMatrix pseudo_inverse (float tol = 0.0) const;
 
-  FloatComplexMatrix fourier (void) const;
-  FloatComplexMatrix ifourier (void) const;
+  OCTAVE_API FloatComplexMatrix fourier (void) const;
+  OCTAVE_API FloatComplexMatrix ifourier (void) const;
 
-  FloatComplexMatrix fourier2d (void) const;
-  FloatComplexMatrix ifourier2d (void) const;
+  OCTAVE_API FloatComplexMatrix fourier2d (void) const;
+  OCTAVE_API FloatComplexMatrix ifourier2d (void) const;
 
-  FloatDET determinant (void) const;
-  FloatDET determinant (octave_idx_type& info) const;
-  FloatDET determinant (octave_idx_type& info, float& rcon,
-                        bool calc_cond = true) const;
-  FloatDET determinant (MatrixType& mattype, octave_idx_type& info,
-                        float& rcon, bool calc_cond = true) const;
+  OCTAVE_API FloatDET determinant (void) const;
+  OCTAVE_API FloatDET determinant (octave_idx_type& info) const;
+  OCTAVE_API FloatDET
+  determinant (octave_idx_type& info, float& rcon,
+               bool calc_cond = true) const;
+  OCTAVE_API FloatDET
+  determinant (MatrixType& mattype, octave_idx_type& info, float& rcon,
+               bool calc_cond = true) const;
 
-  float rcond (void) const;
-  float rcond (MatrixType& mattype) const;
+  OCTAVE_API float rcond (void) const;
+  OCTAVE_API float rcond (MatrixType& mattype) const;
 
 private:
   // Upper triangular matrix solvers
@@ -216,162 +224,180 @@
 
 public:
   // Generic interface to solver with no probing of type
-  FloatMatrix solve (MatrixType& mattype, const FloatMatrix& b) const;
-  FloatMatrix solve (MatrixType& mattype, const FloatMatrix& b,
-                     octave_idx_type& info) const;
-  FloatMatrix solve (MatrixType& mattype, const FloatMatrix& b,
-                     octave_idx_type& info, float& rcon) const;
-  FloatMatrix solve (MatrixType& mattype, const FloatMatrix& b,
-                     octave_idx_type& info, float& rcon,
-                     solve_singularity_handler sing_handler,
-                     bool singular_fallback = true,
-                     blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b) const;
+  OCTAVE_API FloatMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b, octave_idx_type& info,
+         float& rcon) const;
+  OCTAVE_API FloatMatrix
+  solve (MatrixType& mattype, const FloatMatrix& b, octave_idx_type& info,
+         float& rcon, solve_singularity_handler sing_handler,
+         bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexMatrix solve (MatrixType& mattype,
-                            const FloatComplexMatrix& b) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatComplexMatrix& b,
-                            octave_idx_type& info) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatComplexMatrix& b,
-                            octave_idx_type& info, float& rcon) const;
-  FloatComplexMatrix solve (MatrixType& mattype, const FloatComplexMatrix& b,
-                            octave_idx_type& info, float& rcon,
-                            solve_singularity_handler sing_handler,
-                            bool singular_fallback = true,
-                            blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b,
+         octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (MatrixType& mattype, const FloatComplexMatrix& b,
+         octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler, bool singular_fallback = true,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatColumnVector solve (MatrixType& mattype, const FloatColumnVector& b) const;
-  FloatColumnVector solve (MatrixType& mattype, const FloatColumnVector& b,
-                           octave_idx_type& info) const;
-  FloatColumnVector solve (MatrixType& mattype, const FloatColumnVector& b,
-                           octave_idx_type& info, float& rcon) const;
-  FloatColumnVector solve (MatrixType& mattype, const FloatColumnVector& b,
-                           octave_idx_type& info, float& rcon,
-                           solve_singularity_handler sing_handler,
-                           blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b) const;
+  OCTAVE_API FloatColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b,
+         octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatColumnVector
+  solve (MatrixType& mattype, const FloatColumnVector& b,
+         octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b) const;
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b,
-                                  octave_idx_type& info) const;
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b,
-                                  octave_idx_type& info, float& rcon) const;
-  FloatComplexColumnVector solve (MatrixType& mattype,
-                                  const FloatComplexColumnVector& b,
-                                  octave_idx_type& info, float& rcon,
-                                  solve_singularity_handler sing_handler,
-                                  blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b,
+         octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b,
+         octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (MatrixType& mattype, const FloatComplexColumnVector& b,
+         octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
   // Generic interface to solver with probing of type
-  FloatMatrix solve (const FloatMatrix& b) const;
-  FloatMatrix solve (const FloatMatrix& b, octave_idx_type& info) const;
-  FloatMatrix solve (const FloatMatrix& b, octave_idx_type& info,
-                     float& rcon) const;
-  FloatMatrix solve (const FloatMatrix& b, octave_idx_type& info, float& rcon,
-                     solve_singularity_handler sing_handler,
-                     blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatMatrix solve (const FloatMatrix& b) const;
+  OCTAVE_API FloatMatrix
+  solve (const FloatMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatMatrix
+  solve (const FloatMatrix& b, octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatMatrix
+  solve (const FloatMatrix& b, octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexMatrix solve (const FloatComplexMatrix& b) const;
-  FloatComplexMatrix solve (const FloatComplexMatrix& b,
-                            octave_idx_type& info) const;
-  FloatComplexMatrix solve (const FloatComplexMatrix& b, octave_idx_type& info,
-                            float& rcon) const;
-  FloatComplexMatrix solve (const FloatComplexMatrix& b, octave_idx_type& info,
-                            float& rcon,
-                            solve_singularity_handler sing_handler,
-                            blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexMatrix solve (const FloatComplexMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatComplexMatrix& b, octave_idx_type& info,
+         float& rcon) const;
+  OCTAVE_API FloatComplexMatrix
+  solve (const FloatComplexMatrix& b, octave_idx_type& info,
+         float& rcon, solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatColumnVector solve (const FloatColumnVector& b) const;
-  FloatColumnVector solve (const FloatColumnVector& b,
-                           octave_idx_type& info) const;
-  FloatColumnVector solve (const FloatColumnVector& b, octave_idx_type& info,
-                           float& rcon) const;
-  FloatColumnVector solve (const FloatColumnVector& b, octave_idx_type& info,
-                           float& rcon,
-                           solve_singularity_handler sing_handler,
-                           blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatColumnVector solve (const FloatColumnVector& b) const;
+  OCTAVE_API FloatColumnVector
+  solve (const FloatColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatColumnVector
+  solve (const FloatColumnVector& b, octave_idx_type& info, float& rcon) const;
+  OCTAVE_API FloatColumnVector
+  solve (const FloatColumnVector& b, octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b) const;
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b,
-                                  octave_idx_type& info) const;
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b,
-                                  octave_idx_type& info,
-                                  float& rcon) const;
-  FloatComplexColumnVector solve (const FloatComplexColumnVector& b,
-                                  octave_idx_type& info,
-                                  float& rcon,
-                                  solve_singularity_handler sing_handler,
-                                  blas_trans_type transt = blas_no_trans) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b, octave_idx_type& info,
+         float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  solve (const FloatComplexColumnVector& b, octave_idx_type& info, float& rcon,
+         solve_singularity_handler sing_handler,
+         blas_trans_type transt = blas_no_trans) const;
 
   // Singular solvers
-  FloatMatrix lssolve (const FloatMatrix& b) const;
-  FloatMatrix lssolve (const FloatMatrix& b, octave_idx_type& info) const;
-  FloatMatrix lssolve (const FloatMatrix& b, octave_idx_type& info,
-                       octave_idx_type& rank) const;
-  FloatMatrix lssolve (const FloatMatrix& b, octave_idx_type& info,
-                       octave_idx_type& rank, float& rcon) const;
+  OCTAVE_API FloatMatrix lssolve (const FloatMatrix& b) const;
+  OCTAVE_API FloatMatrix
+  lssolve (const FloatMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatMatrix
+  lssolve (const FloatMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API FloatMatrix
+  lssolve (const FloatMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank, float& rcon) const;
 
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b) const;
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b,
-                              octave_idx_type& info) const;
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b,
-                              octave_idx_type& info,
-                              octave_idx_type& rank) const;
-  FloatComplexMatrix lssolve (const FloatComplexMatrix& b,
-                              octave_idx_type& info, octave_idx_type& rank,
-                              float& rcon) const;
+  OCTAVE_API FloatComplexMatrix lssolve (const FloatComplexMatrix& b) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatComplexMatrix& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexMatrix
+  lssolve (const FloatComplexMatrix& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API FloatComplexMatrix
+ lssolve (const FloatComplexMatrix& b, octave_idx_type& info,
+          octave_idx_type& rank, float& rcon) const;
 
-  FloatColumnVector lssolve (const FloatColumnVector& b) const;
-  FloatColumnVector lssolve (const FloatColumnVector& b,
-                             octave_idx_type& info) const;
-  FloatColumnVector lssolve (const FloatColumnVector& b, octave_idx_type& info,
-                             octave_idx_type& rank) const;
-  FloatColumnVector lssolve (const FloatColumnVector& b, octave_idx_type& info,
-                             octave_idx_type& rank, float& rcon) const;
+  OCTAVE_API FloatColumnVector lssolve (const FloatColumnVector& b) const;
+  OCTAVE_API FloatColumnVector
+  lssolve (const FloatColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatColumnVector
+  lssolve (const FloatColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API FloatColumnVector
+  lssolve (const FloatColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, float& rcon) const;
 
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b) const;
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b,
-                                    octave_idx_type& info) const;
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b,
-                                    octave_idx_type& info,
-                                    octave_idx_type& rank) const;
-  FloatComplexColumnVector lssolve (const FloatComplexColumnVector& b,
-                                    octave_idx_type& info,
-                                    octave_idx_type& rank, float& rcon) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b, octave_idx_type& info) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank) const;
+  OCTAVE_API FloatComplexColumnVector
+  lssolve (const FloatComplexColumnVector& b, octave_idx_type& info,
+           octave_idx_type& rank, float& rcon) const;
 
-  FloatMatrix& operator += (const FloatDiagMatrix& a);
-  FloatMatrix& operator -= (const FloatDiagMatrix& a);
+  OCTAVE_API FloatMatrix& operator += (const FloatDiagMatrix& a);
+  OCTAVE_API FloatMatrix& operator -= (const FloatDiagMatrix& a);
 
-  FloatMatrix cumprod (int dim = -1) const;
-  FloatMatrix cumsum (int dim = -1) const;
-  FloatMatrix prod (int dim = -1) const;
-  FloatMatrix sum (int dim = -1) const;
-  FloatMatrix sumsq (int dim = -1) const;
-  FloatMatrix abs (void) const;
+  OCTAVE_API FloatMatrix cumprod (int dim = -1) const;
+  OCTAVE_API FloatMatrix cumsum (int dim = -1) const;
+  OCTAVE_API FloatMatrix prod (int dim = -1) const;
+  OCTAVE_API FloatMatrix sum (int dim = -1) const;
+  OCTAVE_API FloatMatrix sumsq (int dim = -1) const;
+  OCTAVE_API FloatMatrix abs (void) const;
 
-  FloatMatrix diag (octave_idx_type k = 0) const;
+  OCTAVE_API FloatMatrix diag (octave_idx_type k = 0) const;
 
-  FloatDiagMatrix diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API FloatDiagMatrix diag (octave_idx_type m, octave_idx_type n) const;
 
-  FloatColumnVector row_min (void) const;
-  FloatColumnVector row_max (void) const;
+  OCTAVE_API FloatColumnVector row_min (void) const;
+  OCTAVE_API FloatColumnVector row_max (void) const;
 
-  FloatColumnVector row_min (Array<octave_idx_type>& index) const;
-  FloatColumnVector row_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatColumnVector row_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatColumnVector row_max (Array<octave_idx_type>& index) const;
 
-  FloatRowVector column_min (void) const;
-  FloatRowVector column_max (void) const;
+  OCTAVE_API FloatRowVector column_min (void) const;
+  OCTAVE_API FloatRowVector column_max (void) const;
 
-  FloatRowVector column_min (Array<octave_idx_type>& index) const;
-  FloatRowVector column_max (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatRowVector column_min (Array<octave_idx_type>& index) const;
+  OCTAVE_API FloatRowVector column_max (Array<octave_idx_type>& index) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const FloatMatrix& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is,
-                                               FloatMatrix& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatMatrix& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, FloatMatrix& a);
 };
 
 // Publish externally used friend functions.
--- a/liboctave/array/fNDArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fNDArray.h	Mon May 10 23:27:38 2021 +0200
@@ -59,7 +59,7 @@
   template <typename U>
   explicit FloatNDArray (const intNDArray<U>& a) : MArray<float> (a) { }
 
-  FloatNDArray (const charNDArray&);
+  OCTAVE_API FloatNDArray (const charNDArray&);
 
   FloatNDArray& operator = (const FloatNDArray& a)
   {
@@ -69,68 +69,72 @@
 
   // unary operations
 
-  boolNDArray operator ! (void) const;
+  OCTAVE_API boolNDArray operator ! (void) const;
 
-  bool any_element_is_negative (bool = false) const;
-  bool any_element_is_positive (bool = false) const;
-  bool any_element_is_nan (void) const;
-  bool any_element_is_inf_or_nan (void) const;
-  bool any_element_not_one_or_zero (void) const;
-  bool all_elements_are_zero (void) const;
-  bool all_elements_are_int_or_inf_or_nan (void) const;
-  bool all_integers (float& max_val, float& min_val) const;
-  bool all_integers (void) const;
-  bool too_large_for_float (void) const;
+  OCTAVE_API bool any_element_is_negative (bool = false) const;
+  OCTAVE_API bool any_element_is_positive (bool = false) const;
+  OCTAVE_API bool any_element_is_nan (void) const;
+  OCTAVE_API bool any_element_is_inf_or_nan (void) const;
+  OCTAVE_API bool any_element_not_one_or_zero (void) const;
+  OCTAVE_API bool all_elements_are_zero (void) const;
+  OCTAVE_API bool all_elements_are_int_or_inf_or_nan (void) const;
+  OCTAVE_API bool all_integers (float& max_val, float& min_val) const;
+  OCTAVE_API bool all_integers (void) const;
+  OCTAVE_API bool too_large_for_float (void) const;
 
   // FIXME: this is not quite the right thing.
 
-  boolNDArray all (int dim = -1) const;
-  boolNDArray any (int dim = -1) const;
+  OCTAVE_API boolNDArray all (int dim = -1) const;
+  OCTAVE_API boolNDArray any (int dim = -1) const;
 
-  FloatNDArray cumprod (int dim = -1) const;
-  FloatNDArray cumsum (int dim = -1) const;
-  FloatNDArray prod (int dim = -1) const;
-  NDArray dprod (int dim = -1) const;
-  FloatNDArray sum (int dim = -1) const;
-  NDArray dsum (int dim = -1) const;
-  FloatNDArray sumsq (int dim = -1) const;
-  FloatNDArray concat (const FloatNDArray& rb,
-                       const Array<octave_idx_type>& ra_idx);
-  FloatComplexNDArray concat (const FloatComplexNDArray& rb,
-                              const Array<octave_idx_type>& ra_idx);
-  charNDArray concat (const charNDArray& rb,
-                      const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API FloatNDArray cumprod (int dim = -1) const;
+  OCTAVE_API FloatNDArray cumsum (int dim = -1) const;
+  OCTAVE_API FloatNDArray prod (int dim = -1) const;
+  OCTAVE_API NDArray dprod (int dim = -1) const;
+  OCTAVE_API FloatNDArray sum (int dim = -1) const;
+  OCTAVE_API NDArray dsum (int dim = -1) const;
+  OCTAVE_API FloatNDArray sumsq (int dim = -1) const;
+  OCTAVE_API FloatNDArray
+  concat (const FloatNDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API FloatComplexNDArray
+  concat (const FloatComplexNDArray& rb, const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API charNDArray
+  concat (const charNDArray& rb, const Array<octave_idx_type>& ra_idx);
 
-  FloatNDArray max (int dim = -1) const;
-  FloatNDArray max (Array<octave_idx_type>& index, int dim = -1) const;
-  FloatNDArray min (int dim = -1) const;
-  FloatNDArray min (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API FloatNDArray max (int dim = -1) const;
+  OCTAVE_API FloatNDArray
+  max (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API FloatNDArray min (int dim = -1) const;
+  OCTAVE_API FloatNDArray
+  min (Array<octave_idx_type>& index, int dim = -1) const;
 
-  FloatNDArray cummax (int dim = -1) const;
-  FloatNDArray cummax (Array<octave_idx_type>& index, int dim = -1) const;
-  FloatNDArray cummin (int dim = -1) const;
-  FloatNDArray cummin (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API FloatNDArray cummax (int dim = -1) const;
+  OCTAVE_API FloatNDArray
+  cummax (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API FloatNDArray cummin (int dim = -1) const;
+  OCTAVE_API FloatNDArray
+  cummin (Array<octave_idx_type>& index, int dim = -1) const;
 
-  FloatNDArray diff (octave_idx_type order = 1, int dim = -1) const;
+  OCTAVE_API FloatNDArray diff (octave_idx_type order = 1, int dim = -1) const;
 
-  FloatNDArray& insert (const FloatNDArray& a,
-                        octave_idx_type r, octave_idx_type c);
-  FloatNDArray& insert (const FloatNDArray& a,
-                        const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API FloatNDArray&
+  insert (const FloatNDArray& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API FloatNDArray&
+  insert (const FloatNDArray& a, const Array<octave_idx_type>& ra_idx);
 
-  FloatNDArray abs (void) const;
-  boolNDArray isnan (void) const;
-  boolNDArray isinf (void) const;
-  boolNDArray isfinite (void) const;
+  OCTAVE_API FloatNDArray abs (void) const;
+  OCTAVE_API boolNDArray isnan (void) const;
+  OCTAVE_API boolNDArray isinf (void) const;
+  OCTAVE_API boolNDArray isfinite (void) const;
 
-  FloatComplexNDArray fourier (int dim = 1) const;
-  FloatComplexNDArray ifourier (int dim = 1) const;
+  OCTAVE_API FloatComplexNDArray fourier (int dim = 1) const;
+  OCTAVE_API FloatComplexNDArray ifourier (int dim = 1) const;
 
-  FloatComplexNDArray fourier2d (void) const;
-  FloatComplexNDArray ifourier2d (void) const;
+  OCTAVE_API FloatComplexNDArray fourier2d (void) const;
+  OCTAVE_API FloatComplexNDArray ifourier2d (void) const;
 
-  FloatComplexNDArray fourierNd (void) const;
-  FloatComplexNDArray ifourierNd (void) const;
+  OCTAVE_API FloatComplexNDArray fourierNd (void) const;
+  OCTAVE_API FloatComplexNDArray ifourierNd (void) const;
 
   friend OCTAVE_API FloatNDArray real (const FloatComplexNDArray& a);
   friend OCTAVE_API FloatNDArray imag (const FloatComplexNDArray& a);
@@ -139,22 +143,23 @@
 
   FloatNDArray squeeze (void) const { return MArray<float>::squeeze (); }
 
-  static void increment_index (Array<octave_idx_type>& ra_idx,
-                               const dim_vector& dimensions,
-                               int start_dimension = 0);
+  static OCTAVE_API void
+  increment_index (Array<octave_idx_type>& ra_idx,
+                   const dim_vector& dimensions, int start_dimension = 0);
 
-  static octave_idx_type compute_index (Array<octave_idx_type>& ra_idx,
-                                        const dim_vector& dimensions);
+  static OCTAVE_API octave_idx_type
+  compute_index (Array<octave_idx_type>& ra_idx, const dim_vector& dimensions);
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const FloatNDArray& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is, FloatNDArray& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatNDArray& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, FloatNDArray& a);
 
-  FloatNDArray diag (octave_idx_type k = 0) const;
+  OCTAVE_API FloatNDArray diag (octave_idx_type k = 0) const;
 
-  FloatNDArray diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API FloatNDArray diag (octave_idx_type m, octave_idx_type n) const;
 
   FloatNDArray& changesign (void)
   {
--- a/liboctave/array/fRowVector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/fRowVector.h	Mon May 10 23:27:38 2021 +0200
@@ -60,45 +60,49 @@
     return *this;
   }
 
-  bool operator == (const FloatRowVector& a) const;
-  bool operator != (const FloatRowVector& a) const;
+  OCTAVE_API bool operator == (const FloatRowVector& a) const;
+  OCTAVE_API bool operator != (const FloatRowVector& a) const;
 
   // destructive insert/delete/reorder operations
 
-  FloatRowVector& insert (const FloatRowVector& a, octave_idx_type c);
+  OCTAVE_API FloatRowVector&
+  insert (const FloatRowVector& a, octave_idx_type c);
 
-  FloatRowVector& fill (float val);
-  FloatRowVector& fill (float val, octave_idx_type c1, octave_idx_type c2);
+  OCTAVE_API FloatRowVector& fill (float val);
+  OCTAVE_API FloatRowVector&
+  fill (float val, octave_idx_type c1, octave_idx_type c2);
 
-  FloatRowVector append (const FloatRowVector& a) const;
+  OCTAVE_API FloatRowVector append (const FloatRowVector& a) const;
 
-  FloatColumnVector transpose (void) const;
+  OCTAVE_API FloatColumnVector transpose (void) const;
 
   friend OCTAVE_API FloatRowVector real (const FloatComplexRowVector& a);
   friend OCTAVE_API FloatRowVector imag (const FloatComplexRowVector& a);
 
   // resize is the destructive equivalent for this one
 
-  FloatRowVector extract (octave_idx_type c1, octave_idx_type c2) const;
+  OCTAVE_API FloatRowVector
+  extract (octave_idx_type c1, octave_idx_type c2) const;
 
-  FloatRowVector extract_n (octave_idx_type c1, octave_idx_type n) const;
+  OCTAVE_API FloatRowVector
+  extract_n (octave_idx_type c1, octave_idx_type n) const;
 
   // row vector by matrix -> row vector
 
-  friend OCTAVE_API FloatRowVector operator * (const FloatRowVector& a,
-                                               const FloatMatrix& b);
+  friend OCTAVE_API FloatRowVector
+  operator * (const FloatRowVector& a, const FloatMatrix& b);
 
   // other operations
 
-  float min (void) const;
-  float max (void) const;
+  OCTAVE_API float min (void) const;
+  OCTAVE_API float max (void) const;
 
   // i/o
 
-  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
-                                               const FloatRowVector& a);
-  friend OCTAVE_API std::istream& operator >> (std::istream& is,
-                                               FloatRowVector& a);
+  friend OCTAVE_API std::ostream&
+  operator << (std::ostream& os, const FloatRowVector& a);
+  friend OCTAVE_API std::istream&
+  operator >> (std::istream& is, FloatRowVector& a);
 
   void resize (octave_idx_type n, const float& rfv = 0)
   {
--- a/liboctave/array/idx-vector.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/idx-vector.h	Mon May 10 23:27:38 2021 +0200
@@ -131,7 +131,7 @@
 
       idx_colon_rep (void) = default;
 
-      idx_colon_rep (char c);
+      OCTAVE_API idx_colon_rep (char c);
 
       // No copying!
 
@@ -141,7 +141,7 @@
 
       octave_idx_type xelem (octave_idx_type i) const { return i; }
 
-      octave_idx_type checkelem (octave_idx_type i) const;
+      OCTAVE_API octave_idx_type checkelem (octave_idx_type i) const;
 
       octave_idx_type length (octave_idx_type n) const { return n; }
 
@@ -156,7 +156,7 @@
 
       bool is_colon_equiv (octave_idx_type) const { return true; }
 
-      std::ostream& print (std::ostream& os) const;
+      OCTAVE_API std::ostream& print (std::ostream& os) const;
     };
 
     // To distinguish the "direct" constructors that blindly trust the data.
@@ -177,7 +177,7 @@
       idx_range_rep (octave_idx_type start, octave_idx_type limit,
                      octave_idx_type step);
 
-      idx_range_rep (const range<double>&);
+      OCTAVE_API idx_range_rep (const range<double>&);
 
       // No copying!
 
@@ -199,9 +199,9 @@
 
       idx_class_type idx_class (void) const { return class_range; }
 
-      idx_base_rep * sort_uniq_clone (bool uniq = false);
+      OCTAVE_API idx_base_rep * sort_uniq_clone (bool uniq = false);
 
-      idx_base_rep * sort_idx (Array<octave_idx_type>&);
+      OCTAVE_API idx_base_rep * sort_idx (Array<octave_idx_type>&);
 
       bool is_colon_equiv (octave_idx_type n) const
       { return m_start == 0 && m_step == 1 && m_len == n; }
@@ -213,11 +213,11 @@
 
       octave_idx_type get_step (void) const { return m_step; }
 
-      std::ostream& print (std::ostream& os) const;
+      OCTAVE_API std::ostream& print (std::ostream& os) const;
 
-      range<double> unconvert (void) const;
+      OCTAVE_API range<double> unconvert (void) const;
 
-      Array<octave_idx_type> as_array (void);
+      OCTAVE_API Array<octave_idx_type> as_array (void);
 
     private:
 
@@ -240,14 +240,14 @@
       idx_scalar_rep& operator = (const idx_scalar_rep& idx) = delete;
 
       // Zero-based constructor.
-      idx_scalar_rep (octave_idx_type i);
+      OCTAVE_API idx_scalar_rep (octave_idx_type i);
 
       template <typename T>
         idx_scalar_rep (T x);
 
       octave_idx_type xelem (octave_idx_type) const { return m_data; }
 
-      octave_idx_type checkelem (octave_idx_type i) const;
+      OCTAVE_API octave_idx_type checkelem (octave_idx_type i) const;
 
       octave_idx_type length (octave_idx_type) const { return 1; }
 
@@ -259,7 +259,7 @@
       idx_base_rep * sort_uniq_clone (bool = false)
       { m_count++; return this; }
 
-      idx_base_rep * sort_idx (Array<octave_idx_type>&);
+      OCTAVE_API idx_base_rep * sort_idx (Array<octave_idx_type>&);
 
       bool is_colon_equiv (octave_idx_type n) const
       { return n == 1 && m_data == 0; }
@@ -268,11 +268,11 @@
 
       octave_idx_type get_data (void) const { return m_data; }
 
-      std::ostream& print (std::ostream& os) const;
+      OCTAVE_API std::ostream& print (std::ostream& os) const;
 
-      double unconvert (void) const;
+      OCTAVE_API double unconvert (void) const;
 
-      Array<octave_idx_type> as_array (void);
+      OCTAVE_API Array<octave_idx_type> as_array (void);
 
     private:
 
@@ -295,19 +295,19 @@
         { }
 
       // Zero-based constructor.
-      idx_vector_rep (const Array<octave_idx_type>& inda);
+      OCTAVE_API idx_vector_rep (const Array<octave_idx_type>& inda);
 
-      idx_vector_rep (const Array<octave_idx_type>& inda,
-                      octave_idx_type ext, direct);
+      OCTAVE_API idx_vector_rep (const Array<octave_idx_type>& inda,
+                                 octave_idx_type ext, direct);
 
       template <typename T>
         idx_vector_rep (const Array<T>&);
 
-      idx_vector_rep (bool);
+      OCTAVE_API idx_vector_rep (bool);
 
-      idx_vector_rep (const Array<bool>&, octave_idx_type = -1);
+      OCTAVE_API idx_vector_rep (const Array<bool>&, octave_idx_type = -1);
 
-      idx_vector_rep (const Sparse<bool>&);
+      OCTAVE_API idx_vector_rep (const Sparse<bool>&);
 
       // No copying!
 
@@ -319,7 +319,7 @@
 
       octave_idx_type xelem (octave_idx_type i) const { return m_data[i]; }
 
-      octave_idx_type checkelem (octave_idx_type i) const;
+      OCTAVE_API octave_idx_type checkelem (octave_idx_type i) const;
 
       octave_idx_type length (octave_idx_type) const { return m_len; }
 
@@ -330,17 +330,17 @@
 
       idx_base_rep * sort_uniq_clone (bool uniq = false);
 
-      idx_base_rep * sort_idx (Array<octave_idx_type>&);
+      OCTAVE_API idx_base_rep * sort_idx (Array<octave_idx_type>&);
 
       dim_vector orig_dimensions (void) const { return m_orig_dims; }
 
       const octave_idx_type * get_data (void) const { return m_data; }
 
-      std::ostream& print (std::ostream& os) const;
+      OCTAVE_API std::ostream& print (std::ostream& os) const;
 
-      Array<double> unconvert (void) const;
+      OCTAVE_API Array<double> unconvert (void) const;
 
-      Array<octave_idx_type> as_array (void);
+      OCTAVE_API Array<octave_idx_type> as_array (void);
 
     private:
 
@@ -374,9 +374,9 @@
         m_lsti (-1), m_lste (-1), m_aowner (nullptr), m_orig_dims (od)
         { }
 
-      idx_mask_rep (bool);
+      OCTAVE_API idx_mask_rep (bool);
 
-      idx_mask_rep (const Array<bool>&, octave_idx_type = -1);
+      OCTAVE_API idx_mask_rep (const Array<bool>&, octave_idx_type = -1);
 
       // No copying!
 
@@ -384,7 +384,7 @@
 
       idx_mask_rep& operator = (const idx_mask_rep& idx) = delete;
 
-      ~idx_mask_rep (void);
+      OCTAVE_API ~idx_mask_rep (void);
 
       octave_idx_type xelem (octave_idx_type i) const;
 
@@ -400,7 +400,7 @@
       idx_base_rep * sort_uniq_clone (bool = false)
       { m_count++; return this; }
 
-      idx_base_rep * sort_idx (Array<octave_idx_type>&);
+      OCTAVE_API idx_base_rep * sort_idx (Array<octave_idx_type>&);
 
       dim_vector orig_dimensions (void) const { return m_orig_dims; }
 
@@ -409,11 +409,11 @@
 
       const bool * get_data (void) const { return m_data; }
 
-      std::ostream& print (std::ostream& os) const;
+      OCTAVE_API std::ostream& print (std::ostream& os) const;
 
-      Array<bool> unconvert (void) const;
+      OCTAVE_API Array<bool> unconvert (void) const;
 
-      Array<octave_idx_type> as_array (void);
+      OCTAVE_API Array<octave_idx_type> as_array (void);
 
     private:
 
@@ -442,7 +442,7 @@
 
     // The shared empty vector representation (for fast default
     // constructor).
-    static idx_vector_rep *nil_rep (void);
+    static OCTAVE_API idx_vector_rep *nil_rep (void);
 
     public:
 
@@ -501,7 +501,7 @@
 
     idx_vector (const Array<float>& nda) : m_rep (new idx_vector_rep (nda)) { }
 
-    idx_vector (const Array<bool>& nda);
+    OCTAVE_API idx_vector (const Array<bool>& nda);
 
     idx_vector (const range<double>& r) : m_rep (new idx_range_rep (r)) { }
 
@@ -962,43 +962,44 @@
     // A(i,j)(:) is equal to A(k)(:).
 
     // If the next index can be reduced, returns true and updates this.
-    bool maybe_reduce (octave_idx_type n, const idx_vector& j,
-                       octave_idx_type nj);
+    OCTAVE_API bool
+    maybe_reduce (octave_idx_type n, const idx_vector& j, octave_idx_type nj);
 
-    bool is_cont_range (octave_idx_type n,
-                        octave_idx_type& l, octave_idx_type& u) const;
+    OCTAVE_API bool
+    is_cont_range (octave_idx_type n, octave_idx_type& l,
+                   octave_idx_type& u) const;
 
     // Returns the increment for ranges and colon, 0 for scalars and empty
     // vectors, 1st difference otherwise.
-    octave_idx_type increment (void) const;
+    OCTAVE_API octave_idx_type increment (void) const;
 
-    idx_vector
+    OCTAVE_API idx_vector
     complement (octave_idx_type n) const;
 
-    bool is_permutation (octave_idx_type n) const;
+    OCTAVE_API bool is_permutation (octave_idx_type n) const;
 
     // Returns the inverse permutation.  If this is not a permutation on 1:n, the
     // result is undefined (but no error unless extent () != n).
-    idx_vector inverse_permutation (octave_idx_type n) const;
+    OCTAVE_API idx_vector inverse_permutation (octave_idx_type n) const;
 
     // Copies all the indices to a given array.  Not allowed for colons.
-    void copy_data (octave_idx_type *data) const;
+    OCTAVE_API void copy_data (octave_idx_type *data) const;
 
     // If the index is a mask, convert it to index vector.
-    idx_vector unmask (void) const;
+    OCTAVE_API idx_vector unmask (void) const;
 
     // Unconverts the index to a scalar, Range, double array or a mask.
-    void unconvert (idx_class_type& iclass,
-                    double& scalar, range<double>& range,
-                    Array<double>& array, Array<bool>& mask) const;
+    OCTAVE_API void
+    unconvert (idx_class_type& iclass, double& scalar, range<double>& range,
+               Array<double>& array, Array<bool>& mask) const;
 
-    Array<octave_idx_type> as_array (void) const;
+    OCTAVE_API Array<octave_idx_type> as_array (void) const;
 
     // Raw pointer to index array.  This is non-const because it may be
     // necessary to mutate the index.
-    const octave_idx_type * raw (void);
+    const OCTAVE_API octave_idx_type * raw (void);
 
-    bool isvector (void) const;
+    OCTAVE_API bool isvector (void) const;
 
     // FIXME: these are here for compatibility.  They should be removed
     // when no longer in use.
@@ -1009,13 +1010,13 @@
     bool is_colon_equiv (octave_idx_type n, int) const
     { return is_colon_equiv (n); }
 
-    octave_idx_type
+    OCTAVE_API octave_idx_type
     freeze (octave_idx_type z_len, const char *tag, bool resize_ok = false);
 
     void sort (bool uniq = false)
     { *this = sorted (uniq); }
 
-    octave_idx_type ones_count (void) const;
+    OCTAVE_API octave_idx_type ones_count (void) const;
 
     octave_idx_type max (void) const { return extent (1) - 1; }
 
--- a/liboctave/array/intNDArray.h	Mon May 10 14:58:19 2021 -0400
+++ b/liboctave/array/intNDArray.h	Mon May 10 23:27:38 2021 +0200
@@ -66,14 +66,14 @@
   template <typename U>
   intNDArray (const intNDArray<U>& a) : MArray<T> (a) { }
 
-  boolNDArray operator ! (void) const;
+  OCTAVE_API boolNDArray operator ! (void) const;
 
   bool any_element_is_nan (void) const { return false; }
-  bool any_element_not_one_or_zero (void) const;
+  OCTAVE_API bool any_element_not_one_or_zero (void) const;
 
-  intNDArray diag (octave_idx_type k = 0) const;
+  OCTAVE_API intNDArray diag (octave_idx_type k = 0) const;
 
-  intNDArray diag (octave_idx_type m, octave_idx_type n) const;
+  OCTAVE_API intNDArray diag (octave_idx_type m, octave_idx_type n) const;
 
   intNDArray& changesign (void)
   {
@@ -83,28 +83,32 @@
 
   // FIXME: this is not quite the right thing.
 
-  boolNDArray all (int dim = -1) const;
-  boolNDArray any (int dim = -1) const;
+  OCTAVE_API boolNDArray all (int dim = -1) const;
+  OCTAVE_API boolNDArray any (int dim = -1) const;
 
-  intNDArray max (int dim = -1) const;
-  intNDArray max (Array<octave_idx_type>& index, int dim = -1) const;
-  intNDArray min (int dim = -1) const;
-  intNDArray min (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API intNDArray max (int dim = -1) const;
+  OCTAVE_API intNDArray
+  max (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API intNDArray min (int dim = -1) const;
+  OCTAVE_API intNDArray
+  min (Array<octave_idx_type>& index, int dim = -1) const;
 
-  intNDArray cummax (int dim = -1) const;
-  intNDArray cummax (Array<octave_idx_type>& index, int dim = -1) const;
-  intNDArray cummin (int dim = -1) const;
-  intNDArray cummin (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API intNDArray cummax (int dim = -1) const;
+  OCTAVE_API intNDArray
+  cummax (Array<octave_idx_type>& index, int dim = -1) const;
+  OCTAVE_API intNDArray cummin (int dim = -1) const;
+  OCTAVE_API intNDArray
+  cummin (Array<octave_idx_type>& index, int dim = -1) const;
 
-  intNDArray prod (int dim) const;
-  intNDArray sum (int dim) const;
-  NDArray dsum (int dim) const;
-  intNDArray cumsum (int dim) const;
+  OCTAVE_API intNDArray prod (int dim) const;
+  OCTAVE_API intNDArray sum (int dim) const;
+  OCTAVE_API NDArray dsum (int dim) const;
+  OCTAVE_API intNDArray cumsum (int dim) const;
 
-  intNDArray diff (octave_idx_type order = 1, int dim = -1) const;
+  OCTAVE_API intNDArray diff (octave_idx_type order = 1, int dim = -1) const;
 
-  intNDArray abs (void) const;
-  intNDArray signum (void) const;
+  OCTAVE_API intNDArray abs (void) const;
+  OCTAVE_API intNDArray signum (void) const;
 
   intNDArray squeeze (void) const
   { return intNDArray<T> (MArray<T>::squeeze ()); }
@@ -112,30 +116,30 @@
   intNDArray transpose (void) const
   { return intNDArray<T> (MArray<T>::transpose ()); }
 
-  intNDArray concat (const intNDArray<T>& rb,
-                     const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API intNDArray
+  concat (const intNDArray<T>& rb, const Array<octave_idx_type>& ra_idx);
 
-  intNDArray& insert (const intNDArray<T>& a,
-                      octave_idx_type r, octave_idx_type c);
-  intNDArray& insert (const intNDArray<T>& a,
-                      const Array<octave_idx_type>& ra_idx);
+  OCTAVE_API intNDArray&
+  insert (const intNDArray<T>& a, octave_idx_type r, octave_idx_type c);
+  OCTAVE_API intNDArray&
+  insert (const intNDArray<T>& a, const Array<octave_idx_type>& ra_idx);
 
-  static void increment_index (Array<octave_idx_type>& ra_idx,
-                               const dim_vector& dimensions,
-                               int start_dimension = 0);
+  static OCTAVE_API void
+  increment_index (Array<octave_idx_type>& ra_idx,
+                   const dim_vector& dimensions, int start_dimension = 0);
 
-  static octave_idx_type compute_index (Array<octave_idx_type>& ra_idx,
-                                        const dim_vector& dimensions);
+  static OCTAVE_API octave_idx_type
+  compute_index (Array<octave_idx_type>& ra_idx, const dim_vector& dimensions);
 };
 
 // i/o
 
 template <typename T>
-OCTAVE_API
-std::ostream& operator << (std::ostream& os, const intNDArray<T>& a);
+OCTAVE_API std::ostream&
+operator << (std::ostream& os, const intNDArray<T>& a);
 
 template <typename T>
-OCTAVE_API
-std::istream& operator >> (std::istream& is, intNDArray<T>& a);
+OCTAVE_API std::istream&
+operator >> (std::istream& is, intNDArray<T>& a);
 
 #endif