Accepting request 701625 from home:kwk:branches:devel:tools:building

- Update to 4.0.0
  - Support for Doxygen documentation comments which are parsed and
    converted into JavaDoc or PyDoc comments.
  - STL wrappers improved for C#, Java and Ruby.
  - C++11 STL containers added for Java, Python and Ruby.
  - Improved support for parsing C++11 and C++14 code.
  - Various fixes for shared_ptr.
  - Various C preprocessor corner case fixes.
  - Corner case fixes for member function pointers.
  - Python module overhaul by simplifying the generated code and turning
    most optimizations on by default.
  - %template improvements wrt scoping to align with C++ explicit
    template instantiations.
  - Added support for a command-line options file (sometimes
    called a response file).
  - Numerous enhancements and fixes for all supported target languages.
  - SWIG now classifies the status of target languages into either
    'Experimental' or 'Supported' to indicate the expected maturity
    level.
  - Support for CFFI, Allegrocl, Chicken, CLISP, S-EXP, UFFI, Pike,
    Modula3 has been removed.
  - Octave 4.4-5.1 support added.
  - PHP5 support removed, PHP7 is now the supported PHP version.
  - Minimum Python version required is now 2.7, 3.2-3.7 are the only
    other versions supported.
  - Added support for Javascript NodeJS versions 2-10.
  - OCaml support is much improved and updated, minimum OCaml version
    required is now 3.12.0.
  See https://raw.githubusercontent.com/swig/swig/master/CHANGES
- Drop patches (all included)
  swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch
  swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch
  swig-perl526.patch
  swig-3.0.12-fix-collections.patch
  swig-3.0.12-Fix-Coverity-issue-reported-for-setslice-pycontainer.patch
  swig-3.0.12-Coverity-fix-issue-reported-for-wrapper-argument-che.patch
  swig-3.0.12-support-octave-4.4.patch
  swig-ocaml-int64.patch
  swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_ConvertF.patch

OBS-URL: https://build.opensuse.org/request/show/701625
OBS-URL: https://build.opensuse.org/package/show/devel:tools:building/swig?expand=0&rev=112
This commit is contained in:
Klaus Kämpf 2019-05-13 06:21:09 +00:00 committed by Git OBS Bridge
parent 7e9d914a61
commit 635c445ef0
14 changed files with 72 additions and 1499 deletions

3
rel-4.0.0.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ab5cbf226ec50855aeca08193fbaafe92fe99b2454848b82f444ec96aa246b47
size 3805661

View File

@ -1,58 +0,0 @@
From 21f532975f59f0c156c76cc739f5a93f57d8f6cb Mon Sep 17 00:00:00 2001
From: Mark Dufour <m.dufour@kopano.com>
Date: Tue, 14 Feb 2017 10:48:30 +0100
Subject: [PATCH] [Coverity] fix issue reported for
SWIG_Python_ConvertFunctionPtr
Fix Coverity issue reported for SWIG_Python_ConvertFunctionPtr:
"Execution cannot reach this statement: *ptr = vptr;"
Because if 'ty' is null, then desc becomes null and we return with
SWIG_ERROR. So 'ty' cannot be null at 'if (ty)'.
---
Lib/python/pyrun.swg | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/Lib/python/pyrun.swg b/Lib/python/pyrun.swg
index ab1237f62..939a69204 100644
--- a/Lib/python/pyrun.swg
+++ b/Lib/python/pyrun.swg
@@ -1287,25 +1287,22 @@ SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) {
return SWIG_ConvertPtr(obj, ptr, ty, 0);
} else {
void *vptr = 0;
-
+ swig_cast_info *tc;
+
/* here we get the method pointer for callbacks */
const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0;
if (desc)
desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0;
- if (!desc)
+ if (!desc)
return SWIG_ERROR;
- if (ty) {
- swig_cast_info *tc = SWIG_TypeCheck(desc,ty);
- if (tc) {
- int newmemory = 0;
- *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
- assert(!newmemory); /* newmemory handling not yet implemented */
- } else {
- return SWIG_ERROR;
- }
+ tc = SWIG_TypeCheck(desc,ty);
+ if (tc) {
+ int newmemory = 0;
+ *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+ assert(!newmemory); /* newmemory handling not yet implemented */
} else {
- *ptr = vptr;
+ return SWIG_ERROR;
}
return SWIG_OK;
}
--
2.14.3

View File

@ -1,36 +0,0 @@
From 9825fcbab5c4ddd867432f9922bebfbec7b78af0 Mon Sep 17 00:00:00 2001
From: Mark Dufour <m.dufour@kopano.com>
Date: Tue, 14 Feb 2017 10:34:37 +0100
Subject: [PATCH] [Coverity] fix issue reported for SWIG_Python_FixMethods
Fix Coverity issue reported for SWIG_Python_FixMethods:
"buffer_size: Calling strncpy with a source string whose length
(10 chars) is greater than or equal to the size argument (10)
will fail to null-terminate buff."
The issue is only reported for the "swig_ptr: " line, but for
consistency we replace both occurrences of strncpy with memcpy.
---
Lib/python/pyinit.swg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Lib/python/pyinit.swg b/Lib/python/pyinit.swg
index 2cc582841..fe45ac941 100644
--- a/Lib/python/pyinit.swg
+++ b/Lib/python/pyinit.swg
@@ -306,9 +306,9 @@ SWIG_Python_FixMethods(PyMethodDef *methods,
char *ndoc = (char*)malloc(ldoc + lptr + 10);
if (ndoc) {
char *buff = ndoc;
- strncpy(buff, methods[i].ml_doc, ldoc);
+ memcpy(buff, methods[i].ml_doc, ldoc);
buff += ldoc;
- strncpy(buff, "swig_ptr: ", 10);
+ memcpy(buff, "swig_ptr: ", 10);
buff += 10;
SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
methods[i].ml_doc = ndoc;
--
2.14.3

View File

@ -1,41 +0,0 @@
From 13eeebd2fb3005abc876957c68bde6a92510aa44 Mon Sep 17 00:00:00 2001
From: Mark Dufour <m.dufour@kopano.com>
Date: Tue, 14 Feb 2017 10:53:14 +0100
Subject: [PATCH] [Coverity] fix issue reported for wrapper argument checking
Fix Coverity issue reported for wrapper argument checking:
"Null-checking args suggests that it may be null, but it has already
been dereferenced on all paths leading to the check."
So 'args' is null checked, but after dereferencing it with
PyTuple_Check(args).
---
Source/Modules/python.cxx | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/Source/Modules/python.cxx b/Source/Modules/python.cxx
index a6801fc4e..5e058e773 100644
--- a/Source/Modules/python.cxx
+++ b/Source/Modules/python.cxx
@@ -2541,9 +2541,14 @@ public:
if (!fastunpack) {
Wrapper_add_local(f, "ii", "Py_ssize_t ii");
- if (maxargs - (add_self ? 1 : 0) > 0)
- Append(f->code, "if (!PyTuple_Check(args)) SWIG_fail;\n");
- Append(f->code, "argc = args ? PyObject_Length(args) : 0;\n");
+
+ if (maxargs - (add_self ? 1 : 0) > 0) {
+ Append(f->code, "if (!PyTuple_Check(args)) SWIG_fail;\n");
+ Append(f->code, "argc = PyObject_Length(args);\n");
+ } else {
+ Append(f->code, "argc = args ? PyObject_Length(args) : 0;\n");
+ }
+
if (add_self)
Append(f->code, "argv[0] = self;\n");
Printf(f->code, "for (ii = 0; (ii < %d) && (ii < argc); ii++) {\n", add_self ? maxargs - 1 : maxargs);
--
2.14.3

View File

@ -1,40 +0,0 @@
From 5803e81d488e97623fe29b8629b977be01a8229e Mon Sep 17 00:00:00 2001
From: Mark Dufour <m.dufour@kopano.com>
Date: Mon, 6 Mar 2017 21:16:41 +0100
Subject: [PATCH] Fix Coverity issue reported for setslice (pycontainer.swg):
"CID 11151 (#3-1 of 3): Using invalid iterator (INVALIDATE_ITERATOR)18.
increment_iterator: Incrementing iterator it though it is already past
the end of its container."
Coverity does not understand 'replace_count', so warns that we may go
past self->end() (or self->rend() I guess).
---
Lib/python/pycontainer.swg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Lib/python/pycontainer.swg b/Lib/python/pycontainer.swg
index d40b0baa8..9aefb4fc7 100644
--- a/Lib/python/pycontainer.swg
+++ b/Lib/python/pycontainer.swg
@@ -351,7 +351,7 @@ namespace swig {
typename Sequence::const_iterator isit = is.begin();
typename Sequence::iterator it = self->begin();
std::advance(it,ii);
- for (size_t rc=0; rc<replacecount; ++rc) {
+ for (size_t rc=0; rc<replacecount && it != self->end(); ++rc) {
*it++ = *isit++;
for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c)
it++;
@@ -367,7 +367,7 @@ namespace swig {
typename Sequence::const_iterator isit = is.begin();
typename Sequence::reverse_iterator it = self->rbegin();
std::advance(it,size-ii-1);
- for (size_t rc=0; rc<replacecount; ++rc) {
+ for (size_t rc=0; rc<replacecount && it != self->rend(); ++rc) {
*it++ = *isit++;
for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c)
it++;
--
2.14.3

View File

@ -1,191 +0,0 @@
From 90ba174fcea1618af57aa594199541d47a89b7f6 Mon Sep 17 00:00:00 2001
From: William S Fulton <wsf@fultondesigns.co.uk>
Date: Sun, 17 Sep 2017 19:02:55 +0100
Subject: [PATCH 1/2] Fix generated code for constant expressions containing
wchar_t L literals.
Such as:
# define __WCHAR_MAX (0x7fffffff + L'\0')
Reported on swig-user mailing list.
---
CHANGES.current | 5 +++++
Examples/test-suite/csharp/preproc_constants_c_runme.cs | 3 ++-
Examples/test-suite/csharp/preproc_constants_runme.cs | 2 ++
Examples/test-suite/d/preproc_constants_c_runme.1.d | 2 ++
Examples/test-suite/d/preproc_constants_c_runme.2.d | 2 ++
Examples/test-suite/d/preproc_constants_runme.1.d | 2 ++
Examples/test-suite/d/preproc_constants_runme.2.d | 2 ++
Examples/test-suite/php/preproc_constants_c_runme.php | 2 ++
Examples/test-suite/php/preproc_constants_runme.php | 2 ++
Examples/test-suite/php5/preproc_constants_c_runme.php | 2 ++
Examples/test-suite/php5/preproc_constants_runme.php | 2 ++
Examples/test-suite/preproc_constants.i | 3 +++
Source/CParse/parser.y | 2 +-
13 files changed, 29 insertions(+), 2 deletions(-)
#diff --git a/CHANGES.current b/CHANGES.current
#index 1e4a244..b455a9f 100644
#--- a/CHANGES.current
#+++ b/CHANGES.current
#@@ -7,6 +7,11 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
# Version 4.0.0 (in progress)
# ===========================
#
#+2017-09-17: wsfulton
#+ Fix generated code for constant expressions containing wchar_t L literals such as:
#+ # define __WCHAR_MAX (0x7fffffff + L'\0')
#+ # define __WCHAR_MIN (-__WCHAR_MAX - 1)
#+
# 2017-09-10: mlamarre
# [Python] Patch #1083. Define_DEBUG to 1 to do exactly like Visual Studio
# /LDd, /MDd or /MTd compiler options.
diff --git a/Examples/test-suite/csharp/preproc_constants_c_runme.cs b/Examples/test-suite/csharp/preproc_constants_c_runme.cs
index 76c684d..1c28e49 100644
--- a/Examples/test-suite/csharp/preproc_constants_c_runme.cs
+++ b/Examples/test-suite/csharp/preproc_constants_c_runme.cs
@@ -61,7 +61,8 @@ public class runme {
assert( typeof(int) == preproc_constants_c.EXPR_LAND.GetType() );
assert( typeof(int) == preproc_constants_c.EXPR_LOR.GetType() );
assert( typeof(double) == preproc_constants_c.EXPR_CONDITIONAL.GetType() );
-
+ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MAX.GetType() );
+ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MIN.GetType() );
}
static void assert(bool assertion) {
if (!assertion)
diff --git a/Examples/test-suite/csharp/preproc_constants_runme.cs b/Examples/test-suite/csharp/preproc_constants_runme.cs
index 9fae591..6b02e30 100644
--- a/Examples/test-suite/csharp/preproc_constants_runme.cs
+++ b/Examples/test-suite/csharp/preproc_constants_runme.cs
@@ -60,6 +60,8 @@ public class runme {
assert( typeof(bool) == preproc_constants.EXPR_LAND.GetType() );
assert( typeof(bool) == preproc_constants.EXPR_LOR.GetType() );
assert( typeof(double) == preproc_constants.EXPR_CONDITIONAL.GetType() );
+ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MAX.GetType() );
+ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MIN.GetType() );
}
static void assert(bool assertion) {
diff --git a/Examples/test-suite/d/preproc_constants_c_runme.1.d b/Examples/test-suite/d/preproc_constants_c_runme.1.d
index d846c71..2b349af 100644
--- a/Examples/test-suite/d/preproc_constants_c_runme.1.d
+++ b/Examples/test-suite/d/preproc_constants_c_runme.1.d
@@ -61,4 +61,6 @@ void main() {
static assert(is(int == typeof(EXPR_LAND())));
static assert(is(int == typeof(EXPR_LOR())));
static assert(is(double == typeof(EXPR_CONDITIONAL())));
+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
}
diff --git a/Examples/test-suite/d/preproc_constants_c_runme.2.d b/Examples/test-suite/d/preproc_constants_c_runme.2.d
index 9bdbb93..1bac525 100644
--- a/Examples/test-suite/d/preproc_constants_c_runme.2.d
+++ b/Examples/test-suite/d/preproc_constants_c_runme.2.d
@@ -61,4 +61,6 @@ void main() {
static assert(is(int == typeof(EXPR_LAND())));
static assert(is(int == typeof(EXPR_LOR())));
static assert(is(double == typeof(EXPR_CONDITIONAL())));
+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
}
diff --git a/Examples/test-suite/d/preproc_constants_runme.1.d b/Examples/test-suite/d/preproc_constants_runme.1.d
index 009405f..f743f48 100644
--- a/Examples/test-suite/d/preproc_constants_runme.1.d
+++ b/Examples/test-suite/d/preproc_constants_runme.1.d
@@ -60,4 +60,6 @@ void main() {
static assert(is(bool == typeof(EXPR_LAND())));
static assert(is(bool == typeof(EXPR_LOR())));
static assert(is(double == typeof(EXPR_CONDITIONAL())));
+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
}
diff --git a/Examples/test-suite/d/preproc_constants_runme.2.d b/Examples/test-suite/d/preproc_constants_runme.2.d
index 2d92ef0..0d96c37 100644
--- a/Examples/test-suite/d/preproc_constants_runme.2.d
+++ b/Examples/test-suite/d/preproc_constants_runme.2.d
@@ -60,4 +60,6 @@ void main() {
static assert(is(bool == typeof(EXPR_LAND())));
static assert(is(bool == typeof(EXPR_LOR())));
static assert(is(double == typeof(EXPR_CONDITIONAL())));
+ static assert(is(int == typeof(EXPR_WCHAR_MAX())));
+ static assert(is(int == typeof(EXPR_WCHAR_MIN())));
}
diff --git a/Examples/test-suite/php/preproc_constants_c_runme.php b/Examples/test-suite/php/preproc_constants_c_runme.php
index af9b76e..e59fe18 100644
--- a/Examples/test-suite/php/preproc_constants_c_runme.php
+++ b/Examples/test-suite/php/preproc_constants_c_runme.php
@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant
check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type");
check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type");
check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
?>
diff --git a/Examples/test-suite/php/preproc_constants_runme.php b/Examples/test-suite/php/preproc_constants_runme.php
index 5c9119b..8e117ea 100644
--- a/Examples/test-suite/php/preproc_constants_runme.php
+++ b/Examples/test-suite/php/preproc_constants_runme.php
@@ -61,5 +61,7 @@ check::equal(gettype(preproc_constants::EXPR_OR), "integer", "preproc_constants.
check::equal(gettype(preproc_constants::EXPR_LAND), "boolean", "preproc_constants.EXPR_LAND has unexpected type");
check::equal(gettype(preproc_constants::EXPR_LOR), "boolean", "preproc_constants.EXPR_LOR has unexpected type");
check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
+check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
+check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
?>
diff --git a/Examples/test-suite/php5/preproc_constants_c_runme.php b/Examples/test-suite/php5/preproc_constants_c_runme.php
index 1ea0195..d978fab 100644
--- a/Examples/test-suite/php5/preproc_constants_c_runme.php
+++ b/Examples/test-suite/php5/preproc_constants_c_runme.php
@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant
check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type");
check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type");
check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
?>
diff --git a/Examples/test-suite/php5/preproc_constants_runme.php b/Examples/test-suite/php5/preproc_constants_runme.php
index fb9ee4f..7527026 100644
--- a/Examples/test-suite/php5/preproc_constants_runme.php
+++ b/Examples/test-suite/php5/preproc_constants_runme.php
@@ -70,5 +70,7 @@ check::equal(gettype(preproc_constants::EXPR_LAND), "integer", "preproc_constant
check::equal(gettype(preproc_constants::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type");
check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type");
+check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type");
+check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type");
?>
diff --git a/Examples/test-suite/preproc_constants.i b/Examples/test-suite/preproc_constants.i
index 3a999ad..16b44c9 100644
--- a/Examples/test-suite/preproc_constants.i
+++ b/Examples/test-suite/preproc_constants.i
@@ -87,6 +87,9 @@
#define EXPR_LOR 0xFF || 1
#define EXPR_CONDITIONAL true ? 2 : 2.2
+#define EXPR_WCHAR_MAX (0x7fffffff + L'\0')
+#define EXPR_WCHAR_MIN (-EXPR_WCHAR_MAX - 1)
+
#define EXPR_CHAR_COMPOUND_ADD 'A' + 12
#define EXPR_CHAR_COMPOUND_LSHIFT 'B' << 6
#define H_SUPPRESS_SCALING_MAGIC (('s'<<24) | ('u'<<16) | ('p'<<8) | 'p')
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
index 2e92cd0..273dadb 100644
--- a/Source/CParse/parser.y
+++ b/Source/CParse/parser.y
@@ -194,7 +194,7 @@ int SWIG_cparse_template_reduce(int treduce) {
* ----------------------------------------------------------------------------- */
static int promote_type(int t) {
- if (t <= T_UCHAR || t == T_CHAR) return T_INT;
+ if (t <= T_UCHAR || t == T_CHAR || t == T_WCHAR) return T_INT;
return t;
}
--
2.9.5

View File

@ -1,76 +0,0 @@
From 4079fb927b3761ee4e44ff103f37440cb8f3e260 Mon Sep 17 00:00:00 2001
From: William S Fulton <wsf@fultondesigns.co.uk>
Date: Tue, 12 Jun 2018 21:05:07 +0100
Subject: [PATCH] Python 3.7 support - deprecation of classes in the
collections module
Change the base classes in the pyabc.i file to use the
collections.abc module instead of collections due to the deprecation
of the classes in the collections module in Python 3.7.
---
.../python/python_abstractbase_runme3.py | 24 +++++++++++++------
Lib/python/pyabc.i | 14 +++++------
4 files changed, 53 insertions(+), 18 deletions(-)
diff --git a/Examples/test-suite/python/python_abstractbase_runme3.py b/Examples/test-suite/python/python_abstractbase_runme3.py
index 4fdc799352..9f99dcb546 100644
--- a/Examples/test-suite/python/python_abstractbase_runme3.py
+++ b/Examples/test-suite/python/python_abstractbase_runme3.py
@@ -1,5 +1,11 @@
+import sys
+
+# collections.abc requires Python 3.3+
+if sys.version_info[0:2] < (3, 3):
+ exit(0)
+
from python_abstractbase import *
-from collections import *
+import collections.abc
# This is expected to fail with -builtin option
# Builtin types can't inherit from pure-python abstract bases
@@ -10,12 +16,16 @@
if not is_swig_py3:
exit(0)
-assert issubclass(Mapii, MutableMapping)
-assert issubclass(Multimapii, MutableMapping)
-assert issubclass(IntSet, MutableSet)
-assert issubclass(IntMultiset, MutableSet)
-assert issubclass(IntVector, MutableSequence)
-assert issubclass(IntList, MutableSequence)
+def check_issubclass(derived, base):
+ if not issubclass(derived, base):
+ raise RuntimeError("{} is not a subclass of {}".format(derived, base))
+
+check_issubclass(Mapii, collections.abc.MutableMapping)
+check_issubclass(Multimapii, collections.abc.MutableMapping)
+check_issubclass(IntSet, collections.abc.MutableSet)
+check_issubclass(IntMultiset, collections.abc.MutableSet)
+check_issubclass(IntVector, collections.abc.MutableSequence)
+check_issubclass(IntList, collections.abc.MutableSequence)
mapii = Mapii()
multimapii = Multimapii()
diff --git a/Lib/python/pyabc.i b/Lib/python/pyabc.i
index 12ce65985e..fbd91dce44 100644
--- a/Lib/python/pyabc.i
+++ b/Lib/python/pyabc.i
@@ -1,10 +1,10 @@
%define %pythonabc(Type, Abc)
%feature("python:abc", #Abc) Type;
%enddef
-%pythoncode %{import collections%}
-%pythonabc(std::vector, collections.MutableSequence);
-%pythonabc(std::list, collections.MutableSequence);
-%pythonabc(std::map, collections.MutableMapping);
-%pythonabc(std::multimap, collections.MutableMapping);
-%pythonabc(std::set, collections.MutableSet);
-%pythonabc(std::multiset, collections.MutableSet);
+%pythoncode %{import collections.abc%}
+%pythonabc(std::vector, collections.abc.MutableSequence);
+%pythonabc(std::list, collections.abc.MutableSequence);
+%pythonabc(std::map, collections.abc.MutableMapping);
+%pythonabc(std::multimap, collections.abc.MutableMapping);
+%pythonabc(std::set, collections.abc.MutableSet);
+%pythonabc(std::multiset, collections.abc.MutableSet);

View File

@ -1,975 +0,0 @@
https://github.com/swig/swig/pull/1256
From e8e507bf0bae72e7f3bb798e326ec5d81b230205 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 10 May 2018 23:26:06 +1000
Subject: [PATCH 01/18] Lib/octave: fix function name passed to
unwind_protect::begin_frame()
---
Lib/octave/octruntime.swg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
index f5e687123c..96f7399f93 100644
--- a/Lib/octave/octruntime.swg
+++ b/Lib/octave/octruntime.swg
@@ -170,7 +170,7 @@ SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::st
frame.protect_var(discard_error_messages); discard_error_messages = true;
frame.protect_var(discard_warning_messages); discard_warning_messages = true;
#else
- unwind_protect::begin_frame("SWIG_Octave_LoadModule");
+ unwind_protect::begin_frame("SWIG_Octave_InstallFunction");
unwind_protect_int(error_state); error_state = 0;
unwind_protect_int(warning_state); warning_state = 0;
unwind_protect_bool(discard_error_messages); discard_error_messages = true;
From a46909a414ee9a1fd3e1996066111774e852557e Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Tue, 31 Jan 2017 11:43:42 +1300
Subject: [PATCH 02/18] Lib/octave: call octave::feval() instead of feval() for
Octave >= 4.4
---
Lib/octave/octruntime.swg | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
index 96f7399f93..e468eb49e0 100644
--- a/Lib/octave/octruntime.swg
+++ b/Lib/octave/octruntime.swg
@@ -139,7 +139,11 @@ SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
#endif
#if SWIG_OCTAVE_PREREQ(4,2,0)
try {
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::feval(name, octave_value_list(), 0);
+#else
feval(name, octave_value_list(), 0);
+#endif
retn = true;
} catch (octave::execution_exception&) { }
#else
@@ -181,7 +185,11 @@ SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::st
args.append(octloadfcn->fcn_file_name());
#if SWIG_OCTAVE_PREREQ(4,2,0)
try {
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::feval("autoload", args, 0);
+#else
feval("autoload", args, 0);
+#endif
retn = true;
} catch (octave::execution_exception&) { }
#else
@@ -351,7 +359,11 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
"__swig_atexit__; "
"atexit(\"__swig_atexit__\", false); "
"atexit(\"__swig_atexit__\")");
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::feval("evalin", eval_args, 0);
+#else
feval("evalin", eval_args, 0);
+#endif
#endif
octave_swig_ref::register_type();
From 358345db9eb875cb6b2bd51c5ed10efb3816d4f3 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 10 May 2018 20:32:50 +1000
Subject: [PATCH 03/18] Lib/octave: replace is_cell() with iscell() for Octave
>= 4.4
---
Lib/octave/octcontainer.swg | 4 ++++
Lib/octave/octprimtypes.swg | 8 +++++++-
Lib/octave/octrun.swg | 20 ++++++++++++++++++--
Lib/octave/std_pair.i | 16 ++++++++++++++--
4 files changed, 43 insertions(+), 5 deletions(-)
diff --git a/Lib/octave/octcontainer.swg b/Lib/octave/octcontainer.swg
index 9b6520739a..269ff75442 100644
--- a/Lib/octave/octcontainer.swg
+++ b/Lib/octave/octcontainer.swg
@@ -567,7 +567,11 @@ namespace swig {
if (seq) *seq = p;
return SWIG_OLDOBJ;
}
+%#if SWIG_OCTAVE_PREREQ(4,4,0)
+ } else if (obj.iscell()) {
+%#else
} else if (obj.is_cell()) {
+%#endif
try {
OctSequence_Cont<value_type> octseq(obj);
if (seq) {
diff --git a/Lib/octave/octprimtypes.swg b/Lib/octave/octprimtypes.swg
index 663d1fe103..308fe64996 100644
--- a/Lib/octave/octprimtypes.swg
+++ b/Lib/octave/octprimtypes.swg
@@ -214,7 +214,13 @@ SWIG_AsVal_dec(bool)(const octave_value& ov, bool *val)
SWIGINTERN int
SWIG_AsCharPtrAndSize(octave_value ov, char** cptr, size_t* psize, int *alloc)
{
- if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
+ if (
+%#if SWIG_OCTAVE_PREREQ(4,4,0)
+ ov.iscell()
+%#else
+ ov.is_cell()
+%#endif
+ && ov.rows() == 1 && ov.columns() == 1)
ov = ov.cell_value()(0);
if (!ov.is_string())
return SWIG_TypeError;
diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
index 57a888fb40..d6f75a7b5e 100644
--- a/Lib/octave/octrun.swg
+++ b/Lib/octave/octrun.swg
@@ -383,7 +383,11 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
return dim_vector(1,1);
// Return value should be cell or matrix of integers
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ if (out.iscell()) {
+#else
if (out.is_cell()) {
+#endif
const Cell & c=out.cell_value();
int ndim = c.rows();
if (ndim==1 && c.columns()!=1) ndim = c.columns();
@@ -1238,7 +1242,13 @@ namespace Swig {
}
SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov) {
- if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
+ if (
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ ov.iscell()
+#else
+ ov.is_cell()
+#endif
+ && ov.rows() == 1 && ov.columns() == 1)
ov = ov.cell_value()(0);
return swig_value_deref(*ov.internal_rep());
}
@@ -1357,7 +1367,13 @@ SWIGRUNTIME octave_value SWIG_Octave_NewPointerObj(void *ptr, swig_type_info *ty
}
SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(octave_value ov, void **ptr, swig_type_info *type, int flags, int *own) {
- if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
+ if (
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ ov.iscell()
+#else
+ ov.is_cell()
+#endif
+ && ov.rows() == 1 && ov.columns() == 1)
ov = ov.cell_value()(0);
if (!ov.is_defined() ||
(ov.is_matrix_type() && ov.rows() == 0 && ov.columns() == 0) ) {
diff --git a/Lib/octave/std_pair.i b/Lib/octave/std_pair.i
index 2f3d4dfa40..2f307380e7 100644
--- a/Lib/octave/std_pair.i
+++ b/Lib/octave/std_pair.i
@@ -38,7 +38,13 @@
}
static int asval(const octave_value& obj, std::pair<T,U> *val) {
- if (obj.is_cell()) {
+ if (
+%#if SWIG_OCTAVE_PREREQ(4,4,0)
+ obj.iscell()
+%#else
+ obj.is_cell()
+%#endif
+ ) {
Cell c=obj.cell_value();
if (c.numel()<2) {
error("pair from Cell array requires at least two elements");
@@ -96,7 +102,13 @@
}
static int asptr(const octave_value& obj, std::pair<T,U> **val) {
- if (obj.is_cell()) {
+ if (
+%#if SWIG_OCTAVE_PREREQ(4,4,0)
+ obj.iscell()
+%#else
+ obj.is_cell()
+%#endif
+ ) {
Cell c=obj.cell_value();
if (c.numel()<2) {
error("pair from Cell array requires at least two elements");
From 6f0561eb5772a04162ac631951999698a466253b Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 10 May 2018 20:33:21 +1000
Subject: [PATCH 04/18] Lib/octave: replace is_numeric_type() with isnumeric()
for Octave >= 4.4
---
Lib/octave/octrun.swg | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
index d6f75a7b5e..f5d8b38988 100644
--- a/Lib/octave/octrun.swg
+++ b/Lib/octave/octrun.swg
@@ -405,7 +405,11 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
if (error_state) return dim_vector(1,1);
}
return d;
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ } else if (out.is_matrix_type() || out.isnumeric() ) {
+#else
} else if (out.is_matrix_type() || out.is_numeric_type() ) {
+#endif
if (out.rows()==1 || out.columns()==1) {
Array<int> a = out.int_vector_value();
if (error_state) return dim_vector(1,1);
From 04357dca210a3e90e464e00c9ed1b71e38807723 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Sat, 12 May 2018 03:52:59 +1000
Subject: [PATCH 05/18] Lib/octave: replace is_bool_type() with islogical() for
Octave >= 4.4
---
Lib/octave/octprimtypes.swg | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Lib/octave/octprimtypes.swg b/Lib/octave/octprimtypes.swg
index 308fe64996..1c9aa9089c 100644
--- a/Lib/octave/octprimtypes.swg
+++ b/Lib/octave/octprimtypes.swg
@@ -18,7 +18,11 @@ SWIGINTERNINLINE octave_value
SWIGINTERN int
SWIG_AsVal_dec(bool)(const octave_value& ov, bool *val)
{
+%#if SWIG_OCTAVE_PREREQ(4,4,0)
+ if (!ov.islogical())
+%#else
if (!ov.is_bool_type())
+%#endif
return SWIG_ERROR;
if (val)
*val = ov.bool_value();
From 931656bcbe7c2bf37bb5d831b47fab9a38695e91 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 10 May 2018 21:52:28 +1000
Subject: [PATCH 06/18] Lib/octave: 'octave_exit' not longer exists in Octave
>= 4.4
- Instead must register atexit() function, since Octave still
cannot clean up its memory usage on exit with SWIG modules
---
Lib/octave/octruntime.swg | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
index e468eb49e0..b2fde69c2f 100644
--- a/Lib/octave/octruntime.swg
+++ b/Lib/octave/octruntime.swg
@@ -320,6 +320,8 @@ static const char *const SWIG_name_usage = "-*- texinfo -*- \n\
Loads the SWIG-generated module `" SWIG_name_d "'.\n\
@end deftypefn";
+void __swig_atexit__(void) { ::_Exit(0); }
+
DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
static octave_swig_type* module_ns = 0;
@@ -330,7 +332,9 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
// version 3.4.*, but reappeared in 4.2.*, so turn on for all versions after 3.2.*.
// can be turned off with macro definition.
#ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK
-#if SWIG_OCTAVE_PREREQ(3,2,0)
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ atexit(__swig_atexit__);
+#elif SWIG_OCTAVE_PREREQ(3,2,0)
octave_exit = ::_Exit;
#endif
#endif
From df92ad6ebcb0995f04194b38ee19e0b7f08c730a Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 10 May 2018 22:03:41 +1000
Subject: [PATCH 07/18] Lib/octave: fix call to octave::call_stack::current()
for Octave >= 4.4
---
Lib/octave/octruntime.swg | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
index b2fde69c2f..d83a27f579 100644
--- a/Lib/octave/octruntime.swg
+++ b/Lib/octave/octruntime.swg
@@ -375,7 +375,12 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
SWIG_InitializeModule(0);
SWIG_PropagateClientData();
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::call_stack& stack = octave::interpreter::the_interpreter()->get_call_stack();
+ octave_function *me = stack.current();
+#else
octave_function *me = octave_call_stack::current();
+#endif
if (!SWIG_Octave_InstallFunction(me, "subclass")) {
return octave_value_list();
From ce67bce72e8b82c47295c320dd990d30d4c4bbde Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Thu, 10 May 2018 22:04:30 +1000
Subject: [PATCH 08/18] Lib/octave: fix call to mlock() for Octave >= 4.4
---
Lib/octave/octruntime.swg | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
index d83a27f579..46faade9c1 100644
--- a/Lib/octave/octruntime.swg
+++ b/Lib/octave/octruntime.swg
@@ -447,10 +447,12 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
}
}
-#if !SWIG_OCTAVE_PREREQ(3,2,0)
- mlock(me->name());
-#else
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::interpreter::the_interpreter()->mlock();
+#elif SWIG_OCTAVE_PREREQ(3,2,0)
mlock();
+#else
+ mlock(me->name());
#endif
}
From 84aab22f669e90609c417c39cf4d81809fa1c5b6 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Fri, 11 May 2018 15:31:26 +1000
Subject: [PATCH 09/18] Lib/Octave: in Octave >= 4.4, assign reference to base
class in subclass
- See Examples/octave/callback/runme.m: a.run() calls Octave callback,
but due to changes in behaviour to subsref() a.Callback.run() can no
longer be used to call C callback unless a.Callback actually exists;
subsrefs() just gets the "Callback" call whereas prior to Octave 4.4
it would get both the "Callback" and "run" calls. So now a.Callback is
set to the original base class (with own=0) so that it can be accessed
---
Lib/octave/octrun.swg | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
index f5d8b38988..6e297d3885 100644
--- a/Lib/octave/octrun.swg
+++ b/Lib/octave/octrun.swg
@@ -484,8 +484,12 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
}
types.insert(types.end(), rhs.types.begin(), rhs.types.end());
members.insert(rhs.members.begin(), rhs.members.end());
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ assign(rhs.swig_type_name(), rhs.as_value());
+#else
rhs.types.clear();
rhs.members.clear();
+#endif
}
typedef member_map::const_iterator swig_member_const_iterator;
From 94e8853e610cf545ba42bfa77d8ac1d659adb7a5 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Sat, 12 May 2018 02:26:01 +1000
Subject: [PATCH 10/18] Lib/octave: fix operator installation for Octave >= 4.4
---
Lib/octave/octrun.swg | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
index 6e297d3885..ae014f9bd6 100644
--- a/Lib/octave/octrun.swg
+++ b/Lib/octave/octrun.swg
@@ -1279,12 +1279,24 @@ SWIGRUNTIME octave_value swig_unary_op_##name(const octave_base_value &x) { \
SWIGRUNTIME octave_value swig_binary_op_##name(const octave_base_value&lhs,const octave_base_value &rhs) { \
return octave_swig_type::dispatch_binary_op(lhs,rhs,#name); \
}
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+#define swigreg_unary_op(name) \
+if (!octave_value_typeinfo::lookup_unary_op(octave_value::op_##name,tid)) \
+typeinfo.register_unary_op(octave_value::op_##name,tid,swig_unary_op_##name);
+#else
#define swigreg_unary_op(name) \
if (!octave_value_typeinfo::lookup_unary_op(octave_value::op_##name,tid)) \
octave_value_typeinfo::register_unary_op(octave_value::op_##name,tid,swig_unary_op_##name);
+#endif
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+#define swigreg_binary_op(name) \
+if (!octave_value_typeinfo::lookup_binary_op(octave_value::op_##name,tid1,tid2)) \
+typeinfo.register_binary_op(octave_value::op_##name,tid1,tid2,swig_binary_op_##name);
+#else
#define swigreg_binary_op(name) \
if (!octave_value_typeinfo::lookup_binary_op(octave_value::op_##name,tid1,tid2)) \
octave_value_typeinfo::register_binary_op(octave_value::op_##name,tid1,tid2,swig_binary_op_##name);
+#endif
swig_unary_op(not);
swig_unary_op(uplus);
@@ -1318,6 +1330,9 @@ octave_value_typeinfo::register_binary_op(octave_value::op_##name,tid1,tid2,swig
swig_binary_op(el_or);
SWIGRUNTIME void SWIG_InstallUnaryOps(int tid) {
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::type_info& typeinfo = octave::interpreter::the_interpreter()->get_type_info();
+#endif
swigreg_unary_op(not);
swigreg_unary_op(uplus);
swigreg_unary_op(uminus);
@@ -1327,6 +1342,9 @@ octave_value_typeinfo::register_binary_op(octave_value::op_##name,tid1,tid2,swig
swigreg_unary_op(decr);
}
SWIGRUNTIME void SWIG_InstallBinaryOps(int tid1, int tid2) {
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::type_info& typeinfo = octave::interpreter::the_interpreter()->get_type_info();
+#endif
swigreg_binary_op(add);
swigreg_binary_op(sub);
swigreg_binary_op(mul);
From d0b1105f3018516e4a94dd57e6bae83167bf2f1c Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Sat, 12 May 2018 02:29:07 +1000
Subject: [PATCH 11/18] Lib/octave: use new class for function member
dereference with Octave >= 4.4
---
Lib/octave/octrun.swg | 80 +++++++++++++++++++++++++++++++++++++--
Lib/octave/octruntime.swg | 30 +++++++++++++++
2 files changed, 106 insertions(+), 4 deletions(-)
diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
index ae014f9bd6..45105e207d 100644
--- a/Lib/octave/octrun.swg
+++ b/Lib/octave/octrun.swg
@@ -151,6 +151,67 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
const swig_type_info **base;
};
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ // in Octave 4.4 behaviour of octave_builtin() appears to have changed and 'self' argument is no longer passed
+ // to function (maybe because this is now a 'method'??) so need to create our own octave_function subclass
+#define SWIG_OCTAVE_BOUND_FUNC(func, args) octave_value(new octave_swig_bound_func(func, args))
+ class octave_swig_bound_func : public octave_function {
+ public:
+
+ octave_swig_bound_func(void) : octave_function(), method(0), first_args()
+ { }
+
+ octave_swig_bound_func(octave_function* _method, octave_value_list _first_args)
+ : octave_function("", ""), method(_method), first_args(_first_args)
+ { }
+
+ octave_swig_bound_func(const octave_swig_bound_func& f) = delete;
+
+ octave_swig_bound_func& operator= (const octave_swig_bound_func& f) = delete;
+
+ ~octave_swig_bound_func(void) = default;
+
+ bool is_function(void) const { return true; }
+
+ octave_function* function_value(bool = false) { return this; }
+
+ octave_value_list call(octave::tree_evaluator& tw, int nargout = 0, const octave_value_list& args = octave_value_list()) {
+ octave_value_list all_args;
+ all_args.append(first_args);
+ all_args.append(args);
+ return method->call(tw, nargout, all_args);
+ }
+
+ octave_value subsref(const std::string &ops, const std::list < octave_value_list > &idx) {
+ octave_value_list ovl = subsref(ops, idx, 1);
+ return ovl.length() ? ovl(0) : octave_value();
+ }
+
+ octave_value_list subsref(const std::string &ops, const std::list < octave_value_list > &idx, int nargout) {
+ assert(ops.size() > 0);
+ assert(ops.size() == idx.size());
+ if (ops != "(")
+ error("invalid function call");
+ octave::tree_evaluator& tw = octave::interpreter::the_interpreter()->get_evaluator();
+ return call(tw, nargout, *idx.begin());
+ }
+
+ protected:
+
+ octave_function* method;
+ octave_value_list first_args;
+
+ std::set<std::string> dispatch_classes;
+
+ private:
+
+ DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
+ };
+ DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(octave_swig_bound_func, "octave_swig_bound_func", "octave_swig_bound_func");
+#else
+#define SWIG_OCTAVE_BOUND_FUNC(func, args) octave_value(func)
+#endif
+
// octave_swig_type plays the role of both the shadow class and the class
// representation within Octave, since there is no support for classes.
//
@@ -323,13 +384,17 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
}
octave_value_list member_deref(member_value_pair *m, const octave_value_list &args) {
- if (m->second.is_defined())
- return m->second;
- else if (m->first) {
+ if (m->second.is_defined()) {
+ if (m->second.is_function() || m->second.is_function_handle()) {
+ return SWIG_OCTAVE_BOUND_FUNC(m->second.function_value(), args);
+ } else {
+ return m->second;
+ }
+ } else if (m->first) {
if (m->first->get_method)
return m->first->get_method(args, 1);
else if (m->first->method)
- return octave_value(new octave_builtin(m->first->method));
+ return SWIG_OCTAVE_BOUND_FUNC(new octave_builtin(m->first->method), args);
}
error("undefined member");
return octave_value_list();
@@ -860,7 +925,14 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
octave_function *fcn = is_valid_function(symbol, std::string(), false);
if (!fcn)
return false;
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::tree_evaluator& tw = octave::interpreter::the_interpreter()->get_evaluator();
+ octave_value_list retval = fcn->call(tw, 1, args);
+ if (retval.length() == 1)
+ ret = retval(0);
+#else
ret = fcn->do_multi_index_op(1, args)(0);
+#endif
return true;
}
diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
index 46faade9c1..f98bf4fe4e 100644
--- a/Lib/octave/octruntime.swg
+++ b/Lib/octave/octruntime.swg
@@ -370,8 +370,38 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
#endif
#endif
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ {
+ octave::type_info& typeinfo = octave::interpreter::the_interpreter()->get_type_info();
+ string_vector types = typeinfo.installed_type_names();
+ bool register_octave_swig_ref = true;
+ bool register_octave_swig_packed = true;
+ bool register_octave_swig_bound_func = true;
+ for (int i = 0; i < types.numel(); ++i) {
+ if (types(i) == octave_swig_ref::static_type_name()) {
+ register_octave_swig_ref = false;
+ }
+ if (types(i) == octave_swig_packed::static_type_name()) {
+ register_octave_swig_packed = false;
+ }
+ if (types(i) == octave_swig_bound_func::static_type_name()) {
+ register_octave_swig_bound_func = false;
+ }
+ }
+ if (register_octave_swig_ref) {
+ octave_swig_ref::register_type();
+ }
+ if (register_octave_swig_packed) {
+ octave_swig_packed::register_type();
+ }
+ if (register_octave_swig_bound_func) {
+ octave_swig_bound_func::register_type();
+ }
+ }
+#else
octave_swig_ref::register_type();
octave_swig_packed::register_type();
+#endif
SWIG_InitializeModule(0);
SWIG_PropagateClientData();
From 6586616e23e499189b2acaf9e8244d9574cbf5b0 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Sat, 12 May 2018 02:36:13 +1000
Subject: [PATCH 12/18] Lib/octave: fix getting/setting global variables for
Octave >= 4.4
---
Lib/octave/octrun.swg | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
index 45105e207d..feed973cc8 100644
--- a/Lib/octave/octrun.swg
+++ b/Lib/octave/octrun.swg
@@ -1504,14 +1504,30 @@ SWIGRUNTIMEINLINE void SWIG_Octave_SetConstant(octave_swig_type *module_ns, cons
}
SWIGRUNTIMEINLINE octave_value SWIG_Octave_GetGlobalValue(std::string name) {
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
+ return symtab.global_varval(name);
+#else
return get_global_value(name, true);
+#endif
}
SWIGRUNTIME void SWIG_Octave_SetGlobalValue(std::string name, const octave_value& value) {
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
+ symtab.global_assign(name, value);
+#else
set_global_value(name, value);
+#endif
}
SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) {
+#if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
+ octave::symbol_scope symscope = octave::interpreter::the_interpreter()->get_current_scope();
+ symscope.assign(name, symtab.global_varval(name));
+ symscope.mark_global(name);
+#else
#if !SWIG_OCTAVE_PREREQ(3,2,0)
link_to_global_variable(curr_sym_tab->lookup(name, true));
#else
@@ -1520,6 +1536,7 @@ SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) {
#endif
symbol_table::mark_global(name);
#endif
+#endif
}
SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) {
From a169eef3c0ee5436a09ce7bbd97ebaf189ffa35d Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Fri, 11 May 2018 22:22:42 +1000
Subject: [PATCH 13/18] Examples/Makefile.in: unset OCTAVE_PATH when running
Octave for tests
---
Examples/Makefile.in | 2 +-
Examples/test-suite/octave/Makefile.in | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Examples/Makefile.in b/Examples/Makefile.in
index 8218f51224..58da8ec1dc 100644
--- a/Examples/Makefile.in
+++ b/Examples/Makefile.in
@@ -463,7 +463,7 @@ octave_cpp: $(SRCDIR_SRCS)
# -----------------------------------------------------------------
octave_run:
- OCTAVE_HISTFILE=/dev/null $(RUNTOOL) $(OCTAVE) $(OCTAVE_SCRIPT) $(RUNPIPE)
+ env OCTAVE_PATH= OCTAVE_HISTFILE=/dev/null $(RUNTOOL) $(OCTAVE) $(OCTAVE_SCRIPT) $(RUNPIPE)
# -----------------------------------------------------------------
# Version display
diff --git a/Examples/test-suite/octave/Makefile.in b/Examples/test-suite/octave/Makefile.in
index f5ad0e8a52..3c8f3b165e 100644
--- a/Examples/test-suite/octave/Makefile.in
+++ b/Examples/test-suite/octave/Makefile.in
@@ -65,7 +65,7 @@ CSRCS = octave_empty.c
# a file is found which has _runme.m appended after the testcase name.
run_testcase = \
if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
- env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVE_PATH=$(srcdir):$$OCTAVE_PATH $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
+ env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVE_PATH=$(srcdir) OCTAVE_HISTFILE=/dev/null $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
fi
# Clean: remove the generated .m file
From af97a312d41fa72ef2f6b86c6c8e858392f79330 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Tue, 31 Jan 2017 11:48:42 +1300
Subject: [PATCH 14/18] Examples/octave/module_load/runme.m: do not use
duplicate function names
---
Examples/octave/module_load/runme.m | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/Examples/octave/module_load/runme.m b/Examples/octave/module_load/runme.m
index 0e327efcdc..4069e9939d 100644
--- a/Examples/octave/module_load/runme.m
+++ b/Examples/octave/module_load/runme.m
@@ -16,24 +16,24 @@
# load module in a function globally before base context
clear all;
-function testme
+function testme_1
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
endfunction
-testme
-testme
+testme_1
+testme_1
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
clear all
-function testme
+function testme_2
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
endfunction
-testme
-testme
+testme_2
+testme_2
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
@@ -44,24 +44,24 @@
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
-function testme
+function testme_3
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
endfunction
-testme
-testme
+testme_3
+testme_3
clear all
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
-function testme
+function testme_4
swigexample;
assert(cvar.ivar == ifunc);
assert(exist("swigexample","var"));
endfunction
-testme
-testme
+testme_4
+testme_4
clear all
# octave 3.0.5 randomly crashes on the remaining tests
From 64ad3f0ca87dcd9d4a54692e7afdbc887b793268 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Fri, 11 May 2018 21:15:09 +1000
Subject: [PATCH 15/18] Examples/octave/module_load/runme.m: update 'exist()'
statements for Octave >= 4.4
---
Examples/octave/module_load/runme.m | 41 +++++++++++++++++++----------
1 file changed, 27 insertions(+), 14 deletions(-)
diff --git a/Examples/octave/module_load/runme.m b/Examples/octave/module_load/runme.m
index 4069e9939d..beab1213b0 100644
--- a/Examples/octave/module_load/runme.m
+++ b/Examples/octave/module_load/runme.m
@@ -5,60 +5,70 @@
# load module
clear all;
+assert(exist("swigexample") == 3);
swigexample;
+assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
-assert(exist("swigexample","var"));
clear all
+assert(exist("swigexample") == 3);
swigexample;
+assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
-assert(exist("swigexample","var"));
clear all
# load module in a function globally before base context
clear all;
function testme_1
+ assert(exist("swigexample") == 3);
swigexample;
+ assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
- assert(exist("swigexample","var"));
endfunction
testme_1
testme_1
+assert(exist("swigexample") == 3);
swigexample;
+assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
-assert(exist("swigexample","var"));
clear all
function testme_2
+ assert(exist("swigexample") == 3);
swigexample;
+ assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
- assert(exist("swigexample","var"));
endfunction
testme_2
testme_2
+assert(exist("swigexample") == 3);
swigexample;
+assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
-assert(exist("swigexample","var"));
clear all
# load module in a function globally after base context
clear all;
+assert(exist("swigexample") == 3);
swigexample;
+assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
-assert(exist("swigexample","var"));
function testme_3
+ assert(exist("swigexample") == 3);
swigexample;
+ assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
- assert(exist("swigexample","var"));
endfunction
testme_3
testme_3
clear all
+assert(exist("swigexample") == 3);
swigexample;
+assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
-assert(exist("swigexample","var"));
function testme_4
+ assert(exist("swigexample") == 3);
swigexample;
+ assert(isglobal("swigexample"));
assert(cvar.ivar == ifunc);
- assert(exist("swigexample","var"));
endfunction
testme_4
testme_4
@@ -71,13 +81,16 @@
# load module with no cvar
clear all;
+who;
+assert(exist("swigexample2") == 3);
swigexample2;
+assert(isglobal("swigexample2"));
assert(swigexample2.ivar == ifunc);
-assert(exist("swigexample2","var"));
-assert(!isglobal("cvar"))
+assert(!exist("cvar", "var"));
clear all
+assert(exist("swigexample2") == 3);
swigexample2;
+assert(isglobal("swigexample2"));
assert(swigexample2.ivar == ifunc);
-assert(exist("swigexample2","var"));
-assert(!isglobal("cvar"))
+assert(!exist("cvar", "var"));
clear all
From a2ab3d7b20feec5f46100d98712dd92cf4f9bc52 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Sat, 12 May 2018 19:23:12 +1000
Subject: [PATCH 16/18] Examples/test-suite/register_par.i: rename 'tree' to
'swig_tree'
- 'tree' is a declared symbol in Octave >= 4.4 headers
---
Examples/test-suite/register_par.i | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Examples/test-suite/register_par.i b/Examples/test-suite/register_par.i
index b4172c0599..6438414559 100644
--- a/Examples/test-suite/register_par.i
+++ b/Examples/test-suite/register_par.i
@@ -1,6 +5,10 @@
%module register_par
+%{
+struct swig_tree;
+%}
+
// bug # 924413
%inline {
- void clear_tree_flags(register struct tree *tp, register int i) {}
+ void clear_tree_flags(register struct swig_tree *tp, register int i) {}
}
From ebd0b52b3ec201bbd70391c106e541c859ceaaf9 Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Sat, 12 May 2018 02:57:27 +1000
Subject: [PATCH 17/18] .travis.yml: test against Octave 4.4
---
.travis.yml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/.travis.yml b/.travis.yml
index 54ec4c3f94..d0e1239cea 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -94,6 +94,11 @@ matrix:
env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.2 CPP11=1
sudo: required
dist: trusty
+ - compiler: gcc
+ os: linux
+ env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.4 CPP11=1
+ sudo: required
+ dist: trusty
- compiler: gcc
os: linux
env: SWIGLANG=perl5
From 23e6f1329255a128bb702be0de77f17c47149ddf Mon Sep 17 00:00:00 2001
From: Karl Wette <karl.wette@ligo.org>
Date: Sat, 12 May 2018 22:31:31 +1000
Subject: [PATCH 18/18] Update CHANGES.current
---
CHANGES.current | 4 ++++
1 file changed, 4 insertions(+)
#diff --git a/CHANGES.current b/CHANGES.current
#index 0acfddc7da..3037b59281 100644
#--- a/CHANGES.current
#+++ b/CHANGES.current
#@@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
# Version 4.0.0 (in progress)
# ===========================
#
#+2018-05-12: kwwette
#+ [Octave] add support for version 4.4
#+ - Should not introduce any user-visible incompatibilities
#+
# 2018-05-11: wsfulton
# [C#, D, Java] Add support so that the %csmethodmodifiers, %dmethodmodifiers,
# %javamethodmodifiers can modify the method modifiers for the destructor wrappers

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d
size 8149820

View File

@ -1,19 +0,0 @@
ocaml pr#6517
---
Lib/ocaml/ocamldec.swg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/Lib/ocaml/ocamldec.swg
+++ b/Lib/ocaml/ocamldec.swg
@@ -101,9 +101,9 @@ SWIGEXT {
#ifndef ARCH_ALIGN_INT64
-#define SWIG_Int64_val(v) (*((int64 *) SWIG_Data_custom_val(v)))
+#define SWIG_Int64_val(v) (*((int64_t *) SWIG_Data_custom_val(v)))
#else
-CAMLextern int64 Int64_val(caml_value_t v);
+CAMLextern int64_t Int64_val(caml_value_t v);
#define SWIG_Int64_val(v) Int64_val(v)
#endif

View File

@ -1,40 +0,0 @@
From 8855ef2b482c09da9255079b0fac92d08c8308fb Mon Sep 17 00:00:00 2001
From: Olly Betts <olly@survex.com>
Date: Tue, 13 Jun 2017 17:32:37 +1200
Subject: [PATCH] [Perl] Fix testsuite to work without . in @INC
"." was removed from @INC in Perl 5.26 for security reasons, and has
also been removed from older versions in some distros.
Fixes https://github.com/swig/swig/issues/997 reported by lfam.
---
Examples/Makefile.in | 2 +-
Examples/test-suite/perl5/run-perl-test.pl | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/Examples/Makefile.in b/Examples/Makefile.in
index 7682b565fc..8a88fb5eaa 100644
--- a/Examples/Makefile.in
+++ b/Examples/Makefile.in
@@ -282,7 +282,7 @@ perl5_static_cpp: $(SRCDIR_SRCS)
# -----------------------------------------------------------------
perl5_run:
- $(RUNTOOL) $(PERL) $(PERL5_SCRIPT) $(RUNPIPE)
+ $(RUNTOOL) $(PERL) -I. $(PERL5_SCRIPT) $(RUNPIPE)
# -----------------------------------------------------------------
# Version display
diff --git a/Examples/test-suite/perl5/run-perl-test.pl b/Examples/test-suite/perl5/run-perl-test.pl
index 106bf002bb..5ea4e51157 100644
--- a/Examples/test-suite/perl5/run-perl-test.pl
+++ b/Examples/test-suite/perl5/run-perl-test.pl
@@ -7,7 +7,7 @@
my $command = shift @ARGV;
-my $output = `$^X $command 2>&1`;
+my $output = `$^X -I. $command 2>&1`;
die "SWIG Perl test failed: \n\n$output\n"
if $?;

View File

@ -1,3 +1,48 @@
-------------------------------------------------------------------
Wed May 8 12:57:04 UTC 2019 - Klaus Kämpf <kkaempf@suse.com>
- Update to 4.0.0
- Support for Doxygen documentation comments which are parsed and
converted into JavaDoc or PyDoc comments.
- STL wrappers improved for C#, Java and Ruby.
- C++11 STL containers added for Java, Python and Ruby.
- Improved support for parsing C++11 and C++14 code.
- Various fixes for shared_ptr.
- Various C preprocessor corner case fixes.
- Corner case fixes for member function pointers.
- Python module overhaul by simplifying the generated code and turning
most optimizations on by default.
- %template improvements wrt scoping to align with C++ explicit
template instantiations.
- Added support for a command-line options file (sometimes
called a response file).
- Numerous enhancements and fixes for all supported target languages.
- SWIG now classifies the status of target languages into either
'Experimental' or 'Supported' to indicate the expected maturity
level.
- Support for CFFI, Allegrocl, Chicken, CLISP, S-EXP, UFFI, Pike,
Modula3 has been removed.
- Octave 4.4-5.1 support added.
- PHP5 support removed, PHP7 is now the supported PHP version.
- Minimum Python version required is now 2.7, 3.2-3.7 are the only
other versions supported.
- Added support for Javascript NodeJS versions 2-10.
- OCaml support is much improved and updated, minimum OCaml version
required is now 3.12.0.
See https://raw.githubusercontent.com/swig/swig/master/CHANGES
- Drop patches (all included)
swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch
swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch
swig-perl526.patch
swig-3.0.12-fix-collections.patch
swig-3.0.12-Fix-Coverity-issue-reported-for-setslice-pycontainer.patch
swig-3.0.12-Coverity-fix-issue-reported-for-wrapper-argument-che.patch
swig-3.0.12-support-octave-4.4.patch
swig-ocaml-int64.patch
swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_ConvertF.patch
-------------------------------------------------------------------
Fri Nov 30 12:58:08 UTC 2018 - badshah400@gmail.com

View File

@ -1,7 +1,7 @@
#
# spec file for package swig
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
@ -28,24 +28,15 @@ BuildRequires: ruby
BuildRequires: ruby-devel
%endif
Name: swig
Version: 3.0.12
Version: 4.0.0
Release: 0
Summary: Simplified Wrapper and Interface Generator
License: GPL-3.0-or-later AND BSD-3-Clause
Group: Development/Languages/C and C++
URL: http://www.swig.org/
Source: http://sourceforge.net/projects/swig/files/swig/%{name}-%{version}/%{name}-%{version}.tar.gz
Source: https://github.com/%{name}/%{name}/archive/rel-%{version}.tar.gz
Source1: %{name}.rpmlintrc
Patch2: swig308-isfinite.diff
Patch3: swig-ocaml-int64.patch
Patch4: swig-perl526.patch
Patch5: swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_ConvertF.patch
Patch6: swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch
Patch7: swig-3.0.12-Coverity-fix-issue-reported-for-wrapper-argument-che.patch
Patch8: swig-3.0.12-Fix-Coverity-issue-reported-for-setslice-pycontainer.patch
Patch9: swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch
Patch10: swig-3.0.12-fix-collections.patch
Patch11: swig-3.0.12-support-octave-4.4.patch
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: bison
@ -61,11 +52,11 @@ BuildRequires: python3-devel
BuildRequires: python3-tools
%else
BuildRequires: boost-devel
BuildRequires: python-devel
BuildRequires: python-devel > 2.6
%endif
%if %{with swig_ocaml}
BuildRequires: ncurses-devel
BuildRequires: ocaml
BuildRequires: ocaml >= 3.12.0
BuildRequires: ocaml-camlp4-devel
BuildRequires: ocaml-findlib
%endif
@ -119,7 +110,7 @@ This package contains SWIG examples, useful both for testing and
understandig SWIG usage.
%prep
%setup -q
%setup -q -n %{name}-rel-%{version}
%autopatch -p1
%build

View File

@ -1,7 +1,17 @@
diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-swig-3.0.9/Lib/typemaps/fragments.swg ./Lib/typemaps/fragments.swg
--- ../orig-swig-3.0.9/Lib/typemaps/fragments.swg 2016-05-29 14:35:37.000000000 +0200
+++ ./Lib/typemaps/fragments.swg 2016-06-08 11:13:09.475671763 +0200
@@ -178,6 +178,8 @@
From 7d7454cacbae4355432a7f88455de4981742033f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@suse.de>
Date: Wed, 8 May 2019 14:50:10 +0200
Subject: [PATCH] swig308-isfinite
---
Lib/typemaps/fragments.swg | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Lib/typemaps/fragments.swg b/Lib/typemaps/fragments.swg
index e83f415c4322..cac69ffff745 100644
--- a/Lib/typemaps/fragments.swg
+++ b/Lib/typemaps/fragments.swg
@@ -129,6 +129,8 @@ inline int SWIG_isfinite_func(T x) {
# elif defined(__sun) && defined(__SVR4)
# include <ieeefp.h>
# define SWIG_isfinite(X) (finite(X))
@ -10,3 +20,6 @@ diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache
# endif
#endif
%}
--
2.21.0