Björn Esser 65e54ee
Index: swig-3.0.11/.travis.yml
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/.travis.yml
Björn Esser 65e54ee
+++ swig-3.0.11/.travis.yml
Björn Esser 65e54ee
@@ -77,13 +77,19 @@ matrix:
Björn Esser 65e54ee
       dist: trusty
Björn Esser 65e54ee
     - compiler: gcc
Björn Esser 65e54ee
       os: linux
Björn Esser 65e54ee
-      env: SWIGLANG=octave SWIGJOBS=-j2 # 3.2
Björn Esser 65e54ee
+      env: SWIGLANG=octave SWIGJOBS=-j2 # 3.8
Björn Esser 65e54ee
+      sudo: required
Björn Esser 65e54ee
+      dist: trusty
Björn Esser 65e54ee
     - compiler: gcc
Björn Esser 65e54ee
       os: linux
Björn Esser 65e54ee
-      env: SWIGLANG=octave SWIGJOBS=-j2 VER=3.8
Björn Esser 65e54ee
+      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.0
Björn Esser 65e54ee
+      sudo: required
Björn Esser 65e54ee
+      dist: trusty
Björn Esser 65e54ee
     - compiler: gcc
Björn Esser 65e54ee
       os: linux
Björn Esser 65e54ee
-      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.0
Björn Esser 65e54ee
+      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.2
Björn Esser 65e54ee
+      sudo: required
Björn Esser 65e54ee
+      dist: trusty
Björn Esser 65e54ee
     - compiler: gcc
Björn Esser 65e54ee
       os: linux
Björn Esser 65e54ee
       env: SWIGLANG=perl5
Björn Esser 65e54ee
Index: swig-3.0.11/CHANGES.current
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/CHANGES.current
Björn Esser 65e54ee
+++ swig-3.0.11/CHANGES.current
Björn Esser 65e54ee
@@ -4,6 +4,31 @@ See the RELEASENOTES file for a summary
Björn Esser 65e54ee
 Issue # numbers mentioned below can be found on Github. For more details, add
Björn Esser 65e54ee
 the issue number to the end of the URL: https://github.com/swig/swig/issues/
Björn Esser 65e54ee
 
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+Backported from https://github.com/swig/swig/pull/875
Björn Esser 65e54ee
+=====================================================
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+2016-12-31: kwwette
Björn Esser 65e54ee
+            [Octave] add support for version 4.2.0
Björn Esser 65e54ee
+            - C++11 compiler is required to compile examples/test suite
Björn Esser 65e54ee
+            - Octave has dropped support for << and >> operators, so SWIG now
Björn Esser 65e54ee
+              ignores them
Björn Esser 65e54ee
+            - The Octave error() function now raises C++ exceptions to propagate
Björn Esser 65e54ee
+              Octave errors, so %exception directives may need to be modified.
Björn Esser 65e54ee
+              For convenience the SWIG_RETHROW_OCTAVE_EXCEPTIONS macro can be used
Björn Esser 65e54ee
+              to rethrow any Octave exceptions for Octave itself to handle, e.g.:
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+                try {
Björn Esser 65e54ee
+                  $action                        // may call error()
Björn Esser 65e54ee
+                }
Björn Esser 65e54ee
+                SWIG_RETHROW_OCTAVE_EXCEPTIONS   // error() exceptions are rethrown
Björn Esser 65e54ee
+                catch(...) {
Björn Esser 65e54ee
+                  ...                            // all other exceptions
Björn Esser 65e54ee
+                }
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+            *** POTENTIAL INCOMPATIBILITY ***
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 Version 3.0.11 (29 Dec 2016)
Björn Esser 65e54ee
 ============================
Björn Esser 65e54ee
 
Björn Esser 65e54ee
Index: swig-3.0.11/Doc/Manual/Octave.html
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Doc/Manual/Octave.html
Björn Esser 65e54ee
+++ swig-3.0.11/Doc/Manual/Octave.html
Björn Esser 65e54ee
@@ -64,8 +64,15 @@ Also, there are a dozen or so examples i
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 

Björn Esser 65e54ee
-As of SWIG 3.0.7, the Octave module is regularly tested with Octave versions 3.2.4, 3.8.1, and 4.0.0.
Björn Esser 65e54ee
-Use of older Octave versions is not recommended, as these versions are no longer tested with SWIG.
Björn Esser 65e54ee
+SWIG is regularly tested against the following versions of Octave: 3.8, 4.0, 4.2.
Björn Esser 65e54ee
+

Björn Esser 65e54ee
+
Björn Esser 65e54ee
+

Björn Esser 65e54ee
+Every effort is made to maintain backward compatibility with older versions of Octave.
Björn Esser 65e54ee
+This cannot be guaranteed however, as in recent times new Octave releases have required nontrivial updates to SWIG, which may break backward compatibility for older Octave versions against which SWIG is not regularly tested.
Björn Esser 65e54ee
+

Björn Esser 65e54ee
+
Björn Esser 65e54ee
+

Björn Esser 65e54ee
 The SWIG runtime exports the function <tt>swig_octave_prereq()</tt> for checking the version of Octave.
Björn Esser 65e54ee
 

Björn Esser 65e54ee
 
Björn Esser 65e54ee
Index: swig-3.0.11/Examples/test-suite/exception_order.i
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Examples/test-suite/exception_order.i
Björn Esser 65e54ee
+++ swig-3.0.11/Examples/test-suite/exception_order.i
Björn Esser 65e54ee
@@ -23,7 +23,17 @@
Björn Esser 65e54ee
    user's throw declarations.
Björn Esser 65e54ee
 */
Björn Esser 65e54ee
 
Björn Esser 65e54ee
-#if defined(SWIGUTL)
Björn Esser 65e54ee
+#if defined(SWIGOCTAVE)
Björn Esser 65e54ee
+%exception {
Björn Esser 65e54ee
+  try {
Björn Esser 65e54ee
+    $action
Björn Esser 65e54ee
+  }
Björn Esser 65e54ee
+  SWIG_RETHROW_OCTAVE_EXCEPTIONS
Björn Esser 65e54ee
+  catch(...) {
Björn Esser 65e54ee
+    SWIG_exception(SWIG_RuntimeError,"postcatch unknown");
Björn Esser 65e54ee
+  }
Björn Esser 65e54ee
+}
Björn Esser 65e54ee
+#elif defined(SWIGUTL)
Björn Esser 65e54ee
 %exception {
Björn Esser 65e54ee
   try {
Björn Esser 65e54ee
     $action
Björn Esser 65e54ee
Index: swig-3.0.11/Lib/octave/exception.i
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Lib/octave/exception.i
Björn Esser 65e54ee
+++ swig-3.0.11/Lib/octave/exception.i
Björn Esser 65e54ee
@@ -1,6 +1,14 @@
Björn Esser 65e54ee
 %include <typemaps/exception.swg>
Björn Esser 65e54ee
 
Björn Esser 65e54ee
-
Björn Esser 65e54ee
 %insert("runtime") {
Björn Esser 65e54ee
   %define_as(SWIG_exception(code, msg), %block(%error(code, msg); SWIG_fail; ))
Björn Esser 65e54ee
 }
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+%define SWIG_RETHROW_OCTAVE_EXCEPTIONS
Björn Esser 65e54ee
+  /* rethrow any exceptions thrown by Octave */
Björn Esser 65e54ee
+%#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+  catch (octave::execution_exception& _e) { throw; }
Björn Esser 65e54ee
+  catch (octave::exit_exception& _e) { throw; }
Björn Esser 65e54ee
+  catch (octave::interrupt_exception& _e) { throw; }
Björn Esser 65e54ee
+%#endif
Björn Esser 65e54ee
+%enddef
Björn Esser 65e54ee
Index: swig-3.0.11/Lib/octave/octopers.swg
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Lib/octave/octopers.swg
Björn Esser 65e54ee
+++ swig-3.0.11/Lib/octave/octopers.swg
Björn Esser 65e54ee
@@ -25,8 +25,6 @@
Björn Esser 65e54ee
 // __div__        a / b
Björn Esser 65e54ee
 // __pow__        a ^ b
Björn Esser 65e54ee
 // __ldiv__       a \ b
Björn Esser 65e54ee
-// __lshift__     a << b
Björn Esser 65e54ee
-// __rshift__     a >> b
Björn Esser 65e54ee
 // __lt__         a < b
Björn Esser 65e54ee
 // __le__         a <= b
Björn Esser 65e54ee
 // __eq__         a == b
Björn Esser 65e54ee
@@ -51,8 +49,6 @@
Björn Esser 65e54ee
 %rename(__mul__)       *::operator*;
Björn Esser 65e54ee
 %rename(__div__)       *::operator/;
Björn Esser 65e54ee
 %rename(__mod__)       *::operator%;
Björn Esser 65e54ee
-%rename(__lshift__)    *::operator<<;
Björn Esser 65e54ee
-%rename(__rshift__)    *::operator>>;
Björn Esser 65e54ee
 %rename(__el_and__)    *::operator&&;
Björn Esser 65e54ee
 %rename(__el_or__)     *::operator||;
Björn Esser 65e54ee
 %rename(__xor__)       *::operator^;
Björn Esser 65e54ee
@@ -84,5 +80,7 @@
Björn Esser 65e54ee
 // Ignored operators
Björn Esser 65e54ee
 %ignoreoperator(EQ)         operator=;
Björn Esser 65e54ee
 %ignoreoperator(ARROWSTAR)  operator->*;
Björn Esser 65e54ee
+%ignoreoperator(LSHIFT)     operator<<;
Björn Esser 65e54ee
+%ignoreoperator(RSHIFT)     operator>>;
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 #endif /* __cplusplus */
Björn Esser 65e54ee
Index: swig-3.0.11/Lib/octave/octrun.swg
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Lib/octave/octrun.swg
Björn Esser 65e54ee
+++ swig-3.0.11/Lib/octave/octrun.swg
Björn Esser 65e54ee
@@ -1,87 +1,3 @@
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-#include <octave/version.h>
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-// Macro for enabling features which require Octave version >= major.minor.patch
Björn Esser 65e54ee
-#define SWIG_OCTAVE_PREREQ(major, minor, patch) \
Björn Esser 65e54ee
-  ( (OCTAVE_MAJOR_VERSION<<16) + (OCTAVE_MINOR_VERSION<<8) + OCTAVE_PATCH_VERSION >= ((major)<<16) + ((minor)<<8) + (patch) )
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-// Reconstruct Octave major, minor, and patch versions for releases prior to 3.8.1
Björn Esser 65e54ee
-#if !defined(OCTAVE_MAJOR_VERSION)
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# if !defined(OCTAVE_API_VERSION_NUMBER)
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-// Hack to distinguish between Octave 3.8.0, which removed OCTAVE_API_VERSION_NUMBER but did not yet
Björn Esser 65e54ee
-// introduce OCTAVE_MAJOR_VERSION, and Octave <= 3.2, which did not define OCTAVE_API_VERSION_NUMBER
Björn Esser 65e54ee
-#  include <octave/ov.h>
Björn Esser 65e54ee
-#  if defined(octave_ov_h)
Björn Esser 65e54ee
-#   define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#   define OCTAVE_MINOR_VERSION 8
Björn Esser 65e54ee
-#   define OCTAVE_PATCH_VERSION 0
Björn Esser 65e54ee
-#  else
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-// Hack to distinguish between Octave 3.2 and earlier versions, before OCTAVE_API_VERSION_NUMBER existed
Björn Esser 65e54ee
-#   define ComplexLU __ignore
Björn Esser 65e54ee
-#   include <octave/CmplxLU.h>
Björn Esser 65e54ee
-#   undef ComplexLU
Björn Esser 65e54ee
-#   if defined(octave_Complex_LU_h)
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-// We know only that this version is prior to Octave 3.2, i.e. OCTAVE_API_VERSION_NUMBER < 37
Björn Esser 65e54ee
-#    define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#    define OCTAVE_MINOR_VERSION 1
Björn Esser 65e54ee
-#    define OCTAVE_PATCH_VERSION 99
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-#   else
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-// OCTAVE_API_VERSION_NUMBER == 37
Björn Esser 65e54ee
-#    define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#    define OCTAVE_MINOR_VERSION 2
Björn Esser 65e54ee
-#    define OCTAVE_PATCH_VERSION 0
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-#   endif // defined(octave_Complex_LU_h)
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-#  endif // defined(octave_ov_h)
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-// Correlation between Octave API and version numbers extracted from Octave's
Björn Esser 65e54ee
-// ChangeLogs; version is the *earliest* released Octave with that API number
Björn Esser 65e54ee
-# elif OCTAVE_API_VERSION_NUMBER >= 48
Björn Esser 65e54ee
-#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_MINOR_VERSION 6
Björn Esser 65e54ee
-#  define OCTAVE_PATCH_VERSION 0
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# elif OCTAVE_API_VERSION_NUMBER >= 45
Björn Esser 65e54ee
-#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_MINOR_VERSION 4
Björn Esser 65e54ee
-#  define OCTAVE_PATCH_VERSION 1
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# elif OCTAVE_API_VERSION_NUMBER >= 42
Björn Esser 65e54ee
-#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_PATCH_VERSION 54
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# elif OCTAVE_API_VERSION_NUMBER >= 41
Björn Esser 65e54ee
-#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_PATCH_VERSION 53
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# elif OCTAVE_API_VERSION_NUMBER >= 40
Björn Esser 65e54ee
-#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_PATCH_VERSION 52
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# elif OCTAVE_API_VERSION_NUMBER >= 39
Björn Esser 65e54ee
-#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_PATCH_VERSION 51
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# else // OCTAVE_API_VERSION_NUMBER == 38
Björn Esser 65e54ee
-#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
-#  define OCTAVE_PATCH_VERSION 50
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-# endif // !defined(OCTAVE_API_VERSION_NUMBER)
Björn Esser 65e54ee
-
Björn Esser 65e54ee
-#endif // !defined(OCTAVE_MAJOR_VERSION)
Björn Esser 65e54ee
-
Björn Esser 65e54ee
 #if !SWIG_OCTAVE_PREREQ(3,2,0)
Björn Esser 65e54ee
 #define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, FS ## cname, args, nargout, doc)
Björn Esser 65e54ee
 #else
Björn Esser 65e54ee
@@ -824,6 +740,24 @@ SWIGRUNTIME void swig_acquire_ownership_
Björn Esser 65e54ee
       return ret.scalar_value();
Björn Esser 65e54ee
     }
Björn Esser 65e54ee
 
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+    virtual octave_value as_double(void) const {
Björn Esser 65e54ee
+      octave_value ret;
Björn Esser 65e54ee
+      if (!dispatch_unary_op("__float__", ret)) {
Björn Esser 65e54ee
+        error("__float__ method not defined");
Björn Esser 65e54ee
+      }
Björn Esser 65e54ee
+      return ret.as_double();
Björn Esser 65e54ee
+    }
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+    virtual octave_value as_single(void) const {
Björn Esser 65e54ee
+      octave_value ret;
Björn Esser 65e54ee
+      if (!dispatch_unary_op("__float__", ret)) {
Björn Esser 65e54ee
+        error("__float__ method not defined");
Björn Esser 65e54ee
+      }
Björn Esser 65e54ee
+      return ret.as_single();
Björn Esser 65e54ee
+    }
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 #if SWIG_OCTAVE_PREREQ(3,8,0)
Björn Esser 65e54ee
     virtual octave_value map(octave_base_value::unary_mapper_t umap) const {
Björn Esser 65e54ee
       const std::string opname = std::string("__") + octave_base_value::get_umap_name(umap) + std::string("__");
Björn Esser 65e54ee
@@ -1092,6 +1026,14 @@ SWIGRUNTIME void swig_acquire_ownership_
Björn Esser 65e54ee
     virtual double scalar_value(bool frc_str_conv = false) const
Björn Esser 65e54ee
       { return ptr->scalar_value(frc_str_conv); }
Björn Esser 65e54ee
 
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+    virtual octave_value as_double(void) const
Björn Esser 65e54ee
+      { return ptr->as_double(); }
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+    virtual octave_value as_single(void) const
Björn Esser 65e54ee
+      { return ptr->as_single(); }
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 #if SWIG_OCTAVE_PREREQ(3,8,0)
Björn Esser 65e54ee
     virtual octave_value map(octave_base_value::unary_mapper_t umap) const
Björn Esser 65e54ee
       { return ptr->map(umap); }
Björn Esser 65e54ee
@@ -1340,8 +1282,10 @@ octave_value_typeinfo::register_binary_o
Björn Esser 65e54ee
   swig_binary_op(div);
Björn Esser 65e54ee
   swig_binary_op(pow);
Björn Esser 65e54ee
   swig_binary_op(ldiv);
Björn Esser 65e54ee
+#if !SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
   swig_binary_op(lshift);
Björn Esser 65e54ee
   swig_binary_op(rshift);
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
   swig_binary_op(lt);
Björn Esser 65e54ee
   swig_binary_op(le);
Björn Esser 65e54ee
   swig_binary_op(eq);
Björn Esser 65e54ee
@@ -1371,8 +1315,10 @@ octave_value_typeinfo::register_binary_o
Björn Esser 65e54ee
     swigreg_binary_op(div);
Björn Esser 65e54ee
     swigreg_binary_op(pow);
Björn Esser 65e54ee
     swigreg_binary_op(ldiv);
Björn Esser 65e54ee
+#if !SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
     swigreg_binary_op(lshift);
Björn Esser 65e54ee
     swigreg_binary_op(rshift);
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
     swigreg_binary_op(lt);
Björn Esser 65e54ee
     swigreg_binary_op(le);
Björn Esser 65e54ee
     swigreg_binary_op(eq);
Björn Esser 65e54ee
Index: swig-3.0.11/Lib/octave/octruntime.swg
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Lib/octave/octruntime.swg
Björn Esser 65e54ee
+++ swig-3.0.11/Lib/octave/octruntime.swg
Björn Esser 65e54ee
@@ -1,7 +1,93 @@
Björn Esser 65e54ee
 %insert(runtime) %{
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 #include <cstdlib>
Björn Esser 65e54ee
 #include <iostream>
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 #include <octave/oct.h>
Björn Esser 65e54ee
+#include <octave/version.h>
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+// Macro for enabling features which require Octave version >= major.minor.patch
Björn Esser 65e54ee
+// - Use (OCTAVE_PATCH_VERSION + 0) to handle both '<digit>' (released) and '<digit>+' (in development) patch numbers
Björn Esser 65e54ee
+#define SWIG_OCTAVE_PREREQ(major, minor, patch) \
Björn Esser 65e54ee
+  ( (OCTAVE_MAJOR_VERSION<<16) + (OCTAVE_MINOR_VERSION<<8) + (OCTAVE_PATCH_VERSION + 0) >= ((major)<<16) + ((minor)<<8) + (patch) )
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+// Reconstruct Octave major, minor, and patch versions for releases prior to 3.8.1
Björn Esser 65e54ee
+#if !defined(OCTAVE_MAJOR_VERSION)
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# if !defined(OCTAVE_API_VERSION_NUMBER)
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+// Hack to distinguish between Octave 3.8.0, which removed OCTAVE_API_VERSION_NUMBER but did not yet
Björn Esser 65e54ee
+// introduce OCTAVE_MAJOR_VERSION, and Octave <= 3.2, which did not define OCTAVE_API_VERSION_NUMBER
Björn Esser 65e54ee
+#  include <octave/ov.h>
Björn Esser 65e54ee
+#  if defined(octave_ov_h)
Björn Esser 65e54ee
+#   define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#   define OCTAVE_MINOR_VERSION 8
Björn Esser 65e54ee
+#   define OCTAVE_PATCH_VERSION 0
Björn Esser 65e54ee
+#  else
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+// Hack to distinguish between Octave 3.2 and earlier versions, before OCTAVE_API_VERSION_NUMBER existed
Björn Esser 65e54ee
+#   define ComplexLU __ignore
Björn Esser 65e54ee
+#   include <octave/CmplxLU.h>
Björn Esser 65e54ee
+#   undef ComplexLU
Björn Esser 65e54ee
+#   if defined(octave_Complex_LU_h)
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+// We know only that this version is prior to Octave 3.2, i.e. OCTAVE_API_VERSION_NUMBER < 37
Björn Esser 65e54ee
+#    define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#    define OCTAVE_MINOR_VERSION 1
Björn Esser 65e54ee
+#    define OCTAVE_PATCH_VERSION 99
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+#   else
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+// OCTAVE_API_VERSION_NUMBER == 37
Björn Esser 65e54ee
+#    define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#    define OCTAVE_MINOR_VERSION 2
Björn Esser 65e54ee
+#    define OCTAVE_PATCH_VERSION 0
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+#   endif // defined(octave_Complex_LU_h)
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+#  endif // defined(octave_ov_h)
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+// Correlation between Octave API and version numbers extracted from Octave's
Björn Esser 65e54ee
+// ChangeLogs; version is the *earliest* released Octave with that API number
Björn Esser 65e54ee
+# elif OCTAVE_API_VERSION_NUMBER >= 48
Björn Esser 65e54ee
+#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_MINOR_VERSION 6
Björn Esser 65e54ee
+#  define OCTAVE_PATCH_VERSION 0
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# elif OCTAVE_API_VERSION_NUMBER >= 45
Björn Esser 65e54ee
+#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_MINOR_VERSION 4
Björn Esser 65e54ee
+#  define OCTAVE_PATCH_VERSION 1
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# elif OCTAVE_API_VERSION_NUMBER >= 42
Björn Esser 65e54ee
+#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_PATCH_VERSION 54
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# elif OCTAVE_API_VERSION_NUMBER >= 41
Björn Esser 65e54ee
+#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_PATCH_VERSION 53
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# elif OCTAVE_API_VERSION_NUMBER >= 40
Björn Esser 65e54ee
+#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_PATCH_VERSION 52
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# elif OCTAVE_API_VERSION_NUMBER >= 39
Björn Esser 65e54ee
+#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_PATCH_VERSION 51
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# else // OCTAVE_API_VERSION_NUMBER == 38
Björn Esser 65e54ee
+#  define OCTAVE_MAJOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_MINOR_VERSION 3
Björn Esser 65e54ee
+#  define OCTAVE_PATCH_VERSION 50
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# endif // !defined(OCTAVE_API_VERSION_NUMBER)
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+#endif // !defined(OCTAVE_MAJOR_VERSION)
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 #include <octave/Cell.h>
Björn Esser 65e54ee
 #include <octave/dynamic-ld.h>
Björn Esser 65e54ee
 #include <octave/oct-env.h>
Björn Esser 65e54ee
@@ -9,8 +95,16 @@
Björn Esser 65e54ee
 #include <octave/ov-scalar.h>
Björn Esser 65e54ee
 #include <octave/ov-fcn-handle.h>
Björn Esser 65e54ee
 #include <octave/parse.h>
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+#include <octave/interpreter.h>
Björn Esser 65e54ee
+#else
Björn Esser 65e54ee
 #include <octave/toplev.h>
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
 #include <octave/unwind-prot.h>
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+#include <octave/call-stack.h>
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 %}
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 %insert(runtime) "swigrun.swg";
Björn Esser 65e54ee
@@ -24,27 +118,34 @@
Björn Esser 65e54ee
 static bool SWIG_init_user(octave_swig_type* module_ns);
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
Björn Esser 65e54ee
-  bool retn;
Björn Esser 65e54ee
+  bool retn = false;
Björn Esser 65e54ee
   {
Björn Esser 65e54ee
-#if !SWIG_OCTAVE_PREREQ(3,3,50)
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+    octave::unwind_protect frame;
Björn Esser 65e54ee
+    frame.protect_var(discard_error_messages);          discard_error_messages = true;
Björn Esser 65e54ee
+    frame.protect_var(discard_warning_messages);        discard_warning_messages = true;
Björn Esser 65e54ee
+#elif SWIG_OCTAVE_PREREQ(3,3,50)
Björn Esser 65e54ee
+    unwind_protect frame;
Björn Esser 65e54ee
+    frame.protect_var(error_state);                     error_state = 0;
Björn Esser 65e54ee
+    frame.protect_var(warning_state);                   warning_state = 0;
Björn Esser 65e54ee
+    frame.protect_var(discard_error_messages);          discard_error_messages = true;
Björn Esser 65e54ee
+    frame.protect_var(discard_warning_messages);        discard_warning_messages = true;
Björn Esser 65e54ee
+#else
Björn Esser 65e54ee
     unwind_protect::begin_frame("SWIG_Octave_LoadModule");
Björn Esser 65e54ee
-    unwind_protect_int(error_state);
Björn Esser 65e54ee
-    unwind_protect_int(warning_state);
Björn Esser 65e54ee
-    unwind_protect_bool(discard_error_messages);
Björn Esser 65e54ee
-    unwind_protect_bool(discard_warning_messages);
Björn Esser 65e54ee
+    unwind_protect_int(error_state);                    error_state = 0;
Björn Esser 65e54ee
+    unwind_protect_int(warning_state);                  warning_state = 0;
Björn Esser 65e54ee
+    unwind_protect_bool(discard_error_messages);        discard_error_messages = true;
Björn Esser 65e54ee
+    unwind_protect_bool(discard_warning_messages);      discard_warning_messages = true;
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+    try {
Björn Esser 65e54ee
+      feval(name, octave_value_list(), 0);
Björn Esser 65e54ee
+      retn = true;
Björn Esser 65e54ee
+    } catch (octave::execution_exception&) { }
Björn Esser 65e54ee
 #else
Björn Esser 65e54ee
-    unwind_protect frame;
Björn Esser 65e54ee
-    frame.protect_var(error_state);
Björn Esser 65e54ee
-    frame.protect_var(warning_state);
Björn Esser 65e54ee
-    frame.protect_var(discard_error_messages);
Björn Esser 65e54ee
-    frame.protect_var(discard_warning_messages);
Björn Esser 65e54ee
-#endif
Björn Esser 65e54ee
-    error_state = 0;
Björn Esser 65e54ee
-    warning_state = 0;
Björn Esser 65e54ee
-    discard_error_messages = true;
Björn Esser 65e54ee
-    discard_warning_messages = true;
Björn Esser 65e54ee
     feval(name, octave_value_list(), 0);
Björn Esser 65e54ee
     retn = (error_state == 0);
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
 #if !SWIG_OCTAVE_PREREQ(3,3,50)
Björn Esser 65e54ee
     unwind_protect::run_frame("SWIG_Octave_LoadModule");
Björn Esser 65e54ee
 #endif
Björn Esser 65e54ee
@@ -56,31 +157,37 @@ SWIGINTERN bool SWIG_Octave_LoadModule(s
Björn Esser 65e54ee
 }
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) {
Björn Esser 65e54ee
-  bool retn;
Björn Esser 65e54ee
+  bool retn = false;
Björn Esser 65e54ee
   {
Björn Esser 65e54ee
-#if !SWIG_OCTAVE_PREREQ(3,3,50)
Björn Esser 65e54ee
-    unwind_protect::begin_frame("SWIG_Octave_InstallFunction");
Björn Esser 65e54ee
-    unwind_protect_int(error_state);
Björn Esser 65e54ee
-    unwind_protect_int(warning_state);
Björn Esser 65e54ee
-    unwind_protect_bool(discard_error_messages);
Björn Esser 65e54ee
-    unwind_protect_bool(discard_warning_messages);
Björn Esser 65e54ee
-#else
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+    octave::unwind_protect frame;
Björn Esser 65e54ee
+    frame.protect_var(discard_error_messages);          discard_error_messages = true;
Björn Esser 65e54ee
+    frame.protect_var(discard_warning_messages);        discard_warning_messages = true;
Björn Esser 65e54ee
+#elif SWIG_OCTAVE_PREREQ(3,3,50)
Björn Esser 65e54ee
     unwind_protect frame;
Björn Esser 65e54ee
-    frame.protect_var(error_state);
Björn Esser 65e54ee
-    frame.protect_var(warning_state);
Björn Esser 65e54ee
-    frame.protect_var(discard_error_messages);
Björn Esser 65e54ee
-    frame.protect_var(discard_warning_messages);
Björn Esser 65e54ee
-#endif
Björn Esser 65e54ee
-    error_state = 0;
Björn Esser 65e54ee
-    warning_state = 0;
Björn Esser 65e54ee
-    discard_error_messages = true;
Björn Esser 65e54ee
-    discard_warning_messages = true;
Björn Esser 65e54ee
+    frame.protect_var(error_state);                     error_state = 0;
Björn Esser 65e54ee
+    frame.protect_var(warning_state);                   warning_state = 0;
Björn Esser 65e54ee
+    frame.protect_var(discard_error_messages);          discard_error_messages = true;
Björn Esser 65e54ee
+    frame.protect_var(discard_warning_messages);        discard_warning_messages = true;
Björn Esser 65e54ee
+#else
Björn Esser 65e54ee
+    unwind_protect::begin_frame("SWIG_Octave_LoadModule");
Björn Esser 65e54ee
+    unwind_protect_int(error_state);                    error_state = 0;
Björn Esser 65e54ee
+    unwind_protect_int(warning_state);                  warning_state = 0;
Björn Esser 65e54ee
+    unwind_protect_bool(discard_error_messages);        discard_error_messages = true;
Björn Esser 65e54ee
+    unwind_protect_bool(discard_warning_messages);      discard_warning_messages = true;
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
     octave_value_list args;
Björn Esser 65e54ee
     args.append(name);
Björn Esser 65e54ee
     args.append(octloadfcn->fcn_file_name());
Björn Esser 65e54ee
-    error_state = 0;
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(4,2,0)
Björn Esser 65e54ee
+    try {
Björn Esser 65e54ee
+      feval("autoload", args, 0);
Björn Esser 65e54ee
+      retn = true;
Björn Esser 65e54ee
+    } catch (octave::execution_exception&) { }
Björn Esser 65e54ee
+#else
Björn Esser 65e54ee
     feval("autoload", args, 0);
Björn Esser 65e54ee
     retn = (error_state == 0);
Björn Esser 65e54ee
+#endif
Björn Esser 65e54ee
 #if !SWIG_OCTAVE_PREREQ(3,3,50)
Björn Esser 65e54ee
     unwind_protect::run_frame("SWIG_Octave_InstallFunction");
Björn Esser 65e54ee
 #endif
Björn Esser 65e54ee
@@ -211,10 +318,11 @@ DEFUN_DLD( SWIG_name, args, nargout, SWI
Björn Esser 65e54ee
 
Björn Esser 65e54ee
   // workaround to prevent octave seg-faulting on exit: set Octave exit function
Björn Esser 65e54ee
   // octave_exit to _Exit, which exits immediately without trying to cleanup memory.
Björn Esser 65e54ee
-  // definitely affects version 3.2.*, not sure about 3.3.*, seems to be fixed in
Björn Esser 65e54ee
-  // version 3.4.* and above. can be turned off with macro definition.
Björn Esser 65e54ee
+  // definitely affecteds version 3.2.*, not sure about 3.3.*, seems to be fixed in
Björn Esser 65e54ee
+  // version 3.4.*, but reappeared in 4.2.*, so turn on for all versions after 3.2.*.
Björn Esser 65e54ee
+  // can be turned off with macro definition.
Björn Esser 65e54ee
 #ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK
Björn Esser 65e54ee
-#if SWIG_OCTAVE_PREREQ(3,2,0) && !SWIG_OCTAVE_PREREQ(3,4,1)
Björn Esser 65e54ee
+#if SWIG_OCTAVE_PREREQ(3,2,0)
Björn Esser 65e54ee
   octave_exit = ::_Exit;
Björn Esser 65e54ee
 #endif
Björn Esser 65e54ee
 #endif
Björn Esser 65e54ee
Index: swig-3.0.11/Lib/octave/std_wstring.i
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- /dev/null
Björn Esser 65e54ee
+++ swig-3.0.11/Lib/octave/std_wstring.i
Björn Esser 65e54ee
@@ -0,0 +1 @@
Björn Esser 65e54ee
+%include <typemaps/std_string.swg>
Björn Esser 65e54ee
Index: swig-3.0.11/Lib/typemaps/fragments.swg
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Lib/typemaps/fragments.swg
Björn Esser 65e54ee
+++ swig-3.0.11/Lib/typemaps/fragments.swg
Björn Esser 65e54ee
@@ -177,9 +177,11 @@
Björn Esser 65e54ee
  * versions.
Björn Esser 65e54ee
  *
Björn Esser 65e54ee
  * Make sure namespace std exists to avoid compiler warnings.
Björn Esser 65e54ee
+ *
Björn Esser 65e54ee
+ * extern "C++" is required as this fragment can end up inside an extern "C" { } block
Björn Esser 65e54ee
  */
Björn Esser 65e54ee
 namespace std { }
Björn Esser 65e54ee
-template<typename T>
Björn Esser 65e54ee
+extern "C++" template<typename T>
Björn Esser 65e54ee
 inline int SWIG_isfinite_func(T x) {
Björn Esser 65e54ee
   using namespace std;
Björn Esser 65e54ee
   return isfinite(x);
Björn Esser 65e54ee
Index: swig-3.0.11/Tools/travis-linux-install.sh
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/Tools/travis-linux-install.sh
Björn Esser 65e54ee
+++ swig-3.0.11/Tools/travis-linux-install.sh
Björn Esser 65e54ee
@@ -64,7 +64,7 @@ case "$SWIGLANG" in
Björn Esser 65e54ee
 		;;
Björn Esser 65e54ee
 	"octave")
Björn Esser 65e54ee
 		if [[ -z "$VER" ]]; then
Björn Esser 65e54ee
-			sudo apt-get -qq install octave3.2 octave3.2-headers
Björn Esser 65e54ee
+			sudo apt-get -qq install liboctave-dev
Björn Esser 65e54ee
 		else
Björn Esser 65e54ee
 			sudo add-apt-repository -y ppa:kwwette/octaves
Björn Esser 65e54ee
 			sudo apt-get -qq update
Björn Esser 65e54ee
Index: swig-3.0.11/configure.ac
Björn Esser 65e54ee
===================================================================
Björn Esser 65e54ee
--- swig-3.0.11.orig/configure.ac
Björn Esser 65e54ee
+++ swig-3.0.11/configure.ac
Björn Esser dfde9f6
@@ -1018,30 +1018,77 @@ OCTAVE_SO=.oct
Björn Esser 65e54ee
 AC_ARG_WITH(octave, AS_HELP_STRING([--without-octave], [Disable Octave])
Björn Esser 65e54ee
 AS_HELP_STRING([--with-octave=path], [Set location of Octave executable]),[OCTAVEBIN="$withval"], [OCTAVEBIN="$alllang_default"])
Björn Esser 65e54ee
 
Björn Esser 65e54ee
-# First, check for "--without-octave" or "--with-octave=no".
Björn Esser 65e54ee
+# Check for "--without-octave" or "--with-octave=no".
Björn Esser 65e54ee
 if test x"${OCTAVEBIN}" = xno; then
Björn Esser 65e54ee
    AC_MSG_NOTICE([Disabling Octave])
Björn Esser 65e54ee
    OCTAVE=
Björn Esser 65e54ee
 
Björn Esser 65e54ee
-# First figure out what the name of Octave is
Björn Esser 65e54ee
+# Check for Octave; prefer command-line program "octave-cli" to (in newer versions) GUI program "octave"
Björn Esser 65e54ee
 elif test "x$OCTAVEBIN" = xyes; then
Björn Esser 65e54ee
-   AC_PATH_PROG(OCTAVE, [octave])
Björn Esser 65e54ee
+   AC_PATH_PROG(OCTAVE, [octave-cli octave])
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 else
Björn Esser 65e54ee
    OCTAVE="$OCTAVEBIN"
Björn Esser 65e54ee
 fi
Björn Esser 65e54ee
 
Björn Esser 65e54ee
+# Check Octave options and version, and whether a C++11 compiler is required
Björn Esser 65e54ee
 if test -n "$OCTAVE"; then
Björn Esser 65e54ee
-   AC_MSG_CHECKING([for mkoctfile])
Björn Esser 65e54ee
-   mkoctfile="$(dirname $OCTAVE)/$(basename $OCTAVE | sed -e 's/octave/mkoctfile/')"
Björn Esser 65e54ee
-   AS_IF([test -x "${mkoctfile}"],[
Björn Esser 65e54ee
-      AC_MSG_RESULT([${mkoctfile}])
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+   for octave_opt in --no-window-system --silent --norc --no-history; do
Björn Esser 65e54ee
+      AC_MSG_CHECKING([if Octave option '${octave_opt}' is supported])
Björn Esser 65e54ee
+      octave_out=`${OCTAVE} ${octave_opt} /dev/null 2>&1 | sed -n '1p' | sed -n '/unrecognized/p'`
Björn Esser 65e54ee
+      AS_IF([test "x${octave_out}" = x],[
Björn Esser 65e54ee
+         AC_MSG_RESULT([yes])
Björn Esser 65e54ee
+         OCTAVE="${OCTAVE} ${octave_opt}"
Björn Esser 65e54ee
+      ],[
Björn Esser 65e54ee
+         AC_MSG_RESULT([no])
Björn Esser 65e54ee
+      ])
Björn Esser 65e54ee
+   done
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+   AC_MSG_CHECKING([for Octave version])
Björn Esser 65e54ee
+   octave_version=`${OCTAVE} --version 2>/dev/null | sed -n '1p' | sed -n 's/^.*version //p'`
Björn Esser 65e54ee
+   AC_MSG_RESULT([${octave_version}])
Björn Esser 65e54ee
+   AS_CASE([${octave_version}],
Björn Esser 65e54ee
+     [*.*.*],[:],
Björn Esser 65e54ee
+     [AC_MSG_ERROR([could not determine version of ${OCTAVE}])]
Björn Esser 65e54ee
+   )
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+   AC_MSG_CHECKING([if Octave requires a C++11 compiler])
Björn Esser 65e54ee
+   OCTAVE_CXX11FLAGS=
Björn Esser 65e54ee
+   AX_COMPARE_VERSION([${octave_version}],[ge],[4.2.0],[
Björn Esser 65e54ee
+     AC_MSG_RESULT([yes])
Björn Esser 65e54ee
+     AC_LANG_PUSH([C++])
Björn Esser 65e54ee
+     CXXFLAGS_SAVED=$CXXFLAGS
Björn Esser 65e54ee
+     CXXFLAGS=
Björn Esser 65e54ee
+     AX_CXX_COMPILE_STDCXX_11([noext], [nostop])
Björn Esser 65e54ee
+     CXXFLAGS=$CXXFLAGS_SAVED
Björn Esser 65e54ee
+     AC_LANG_POP([C++])
Björn Esser 65e54ee
+     AC_MSG_CHECKING([for C++11 enabled compiler])
Björn Esser 65e54ee
+     AS_IF([test "x${HAVE_CXX11_COMPILER}" = x],[
Björn Esser 65e54ee
+       AC_MSG_RESULT([no, disabling Octave])
Björn Esser 65e54ee
+       OCTAVE=
Björn Esser 65e54ee
+     ],[
Björn Esser 65e54ee
+       AC_MSG_RESULT([$HAVE_CXX11_COMPILER])
Björn Esser 65e54ee
+       OCTAVE_CXX11FLAGS="${CXX11FLAGS}"
Björn Esser 65e54ee
+     ])
Björn Esser 65e54ee
    ],[
Björn Esser 65e54ee
-      AC_MSG_RESULT([not found, disabling Octave])
Björn Esser 65e54ee
+     AC_MSG_RESULT([no])
Björn Esser 65e54ee
+   ])
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+fi
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# Check for required Octave helper program "mkoctfile"
Björn Esser 65e54ee
+if test -n "$OCTAVE"; then
Björn Esser 65e54ee
+   AC_PATH_PROG(mkoctfile, [mkoctfile], [], [$(dirname $OCTAVE)])
Björn Esser 65e54ee
+   AS_IF([test "x${mkoctfile}" = x],[
Björn Esser 65e54ee
+      AC_MSG_NOTICE([mkoctfile not found, disabling Octave])
Björn Esser 65e54ee
       OCTAVE=
Björn Esser 65e54ee
    ])
Björn Esser 65e54ee
 fi
Björn Esser 65e54ee
+
Björn Esser 65e54ee
+# Check for Octave preprocessor/compiler/linker flags
Björn Esser 65e54ee
 if test -n "$OCTAVE"; then
Björn Esser 65e54ee
+
Björn Esser 65e54ee
    AC_MSG_CHECKING([for Octave preprocessor flags])
Björn Esser 65e54ee
    OCTAVE_CPPFLAGS=
Björn Esser 65e54ee
    for var in CPPFLAGS INCFLAGS ALL_CXXFLAGS; do
Björn Esser dfde9f6
@@ -1053,8 +1100,9 @@ if test -n "$OCTAVE"; then
Björn Esser 65e54ee
       done
Björn Esser 65e54ee
    done
Björn Esser 65e54ee
    AC_MSG_RESULT([$OCTAVE_CPPFLAGS])
Björn Esser 65e54ee
+
Björn Esser 65e54ee
    AC_MSG_CHECKING([for Octave compiler flags])
Björn Esser 65e54ee
-   OCTAVE_CXXFLAGS=
Björn Esser 65e54ee
+   OCTAVE_CXXFLAGS="${OCTAVE_CXX11FLAGS}"
Björn Esser 65e54ee
    for var in ALL_CXXFLAGS; do
Björn Esser 65e54ee
       for flag in `env - ${mkoctfile} -p ${var}`; do
Björn Esser 65e54ee
          case ${flag} in
Björn Esser dfde9f6
@@ -1066,28 +1114,20 @@ if test -n "$OCTAVE"; then
Björn Esser 65e54ee
    save_CXXFLAGS="${CXXFLAGS}"
Björn Esser 65e54ee
    CXXFLAGS="-Werror -O0"
Björn Esser 65e54ee
    AC_COMPILE_IFELSE([
Björn Esser 65e54ee
-      AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],[])
Björn Esser 65e54ee
+      AC_LANG_PROGRAM([],[])
Björn Esser 65e54ee
    ],[
Björn Esser 65e54ee
       OCTAVE_CXXFLAGS="${OCTAVE_CXXFLAGS} -O0"
Björn Esser 65e54ee
    ])
Björn Esser 65e54ee
    CXXFLAGS="${save_CXXFLAGS}"
Björn Esser 65e54ee
    AC_MSG_RESULT([$OCTAVE_CXXFLAGS])
Björn Esser 65e54ee
+
Björn Esser 65e54ee
    AC_MSG_CHECKING([for Octave linker flags])
Björn Esser 65e54ee
    OCTAVE_LDFLAGS=
Björn Esser 65e54ee
    for var in RDYNAMIC_FLAG LFLAGS RLD_FLAG OCTAVE_LIBS LIBS; do
Björn Esser 65e54ee
      OCTAVE_LDFLAGS="${OCTAVE_LDFLAGS} "`env - ${mkoctfile} -p ${var}`
Björn Esser 65e54ee
    done
Björn Esser 65e54ee
    AC_MSG_RESULT([$OCTAVE_LDFLAGS])
Björn Esser 65e54ee
-   for octave_opt in --silent --norc --no-history --no-window-system; do
Björn Esser 65e54ee
-      AC_MSG_CHECKING([if Octave option '${octave_opt}' is supported])
Björn Esser 65e54ee
-      octave_out=`${OCTAVE} ${octave_opt} /dev/null 2>&1 | sed -n '1p' | sed -n '/unrecognized/p'`
Björn Esser 65e54ee
-      AS_IF([test "x${octave_out}" = x],[
Björn Esser 65e54ee
-         AC_MSG_RESULT([yes])
Björn Esser 65e54ee
-         OCTAVE="${OCTAVE} ${octave_opt}"
Björn Esser 65e54ee
-      ],[
Björn Esser 65e54ee
-         AC_MSG_RESULT([no])
Björn Esser 65e54ee
-      ])
Björn Esser 65e54ee
-   done
Björn Esser 65e54ee
+
Björn Esser 65e54ee
 fi
Björn Esser 65e54ee
 
Björn Esser 65e54ee
 AC_SUBST(OCTAVE)
Björn Esser dfde9f6
Index: swig-3.0.11/Lib/perl5/std_wstring.i
Björn Esser dfde9f6
===================================================================
Björn Esser dfde9f6
--- /dev/null
Björn Esser dfde9f6
+++ swig-3.0.11/Lib/perl5/std_wstring.i
Björn Esser dfde9f6
@@ -0,0 +1 @@
Björn Esser dfde9f6
+%include <typemaps/std_string.swg>