commit ee8cf3d7b31554e24673432132f3ebd155032cc3 Author: James Antill Date: Mon Feb 20 02:15:08 2023 -0500 Import rpm: 819d244577ac47d2c67b1c7f4a5da0773ba95669 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f32cd37 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/swig-3.0.12.tar.gz diff --git a/ccache-swig.csh b/ccache-swig.csh new file mode 100644 index 0000000..44db5a6 --- /dev/null +++ b/ccache-swig.csh @@ -0,0 +1,4 @@ +# Use ccache-swig by default. Users who don't want that can setenv the +# CCACHE_DISABLE environment variable in their personal profile. + +alias swig 'ccache-swig swig' diff --git a/ccache-swig.sh b/ccache-swig.sh new file mode 100644 index 0000000..f8867e9 --- /dev/null +++ b/ccache-swig.sh @@ -0,0 +1,4 @@ +# Use ccache-swig by default. Users who don't want that can set the +# CCACHE_DISABLE environment variable in their personal profile. + +alias swig='ccache-swig swig' diff --git a/description-ccache.h2m b/description-ccache.h2m new file mode 100644 index 0000000..ae84168 --- /dev/null +++ b/description-ccache.h2m @@ -0,0 +1,12 @@ + +[name] +ccache-swig - a fast compiler cache + +[description] +ccache-swig is a compiler cache. It speeds up re-compilation of C/C++/SWIG +code by caching previous compiles and detecting when the same compile is +being done again. ccache-swig is ccache plus support for SWIG. + +[notes] +For more information, see @DOCDIR@/swig-doc/Doc/Manual/CCache.html from the +swig-doc package. diff --git a/description.h2m b/description.h2m new file mode 100644 index 0000000..e894cdd --- /dev/null +++ b/description.h2m @@ -0,0 +1,24 @@ +[name] +swig - Simplified Wrapper and Interface Generator + +[synopsis] +swig [ options ] " file" + +[description] +The swig command is used to create wrapper code to connect C and C++ code to +scripting languages like Perl, Python, Tcl etc. from the definition of the +interface. For detailed information on writing those interface definitions +please refer to /usr/share/doc/swig-doc/Doc/Manual/index.html from the swig-doc +package. + +This manpage concentrates on explaining the invocation of the swig command. + +[author] +SWIG was originally created by David Beazley. For up-to-date information +about authors and contributors please check http://www.swig.org/guilty.html. +This manual page was written by Torsten Landschoff and +updated by Jitka Plesnikova (but may be used by +others). + + + diff --git a/sources b/sources new file mode 100644 index 0000000..59eacb0 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA1 (swig-3.0.12.tar.gz) = 5cc1af41d041e4cc609580b99bb3dcf720effa25 diff --git a/swig-3.0.12-Add-missing-checks-for-failures-in-calls-to-PyUnicod.patch b/swig-3.0.12-Add-missing-checks-for-failures-in-calls-to-PyUnicod.patch new file mode 100644 index 0000000..7050452 --- /dev/null +++ b/swig-3.0.12-Add-missing-checks-for-failures-in-calls-to-PyUnicod.patch @@ -0,0 +1,346 @@ +From b0e29fbdf31bb94b11cb8a7cc830b4a76467afa3 Mon Sep 17 00:00:00 2001 +From: William S Fulton +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: +#
+# %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) {
+#+  ...
+#+}
+#+
+# %}
+# 
+# +#@@ -6590,6 +6592,20 @@ For more details about the surrogateescape error handler, please see +# PEP 383. +#

+# +#+

+#+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 instring method above is wrapped and called, any invalid UTF8 Unicode code strings +#+will result in a TypeError because the attempted conversion fails: +#+

+#+ +#+
+#+>>> 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 *'
+#+
+#+ +#

+# 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 + diff --git a/swig-3.0.12-Correct-php-testcase.patch b/swig-3.0.12-Correct-php-testcase.patch new file mode 100644 index 0000000..b90f5f9 --- /dev/null +++ b/swig-3.0.12-Correct-php-testcase.patch @@ -0,0 +1,26 @@ +From 0a9113dcba2930b658cb67f9ba1c63ad8eebd88f Mon Sep 17 00:00:00 2001 +From: William S Fulton +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 + diff --git a/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_ConvertF.patch b/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_ConvertF.patch new file mode 100644 index 0000000..9fff13b --- /dev/null +++ b/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_ConvertF.patch @@ -0,0 +1,58 @@ +From 21f532975f59f0c156c76cc739f5a93f57d8f6cb Mon Sep 17 00:00:00 2001 +From: Mark Dufour +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 + diff --git a/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch b/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch new file mode 100644 index 0000000..990bd40 --- /dev/null +++ b/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch @@ -0,0 +1,36 @@ +From 9825fcbab5c4ddd867432f9922bebfbec7b78af0 Mon Sep 17 00:00:00 2001 +From: Mark Dufour +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 + diff --git a/swig-3.0.12-Coverity-fix-issue-reported-for-wrapper-argument-che.patch b/swig-3.0.12-Coverity-fix-issue-reported-for-wrapper-argument-che.patch new file mode 100644 index 0000000..d0fe997 --- /dev/null +++ b/swig-3.0.12-Coverity-fix-issue-reported-for-wrapper-argument-che.patch @@ -0,0 +1,41 @@ +From 13eeebd2fb3005abc876957c68bde6a92510aa44 Mon Sep 17 00:00:00 2001 +From: Mark Dufour +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 + diff --git a/swig-3.0.12-Fix-Coverity-issue-reported-for-setslice-pycontainer.patch b/swig-3.0.12-Fix-Coverity-issue-reported-for-setslice-pycontainer.patch new file mode 100644 index 0000000..041619e --- /dev/null +++ b/swig-3.0.12-Fix-Coverity-issue-reported-for-setslice-pycontainer.patch @@ -0,0 +1,40 @@ +From 5803e81d488e97623fe29b8629b977be01a8229e Mon Sep 17 00:00:00 2001 +From: Mark Dufour +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; rcend(); ++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; rcrend(); ++rc) { + *it++ = *isit++; + for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c) + it++; +-- +2.14.3 + diff --git a/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch b/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch new file mode 100644 index 0000000..7198c21 --- /dev/null +++ b/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch @@ -0,0 +1,191 @@ +From 90ba174fcea1618af57aa594199541d47a89b7f6 Mon Sep 17 00:00:00 2001 +From: William S Fulton +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 + diff --git a/swig-3.0.12-Fix-go-version-matching-in-configure-for-go1.10.patch b/swig-3.0.12-Fix-go-version-matching-in-configure-for-go1.10.patch new file mode 100644 index 0000000..69e22dd --- /dev/null +++ b/swig-3.0.12-Fix-go-version-matching-in-configure-for-go1.10.patch @@ -0,0 +1,51 @@ +From 5f6012039abb6ec9e9dfea801effa6b02fd102bc Mon Sep 17 00:00:00 2001 +From: Vsevolod Kvachev +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 + diff --git a/swig-3.0.12-Fix-testsuite-to-work-without-.-in-INC.patch b/swig-3.0.12-Fix-testsuite-to-work-without-.-in-INC.patch new file mode 100644 index 0000000..bcc8a79 --- /dev/null +++ b/swig-3.0.12-Fix-testsuite-to-work-without-.-in-INC.patch @@ -0,0 +1,61 @@ +From 8855ef2b482c09da9255079b0fac92d08c8308fb Mon Sep 17 00:00:00 2001 +From: Olly Betts +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 + diff --git a/swig-3.0.12-Fix-type-promotion-wrapping-some-non-trivial-constan.patch b/swig-3.0.12-Fix-type-promotion-wrapping-some-non-trivial-constan.patch new file mode 100644 index 0000000..4be4f2f --- /dev/null +++ b/swig-3.0.12-Fix-type-promotion-wrapping-some-non-trivial-constan.patch @@ -0,0 +1,185 @@ +From 9e2a12416cf6ce7b926829aff353fe2d9019f135 Mon Sep 17 00:00:00 2001 +From: William S Fulton +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 + diff --git a/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch b/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch new file mode 100644 index 0000000..b293d2f --- /dev/null +++ b/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch @@ -0,0 +1,82 @@ +From b7dedecfdd708c5323addc1b28e16cc727e01980 Mon Sep 17 00:00:00 2001 +From: Olly Betts +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 @@ ++ +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 + diff --git a/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch b/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch new file mode 100644 index 0000000..1cc5e91 --- /dev/null +++ b/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch @@ -0,0 +1,101 @@ +From 2e7da86b2ced479e48741cc8713479dee426be61 Mon Sep 17 00:00:00 2001 +From: Olly Betts +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 @@ ++ ++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 + diff --git a/swig-4.0.2-Improve-PHP-object-creation.patch b/swig-4.0.2-Improve-PHP-object-creation.patch new file mode 100644 index 0000000..2239053 --- /dev/null +++ b/swig-4.0.2-Improve-PHP-object-creation.patch @@ -0,0 +1,82 @@ +From 71475b0af9677deeaf6fe55c0c5f53fec9f730d2 Mon Sep 17 00:00:00 2001 +From: Olly Betts +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 + diff --git a/swig-4.0.2-Support-PHP8.patch b/swig-4.0.2-Support-PHP8.patch new file mode 100644 index 0000000..56e9831 --- /dev/null +++ b/swig-4.0.2-Support-PHP8.patch @@ -0,0 +1,409 @@ +From 3584c7d49cb598ce79d5e285d6c17b2dedfe3ecb Mon Sep 17 00:00:00 2001 +From: Olly Betts +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 @@

32 SWIG and PHP

+ +

+ 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. +

+ +

+-Currently any PHP7 release should work. ++Currently any PHP7 or PHP8 release should work. +

+ +

+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 @@

11.3 Conditional Compilation5.1 Running SWIG

+ -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 +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 +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 @@

11.3 Conditional Compilation +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. diff --git a/swig-Upgrade-to-support-newer-NodeJS.patch b/swig-Upgrade-to-support-newer-NodeJS.patch new file mode 100644 index 0000000..e3338ef --- /dev/null +++ b/swig-Upgrade-to-support-newer-NodeJS.patch @@ -0,0 +1,1863 @@ +From 5e1bdcfd6e5bd8353993433bd0efb4a3cb3ca639 Mon Sep 17 00:00:00 2001 +From: Alexandre Lissy +Date: Thu, 25 Apr 2019 12:29:19 +0200 +Subject: [PATCH] Upgrade SWIG to support NodeJS v12, v13 / V8 v7.6, v7.8 + runtime + +--- + .travis.yml | 35 ++++++++ + Examples/test-suite/javascript/Makefile.in | 15 +++- + .../javascript/abstract_access_runme.js | 4 +- + .../javascript/abstract_inherit_runme.js | 4 +- + .../javascript/abstract_typedef2_runme.js | 4 +- + .../javascript/abstract_typedef_runme.js | 4 +- + .../javascript/abstract_virtual_runme.js | 4 +- + .../javascript/array_member_runme.js | 4 +- + .../javascript/arrays_global_runme.js | 4 +- + .../test-suite/javascript/callback_runme.js | 4 +- + .../javascript/char_binary_runme.js | 4 +- + .../javascript/char_strings_runme.js | 4 +- + .../javascript/class_ignore_runme.js | 4 +- + .../javascript/class_scope_weird_runme.js | 4 +- + .../javascript/complextest_runme.js | 4 +- + .../test-suite/javascript/constover_runme.js | 4 +- + .../javascript/constructor_copy_runme.js | 4 +- + ...cpp11_strongly_typed_enumerations_runme.js | 4 +- + .../test-suite/javascript/cpp_enum_runme.js | 4 +- + .../javascript/cpp_namespace_runme.js | 4 +- + .../test-suite/javascript/cpp_static_runme.js | 4 +- + .../javascript/director_alternating_runme.js | 4 +- + .../test-suite/javascript/disown_runme.js | 4 +- + .../javascript/dynamic_cast_runme.js | 4 +- + .../test-suite/javascript/empty_c_runme.js | 4 +- + Examples/test-suite/javascript/empty_runme.js | 3 +- + .../javascript/enum_template_runme.js | 4 +- + .../test-suite/javascript/infinity_runme.js | 4 +- + .../namespace_virtual_method_runme.js | 4 +- + .../javascript/native_directive_runme.js | 4 +- + .../javascript/nspace_extend_runme.js | 4 +- + .../test-suite/javascript/nspace_runme.js | 4 +- + .../javascript/null_pointer_runme.js | 4 +- + .../javascript/overload_copy_runme.js | 4 +- + .../javascript/overload_null_runme.js | 4 +- + .../javascript/preproc_include_runme.js | 4 +- + .../test-suite/javascript/preproc_runme.js | 4 +- + .../test-suite/javascript/rename1_runme.js | 4 +- + .../test-suite/javascript/rename2_runme.js | 4 +- + .../test-suite/javascript/rename3_runme.js | 4 +- + .../test-suite/javascript/rename4_runme.js | 4 +- + .../javascript/rename_scope_runme.js | 4 +- + .../javascript/rename_simple_runme.js | 4 +- + .../javascript/ret_by_value_runme.js | 4 +- + .../javascript/string_simple_runme.js | 4 +- + .../javascript/struct_value_runme.js | 4 +- + .../javascript/swig_exception_runme.js | 4 +- + .../javascript/template_static_runme.js | 4 +- + .../javascript/typedef_class_runme.js | 4 +- + .../javascript/typedef_inherit_runme.js | 4 +- + .../javascript/typedef_scope_runme.js | 4 +- + .../javascript/typemap_arrays_runme.js | 4 +- + .../javascript/typemap_delete_runme.js | 4 +- + .../javascript/typemap_namespace_runme.js | 4 +- + .../javascript/typemap_ns_using_runme.js | 4 +- + .../test-suite/javascript/using1_runme.js | 4 +- + .../test-suite/javascript/using2_runme.js | 4 +- + .../test-suite/javascript/varargs_runme.js | 4 +- + Lib/javascript/v8/javascriptcode.swg | 30 ++++--- + Lib/javascript/v8/javascriptcomplex.swg | 10 +-- + Lib/javascript/v8/javascripthelpers.swg | 26 +++--- + Lib/javascript/v8/javascriptinit.swg | 4 +- + Lib/javascript/v8/javascriptprimtypes.swg | 28 +++---- + Lib/javascript/v8/javascriptrun.swg | 80 +++++++++++++------ + Lib/javascript/v8/javascriptruntime.swg | 5 ++ + Lib/javascript/v8/javascriptstrings.swg | 10 +-- + Lib/javascript/v8/javascripttypemaps.swg | 2 +- + Source/Modules/javascript.cxx | 4 +- + Tools/javascript/v8_shell.cxx | 18 ++--- + Tools/testflags.py | 5 +- + Tools/travis-linux-install.sh | 7 +- + 71 files changed, 358 insertions(+), 144 deletions(-) + +diff --git a/.travis.yml b/.travis.yml +index 32c6656dd2..a53da19f68 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -112,6 +112,41 @@ matrix: + env: SWIGLANG=javascript ENGINE=node VER=10 CPP11=1 + sudo: required + dist: xenial ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=javascript ENGINE=node VER=12.8.1 CPP11=1 ++ sudo: required ++ dist: xenial ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=javascript ENGINE=node VER=12.10.0 CPP11=1 ++ sudo: required ++ dist: xenial ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=javascript ENGINE=node VER=12.14.1 CPP11=1 ++ sudo: required ++ dist: xenial ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=javascript ENGINE=node VER=13.1.0 CPP11=1 ++ sudo: required ++ dist: xenial ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=javascript ENGINE=node VER=13.6.0 CPP11=1 ++ sudo: required ++ dist: xenial ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=javascript ENGINE=electron VER=12.14.1 ELECTRON_VER=7.0.1 CPP11=1 ++ sudo: required ++ dist: xenial ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=javascript ENGINE=electron VER=12.14.1 ELECTRON_VER=7.1.8 CPP11=1 ++ sudo: required ++ dist: xenial + - compiler: gcc + os: linux + env: SWIGLANG=javascript ENGINE=jsc +diff --git a/Examples/test-suite/javascript/Makefile.in b/Examples/test-suite/javascript/Makefile.in +index 8127415f12..b780a9e9cf 100644 +--- a/Examples/test-suite/javascript/Makefile.in ++++ b/Examples/test-suite/javascript/Makefile.in +@@ -16,6 +16,17 @@ top_builddir = @top_builddir@ + SWIGEXE = $(top_builddir)/swig + SWIG_LIB_DIR = $(top_srcdir)/Lib + ++ifeq (electron, $(ENGINE)) ++NODE_DISTURL = --disturl=https://electronjs.org/headers ++NODE_RUNTIME = --runtime=electron ++NODE_ABI_TARGET = --target=${ELECTRON_VER} ++ENGINE = ++NODEJS = electron ++else ++NODE_DISTURL = ++NODE_RUNTIME = ++endif ++ + ifneq (, $(ENGINE)) + JSENGINE=$(ENGINE) + else +@@ -66,14 +77,14 @@ ifeq (node,$(JSENGINE)) + $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' \ + SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \ + SWIGOPT='-javascript $(SWIGOPT) -o $*_wrap.cxx $(srcdir)/../$*.i' swiginvoke && \ +- MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null ++ MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) $(NODE_ABI_TARGET) $(NODE_DISTURL) $(NODE_RUNTIME) --loglevel=silent --directory $* configure build 1>>/dev/null + + swig_and_compile_cpp = \ + $(setup_node) && \ + $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' \ + SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \ + SWIGOPT='-c++ -javascript $(SWIGOPT) $(srcdir)/../$*.i' swiginvoke && \ +- MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) --loglevel=silent --directory $* configure build 1>>/dev/null ++ MAKEFLAGS= $(COMPILETOOL) $(NODEGYP) $(NODE_ABI_TARGET) $(NODE_DISTURL) $(NODE_RUNTIME) --loglevel=silent --directory $* configure build 1>>/dev/null + + run_testcase = \ + if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \ +diff --git a/Examples/test-suite/javascript/abstract_access_runme.js b/Examples/test-suite/javascript/abstract_access_runme.js +index f61bb4358b..b2b5e95fb4 100644 +--- a/Examples/test-suite/javascript/abstract_access_runme.js ++++ b/Examples/test-suite/javascript/abstract_access_runme.js +@@ -1,6 +1,8 @@ +-var abstract_access = require("abstract_access"); ++var abstract_access = require("./abstract_access"); + + var d = new abstract_access.D() + if (d.do_x() != 1) { + throw "Error"; + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/abstract_inherit_runme.js b/Examples/test-suite/javascript/abstract_inherit_runme.js +index f732e87673..6f58400373 100644 +--- a/Examples/test-suite/javascript/abstract_inherit_runme.js ++++ b/Examples/test-suite/javascript/abstract_inherit_runme.js +@@ -1,4 +1,4 @@ +-var abstract_inherit = require("abstract_inherit"); ++var abstract_inherit = require("./abstract_inherit"); + + // Shouldn't be able to instantiate any of these classes + // since none of them implements the pure virtual function +@@ -38,3 +38,5 @@ try { + if (!caughtException) { + throw new Error("Spam should be instantiated as it is abstract"); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/abstract_typedef2_runme.js b/Examples/test-suite/javascript/abstract_typedef2_runme.js +index d8a533ab1d..f1c293818d 100644 +--- a/Examples/test-suite/javascript/abstract_typedef2_runme.js ++++ b/Examples/test-suite/javascript/abstract_typedef2_runme.js +@@ -1,6 +1,8 @@ +-var abstract_typedef2 = require("abstract_typedef2"); ++var abstract_typedef2 = require("./abstract_typedef2"); + + var a = new abstract_typedef2.A_UF(); + + if (a == undefined) + throw "Error"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/abstract_typedef_runme.js b/Examples/test-suite/javascript/abstract_typedef_runme.js +index 286328fa8c..09b271218c 100644 +--- a/Examples/test-suite/javascript/abstract_typedef_runme.js ++++ b/Examples/test-suite/javascript/abstract_typedef_runme.js +@@ -1,4 +1,4 @@ +-var abstract_typedef = require("abstract_typedef"); ++var abstract_typedef = require("./abstract_typedef"); + + var e = new abstract_typedef.Engine(); + var a = new abstract_typedef.A() +@@ -6,3 +6,5 @@ var a = new abstract_typedef.A() + if (a.write(e) != 1) { + throw "Error"; + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/abstract_virtual_runme.js b/Examples/test-suite/javascript/abstract_virtual_runme.js +index 9a9ce99885..f0d505d922 100644 +--- a/Examples/test-suite/javascript/abstract_virtual_runme.js ++++ b/Examples/test-suite/javascript/abstract_virtual_runme.js +@@ -1,4 +1,4 @@ +-var abstract_virtual = require("abstract_virtual"); ++var abstract_virtual = require("./abstract_virtual"); + + d = new abstract_virtual.D() + +@@ -9,3 +9,5 @@ e = new abstract_virtual.E() + + if (e == undefined) + throw "Error"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/array_member_runme.js b/Examples/test-suite/javascript/array_member_runme.js +index 3d9bb0e5b3..64d158df59 100644 +--- a/Examples/test-suite/javascript/array_member_runme.js ++++ b/Examples/test-suite/javascript/array_member_runme.js +@@ -1,4 +1,4 @@ +-var array_member = require("array_member"); ++var array_member = require("./array_member"); + + var f = new array_member.Foo(); + f.data = array_member.global_data; +@@ -20,3 +20,5 @@ for (var i=0; i<8; i++){ + throw "Bad array assignment (2)"; + } + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/arrays_global_runme.js b/Examples/test-suite/javascript/arrays_global_runme.js +index 0cbb28efba..db4ac20526 100644 +--- a/Examples/test-suite/javascript/arrays_global_runme.js ++++ b/Examples/test-suite/javascript/arrays_global_runme.js +@@ -1,4 +1,4 @@ +-var arrays_global = require("arrays_global"); ++var arrays_global = require("./arrays_global"); + + arrays_global.array_i = arrays_global.array_const_i; + +@@ -16,3 +16,5 @@ arrays_global.BeginString_FIX44f; + arrays_global.test_a("hello","hi","chello","chi"); + + arrays_global.test_b("1234567","hi"); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/callback_runme.js b/Examples/test-suite/javascript/callback_runme.js +index 0218886419..aa22cd21fd 100644 +--- a/Examples/test-suite/javascript/callback_runme.js ++++ b/Examples/test-suite/javascript/callback_runme.js +@@ -1,4 +1,4 @@ +-var callback = require("callback"); ++var callback = require("./callback"); + + if (callback.foo(2) !== 2) { + throw new Error("Failed."); +@@ -28,3 +28,5 @@ var a = new callback.A(); + if (callback.foobarm(3, a, callback.A.foom_cb_ptr) != a.foom(3)) { + throw new Error("Failed."); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/char_binary_runme.js b/Examples/test-suite/javascript/char_binary_runme.js +index 01b72ebe14..8b7e400349 100644 +--- a/Examples/test-suite/javascript/char_binary_runme.js ++++ b/Examples/test-suite/javascript/char_binary_runme.js +@@ -1,4 +1,4 @@ +-var char_binary = require("char_binary"); ++var char_binary = require("./char_binary"); + + var t = new char_binary.Test(); + if (t.strlen('hile') != 4) { +@@ -46,3 +46,5 @@ if (char_binary.var_namet != "hola") { + throw("bad pointer case (2)"); + } + char_binary.delete_pchar(pc); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/char_strings_runme.js b/Examples/test-suite/javascript/char_strings_runme.js +index fe17cb9827..0cbe81e542 100644 +--- a/Examples/test-suite/javascript/char_strings_runme.js ++++ b/Examples/test-suite/javascript/char_strings_runme.js +@@ -1,4 +1,4 @@ +-var char_strings = require("char_strings"); ++var char_strings = require("./char_strings"); + + var assertIsEqual = function(expected, actual) { + if (expected !== actual) { +@@ -9,3 +9,5 @@ var assertIsEqual = function(expected, actual) { + assertIsEqual("hi there", char_strings.CharPingPong("hi there")); + assertIsEqual("hi there", char_strings.CharArrayPingPong("hi there")); + assertIsEqual("hi there", char_strings.CharArrayDimsPingPong("hi there")); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/class_ignore_runme.js b/Examples/test-suite/javascript/class_ignore_runme.js +index ffbe021c71..938a19fc8d 100644 +--- a/Examples/test-suite/javascript/class_ignore_runme.js ++++ b/Examples/test-suite/javascript/class_ignore_runme.js +@@ -1,6 +1,8 @@ +-var class_ignore = require("class_ignore"); ++var class_ignore = require("./class_ignore"); + + a = new class_ignore.Bar(); + + if (class_ignore.do_blah(a) != "Bar::blah") + throw "Error"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/class_scope_weird_runme.js b/Examples/test-suite/javascript/class_scope_weird_runme.js +index 73c118d617..325fefbac5 100644 +--- a/Examples/test-suite/javascript/class_scope_weird_runme.js ++++ b/Examples/test-suite/javascript/class_scope_weird_runme.js +@@ -1,6 +1,8 @@ +-var class_scope_weird = require("class_scope_weird"); ++var class_scope_weird = require("./class_scope_weird"); + + f = new class_scope_weird.Foo(); + g = new class_scope_weird.Foo(3); + if (f.bar(3) != 3) + throw RuntimeError; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/complextest_runme.js b/Examples/test-suite/javascript/complextest_runme.js +index 1d9825f3b2..7e3e3e984b 100644 +--- a/Examples/test-suite/javascript/complextest_runme.js ++++ b/Examples/test-suite/javascript/complextest_runme.js +@@ -1,4 +1,4 @@ +-var complextest = require("complextest"); ++var complextest = require("./complextest"); + + a = [-1,2]; + +@@ -29,3 +29,5 @@ v.add(1); + // TODO: how to check validity? + complextest.CopyHalf(v); + complextest.CopyHalfRef(v); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/constover_runme.js b/Examples/test-suite/javascript/constover_runme.js +index 9b192b5ff7..bae3344072 100644 +--- a/Examples/test-suite/javascript/constover_runme.js ++++ b/Examples/test-suite/javascript/constover_runme.js +@@ -1,4 +1,4 @@ +-var constover = require("constover"); ++var constover = require("./constover"); + + p = constover.test("test"); + if (p != "test") { +@@ -31,3 +31,5 @@ p = f.test_pconstm("test"); + if (p != "test_pconstmethod") { + throw "member-test_pconstm failed!"; + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/constructor_copy_runme.js b/Examples/test-suite/javascript/constructor_copy_runme.js +index 179b9fb406..0d811470f1 100644 +--- a/Examples/test-suite/javascript/constructor_copy_runme.js ++++ b/Examples/test-suite/javascript/constructor_copy_runme.js +@@ -1,4 +1,4 @@ +-var constructor_copy = require("constructor_copy"); ++var constructor_copy = require("./constructor_copy"); + + f1 = new constructor_copy.Foo1(3); + f11 = new constructor_copy.Foo1(f1); +@@ -40,3 +40,5 @@ try { + if (good == 0) { + throw "Error: should not allow calling copy ctor for Bard"; + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js b/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js +index ad9d4e8833..241e38b768 100644 +--- a/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js ++++ b/Examples/test-suite/javascript/cpp11_strongly_typed_enumerations_runme.js +@@ -1,4 +1,4 @@ +-var cpp11_strongly_typed_enumerations = require("cpp11_strongly_typed_enumerations"); ++var cpp11_strongly_typed_enumerations = require("./cpp11_strongly_typed_enumerations"); + + function enumCheck(actual, expected) { + if (actual != expected) { +@@ -163,3 +163,5 @@ enumCheck(class1.class1Test2(cpp11_strongly_typed_enumerations.Class1.Enum12_Val + enumCheck(cpp11_strongly_typed_enumerations.globalTest1(cpp11_strongly_typed_enumerations.Enum1_Val5a), 13); + enumCheck(cpp11_strongly_typed_enumerations.globalTest2(cpp11_strongly_typed_enumerations.Class1.Enum12_Val5c), 1121); + //enumCheck(globalTest3(cpp11_strongly_typed_enumerations.Class1.Struct1_Enum12_Val5f), 3121); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/cpp_enum_runme.js b/Examples/test-suite/javascript/cpp_enum_runme.js +index 8a248c372a..990f703c39 100644 +--- a/Examples/test-suite/javascript/cpp_enum_runme.js ++++ b/Examples/test-suite/javascript/cpp_enum_runme.js +@@ -1,4 +1,4 @@ +-var cpp_enum = require("cpp_enum"); ++var cpp_enum = require("./cpp_enum"); + + var f = new cpp_enum.Foo() + +@@ -26,3 +26,5 @@ if(cpp_enum.Foo.hi != cpp_enum.Hello){ + throw "Error"; + } + ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/cpp_namespace_runme.js b/Examples/test-suite/javascript/cpp_namespace_runme.js +index a6ab799646..69e74ae4ed 100644 +--- a/Examples/test-suite/javascript/cpp_namespace_runme.js ++++ b/Examples/test-suite/javascript/cpp_namespace_runme.js +@@ -1,4 +1,4 @@ +-var cpp_namespace = require("cpp_namespace"); ++var cpp_namespace = require("./cpp_namespace"); + + var n = cpp_namespace.fact(4); + if (n != 24){ +@@ -45,3 +45,5 @@ if (cpp_namespace.do_method3(t4,40) != "Test4::method"){ + if (cpp_namespace.do_method3(t5,40) != "Test5::method"){ + throw ("Bad return value error!"); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/cpp_static_runme.js b/Examples/test-suite/javascript/cpp_static_runme.js +index c7917e12ea..e78b7016bd 100644 +--- a/Examples/test-suite/javascript/cpp_static_runme.js ++++ b/Examples/test-suite/javascript/cpp_static_runme.js +@@ -1,4 +1,4 @@ +-var cpp_static = require("cpp_static"); ++var cpp_static = require("./cpp_static"); + + cpp_static.StaticFunctionTest.static_func(); + cpp_static.StaticFunctionTest.static_func_2(1); +@@ -7,3 +7,5 @@ cpp_static.StaticMemberTest.static_int = 10; + if (cpp_static.StaticMemberTest.static_int != 10) + throw "error"; + ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/director_alternating_runme.js b/Examples/test-suite/javascript/director_alternating_runme.js +index cff288d35c..40da25af0c 100644 +--- a/Examples/test-suite/javascript/director_alternating_runme.js ++++ b/Examples/test-suite/javascript/director_alternating_runme.js +@@ -1,5 +1,7 @@ +-var director_alternating = require("director_alternating"); ++var director_alternating = require("./director_alternating"); + + id = director_alternating.getBar().id(); + if (id != director_alternating.idFromGetBar()) + throw ("Error, Got wrong id: " + str(id)); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/disown_runme.js b/Examples/test-suite/javascript/disown_runme.js +index ea742b51e5..1950a2fb6c 100644 +--- a/Examples/test-suite/javascript/disown_runme.js ++++ b/Examples/test-suite/javascript/disown_runme.js +@@ -1,4 +1,4 @@ +-var disown = require("disown"); ++var disown = require("./disown"); + + var a = new disown.A(); + var tmp = a.thisown; +@@ -20,3 +20,5 @@ b.acquire(a); + if (a.thisown) { + throw new Error("Failed."); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/dynamic_cast_runme.js b/Examples/test-suite/javascript/dynamic_cast_runme.js +index 32eabcf8b0..b807a93ca2 100644 +--- a/Examples/test-suite/javascript/dynamic_cast_runme.js ++++ b/Examples/test-suite/javascript/dynamic_cast_runme.js +@@ -1,4 +1,4 @@ +-var dynamic_cast = require("dynamic_cast"); ++var dynamic_cast = require("./dynamic_cast"); + + var f = new dynamic_cast.Foo(); + var b = new dynamic_cast.Bar(); +@@ -10,3 +10,5 @@ var a = dynamic_cast.do_test(y); + if (a != "Bar::test") { + throw new Error("Failed."); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/empty_c_runme.js b/Examples/test-suite/javascript/empty_c_runme.js +index 1cc22e4ce7..61d57853bf 100644 +--- a/Examples/test-suite/javascript/empty_c_runme.js ++++ b/Examples/test-suite/javascript/empty_c_runme.js +@@ -1 +1,3 @@ +-var empty_c = require("empty_c"); ++var empty_c = require("./empty_c"); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/empty_runme.js b/Examples/test-suite/javascript/empty_runme.js +index 7894379bee..a16eed15a1 100644 +--- a/Examples/test-suite/javascript/empty_runme.js ++++ b/Examples/test-suite/javascript/empty_runme.js +@@ -1 +1,2 @@ +-var empty = require("empty"); +\ No newline at end of file ++var empty = require("./empty"); ++process.exit(0); +diff --git a/Examples/test-suite/javascript/enum_template_runme.js b/Examples/test-suite/javascript/enum_template_runme.js +index 1e71e5f640..c44b813644 100644 +--- a/Examples/test-suite/javascript/enum_template_runme.js ++++ b/Examples/test-suite/javascript/enum_template_runme.js +@@ -1,4 +1,4 @@ +-var enum_template = require("enum_template"); ++var enum_template = require("./enum_template"); + + if (enum_template.MakeETest() != 1) + throw "RuntimeError"; +@@ -6,3 +6,5 @@ if (enum_template.MakeETest() != 1) + if (enum_template.TakeETest(0) != null) + throw "RuntimeError"; + ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/infinity_runme.js b/Examples/test-suite/javascript/infinity_runme.js +index 8ebe496a6b..4bef97a1c1 100644 +--- a/Examples/test-suite/javascript/infinity_runme.js ++++ b/Examples/test-suite/javascript/infinity_runme.js +@@ -1,5 +1,7 @@ +-var infinity = require("infinity"); ++var infinity = require("./infinity"); + + infinity.initialise_MYINFINITY(); + var my_infinity = infinity.INFINITY; + var ret_val = infinity.use_infinity(my_infinity); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/namespace_virtual_method_runme.js b/Examples/test-suite/javascript/namespace_virtual_method_runme.js +index 4f1e05c848..9dfe33a3ea 100644 +--- a/Examples/test-suite/javascript/namespace_virtual_method_runme.js ++++ b/Examples/test-suite/javascript/namespace_virtual_method_runme.js +@@ -1,3 +1,5 @@ +-var namespace_virtual_method = require("namespace_virtual_method"); ++var namespace_virtual_method = require("./namespace_virtual_method"); + + x = new namespace_virtual_method.Spam(); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/native_directive_runme.js b/Examples/test-suite/javascript/native_directive_runme.js +index 5c1d69cf17..c7573cf7d8 100644 +--- a/Examples/test-suite/javascript/native_directive_runme.js ++++ b/Examples/test-suite/javascript/native_directive_runme.js +@@ -1,4 +1,4 @@ +-var native_directive = require("native_directive"); ++var native_directive = require("./native_directive"); + + (function main() { + var s = "abc.DEF-123"; +@@ -7,3 +7,5 @@ var native_directive = require("native_directive"); + if (native_directive.CountAlphaCharacters(s) !== 6) + throw "CountAlphaCharacters failed"; + })(); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/nspace_extend_runme.js b/Examples/test-suite/javascript/nspace_extend_runme.js +index 8cabfe9457..b7daf883a9 100644 +--- a/Examples/test-suite/javascript/nspace_extend_runme.js ++++ b/Examples/test-suite/javascript/nspace_extend_runme.js +@@ -1,4 +1,4 @@ +-var nspace_extend = require("nspace_extend"); ++var nspace_extend = require("./nspace_extend"); + + // constructors and destructors + var color1 = new nspace_extend.Outer.Inner1.Color(); +@@ -25,3 +25,5 @@ created = nspace_extend.Outer.Inner2.Color.create(); + var col1 = new nspace_extend.Outer.Inner1.Color(); + var col2 = nspace_extend.Outer.Inner2.Color.create(); + col2.colors(col1, col1, col2, col2, col2); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/nspace_runme.js b/Examples/test-suite/javascript/nspace_runme.js +index 993610dd62..5402b13af9 100644 +--- a/Examples/test-suite/javascript/nspace_runme.js ++++ b/Examples/test-suite/javascript/nspace_runme.js +@@ -1,4 +1,4 @@ +-var nspace = require("nspace"); ++var nspace = require("./nspace"); + + var color1 = new nspace.Outer.Inner1.Color(); + var color = new nspace.Outer.Inner1.Color(color1); +@@ -74,3 +74,5 @@ var blue3 = new nspace.Outer.Inner3.Blue(); + blue3.blueInstanceMethod(); + var blue4 = new nspace.Outer.Inner4.Blue(); + blue4.blueInstanceMethod(); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/null_pointer_runme.js b/Examples/test-suite/javascript/null_pointer_runme.js +index 8a9b611867..25d1e535f4 100644 +--- a/Examples/test-suite/javascript/null_pointer_runme.js ++++ b/Examples/test-suite/javascript/null_pointer_runme.js +@@ -1,4 +1,4 @@ +-var null_pointer = require("null_pointer"); ++var null_pointer = require("./null_pointer"); + + if (!null_pointer.funk(null)) { + throw new Error("Javascript 'null' should be converted into NULL."); +@@ -7,3 +7,5 @@ if (!null_pointer.funk(null)) { + if (null_pointer.getnull() != null) { + throw new Error("NULL should be converted into Javascript 'null'."); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/overload_copy_runme.js b/Examples/test-suite/javascript/overload_copy_runme.js +index e2f6107884..a1e1459317 100644 +--- a/Examples/test-suite/javascript/overload_copy_runme.js ++++ b/Examples/test-suite/javascript/overload_copy_runme.js +@@ -1,4 +1,6 @@ +-var overload_copy = require("overload_copy"); ++var overload_copy = require("./overload_copy"); + + f = new overload_copy.Foo(); + g = new overload_copy.Foo(f); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/overload_null_runme.js b/Examples/test-suite/javascript/overload_null_runme.js +index f1e35cac76..74d855248e 100644 +--- a/Examples/test-suite/javascript/overload_null_runme.js ++++ b/Examples/test-suite/javascript/overload_null_runme.js +@@ -1,6 +1,6 @@ + // There are no typecheck typemaps in Javascript yet, so most of this test + // does not actually worked - the check functions have thus been commented out. +-var overload_null = require("overload_null"); ++var overload_null = require("./overload_null"); + + var check = function(expected, actual) { + if (expected !== actual) { +@@ -47,3 +47,5 @@ check(20, o.byval2forwardptr(x)); + check(21, o.byval1forwardref(x)); + + check(22, o.byval2forwardref(x)); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/preproc_include_runme.js b/Examples/test-suite/javascript/preproc_include_runme.js +index 5ec72b842d..8d4e8601f6 100644 +--- a/Examples/test-suite/javascript/preproc_include_runme.js ++++ b/Examples/test-suite/javascript/preproc_include_runme.js +@@ -1,4 +1,4 @@ +-var preproc_include = require("preproc_include"); ++var preproc_include = require("./preproc_include"); + + if (preproc_include.multiply10(10) != 100) + throw "RuntimeError"; +@@ -21,3 +21,5 @@ if (preproc_include.multiply60(10) != 600) + if (preproc_include.multiply70(10) != 700) + throw "RuntimeError"; + ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/preproc_runme.js b/Examples/test-suite/javascript/preproc_runme.js +index 167ca5ac1c..15e026d8a6 100644 +--- a/Examples/test-suite/javascript/preproc_runme.js ++++ b/Examples/test-suite/javascript/preproc_runme.js +@@ -1,4 +1,4 @@ +-var preproc = require("preproc"); ++var preproc = require("./preproc"); + + if (preproc.endif != 1) + throw "RuntimeError"; +@@ -12,3 +12,5 @@ if (preproc.defined != 1) + if (2*preproc.one != preproc.two) + throw "RuntimeError"; + ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/rename1_runme.js b/Examples/test-suite/javascript/rename1_runme.js +index 7b2ac37b6d..4741673c90 100644 +--- a/Examples/test-suite/javascript/rename1_runme.js ++++ b/Examples/test-suite/javascript/rename1_runme.js +@@ -1,4 +1,4 @@ +-var rename = require("rename1"); ++var rename = require("./rename1"); + + function part1() { + var xyz = new rename.XYZInt(); +@@ -62,3 +62,5 @@ part2(); + part3(); + part4(); + part5(); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/rename2_runme.js b/Examples/test-suite/javascript/rename2_runme.js +index 040c798bb5..6f6a7d3814 100644 +--- a/Examples/test-suite/javascript/rename2_runme.js ++++ b/Examples/test-suite/javascript/rename2_runme.js +@@ -1,4 +1,4 @@ +-var rename = require("rename2"); ++var rename = require("./rename2"); + + function part1() { + var xyz = new rename.XYZInt(); +@@ -62,3 +62,5 @@ part2(); + part3(); + part4(); + part5(); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/rename3_runme.js b/Examples/test-suite/javascript/rename3_runme.js +index fb9393b037..fcac4dfe02 100644 +--- a/Examples/test-suite/javascript/rename3_runme.js ++++ b/Examples/test-suite/javascript/rename3_runme.js +@@ -1,4 +1,4 @@ +-var rename = require("rename3"); ++var rename = require("./rename3"); + + function part1() { + var xyz = new rename.XYZInt(); +@@ -62,3 +62,5 @@ part2(); + part3(); + part4(); + part5(); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/rename4_runme.js b/Examples/test-suite/javascript/rename4_runme.js +index 1c3d8e77f5..9bf1c45a24 100644 +--- a/Examples/test-suite/javascript/rename4_runme.js ++++ b/Examples/test-suite/javascript/rename4_runme.js +@@ -1,4 +1,4 @@ +-var rename = require("rename4"); ++var rename = require("./rename4"); + + function part1() { + var xyz = new rename.XYZInt(); +@@ -62,3 +62,5 @@ part2(); + part3(); + part4(); + part5(); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/rename_scope_runme.js b/Examples/test-suite/javascript/rename_scope_runme.js +index fea4d2ca99..dffbcded7d 100644 +--- a/Examples/test-suite/javascript/rename_scope_runme.js ++++ b/Examples/test-suite/javascript/rename_scope_runme.js +@@ -1,4 +1,4 @@ +-var rename_scope = require("rename_scope"); ++var rename_scope = require("./rename_scope"); + + var a = new rename_scope.Natural_UP(); + var b = new rename_scope.Natural_BP(); +@@ -15,3 +15,5 @@ var f = rename_scope.equals; + if (f === undefined) { + throw new Error("Equality operator has not been renamed."); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/rename_simple_runme.js b/Examples/test-suite/javascript/rename_simple_runme.js +index 21350cd3ee..9d39f1a62e 100644 +--- a/Examples/test-suite/javascript/rename_simple_runme.js ++++ b/Examples/test-suite/javascript/rename_simple_runme.js +@@ -1,4 +1,4 @@ +-var rename_simple = require("rename_simple"); ++var rename_simple = require("./rename_simple"); + var NewStruct = rename_simple.NewStruct; + + var s = new NewStruct(); +@@ -48,3 +48,5 @@ rename_simple.NewGlobalVariable = 6666; + if (rename_simple.NewGlobalVariable !== 6666) { + throw new Error("rename_simple.NewGlobalVariable: Expected 6666, was " + rename_simple.NewGlobalVariable); + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/ret_by_value_runme.js b/Examples/test-suite/javascript/ret_by_value_runme.js +index 9d0840602a..e0eec07cf7 100644 +--- a/Examples/test-suite/javascript/ret_by_value_runme.js ++++ b/Examples/test-suite/javascript/ret_by_value_runme.js +@@ -1,4 +1,4 @@ +-var ret_by_value = require("ret_by_value"); ++var ret_by_value = require("./ret_by_value"); + + a = ret_by_value.get_test(); + if (a.myInt != 100) +@@ -6,3 +6,5 @@ if (a.myInt != 100) + + if (a.myShort != 200) + throw "RuntimeError"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/string_simple_runme.js b/Examples/test-suite/javascript/string_simple_runme.js +index 71fbb7bd07..21668fc05f 100644 +--- a/Examples/test-suite/javascript/string_simple_runme.js ++++ b/Examples/test-suite/javascript/string_simple_runme.js +@@ -1,4 +1,4 @@ +-var string_simple = require("string_simple"); ++var string_simple = require("./string_simple"); + + // Test unicode string + var str = "olé"; +@@ -8,3 +8,5 @@ var copy = string_simple.copy_str(str); + if (str !== copy) { + throw "Error: copy is not equal: original="+str+", copy="+copy; + } ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/struct_value_runme.js b/Examples/test-suite/javascript/struct_value_runme.js +index 5b171b8fed..d277481ed0 100644 +--- a/Examples/test-suite/javascript/struct_value_runme.js ++++ b/Examples/test-suite/javascript/struct_value_runme.js +@@ -1,4 +1,4 @@ +-var struct_value = require("struct_value"); ++var struct_value = require("./struct_value"); + + b = new struct_value.Bar(); + +@@ -9,3 +9,5 @@ throw "RuntimeError"; + b.b.x = 3; + if (b.b.x != 3) + throw "RuntimeError" ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/swig_exception_runme.js b/Examples/test-suite/javascript/swig_exception_runme.js +index 55435e9477..257dedc8fc 100644 +--- a/Examples/test-suite/javascript/swig_exception_runme.js ++++ b/Examples/test-suite/javascript/swig_exception_runme.js +@@ -1,4 +1,4 @@ +-var swig_exception = require("swig_exception"); ++var swig_exception = require("./swig_exception"); + + var c = new swig_exception.Circle(10); + var s = new swig_exception.Square(10); +@@ -28,3 +28,5 @@ if (swig_exception.Shape.nshapes != 0) { + throw "Shape.nshapes should be 0, actually " + swig_exception.Shape.nshapes; + } + */ ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/template_static_runme.js b/Examples/test-suite/javascript/template_static_runme.js +index d6106138ae..aa3e548b8d 100644 +--- a/Examples/test-suite/javascript/template_static_runme.js ++++ b/Examples/test-suite/javascript/template_static_runme.js +@@ -1,3 +1,5 @@ +-var template_static = require("template_static"); ++var template_static = require("./template_static"); + + template_static.Foo.bar_double(1); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/typedef_class_runme.js b/Examples/test-suite/javascript/typedef_class_runme.js +index 64e0051c37..5d6df5b6b7 100644 +--- a/Examples/test-suite/javascript/typedef_class_runme.js ++++ b/Examples/test-suite/javascript/typedef_class_runme.js +@@ -1,7 +1,9 @@ +-var typedef_class = require("typedef_class"); ++var typedef_class = require("./typedef_class"); + + a = new typedef_class.RealA(); + a.a = 3; + + b = new typedef_class.B(); + b.testA(a); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/typedef_inherit_runme.js b/Examples/test-suite/javascript/typedef_inherit_runme.js +index 7590e1e6ec..b13c59a030 100644 +--- a/Examples/test-suite/javascript/typedef_inherit_runme.js ++++ b/Examples/test-suite/javascript/typedef_inherit_runme.js +@@ -1,4 +1,4 @@ +-var typedef_inherit = require("typedef_inherit"); ++var typedef_inherit = require("./typedef_inherit"); + + a = new typedef_inherit.Foo(); + b = new typedef_inherit.Bar(); +@@ -21,3 +21,5 @@ if (x != "Spam::blah") + x = typedef_inherit.do_blah2(d); + if (x != "Grok::blah") + print ("Whoa! Bad return" + x); ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/typedef_scope_runme.js b/Examples/test-suite/javascript/typedef_scope_runme.js +index 5c1368ab78..e8b2a8255c 100644 +--- a/Examples/test-suite/javascript/typedef_scope_runme.js ++++ b/Examples/test-suite/javascript/typedef_scope_runme.js +@@ -1,4 +1,4 @@ +-var typedef_scope = require("typedef_scope"); ++var typedef_scope = require("./typedef_scope"); + + b = new typedef_scope.Bar(); + x = b.test1(42,"hello"); +@@ -10,3 +10,5 @@ if (x != "hello") + print("Failed!!"); + + ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/typemap_arrays_runme.js b/Examples/test-suite/javascript/typemap_arrays_runme.js +index 610ecdd9c7..c333f43930 100644 +--- a/Examples/test-suite/javascript/typemap_arrays_runme.js ++++ b/Examples/test-suite/javascript/typemap_arrays_runme.js +@@ -1,5 +1,7 @@ +-var typemap_arrays = require("typemap_arrays"); ++var typemap_arrays = require("./typemap_arrays"); + + if (typemap_arrays.sumA(null) != 60) + throw "RuntimeError, Sum is wrong"; + ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/typemap_delete_runme.js b/Examples/test-suite/javascript/typemap_delete_runme.js +index 1d42ce4daf..72252fe013 100644 +--- a/Examples/test-suite/javascript/typemap_delete_runme.js ++++ b/Examples/test-suite/javascript/typemap_delete_runme.js +@@ -1,5 +1,7 @@ +-var typemap_delete = require("typemap_delete"); ++var typemap_delete = require("./typemap_delete"); + + r = new typemap_delete.Rect(123); + if (r.val != 123) + throw "RuntimeError"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/typemap_namespace_runme.js b/Examples/test-suite/javascript/typemap_namespace_runme.js +index 2aa3580249..962e54afa4 100644 +--- a/Examples/test-suite/javascript/typemap_namespace_runme.js ++++ b/Examples/test-suite/javascript/typemap_namespace_runme.js +@@ -1,7 +1,9 @@ +-var typemap_namespace = require("typemap_namespace"); ++var typemap_namespace = require("./typemap_namespace"); + + if (typemap_namespace.test1("hello") != "hello") + throw "RuntimeError"; + + if (typemap_namespace.test2("hello") != "hello") + throw "RuntimeError"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/typemap_ns_using_runme.js b/Examples/test-suite/javascript/typemap_ns_using_runme.js +index 7e4019ab24..e97ea473c6 100644 +--- a/Examples/test-suite/javascript/typemap_ns_using_runme.js ++++ b/Examples/test-suite/javascript/typemap_ns_using_runme.js +@@ -1,4 +1,6 @@ +-var typemap_ns_using = require("typemap_ns_using"); ++var typemap_ns_using = require("./typemap_ns_using"); + + if (typemap_ns_using.spam(37) != 37) + throw "RuntimeError"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/using1_runme.js b/Examples/test-suite/javascript/using1_runme.js +index 2415156f08..68917b0156 100644 +--- a/Examples/test-suite/javascript/using1_runme.js ++++ b/Examples/test-suite/javascript/using1_runme.js +@@ -1,4 +1,6 @@ +-var using1 = require("using1"); ++var using1 = require("./using1"); + + if (using1.spam(37) != 37) + throw "RuntimeError"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/using2_runme.js b/Examples/test-suite/javascript/using2_runme.js +index 2ef08faca1..001f551403 100644 +--- a/Examples/test-suite/javascript/using2_runme.js ++++ b/Examples/test-suite/javascript/using2_runme.js +@@ -1,4 +1,6 @@ +-var using2 = require("using2"); ++var using2 = require("./using2"); + + if (using2.spam(37) != 37) + throw "RuntimeError"; ++ ++process.exit(0); +diff --git a/Examples/test-suite/javascript/varargs_runme.js b/Examples/test-suite/javascript/varargs_runme.js +index fc6d945c1a..66348f2983 100644 +--- a/Examples/test-suite/javascript/varargs_runme.js ++++ b/Examples/test-suite/javascript/varargs_runme.js +@@ -1,4 +1,4 @@ +-var varargs = require("varargs"); ++var varargs = require("./varargs"); + + if (varargs.test("Hello") != "Hello") { + throw new Error("Failed"); +@@ -42,3 +42,5 @@ try { + if (!thrown) { + throw new Error("Failed"); + } ++ ++process.exit(0); +diff --git a/Lib/javascript/v8/javascriptcode.swg b/Lib/javascript/v8/javascriptcode.swg +index c4aaf3db0c..c2aacc61a5 100644 +--- a/Lib/javascript/v8/javascriptcode.swg ++++ b/Lib/javascript/v8/javascriptcode.swg +@@ -11,7 +11,7 @@ + static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { + SWIGV8_HANDLESCOPE(); + +- v8::Handle self = args.Holder(); ++ v8::Local self = args.Holder(); + $jslocals + if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper."); + $jscode +@@ -53,7 +53,7 @@ static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { + SWIGV8_HANDLESCOPE(); + + OverloadErrorHandler errorHandler; +- v8::Handle self; ++ v8::Local self; + + // switch all cases by means of series of if-returns. + $jsdispatchcases +@@ -78,7 +78,7 @@ fail: + static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args, V8ErrorHandler &SWIGV8_ErrorHandler) { + SWIGV8_HANDLESCOPE(); + +- v8::Handle self = args.Holder(); ++ v8::Local self = args.Holder(); + $jslocals + if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper."); + $jscode +@@ -226,7 +226,7 @@ static SwigV8ReturnValue $jswrapper(v8::Local property, const SwigV8Pr + #endif + SWIGV8_HANDLESCOPE(); + +- v8::Handle jsresult; ++ v8::Local jsresult; + $jslocals + $jscode + SWIGV8_RETURN_INFO(jsresult, info); +@@ -271,7 +271,7 @@ fail: + static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { + SWIGV8_HANDLESCOPE(); + +- v8::Handle jsresult; ++ v8::Local jsresult; + $jslocals + if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper."); + +@@ -296,7 +296,7 @@ fail: + static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) { + SWIGV8_HANDLESCOPE(); + +- v8::Handle jsresult; ++ v8::Local jsresult; + OverloadErrorHandler errorHandler; + $jscode + +@@ -320,7 +320,7 @@ static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args, V8ErrorHandler + { + SWIGV8_HANDLESCOPE(); + +- v8::Handle jsresult; ++ v8::Local jsresult; + $jslocals + $jscode + SWIGV8_RETURN(jsresult); +@@ -374,7 +374,7 @@ fail: + %fragment("jsv8_define_class_template", "templates") + %{ + /* Name: $jsmangledname, Type: $jsmangledtype, Dtor: $jsdtor */ +- v8::Handle $jsmangledname_class = SWIGV8_CreateClassTemplate("$jsmangledname"); ++ v8::Local $jsmangledname_class = SWIGV8_CreateClassTemplate("$jsmangledname"); + SWIGV8_SET_CLASS_TEMPL($jsmangledname_clientData.class_templ, $jsmangledname_class); + $jsmangledname_clientData.dtor = $jsdtor; + if (SWIGTYPE_$jsmangledtype->clientdata == 0) { +@@ -420,11 +420,15 @@ fail: + %fragment("jsv8_create_class_instance", "templates") + %{ + /* Class: $jsname ($jsmangledname) */ +- v8::Handle $jsmangledname_class_0 = SWIGV8_CreateClassTemplate("$jsname"); ++ v8::Local $jsmangledname_class_0 = SWIGV8_CreateClassTemplate("$jsname"); + $jsmangledname_class_0->SetCallHandler($jsctor); + $jsmangledname_class_0->Inherit($jsmangledname_class); ++#if (SWIG_V8_VERSION < 0x0705) + $jsmangledname_class_0->SetHiddenPrototype(true); +- v8::Handle $jsmangledname_obj = $jsmangledname_class_0->GetFunction(); ++ v8::Local $jsmangledname_obj = $jsmangledname_class_0->GetFunction(); ++#else ++ v8::Local $jsmangledname_obj = $jsmangledname_class_0->GetFunction(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked(); ++#endif + %} + + /* ----------------------------------------------------------------------------- +@@ -435,7 +439,11 @@ fail: + * ----------------------------------------------------------------------------- */ + %fragment("jsv8_register_class", "templates") + %{ ++#if (SWIG_V8_VERSION < 0x0706) + $jsparent_obj->Set(SWIGV8_SYMBOL_NEW("$jsname"), $jsmangledname_obj); ++#else ++ $jsparent_obj->Set(SWIGV8_CURRENT_CONTEXT(), SWIGV8_SYMBOL_NEW("$jsname"), $jsmangledname_obj); ++#endif + %} + + /* ----------------------------------------------------------------------------- +@@ -444,7 +452,7 @@ fail: + * ----------------------------------------------------------------------------- */ + %fragment("jsv8_create_namespace", "templates") + %{ +- v8::Handle $jsmangledname_obj = SWIGV8_OBJECT_NEW(); ++ v8::Local $jsmangledname_obj = SWIGV8_OBJECT_NEW(); + %} + + /* ----------------------------------------------------------------------------- +diff --git a/Lib/javascript/v8/javascriptcomplex.swg b/Lib/javascript/v8/javascriptcomplex.swg +index d3b4aaffa6..533e548131 100644 +--- a/Lib/javascript/v8/javascriptcomplex.swg ++++ b/Lib/javascript/v8/javascriptcomplex.swg +@@ -12,7 +12,7 @@ + %fragment(SWIG_From_frag(Type),"header", + fragment=SWIG_From_frag(double)) + { +-SWIGINTERNINLINE v8::Handle ++SWIGINTERNINLINE v8::Local + SWIG_From_dec(Type)(%ifcplusplus(const Type&, Type) c) + { + SWIGV8_HANDLESCOPE_ESC(); +@@ -32,12 +32,12 @@ SWIG_From_dec(Type)(%ifcplusplus(const Type&, Type) c) + fragment=SWIG_AsVal_frag(double)) + { + SWIGINTERN int +-SWIG_AsVal_dec(Type) (v8::Handle o, Type* val) ++SWIG_AsVal_dec(Type) (v8::Local o, Type* val) + { + SWIGV8_HANDLESCOPE(); + + if (o->IsArray()) { +- v8::Handle array = v8::Handle::Cast(o); ++ v8::Local array = v8::Local::Cast(o); + + if(array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); + double re, im; +@@ -74,12 +74,12 @@ SWIG_AsVal_dec(Type) (v8::Handle o, Type* val) + %fragment(SWIG_AsVal_frag(Type),"header", + fragment=SWIG_AsVal_frag(float)) { + SWIGINTERN int +-SWIG_AsVal_dec(Type) (v8::Handle o, Type* val) ++SWIG_AsVal_dec(Type) (v8::Local o, Type* val) + { + SWIGV8_HANDLESCOPE(); + + if (o->IsArray()) { +- v8::Handle array = v8::Handle::Cast(o); ++ v8::Local array = v8::Local::Cast(o); + + if(array->Length() != 2) SWIG_Error(SWIG_TypeError, "Illegal argument for complex: must be array[2]."); + double re, im; +diff --git a/Lib/javascript/v8/javascripthelpers.swg b/Lib/javascript/v8/javascripthelpers.swg +index 80fbd7aa1a..0cd24a1942 100644 +--- a/Lib/javascript/v8/javascripthelpers.swg ++++ b/Lib/javascript/v8/javascripthelpers.swg +@@ -21,19 +21,19 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfoVoid; + /** + * Creates a class template for a class with specified initialization function. + */ +-SWIGRUNTIME v8::Handle SWIGV8_CreateClassTemplate(const char* symbol) { ++SWIGRUNTIME v8::Local SWIGV8_CreateClassTemplate(const char* symbol) { + SWIGV8_HANDLESCOPE_ESC(); + + v8::Local class_templ = SWIGV8_FUNCTEMPLATE_NEW_VOID(); + class_templ->SetClassName(SWIGV8_SYMBOL_NEW(symbol)); + +- v8::Handle inst_templ = class_templ->InstanceTemplate(); ++ v8::Local inst_templ = class_templ->InstanceTemplate(); + inst_templ->SetInternalFieldCount(1); + +- v8::Handle equals_templ = class_templ->PrototypeTemplate(); ++ v8::Local equals_templ = class_templ->PrototypeTemplate(); + equals_templ->Set(SWIGV8_SYMBOL_NEW("equals"), SWIGV8_FUNCTEMPLATE_NEW(_SWIGV8_wrap_equals)); + +- v8::Handle cptr_templ = class_templ->PrototypeTemplate(); ++ v8::Local cptr_templ = class_templ->PrototypeTemplate(); + cptr_templ->Set(SWIGV8_SYMBOL_NEW("getCPtr"), SWIGV8_FUNCTEMPLATE_NEW(_wrap_getCPtr)); + + SWIGV8_ESCAPE(class_templ); +@@ -42,33 +42,39 @@ SWIGRUNTIME v8::Handle SWIGV8_CreateClassTemplate(const ch + /** + * Registers a class method with given name for a given class template. + */ +-SWIGRUNTIME void SWIGV8_AddMemberFunction(v8::Handle class_templ, const char* symbol, ++SWIGRUNTIME void SWIGV8_AddMemberFunction(v8::Local class_templ, const char* symbol, + SwigV8FunctionCallback _func) { +- v8::Handle proto_templ = class_templ->PrototypeTemplate(); ++ v8::Local proto_templ = class_templ->PrototypeTemplate(); + proto_templ->Set(SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)); + } + + /** + * Registers a class property with given name for a given class template. + */ +-SWIGRUNTIME void SWIGV8_AddMemberVariable(v8::Handle class_templ, const char* symbol, ++SWIGRUNTIME void SWIGV8_AddMemberVariable(v8::Local class_templ, const char* symbol, + SwigV8AccessorGetterCallback getter, SwigV8AccessorSetterCallback setter) { +- v8::Handle proto_templ = class_templ->InstanceTemplate(); ++ v8::Local proto_templ = class_templ->InstanceTemplate(); + proto_templ->SetAccessor(SWIGV8_SYMBOL_NEW(symbol), getter, setter); + } + + /** + * Registers a class method with given name for a given object. + */ +-SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Handle obj, const char* symbol, ++SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Local obj, const char* symbol, + const SwigV8FunctionCallback& _func) { ++#if (SWIG_V8_VERSION < 0x0705) + obj->Set(SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)->GetFunction()); ++#elif (SWIG_V8_VERSION < 0x0706) ++ obj->Set(SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)->GetFunction(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked()); ++#else ++ obj->Set(SWIGV8_CURRENT_CONTEXT(), SWIGV8_SYMBOL_NEW(symbol), SWIGV8_FUNCTEMPLATE_NEW(_func)->GetFunction(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked()); ++#endif + } + + /** + * Registers a class method with given name for a given object. + */ +-SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Handle obj, const char* symbol, ++SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Local obj, const char* symbol, + SwigV8AccessorGetterCallback getter, SwigV8AccessorSetterCallback setter) { + #if (V8_MAJOR_VERSION-0) < 5 + obj->SetAccessor(SWIGV8_SYMBOL_NEW(symbol), getter, setter); +diff --git a/Lib/javascript/v8/javascriptinit.swg b/Lib/javascript/v8/javascriptinit.swg +index 8faf2dd8e1..450aa9c6d9 100644 +--- a/Lib/javascript/v8/javascriptinit.swg ++++ b/Lib/javascript/v8/javascriptinit.swg +@@ -70,14 +70,14 @@ extern "C" + #if (NODE_MODULE_VERSION < 0x000C) + void SWIGV8_INIT (v8::Handle exports) + #else +-void SWIGV8_INIT (v8::Handle exports, v8::Handle /*module*/) ++void SWIGV8_INIT (v8::Local exports, v8::Local /*module*/) + #endif + { + SWIG_InitializeModule(static_cast(&exports)); + + SWIGV8_HANDLESCOPE(); + +- v8::Handle exports_obj = exports; ++ v8::Local exports_obj = exports; + %} + + +diff --git a/Lib/javascript/v8/javascriptprimtypes.swg b/Lib/javascript/v8/javascriptprimtypes.swg +index f76be983b1..24f5daf7c5 100644 +--- a/Lib/javascript/v8/javascriptprimtypes.swg ++++ b/Lib/javascript/v8/javascriptprimtypes.swg +@@ -6,7 +6,7 @@ + + %fragment(SWIG_From_frag(bool),"header") { + SWIGINTERNINLINE +-v8::Handle ++v8::Local + SWIG_From_dec(bool)(bool value) + { + return SWIGV8_BOOLEAN_NEW(value); +@@ -16,7 +16,7 @@ SWIG_From_dec(bool)(bool value) + %fragment(SWIG_AsVal_frag(bool),"header", + fragment=SWIG_AsVal_frag(long)) { + SWIGINTERN +-int SWIG_AsVal_dec(bool)(v8::Handle obj, bool *val) ++int SWIG_AsVal_dec(bool)(v8::Local obj, bool *val) + { + if(!obj->IsBoolean()) { + return SWIG_ERROR; +@@ -31,7 +31,7 @@ int SWIG_AsVal_dec(bool)(v8::Handle obj, bool *val) + + %fragment(SWIG_From_frag(int),"header") { + SWIGINTERNINLINE +-v8::Handle SWIG_From_dec(int)(int value) ++v8::Local SWIG_From_dec(int)(int value) + { + return SWIGV8_INT32_NEW(value); + } +@@ -39,7 +39,7 @@ v8::Handle SWIG_From_dec(int)(int value) + + %fragment(SWIG_AsVal_frag(int),"header") { + SWIGINTERN +-int SWIG_AsVal_dec(int)(v8::Handle valRef, int* val) ++int SWIG_AsVal_dec(int)(v8::Local valRef, int* val) + { + if (!valRef->IsNumber()) { + return SWIG_TypeError; +@@ -54,7 +54,7 @@ int SWIG_AsVal_dec(int)(v8::Handle valRef, int* val) + + %fragment(SWIG_From_frag(long),"header") { + SWIGINTERNINLINE +-v8::Handle SWIG_From_dec(long)(long value) ++v8::Local SWIG_From_dec(long)(long value) + { + return SWIGV8_NUMBER_NEW(value); + } +@@ -63,7 +63,7 @@ v8::Handle SWIG_From_dec(long)(long value) + %fragment(SWIG_AsVal_frag(long),"header", + fragment="SWIG_CanCastAsInteger") { + SWIGINTERN +-int SWIG_AsVal_dec(long)(v8::Handle obj, long* val) ++int SWIG_AsVal_dec(long)(v8::Local obj, long* val) + { + if (!obj->IsNumber()) { + return SWIG_TypeError; +@@ -79,7 +79,7 @@ int SWIG_AsVal_dec(long)(v8::Handle obj, long* val) + %fragment(SWIG_From_frag(unsigned long),"header", + fragment=SWIG_From_frag(long)) { + SWIGINTERNINLINE +-v8::Handle SWIG_From_dec(unsigned long)(unsigned long value) ++v8::Local SWIG_From_dec(unsigned long)(unsigned long value) + { + return (value > LONG_MAX) ? + SWIGV8_INTEGER_NEW_UNS(value) : SWIGV8_INTEGER_NEW(%numeric_cast(value,long)); +@@ -89,7 +89,7 @@ v8::Handle SWIG_From_dec(unsigned long)(unsigned long value) + %fragment(SWIG_AsVal_frag(unsigned long),"header", + fragment="SWIG_CanCastAsInteger") { + SWIGINTERN +-int SWIG_AsVal_dec(unsigned long)(v8::Handle obj, unsigned long *val) ++int SWIG_AsVal_dec(unsigned long)(v8::Local obj, unsigned long *val) + { + if(!obj->IsNumber()) { + return SWIG_TypeError; +@@ -115,7 +115,7 @@ int SWIG_AsVal_dec(unsigned long)(v8::Handle obj, unsigned long *val) + fragment="SWIG_LongLongAvailable") { + %#ifdef SWIG_LONG_LONG_AVAILABLE + SWIGINTERNINLINE +-v8::Handle SWIG_From_dec(long long)(long long value) ++v8::Local SWIG_From_dec(long long)(long long value) + { + return SWIGV8_NUMBER_NEW(value); + } +@@ -128,7 +128,7 @@ v8::Handle SWIG_From_dec(long long)(long long value) + fragment="SWIG_LongLongAvailable") { + %#ifdef SWIG_LONG_LONG_AVAILABLE + SWIGINTERN +-int SWIG_AsVal_dec(long long)(v8::Handle obj, long long* val) ++int SWIG_AsVal_dec(long long)(v8::Local obj, long long* val) + { + if (!obj->IsNumber()) { + return SWIG_TypeError; +@@ -148,7 +148,7 @@ int SWIG_AsVal_dec(long long)(v8::Handle obj, long long* val) + fragment="SWIG_LongLongAvailable") { + %#ifdef SWIG_LONG_LONG_AVAILABLE + SWIGINTERNINLINE +-v8::Handle SWIG_From_dec(unsigned long long)(unsigned long long value) ++v8::Local SWIG_From_dec(unsigned long long)(unsigned long long value) + { + return (value > LONG_MAX) ? + SWIGV8_INTEGER_NEW_UNS(value) : SWIGV8_INTEGER_NEW(%numeric_cast(value,long)); +@@ -162,7 +162,7 @@ v8::Handle SWIG_From_dec(unsigned long long)(unsigned long long value + fragment="SWIG_LongLongAvailable") { + %#ifdef SWIG_LONG_LONG_AVAILABLE + SWIGINTERN +-int SWIG_AsVal_dec(unsigned long long)(v8::Handle obj, unsigned long long *val) ++int SWIG_AsVal_dec(unsigned long long)(v8::Local obj, unsigned long long *val) + { + if(!obj->IsNumber()) { + return SWIG_TypeError; +@@ -185,7 +185,7 @@ int SWIG_AsVal_dec(unsigned long long)(v8::Handle obj, unsigned long + + %fragment(SWIG_From_frag(double),"header") { + SWIGINTERN +-v8::Handle SWIG_From_dec(double) (double val) ++v8::Local SWIG_From_dec(double) (double val) + { + return SWIGV8_NUMBER_NEW(val); + } +@@ -193,7 +193,7 @@ v8::Handle SWIG_From_dec(double) (double val) + + %fragment(SWIG_AsVal_frag(double),"header") { + SWIGINTERN +-int SWIG_AsVal_dec(double)(v8::Handle obj, double *val) ++int SWIG_AsVal_dec(double)(v8::Local obj, double *val) + { + if(!obj->IsNumber()) { + return SWIG_TypeError; +diff --git a/Lib/javascript/v8/javascriptrun.swg b/Lib/javascript/v8/javascriptrun.swg +index 2452f4040d..db6299a84e 100644 +--- a/Lib/javascript/v8/javascriptrun.swg ++++ b/Lib/javascript/v8/javascriptrun.swg +@@ -10,7 +10,11 @@ + #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031803) + #define SWIGV8_STRING_NEW2(cstr, len) v8::String::New(cstr, len) + #else ++#if (SWIG_V8_VERSION < 0x0706) + #define SWIGV8_STRING_NEW2(cstr, len) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), cstr, v8::String::kNormalString, len) ++#else ++#define SWIGV8_STRING_NEW2(cstr, len) (v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), cstr, v8::NewStringType::kNormal, len)).ToLocalChecked() ++#endif + #endif + + #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031903) +@@ -47,12 +51,18 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; + #define SWIGV8_THROW_EXCEPTION(err) v8::ThrowException(err) + #define SWIGV8_STRING_NEW(str) v8::String::New(str) + #define SWIGV8_SYMBOL_NEW(sym) v8::String::NewSymbol(sym) ++#elif (SWIG_V8_VERSION < 0x0706) ++#define SWIGV8_ADJUST_MEMORY(size) v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(size) ++#define SWIGV8_CURRENT_CONTEXT() v8::Isolate::GetCurrent()->GetCurrentContext() ++#define SWIGV8_THROW_EXCEPTION(err) v8::Isolate::GetCurrent()->ThrowException(err) ++#define SWIGV8_STRING_NEW(str) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str, v8::String::kNormalString) ++#define SWIGV8_SYMBOL_NEW(sym) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), sym, v8::String::kNormalString) + #else + #define SWIGV8_ADJUST_MEMORY(size) v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(size) + #define SWIGV8_CURRENT_CONTEXT() v8::Isolate::GetCurrent()->GetCurrentContext() + #define SWIGV8_THROW_EXCEPTION(err) v8::Isolate::GetCurrent()->ThrowException(err) +-#define SWIGV8_STRING_NEW(str) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str) +-#define SWIGV8_SYMBOL_NEW(sym) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), sym) ++#define SWIGV8_STRING_NEW(str) (v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str, v8::NewStringType::kNormal)).ToLocalChecked() ++#define SWIGV8_SYMBOL_NEW(sym) (v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), sym, v8::NewStringType::kNormal)).ToLocalChecked() + #endif + + #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032318) +@@ -107,7 +117,7 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; + #define SWIGV8_BOOLEAN_VALUE(handle) (handle)->BooleanValue() + #define SWIGV8_WRITE_UTF8(handle, buffer, len) (handle)->WriteUtf8(buffer, len) + #define SWIGV8_UTF8_LENGTH(handle) (handle)->Utf8Length() +-#else ++#elif (SWIG_V8_VERSION < 0x0706) + #define SWIGV8_TO_OBJECT(handle) (handle)->ToObject(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() + #define SWIGV8_TO_STRING(handle) (handle)->ToString(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() + #define SWIGV8_NUMBER_VALUE(handle) (handle)->NumberValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() +@@ -115,6 +125,14 @@ typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfo; + #define SWIGV8_BOOLEAN_VALUE(handle) (handle)->BooleanValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() + #define SWIGV8_WRITE_UTF8(handle, buffer, len) (handle)->WriteUtf8(v8::Isolate::GetCurrent(), buffer, len) + #define SWIGV8_UTF8_LENGTH(handle) (handle)->Utf8Length(v8::Isolate::GetCurrent()) ++#else ++#define SWIGV8_TO_OBJECT(handle) (handle)->ToObject(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() ++#define SWIGV8_TO_STRING(handle) (handle)->ToString(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked() ++#define SWIGV8_NUMBER_VALUE(handle) (handle)->NumberValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() ++#define SWIGV8_INTEGER_VALUE(handle) (handle)->IntegerValue(SWIGV8_CURRENT_CONTEXT()).ToChecked() ++#define SWIGV8_BOOLEAN_VALUE(handle) (handle)->BooleanValue(v8::Isolate::GetCurrent()) ++#define SWIGV8_WRITE_UTF8(handle, buffer, len) (handle)->WriteUtf8(v8::Isolate::GetCurrent(), buffer, len) ++#define SWIGV8_UTF8_LENGTH(handle) (handle)->Utf8Length(v8::Isolate::GetCurrent()) + #endif + + /* --------------------------------------------------------------------------- +@@ -163,7 +181,7 @@ public: + SWIGV8_THROW_EXCEPTION(err); + } + } +- v8::Handle err; ++ v8::Local err; + }; + + /* --------------------------------------------------------------------------- +@@ -228,13 +246,13 @@ public: + + SWIGRUNTIME v8::Persistent SWIGV8_SWIGTYPE_Proxy_class_templ; + +-SWIGRUNTIME int SWIG_V8_ConvertInstancePtr(v8::Handle objRef, void **ptr, swig_type_info *info, int flags) { ++SWIGRUNTIME int SWIG_V8_ConvertInstancePtr(v8::Local objRef, void **ptr, swig_type_info *info, int flags) { + SWIGV8_HANDLESCOPE(); + + if(objRef->InternalFieldCount() < 1) return SWIG_ERROR; + + #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031511) +- v8::Handle cdataRef = objRef->GetInternalField(0); ++ v8::Local cdataRef = objRef->GetInternalField(0); + SWIGV8_Proxy *cdata = static_cast(v8::External::Unwrap(cdataRef)); + #else + SWIGV8_Proxy *cdata = static_cast(objRef->GetAlignedPointerFromInternalField(0)); +@@ -280,11 +298,11 @@ SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackInfo valRef, void **ptr) { ++SWIGRUNTIME int SWIG_V8_GetInstancePtr(v8::Local valRef, void **ptr) { + if(!valRef->IsObject()) { + return SWIG_TypeError; + } +- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); ++ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); + + if(objRef->InternalFieldCount() < 1) return SWIG_ERROR; + +@@ -304,7 +322,7 @@ SWIGRUNTIME int SWIG_V8_GetInstancePtr(v8::Handle valRef, void **ptr) + return SWIG_OK; + } + +-SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle obj, void *ptr, swig_type_info *info, int flags) { ++SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Local obj, void *ptr, swig_type_info *info, int flags) { + SWIGV8_Proxy *cdata = new SWIGV8_Proxy(); + cdata->swigCObject = ptr; + cdata->swigCMemOwn = (flags & SWIG_POINTER_OWN) ? 1 : 0; +@@ -361,13 +379,15 @@ SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle obj, void *ptr, sw + cdata->handle.MarkIndependent(); + #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032100) + cdata->handle.MarkIndependent(v8::Isolate::GetCurrent()); +-#else ++#elif (SWIG_V8_VERSION < 0x0706) + cdata->handle.MarkIndependent(); ++// Looks like future versions do not require that anymore: ++// https://monorail-prod.appspot.com/p/chromium/issues/detail?id=923361#c11 + #endif + + } + +-SWIGRUNTIME int SWIG_V8_ConvertPtr(v8::Handle valRef, void **ptr, swig_type_info *info, int flags) { ++SWIGRUNTIME int SWIG_V8_ConvertPtr(v8::Local valRef, void **ptr, swig_type_info *info, int flags) { + SWIGV8_HANDLESCOPE(); + + /* special case: JavaScript null => C NULL pointer */ +@@ -378,14 +398,14 @@ SWIGRUNTIME int SWIG_V8_ConvertPtr(v8::Handle valRef, void **ptr, swi + if(!valRef->IsObject()) { + return SWIG_TypeError; + } +- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); ++ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); + return SWIG_V8_ConvertInstancePtr(objRef, ptr, info, flags); + } + +-SWIGRUNTIME v8::Handle SWIG_V8_NewPointerObj(void *ptr, swig_type_info *info, int flags) { ++SWIGRUNTIME v8::Local SWIG_V8_NewPointerObj(void *ptr, swig_type_info *info, int flags) { + SWIGV8_HANDLESCOPE_ESC(); + +- v8::Handle class_templ; ++ v8::Local class_templ; + + if (ptr == NULL) { + #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031903) +@@ -412,8 +432,11 @@ SWIGRUNTIME v8::Handle SWIG_V8_NewPointerObj(void *ptr, swig_type_inf + } + #endif + +-// v8::Handle result = class_templ->InstanceTemplate()->NewInstance(); ++#if (SWIG_V8_VERSION < 0x0705) + v8::Local result = class_templ->InstanceTemplate()->NewInstance(); ++#else ++ v8::Local result = class_templ->InstanceTemplate()->NewInstance(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked(); ++#endif + SWIGV8_SetPrivateData(result, ptr, info, flags); + + SWIGV8_ESCAPE(result); +@@ -433,7 +456,7 @@ SWIGRUNTIME v8::Handle SWIG_V8_NewPointerObj(void *ptr, swig_type_inf + SWIGRUNTIME SwigV8ReturnValue _SWIGV8_wrap_equals(const SwigV8Arguments &args) { + SWIGV8_HANDLESCOPE(); + +- v8::Handle jsresult; ++ v8::Local jsresult; + void *arg1 = (void *) 0 ; + void *arg2 = (void *) 0 ; + bool result; +@@ -463,7 +486,7 @@ fail: + SWIGRUNTIME SwigV8ReturnValue _wrap_getCPtr(const SwigV8Arguments &args) { + SWIGV8_HANDLESCOPE(); + +- v8::Handle jsresult; ++ v8::Local jsresult; + void *arg1 = (void *) 0 ; + long result; + int res1; +@@ -502,10 +525,10 @@ public: + }; + + SWIGRUNTIMEINLINE +-int SwigV8Packed_Check(v8::Handle valRef) { ++int SwigV8Packed_Check(v8::Local valRef) { + SWIGV8_HANDLESCOPE(); + +- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); ++ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); + if(objRef->InternalFieldCount() < 1) return false; + #if (V8_MAJOR_VERSION-0) < 5 + v8::Handle flag = objRef->GetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__")); +@@ -519,13 +542,13 @@ int SwigV8Packed_Check(v8::Handle valRef) { + } + + SWIGRUNTIME +-swig_type_info *SwigV8Packed_UnpackData(v8::Handle valRef, void *ptr, size_t size) { ++swig_type_info *SwigV8Packed_UnpackData(v8::Local valRef, void *ptr, size_t size) { + if (SwigV8Packed_Check(valRef)) { + SWIGV8_HANDLESCOPE(); + + SwigV8PackedData *sobj; + +- v8::Handle objRef = SWIGV8_TO_OBJECT(valRef); ++ v8::Local objRef = SWIGV8_TO_OBJECT(valRef); + + #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031511) + v8::Handle cdataRef = objRef->GetInternalField(0); +@@ -542,7 +565,7 @@ swig_type_info *SwigV8Packed_UnpackData(v8::Handle valRef, void *ptr, + } + + SWIGRUNTIME +-int SWIGV8_ConvertPacked(v8::Handle valRef, void *ptr, size_t sz, swig_type_info *ty) { ++int SWIGV8_ConvertPacked(v8::Local valRef, void *ptr, size_t sz, swig_type_info *ty) { + swig_type_info *to = SwigV8Packed_UnpackData(valRef, ptr, sz); + if (!to) return SWIG_ERROR; + if (ty) { +@@ -590,7 +613,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackInfo SWIGV8_NewPackedObj(void *data, size_t size, swig_type_info *type) { ++v8::Local SWIGV8_NewPackedObj(void *data, size_t size, swig_type_info *type) { + SWIGV8_HANDLESCOPE_ESC(); + + SwigV8PackedData *cdata = new SwigV8PackedData(data, size, type); +@@ -636,8 +659,10 @@ v8::Handle SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf + cdata->handle.MarkIndependent(); + #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x032100) + cdata->handle.MarkIndependent(v8::Isolate::GetCurrent()); +-#else ++#elif (SWIG_V8_VERSION < 0x0706) + cdata->handle.MarkIndependent(); ++// Looks like future versions do not require that anymore: ++// https://monorail-prod.appspot.com/p/chromium/issues/detail?id=923361#c11 + #endif + + SWIGV8_ESCAPE(obj); +@@ -657,7 +682,7 @@ SWIGRUNTIME + #if (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < 0x031903) + v8::Handle SWIGV8_AppendOutput(v8::Handle result, v8::Handle obj) { + #else +-v8::Handle SWIGV8_AppendOutput(v8::Local result, v8::Handle obj) { ++v8::Local SWIGV8_AppendOutput(v8::Local result, v8::Local obj) { + #endif + SWIGV8_HANDLESCOPE_ESC(); + +@@ -669,7 +694,12 @@ v8::Handle SWIGV8_AppendOutput(v8::Local result, v8::Handl + #else + v8::Local arr = v8::Local::Cast(result); + #endif ++ ++#if (SWIG_V8_VERSION < 0x0706) + arr->Set(arr->Length(), obj); ++#else ++ arr->Set(SWIGV8_CURRENT_CONTEXT(), arr->Length(), obj); ++#endif + + SWIGV8_ESCAPE(arr); + } +diff --git a/Lib/javascript/v8/javascriptruntime.swg b/Lib/javascript/v8/javascriptruntime.swg +index c78e04efbb..773014f2a5 100644 +--- a/Lib/javascript/v8/javascriptruntime.swg ++++ b/Lib/javascript/v8/javascriptruntime.swg +@@ -56,6 +56,11 @@ + %insert(runtime) %{ + #include + ++#if defined(V8_MAJOR_VERSION) && defined(V8_MINOR_VERSION) ++#undef SWIG_V8_VERSION ++#define SWIG_V8_VERSION (V8_MAJOR_VERSION * 256 + V8_MINOR_VERSION) ++#endif ++ + #include + #include + #include +diff --git a/Lib/javascript/v8/javascriptstrings.swg b/Lib/javascript/v8/javascriptstrings.swg +index e767a6d662..61a937fa52 100644 +--- a/Lib/javascript/v8/javascriptstrings.swg ++++ b/Lib/javascript/v8/javascriptstrings.swg +@@ -4,10 +4,10 @@ + * ------------------------------------------------------------ */ + %fragment("SWIG_AsCharPtrAndSize", "header", fragment="SWIG_pchar_descriptor") { + SWIGINTERN int +-SWIG_AsCharPtrAndSize(v8::Handle valRef, char** cptr, size_t* psize, int *alloc) ++SWIG_AsCharPtrAndSize(v8::Local valRef, char** cptr, size_t* psize, int *alloc) + { + if(valRef->IsString()) { +- v8::Handle js_str = SWIGV8_TO_STRING(valRef); ++ v8::Local js_str = SWIGV8_TO_STRING(valRef); + + size_t len = SWIGV8_UTF8_LENGTH(js_str) + 1; + char* cstr = new char[len]; +@@ -20,7 +20,7 @@ SWIG_AsCharPtrAndSize(v8::Handle valRef, char** cptr, size_t* psize, + return SWIG_OK; + } else { + if(valRef->IsObject()) { +- v8::Handle obj = SWIGV8_TO_OBJECT(valRef); ++ v8::Local obj = SWIGV8_TO_OBJECT(valRef); + // try if the object is a wrapped char[] + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { +@@ -41,7 +41,7 @@ SWIG_AsCharPtrAndSize(v8::Handle valRef, char** cptr, size_t* psize, + } + + %fragment("SWIG_FromCharPtrAndSize","header",fragment="SWIG_pchar_descriptor") { +-SWIGINTERNINLINE v8::Handle ++SWIGINTERNINLINE v8::Local + SWIG_FromCharPtrAndSize(const char* carray, size_t size) + { + if (carray) { +@@ -49,7 +49,7 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size) + // TODO: handle extra long strings + return SWIGV8_UNDEFINED(); + } else { +- v8::Handle js_str = SWIGV8_STRING_NEW2(carray, size); ++ v8::Local js_str = SWIGV8_STRING_NEW2(carray, size); + return js_str; + } + } else { +diff --git a/Lib/javascript/v8/javascripttypemaps.swg b/Lib/javascript/v8/javascripttypemaps.swg +index 4601698e03..fbe7849cd2 100644 +--- a/Lib/javascript/v8/javascripttypemaps.swg ++++ b/Lib/javascript/v8/javascripttypemaps.swg +@@ -25,7 +25,7 @@ + + /* Javascript types */ + +-#define SWIG_Object v8::Handle ++#define SWIG_Object v8::Local + #define VOID_Object SWIGV8_UNDEFINED() + + /* Overload of the output/constant/exception/dirout handling */ +diff --git a/Source/Modules/javascript.cxx b/Source/Modules/javascript.cxx +index d2b33b1b42..450ebbd497 100644 +--- a/Source/Modules/javascript.cxx ++++ b/Source/Modules/javascript.cxx +@@ -548,7 +548,7 @@ void JAVASCRIPT::main(int argc, char *argv[]) { + } + Swig_mark_arg(i); + engine = JSEmitter::JavascriptCore; +- } else if (strcmp(argv[i], "-node") == 0) { ++ } else if ((strcmp(argv[i], "-node") == 0) || (strcmp(argv[i], "-electron") == 0)) { + if (engine != -1) { + Printf(stderr, ERR_MSG_ONLY_ONE_ENGINE_PLEASE); + SWIG_exit(-1); +@@ -594,7 +594,7 @@ void JAVASCRIPT::main(int argc, char *argv[]) { + } + default: + { +- Printf(stderr, "SWIG Javascript: Unknown engine. Please specify one of '-jsc', '-v8' or '-node'.\n"); ++ Printf(stderr, "SWIG Javascript: Unknown engine. Please specify one of '-jsc', '-v8' or '-node/-electron'.\n"); + SWIG_exit(-1); + break; + } +diff --git a/Tools/javascript/v8_shell.cxx b/Tools/javascript/v8_shell.cxx +index 5001bc25a6..8067247a41 100644 +--- a/Tools/javascript/v8_shell.cxx ++++ b/Tools/javascript/v8_shell.cxx +@@ -9,7 +9,7 @@ + + #include "js_shell.h" + +-typedef int (*V8ExtensionInitializer) (v8::Handle module); ++typedef int (*V8ExtensionInitializer) (v8::Local module); + + // Note: these typedefs and defines are used to deal with v8 API changes since version 3.19.00 + +@@ -87,7 +87,7 @@ class V8Shell: public JSShell { + + private: + +- v8::Handle Import(const std::string &moduleName); ++ v8::Local Import(const std::string &moduleName); + + SwigV8Context CreateShellContext(); + +@@ -135,7 +135,7 @@ bool V8Shell::RunScript(const std::string &scriptPath) { + + // Store a pointer to this shell for later use + +- v8::Handle global = context->Global(); ++ v8::Local global = context->Global(); + v8::Local __shell__ = SWIGV8_EXTERNAL_NEW((void*) (long) this); + + global->SetHiddenValue(SWIGV8_STRING_NEW("__shell__"), __shell__); +@@ -215,7 +215,7 @@ bool V8Shell::ExecuteScript(const std::string &source, const std::string &name) + SWIGV8_HANDLESCOPE(); + + v8::TryCatch try_catch; +- v8::Handle script = v8::Script::Compile(SWIGV8_STRING_NEW(source.c_str()), SWIGV8_STRING_NEW(name.c_str())); ++ v8::Local script = v8::Script::Compile(SWIGV8_STRING_NEW(source.c_str()), SWIGV8_STRING_NEW(name.c_str())); + + // Stop if script is empty + if (script.IsEmpty()) { +@@ -224,7 +224,7 @@ bool V8Shell::ExecuteScript(const std::string &source, const std::string &name) + return false; + } + +- v8::Handle result = script->Run(); ++ v8::Local result = script->Run(); + + // Print errors that happened during execution. + if (try_catch.HasCaught()) { +@@ -241,7 +241,7 @@ bool V8Shell::DisposeEngine() { + + SwigV8Context V8Shell::CreateShellContext() { + // Create a template for the global object. +- v8::Handle global = v8::ObjectTemplate::New(); ++ v8::Local global = v8::ObjectTemplate::New(); + + // Bind global functions + global->Set(SWIGV8_STRING_NEW("print"), SWIGV8_FUNCTEMPLATE_NEW(V8Shell::Print)); +@@ -258,7 +258,7 @@ SwigV8Context V8Shell::CreateShellContext() { + #endif + } + +-v8::Handle V8Shell::Import(const std::string &module_path) ++v8::Local V8Shell::Import(const std::string &module_path) + { + SWIGV8_HANDLESCOPE_ESC(); + +@@ -319,7 +319,7 @@ SwigV8ReturnValue V8Shell::Require(const SwigV8Arguments &args) { + v8::Local __shell__ = v8::Local::Cast(hidden); + V8Shell *_this = (V8Shell *) (long) __shell__->Value(); + +- v8::Handle module = _this->Import(moduleName); ++ v8::Local module = _this->Import(moduleName); + + SWIGV8_RETURN(module); + } +@@ -345,7 +345,7 @@ void V8Shell::ReportException(v8::TryCatch *try_catch) { + + v8::String::Utf8Value exception(try_catch->Exception()); + const char *exception_string = V8Shell::ToCString(exception); +- v8::Handle message = try_catch->Message(); ++ v8::Local message = try_catch->Message(); + if (message.IsEmpty()) { + // V8 didn't provide any extra information about this error; just + // print the exception. +diff --git a/Tools/testflags.py b/Tools/testflags.py +index f3d216b59a..64528d6925 100755 +--- a/Tools/testflags.py ++++ b/Tools/testflags.py +@@ -41,7 +41,10 @@ def get_cxxflags(language, std, compiler): + "go":"-Werror " + cxx_common, + "guile":"-Werror " + cxx_common, + "java":"-Werror " + cxx_common, +- "javascript":"-Werror " + cxx_common + " -Wno-error=unused-function", # Until overload_rename is fixed for node ++ "javascript":"-Werror " + cxx_common + ++ " -Wno-error=unused-function" + # Until overload_rename is fixed for node ++ " -Wno-error=unused-result -Wno-unused-result", # Until proper update of latest NodeJS / V8 ++ # " -Wno-error=cast-function-type" + Only in GCC 8.x+ + "lua":"-Werror " + cxx_common, + "mzscheme":"-Werror " + cxx_common, + "ocaml":"-Werror " + cxx_common, +diff --git a/Tools/travis-linux-install.sh b/Tools/travis-linux-install.sh +index c8347d27a4..04683572af 100755 +--- a/Tools/travis-linux-install.sh ++++ b/Tools/travis-linux-install.sh +@@ -33,7 +33,7 @@ case "$SWIGLANG" in + ;; + "javascript") + case "$ENGINE" in +- "node") ++ "node"|"electron") + travis_retry wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash + export NVM_DIR="$HOME/.nvm" + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +@@ -45,6 +45,11 @@ case "$SWIGLANG" in + else + travis_retry npm install -g node-gyp + fi ++ ++ if [ ! -z "$ELECTRON_VER" ] ; then ++ travis_retry npm install -g electron@$ELECTRON_VER ++ fi ++ + ;; + "jsc") + travis_retry sudo apt-get install -qq libwebkitgtk-dev + diff --git a/swig-node-v7.patch b/swig-node-v7.patch new file mode 100644 index 0000000..4f5e1fc --- /dev/null +++ b/swig-node-v7.patch @@ -0,0 +1,541 @@ +From f08d7a63a92a3ba89d97bdfcc206e1e1c4804c0f Mon Sep 17 00:00:00 2001 +From: Patrick Schneider +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 object, v + SWIGV8_Proxy *proxy = static_cast(parameter); + #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION) + static void $jswrapper(v8::Isolate *isolate, v8::Persistent *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 &data) { + v8::Local object = data.GetValue(); + SWIGV8_Proxy *proxy = data.GetParameter(); ++#else ++ static void $jswrapper(const v8::WeakCallbackInfo &data) { ++ SWIGV8_Proxy *proxy = data.GetParameter(); + #endif + + if(proxy->swigCMemOwn && proxy->swigCObject) { +@@ -147,7 +150,9 @@ static void $jswrapper(const v8::WeakCallbackData &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 &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 object, v + SWIGV8_Proxy *proxy = static_cast(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 &data) { + v8::Local object = data.GetValue(); + SWIGV8_Proxy *proxy = data.GetParameter(); ++#else ++static void $jswrapper(const v8::WeakCallbackInfo &data) { ++ SWIGV8_Proxy *proxy = data.GetParameter(); + #endif + + if(proxy->swigCMemOwn && proxy->swigCObject) { +@@ -197,7 +205,7 @@ static void $jswrapper(const v8::WeakCallbackData &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 &dat + * ----------------------------------------------------------------------------- */ + %fragment("js_getter", "templates") + %{ ++#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2) + static SwigV8ReturnValue $jswrapper(v8::Local property, const SwigV8PropertyCallbackInfo &info) { ++#else ++static SwigV8ReturnValue $jswrapper(v8::Local property, const SwigV8PropertyCallbackInfo &info) { ++#endif + SWIGV8_HANDLESCOPE(); + + v8::Handle jsresult; +@@ -233,8 +245,11 @@ fail: + * ----------------------------------------------------------------------------- */ + %fragment("js_setter", "templates") + %{ +-static void $jswrapper(v8::Local property, v8::Local value, +- const SwigV8PropertyCallbackInfoVoid &info) { ++#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2) ++static void $jswrapper(v8::Local property, v8::Local value, const SwigV8PropertyCallbackInfoVoid &info) { ++#else ++static void $jswrapper(v8::Local property, v8::Local 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 SwigV8PropertyCallbackInfoVoid; ++#else ++typedef v8::FunctionCallback SwigV8FunctionCallback; ++typedef v8::AccessorNameGetterCallback SwigV8AccessorGetterCallback; ++typedef v8::AccessorNameSetterCallback SwigV8AccessorSetterCallback; ++typedef v8::PropertyCallbackInfo SwigV8PropertyCallbackInfoVoid; + #endif + + /** +@@ -65,18 +70,36 @@ SWIGRUNTIME void SWIGV8_AddStaticFunction(v8::Handle obj, const char + */ + SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Handle 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 property, v8::Local 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 property, v8::Local value, const SwigV8PropertyCallbackInfoVoid& info) ++#else ++SWIGRUNTIME void JS_veto_set_variable(v8::Local property, v8::Local 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 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 global_obj = SWIGV8_CURRENT_CONTEXT()->Global(); + v8::Local 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 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 global_obj = SWIGV8_CURRENT_CONTEXT()->Global(); ++#if (V8_MAJOR_VERSION-0) < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2) + v8::Local moduleinfo = global_obj->GetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data")); ++#else ++ v8::Local privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("swig_module_info_data")); ++ v8::Local 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 moduleinfo_extern = v8::Local::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 &data); ++#else ++ void (*dtor) (const v8::WeakCallbackInfo &data); + #endif + }; + +@@ -241,9 +243,12 @@ SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Val + SWIGV8_Proxy *proxy = static_cast(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 &data) { + SWIGV8_Proxy *proxy = data.GetParameter(); ++#else ++SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(const v8::WeakCallbackInfo &data) { ++ SWIGV8_Proxy *proxy = data.GetParameter(); + #endif + + delete proxy; +@@ -312,12 +317,18 @@ SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle 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 valRef) { + + v8::Handle 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 flag = objRef->GetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__")); ++#else ++ v8::Local privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__")); ++ v8::Local 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(parameter); + #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION) + SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persistent *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 &data) { + v8::Local object = data.GetValue(); + SwigV8PackedData *cdata = data.GetParameter(); ++#else ++SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackInfo &data) { ++ SwigV8PackedData *cdata = data.GetParameter(); + #endif + + delete cdata; +@@ -537,7 +558,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackDataDispose(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 SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf + // v8::Handle obj = SWIGV8_OBJECT_NEW(); + v8::Local 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 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 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 +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 object, v + SWIGV8_Proxy *proxy = static_cast(parameter); + #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION) + static void $jswrapper(v8::Isolate *isolate, v8::Persistent *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 &data) { + v8::Local object = data.GetValue(); + SWIGV8_Proxy *proxy = data.GetParameter(); +@@ -150,7 +150,7 @@ static void $jswrapper(const v8::WeakCallbackData &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 &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 object, v + SWIGV8_Proxy *proxy = static_cast(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 &data) { + v8::Local object = data.GetValue(); + SWIGV8_Proxy *proxy = data.GetParameter(); +@@ -205,7 +205,7 @@ static void $jswrapper(const v8::WeakCallbackInfo &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 &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 property, const SwigV8PropertyCallbackInfo &info) { + #else + static SwigV8ReturnValue $jswrapper(v8::Local 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 property, v8::Local value, const SwigV8PropertyCallbackInfoVoid &info) { + #else + static void $jswrapper(v8::Local property, v8::Local 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 obj, const char + */ + SWIGRUNTIME void SWIGV8_AddStaticVariable(v8::Handle 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 property, v8::Local value, const SwigV8PropertyCallbackInfoVoid& info) + #else + SWIGRUNTIME void JS_veto_set_variable(v8::Local property, v8::Local value, const SwigV8PropertyCallbackInfoVoid& info) +@@ -87,7 +87,7 @@ SWIGRUNTIME void JS_veto_set_variable(v8::Local property, v8::LocalWriteUtf8(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 global_obj = SWIGV8_CURRENT_CONTEXT()->Global(); + v8::Local 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 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 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 moduleinfo = global_obj->GetHiddenValue(SWIGV8_STRING_NEW("swig_module_info_data")); + #else + v8::Local 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 &data); + #else + void (*dtor) (const v8::WeakCallbackInfo &data); +@@ -243,7 +243,7 @@ SWIGRUNTIME void SWIGV8_Proxy_DefaultDtor(v8::Isolate *, v8::Persistent< v8::Val + SWIGV8_Proxy *proxy = static_cast(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 &data) { + SWIGV8_Proxy *proxy = data.GetParameter(); + #else +@@ -317,7 +317,7 @@ SWIGRUNTIME void SWIGV8_SetPrivateData(v8::Handle 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 valRef) { + + v8::Handle 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 flag = objRef->GetHiddenValue(SWIGV8_STRING_NEW("__swig__packed_data__")); + #else + v8::Local 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(parameter); + #elif (V8_MAJOR_VERSION-0) < 4 && (SWIG_V8_VERSION < SWIGV8_SETWEAK_VERSION) + SWIGRUNTIME void _wrap_SwigV8PackedData_delete(v8::Isolate *isolate, v8::Persistent *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 &data) { + v8::Local object = data.GetValue(); + SwigV8PackedData *cdata = data.GetParameter(); +@@ -558,7 +558,7 @@ SWIGRUNTIME void _wrap_SwigV8PackedData_delete(const v8::WeakCallbackInfoDispose(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 SWIGV8_NewPackedObj(void *data, size_t size, swig_type_inf + // v8::Handle obj = SWIGV8_OBJECT_NEW(); + v8::Local 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 privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), SWIGV8_STRING_NEW("__swig__packed_data__")); +@@ -599,7 +599,7 @@ v8::Handle 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 diff --git a/swig.spec b/swig.spec new file mode 100644 index 0000000..c3e19f6 --- /dev/null +++ b/swig.spec @@ -0,0 +1,936 @@ +# We can skip tests +%bcond_without testsuite + +%{!?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} +%{!?rubylang:%global rubylang 1} +%{!?python2lang:%global python2lang 0} + +%if 0%{?rhel} +%{!?golang:%global golang 0} +%{!?octave:%global octave 0} +%{!?Rlang:%global Rlang 0} +%bcond_with build_ccache_swig +%else +%{!?octave:%global octave 1} +%{!?Rlang:%global Rlang 1} +%bcond_without build_ccache_swig +%endif +%ifarch aarch64 %{arm} %{mips} ppc64le 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} +%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} +License: GPLv3+ and BSD +URL: http://swig.sourceforge.net/ +Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz +# Define the part of man page sections +Source1: description.h2m +%if %{with build_ccache_swig} +Source2: description-ccache.h2m +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 + +BuildRequires: perl-interpreter, pcre-devel +%if %{python2lang} +BuildRequires: python2-devel +%endif +BuildRequires: python3-devel +BuildRequires: autoconf, automake, gawk, dos2unix +BuildRequires: gcc-c++ +BuildRequires: help2man +BuildRequires: perl-devel +BuildRequires: perl(base) +BuildRequires: perl(Config) +BuildRequires: perl(Devel::Peek) +BuildRequires: perl(ExtUtils::MakeMaker) +BuildRequires: perl(fields) +BuildRequires: perl(Math::BigInt) +BuildRequires: perl(strict) +BuildRequires: perl(Test::More) +BuildRequires: perl(vars) +BuildRequires: perl(warnings) +BuildRequires: boost-devel +# Need when Source/CParse/parser.y is patched +BuildRequires: bison +%if %{tcl} +BuildRequires: tcl-devel +%endif +%if %{guile} +BuildRequires: guile-devel +%endif +%if %{octave} +BuildRequires: octave-devel +%endif +%if %{golang} +BuildRequires: golang +BuildRequires: golang-shared +BuildRequires: golang-src +%endif +%if %{lualang} +BuildRequires: lua-devel +%endif +%if %{rubylang} +BuildRequires: ruby-devel +%endif +%if %{Rlang} +BuildRequires: R-devel +%endif +%if %{javalang} +BuildRequires: java, java-devel +%endif +%if %{phplang} +BuildRequires: php, php-devel +%endif + +%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 + +%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 + +%description -n ccache-swig +ccache-swig is a compiler cache. It speeds up re-compilation of C/C++/SWIG +code by caching previous compiles and detecting when the same compile is +being done again. ccache-swig is ccache plus support for SWIG. +%endif + +%package doc +Summary: Documentation files for SWIG +License: BSD +Group: Development/Tools +BuildArch: noarch + +%description doc +This package contains documentation for SWIG and useful examples + +%package gdb +Summary: Commands for easier debugging of SWIG +License: BSD +Requires: swig + +%description gdb +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 + +for all in CHANGES README; do + iconv -f ISO88591 -t UTF8 < $all > $all.new + touch -r $all $all.new + mv -f $all.new $all +done + +%build +./autogen.sh + +# 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. +%configure \ + --without-ocaml \ +%if %{python2lang} + --with-python=%__python2\ +%else + --without-python \ +%endif + --with-python3=%__python3 \ +%if %{phplang} + --with-php=%{__php} \ +%endif +%if ! %{javalang} + --without-java \ +%endif +%if ! %{Rlang} + --without-r \ +%endif +%if ! %{golang} + --without-go \ +%endif +%if %{octave} + --with-octave=/usr/bin/octave \ + --without-maximum-compile-warnings \ +%endif +%if %{without build_ccache_swig} + --disable-ccache \ +%endif +; +make %{?_smp_mflags} + +%if %{with testsuite} +# Test suite +make check +%endif + +%install +# Remove all arch dependent files in Examples/ created during tests +make clean-examples + +pushd Examples/ +# Remove all arch dependent files in Examples/ +find -type f -name 'Makefile.in' -delete -print + +# We don't want to ship files below. +rm -rf test-suite +find -type f -name '*.dsp' -delete -print +find -type f -name '*.dsw' -delete -print + +# Convert files to UNIX format +for all in `find -type f`; do + dos2unix -k $all + chmod -x $all +done +popd + +make DESTDIR=%{buildroot} install + +################################################# +# Use help output for generating of man page swig +echo "Options:" >help_swig +%{buildroot}%{_bindir}/swig --help >>help_swig + +# Update the output to be correctly formatted be help2man +sed -i -e 's/^\(\s\+-[^-]\+\)- \(.*\)$/\1 \2/' help_swig +sed -i -e 's/^\(\s\+-\w\+-[^-]*\)- \(.*\)$/\1 \2/' help_swig + +# Generate a helper script that will be used by help2man +cat >h2m_helper_swig <<'EOF' +#!/bin/bash +[ "$1" == "--version" ] && echo "" || cat help_swig +EOF +chmod a+x h2m_helper_swig + +# Generate man page +help2man -N --section 1 ./h2m_helper_swig --include %{SOURCE1} -o %{name}.1 + +%if %{with build_ccache_swig} +######################################################## +# Use help output for generating of man page ccache-swig +%{buildroot}%{_bindir}/ccache-swig -h >>help_ccache + +# Update the output to be correctly formatted be help2man +sed -i -e '/compiler cache/ d' help_ccache +sed -i -e '/Copyright/ d' help_ccache +sed -i -e 's/^Usage:/[synopsis]/' help_ccache +sed -i -e 's/^Options:/[options]/' help_ccache +sed -i -e 's/^\s\+/ /' help_ccache +sed -i -e 's/^\(-[^- ] <\w\+>\s\+\) \(\w.\+\)$/ \1 \2/' help_ccache +sed -i -e 's/^\(-[^- ]\s\+\) \(\w.\+\)$/ \1 \2/' help_ccache + +# Generate a helper script that will be used by help2man +cat >h2m_helper_ccache <<'EOF' +#!/bin/bash +[ "$1" == "--version" ] && echo "" +[ "$1" == "--help" ] && echo "" || echo "" +EOF +chmod a+x h2m_helper_ccache + +cat %{SOURCE2} >>help_ccache +sed -i -e 's#@DOCDIR@#%{_docdir}#' help_ccache + +# Generate man page +help2man -N --section 1 ./h2m_helper_ccache --include help_ccache -o ccache-swig.1 +%endif + +# Add man page for swig to repository +mkdir -p %{buildroot}%{_mandir}/man1/ +install -p -m 0644 %{name}.1 %{buildroot}%{_mandir}/man1/ +%if %{with build_ccache_swig} +install -p -m 0644 ccache-swig.1 %{buildroot}%{_mandir}/man1/ +%endif + +# Quiet some rpmlint complaints - remove empty file +rm -f %{buildroot}%{_datadir}/%name/%{version}/octave/std_carray.i + +%if %{with build_ccache_swig} +# Enable ccache-swig by default +mkdir -p %{buildroot}%{_sysconfdir}/profile.d/ +install -dm 755 %{buildroot}%{_sysconfdir}/profile.d +install -pm 644 %{SOURCE3} %{SOURCE4} %{buildroot}%{_sysconfdir}/profile.d +%endif + +# Add swig.gdb sub-package gdb +mkdir -p %{buildroot}%{_datadir}/%{name}/gdb +install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb + +%files +%{_bindir}/%{name} +%{_datadir}/%{name} +%exclude %{_datadir}/%{name}/gdb +%{_mandir}/man1/swig.1* +%license LICENSE LICENSE-GPL LICENSE-UNIVERSITIES +%doc ANNOUNCE CHANGES CHANGES.current +%doc COPYRIGHT README TODO + +%if %{with build_ccache_swig} +%files -n ccache-swig +%{_bindir}/ccache-swig +%config(noreplace) %{_sysconfdir}/profile.d/ccache-swig.*sh +%{_mandir}/man1/ccache-swig.1* +%endif + +%files doc +%license LICENSE LICENSE-GPL LICENSE-UNIVERSITIES +%doc Doc Examples COPYRIGHT + +%files gdb +%{_datadir}/%{name}/gdb + +%changelog +* Fri Apr 03 2020 Jitka Plesnikova - 3.0.12-19 +- Add missing checks for failures in calls to PyUnicode_AsUTF8String (bug#1804625) + +* Fri Jun 22 2018 Jitka Plesnikova - 3.0.12-18 +- Disable using of Python 2 + +* Tue Apr 24 2018 Jitka Plesnikova - 3.0.12-17 +- Backport upstream Coverity fixes (bug#1570037) +- Do not build ccache-swig on RHEL + +* Wed Feb 14 2018 Jitka Plesnikova - 3.0.12-16 +- Update conditions for tests +- Fix configure to properly check version of Go 1.10 + +* Fri Feb 09 2018 Fedora Release Engineering - 3.0.12-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 23 2018 Jonathan Wakely - 3.0.12-14 +- Rebuilt for Boost 1.66 + +* Tue Nov 21 2017 Jitka Plesnikova - 3.0.12-13 +- Disable PHP tests, because they fail with PHP 7.2.0-RC + +* Wed Sep 20 2017 Jitka Plesnikova - 3.0.12-12 +- Fix generated code for constant expressions containing wchar_t L + literals + +* Thu Sep 07 2017 Jared Smith - 3.0.12-11 +- Add patch to support NodeJS versions 7 and 8, fixes FTBFS + +* Thu Aug 03 2017 Fedora Release Engineering - 3.0.12-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 3.0.12-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jun 14 2017 Jitka Plesnikova - 3.0.12-8 +- Fixed tests to building on Perl 5.26 without dot in INC + +* Mon May 15 2017 Fedora Release Engineering - 3.0.12-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Sat Apr 29 2017 Björn Esser - 3.0.12-6 +- Rebuilt for bootstrapping new arch: s390x + +* Mon Feb 13 2017 Björn Esser - 3.0.12-5 +- Rebuilt with R-testsuite enabled + +* Sat Feb 11 2017 Fedora Release Engineering - 3.0.12-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Feb 01 2017 Björn Esser - 3.0.12-3 +- Rebuilt with Octave-testsuite enabled + +* Sun Jan 29 2017 Björn Esser - 3.0.12-2 +- Rebuilt for Boost 1.63 + +* Sat Jan 28 2017 Björn Esser - 3.0.12-1 +- Update to 3.0.12 +- Drop Patch1 and Patch2, applied in upstream-tarball +- Build without Octave and R testsuite, since they are broken due to GCC-7 + +* Sat Jan 14 2017 Björn Esser - 3.0.11-2 +- Add Patch1 from upstream + - Do not dump Octave core in examples/test suite scripts +- Add Patch2 for Fedora >= 26, backported from upstream + - Support for Octave 4.2 + +* Mon Jan 02 2017 Jitka Plesnikova - 3.0.11-1 +- Update to 3.0.11 + - Add support for PHP 7 + - Disable guile tests + +* Wed Oct 19 2016 Jitka Plesnikova - 3.0.10-2 +- Sub-package file swig.gdb (bug #1332673) + +* Mon Jun 13 2016 Jitka Plesnikova - 3.0.10-1 +- Update to 3.0.10 + +* Wed May 25 2016 Jitka Plesnikova - 3.0.8-8 +- Fix Ruby opaque pointer handling (bug #1299502) + +* Mon Apr 18 2016 Jitka Plesnikova - 3.0.8-7 +- Add support for Go 1.6 + +* Fri Mar 11 2016 Michal Toman - 3.0.8-6 +- Do not build R, Java and Go on MIPS + +* Tue Mar 01 2016 Jitka Plesnikova - 3.0.8-5 +- Used updated upstream fix for GCC 6 issue + +* Mon Feb 22 2016 Jitka Plesnikova - 3.0.8-4 +- Patched to build against GCC 6 +- Disable Go tests, because they failed against new Go 1.6 + +* Fri Feb 05 2016 Fedora Release Engineering - 3.0.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 14 2016 Jitka Plesnikova - 3.0.8-2 +- Move ccache-swig to sub-package +- Generate man page for ccache-swig from help + +* Mon Jan 04 2016 Jitka Plesnikova - 3.0.8-1 +- Update to 3.0.8 + +* Sun Dec 06 2015 Björn Esser - 3.0.7-10 +- fix hunk-offsets in patches + +* Sun Dec 06 2015 Björn Esser - 3.0.7-9 +- add Patch10: Python 3.5, -builtin, excess elements in struct initializer +- add Patch11: Fix incorrect director_classic_runme.py test +- add Patch12: Python SystemError fix with -builtin +- add Patch13: size_type-correction for SwigPySequence_Cont +- add Patch14: Python use Py_ssize_t instead of int for better portability +- add Patch15: Add python inplace-operator caveats to pyopers.swg + +* Wed Oct 21 2015 David Sommerseth - 3.0.7-8 +- Ignore locally installed ccache when running CCache unit tests +- Resolves: bz#1274031 + +* Wed Sep 16 2015 Jitka Plesnikova - 3.0.7-7 +- Remove the old setools patch. The bug was already fixed by upstream +- Resolves: bz#1180257 + +* Mon Sep 14 2015 Jitka Plesnikova - 3.0.7-6 +- Fix Ruby tracking code (BZ#1225140) + +* Thu Sep 03 2015 Jonathan Wakely - 3.0.7-5 +- Rebuilt for Boost 1.59 + +* Tue Sep 01 2015 Jitka Plesnikova - 3.0.7-4 +- Disable Ruby tests + +* Thu Aug 27 2015 Jonathan Wakely - 3.0.7-3 +- Rebuilt for Boost 1.59 + +* Wed Aug 05 2015 Jonathan Wakely 3.0.7-2 +- Rebuilt for Boost 1.58 + +* Tue Aug 04 2015 Björn Esser - 3.0.7-1 +- Update to 3.0.7 (#1249845) +- Dropped Patch2, changes applied in upstream tarball + +* Wed Jul 29 2015 Fedora Release Engineering - 3.0.6-6 +- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159 + +* Thu Jul 23 2015 Jitka Plesnikova - 3.0.6-5 +- rebuild for Boost 1.58 + +* Thu Jul 23 2015 Jitka Plesnikova - 3.0.6-4 +- Disable Ruby tests on Fedora 23 and higher when building on armv7 +- Update list of Perl dependencies + +* Wed Jul 22 2015 David Tardon - 3.0.6-3 +- rebuild for Boost 1.58 + +* Fri Jul 10 2015 Orion Poplawski - 3.0.6-2 +- Add patch for octave 4.0.0 support + +* Mon Jul 06 2015 Björn Esser - 3.0.6-1 +- Update to 3.0.6 (#1240107) +- Dropped Patch2 and Patch3, changes applied in upstream tarball + +* Fri Jun 19 2015 Fedora Release Engineering - 3.0.5-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 26 2015 Dan Horák - 3.0.5-7 +- skip ruby also on s390 (#1225140) + +* Sat Apr 25 2015 Björn Esser - 3.0.5-6 +- Updated Patch3 with a more elaborated approach + +* Sat Apr 04 2015 Björn Esser - 3.0.5-5 +- Disable Ruby-testsuite on fc23 when building on armv7. It currently + segfaults for unknown reason. +- Add a notice about Patch2 got accepted by upstream and can be dropped + on next version. + +* Fri Apr 03 2015 Björn Esser - 3.0.5-4 +- Add Patch3 to fix segfaults of Python-wrappers when generating + code with `-buildin -modern -modernargs`-flags + +* Thu Feb 19 2015 Orion Poplawski - 3.0.5-3 +- Rebuild for gcc 5 C++11 ABI + +* Tue Feb 10 2015 Björn Esser - 3.0.5-2 +- Enable ccache-swig by default, if ccache is installed (#1176861) + +* Tue Feb 03 2015 Jitka Plesnikova - 3.0.5-1 +- Update to 3.0.5 (#1178440) + +* Tue Jan 27 2015 Petr Machata - 3.0.2-3 +- Rebuild for boost 1.57.0 + +* Mon Aug 18 2014 Fedora Release Engineering - 3.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Mon Jun 09 2014 Jitka Plesnikova - 3.0.2-1 +- Update to 3.0.2 + +* Sun Jun 08 2014 Fedora Release Engineering - 3.0.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu May 29 2014 Jitka Plesnikova - 3.0.1-1 +- Update to 3.0.1 +- Updated parameters for configure and conditions for BRs + +* Fri May 23 2014 Petr Machata - 3.0.0-7 +- Rebuild for boost 1.55.0 + +* Thu May 22 2014 Dan Horák 3.0.0-6 +- java unit tests fail on s390(x), too. disable for now + +* Mon May 12 2014 Peter Robinson 3.0.0-5 +- unit tests fail on aarch64, too. disable for now + +* Fri Apr 25 2014 Peter Robinson 3.0.0-4 +- No golang or R on aarch64 (currently) + +* Tue Apr 22 2014 Karsten Hopp 3.0.0-3 +- golang is exclusivearch %%{ix86} x86_64 %%{arm}, don't BR it on ppc*, s390* +- unit tests fail on other ppc archs, too. disable for now + +* Fri Mar 28 2014 Jitka Plesnikova - 3.0.0-2 +- Small changes to enable ppc64le (BZ#1081724) + +* Thu Mar 20 2014 Jitka Plesnikova - 3.0.0-1 +- Update to 3.0.0 +- Update BRs to run tests for Java, Ruby, Lua, R, Go +- Replace %%define by %%global (BZ#1063589) +- Remove Group tag (BZ#1063589) +- Generate man page from help to have the correct list of options + +* Fri Feb 28 2014 Orion Poplawski - 2.0.12-1 +- Update to 2.0.12 +- A patch to fix guile locale + +* Wed Oct 09 2013 Jitka Plesnikova - 2.0.11-2 +- Use bconds for enabling testsuite + +* Mon Sep 16 2013 Jitka Plesnikova - 2.0.11-1 +- Update to 2.0.11 + +* Wed Aug 21 2013 Jitka Plesnikova - 2.0.10-4 +- Fixed BZ#994120 + - Remove the req/prov filtering from version docdir (BZ#489421), because + it is not needed + +* Sun Aug 04 2013 Fedora Release Engineering - 2.0.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue Jul 30 2013 Petr Machata - 2.0.10-2 +- Rebuild for boost 1.54.0 + +* Fri May 31 2013 Jitka Plesnikova - 2.0.10-1 +- Update to 2.0.10 +- swig203-rh706140.patch merged +- swig204-rh752054.patch merged +- Create swig-2.0.10-Fix-x390-build.patch + +* Fri May 24 2013 Jitka Plesnikova - 2.0.9-3 +- Add man page for swig (BZ#948407) + +* Fri Feb 15 2013 Fedora Release Engineering - 2.0.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Jan 07 2013 Adam Tkac 2.0.9-1 +- update to 2.0.9 + +* Wed Sep 12 2012 Adam Tkac 2.0.8-1 +- update to 2.0.8 (#851364) +- swig207-rh830660.patch merged +- swig207-r13128.patch merged +- swig-rh841245.patch merged + +* Thu Jul 19 2012 Adam Tkac 2.0.7-4 +- don't clean "bool" definition in PERL 5 environment (#841245) + +* Wed Jun 27 2012 Adam Tkac 2.0.7-3 +- fix building of setools package + +* Tue Jun 12 2012 Adam Tkac 2.0.7-2 +- fix generating of python3 wrappers (#830660) +- don't crash when attepmting to warn about wrong descructor (#830249) + +* Thu Jun 07 2012 Adam Tkac 2.0.7-1 +- update to 2.0.7 +- swig-1.3.23-pylib.patch is no longer needed + +* Thu May 10 2012 Adam Tkac 2.0.6-1 +- update to 2.0.6 + +* Mon Apr 23 2012 Adam Tkac 2.0.5-1 +- update to 2.0.5 +- patches merged + - swig204-rh753321.patch + - swig204-rh679948.patch + - swig204-rh770696.patch + +* Thu Apr 19 2012 Adam Tkac - 2.0.4-7 +- drop Octave support on RHEL + +* Fri Feb 10 2012 Petr Pisar - 2.0.4-6 +- Rebuild against PCRE 8.30 + +* Thu Jan 05 2012 Adam Tkac 2.0.4-5 +- fix for PHP 5.4 bindings (#770696) + +* Tue Nov 15 2011 Adam Tkac 2.0.4-4 +- don't apply patch for #752054 till guile2 gets into distro + +* Mon Nov 14 2011 Adam Tkac 2.0.4-3 +- backport r12814 from trunk (#753321) +- use scm_to_utf8_string instead of SCM_STRING_CHARS in guile bindings (#752054) +- improve Octave compatibility (#679948) + +* Mon Aug 1 2011 Nick Bebout 2.0.4-2 +- rebuild to fix 2.0.3 being tagged in over 2.0.4-1 + +* Mon Jun 20 2011 Adam Tkac 2.0.4-1 +- update to 2.0.4 +- patches merged + - swig200-rh666429.patch + - swig200-rh623854.patch + +* Mon Jun 20 2011 Marcela Mašláňová 2.0.3-3 +- Perl mass rebuild + +* Fri May 20 2011 Adam Tkac 2.0.3-2 +- make guile generator compatible with guile2 (#706140) + +* Fri Apr 22 2011 Adam Tkac 2.0.3-1 +- update to 2.0.3 +- swig202-rh691513.patch merged + +* Tue Mar 29 2011 Adam Tkac 2.0.2-2 +- bacport fix for preprocessor regression (#691513) + +* Mon Feb 21 2011 Adam Tkac 2.0.2-1 +- update to 2.0.2 + +* Wed Feb 16 2011 Adam Tkac 2.0.1-4 +- improve fix for PySlice issue (#666429) + +* Wed Feb 09 2011 Fedora Release Engineering - 2.0.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Jan 03 2011 Adam Tkac 2.0.1-2 +- attempt to fix PySlice* API/ABI issues with the Python 3.2 (#666429) + +* Thu Oct 07 2010 Adam Tkac 2.0.1-1 +- update to 2.0.1 (#640354) +- BR pcre-devel + +* Fri Aug 27 2010 Adam Tkac 2.0.0-5 +- make PyCObjects->PyCapsule patch C++ compatible (#627310) + +* Fri Aug 20 2010 Adam Tkac 2.0.0-4 +- improve patch for #623854 (PyCObjects->PyCapsule transition) + +* Tue Aug 17 2010 Adam Tkac 2.0.0-3 +- python: use new PyCapsule API instead of former PyCObjects API + +* Mon Jul 12 2010 Adam Tkac 2.0.0-2 +- add LICENSE-GPL, LICENSE-UNIVERSITIES and COPYRIGHT to %%doc +- include all license files in the -doc subpkg + +* Thu Jun 24 2010 Adam Tkac 2.0.0-1 +- update to 2.0.0 +- license changed to GPLv3+ and BSD + +* Mon Feb 22 2010 Adam Tkac 1.3.40-5 +- s/LGPL/LGPLv2+ + +* Thu Feb 18 2010 Adam Tkac 1.3.40-4 +- correct license field again + +* Thu Feb 18 2010 Adam Tkac 1.3.40-3 +- correct license field + +* Mon Dec 07 2009 Adam Tkac 1.3.40-2 +- package review related fixes (#226442) + +* Wed Sep 02 2009 Adam Tkac 1.3.40-1 +- update to 1.3.40 + +* Tue Aug 11 2009 Adam Tkac 1.3.39-4 +- correct source URL + +* Mon Aug 03 2009 Adam Tkac 1.3.39-3 +- rebuilt + +* Sun Jul 26 2009 Fedora Release Engineering - 1.3.39-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Mar 30 2009 Adam Tkac 1.3.39-1 +- update to 1.3.39 +- swig-1.3.38-rh485540.patch was merged +- add Example/ to -doc again (#489077), filter provides correctly + +* Tue Mar 10 2009 Adam Tkac 1.3.38-5 +- revert #489077 enhancement due #489421 + +* Mon Mar 09 2009 Adam Tkac 1.3.38-4 +- moved documentation to -doc subpackage and build it as noarch +- added Example/ directory to -doc (#489077) +- fixed build root + +* Wed Feb 25 2009 Fedora Release Engineering - 1.3.38-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 16 2009 Adam Tkac 1.3.38-2 +- handle -co option gracefully (#485540) + +* Thu Feb 12 2009 Adam Tkac 1.3.38-1 +- updated to 1.3.38 + +* Thu Dec 04 2008 Adam Tkac 1.3.36-2 +- #470811 is fixed => dropped workaround + +* Mon Nov 10 2008 Adam Tkac 1.3.36-1 +- updated to 1.3.36 +- finally dropped swig-arch.patch +- temporary workaround rpm bug #470811 + +* Fri May 16 2008 Adam Tkac 1.3.35-2 +- readded swig-arch.patch, will be kept downstream + +* Mon May 05 2008 Adam Tkac 1.3.35-1 +- updated to latest upstream release + +* Mon Feb 18 2008 Fedora Release Engineering - 1.3.33-2 +- Autorebuild for GCC 4.3 + +* Thu Nov 29 2007 Adam Tkac 1.3.33-1 +- 1.3.33 +- removed swig-arch.patch because upstream will never accept + it ("swig is not low-level") + +* Wed Aug 22 2007 Adam Tkac 1.31.1-1 +- rebuild (BuildID feature) +- BuildRequires gawk + +* Tue Nov 28 2006 Adam Tkac 1.31.1-0 +- updated to 1.2.31 (#216991) + +* Tue Nov 07 2006 Adam Tkac 1.3.29-2 +- swig can determine architecture now (#211095) + +* Mon Aug 28 2006 Jitka Kudrnacova -1.3.29-1 +-rebuilt + +* Tue Jul 18 2006 Jitka Kudrnacova - 1.3.29-0.3 +- rebuilt + +* Fri Jun 30 2006 Jitka Kudrnacova - 1.3.29-0.2 +- Build requires autoconf, automake (bug #197132) + +* Wed Apr 19 2006 Jitka Kudrnacova - 1.3.29-0.1 +- folder /usr/share/swig should be owned by swig package (bug #189145) + +* Tue Mar 28 2006 Jitka Kudrnacova - 1.3.29-0 +- update to swig-1.2.29-0 + +* Fri Feb 10 2006 Jesse Keating - 1.3.24-2.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.3.24-2.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Mar 02 2005 Phil Knirsch 1.3.24-2 +- bump release and rebuild with gcc 4 + +* Thu Feb 03 2005 Karsten Hopp 1.3.24-1 +- update + +* Wed Dec 01 2004 Phil Knirsch 1.3.23-2 +- rebuild + +* Tue Nov 23 2004 Karsten Hopp 1.3.23-1 +- update +- new pylib patch +- remove destdir patch, swig.m4 is no longer included +- remove ldconfig patch, swig now uses *-config to find out linker options + +* Mon Nov 8 2004 Jeremy Katz - 1.3.21-7 +- rebuild against python 2.4 + +* Mon Oct 11 2004 Tim Waugh 1.3.21-6 +- Build requires tcl-devel (bug #134788). + +* Thu Sep 30 2004 Joe Orton 1.3.21-5 +- don't output -L$libdir in -ldflags + +* Wed Sep 22 2004 Florian La Roche +- add ldconfig calls to post/postun + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Wed May 19 2004 Joe Orton 1.3.21-2 +- restore missing runtime libraries + +* Tue May 04 2004 Phil Knirsch +- Update to swig-1.3.21 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Sep 23 2003 Florian La Roche +- allow compiling without tcl/guile + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Sun May 18 2003 Joe Orton 1.3.19-3 +- patch to pick up python libdir correctly + +* Sun May 18 2003 Joe Orton 1.3.19-2 +- add BuildPrereqs to ensure all bindings are built + +* Wed May 14 2003 Phil Knirsch 1.3.19-1 +- Update to swig-1.3.19 +- Major cleanup in specfile, too. :-) +- New lib64 fix. + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Wed Nov 27 2002 Tim Powers 1.1p5-21 +- lib64'ize + +* Fri Aug 30 2002 Phil Knirsch 1.1p5-20 +- Patch by Lon Hohberger for ia64. + +* Wed Aug 28 2002 Phil Knirsch 1.1p5-19 +- Added multilib safe patch from arjan (#72523) + +* Tue Aug 13 2002 Karsten Hopp +- rebuilt with gcc-3.2 + +* Sat Aug 10 2002 Elliot Lee +- rebuilt with gcc-3.2 (we hope) + +* Mon Jul 22 2002 Tim Powers +- rebuild using gcc-3.2-0.1 + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Fri Feb 8 2002 Bill Nottingham +- rebuild + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Fri Apr 27 2001 Nalin Dahyabhai +- use %%{_tmppath} instead of /var/tmp +- remove the postscript docs (pdftops from the xpdf pkg converts them just fine) + +* Wed Sep 13 2000 Tim Powers +- rebuilt for 7.1 + +* Mon Jul 24 2000 Prospector +- rebuilt + +* Mon Jul 17 2000 Tim Powers +- for some reason defattr wasn't before the docs, fixed + +* Mon Jul 10 2000 Tim Powers +- rebuilt + +* Fri Jun 2 2000 Tim Powers +- spec file cleanups + +* Sat May 20 2000 Tim Powers +- rebuilt for 7.0 +- man pages in /usr/share/man + +* Wed Jan 19 2000 Tim Powers +- bzipped sources to conserve space + +* Thu Jul 22 1999 Tim Powers +- rebuilt for 6.1 + +* Thu Apr 15 1999 Michael Maher +- built package for 6.0 + +* Tue Sep 15 1998 Michael Maher +- built package diff --git a/swig308-Do-not-use-isystem.patch b/swig308-Do-not-use-isystem.patch new file mode 100644 index 0000000..48f0105 --- /dev/null +++ b/swig308-Do-not-use-isystem.patch @@ -0,0 +1,13 @@ +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