File nlopt-octave-5.0.patch of Package nlopt

From 18cadf72cc69334091492b6137a32471e178e2ed Mon Sep 17 00:00:00 2001
From: Julien Schueller <schueller@phimeca.com>
Date: Wed, 27 Feb 2019 20:56:23 +0100
Subject: [PATCH] Fix compilation with octave>=5 (#245)

---
 src/octave/nlopt_optimize-oct.cc | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/octave/nlopt_optimize-oct.cc b/src/octave/nlopt_optimize-oct.cc
index e515119..e7255bb 100644
--- a/src/octave/nlopt_optimize-oct.cc
+++ b/src/octave/nlopt_optimize-oct.cc
@@ -39,6 +39,11 @@
 #  define err_user_returned_invalid gripe_user_returned_invalid
 #  define numel length
 #endif
+#if OCTAVE_MAJOR_VERSION < 4 || (OCTAVE_MAJOR_VERSION == 4 && OCTAVE_MINOR_VERSION < 4)
+#  define iscell is_cell
+#  define isstruct is_map
+#endif
+
 
 static int struct_val_default(octave_map &m, const std::string& k,
 				 int dflt)
@@ -91,7 +96,7 @@ static double user_function(unsigned n, const double *x,
     xm(i) = x[i];
   args(0) = xm;
   octave_value_list res
-#if (OCTAVE_MAJOR_VERSION == 4 && OCTAVE_MINOR_VERSION > 2)
+#if OCTAVE_MAJOR_VERSION > 4 || (OCTAVE_MAJOR_VERSION == 4 && OCTAVE_MINOR_VERSION > 2)
     = octave::feval(data->f, args, gradient ? 2 : 1);
 #else
     = data->f->do_multi_index_op(gradient ? 2 : 1, args);
@@ -133,7 +138,7 @@ static double user_function1(unsigned n, const double *x,
     xm(i) = x[i];
   args(0) = xm;
   octave_value_list res
-#if (OCTAVE_MAJOR_VERSION == 4 && OCTAVE_MINOR_VERSION > 2)
+#if OCTAVE_MAJOR_VERSION > 4 || (OCTAVE_MAJOR_VERSION == 4 && OCTAVE_MINOR_VERSION > 2)
     = octave::feval(f, args, gradient ? 2 : 1);
 #else
     = f->do_multi_index_op(gradient ? 2 : 1, args);
@@ -214,7 +219,7 @@ nlopt_opt make_opt(octave_map &opts, int n)
 
   if (opts.contains("local_optimizer")) {
     CHECK1(opts.contents("local_optimizer").numel() == 1
-	  && (opts.contents("local_optimizer"))(0).is_map(),
+	  && (opts.contents("local_optimizer"))(0).isstruct(),
 	  "opt.local_optimizer must be a structure");
     octave_map local_opts = (opts.contents("local_optimizer"))(0).map_value();
     CHECK1((local_opt = make_opt(local_opts, n)),
@@ -231,12 +236,11 @@ nlopt_opt make_opt(octave_map &opts, int n)
 DEFUN_DLD(nlopt_optimize, args, nargout, NLOPT_OPTIMIZE_USAGE)
 {
   octave_value_list retval;
-  double A;
   nlopt_opt opt = NULL;
 
   CHECK(args.length() == 2 && nargout <= 3, "wrong number of args");
 
-  CHECK(args(0).is_map(), "opt must be structure")
+  CHECK(args(0).isstruct(), "opt must be structure")
   octave_map opts = args(0).map_value();
 
   CHECK(args(1).is_real_matrix() || args(1).is_real_scalar(),
@@ -270,7 +274,7 @@ DEFUN_DLD(nlopt_optimize, args, nargout, NLOPT_OPTIMIZE_USAGE)
   }
 
   if (opts.contains("fc") && opts.contents("fc").numel() == 1) {
-    CHECK((opts.contents("fc"))(0).is_cell(), "opt.fc must be cell array");
+    CHECK((opts.contents("fc"))(0).iscell(), "opt.fc must be cell array");
     Cell fc = (opts.contents("fc"))(0).cell_value();
     Matrix zeros(1, fc.numel(), 0.0);
     Matrix fc_tol = struct_val_default(opts, "fc_tol", zeros);
@@ -287,7 +291,7 @@ DEFUN_DLD(nlopt_optimize, args, nargout, NLOPT_OPTIMIZE_USAGE)
   }
 
   if (opts.contains("h") && opts.contents("h").numel() == 1) {
-    CHECK((opts.contents("h"))(0).is_cell(), "opt.h must be cell array");
+    CHECK((opts.contents("h"))(0).iscell(), "opt.h must be cell array");
     Cell h = (opts.contents("h"))(0).cell_value();
     Matrix zeros(1, h.numel(), 0.0);
     Matrix h_tol = struct_val_default(opts, "h_tol", zeros);
openSUSE Build Service is sponsored by