octave: update support to Octave version 3.8.0
This commit is contained in:
parent
5c6bc5db3e
commit
5b167cc12d
4 changed files with 121 additions and 28 deletions
|
|
@ -5,6 +5,32 @@ See the RELEASENOTES file for a summary of changes in each release.
|
||||||
Version 3.0.0 (in progress)
|
Version 3.0.0 (in progress)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
2014-01-13: kwwette
|
||||||
|
[Octave] update support to Octave version 3.8.0
|
||||||
|
|
||||||
|
- Octave 3.8.0 no longer defines OCTAVE_API_VERSION_NUMBER, but 3.8.1
|
||||||
|
will define OCTAVE_{MAJOR,MINOR,PATCH}_VERSION instead: see
|
||||||
|
http://hg.savannah.gnu.org/hgweb/octave/rev/b6b6e0dc700e
|
||||||
|
So we now use a new macro SWIG_OCTAVE_PREREQ(major,minor,patch) to
|
||||||
|
enable features requiring Octave version major.minor.patch or later.
|
||||||
|
|
||||||
|
For Octave versions prior to 3.8.1, we reconstruct values for
|
||||||
|
OCTAVE_{MAJOR,MINOR,PATCH}_VERSION based on OCTAVE_API_VERSION_NUMBER,
|
||||||
|
extracted from Octave's ChangeLogs. An additional hack is needed to
|
||||||
|
distinguish between Octave <= 3.2.x and 3.8.0, neither of which define
|
||||||
|
OCTAVE_API_VERSION_NUMBER.
|
||||||
|
|
||||||
|
- Octave 3.8.0 deprecates symbol_table::varref(), so remove its use
|
||||||
|
for this and future versions of Octave.
|
||||||
|
|
||||||
|
- Octave 3.8.0 removes octave_value::is_real_nd_array(), used in
|
||||||
|
octave_swig_type::dims(). Its use is not required here, so remove it.
|
||||||
|
|
||||||
|
- Retested against Octave versions 3.0.5, 3.2.4, 3.4.3, 3.6.4, and 3.8.0.
|
||||||
|
|
||||||
|
- Updated Octave documentation with tested Octave versions, and added a
|
||||||
|
warning against using versions <= 3.x.x, which are no longer tested.
|
||||||
|
|
||||||
2014-01-11: wsfulton
|
2014-01-11: wsfulton
|
||||||
Fix and document the naturalvar feature override behaviour - the naturalvar
|
Fix and document the naturalvar feature override behaviour - the naturalvar
|
||||||
feature attached to a variable name has precedence over the naturalvar
|
feature attached to a variable name has precedence over the naturalvar
|
||||||
|
|
|
||||||
|
|
@ -59,11 +59,8 @@ Also, there are a dozen or so examples in the Examples/octave directory, and hun
|
||||||
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The SWIG implemention was first based on Octave 2.9.12, so this is the minimum version required. Testing has only been done on Linux.
|
As of SWIG 3.0.0, the Octave module has been tested with Octave versions 3.0.5, 3.2.4, 3.4.3, 3.6.4, and 3.8.0.
|
||||||
</p>
|
Use of Octave versions older than 3.x.x is not recommended, as these versions are no longer tested with SWIG.
|
||||||
|
|
||||||
<p>
|
|
||||||
As of SWIG 2.0.7, the Octave module has been tested with Octave versions 3.0.5, 3.2.4, 3.4.3, and 3.6.1.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<H2><a name="Octave_nn3"></a>30.2 Running SWIG</H2>
|
<H2><a name="Octave_nn3"></a>30.2 Running SWIG</H2>
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,88 @@
|
||||||
|
|
||||||
#include <octave/version.h>
|
#include <octave/version.h>
|
||||||
#ifndef OCTAVE_API_VERSION_NUMBER
|
|
||||||
|
|
||||||
// Hack to distinguish between Octave 3.2 and earlier versions before OCTAVE_API_VERSION_NUMBER existed
|
// Macro for enabling features which require Octave version >= major.minor.patch
|
||||||
#define ComplexLU __ignore
|
#define SWIG_OCTAVE_PREREQ(major, minor, patch) \
|
||||||
#include <octave/CmplxLU.h>
|
( (OCTAVE_MAJOR_VERSION<<16) + (OCTAVE_MINOR_VERSION<<8) + OCTAVE_PATCH_VERSION >= ((major)<<16) + ((minor)<<8) + (patch) )
|
||||||
#undef ComplexLU
|
|
||||||
#ifdef octave_Complex_LU_h
|
|
||||||
# define OCTAVE_API_VERSION_NUMBER 36
|
|
||||||
#else
|
|
||||||
# define OCTAVE_API_VERSION_NUMBER 37
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
// Reconstruct Octave major, minor, and patch versions for releases prior to 3.8.1
|
||||||
|
#if !defined(OCTAVE_MAJOR_VERSION)
|
||||||
|
|
||||||
#if OCTAVE_API_VERSION_NUMBER < 37
|
# if !defined(OCTAVE_API_VERSION_NUMBER)
|
||||||
|
|
||||||
|
// Hack to distinguish between Octave 3.8.0, which removed OCTAVE_API_VERSION_NUMBER but did not yet
|
||||||
|
// introduce OCTAVE_MAJOR_VERSION, and Octave <= 3.2, which did not define OCTAVE_API_VERSION_NUMBER
|
||||||
|
# include <octave/ov.h>
|
||||||
|
# if defined(octave_ov_h)
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 8
|
||||||
|
# define OCTAVE_PATCH_VERSION 0
|
||||||
|
# else
|
||||||
|
|
||||||
|
// Hack to distinguish between Octave 3.2 and earlier versions, before OCTAVE_API_VERSION_NUMBER existed
|
||||||
|
# define ComplexLU __ignore
|
||||||
|
# include <octave/CmplxLU.h>
|
||||||
|
# undef ComplexLU
|
||||||
|
# if defined(octave_Complex_LU_h)
|
||||||
|
|
||||||
|
// We know only that this version is prior to Octave 3.2, i.e. OCTAVE_API_VERSION_NUMBER < 37
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 1
|
||||||
|
# define OCTAVE_PATCH_VERSION 99
|
||||||
|
|
||||||
|
# else
|
||||||
|
|
||||||
|
// OCTAVE_API_VERSION_NUMBER == 37
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 2
|
||||||
|
# define OCTAVE_PATCH_VERSION 0
|
||||||
|
|
||||||
|
# endif // defined(octave_Complex_LU_h)
|
||||||
|
|
||||||
|
# endif // defined(octave_ov_h)
|
||||||
|
|
||||||
|
// Correlation between Octave API and version numbers extracted from Octave's
|
||||||
|
// ChangeLogs; version is the *earliest* released Octave with that API number
|
||||||
|
# elif OCTAVE_API_VERSION_NUMBER >= 48
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 6
|
||||||
|
# define OCTAVE_PATCH_VERSION 0
|
||||||
|
|
||||||
|
# elif OCTAVE_API_VERSION_NUMBER >= 45
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 4
|
||||||
|
# define OCTAVE_PATCH_VERSION 1
|
||||||
|
|
||||||
|
# elif OCTAVE_API_VERSION_NUMBER >= 42
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 3
|
||||||
|
# define OCTAVE_PATCH_VERSION 54
|
||||||
|
|
||||||
|
# elif OCTAVE_API_VERSION_NUMBER >= 41
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 3
|
||||||
|
# define OCTAVE_PATCH_VERSION 53
|
||||||
|
|
||||||
|
# elif OCTAVE_API_VERSION_NUMBER >= 40
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 3
|
||||||
|
# define OCTAVE_PATCH_VERSION 52
|
||||||
|
|
||||||
|
# elif OCTAVE_API_VERSION_NUMBER >= 39
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 3
|
||||||
|
# define OCTAVE_PATCH_VERSION 51
|
||||||
|
|
||||||
|
# else // OCTAVE_API_VERSION_NUMBER == 38
|
||||||
|
# define OCTAVE_MAJOR_VERSION 3
|
||||||
|
# define OCTAVE_MINOR_VERSION 3
|
||||||
|
# define OCTAVE_PATCH_VERSION 50
|
||||||
|
|
||||||
|
# endif // !defined(OCTAVE_API_VERSION_NUMBER)
|
||||||
|
|
||||||
|
#endif // !defined(OCTAVE_MAJOR_VERSION)
|
||||||
|
|
||||||
|
#if !SWIG_OCTAVE_PREREQ(3,2,0)
|
||||||
#define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, FS ## cname, args, nargout, doc)
|
#define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, FS ## cname, args, nargout, doc)
|
||||||
#else
|
#else
|
||||||
#define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, G ## cname, args, nargout, doc)
|
#define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, G ## cname, args, nargout, doc)
|
||||||
|
|
@ -427,7 +495,7 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
|
||||||
if (error_state) return dim_vector(1,1);
|
if (error_state) return dim_vector(1,1);
|
||||||
}
|
}
|
||||||
return d;
|
return d;
|
||||||
} else if (out.is_matrix_type() || out.is_real_nd_array() || out.is_numeric_type() ) {
|
} else if (out.is_matrix_type() || out.is_numeric_type() ) {
|
||||||
if (out.rows()==1 || out.columns()==1) {
|
if (out.rows()==1 || out.columns()==1) {
|
||||||
Array<int> a = out.int_vector_value();
|
Array<int> a = out.int_vector_value();
|
||||||
if (error_state) return dim_vector(1,1);
|
if (error_state) return dim_vector(1,1);
|
||||||
|
|
@ -746,7 +814,7 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
|
||||||
return outarg(0).string_value();
|
return outarg(0).string_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OCTAVE_API_VERSION_NUMBER >= 40
|
#if SWIG_OCTAVE_PREREQ(3,3,52)
|
||||||
virtual octave_map map_value() const {
|
virtual octave_map map_value() const {
|
||||||
return octave_map();
|
return octave_map();
|
||||||
}
|
}
|
||||||
|
|
@ -982,7 +1050,7 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
|
||||||
virtual std::string string_value(bool force = false) const
|
virtual std::string string_value(bool force = false) const
|
||||||
{ return ptr->string_value(force); }
|
{ return ptr->string_value(force); }
|
||||||
|
|
||||||
#if OCTAVE_API_VERSION_NUMBER >= 40
|
#if SWIG_OCTAVE_PREREQ(3,3,52)
|
||||||
virtual octave_map map_value() const
|
virtual octave_map map_value() const
|
||||||
{ return ptr->map_value(); }
|
{ return ptr->map_value(); }
|
||||||
#else
|
#else
|
||||||
|
|
@ -1293,10 +1361,12 @@ SWIGRUNTIME void SWIG_Octave_SetGlobalValue(std::string name, const octave_value
|
||||||
}
|
}
|
||||||
|
|
||||||
SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) {
|
SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) {
|
||||||
#if OCTAVE_API_VERSION_NUMBER < 37
|
#if !SWIG_OCTAVE_PREREQ(3,2,0)
|
||||||
link_to_global_variable(curr_sym_tab->lookup(name, true));
|
link_to_global_variable(curr_sym_tab->lookup(name, true));
|
||||||
#else
|
#else
|
||||||
|
#if !SWIG_OCTAVE_PREREQ(3,8,0)
|
||||||
symbol_table::varref(name);
|
symbol_table::varref(name);
|
||||||
|
#endif
|
||||||
symbol_table::mark_global(name);
|
symbol_table::mark_global(name);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ static bool SWIG_init_user(octave_swig_type* module_ns);
|
||||||
SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
|
SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
|
||||||
bool retn;
|
bool retn;
|
||||||
{
|
{
|
||||||
#if OCTAVE_API_VERSION_NUMBER < 38
|
#if !SWIG_OCTAVE_PREREQ(3,3,50)
|
||||||
unwind_protect::begin_frame("SWIG_Octave_LoadModule");
|
unwind_protect::begin_frame("SWIG_Octave_LoadModule");
|
||||||
unwind_protect_int(error_state);
|
unwind_protect_int(error_state);
|
||||||
unwind_protect_int(warning_state);
|
unwind_protect_int(warning_state);
|
||||||
|
|
@ -44,7 +44,7 @@ SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
|
||||||
discard_warning_messages = true;
|
discard_warning_messages = true;
|
||||||
feval(name, octave_value_list(), 0);
|
feval(name, octave_value_list(), 0);
|
||||||
retn = (error_state == 0);
|
retn = (error_state == 0);
|
||||||
#if OCTAVE_API_VERSION_NUMBER < 38
|
#if !SWIG_OCTAVE_PREREQ(3,3,50)
|
||||||
unwind_protect::run_frame("SWIG_Octave_LoadModule");
|
unwind_protect::run_frame("SWIG_Octave_LoadModule");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -57,7 +57,7 @@ SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
|
||||||
SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) {
|
SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) {
|
||||||
bool retn;
|
bool retn;
|
||||||
{
|
{
|
||||||
#if OCTAVE_API_VERSION_NUMBER < 38
|
#if !SWIG_OCTAVE_PREREQ(3,3,50)
|
||||||
unwind_protect::begin_frame("SWIG_Octave_InstallFunction");
|
unwind_protect::begin_frame("SWIG_Octave_InstallFunction");
|
||||||
unwind_protect_int(error_state);
|
unwind_protect_int(error_state);
|
||||||
unwind_protect_int(warning_state);
|
unwind_protect_int(warning_state);
|
||||||
|
|
@ -80,7 +80,7 @@ SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::st
|
||||||
error_state = 0;
|
error_state = 0;
|
||||||
feval("autoload", args, 0);
|
feval("autoload", args, 0);
|
||||||
retn = (error_state == 0);
|
retn = (error_state == 0);
|
||||||
#if OCTAVE_API_VERSION_NUMBER < 38
|
#if !SWIG_OCTAVE_PREREQ(3,3,50)
|
||||||
unwind_protect::run_frame("SWIG_Octave_InstallFunction");
|
unwind_protect::run_frame("SWIG_Octave_InstallFunction");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -196,7 +196,7 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
|
||||||
// definitely affects version 3.2.*, not sure about 3.3.*, seems to be fixed in
|
// definitely affects version 3.2.*, not sure about 3.3.*, seems to be fixed in
|
||||||
// version 3.4.* and above. can be turned off with macro definition.
|
// version 3.4.* and above. can be turned off with macro definition.
|
||||||
#ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK
|
#ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK
|
||||||
#if 36 < OCTAVE_API_VERSION_NUMBER && OCTAVE_API_VERSION_NUMBER < 45
|
#if SWIG_OCTAVE_PREREQ(3,2,0) && !SWIG_OCTAVE_PREREQ(3,4,1)
|
||||||
octave_exit = ::_Exit;
|
octave_exit = ::_Exit;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -212,7 +212,7 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
|
||||||
|
|
||||||
// workaround bug in octave where installing global variable of custom type and then
|
// workaround bug in octave where installing global variable of custom type and then
|
||||||
// exiting without explicitly clearing the variable causes octave to segfault.
|
// exiting without explicitly clearing the variable causes octave to segfault.
|
||||||
#if OCTAVE_API_VERSION_NUMBER > 36
|
#if SWIG_OCTAVE_PREREQ(3,2,0)
|
||||||
octave_value_list eval_args;
|
octave_value_list eval_args;
|
||||||
eval_args.append("base");
|
eval_args.append("base");
|
||||||
eval_args.append("function __swig_atexit__; "
|
eval_args.append("function __swig_atexit__; "
|
||||||
|
|
@ -297,7 +297,7 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OCTAVE_API_VERSION_NUMBER < 37
|
#if !SWIG_OCTAVE_PREREQ(3,2,0)
|
||||||
mlock(me->name());
|
mlock(me->name());
|
||||||
#else
|
#else
|
||||||
mlock();
|
mlock();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue