Compare commits
No commits in common. "c8-stream-3.0" and "c9-beta" have entirely different histories.
c8-stream-
...
c9-beta
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/swig-3.0.12.tar.gz
|
||||
SOURCES/swig-4.0.2.tar.gz
|
||||
|
@ -1 +1 @@
|
||||
5cc1af41d041e4cc609580b99bb3dcf720effa25 SOURCES/swig-3.0.12.tar.gz
|
||||
ced6676c625c49d78d73cbd3b9aaab8c30b9b4ee SOURCES/swig-4.0.2.tar.gz
|
||||
|
@ -1,346 +0,0 @@
|
||||
From b0e29fbdf31bb94b11cb8a7cc830b4a76467afa3 Mon Sep 17 00:00:00 2001
|
||||
From: William S Fulton <wsf@fultondesigns.co.uk>
|
||||
Date: Mon, 4 Dec 2017 18:41:55 +0000
|
||||
Subject: [PATCH] Add missing checks for failures in calls to
|
||||
PyUnicode_AsUTF8String.
|
||||
|
||||
Previously a seg fault could occur when passing invalid UTF8 strings (low
|
||||
surrogates), eg passing u"\udcff" to the C layer (Python 3).
|
||||
---
|
||||
CHANGES.current | 8 ++++++-
|
||||
Doc/Manual/Python.html | 22 ++++++++++++++++---
|
||||
Doc/Manual/Varargs.html | 5 ++++-
|
||||
Examples/python/multimap/example.i | 12 +++++++++-
|
||||
.../python/unicode_strings_runme.py | 10 +++++++++
|
||||
Examples/test-suite/python_varargs_typemap.i | 5 ++++-
|
||||
Examples/test-suite/unicode_strings.i | 2 ++
|
||||
Lib/python/pyerrors.swg | 11 ++++++----
|
||||
Lib/python/pyhead.swg | 16 ++++++++------
|
||||
Lib/python/pyinit.swg | 4 ++--
|
||||
Lib/python/pyrun.swg | 10 ++++++---
|
||||
Lib/python/pystrings.swg | 12 ++++++++--
|
||||
12 files changed, 92 insertions(+), 25 deletions(-)
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index 5cab80172..06b958f18 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -6,8 +6,14 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
#
|
||||
# Version 4.0.0 (in progress)
|
||||
# ===========================
|
||||
#+
|
||||
#+2017-12-04: wsfulton
|
||||
#+ [Python] Add missing checks for failures in calls to PyUnicode_AsUTF8String. Previously a
|
||||
#+ seg fault could occur when passing invalid UTF8 strings (low surrogates), eg passing
|
||||
#+ u"\udcff" to the C layer (Python 3).
|
||||
#+
|
||||
# 2017-11-24: joequant
|
||||
#- Fix github #1124 and return R_NilValue for null pointers
|
||||
#+ Fix #1124 and return R_NilValue for null pointers
|
||||
#
|
||||
# 2017-11-29: wsfulton
|
||||
# [Java] director exception handling improvements.
|
||||
#diff --git a/Doc/Manual/Python.html b/Doc/Manual/Python.html
|
||||
#index 0c0023dea..27ce084bd 100644
|
||||
#--- a/Doc/Manual/Python.html
|
||||
#+++ b/Doc/Manual/Python.html
|
||||
#@@ -6521,14 +6521,16 @@ string that cannot be completely decoded as UTF-8:
|
||||
# <div class="code"><pre>
|
||||
# %module example
|
||||
#
|
||||
#-%include <std_string.i>
|
||||
#-
|
||||
# %inline %{
|
||||
#
|
||||
#-const char* non_utf8_c_str(void) {
|
||||
#+const char * non_utf8_c_str(void) {
|
||||
# return "h\xe9llo w\xc3\xb6rld";
|
||||
# }
|
||||
#
|
||||
#+void instring(const char *s) {
|
||||
#+ ...
|
||||
#+}
|
||||
#+
|
||||
# %}
|
||||
# </pre></div>
|
||||
#
|
||||
#@@ -6590,6 +6592,20 @@ For more details about the <tt>surrogateescape</tt> error handler, please see
|
||||
# <a href="https://www.python.org/dev/peps/pep-0383/">PEP 383</a>.
|
||||
# </p>
|
||||
#
|
||||
#+<p>
|
||||
#+When Python 3 strings are passed to the C/C++ layer, they are expected to be valid UTF8 Unicode strings too.
|
||||
#+For example, when the <tt>instring</tt> method above is wrapped and called, any invalid UTF8 Unicode code strings
|
||||
#+will result in a TypeError because the attempted conversion fails:
|
||||
#+</p>
|
||||
#+
|
||||
#+<div class="targetlang"><pre>
|
||||
#+>>> example.instring('h\xe9llo')
|
||||
#+>>> example.instring('h\udce9llo')
|
||||
#+Traceback (most recent call last):
|
||||
#+ File "<stdin>", line 1, in <module>
|
||||
#+TypeError: in method 'instring', argument 1 of type 'char const *'
|
||||
#+</pre></div>
|
||||
#+
|
||||
# <p>
|
||||
# In some cases, users may wish to instead handle all byte strings as bytes
|
||||
# objects in Python 3. This can be accomplished by adding
|
||||
#diff --git a/Doc/Manual/Varargs.html b/Doc/Manual/Varargs.html
|
||||
#index eba816382..014a38cae 100644
|
||||
#--- a/Doc/Manual/Varargs.html
|
||||
#+++ b/Doc/Manual/Varargs.html
|
||||
#@@ -529,8 +529,11 @@ like this:
|
||||
# SWIG_fail;
|
||||
# }
|
||||
# pystr = PyUnicode_AsUTF8String(pyobj);
|
||||
#+ if (!pystr) {
|
||||
#+ SWIG_fail;
|
||||
#+ }
|
||||
# str = strdup(PyBytes_AsString(pystr));
|
||||
#- Py_XDECREF(pystr);
|
||||
#+ Py_DECREF(pystr);
|
||||
# %#else
|
||||
# if (!PyString_Check(pyobj)) {
|
||||
# PyErr_SetString(PyExc_ValueError, "Expected a string");
|
||||
diff --git a/Examples/python/multimap/example.i b/Examples/python/multimap/example.i
|
||||
index 66c0f74c6..3ff5d52c0 100644
|
||||
--- a/Examples/python/multimap/example.i
|
||||
+++ b/Examples/python/multimap/example.i
|
||||
@@ -39,7 +39,11 @@ extern int gcd(int x, int y);
|
||||
%#if PY_VERSION_HEX >= 0x03000000
|
||||
{
|
||||
PyObject *utf8str = PyUnicode_AsUTF8String(s);
|
||||
- const char *cstr = PyBytes_AsString(utf8str);
|
||||
+ const char *cstr;
|
||||
+ if (!utf8str) {
|
||||
+ SWIG_fail;
|
||||
+ }
|
||||
+ cstr = PyBytes_AsString(utf8str);
|
||||
$2[i] = strdup(cstr);
|
||||
Py_DECREF(utf8str);
|
||||
}
|
||||
@@ -72,6 +76,9 @@ extern int gcdmain(int argc, char *argv[]);
|
||||
SWIG_fail;
|
||||
}
|
||||
utf8str = PyUnicode_AsUTF8String($input);
|
||||
+ if (!utf8str) {
|
||||
+ SWIG_fail;
|
||||
+ }
|
||||
PyBytes_AsStringAndSize(utf8str, &cstr, &len);
|
||||
$1 = strncpy((char *)malloc(len+1), cstr, (size_t)len);
|
||||
$2 = (int)len;
|
||||
@@ -105,6 +112,9 @@ extern int count(char *bytes, int len, char c);
|
||||
char *cstr;
|
||||
Py_ssize_t len;
|
||||
PyObject *utf8str = PyUnicode_AsUTF8String($input);
|
||||
+ if (!utf8str) {
|
||||
+ SWIG_fail;
|
||||
+ }
|
||||
PyBytes_AsStringAndSize(utf8str, &cstr, &len);
|
||||
$1 = strncpy((char *)malloc(len+1), cstr, (size_t)len);
|
||||
$2 = (int)len;
|
||||
diff --git a/Examples/test-suite/python/unicode_strings_runme.py b/Examples/test-suite/python/unicode_strings_runme.py
|
||||
index fa9c51437..39e93b0fc 100644
|
||||
--- a/Examples/test-suite/python/unicode_strings_runme.py
|
||||
+++ b/Examples/test-suite/python/unicode_strings_runme.py
|
||||
@@ -25,3 +25,13 @@ if sys.version_info[0:2] < (3, 0):
|
||||
check(unicode_strings.charstring(unicode("hello4")), "hello4")
|
||||
unicode_strings.charstring(u"hell\xb05")
|
||||
unicode_strings.charstring(u"hell\u00f66")
|
||||
+
|
||||
+low_surrogate_string = u"\udcff"
|
||||
+try:
|
||||
+ unicode_strings.instring(low_surrogate_string)
|
||||
+ # Will succeed with Python 2
|
||||
+except TypeError, e:
|
||||
+ # Python 3 will fail the PyUnicode_AsUTF8String conversion resulting in a TypeError.
|
||||
+ # The real error is actually:
|
||||
+ # UnicodeEncodeError: 'utf-8' codec can't encode character '\udcff' in position 0: surrogates not allowed
|
||||
+ pass
|
||||
diff --git a/Examples/test-suite/python_varargs_typemap.i b/Examples/test-suite/python_varargs_typemap.i
|
||||
index f05fb98eb..d809bf1fa 100644
|
||||
--- a/Examples/test-suite/python_varargs_typemap.i
|
||||
+++ b/Examples/test-suite/python_varargs_typemap.i
|
||||
@@ -23,8 +23,11 @@
|
||||
SWIG_fail;
|
||||
}
|
||||
pystr = PyUnicode_AsUTF8String(pyobj);
|
||||
+ if (!pystr) {
|
||||
+ SWIG_fail;
|
||||
+ }
|
||||
str = strdup(PyBytes_AsString(pystr));
|
||||
- Py_XDECREF(pystr);
|
||||
+ Py_DECREF(pystr);
|
||||
%#else
|
||||
if (!PyString_Check(pyobj)) {
|
||||
PyErr_SetString(PyExc_ValueError, "Expected a string");
|
||||
diff --git a/Examples/test-suite/unicode_strings.i b/Examples/test-suite/unicode_strings.i
|
||||
index 9be3748e6..e7266266e 100644
|
||||
--- a/Examples/test-suite/unicode_strings.i
|
||||
+++ b/Examples/test-suite/unicode_strings.i
|
||||
@@ -20,4 +20,6 @@ char *charstring(char *s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
+void instring(const char *s) {
|
||||
+}
|
||||
%}
|
||||
diff --git a/Lib/python/pyerrors.swg b/Lib/python/pyerrors.swg
|
||||
index fe7313554..463afae15 100644
|
||||
--- a/Lib/python/pyerrors.swg
|
||||
+++ b/Lib/python/pyerrors.swg
|
||||
@@ -53,14 +53,17 @@ SWIG_Python_AddErrorMsg(const char* mesg)
|
||||
PyObject *value = 0;
|
||||
PyObject *traceback = 0;
|
||||
|
||||
- if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback);
|
||||
+ if (PyErr_Occurred())
|
||||
+ PyErr_Fetch(&type, &value, &traceback);
|
||||
if (value) {
|
||||
- char *tmp;
|
||||
PyObject *old_str = PyObject_Str(value);
|
||||
+ const char *tmp = SWIG_Python_str_AsChar(old_str);
|
||||
PyErr_Clear();
|
||||
Py_XINCREF(type);
|
||||
-
|
||||
- PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
|
||||
+ if (tmp)
|
||||
+ PyErr_Format(type, "%s %s", tmp, mesg);
|
||||
+ else
|
||||
+ PyErr_Format(type, "%s", mesg);
|
||||
SWIG_Python_str_DelForPy3(tmp);
|
||||
Py_DECREF(old_str);
|
||||
Py_DECREF(value);
|
||||
diff --git a/Lib/python/pyhead.swg b/Lib/python/pyhead.swg
|
||||
index 55eb95a6d..2fa8b5b4c 100644
|
||||
--- a/Lib/python/pyhead.swg
|
||||
+++ b/Lib/python/pyhead.swg
|
||||
@@ -38,14 +38,16 @@ SWIGINTERN char*
|
||||
SWIG_Python_str_AsChar(PyObject *str)
|
||||
{
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
- char *cstr;
|
||||
- char *newstr;
|
||||
- Py_ssize_t len;
|
||||
+ char *newstr = 0;
|
||||
str = PyUnicode_AsUTF8String(str);
|
||||
- PyBytes_AsStringAndSize(str, &cstr, &len);
|
||||
- newstr = (char *) malloc(len+1);
|
||||
- memcpy(newstr, cstr, len+1);
|
||||
- Py_XDECREF(str);
|
||||
+ if (str) {
|
||||
+ char *cstr;
|
||||
+ Py_ssize_t len;
|
||||
+ PyBytes_AsStringAndSize(str, &cstr, &len);
|
||||
+ newstr = (char *) malloc(len+1);
|
||||
+ memcpy(newstr, cstr, len+1);
|
||||
+ Py_XDECREF(str);
|
||||
+ }
|
||||
return newstr;
|
||||
#else
|
||||
return PyString_AsString(str);
|
||||
diff --git a/Lib/python/pyinit.swg b/Lib/python/pyinit.swg
|
||||
index fe45ac941..826f8411b 100644
|
||||
--- a/Lib/python/pyinit.swg
|
||||
+++ b/Lib/python/pyinit.swg
|
||||
@@ -84,10 +84,10 @@ swig_varlink_str(swig_varlinkobject *v) {
|
||||
|
||||
SWIGINTERN int
|
||||
swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) {
|
||||
- char *tmp;
|
||||
PyObject *str = swig_varlink_str(v);
|
||||
+ const char *tmp = SWIG_Python_str_AsChar(str);
|
||||
fprintf(fp,"Swig global variables ");
|
||||
- fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str));
|
||||
+ fprintf(fp,"%s\n", tmp ? tmp : "Invalid global variable");
|
||||
SWIG_Python_str_DelForPy3(tmp);
|
||||
Py_DECREF(str);
|
||||
return 0;
|
||||
diff --git a/Lib/python/pyrun.swg b/Lib/python/pyrun.swg
|
||||
index efc476613..430d3af18 100644
|
||||
--- a/Lib/python/pyrun.swg
|
||||
+++ b/Lib/python/pyrun.swg
|
||||
@@ -1672,14 +1672,16 @@ SWIG_Python_AddErrMesg(const char* mesg, int infront)
|
||||
PyObject *traceback = 0;
|
||||
PyErr_Fetch(&type, &value, &traceback);
|
||||
if (value) {
|
||||
- char *tmp;
|
||||
PyObject *old_str = PyObject_Str(value);
|
||||
+ const char *tmp = SWIG_Python_str_AsChar(old_str);
|
||||
+ if (!tmp)
|
||||
+ tmp = "Invalid error message";
|
||||
Py_XINCREF(type);
|
||||
PyErr_Clear();
|
||||
if (infront) {
|
||||
- PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str));
|
||||
+ PyErr_Format(type, "%s %s", mesg, tmp);
|
||||
} else {
|
||||
- PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
|
||||
+ PyErr_Format(type, "%s %s", tmp, mesg);
|
||||
}
|
||||
SWIG_Python_str_DelForPy3(tmp);
|
||||
Py_DECREF(old_str);
|
||||
@@ -1805,6 +1807,8 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
|
||||
Py_INCREF(name);
|
||||
} else {
|
||||
encoded_name = PyUnicode_AsUTF8String(name);
|
||||
+ if (!encoded_name)
|
||||
+ return -1;
|
||||
}
|
||||
PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name));
|
||||
Py_DECREF(encoded_name);
|
||||
diff --git a/Lib/python/pystrings.swg b/Lib/python/pystrings.swg
|
||||
index fd37855eb..301e0f3e1 100644
|
||||
--- a/Lib/python/pystrings.swg
|
||||
+++ b/Lib/python/pystrings.swg
|
||||
@@ -16,6 +16,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
|
||||
%#endif
|
||||
{
|
||||
char *cstr; Py_ssize_t len;
|
||||
+ int ret = SWIG_OK;
|
||||
%#if PY_VERSION_HEX>=0x03000000
|
||||
%#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
|
||||
if (!alloc && cptr) {
|
||||
@@ -26,7 +27,10 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
|
||||
return SWIG_RuntimeError;
|
||||
}
|
||||
obj = PyUnicode_AsUTF8String(obj);
|
||||
- if(alloc) *alloc = SWIG_NEWOBJ;
|
||||
+ if (!obj)
|
||||
+ return SWIG_TypeError;
|
||||
+ if (alloc)
|
||||
+ *alloc = SWIG_NEWOBJ;
|
||||
%#endif
|
||||
PyBytes_AsStringAndSize(obj, &cstr, &len);
|
||||
%#else
|
||||
@@ -64,6 +68,8 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
|
||||
%#endif
|
||||
%#else
|
||||
*cptr = SWIG_Python_str_AsChar(obj);
|
||||
+ if (!*cptr)
|
||||
+ ret = SWIG_TypeError;
|
||||
%#endif
|
||||
}
|
||||
}
|
||||
@@ -71,7 +77,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
|
||||
%#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
|
||||
Py_XDECREF(obj);
|
||||
%#endif
|
||||
- return SWIG_OK;
|
||||
+ return ret;
|
||||
} else {
|
||||
%#if defined(SWIG_PYTHON_2_UNICODE)
|
||||
%#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
|
||||
@@ -84,6 +90,8 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
|
||||
return SWIG_RuntimeError;
|
||||
}
|
||||
obj = PyUnicode_AsUTF8String(obj);
|
||||
+ if (!obj)
|
||||
+ return SWIG_TypeError;
|
||||
if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) {
|
||||
if (cptr) {
|
||||
if (alloc) *alloc = SWIG_NEWOBJ;
|
||||
--
|
||||
2.21.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 0a9113dcba2930b658cb67f9ba1c63ad8eebd88f Mon Sep 17 00:00:00 2001
|
||||
From: William S Fulton <wsf@fultondesigns.co.uk>
|
||||
Date: Tue, 19 Sep 2017 07:37:29 +0100
|
||||
Subject: [PATCH] Correct php testcase
|
||||
|
||||
---
|
||||
Examples/test-suite/php/preproc_constants_runme.php | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Examples/test-suite/php/preproc_constants_runme.php b/Examples/test-suite/php/preproc_constants_runme.php
|
||||
index ef32867..bd216c2 100644
|
||||
--- a/Examples/test-suite/php/preproc_constants_runme.php
|
||||
+++ b/Examples/test-suite/php/preproc_constants_runme.php
|
||||
@@ -61,8 +61,8 @@ 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_MIXED1), "double", "preproc_constants.EXPR_MIXED1 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");
|
||||
-check::equal(gettype(preproc_constants::EXPR_MIXED1), "integer", "preproc_constants.EXPR_MIXED1 has unexpected type");
|
||||
|
||||
?>
|
||||
--
|
||||
2.9.5
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -1,51 +0,0 @@
|
||||
From 5f6012039abb6ec9e9dfea801effa6b02fd102bc Mon Sep 17 00:00:00 2001
|
||||
From: Vsevolod Kvachev <rasielll@gmail.com>
|
||||
Date: Thu, 19 Apr 2018 23:04:37 +0300
|
||||
Subject: [PATCH] Fix go version matching in configure for go1.10
|
||||
|
||||
---
|
||||
configure.ac | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 833cb37bf..ba1631743 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2597,7 +2597,7 @@ else
|
||||
GOVERSIONOPTION=version
|
||||
go_version=$($GO $GOVERSIONOPTION | sed -e 's/go version //')
|
||||
case "$go_version" in
|
||||
- go1 | go1.[[01234]]*)
|
||||
+ go1 | go1.[[01234]] | go1.[[01234]].*)
|
||||
GOC=$(sh -c "$(go env) && echo \$GOCHAR")c
|
||||
;;
|
||||
*)
|
||||
@@ -2606,7 +2606,7 @@ else
|
||||
esac
|
||||
AC_MSG_CHECKING([whether go version is too old])
|
||||
case $go_version in
|
||||
- go1.1* | go1.0* | go1 )
|
||||
+ go1.1.* | go1.1 | go1.0 | go1.0.* | go1 )
|
||||
AC_MSG_RESULT([yes - minimum version is 1.2])
|
||||
GO=
|
||||
GOOPT="-intgosize 32"
|
||||
@@ -2624,13 +2624,13 @@ else
|
||||
;;
|
||||
esac
|
||||
case $go_version in
|
||||
- go1.0* | go1 | go1.1*)
|
||||
+ go1.0 | go1.0.* | go1 | go1.1 | go1.1.*)
|
||||
GOOPT="$GOOPT -use-shlib"
|
||||
;;
|
||||
- go1.2*)
|
||||
+ go1.2 | go1.2.*)
|
||||
GO12=true
|
||||
;;
|
||||
- go1.3* | go1.4*)
|
||||
+ go1.3 | go1.3.* | go1.4 | go1.4.*)
|
||||
GO13=true
|
||||
;;
|
||||
*)
|
||||
--
|
||||
2.14.3
|
||||
|
@ -1,61 +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.
|
||||
---
|
||||
CHANGES.current | 6 ++++++
|
||||
Examples/Makefile.in | 2 +-
|
||||
Examples/test-suite/perl5/run-perl-test.pl | 2 +-
|
||||
3 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index ac620c9..6b379a9 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -7,6 +7,12 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
# Version 4.0.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2017-06-13: olly
|
||||
#+ [Perl] Fix testsuite to work without . in @INC - it was removed 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.
|
||||
#+
|
||||
# 2017-06-03: wsfulton
|
||||
# Fix %import on a file containing a file scope %fragment forced inclusion to not
|
||||
# generate the fragment contents as %import should not result in code being generated.
|
||||
diff --git a/Examples/Makefile.in b/Examples/Makefile.in
|
||||
index 7682b56..8a88fb5 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 106bf00..5ea4e511 100644
|
||||
--- a/Examples/test-suite/perl5/run-perl-test.pl
|
||||
+++ b/Examples/test-suite/perl5/run-perl-test.pl
|
||||
@@ -7,7 +7,7 @@ use strict;
|
||||
|
||||
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 $?;
|
||||
--
|
||||
2.9.4
|
||||
|
@ -1,185 +0,0 @@
|
||||
From 9e2a12416cf6ce7b926829aff353fe2d9019f135 Mon Sep 17 00:00:00 2001
|
||||
From: William S Fulton <wsf@fultondesigns.co.uk>
|
||||
Date: Mon, 18 Sep 2017 07:06:27 +0100
|
||||
Subject: [PATCH 2/2] Fix type promotion wrapping some non-trivial constant
|
||||
expressions
|
||||
|
||||
This was previously an integral type instead of a floating point type:
|
||||
---
|
||||
CHANGES.current | 5 +++++
|
||||
Examples/test-suite/csharp/preproc_constants_c_runme.cs | 1 +
|
||||
Examples/test-suite/csharp/preproc_constants_runme.cs | 1 +
|
||||
Examples/test-suite/d/preproc_constants_c_runme.1.d | 1 +
|
||||
Examples/test-suite/d/preproc_constants_c_runme.2.d | 1 +
|
||||
Examples/test-suite/d/preproc_constants_runme.1.d | 1 +
|
||||
Examples/test-suite/d/preproc_constants_runme.2.d | 1 +
|
||||
Examples/test-suite/php/preproc_constants_c_runme.php | 1 +
|
||||
Examples/test-suite/php/preproc_constants_runme.php | 1 +
|
||||
Examples/test-suite/php5/preproc_constants_c_runme.php | 1 +
|
||||
Examples/test-suite/php5/preproc_constants_runme.php | 1 +
|
||||
Examples/test-suite/preproc_constants.i | 1 +
|
||||
Source/CParse/parser.y | 1 +
|
||||
13 files changed, 17 insertions(+)
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index b455a9f..f76e5a5 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-18: wsfulton
|
||||
#+ Fix type promotion wrapping constant expressions of the form:
|
||||
#+ # define EXPR_MIXED1 (0x80 + 11.1) - 1
|
||||
#+ This was previously an integral type instead of a floating point type.
|
||||
#+
|
||||
# 2017-09-17: wsfulton
|
||||
# Fix generated code for constant expressions containing wchar_t L literals such as:
|
||||
# # define __WCHAR_MAX (0x7fffffff + L'\0')
|
||||
diff --git a/Examples/test-suite/csharp/preproc_constants_c_runme.cs b/Examples/test-suite/csharp/preproc_constants_c_runme.cs
|
||||
index 1c28e49..7f40ce4 100644
|
||||
--- a/Examples/test-suite/csharp/preproc_constants_c_runme.cs
|
||||
+++ b/Examples/test-suite/csharp/preproc_constants_c_runme.cs
|
||||
@@ -61,6 +61,7 @@ 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(double) == preproc_constants_c.EXPR_MIXED1.GetType() );
|
||||
assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MAX.GetType() );
|
||||
assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MIN.GetType() );
|
||||
}
|
||||
diff --git a/Examples/test-suite/csharp/preproc_constants_runme.cs b/Examples/test-suite/csharp/preproc_constants_runme.cs
|
||||
index 6b02e30..0d8981f 100644
|
||||
--- a/Examples/test-suite/csharp/preproc_constants_runme.cs
|
||||
+++ b/Examples/test-suite/csharp/preproc_constants_runme.cs
|
||||
@@ -60,6 +60,7 @@ 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(double) == preproc_constants.EXPR_MIXED1.GetType() );
|
||||
assert( typeof(int) == preproc_constants.EXPR_WCHAR_MAX.GetType() );
|
||||
assert( typeof(int) == preproc_constants.EXPR_WCHAR_MIN.GetType() );
|
||||
|
||||
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 2b349af..b79ee3b 100644
|
||||
--- a/Examples/test-suite/d/preproc_constants_c_runme.1.d
|
||||
+++ b/Examples/test-suite/d/preproc_constants_c_runme.1.d
|
||||
@@ -61,6 +61,7 @@ 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(double == typeof(EXPR_MIXED1())));
|
||||
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 1bac525..260bf8d 100644
|
||||
--- a/Examples/test-suite/d/preproc_constants_c_runme.2.d
|
||||
+++ b/Examples/test-suite/d/preproc_constants_c_runme.2.d
|
||||
@@ -61,6 +61,7 @@ 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(double == typeof(EXPR_MIXED1())));
|
||||
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 f743f48..84a99c8 100644
|
||||
--- a/Examples/test-suite/d/preproc_constants_runme.1.d
|
||||
+++ b/Examples/test-suite/d/preproc_constants_runme.1.d
|
||||
@@ -60,6 +60,7 @@ 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(double == typeof(EXPR_MIXED1())));
|
||||
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 0d96c37..f6638f4 100644
|
||||
--- a/Examples/test-suite/d/preproc_constants_runme.2.d
|
||||
+++ b/Examples/test-suite/d/preproc_constants_runme.2.d
|
||||
@@ -60,6 +60,7 @@ 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(double == typeof(EXPR_MIXED1())));
|
||||
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 e59fe18..20868dc 100644
|
||||
--- a/Examples/test-suite/php/preproc_constants_c_runme.php
|
||||
+++ b/Examples/test-suite/php/preproc_constants_c_runme.php
|
||||
@@ -62,6 +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_MIXED1), "double", "preproc_constants.EXPR_MIXED1 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 8e117ea..ef32867 100644
|
||||
--- a/Examples/test-suite/php/preproc_constants_runme.php
|
||||
+++ b/Examples/test-suite/php/preproc_constants_runme.php
|
||||
@@ -63,5 +63,6 @@ check::equal(gettype(preproc_constants::EXPR_LOR), "boolean", "preproc_constants
|
||||
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");
|
||||
+check::equal(gettype(preproc_constants::EXPR_MIXED1), "integer", "preproc_constants.EXPR_MIXED1 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 d978fab..d55d423 100644
|
||||
--- a/Examples/test-suite/php5/preproc_constants_c_runme.php
|
||||
+++ b/Examples/test-suite/php5/preproc_constants_c_runme.php
|
||||
@@ -62,6 +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_MIXED1), "double", "preproc_constants.EXPR_MIXED1 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 7527026..01137b0 100644
|
||||
--- a/Examples/test-suite/php5/preproc_constants_runme.php
|
||||
+++ b/Examples/test-suite/php5/preproc_constants_runme.php
|
||||
@@ -70,6 +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_MIXED1), "double", "preproc_constants.EXPR_MIXED1 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 16b44c9..628cae1 100644
|
||||
--- a/Examples/test-suite/preproc_constants.i
|
||||
+++ b/Examples/test-suite/preproc_constants.i
|
||||
@@ -86,6 +86,7 @@
|
||||
#define EXPR_LAND 0xFF && 1
|
||||
#define EXPR_LOR 0xFF || 1
|
||||
#define EXPR_CONDITIONAL true ? 2 : 2.2
|
||||
+#define EXPR_MIXED1 (0x80 + 11.1) - 1
|
||||
|
||||
#define EXPR_WCHAR_MAX (0x7fffffff + L'\0')
|
||||
#define EXPR_WCHAR_MIN (-EXPR_WCHAR_MAX - 1)
|
||||
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
|
||||
index 273dadb..3df9896 100644
|
||||
--- a/Source/CParse/parser.y
|
||||
+++ b/Source/CParse/parser.y
|
||||
@@ -6338,6 +6338,7 @@ valexpr : exprnum { $$ = $1; }
|
||||
break;
|
||||
}
|
||||
}
|
||||
+ $$.type = promote($2.type, $4.type);
|
||||
}
|
||||
| LPAREN expr pointer RPAREN expr %prec CAST {
|
||||
$$ = $5;
|
||||
--
|
||||
2.9.5
|
||||
|
@ -0,0 +1,82 @@
|
||||
From b7dedecfdd708c5323addc1b28e16cc727e01980 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Thu, 18 Mar 2021 10:53:58 +1300
|
||||
Subject: [PATCH] php: Fix char* typecheck typemap to accept Null
|
||||
|
||||
The corresponding in typemap already does.
|
||||
|
||||
Fixes #1655, reported by CJSlominski.
|
||||
---
|
||||
CHANGES.current | 4 ++++
|
||||
Examples/test-suite/overload_polymorphic.i | 3 +++
|
||||
.../test-suite/php/overload_polymorphic_runme.php | 14 ++++++++++++++
|
||||
Lib/php/php.swg | 5 ++++-
|
||||
4 files changed, 25 insertions(+), 1 deletion(-)
|
||||
create mode 100644 Examples/test-suite/php/overload_polymorphic_runme.php
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index 58fd05a56..f287e3d60 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.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-18: olly
|
||||
#+ #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
|
||||
#+ corresponding in typemap does.
|
||||
#+
|
||||
# 2021-03-18: olly
|
||||
# #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
|
||||
# non-void return.
|
||||
diff --git a/Examples/test-suite/overload_polymorphic.i b/Examples/test-suite/overload_polymorphic.i
|
||||
index ac004f948..72aabd840 100644
|
||||
--- a/Examples/test-suite/overload_polymorphic.i
|
||||
+++ b/Examples/test-suite/overload_polymorphic.i
|
||||
@@ -23,4 +23,7 @@ class Unknown;
|
||||
int test2(Unknown* unknown) { return 0; }
|
||||
int test2(Base* base) { return 1; }
|
||||
|
||||
+int test3(const char*, const Base* = 0, bool = false) { return 0; }
|
||||
+int test3(Base&, const char* = 0, const Base* = 0, bool = false) { return 1; }
|
||||
+
|
||||
%}
|
||||
diff --git a/Examples/test-suite/php/overload_polymorphic_runme.php b/Examples/test-suite/php/overload_polymorphic_runme.php
|
||||
new file mode 100644
|
||||
index 000000000..0afe16808
|
||||
--- /dev/null
|
||||
+++ b/Examples/test-suite/php/overload_polymorphic_runme.php
|
||||
@@ -0,0 +1,14 @@
|
||||
+<?php
|
||||
+
|
||||
+require "tests.php";
|
||||
+require "overload_polymorphic.php";
|
||||
+
|
||||
+$t = new Derived();
|
||||
+
|
||||
+check::equal(overload_polymorphic::test($t), 0, "test(Derived)");
|
||||
+check::equal(overload_polymorphic::test(1), 1, "test(1)");
|
||||
+check::equal(overload_polymorphic::test2($t), 1, "test2(Derived)");
|
||||
+check::equal(overload_polymorphic::test3($t, null, $t), 1, "test3(Derived, null, Derived)");
|
||||
+
|
||||
+check::done();
|
||||
+?>
|
||||
diff --git a/Lib/php/php.swg b/Lib/php/php.swg
|
||||
index 4eba6be2a..ccfd371ab 100644
|
||||
--- a/Lib/php/php.swg
|
||||
+++ b/Lib/php/php.swg
|
||||
@@ -465,7 +465,10 @@
|
||||
%php_typecheck(double,SWIG_TYPECHECK_DOUBLE,IS_DOUBLE)
|
||||
%php_typecheck(char,SWIG_TYPECHECK_CHAR,IS_STRING)
|
||||
|
||||
-%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *&, char []
|
||||
+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *&
|
||||
+ " $1 = (Z_TYPE($input) == IS_STRING || Z_TYPE($input) == IS_NULL); "
|
||||
+
|
||||
+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char []
|
||||
" $1 = (Z_TYPE($input) == IS_STRING); "
|
||||
|
||||
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE
|
||||
--
|
||||
2.26.3
|
||||
|
@ -0,0 +1,101 @@
|
||||
From 2e7da86b2ced479e48741cc8713479dee426be61 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Wed, 9 Dec 2020 09:48:55 +1300
|
||||
Subject: [PATCH] php: Fix overloaded directed methods with non-void return
|
||||
|
||||
We were treating such methods like constructors and assigning to the
|
||||
internal _cPtr, which just seems bizarrely wrong.
|
||||
|
||||
Fixes #1900
|
||||
---
|
||||
CHANGES.current | 4 ++++
|
||||
Examples/test-suite/director_overload.i | 11 ++++++++++-
|
||||
.../test-suite/php/director_overload_runme.php | 18 ++++++++++++++++++
|
||||
Source/Modules/php.cxx | 4 ++--
|
||||
4 files changed, 34 insertions(+), 3 deletions(-)
|
||||
create mode 100644 Examples/test-suite/php/director_overload_runme.php
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index acaea3aea..58fd05a56 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.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-18: olly
|
||||
#+ #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
|
||||
#+ non-void return.
|
||||
#+
|
||||
# 2021-03-11: murillo128
|
||||
# #1498 [Javascript] Support type conversion.
|
||||
#
|
||||
diff --git a/Examples/test-suite/director_overload.i b/Examples/test-suite/director_overload.i
|
||||
index 604ffe5ca..d6feb122b 100644
|
||||
--- a/Examples/test-suite/director_overload.i
|
||||
+++ b/Examples/test-suite/director_overload.i
|
||||
@@ -47,5 +47,14 @@ public:
|
||||
virtual void notover(int *p) const {}
|
||||
};
|
||||
|
||||
-%}
|
||||
+class OverloadedGetSet
|
||||
+{
|
||||
+ int v;
|
||||
+public:
|
||||
+ OverloadedGetSet() : v(42) { }
|
||||
+ virtual ~OverloadedGetSet() { }
|
||||
+ virtual int rw() const { return v; }
|
||||
+ virtual void rw(int new_v) { v = new_v; }
|
||||
+};
|
||||
|
||||
+%}
|
||||
diff --git a/Examples/test-suite/php/director_overload_runme.php b/Examples/test-suite/php/director_overload_runme.php
|
||||
new file mode 100644
|
||||
index 000000000..f5fc56b65
|
||||
--- /dev/null
|
||||
+++ b/Examples/test-suite/php/director_overload_runme.php
|
||||
@@ -0,0 +1,18 @@
|
||||
+
|
||||
+<?php
|
||||
+
|
||||
+require "tests.php";
|
||||
+require "director_overload.php";
|
||||
+
|
||||
+check::functions(array('new_overloadedClass','new_overloadedPointers','new_overloadedGetSet','overloadedclass_method1','overloadedclass_method3','overloadedclass_method2','overloadedpointers_method','overloadedpointers_notover','overloadedgetset_rw'));
|
||||
+
|
||||
+check::classes(array('OverloadedClass','OverloadedPointers','OverloadedGetSet'));
|
||||
+check::globals(array());
|
||||
+
|
||||
+$o = new OverloadedGetSet;
|
||||
+check::equal($o->rw(), 42, "get_set() initial value not 42");
|
||||
+check::equal($o->rw(7), null, "get_set() failed to set");
|
||||
+check::equal($o->rw(), 7, "get_set() didn't return back set value");
|
||||
+
|
||||
+check::done();
|
||||
+?>
|
||||
diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx
|
||||
index 1edbd874c..eaae32d63 100644
|
||||
--- a/Source/Modules/php.cxx
|
||||
+++ b/Source/Modules/php.cxx
|
||||
@@ -1566,7 +1566,7 @@ public:
|
||||
Printf(prepare, "case %d: ", ++last_handled_i);
|
||||
}
|
||||
if (non_void_return) {
|
||||
- if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) {
|
||||
+ if (!constructor) {
|
||||
Append(prepare, "$r=");
|
||||
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
||||
Append(prepare, "$r=");
|
||||
@@ -1590,7 +1590,7 @@ public:
|
||||
if (had_a_case)
|
||||
Printf(prepare, "default: ");
|
||||
if (non_void_return) {
|
||||
- if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) {
|
||||
+ if (!constructor) {
|
||||
Append(prepare, "$r=");
|
||||
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
||||
Append(prepare, "$r=");
|
||||
--
|
||||
2.26.3
|
||||
|
82
SOURCES/swig-4.0.2-Improve-PHP-object-creation.patch
Normal file
82
SOURCES/swig-4.0.2-Improve-PHP-object-creation.patch
Normal file
@ -0,0 +1,82 @@
|
||||
From 71475b0af9677deeaf6fe55c0c5f53fec9f730d2 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Thu, 18 Mar 2021 15:50:52 +1300
|
||||
Subject: [PATCH] Improve PHP object creation
|
||||
|
||||
Reportedly the code we were using in the directorin case gave segfaults
|
||||
in PHP 7.2 and later - we've been unable to reproduce these, but the new
|
||||
approach is also simpler and should be bit faster too.
|
||||
|
||||
Fixes #1527, #1975
|
||||
---
|
||||
CHANGES.current | 6 ++++++
|
||||
Lib/php/phprun.swg | 14 +++++---------
|
||||
2 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index f287e3d60..79d41001f 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -7,6 +7,12 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
# Version 4.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-19: olly
|
||||
#+ #1527 [PHP] Improve PHP object creation in directorin case.
|
||||
#+ Reportedly the code we were using in this case gave segfaults in
|
||||
#+ PHP 7.2 and later - we've been unable to reproduce these, but the
|
||||
#+ new approach is also simpler and should be bit faster too.
|
||||
#+
|
||||
# 2021-03-18: olly
|
||||
# #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
|
||||
# corresponding in typemap does.
|
||||
diff --git a/Lib/php/phprun.swg b/Lib/php/phprun.swg
|
||||
index a07a1b9f8..f3a4e6ad1 100644
|
||||
--- a/Lib/php/phprun.swg
|
||||
+++ b/Lib/php/phprun.swg
|
||||
@@ -90,15 +90,13 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) {
|
||||
} else {
|
||||
/*
|
||||
* Wrap the resource in an object, the resource will be accessible
|
||||
- * via the "_cPtr" member. This is currently only used by
|
||||
+ * via the "_cPtr" property. This code path is currently only used by
|
||||
* directorin typemaps.
|
||||
*/
|
||||
- zval resource;
|
||||
zend_class_entry *ce = NULL;
|
||||
const char *type_name = type->name+3; /* +3 so: _p_Foo -> Foo */
|
||||
size_t type_name_len;
|
||||
const char * p;
|
||||
- HashTable * ht;
|
||||
|
||||
/* Namespace__Foo -> Foo */
|
||||
/* FIXME: ugly and goes wrong for classes with __ in their names. */
|
||||
@@ -107,7 +105,6 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) {
|
||||
}
|
||||
type_name_len = strlen(type_name);
|
||||
|
||||
- ZVAL_RES(&resource, zend_register_resource(value, *(int *)(type->clientdata)));
|
||||
if (SWIG_PREFIX_LEN > 0) {
|
||||
zend_string * classname = zend_string_alloc(SWIG_PREFIX_LEN + type_name_len, 0);
|
||||
memcpy(classname->val, SWIG_PREFIX, SWIG_PREFIX_LEN);
|
||||
@@ -121,13 +118,12 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) {
|
||||
}
|
||||
if (ce == NULL) {
|
||||
/* class does not exist */
|
||||
- ce = zend_standard_class_def;
|
||||
+ object_init(z);
|
||||
+ } else {
|
||||
+ object_init_ex(z, ce);
|
||||
}
|
||||
|
||||
- ALLOC_HASHTABLE(ht);
|
||||
- zend_hash_init(ht, 1, NULL, NULL, 0);
|
||||
- zend_hash_str_update(ht, "_cPtr", sizeof("_cPtr") - 1, &resource);
|
||||
- object_and_properties_init(z, ce, ht);
|
||||
+ add_property_resource_ex(z, "_cPtr", sizeof("_cPtr") - 1, zend_register_resource(value, *(int *)(type->clientdata)));
|
||||
}
|
||||
return;
|
||||
}
|
||||
--
|
||||
2.26.3
|
||||
|
409
SOURCES/swig-4.0.2-Support-PHP8.patch
Normal file
409
SOURCES/swig-4.0.2-Support-PHP8.patch
Normal file
@ -0,0 +1,409 @@
|
||||
From 3584c7d49cb598ce79d5e285d6c17b2dedfe3ecb Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Wed, 17 Mar 2021 12:45:17 +1300
|
||||
Subject: [PATCH 1/4] Add initial support for PHP8
|
||||
|
||||
Testcase director_overload2 is failing, but the rest of the testsuite
|
||||
passes.
|
||||
---
|
||||
.travis.yml | 4 ++
|
||||
Doc/Manual/Php.html | 6 +-
|
||||
Doc/Manual/Preprocessor.html | 2 +-
|
||||
Doc/Manual/SWIG.html | 2 +-
|
||||
Examples/Makefile.in | 6 +-
|
||||
.../php/evil_diamond_prop_runme.php | 2 +-
|
||||
Lib/cdata.i | 2 +-
|
||||
Lib/exception.i | 2 +-
|
||||
Lib/php/phprun.swg | 8 ++-
|
||||
Source/Modules/php.cxx | 55 +++++++++++++++----
|
||||
configure.ac | 10 ++--
|
||||
11 files changed, 72 insertions(+), 27 deletions(-)
|
||||
|
||||
#diff --git a/.travis.yml b/.travis.yml
|
||||
#index 8c293c2f9fb..9477bed946f 100644
|
||||
#--- a/.travis.yml
|
||||
#+++ b/.travis.yml
|
||||
#@@ -154,6 +154,10 @@ matrix:
|
||||
# os: linux
|
||||
# env: SWIGLANG=php VER=7.4
|
||||
# dist: xenial
|
||||
#+ - compiler: gcc
|
||||
#+ os: linux
|
||||
#+ env: SWIGLANG=php VER=8.0
|
||||
#+ dist: xenial
|
||||
# - compiler: gcc
|
||||
# os: linux
|
||||
# env: SWIGLANG=python # 2.7
|
||||
diff --git a/Doc/Manual/Php.html b/Doc/Manual/Php.html
|
||||
index 09c514e944a..4b91958894a 100644
|
||||
--- a/Doc/Manual/Php.html
|
||||
+++ b/Doc/Manual/Php.html
|
||||
@@ -51,12 +51,12 @@ <H1><a name="Php">32 SWIG and PHP</a></H1>
|
||||
|
||||
<p>
|
||||
In this chapter, we discuss SWIG's support of PHP. SWIG currently supports
|
||||
-generating wrappers for PHP7. Support for PHP5 was removed in SWIG 4.0.0
|
||||
-and support for PHP4 was removed in SWIG 1.3.37.
|
||||
+generating wrappers for PHP7 and PHP8. Support for PHP5 was removed in SWIG
|
||||
+4.0.0 and support for PHP4 was removed in SWIG 1.3.37.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
-Currently any PHP7 release should work.
|
||||
+Currently any PHP7 or PHP8 release should work.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html
|
||||
index 51cc0637836..0c704bde959 100644
|
||||
--- a/Doc/Manual/Preprocessor.html
|
||||
+++ b/Doc/Manual/Preprocessor.html
|
||||
@@ -123,7 +123,7 @@ <H2><a name="Preprocessor_condition_compilation">11.3 Conditional Compilation</a
|
||||
SWIGOCTAVE Defined when using Octave
|
||||
SWIGPERL Defined when using Perl
|
||||
SWIGPHP Defined when using PHP (any version)
|
||||
-SWIGPHP7 Defined when using PHP7
|
||||
+SWIGPHP7 Defined when using PHP 7 or later
|
||||
SWIGPYTHON Defined when using Python
|
||||
SWIGR Defined when using R
|
||||
SWIGRUBY Defined when using Ruby
|
||||
diff --git a/Doc/Manual/SWIG.html b/Doc/Manual/SWIG.html
|
||||
index c54d117e018..f4884256536 100644
|
||||
--- a/Doc/Manual/SWIG.html
|
||||
+++ b/Doc/Manual/SWIG.html
|
||||
@@ -127,7 +127,7 @@ <H2><a name="SWIG_nn2">5.1 Running SWIG</a></H2>
|
||||
-lua - Generate Lua wrappers
|
||||
-octave - Generate Octave wrappers
|
||||
-perl5 - Generate Perl 5 wrappers
|
||||
- -php7 - Generate PHP 7 wrappers
|
||||
+ -php7 - Generate PHP 7 or later wrappers
|
||||
-python - Generate Python wrappers
|
||||
-r - Generate R (aka GNU S) wrappers
|
||||
-ruby - Generate Ruby wrappers
|
||||
diff --git a/Examples/Makefile.in b/Examples/Makefile.in
|
||||
index 3f6140b5e79..3978a959836 100644
|
||||
--- a/Examples/Makefile.in
|
||||
+++ b/Examples/Makefile.in
|
||||
@@ -1045,7 +1045,7 @@ ruby_clean:
|
||||
rm -f *.@OBJEXT@ *$(RUBY_SO)
|
||||
|
||||
##################################################################
|
||||
-##### PHP7 ######
|
||||
+##### PHP ######
|
||||
##################################################################
|
||||
|
||||
PHP = @PHP@
|
||||
@@ -1058,7 +1058,7 @@ PHP_SCRIPT = $(SRCDIR)$(RUNME).php
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
php: $(SRCDIR_SRCS)
|
||||
- $(SWIG) -php7 $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH)
|
||||
+ $(SWIG) -php $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH)
|
||||
$(CC) -c $(CCSHARED) $(CPPFLAGS) $(CFLAGS) $(SRCDIR_SRCS) $(ISRCS) $(INCLUDES) $(PHP_INCLUDE)
|
||||
$(LDSHARED) $(CFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO)
|
||||
|
||||
@@ -1067,7 +1067,7 @@ php: $(SRCDIR_SRCS)
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
php_cpp: $(SRCDIR_SRCS)
|
||||
- $(SWIG) -php7 -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH)
|
||||
+ $(SWIG) -php -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH)
|
||||
$(CXX) -c $(CCSHARED) $(CPPFLAGS) $(CXXFLAGS) $(SRCDIR_SRCS) $(SRCDIR_CXXSRCS) $(ICXXSRCS) $(INCLUDES) $(PHP_INCLUDE)
|
||||
$(CXXSHARED) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO)
|
||||
|
||||
diff --git a/Examples/test-suite/php/evil_diamond_prop_runme.php b/Examples/test-suite/php/evil_diamond_prop_runme.php
|
||||
index 9bdb7435f1c..645328affda 100644
|
||||
--- a/Examples/test-suite/php/evil_diamond_prop_runme.php
|
||||
+++ b/Examples/test-suite/php/evil_diamond_prop_runme.php
|
||||
@@ -31,7 +31,7 @@
|
||||
check::equal(1,$spam->_foo,"1==spam->_foo");
|
||||
check::equal(2,$spam->_bar,"2==spam->_bar");
|
||||
// multiple inheritance not supported in PHP
|
||||
-set_error_handler(NULL, 0); // Don't complain that _baz is unknown.
|
||||
+set_error_handler(function () {return true;}, E_NOTICE|E_WARNING); // Don't complain that _baz is unknown.
|
||||
check::equal(null,$spam->_baz,"null==spam->_baz");
|
||||
restore_error_handler();
|
||||
check::equal(4,$spam->_spam,"4==spam->_spam");
|
||||
diff --git a/Lib/cdata.i b/Lib/cdata.i
|
||||
index f18ed4af53c..cd15266431e 100644
|
||||
--- a/Lib/cdata.i
|
||||
+++ b/Lib/cdata.i
|
||||
@@ -21,7 +21,7 @@ typedef struct SWIGCDATA {
|
||||
}
|
||||
%typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH);
|
||||
|
||||
-#elif SWIGPHP7
|
||||
+#elif SWIGPHP
|
||||
|
||||
%typemap(out) SWIGCDATA {
|
||||
ZVAL_STRINGL($result, $1.data, $1.len);
|
||||
diff --git a/Lib/exception.i b/Lib/exception.i
|
||||
index ee9ce9bc632..3d6eeccdf2e 100644
|
||||
--- a/Lib/exception.i
|
||||
+++ b/Lib/exception.i
|
||||
@@ -12,7 +12,7 @@
|
||||
%insert("runtime") "swigerrors.swg"
|
||||
|
||||
|
||||
-#ifdef SWIGPHP7
|
||||
+#ifdef SWIGPHP
|
||||
%{
|
||||
#include "zend_exceptions.h"
|
||||
#define SWIG_exception(code, msg) do { zend_throw_exception(NULL, (char*)msg, code); goto thrown; } while (0)
|
||||
diff --git a/Lib/php/phprun.swg b/Lib/php/phprun.swg
|
||||
index f3a4e6ad1a9..04919878743 100644
|
||||
--- a/Lib/php/phprun.swg
|
||||
+++ b/Lib/php/phprun.swg
|
||||
@@ -12,8 +12,8 @@ extern "C" {
|
||||
#include "zend_exceptions.h"
|
||||
#include "php.h"
|
||||
|
||||
-#if PHP_MAJOR_VERSION != 7
|
||||
-# error These bindings need PHP7 - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5
|
||||
+#if PHP_MAJOR_VERSION < 7
|
||||
+# error These bindings need PHP 7 or later - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5
|
||||
#endif
|
||||
|
||||
#include "ext/standard/php_string.h"
|
||||
@@ -200,7 +200,11 @@ SWIG_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags) {
|
||||
|
||||
switch (Z_TYPE_P(z)) {
|
||||
case IS_OBJECT: {
|
||||
+#if PHP_MAJOR_VERSION < 8
|
||||
HashTable * ht = Z_OBJ_HT_P(z)->get_properties(z);
|
||||
+#else
|
||||
+ HashTable * ht = Z_OBJ_HT_P(z)->get_properties(Z_OBJ_P(z));
|
||||
+#endif
|
||||
if (ht) {
|
||||
zval * _cPtr = zend_hash_str_find(ht, "_cPtr", sizeof("_cPtr") - 1);
|
||||
if (_cPtr) {
|
||||
diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx
|
||||
index eaae32d633b..d8ee75b45fb 100644
|
||||
--- a/Source/Modules/php.cxx
|
||||
+++ b/Source/Modules/php.cxx
|
||||
@@ -473,6 +473,20 @@ class PHP : public Language {
|
||||
s_arginfo = NewString("/* arginfo subsection */\n");
|
||||
arginfo_used = NewHash();
|
||||
|
||||
+ // Add arginfo we'll definitely need for *_alter_newobject and *_get_newobject.
|
||||
+ SetFlag(arginfo_used, "1");
|
||||
+ Append(s_arginfo,
|
||||
+ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_1, 0, 0, 0)\n"
|
||||
+ " ZEND_ARG_INFO(0,arg1)\n"
|
||||
+ "ZEND_END_ARG_INFO()\n");
|
||||
+
|
||||
+ SetFlag(arginfo_used, "2");
|
||||
+ Append(s_arginfo,
|
||||
+ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_2, 0, 0, 0)\n"
|
||||
+ " ZEND_ARG_INFO(0,arg1)\n"
|
||||
+ " ZEND_ARG_INFO(0,arg2)\n"
|
||||
+ "ZEND_END_ARG_INFO()\n");
|
||||
+
|
||||
/* start the function entry section */
|
||||
s_entry = NewString("/* entry subsection */\n");
|
||||
|
||||
@@ -653,8 +667,8 @@ class PHP : public Language {
|
||||
}
|
||||
Printv(f_begin, s_vdecl, s_wrappers, NIL);
|
||||
Printv(f_begin, all_cs_entry, "\n\n", s_arginfo, "\n\n", s_entry,
|
||||
- " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,NULL)\n"
|
||||
- " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,NULL)\n"
|
||||
+ " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,swig_arginfo_2)\n"
|
||||
+ " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,swig_arginfo_1)\n"
|
||||
" ZEND_FE_END\n};\n\n", NIL);
|
||||
Printv(f_begin, s_init, NIL);
|
||||
Delete(s_header);
|
||||
@@ -689,25 +703,46 @@ class PHP : public Language {
|
||||
|
||||
// We want to only emit each different arginfo once, as that reduces the
|
||||
// size of both the generated source code and the compiled extension
|
||||
- // module. To do this, we name the arginfo to encode the number of
|
||||
- // parameters and which (if any) are passed by reference by using a
|
||||
- // sequence of 0s (for non-reference) and 1s (for by references).
|
||||
+ // module. The parameters at this level are just named arg1, arg2, etc
|
||||
+ // so we generate an arginfo name with the number of parameters and a
|
||||
+ // bitmap value saying which (if any) are passed by reference.
|
||||
ParmList *l = Getattr(n, "parms");
|
||||
- String * arginfo_code = NewStringEmpty();
|
||||
+ unsigned long bitmap = 0, bit = 1;
|
||||
+ int n_params = 0;
|
||||
+ bool overflowed = false;
|
||||
for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) {
|
||||
/* Ignored parameters */
|
||||
if (checkAttribute(p, "tmap:in:numinputs", "0")) {
|
||||
continue;
|
||||
}
|
||||
- Append(arginfo_code, GetFlag(p, "tmap:in:byref") ? "1" : "0");
|
||||
+ ++n_params;
|
||||
+ if (GetFlag(p, "tmap:in:byref")) {
|
||||
+ bitmap |= bit;
|
||||
+ if (bit == 0) overflowed = true;
|
||||
+ }
|
||||
+ bit <<= 1;
|
||||
+ }
|
||||
+ String * arginfo_code;
|
||||
+ if (overflowed) {
|
||||
+ // We overflowed the bitmap so just generate a unique name - this only
|
||||
+ // happens for a function with more parameters than bits in a long
|
||||
+ // where a high numbered parameter is passed by reference, so should be
|
||||
+ // rare in practice.
|
||||
+ static int overflowed_counter = 0;
|
||||
+ arginfo_code = NewStringf("z%d", ++overflowed_counter);
|
||||
+ } else if (bitmap == 0) {
|
||||
+ // No parameters passed by reference.
|
||||
+ arginfo_code = NewStringf("%d", n_params);
|
||||
+ } else {
|
||||
+ arginfo_code = NewStringf("%d_%lx", n_params, bitmap);
|
||||
}
|
||||
|
||||
if (!GetFlag(arginfo_used, arginfo_code)) {
|
||||
- // Not had this one before, so emit it.
|
||||
+ // Not had this one before so emit it.
|
||||
SetFlag(arginfo_used, arginfo_code);
|
||||
Printf(s_arginfo, "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_%s, 0, 0, 0)\n", arginfo_code);
|
||||
- for (const char * p = Char(arginfo_code); *p; ++p) {
|
||||
- Printf(s_arginfo, " ZEND_ARG_PASS_INFO(%c)\n", *p);
|
||||
+ for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) {
|
||||
+ Printf(s_arginfo, " ZEND_ARG_INFO(%d,%s)\n", GetFlag(p, "tmap:in:byref"), Getattr(p, "lname"));
|
||||
}
|
||||
Printf(s_arginfo, "ZEND_END_ARG_INFO()\n");
|
||||
}
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 7d5824a06b5..1894001c521 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2021,7 +2021,7 @@ AC_SUBST(RUBYSO)
|
||||
AC_SUBST(RUBYDYNAMICLINKING)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
-# Look for PHP7
|
||||
+# Look for PHP
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
PHPBIN=
|
||||
@@ -2035,7 +2035,7 @@ if test x"${PHPBIN}" = xno; then
|
||||
PHP=
|
||||
else
|
||||
if test "x$PHPBIN" = xyes; then
|
||||
- AC_CHECK_PROGS(PHP, [php7.3 php7.2 php7.1 php7.0 php])
|
||||
+ AC_CHECK_PROGS(PHP, [php8.0 php7.4 php7.3 php7.2 php7.1 php7.0 php])
|
||||
else
|
||||
PHP=$PHPBIN
|
||||
fi
|
||||
@@ -2046,12 +2046,14 @@ else
|
||||
case $PHP in
|
||||
*7.*)
|
||||
PHPCONFIG=`echo "$PHP"|sed 's/7\...*$/-config&/'` ;;
|
||||
+ *8.*)
|
||||
+ PHPCONFIG=`echo "$PHP"|sed 's/8\...*$/-config&/'` ;;
|
||||
*)
|
||||
PHPCONFIG=$PHP-config ;;
|
||||
esac
|
||||
php_version=`$PHPCONFIG --version 2>/dev/null`
|
||||
case $php_version in
|
||||
- 7.*)
|
||||
+ 7.*|8.*)
|
||||
PHPINC=`$PHPCONFIG --includes 2>/dev/null`
|
||||
if test -n "$PHPINC"; then
|
||||
AC_MSG_RESULT($PHPINC)
|
||||
@@ -2062,7 +2064,7 @@ else
|
||||
"")
|
||||
AC_MSG_RESULT([could not find $PHPCONFIG or obtain PHP version from it]) ;;
|
||||
*)
|
||||
- AC_MSG_RESULT([found PHP $php_version - not PHP 7]) ;;
|
||||
+ AC_MSG_RESULT([found PHP $php_version - not PHP 7 or 8]) ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
From fd96627b2fc65353c03b160efd60fdce864d386c Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Wed, 17 Mar 2021 13:00:02 +1300
|
||||
Subject: [PATCH 2/4] Temporary hack so testsuite passes for PHP8
|
||||
|
||||
---
|
||||
Examples/test-suite/director_overload2.i | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/Examples/test-suite/director_overload2.i b/Examples/test-suite/director_overload2.i
|
||||
index e467c18cea6..ddfa65bb4d3 100644
|
||||
--- a/Examples/test-suite/director_overload2.i
|
||||
+++ b/Examples/test-suite/director_overload2.i
|
||||
@@ -14,11 +14,15 @@ struct OverloadDerived1 : OverloadBase {
|
||||
virtual void nnn(int vvv) {}
|
||||
#if defined(__SUNPRO_CC)
|
||||
virtual void nnn() {}
|
||||
+#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8
|
||||
+ virtual void nnn() {}
|
||||
#endif
|
||||
};
|
||||
struct OverloadDerived2 : OverloadBase {
|
||||
#if defined(__SUNPRO_CC)
|
||||
virtual void nnn(int vvv) {}
|
||||
+#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8
|
||||
+ virtual void nnn(int vvv) {}
|
||||
#endif
|
||||
virtual void nnn() {}
|
||||
};
|
||||
|
||||
From 4c3e85fbd47f804b5956bf37f0073795296ddde2 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Sun, 21 Mar 2021 10:43:06 +1300
|
||||
Subject: [PATCH 3/4] Clarify what SWIGPHP7 means
|
||||
|
||||
---
|
||||
Doc/Manual/Preprocessor.html | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html
|
||||
index 0c704bde959..7611ea40c2b 100644
|
||||
--- a/Doc/Manual/Preprocessor.html
|
||||
+++ b/Doc/Manual/Preprocessor.html
|
||||
@@ -123,7 +123,7 @@ <H2><a name="Preprocessor_condition_compilation">11.3 Conditional Compilation</a
|
||||
SWIGOCTAVE Defined when using Octave
|
||||
SWIGPERL Defined when using Perl
|
||||
SWIGPHP Defined when using PHP (any version)
|
||||
-SWIGPHP7 Defined when using PHP 7 or later
|
||||
+SWIGPHP7 Defined when using PHP 7 or later (with a compatible C API)
|
||||
SWIGPYTHON Defined when using Python
|
||||
SWIGR Defined when using R
|
||||
SWIGRUBY Defined when using Ruby
|
||||
|
||||
From d18f98c24d9ee0e15457e0e91de2689ad591d1db Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Sun, 21 Mar 2021 10:54:17 +1300
|
||||
Subject: [PATCH 4/4] Update CHANGES.current and RELEASENOTES re PHP8
|
||||
|
||||
---
|
||||
CHANGES.current | 3 +++
|
||||
RELEASENOTES | 3 +++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index 79d41001f0a..6ae5689ee37 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -7,6 +7,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
# Version 4.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-21: olly
|
||||
#+ #1929, #1978 [PHP] Add support for PHP 8.
|
||||
#+
|
||||
# 2021-03-19: olly
|
||||
# #1527 [PHP] Improve PHP object creation in directorin case.
|
||||
# Reportedly the code we were using in this case gave segfaults in
|
||||
diff --git a/RELEASENOTES b/RELEASENOTES
|
||||
index cc3ba07121d..55590108759 100644
|
||||
--- a/RELEASENOTES
|
||||
+++ b/RELEASENOTES
|
||||
@@ -7,6 +7,9 @@ Release Notes
|
||||
Detailed release notes are available with the release and are also
|
||||
published on the SWIG web site at http://swig.org/release.html.
|
||||
|
||||
+SWIG-4.2.0 summary:
|
||||
+- Add PHP 8 support.
|
||||
+
|
||||
SWIG-4.0.2 summary:
|
||||
- A few fixes around doxygen comment handling.
|
||||
- Ruby 2.7 support added.
|
1863
SOURCES/swig-Upgrade-to-support-newer-NodeJS.patch
Normal file
1863
SOURCES/swig-Upgrade-to-support-newer-NodeJS.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,541 +0,0 @@
|
||||
From f08d7a63a92a3ba89d97bdfcc206e1e1c4804c0f Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Schneider <patrick.schneider@meetnow.eu>
|
||||
Date: Thu, 13 Apr 2017 15:02:53 +0200
|
||||
Subject: [PATCH 1/2] Add Node 7.x aka V8 5.2+ support
|
||||
|
||||
* Use WeakCallbackInfo instead of WeakCallbackData
|
||||
* Use GetPrivate instead of GetHiddenValue
|
||||
* Adopted new signature for SetWeak to support destructor calling
|
||||
* SetAccessor deprecation fixed
|
||||
* Proper version checks where applicable
|
||||
---
|
||||
Lib/javascript/v8/javascriptcode.swg | 27 +++++++++++++++++-----
|
||||
Lib/javascript/v8/javascripthelpers.swg | 29 +++++++++++++++++++++---
|
||||
Lib/javascript/v8/javascriptinit.swg | 16 +++++++++++--
|
||||
Lib/javascript/v8/javascriptrun.swg | 40 ++++++++++++++++++++++++++++-----
|
||||
4 files changed, 95 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/Lib/javascript/v8/javascriptcode.swg b/Lib/javascript/v8/javascriptcode.swg
|
||||
index fb7d55c2ad..b8c5089816 100644
|
||||
--- a/Lib/javascript/v8/javascriptcode.swg
|
||||
+++ b/Lib/javascript/v8/javascriptcode.swg
|
||||
@@ -133,10 +133,13 @@ static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Value> object, v
|
||||
SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Object> *object, SWIGV8_Proxy *proxy) {
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
|
||||
v8::Local<v8::Object> object = data.GetValue();
|
||||
SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
+#else
|
||||
+ static void $jswrapper(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
|
||||
+ SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
#endif
|
||||
|
||||
if(proxy->swigCMemOwn && proxy->swigCObject) {
|
||||
@@ -147,7 +150,9 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
|
||||
}
|
||||
delete proxy;
|
||||
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
object.Clear();
|
||||
+#endif
|
||||
|
||||
#if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031710)
|
||||
object.Dispose();
|
||||
@@ -155,7 +160,7 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
|
||||
object.Dispose(isolate);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032100)
|
||||
object->Dispose(isolate);
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
object->Dispose();
|
||||
#endif
|
||||
}
|
||||
@@ -177,10 +182,13 @@ static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Value> object, v
|
||||
SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
static void $jswrapper(v8::Isolate *isolate, v8::Persistent< v8::Object> *object, SWIGV8_Proxy *proxy) {
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
|
||||
v8::Local<v8::Object> object = data.GetValue();
|
||||
SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
+#else
|
||||
+static void $jswrapper(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
|
||||
+ SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
#endif
|
||||
|
||||
if(proxy->swigCMemOwn && proxy->swigCObject) {
|
||||
@@ -197,7 +205,7 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
|
||||
object->Dispose(isolate);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
object->Dispose();
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
object.Clear();
|
||||
#endif
|
||||
}
|
||||
@@ -211,7 +219,11 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
|
||||
* ----------------------------------------------------------------------------- */
|
||||
%fragment("js_getter", "templates")
|
||||
%{
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
static SwigV8ReturnValue $jswrapper(v8::Local<v8::String> property, const SwigV8PropertyCallbackInfo &info) {
|
||||
+#else
|
||||
+static SwigV8ReturnValue $jswrapper(v8::Local<v8::Name> property, const SwigV8PropertyCallbackInfo &info) {
|
||||
+#endif
|
||||
SWIGV8_HANDLESCOPE();
|
||||
|
||||
v8::Handle<v8::Value> jsresult;
|
||||
@@ -233,8 +245,11 @@ fail:
|
||||
* ----------------------------------------------------------------------------- */
|
||||
%fragment("js_setter", "templates")
|
||||
%{
|
||||
-static void $jswrapper(v8::Local<v8::String> property, v8::Local<v8::Value> value,
|
||||
- const SwigV8PropertyCallbackInfoVoid &info) {
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+static void $jswrapper(v8::Local<v8::String> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid &info) {
|
||||
+#else
|
||||
+static void $jswrapper(v8::Local<v8::Name> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid &info) {
|
||||
+#endif
|
||||
SWIGV8_HANDLESCOPE();
|
||||
|
||||
$jslocals
|
||||
diff --git a/Lib/javascript/v8/javascripthelpers.swg b/Lib/javascript/v8/javascripthelpers.swg
|
||||
index 091467df4d..74610793af 100644
|
||||
--- a/Lib/javascript/v8/javascripthelpers.swg
|
||||
+++ b/Lib/javascript/v8/javascripthelpers.swg
|
||||
@@ -6,11 +6,16 @@ typedef v8::InvocationCallback SwigV8FunctionCallback;
|
||||
typedef v8::AccessorGetter SwigV8AccessorGetterCallback;
|
||||
typedef v8::AccessorSetter SwigV8AccessorSetterCallback;
|
||||
typedef v8::AccessorInfo SwigV8PropertyCallbackInfoVoid;
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
typedef v8::FunctionCallback SwigV8FunctionCallback;
|
||||
typedef v8::AccessorGetterCallback SwigV8AccessorGetterCallback;
|
||||
typedef v8::AccessorSetterCallback SwigV8AccessorSetterCallback;
|
||||
typedef v8::PropertyCallbackInfo<void> SwigV8PropertyCallbackInfoVoid;
|
||||
+#else
|
||||
+typedef v8::FunctionCallback SwigV8FunctionCallback;
|
||||
+typedef v8::AccessorNameGetterCallback SwigV8AccessorGetterCallback;
|
||||
+typedef v8::AccessorNameSetterCallback SwigV8AccessorSetterCallback;
|
||||
+typedef v8::PropertyCallbackInfo<void> SwigV8PropertyCallbackInfoVoid;
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -65,18 +70,36 @@ SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Handle<v8::Object> obj, const char
|
||||
*/
|
||||
SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Handle<v8::Object> obj, const char* symbol,
|
||||
SwigV8AccessorGetterCallback getter, SwigV8AccessorSetterCallback setter) {
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
obj->SetAccessor(SWIGV8_SYMBOL_NEW(symbol), getter, setter);
|
||||
+#else
|
||||
+ obj->SetAccessor(SWIGV8_CURRENT_CONTEXT(), SWIGV8_SYMBOL_NEW(symbol), getter, setter);
|
||||
+#endif
|
||||
}
|
||||
|
||||
-SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::String> property, v8::Local<v8::Value> value,
|
||||
- const SwigV8PropertyCallbackInfoVoid& info)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::String> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid& info)
|
||||
+#else
|
||||
+SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::Name> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid& info)
|
||||
+#endif
|
||||
{
|
||||
char buffer[256];
|
||||
char msg[512];
|
||||
int res;
|
||||
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
property->WriteUtf8(buffer, 256);
|
||||
res = sprintf(msg, "Tried to write read-only variable: %s.", buffer);
|
||||
+#else
|
||||
+ v8::Local<v8::String> sproperty;
|
||||
+ if (property->ToString(SWIGV8_CURRENT_CONTEXT()).ToLocal(&sproperty)) {
|
||||
+ sproperty->WriteUtf8(buffer, 256);
|
||||
+ res = sprintf(msg, "Tried to write read-only variable: %s.", buffer);
|
||||
+ }
|
||||
+ else {
|
||||
+ res = -1;
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
if(res<0) {
|
||||
SWIG_exception(SWIG_ERROR, "Tried to write read-only variable.");
|
||||
diff --git a/Lib/javascript/v8/javascriptinit.swg b/Lib/javascript/v8/javascriptinit.swg
|
||||
index 34befa7ce7..86008d927f 100644
|
||||
--- a/Lib/javascript/v8/javascriptinit.swg
|
||||
+++ b/Lib/javascript/v8/javascriptinit.swg
|
||||
@@ -7,15 +7,27 @@ SWIG_V8_SetModule(void *, swig_module_info *swig_module) {
|
||||
v8::Local<v8::Object> global_obj = SWIGV8_CURRENT_CONTEXT()->Global();
|
||||
v8::Local<v8::External> mod = SWIGV8_EXTERNAL_NEW(swig_module);
|
||||
assert(!mod.IsEmpty());
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
global_obj->SetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data"), mod);
|
||||
+#else
|
||||
+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("swig_module_info_data"));
|
||||
+ global_obj->SetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey, mod);
|
||||
+#endif
|
||||
}
|
||||
|
||||
SWIGRUNTIME swig_module_info *
|
||||
SWIG_V8_GetModule(void *) {
|
||||
v8::Local<v8::Object> global_obj = SWIGV8_CURRENT_CONTEXT()->Global();
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
v8::Local<v8::Value> moduleinfo = global_obj->GetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data"));
|
||||
+#else
|
||||
+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("swig_module_info_data"));
|
||||
+ v8::Local<v8::Value> moduleinfo;
|
||||
+ if (!global_obj->GetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey).ToLocal(&moduleinfo))
|
||||
+ return 0;
|
||||
+#endif
|
||||
|
||||
- if (moduleinfo.IsEmpty())
|
||||
+ if (moduleinfo.IsEmpty() || moduleinfo->IsNull() || moduleinfo->IsUndefined())
|
||||
{
|
||||
// It's not yet loaded
|
||||
return 0;
|
||||
@@ -23,7 +35,7 @@ SWIG_V8_GetModule(void *) {
|
||||
|
||||
v8::Local<v8::External> moduleinfo_extern = v8::Local<v8::External>::Cast(moduleinfo);
|
||||
|
||||
- if (moduleinfo_extern.IsEmpty())
|
||||
+ if (moduleinfo_extern.IsEmpty() || moduleinfo_extern->IsNull() || moduleinfo_extern->IsUndefined())
|
||||
{
|
||||
// Something's not right
|
||||
return 0;
|
||||
diff --git a/Lib/javascript/v8/javascriptrun.swg b/Lib/javascript/v8/javascriptrun.swg
|
||||
index 5ac52a51dc..30002c02a3 100644
|
||||
--- a/Lib/javascript/v8/javascriptrun.swg
|
||||
+++ b/Lib/javascript/v8/javascriptrun.swg
|
||||
@@ -193,8 +193,10 @@ public:
|
||||
void (*dtor) (v8::Isolate *isolate, v8::Persistent< v8::Value> object, void *parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
void (*dtor) (v8::Isolate *isolate, v8::Persistent< v8::Object > *object, SWIGV8_Proxy *proxy);
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
void (*dtor) (const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data);
|
||||
+#else
|
||||
+ void (*dtor) (const v8::WeakCallbackInfo<SWIGV8_Proxy> &data);
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -241,9 +243,12 @@ SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Val
|
||||
SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Object > *object, SWIGV8_Proxy *proxy) {
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
|
||||
SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
+#else
|
||||
+SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
|
||||
+ SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
#endif
|
||||
|
||||
delete proxy;
|
||||
@@ -312,12 +317,18 @@ SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle<v8::Object> obj, void *ptr, sw
|
||||
} else {
|
||||
cdata->handle.MakeWeak(cdata, SWIGV8_Proxy_DefaultDtor);
|
||||
}
|
||||
-#else
|
||||
+#elifif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
if(cdata->swigCMemOwn && (SWIGV8_ClientData*)info->clientdata) {
|
||||
cdata->handle.SetWeak(cdata, ((SWIGV8_ClientData*)info->clientdata)->dtor);
|
||||
} else {
|
||||
cdata->handle.SetWeak(cdata, SWIGV8_Proxy_DefaultDtor);
|
||||
}
|
||||
+#else
|
||||
+ if(cdata->swigCMemOwn && (SWIGV8_ClientData*)info->clientdata) {
|
||||
+ cdata->handle.SetWeak(cdata, ((SWIGV8_ClientData*)info->clientdata)->dtor, v8::WeakCallbackType::kParameter);
|
||||
+ } else {
|
||||
+ cdata->handle.SetWeak(cdata, SWIGV8_Proxy_DefaultDtor, v8::WeakCallbackType::kParameter);
|
||||
+ }
|
||||
#endif
|
||||
|
||||
#if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031710)
|
||||
@@ -470,7 +481,14 @@ int SwigV8Packed_Check(v8::Handle<v8::Value> valRef) {
|
||||
|
||||
v8::Handle<v8::Object> objRef = valRef->ToObject();
|
||||
if(objRef->InternalFieldCount() < 1) return false;
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
v8::Handle<v8::Value> flag = objRef->GetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__"));
|
||||
+#else
|
||||
+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__"));
|
||||
+ v8::Local<v8::Value> flag;
|
||||
+ if (!objRef->GetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey).ToLocal(&flag))
|
||||
+ return false;
|
||||
+#endif
|
||||
return (flag->IsBoolean() && flag->BooleanValue());
|
||||
}
|
||||
|
||||
@@ -519,10 +537,13 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persist
|
||||
SwigV8PackedData *cdata = static_cast<SwigV8PackedData *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persistent<v8::Object> *object, SwigV8PackedData *cdata) {
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackData<v8::Object, SwigV8PackedData> &data) {
|
||||
v8::Local<v8::Object> object = data.GetValue();
|
||||
SwigV8PackedData *cdata = data.GetParameter();
|
||||
+#else
|
||||
+SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackInfo<SwigV8PackedData> &data) {
|
||||
+ SwigV8PackedData *cdata = data.GetParameter();
|
||||
#endif
|
||||
|
||||
delete cdata;
|
||||
@@ -537,7 +558,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackData<v8::Ob
|
||||
object->Dispose(isolate);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
object->Dispose();
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
object.Clear();
|
||||
#endif
|
||||
}
|
||||
@@ -550,7 +571,12 @@ v8::Handle<v8::Value> SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf
|
||||
// v8::Handle<v8::Object> obj = SWIGV8_OBJECT_NEW();
|
||||
v8::Local<v8::Object> obj = SWIGV8_OBJECT_NEW();
|
||||
|
||||
+#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
obj->SetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__"), SWIGV8_BOOLEAN_NEW(true));
|
||||
+#else
|
||||
+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__"));
|
||||
+ obj->SetPrivate(SWIGV8_CURRENT_CONTEXT(), privateKey, SWIGV8_BOOLEAN_NEW(true));
|
||||
+#endif
|
||||
|
||||
#if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031511)
|
||||
obj->SetPointerInInternalField(0, cdata);
|
||||
@@ -573,9 +599,11 @@ v8::Handle<v8::Value> SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf
|
||||
cdata->handle.MakeWeak(v8::Isolate::GetCurrent(), cdata, _wrap_SwigV8PackedData_delete);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
cdata->handle.MakeWeak(cdata, _wrap_SwigV8PackedData_delete);
|
||||
-#else
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
cdata->handle.SetWeak(cdata, _wrap_SwigV8PackedData_delete);
|
||||
// v8::V8::SetWeak(&cdata->handle, cdata, _wrap_SwigV8PackedData_delete);
|
||||
+#else
|
||||
+ cdata->handle.SetWeak(cdata, _wrap_SwigV8PackedData_delete, v8::WeakCallbackType::kParameter);
|
||||
#endif
|
||||
|
||||
#if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031710)
|
||||
|
||||
From 9ce8d7e7c99e75163318428aeff6e60d398fcdca Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Schneider <patrick.schneider@meetnow.eu>
|
||||
Date: Thu, 13 Apr 2017 19:39:44 +0200
|
||||
Subject: [PATCH 2/2] Remove warnings on Node 6.x aka V8 5.0 and 5.1
|
||||
|
||||
The proposed changes targetted at 5.2 (or 5.4 to be more precise, since there is no Node release with V8 5.2 or 5.3) work for lower versions as well and bust the deprecation warnings there.
|
||||
---
|
||||
Lib/javascript/v8/javascriptcode.swg | 14 +++++++-------
|
||||
Lib/javascript/v8/javascripthelpers.swg | 8 ++++----
|
||||
Lib/javascript/v8/javascriptinit.swg | 4 ++--
|
||||
Lib/javascript/v8/javascriptrun.swg | 16 ++++++++--------
|
||||
4 files changed, 21 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/Lib/javascript/v8/javascriptcode.swg b/Lib/javascript/v8/javascriptcode.swg
|
||||
index b8c5089816..c4aaf3db0c 100644
|
||||
--- a/Lib/javascript/v8/javascriptcode.swg
|
||||
+++ b/Lib/javascript/v8/javascriptcode.swg
|
||||
@@ -133,7 +133,7 @@ static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Value> object, v
|
||||
SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Object> *object, SWIGV8_Proxy *proxy) {
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
|
||||
v8::Local<v8::Object> object = data.GetValue();
|
||||
SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
@@ -150,7 +150,7 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
|
||||
}
|
||||
delete proxy;
|
||||
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
object.Clear();
|
||||
#endif
|
||||
|
||||
@@ -160,7 +160,7 @@ static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &dat
|
||||
object.Dispose(isolate);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032100)
|
||||
object->Dispose(isolate);
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
object->Dispose();
|
||||
#endif
|
||||
}
|
||||
@@ -182,7 +182,7 @@ static void $jswrapper(v8::Isolate *isolate, v8::Persistent<v8::Value> object, v
|
||||
SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
static void $jswrapper(v8::Isolate *isolate, v8::Persistent< v8::Object> *object, SWIGV8_Proxy *proxy) {
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
static void $jswrapper(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
|
||||
v8::Local<v8::Object> object = data.GetValue();
|
||||
SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
@@ -205,7 +205,7 @@ static void $jswrapper(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
|
||||
object->Dispose(isolate);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
object->Dispose();
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
object.Clear();
|
||||
#endif
|
||||
}
|
||||
@@ -219,7 +219,7 @@ static void $jswrapper(const v8::WeakCallbackInfo<SWIGV8_Proxy> &data) {
|
||||
* ----------------------------------------------------------------------------- */
|
||||
%fragment("js_getter", "templates")
|
||||
%{
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
static SwigV8ReturnValue $jswrapper(v8::Local<v8::String> property, const SwigV8PropertyCallbackInfo &info) {
|
||||
#else
|
||||
static SwigV8ReturnValue $jswrapper(v8::Local<v8::Name> property, const SwigV8PropertyCallbackInfo &info) {
|
||||
@@ -245,7 +245,7 @@ fail:
|
||||
* ----------------------------------------------------------------------------- */
|
||||
%fragment("js_setter", "templates")
|
||||
%{
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
static void $jswrapper(v8::Local<v8::String> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid &info) {
|
||||
#else
|
||||
static void $jswrapper(v8::Local<v8::Name> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid &info) {
|
||||
diff --git a/Lib/javascript/v8/javascripthelpers.swg b/Lib/javascript/v8/javascripthelpers.swg
|
||||
index 74610793af..7b8a5ec237 100644
|
||||
--- a/Lib/javascript/v8/javascripthelpers.swg
|
||||
+++ b/Lib/javascript/v8/javascripthelpers.swg
|
||||
@@ -6,7 +6,7 @@ typedef v8::InvocationCallback SwigV8FunctionCallback;
|
||||
typedef v8::AccessorGetter SwigV8AccessorGetterCallback;
|
||||
typedef v8::AccessorSetter SwigV8AccessorSetterCallback;
|
||||
typedef v8::AccessorInfo SwigV8PropertyCallbackInfoVoid;
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
typedef v8::FunctionCallback SwigV8FunctionCallback;
|
||||
typedef v8::AccessorGetterCallback SwigV8AccessorGetterCallback;
|
||||
typedef v8::AccessorSetterCallback SwigV8AccessorSetterCallback;
|
||||
@@ -70,14 +70,14 @@ SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Handle<v8::Object> obj, const char
|
||||
*/
|
||||
SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Handle<v8::Object> obj, const char* symbol,
|
||||
SwigV8AccessorGetterCallback getter, SwigV8AccessorSetterCallback setter) {
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
obj->SetAccessor(SWIGV8_SYMBOL_NEW(symbol), getter, setter);
|
||||
#else
|
||||
obj->SetAccessor(SWIGV8_CURRENT_CONTEXT(), SWIGV8_SYMBOL_NEW(symbol), getter, setter);
|
||||
#endif
|
||||
}
|
||||
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::String> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid& info)
|
||||
#else
|
||||
SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::Name> property, v8::Local<v8::Value> value, const SwigV8PropertyCallbackInfoVoid& info)
|
||||
@@ -87,7 +87,7 @@ SWIGRUNTIME void JS_veto_set_variable(v8::Local<v8::Name> property, v8::Local<v8
|
||||
char msg[512];
|
||||
int res;
|
||||
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
property->WriteUtf8(buffer, 256);
|
||||
res = sprintf(msg, "Tried to write read-only variable: %s.", buffer);
|
||||
#else
|
||||
diff --git a/Lib/javascript/v8/javascriptinit.swg b/Lib/javascript/v8/javascriptinit.swg
|
||||
index 86008d927f..e83f478d9d 100644
|
||||
--- a/Lib/javascript/v8/javascriptinit.swg
|
||||
+++ b/Lib/javascript/v8/javascriptinit.swg
|
||||
@@ -7,7 +7,7 @@ SWIG_V8_SetModule(void *, swig_module_info *swig_module) {
|
||||
v8::Local<v8::Object> global_obj = SWIGV8_CURRENT_CONTEXT()->Global();
|
||||
v8::Local<v8::External> mod = SWIGV8_EXTERNAL_NEW(swig_module);
|
||||
assert(!mod.IsEmpty());
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
global_obj->SetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data"), mod);
|
||||
#else
|
||||
v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("swig_module_info_data"));
|
||||
@@ -18,7 +18,7 @@ SWIG_V8_SetModule(void *, swig_module_info *swig_module) {
|
||||
SWIGRUNTIME swig_module_info *
|
||||
SWIG_V8_GetModule(void *) {
|
||||
v8::Local<v8::Object> global_obj = SWIGV8_CURRENT_CONTEXT()->Global();
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
v8::Local<v8::Value> moduleinfo = global_obj->GetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data"));
|
||||
#else
|
||||
v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("swig_module_info_data"));
|
||||
diff --git a/Lib/javascript/v8/javascriptrun.swg b/Lib/javascript/v8/javascriptrun.swg
|
||||
index 30002c02a3..0af9f4eb0a 100644
|
||||
--- a/Lib/javascript/v8/javascriptrun.swg
|
||||
+++ b/Lib/javascript/v8/javascriptrun.swg
|
||||
@@ -193,7 +193,7 @@ public:
|
||||
void (*dtor) (v8::Isolate *isolate, v8::Persistent< v8::Value> object, void *parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
void (*dtor) (v8::Isolate *isolate, v8::Persistent< v8::Object > *object, SWIGV8_Proxy *proxy);
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
void (*dtor) (const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data);
|
||||
#else
|
||||
void (*dtor) (const v8::WeakCallbackInfo<SWIGV8_Proxy> &data);
|
||||
@@ -243,7 +243,7 @@ SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Val
|
||||
SWIGV8_Proxy *proxy = static_cast<SWIGV8_Proxy *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Object > *object, SWIGV8_Proxy *proxy) {
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackData<v8::Object, SWIGV8_Proxy> &data) {
|
||||
SWIGV8_Proxy *proxy = data.GetParameter();
|
||||
#else
|
||||
@@ -317,7 +317,7 @@ SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle<v8::Object> obj, void *ptr, sw
|
||||
} else {
|
||||
cdata->handle.MakeWeak(cdata, SWIGV8_Proxy_DefaultDtor);
|
||||
}
|
||||
-#elifif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
if(cdata->swigCMemOwn && (SWIGV8_ClientData*)info->clientdata) {
|
||||
cdata->handle.SetWeak(cdata, ((SWIGV8_ClientData*)info->clientdata)->dtor);
|
||||
} else {
|
||||
@@ -481,7 +481,7 @@ int SwigV8Packed_Check(v8::Handle<v8::Value> valRef) {
|
||||
|
||||
v8::Handle<v8::Object> objRef = valRef->ToObject();
|
||||
if(objRef->InternalFieldCount() < 1) return false;
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
v8::Handle<v8::Value> flag = objRef->GetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__"));
|
||||
#else
|
||||
v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__"));
|
||||
@@ -537,7 +537,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persist
|
||||
SwigV8PackedData *cdata = static_cast<SwigV8PackedData *>(parameter);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persistent<v8::Object> *object, SwigV8PackedData *cdata) {
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackData<v8::Object, SwigV8PackedData> &data) {
|
||||
v8::Local<v8::Object> object = data.GetValue();
|
||||
SwigV8PackedData *cdata = data.GetParameter();
|
||||
@@ -558,7 +558,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackInfo<SwigV8
|
||||
object->Dispose(isolate);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
object->Dispose();
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
object.Clear();
|
||||
#endif
|
||||
}
|
||||
@@ -571,7 +571,7 @@ v8::Handle<v8::Value> SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf
|
||||
// v8::Handle<v8::Object> obj = SWIGV8_OBJECT_NEW();
|
||||
v8::Local<v8::Object> obj = SWIGV8_OBJECT_NEW();
|
||||
|
||||
-#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#if (V8_MAJOR_VERSION-0) < 5
|
||||
obj->SetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__"), SWIGV8_BOOLEAN_NEW(true));
|
||||
#else
|
||||
v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__"));
|
||||
@@ -599,7 +599,7 @@ v8::Handle<v8::Value> SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf
|
||||
cdata->handle.MakeWeak(v8::Isolate::GetCurrent(), cdata, _wrap_SwigV8PackedData_delete);
|
||||
#elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION)
|
||||
cdata->handle.MakeWeak(cdata, _wrap_SwigV8PackedData_delete);
|
||||
-#elif (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2)
|
||||
+#elif (V8_MAJOR_VERSION-0) < 5
|
||||
cdata->handle.SetWeak(cdata, _wrap_SwigV8PackedData_delete);
|
||||
// v8::V8::SetWeak(&cdata->handle, cdata, _wrap_SwigV8PackedData_delete);
|
||||
#else
|
@ -1,13 +0,0 @@
|
||||
diff -up swig-3.0.8/configure.ac.orig swig-3.0.8/configure.ac
|
||||
--- swig-3.0.8/configure.ac.orig 2016-02-02 16:01:09.094852303 +0100
|
||||
+++ swig-3.0.8/configure.ac 2016-02-02 16:01:42.096702679 +0100
|
||||
@@ -131,7 +131,8 @@ AC_SUBST(BOOST_CPPFLAGS)
|
||||
dnl How to specify include directories that may be system directories.
|
||||
# -I should not be used on system directories (GCC)
|
||||
if test "$GCC" = yes; then
|
||||
- ISYSTEM="-isystem "
|
||||
+# ISYSTEM="-isystem "
|
||||
+ ISYSTEM="-I"
|
||||
else
|
||||
ISYSTEM="-I"
|
||||
fi
|
225
SPECS/swig.spec
225
SPECS/swig.spec
@ -1,13 +1,31 @@
|
||||
# We can skip tests
|
||||
%bcond_without testsuite
|
||||
|
||||
%if %{without testsuite}
|
||||
%global tcl 0
|
||||
%global lualang 0
|
||||
%global perllang 0
|
||||
%global phplang 0
|
||||
%global rubylang 0
|
||||
%global python3lang 0
|
||||
%global golang 0
|
||||
%global octave 0
|
||||
%global Rlang 0
|
||||
%global javalang 0
|
||||
%endif
|
||||
|
||||
%{!?tcl:%global tcl 1}
|
||||
%{!?guile:%global guile 0}
|
||||
%{!?lualang:%global lualang 1}
|
||||
# Disable PHP tests, because they fail with PHP 7.2.0
|
||||
%{!?phplang:%global phplang 0}
|
||||
%{!?perllang:%global perllang 1}
|
||||
%{!?phplang:%global phplang 1}
|
||||
# Disable Ruby test failed with swig 4.0.0 on s390
|
||||
%ifarch s390x %{power64}
|
||||
%{!?rubylang:%global rubylang 0}
|
||||
%else
|
||||
%{!?rubylang:%global rubylang 1}
|
||||
%{!?python2lang:%global python2lang 0}
|
||||
%endif
|
||||
%{!?python3lang:%global python3lang 1}
|
||||
|
||||
%if 0%{?rhel}
|
||||
%{!?golang:%global golang 0}
|
||||
@ -19,22 +37,24 @@
|
||||
%{!?Rlang:%global Rlang 1}
|
||||
%bcond_without build_ccache_swig
|
||||
%endif
|
||||
%ifarch aarch64 %{arm} %{mips} ppc64le ppc %{power64} s390 s390x
|
||||
%ifarch aarch64 %{arm} %{mips} ppc %{power64} s390 s390x
|
||||
%{!?javalang:%global javalang 0}
|
||||
%else
|
||||
%{!?javalang:%global javalang 1}
|
||||
%endif
|
||||
|
||||
%ifarch %{ix86} x86_64 %{arm} aarch64 ppc64le
|
||||
%{!?golang:%global golang 1}
|
||||
# Do not run Go tests, they failed with 4.0.0 on ppc64le
|
||||
%ifarch %{ix86} x86_64 %{arm} aarch64
|
||||
# Tests do not work with Go 1.15
|
||||
%{!?golang:%global golang 0}
|
||||
%else
|
||||
%{!?golang:%global golang 0}
|
||||
%endif
|
||||
|
||||
Summary: Connects C/C++/Objective C to some high-level programming languages
|
||||
Name: swig
|
||||
Version: 3.0.12
|
||||
Release: 19%{?dist}
|
||||
Version: 4.0.2
|
||||
Release: 8%{?dist}
|
||||
License: GPLv3+ and BSD
|
||||
URL: http://swig.sourceforge.net/
|
||||
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
|
||||
@ -46,29 +66,17 @@ Source3: ccache-swig.sh
|
||||
Source4: ccache-swig.csh
|
||||
%endif
|
||||
|
||||
Patch0: swig308-Do-not-use-isystem.patch
|
||||
Patch1: swig-3.0.12-Fix-testsuite-to-work-without-.-in-INC.patch
|
||||
# Upstream pull request to support Node v7/v8
|
||||
Patch2: https://patch-diff.githubusercontent.com/raw/swig/swig/pull/968/swig-node-v7.patch
|
||||
# Fix generated code for constant expressions containing wchar_t L
|
||||
# literals.
|
||||
Patch3: swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch
|
||||
Patch4: swig-3.0.12-Fix-type-promotion-wrapping-some-non-trivial-constan.patch
|
||||
Patch5: swig-3.0.12-Correct-php-testcase.patch
|
||||
Patch6: swig-3.0.12-Fix-go-version-matching-in-configure-for-go1.10.patch
|
||||
# Backport upstream Coverity fixes (BZ# 1570037)
|
||||
Patch7: swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch
|
||||
Patch8: swig-3.0.12-Fix-Coverity-issue-reported-for-setslice-pycontainer.patch
|
||||
Patch9: swig-3.0.12-Coverity-fix-issue-reported-for-wrapper-argument-che.patch
|
||||
Patch10: swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_ConvertF.patch
|
||||
# Add missing checks for failures in calls to PyUnicode_AsUTF8String (BZ#1804625)
|
||||
Patch11: swig-3.0.12-Add-missing-checks-for-failures-in-calls-to-PyUnicod.patch
|
||||
# https://github.com/swig/swig/pull/1702
|
||||
Patch0: swig-Upgrade-to-support-newer-NodeJS.patch
|
||||
# Backport PHP 7.x and 88888888 updates
|
||||
Patch1: swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
|
||||
Patch2: swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
|
||||
Patch3: swig-4.0.2-Improve-PHP-object-creation.patch
|
||||
Patch4: swig-4.0.2-Support-PHP8.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: perl-interpreter, pcre-devel
|
||||
%if %{python2lang}
|
||||
BuildRequires: python2-devel
|
||||
%endif
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
BuildRequires: autoconf, automake, gawk, dos2unix
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: help2man
|
||||
@ -97,6 +105,7 @@ BuildRequires: octave-devel
|
||||
%endif
|
||||
%if %{golang}
|
||||
BuildRequires: golang
|
||||
BuildRequires: golang-bin
|
||||
BuildRequires: golang-shared
|
||||
BuildRequires: golang-src
|
||||
%endif
|
||||
@ -119,17 +128,20 @@ BuildRequires: php, php-devel
|
||||
%description
|
||||
Simplified Wrapper and Interface Generator (SWIG) is a software
|
||||
development tool for connecting C, C++ and Objective C programs with a
|
||||
variety of high-level programming languages. SWIG is primarily used
|
||||
with Perl, Python and Tcl/TK, but it has also been extended to Java,
|
||||
Eiffel and Guile. SWIG is normally used to create high-level
|
||||
interpreted programming environments, systems integration, and as a
|
||||
tool for building user interfaces
|
||||
variety of high-level programming languages. SWIG is used with different
|
||||
types of target languages including common scripting languages such as
|
||||
Javascript, Perl, PHP, Python, Tcl and Ruby. The list of supported
|
||||
languages also includes non-scripting languages such as C#, D, Go language,
|
||||
Java including Android, Lua, OCaml, Octave, Scilab and R. Also several
|
||||
interpreted and compiled Scheme implementations (Guile, MzScheme/Racket)
|
||||
are supported. SWIG is most commonly used to create high-level interpreted
|
||||
or compiled programming environments, user interfaces, and as a tool for
|
||||
testing and prototyping C/C++ software.
|
||||
|
||||
%if %{with build_ccache_swig}
|
||||
%package -n ccache-swig
|
||||
Summary: Fast compiler cache
|
||||
License: GPLv2+
|
||||
Group: Development/Tools
|
||||
Requires: swig
|
||||
Conflicts: swig < 3.0.8-2
|
||||
|
||||
@ -142,7 +154,6 @@ being done again. ccache-swig is ccache plus support for SWIG.
|
||||
%package doc
|
||||
Summary: Documentation files for SWIG
|
||||
License: BSD
|
||||
Group: Development/Tools
|
||||
BuildArch: noarch
|
||||
|
||||
%description doc
|
||||
@ -158,20 +169,7 @@ This package contains file with commands for easier debugging of SWIG
|
||||
in gdb.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%patch0 -p1 -b .isystem
|
||||
%patch1 -p1
|
||||
%patch2 -p1 -b .bak
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%autosetup -p1
|
||||
|
||||
for all in CHANGES README; do
|
||||
iconv -f ISO88591 -t UTF8 < $all > $all.new
|
||||
@ -185,16 +183,26 @@ done
|
||||
# Disable maximum compile warnings when octave is supported, because Octave
|
||||
# code produces lots of the warnings demanded by strict ISO C and ISO C++.
|
||||
# It causes that log had more then 600M.
|
||||
# AC_CHECK_PROGS requires just the name, so use for configure
|
||||
# --with-python3=python3 --with-2to3=2to3
|
||||
%configure \
|
||||
--without-ocaml \
|
||||
%if %{python2lang}
|
||||
--with-python=%__python2\
|
||||
%if %{python3lang}
|
||||
--with-python3=python3 \
|
||||
--with-2to3=2to3 \
|
||||
%else
|
||||
--without-python \
|
||||
--without-python3 \
|
||||
%endif
|
||||
--with-python3=%__python3 \
|
||||
%if %{phplang}
|
||||
--with-php=%{__php} \
|
||||
--with-php \
|
||||
%else
|
||||
--without-php \
|
||||
%endif
|
||||
%if ! %{perllang}
|
||||
--without-perl5 \
|
||||
%endif
|
||||
%if ! %{tcl}
|
||||
--without-tcl \
|
||||
%endif
|
||||
%if ! %{javalang}
|
||||
--without-java \
|
||||
@ -206,18 +214,18 @@ done
|
||||
--without-go \
|
||||
%endif
|
||||
%if %{octave}
|
||||
--with-octave=/usr/bin/octave \
|
||||
--with-octave=%{_bindir}/octave \
|
||||
--without-maximum-compile-warnings \
|
||||
%endif
|
||||
%if %{without build_ccache_swig}
|
||||
--disable-ccache \
|
||||
%endif
|
||||
;
|
||||
make %{?_smp_mflags}
|
||||
%{make_build}
|
||||
|
||||
%if %{with testsuite}
|
||||
# Test suite
|
||||
make check
|
||||
make check PY3=1
|
||||
%endif
|
||||
|
||||
%install
|
||||
@ -240,7 +248,7 @@ for all in `find -type f`; do
|
||||
done
|
||||
popd
|
||||
|
||||
make DESTDIR=%{buildroot} install
|
||||
%{make_install}
|
||||
|
||||
#################################################
|
||||
# Use help output for generating of man page swig
|
||||
@ -335,12 +343,105 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
|
||||
%{_datadir}/%{name}/gdb
|
||||
|
||||
%changelog
|
||||
* Fri Apr 03 2020 Jitka Plesnikova <jplesnik@redhat.com> - 3.0.12-19
|
||||
- Add missing checks for failures in calls to PyUnicode_AsUTF8String (bug#1804625)
|
||||
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 4.0.2-8
|
||||
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
|
||||
Related: rhbz#1991688
|
||||
|
||||
* Fri Jun 22 2018 Jitka Plesnikova <jplesnik@redhat.com> - 3.0.12-18
|
||||
* Tue Jun 22 2021 Mohan Boddu <mboddu@redhat.com> - 4.0.2-7
|
||||
- Rebuilt for RHEL 9 BETA for openssl 3.0
|
||||
Related: rhbz#1971065
|
||||
|
||||
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 4.0.2-6
|
||||
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
|
||||
|
||||
* Fri Mar 05 2021 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.2-5
|
||||
- Backport support of PHP8 from upstream
|
||||
|
||||
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.2-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Fri Aug 28 2020 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.2-3
|
||||
- Enable tests for Python 3
|
||||
|
||||
* Wed Jul 29 2020 Tom Stellard <tstellar@redhat.com> - 4.0.2-2
|
||||
- Use make macros
|
||||
https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
|
||||
- Disable Go tests
|
||||
|
||||
* Mon Jun 08 2020 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.2-1
|
||||
- Update to 4.0.2
|
||||
|
||||
* Fri Mar 06 2020 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.1-9
|
||||
- Remove BR for Python 2 (bug#1807547)
|
||||
|
||||
* Tue Feb 25 2020 Peter Robinson <pbrobinson@fedoraproject.org> - 4.0.1-8
|
||||
- Add fix for newer NodeJS version
|
||||
|
||||
* Tue Feb 04 2020 Michael Jeanson <mjeanson@efficios.com> - 4.0.1-7
|
||||
- Fix crash in Python backend when using empty docstrings
|
||||
|
||||
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.1-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Thu Jan 23 2020 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.1-5
|
||||
- Add support for Ruby 2.7
|
||||
- Fix code generated for Ruby global variables
|
||||
|
||||
* Sat Jan 18 2020 Mamoru TASAKA <mtasaka@fedoraproject.org> - 4.0.1-4
|
||||
- Backport upstream fixes for ruby 2.7 (as small as possible for now)
|
||||
|
||||
* Tue Nov 19 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.1-3
|
||||
- Disable Ruby tests on all archs
|
||||
|
||||
* Thu Oct 17 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.1-2
|
||||
- Disable Ruby tests on x86_64
|
||||
|
||||
* Wed Aug 21 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.1-1
|
||||
- Update to 4.0.1
|
||||
- Add Python 3.8 support
|
||||
- Python Sphinx compatibility added for Doxygen comments
|
||||
- Fix some C++17 compatibility problems in Python and Ruby generated
|
||||
code
|
||||
|
||||
* Mon Aug 12 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.0-5
|
||||
- Backport upstream fix for Go tests (BZ#1736731)
|
||||
|
||||
* Tue Aug 06 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.0-4
|
||||
- Disable Go tests, they fail with Go 1.13-beta
|
||||
|
||||
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.0-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Wed Jun 05 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.0-2
|
||||
- Updated package description
|
||||
|
||||
* Fri May 03 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.0-1
|
||||
- Update to 4.0.0
|
||||
|
||||
* Sat Apr 27 2019 Orion Poplawski <orion@nwra.com> - 3.0.12-25
|
||||
- Add patches for octave 5.1 support
|
||||
|
||||
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.0.12-24
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Fri Jan 25 2019 Jonathan Wakely <jwakely@redhat.com> - 3.0.12-23
|
||||
- Rebuilt for Boost 1.69
|
||||
|
||||
* Thu Nov 15 2018 Jitka Plesnikova <jplesnik@redhat.com> - 3.0.12-22
|
||||
- Add support for Octave 4.4
|
||||
|
||||
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.0.12-21
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Mon Jul 02 2018 Miro Hrončok <mhroncok@redhat.com> - 3.0.12-20
|
||||
- Rebuilt for Python 3.7
|
||||
|
||||
* Fri Jun 22 2018 Jitka Plesnikova <jplesnik@redhat.com> - 3.0.12-19
|
||||
- Disable using of Python 2
|
||||
|
||||
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 3.0.12-18
|
||||
- Rebuilt for Python 3.7
|
||||
|
||||
* Tue Apr 24 2018 Jitka Plesnikova <jplesnik@redhat.com> - 3.0.12-17
|
||||
- Backport upstream Coverity fixes (bug#1570037)
|
||||
- Do not build ccache-swig on RHEL
|
||||
|
Loading…
Reference in New Issue
Block a user