From 81741091cfedb3cade0dfa2ae2375fcb40ccfa23 Mon Sep 17 00:00:00 2001
From: Peter Robinson
Date: Tue, 25 Feb 2020 01:00:31 +0000
Subject: [PATCH 01/67] Add fix for newer NodeJS version, minor spec cleanups
---
swig-Upgrade-to-support-newer-NodeJS.patch | 1863 ++++++++++++++++++++
swig.spec | 16 +-
2 files changed, 1871 insertions(+), 8 deletions(-)
create mode 100644 swig-Upgrade-to-support-newer-NodeJS.patch
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.spec b/swig.spec
index 996ead8..dbe1d80 100644
--- a/swig.spec
+++ b/swig.spec
@@ -37,7 +37,7 @@
%{!?Rlang:%global Rlang 1}
%bcond_without build_ccache_swig
%endif
-%ifarch aarch64 %{arm} %{mips} ppc64le ppc %{power64} s390 s390x
+%ifarch aarch64 %{arm} %{mips} ppc %{power64} s390 s390x
%{!?javalang:%global javalang 0}
%else
%{!?javalang:%global javalang 1}
@@ -53,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.1
-Release: 7%{?dist}
+Release: 8%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -75,6 +75,8 @@ Patch2: swig-4.0.1-Add-support-for-Ruby-2.7.patch
# Fix crash in Python backend when using empty docstrings
# https://github.com/swig/swig/pull/1710
Patch3: swig-4.0.1-Fix-crash-in-Python-backend-when-using-empty-docstrings.patch
+# https://github.com/swig/swig/pull/1702
+Patch4: swig-Upgrade-to-support-newer-NodeJS.patch
BuildRequires: perl-interpreter, pcre-devel
%if %{python2lang}
@@ -173,12 +175,7 @@ This package contains file with commands for easier debugging of SWIG
in gdb.
%prep
-%setup -q -n swig-%{version}
-
-%patch0 -p1 -b .isystem
-%patch1 -p1 -b .global
-%patch2 -p1 -b .ruby27
-%patch3 -p1 -b .python
+%autosetup -p1
for all in CHANGES README; do
iconv -f ISO88591 -t UTF8 < $all > $all.new
@@ -351,6 +348,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Tue Feb 25 2020 Peter Robinson - 4.0.1-8
+- Add fix for newer NodeJS version
+
* Tue Feb 04 2020 Michael Jeanson - 4.0.1-7
- Fix crash in Python backend when using empty docstrings
From 97c4bc9ad91753ec853c45e3d7587e4070b2ba24 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Mon, 9 Mar 2020 10:07:01 +0100
Subject: [PATCH 02/67] Remove BR for Python 2 (bug#1807547)
---
swig.spec | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/swig.spec b/swig.spec
index dbe1d80..d21ec0c 100644
--- a/swig.spec
+++ b/swig.spec
@@ -4,9 +4,9 @@
%if %{without testsuite}
%global tcl 0
%global lualang 0
+%global perllang 0
%global phplang 0
%global rubylang 0
-%global python2lang 0
%global python3lang 0
%global golang 0
%global octave 0
@@ -17,6 +17,7 @@
%{!?tcl:%global tcl 1}
%{!?guile:%global guile 0}
%{!?lualang:%global lualang 1}
+%{!?perllang:%global perllang 1}
%{!?phplang:%global phplang 1}
# Disable Ruby test failed with swig 4.0.0 on s390
%ifarch s390x
@@ -24,7 +25,6 @@
%else
%{!?rubylang:%global rubylang 1}
%endif
-%{!?python2lang:%global python2lang 1}
%{!?python3lang:%global python3lang 1}
%if 0%{?rhel}
@@ -53,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.1
-Release: 8%{?dist}
+Release: 9%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -79,9 +79,6 @@ Patch3: swig-4.0.1-Fix-crash-in-Python-backend-when-using-empty-docstrings.patch
Patch4: swig-Upgrade-to-support-newer-NodeJS.patch
BuildRequires: perl-interpreter, pcre-devel
-%if %{python2lang}
-BuildRequires: python2-devel
-%endif
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: autoconf, automake, gawk, dos2unix
BuildRequires: gcc-c++
@@ -191,13 +188,9 @@ done
# It causes that log had more then 600M.
%configure \
--without-ocaml \
-%if %{python2lang}
- --with-python=%__python2\
-%else
- --without-python \
-%endif
%if %{python3lang}
--with-python3=%__python3 \
+ --with-2to3=%{_bindir}/2to3 \
%else
--without-python3 \
%endif
@@ -206,6 +199,9 @@ done
%else
--without-php \
%endif
+%if ! %{perllang}
+ --without-perl5 \
+%endif
%if ! %{tcl}
--without-tcl \
%endif
@@ -219,7 +215,7 @@ done
--without-go \
%endif
%if %{octave}
- --with-octave=/usr/bin/octave \
+ --with-octave=%{_bindir}/octave \
--without-maximum-compile-warnings \
%endif
%if %{without build_ccache_swig}
@@ -348,6 +344,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Fri Mar 06 2020 Jitka Plesnikova - 4.0.1-9
+- Remove BR for Python 2 (bug#1807547)
+
* Tue Feb 25 2020 Peter Robinson - 4.0.1-8
- Add fix for newer NodeJS version
From 67adf0affe5871a3a22d2f649d1ed6291df87840 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Wed, 10 Jun 2020 10:48:04 +0200
Subject: [PATCH 03/67] Update to 4.0.2
---
.gitignore | 1 +
sources | 2 +-
swig-4.0.1-Add-support-for-Ruby-2.7.patch | 296 ----------
...-generated-for-Ruby-global-variables.patch | 534 ------------------
...-backend-when-using-empty-docstrings.patch | 88 ---
swig-4.0.1-ruby27-minimum.patch | 11 -
swig.spec | 19 +-
swig308-Do-not-use-isystem.patch | 13 -
8 files changed, 8 insertions(+), 956 deletions(-)
delete mode 100644 swig-4.0.1-Add-support-for-Ruby-2.7.patch
delete mode 100644 swig-4.0.1-Fix-code-generated-for-Ruby-global-variables.patch
delete mode 100644 swig-4.0.1-Fix-crash-in-Python-backend-when-using-empty-docstrings.patch
delete mode 100644 swig-4.0.1-ruby27-minimum.patch
delete mode 100644 swig308-Do-not-use-isystem.patch
diff --git a/.gitignore b/.gitignore
index 5a3031c..2286b59 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,4 @@ swig-2.0.0.tar.gz
/swig-3.0.12.tar.gz
/swig-4.0.0.tar.gz
/swig-4.0.1.tar.gz
+/swig-4.0.2.tar.gz
diff --git a/sources b/sources
index 49043de..f9f798f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (swig-4.0.1.tar.gz) = 595ef01cb83adfa960ceed9c325a9429192549e8d1e9aa3ab35a4301512a61d82e2e89a8c7939c2a5a0811254ea1832a443bd387e11459eb2b0bafc563ad1308
+SHA512 (swig-4.0.2.tar.gz) = 05e7da70ce6d9a733b96c0bcfa3c1b82765bd859f48c74759bbf4bb1467acb1809caa310cba5e2b3280cd704fca249eaa0624821dffae1d2a75097c7f55d14ed
diff --git a/swig-4.0.1-Add-support-for-Ruby-2.7.patch b/swig-4.0.1-Add-support-for-Ruby-2.7.patch
deleted file mode 100644
index 359422b..0000000
--- a/swig-4.0.1-Add-support-for-Ruby-2.7.patch
+++ /dev/null
@@ -1,296 +0,0 @@
-From 00e291b319bd6b58bf061feee3721a58c9c6be32 Mon Sep 17 00:00:00 2001
-From: Thomas Reitmayr
-Date: Mon, 30 Dec 2019 20:11:03 +0100
-Subject: [PATCH] Add support for Ruby 2.7
-
-This commit fixes the signatures of various callback methods
-and cleans up the macro definitions used for casting callbacks.
-
-Note that the transparent version of the macro RUBY_METHOD_FUNC
-is currently masked behind RUBY_DEVEL, see commit
-https://github.com/ruby/ruby/commit/1d91feaf13e0ffe04b2dabc6e77e4101b6d0bb07
-In order to still support strict signature checking and prevent
-nasty deprecation warnings, the use of RUBY_METHOD_FUNC had to
-be replaced with VALUEFUNC.
----
- Lib/ruby/rubyclasses.swg | 14 +++++++-------
- Lib/ruby/rubyhead.swg | 26 +++++++++-----------------
- Lib/ruby/rubyprimtypes.swg | 15 ++++++++-------
- Lib/ruby/rubytracking.swg | 10 +++++-----
- Source/Modules/ruby.cxx | 22 +++++++++-------------
- 5 files changed, 38 insertions(+), 49 deletions(-)
-
-diff --git a/Lib/ruby/rubyclasses.swg b/Lib/ruby/rubyclasses.swg
-index f7b51bdcc..b345fcebe 100644
---- a/Lib/ruby/rubyclasses.swg
-+++ b/Lib/ruby/rubyclasses.swg
-@@ -174,7 +174,7 @@ namespace swig {
- return rb_inspect(_obj);
- }
-
-- static VALUE swig_rescue_swallow(VALUE)
-+ static VALUE swig_rescue_swallow(VALUE, VALUE)
- {
- /*
- VALUE errstr = rb_obj_as_string(rb_errinfo());
-@@ -203,8 +203,8 @@ namespace swig {
- args.id = op_id;
- args.nargs = 1;
- args.target = VALUE(other);
-- ret = rb_rescue(RUBY_METHOD_FUNC(swig_rescue_funcall), VALUE(&args),
-- (RUBY_METHOD_FUNC(swig_rescue_swallow)), Qnil);
-+ ret = rb_rescue(VALUEFUNC(swig_rescue_funcall), VALUE(&args),
-+ (VALUEFUNC(swig_rescue_swallow)), Qnil);
- }
- if (ret == Qnil) {
- VALUE a = rb_funcall( _obj, hash_id, 0 );
-@@ -243,8 +243,8 @@ namespace swig {
- args.id = op_id;
- args.nargs = 0;
- args.target = Qnil;
-- ret = rb_rescue(RUBY_METHOD_FUNC(swig_rescue_funcall), VALUE(&args),
-- (RUBY_METHOD_FUNC(swig_rescue_swallow)), Qnil);
-+ ret = rb_rescue(VALUEFUNC(swig_rescue_funcall), VALUE(&args),
-+ (VALUEFUNC(swig_rescue_swallow)), Qnil);
- SWIG_RUBY_THREAD_END_BLOCK;
- return ret;
- }
-@@ -262,8 +262,8 @@ namespace swig {
- args.id = op_id;
- args.nargs = 1;
- args.target = VALUE(other);
-- ret = rb_rescue(RUBY_METHOD_FUNC(swig_rescue_funcall), VALUE(&args),
-- (RUBY_METHOD_FUNC(swig_rescue_swallow)), Qnil);
-+ ret = rb_rescue(VALUEFUNC(swig_rescue_funcall), VALUE(&args),
-+ (VALUEFUNC(swig_rescue_swallow)), Qnil);
- SWIG_RUBY_THREAD_END_BLOCK;
- return GC_VALUE(ret);
- }
-diff --git a/Lib/ruby/rubyhead.swg b/Lib/ruby/rubyhead.swg
-index 90f07cf68..9a0400eea 100644
---- a/Lib/ruby/rubyhead.swg
-+++ b/Lib/ruby/rubyhead.swg
-@@ -110,26 +110,18 @@
- * can be passed as an argument to API functions like Data_Wrap_Struct()
- * and Data_Make_Struct().
- */
--
--#ifdef __cplusplus
--# ifndef RUBY_METHOD_FUNC /* These definitions should work for Ruby 1.4.6 */
--# define PROTECTFUNC(f) ((VALUE (*)()) f)
--# define VALUEFUNC(f) ((VALUE (*)()) f)
--# define VOIDFUNC(f) ((void (*)()) f)
--# else
--# ifndef ANYARGS /* These definitions should work for Ruby 1.6 */
--# define PROTECTFUNC(f) ((VALUE (*)()) f)
--# define VALUEFUNC(f) ((VALUE (*)()) f)
--# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
--# else /* These definitions should work for Ruby 1.7+ */
--# define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f)
--# define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
--# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
--# endif
--# endif
-+#if defined(__cplusplus) && !defined(RB_METHOD_DEFINITION_DECL)
-+# define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f)
-+# define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
-+# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
-+# define VOID_ANYARGS_FUNC(f) ((void (*)(ANYARGS))(f))
-+# define INT_ANYARGS_FUNC(f) ((int (*)(ANYARGS))(f))
- #else
-+# define PROTECTFUNC(f) (f)
- # define VALUEFUNC(f) (f)
- # define VOIDFUNC(f) (f)
-+# define VOID_ANYARGS_FUNC(f) (f)
-+# define INT_ANYARGS_FUNC(f) (f)
- #endif
-
- /* Don't use for expressions have side effect */
-diff --git a/Lib/ruby/rubyprimtypes.swg b/Lib/ruby/rubyprimtypes.swg
-index 3a848191c..4b078deea 100644
---- a/Lib/ruby/rubyprimtypes.swg
-+++ b/Lib/ruby/rubyprimtypes.swg
-@@ -10,15 +10,16 @@
- %fragment("SWIG_ruby_failed","header")
- {
- SWIGINTERN VALUE
--SWIG_ruby_failed(void)
-+SWIG_ruby_failed(VALUE SWIGUNUSEDPARM(arg1), VALUE SWIGUNUSEDPARM(arg2))
- {
- return Qnil;
- }
- }
-
- %define %ruby_aux_method(Type, Method, Action)
--SWIGINTERN VALUE SWIG_AUX_##Method##(VALUE *args)
-+SWIGINTERN VALUE SWIG_AUX_##Method##(VALUE arg)
- {
-+ VALUE *args = (VALUE *)arg;
- VALUE obj = args[0];
- VALUE type = TYPE(obj);
- Type *res = (Type *)(args[1]);
-@@ -79,7 +80,7 @@ SWIG_AsVal_dec(long)(VALUE obj, long* val)
- VALUE a[2];
- a[0] = obj;
- a[1] = (VALUE)(&v);
-- if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2LONG), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) {
-+ if (rb_rescue(VALUEFUNC(SWIG_AUX_NUM2LONG), (VALUE)a, VALUEFUNC(SWIG_ruby_failed), 0) != Qnil) {
- if (val) *val = v;
- return SWIG_OK;
- }
-@@ -111,7 +112,7 @@ SWIG_AsVal_dec(unsigned long)(VALUE obj, unsigned long *val)
- VALUE a[2];
- a[0] = obj;
- a[1] = (VALUE)(&v);
-- if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2ULONG), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) {
-+ if (rb_rescue(VALUEFUNC(SWIG_AUX_NUM2ULONG), (VALUE)a, VALUEFUNC(SWIG_ruby_failed), 0) != Qnil) {
- if (val) *val = v;
- return SWIG_OK;
- }
-@@ -149,7 +150,7 @@ SWIG_AsVal_dec(long long)(VALUE obj, long long *val)
- VALUE a[2];
- a[0] = obj;
- a[1] = (VALUE)(&v);
-- if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2LL), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) {
-+ if (rb_rescue(VALUEFUNC(SWIG_AUX_NUM2LL), (VALUE)a, VALUEFUNC(SWIG_ruby_failed), 0) != Qnil) {
- if (val) *val = v;
- return SWIG_OK;
- }
-@@ -187,7 +188,7 @@ SWIG_AsVal_dec(unsigned long long)(VALUE obj, unsigned long long *val)
- VALUE a[2];
- a[0] = obj;
- a[1] = (VALUE)(&v);
-- if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2ULL), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) {
-+ if (rb_rescue(VALUEFUNC(SWIG_AUX_NUM2ULL), (VALUE)a, VALUEFUNC(SWIG_ruby_failed), 0) != Qnil) {
- if (val) *val = v;
- return SWIG_OK;
- }
-@@ -215,7 +216,7 @@ SWIG_AsVal_dec(double)(VALUE obj, double *val)
- VALUE a[2];
- a[0] = obj;
- a[1] = (VALUE)(&v);
-- if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2DBL), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) {
-+ if (rb_rescue(VALUEFUNC(SWIG_AUX_NUM2DBL), (VALUE)a, VALUEFUNC(SWIG_ruby_failed), 0) != Qnil) {
- if (val) *val = v;
- return SWIG_OK;
- }
-diff --git a/Lib/ruby/rubytracking.swg b/Lib/ruby/rubytracking.swg
-index b9fb249d8..221a68193 100644
---- a/Lib/ruby/rubytracking.swg
-+++ b/Lib/ruby/rubytracking.swg
-@@ -32,7 +32,7 @@ extern "C" {
- */
- static st_table* swig_ruby_trackings = NULL;
-
--static VALUE swig_ruby_trackings_count(ANYARGS) {
-+static VALUE swig_ruby_trackings_count(ID id, VALUE *var) {
- return SWIG2NUM(swig_ruby_trackings->num_entries);
- }
-
-@@ -69,7 +69,7 @@ SWIGRUNTIME void SWIG_RubyInitializeTrackings(void) {
- swig_ruby_trackings = (st_table*)NUM2SWIG(trackings_value);
- }
-
-- rb_define_virtual_variable("SWIG_TRACKINGS_COUNT", swig_ruby_trackings_count, NULL);
-+ rb_define_virtual_variable("SWIG_TRACKINGS_COUNT", VALUEFUNC(swig_ruby_trackings_count), VOID_ANYARGS_FUNC((rb_gvar_setter_t*)NULL));
- }
-
- /* Add a Tracking from a C/C++ struct to a Ruby object */
-@@ -118,13 +118,13 @@ SWIGRUNTIME void SWIG_RubyUnlinkObjects(void* ptr) {
- to the passed callback function. */
-
- /* Proxy method to abstract the internal trackings datatype */
--static int swig_ruby_internal_iterate_callback(void* ptr, VALUE obj, void(*meth)(void* ptr, VALUE obj)) {
-- (*meth)(ptr, obj);
-+static int swig_ruby_internal_iterate_callback(st_data_t ptr, st_data_t obj, st_data_t meth) {
-+ ((void (*) (void *, VALUE))meth)((void *)ptr, (VALUE)obj);
- return ST_CONTINUE;
- }
-
- SWIGRUNTIME void SWIG_RubyIterateTrackings( void(*meth)(void* ptr, VALUE obj) ) {
-- st_foreach(swig_ruby_trackings, (int (*)(ANYARGS))&swig_ruby_internal_iterate_callback, (st_data_t)meth);
-+ st_foreach(swig_ruby_trackings, INT_ANYARGS_FUNC(swig_ruby_internal_iterate_callback), (st_data_t)meth);
- }
-
- #ifdef __cplusplus
-diff --git a/Source/Modules/ruby.cxx b/Source/Modules/ruby.cxx
-index c8f582679..01b75befa 100644
---- a/Source/Modules/ruby.cxx
-+++ b/Source/Modules/ruby.cxx
-@@ -2191,6 +2191,7 @@ public:
- String *tm;
- String *getfname, *setfname;
- Wrapper *getf, *setf;
-+ const int assignable = is_assignable(n);
-
- // Determine whether virtual global variables shall be used
- // which have different getter and setter signatures,
-@@ -2206,7 +2207,7 @@ public:
- getfname = Swig_name_wrapper(getname);
- Setattr(n, "wrap:name", getfname);
- Printv(getf->def, "SWIGINTERN VALUE\n", getfname, "(", NIL);
-- Printf(getf->def, (use_virtual_var) ? "ID id" : "VALUE self");
-+ Printf(getf->def, (use_virtual_var) ? "ID id, VALUE *data" : "VALUE self");
- Printf(getf->def, ") {");
- Wrapper_add_local(getf, "_val", "VALUE _val");
-
-@@ -2229,8 +2230,8 @@ public:
-
- Wrapper_print(getf, f_wrappers);
-
-- if (!is_assignable(n)) {
-- setfname = NewString("NULL");
-+ if (!assignable) {
-+ setfname = NewString("(rb_gvar_setter_t *)NULL");
- } else {
- /* create setter */
- String* docs = docstring(n, AUTODOC_SETTER);
-@@ -2242,7 +2243,7 @@ public:
- Setattr(n, "wrap:name", setfname);
- Printf(setf->def, "SWIGINTERN ");
- if (use_virtual_var) {
-- Printv(setf->def, "void\n", setfname, "(VALUE _val, ID id) {", NIL);
-+ Printv(setf->def, "void\n", setfname, "(VALUE _val, ID id, VALUE *data) {", NIL);
- } else {
- Printv(setf->def, "VALUE\n", setfname, "(VALUE self, VALUE _val) {", NIL);
- }
-@@ -2273,7 +2274,7 @@ public:
- if (CPlusPlus) {
- Insert(getfname, 0, "VALUEFUNC(");
- Append(getfname, ")");
-- Insert(setfname, 0, (use_virtual_var) ? "(void (*)(ANYARGS))(" : "VALUEFUNC(");
-+ Insert(setfname, 0, (use_virtual_var) ? "VOID_ANYARGS_FUNC(" : "VALUEFUNC(");
- Append(setfname, ")");
- }
-
-@@ -2282,7 +2283,7 @@ public:
- case STATIC_VAR:
- /* C++ class variable */
- Printv(s, tab4, "rb_define_singleton_method(", klass->vname, ", \"", klass->strip(iname), "\", ", getfname, ", 0);\n", NIL);
-- if (!GetFlag(n, "feature:immutable")) {
-+ if (assignable) {
- Printv(s, tab4, "rb_define_singleton_method(", klass->vname, ", \"", klass->strip(iname), "=\", ", setfname, ", 1);\n", NIL);
- }
- Printv(klass->init, s, NIL);
-@@ -2293,16 +2294,11 @@ public:
- assert(current == NO_CPP);
- if (!useGlobalModule) {
- Printv(s, tab4, "rb_define_singleton_method(", modvar, ", \"", iname, "\", ", getfname, ", 0);\n", NIL);
-- if (!GetFlag(n, "feature:immutable")) {
-+ if (assignable) {
- Printv(s, tab4, "rb_define_singleton_method(", modvar, ", \"", iname, "=\", ", setfname, ", 1);\n", NIL);
- }
- } else {
-- Printv(s, tab4, "rb_define_virtual_variable(\"$", iname, "\", ", getfname, ", ", NIL);
-- if (GetFlag(n, "feature:immutable")) {
-- Printv(s, tab4, "0);\n", NIL);
-- } else {
-- Printv(s, tab4, setfname, ");\n", NIL);
-- }
-+ Printv(s, tab4, "rb_define_virtual_variable(\"$", iname, "\", ", getfname, ", ", setfname, ");\n", NIL);
- }
- Printv(f_init, s, NIL);
- Delete(s);
---
-2.21.1
-
diff --git a/swig-4.0.1-Fix-code-generated-for-Ruby-global-variables.patch b/swig-4.0.1-Fix-code-generated-for-Ruby-global-variables.patch
deleted file mode 100644
index 7e24cb8..0000000
--- a/swig-4.0.1-Fix-code-generated-for-Ruby-global-variables.patch
+++ /dev/null
@@ -1,534 +0,0 @@
-From 18a3ef391121d7c4d819448c929721fd1708b40b Mon Sep 17 00:00:00 2001
-From: Thomas Reitmayr
-Date: Sun, 27 Oct 2019 21:41:03 +0100
-Subject: [PATCH] Fix code generated for Ruby global variables
-
-This commit fixes swig#1653 by creating a Ruby virtual variable
-for a C/c++ global variable when SWIG is invoked with the
--globalmodule option.
----
- Doc/Manual/Ruby.html | 18 +++++++
- Examples/test-suite/common.mk | 2 +
- Examples/test-suite/global_immutable_vars.i | 24 +++++++++
- .../test-suite/global_immutable_vars_cpp.i | 24 +++++++++
- Examples/test-suite/ruby/Makefile.in | 4 ++
- .../ruby/global_immutable_vars_cpp_runme.rb | 47 +++++++++++++++++
- .../ruby/global_immutable_vars_runme.rb | 51 +++++++++++++++++++
- .../ruby_global_immutable_vars_cpp_runme.rb | 47 +++++++++++++++++
- .../ruby/ruby_global_immutable_vars_runme.rb | 51 +++++++++++++++++++
- .../test-suite/ruby_global_immutable_vars.i | 25 +++++++++
- .../ruby_global_immutable_vars_cpp.i | 23 +++++++++
- Source/Modules/ruby.cxx | 36 +++++++++----
- 12 files changed, 342 insertions(+), 10 deletions(-)
- create mode 100644 Examples/test-suite/global_immutable_vars.i
- create mode 100644 Examples/test-suite/global_immutable_vars_cpp.i
- create mode 100644 Examples/test-suite/ruby/global_immutable_vars_cpp_runme.rb
- create mode 100644 Examples/test-suite/ruby/global_immutable_vars_runme.rb
- create mode 100644 Examples/test-suite/ruby/ruby_global_immutable_vars_cpp_runme.rb
- create mode 100644 Examples/test-suite/ruby/ruby_global_immutable_vars_runme.rb
- create mode 100644 Examples/test-suite/ruby_global_immutable_vars.i
- create mode 100644 Examples/test-suite/ruby_global_immutable_vars_cpp.i
-
-diff --git a/Doc/Manual/Ruby.html b/Doc/Manual/Ruby.html
-index 3cfd1292c..6939a8a18 100644
---- a/Doc/Manual/Ruby.html
-+++ b/Doc/Manual/Ruby.html
-@@ -615,6 +615,24 @@ directive. For example:
- effect until it is explicitly disabled using %mutable.
-
-
-+Note: When SWIG is invoked with the -globalmodule option in
-+effect, the C/C++ global variables will be translated into Ruby global
-+variables. Type-checking and the optional read-only characteristic are
-+available in the same way as described above. However the example would
-+then have to be modified and executed in the following way:
-+
-+
-+
$ irb
-+irb(main):001:0> require 'Example'
-+true
-+irb(main):002:0> $variable1 = 2
-+2
-+irb(main):003:0> $Variable2 = 4 * 10.3
-+41.2
-+irb(main):004:0> $Variable2
-+41.2
-+
-+
-
-
-
-diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk
-index 5f7792810..008916a56 100644
---- a/Examples/test-suite/common.mk
-+++ b/Examples/test-suite/common.mk
-@@ -250,6 +250,7 @@ CPP_TEST_CASES += \
- funcptr_cpp \
- functors \
- fvirtual \
-+ global_immutable_vars_cpp \
- global_namespace \
- global_ns_arg \
- global_scope_types \
-@@ -689,6 +690,7 @@ C_TEST_CASES += \
- funcptr \
- function_typedef \
- global_functions \
-+ global_immutable_vars \
- immutable_values \
- inctest \
- infinity \
-diff --git a/Examples/test-suite/global_immutable_vars.i b/Examples/test-suite/global_immutable_vars.i
-new file mode 100644
-index 000000000..cd8cb184b
---- /dev/null
-+++ b/Examples/test-suite/global_immutable_vars.i
-@@ -0,0 +1,24 @@
-+%module global_immutable_vars
-+
-+// Test immutable and mutable global variables,
-+// see http://www.swig.org/Doc4.0/SWIGDocumentation.html#SWIG_readonly_variables
-+
-+%inline %{
-+ int default_mutable_var = 40;
-+%}
-+
-+%immutable;
-+%feature("immutable", "0") specific_mutable_var;
-+
-+%inline %{
-+ int global_immutable_var = 41;
-+ int specific_mutable_var = 42;
-+%}
-+
-+%mutable;
-+%immutable specific_immutable_var;
-+%inline %{
-+ int global_mutable_var = 43;
-+ int specific_immutable_var = 44;
-+%}
-+
-diff --git a/Examples/test-suite/global_immutable_vars_cpp.i b/Examples/test-suite/global_immutable_vars_cpp.i
-new file mode 100644
-index 000000000..66eb8545d
---- /dev/null
-+++ b/Examples/test-suite/global_immutable_vars_cpp.i
-@@ -0,0 +1,24 @@
-+%module global_immutable_vars_cpp
-+
-+// Test immutable and mutable global variables,
-+// see http://www.swig.org/Doc4.0/SWIGDocumentation.html#SWIG_readonly_variables
-+
-+%inline %{
-+ int default_mutable_var = 40;
-+%}
-+
-+%immutable;
-+%feature("immutable", "0") specific_mutable_var;
-+
-+%inline %{
-+ int global_immutable_var = 41;
-+ int specific_mutable_var = 42;
-+%}
-+
-+%mutable;
-+%immutable specific_immutable_var;
-+%inline %{
-+ int global_mutable_var = 43;
-+ int specific_immutable_var = 44;
-+%}
-+
-diff --git a/Examples/test-suite/ruby/Makefile.in b/Examples/test-suite/ruby/Makefile.in
-index d75cdb058..2c59029ec 100644
---- a/Examples/test-suite/ruby/Makefile.in
-+++ b/Examples/test-suite/ruby/Makefile.in
-@@ -23,6 +23,7 @@ CPP_TEST_CASES = \
- li_std_wstring_inherit \
- primitive_types \
- ruby_alias_method \
-+ ruby_global_immutable_vars_cpp \
- ruby_keywords \
- ruby_minherit_shared_ptr \
- ruby_naming \
-@@ -48,6 +49,7 @@ C_TEST_CASES += \
- li_cstring \
- ruby_alias_global_function \
- ruby_alias_module_function \
-+ ruby_global_immutable_vars \
- ruby_manual_proxy \
-
- include $(srcdir)/../common.mk
-@@ -57,6 +59,8 @@ SWIGOPT += -w801 -noautorename -features autodoc=4
-
- # Custom tests - tests with additional commandline options
- ruby_alias_global_function.ctest: SWIGOPT += -globalmodule
-+ruby_global_immutable_vars.ctest: SWIGOPT += -globalmodule
-+ruby_global_immutable_vars_cpp.cpptest: SWIGOPT += -globalmodule
- ruby_naming.cpptest: SWIGOPT += -autorename
-
- # Rules for the different types of tests
-diff --git a/Examples/test-suite/ruby/global_immutable_vars_cpp_runme.rb b/Examples/test-suite/ruby/global_immutable_vars_cpp_runme.rb
-new file mode 100644
-index 000000000..c40896a86
---- /dev/null
-+++ b/Examples/test-suite/ruby/global_immutable_vars_cpp_runme.rb
-@@ -0,0 +1,47 @@
-+#!/usr/bin/env ruby
-+#
-+# C++ version of global_immutable_vars_runme.rb
-+#
-+
-+require 'swig_assert'
-+
-+require 'global_immutable_vars_cpp'
-+
-+# first check if all variables can be read
-+swig_assert_each_line( < e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "Global_immutable_vars_cpp::global_immutable_var is writable (expected to be immutable)")
-+
-+had_exception = false
-+begin
-+ Global_immutable_vars_cpp::specific_immutable_var = 81
-+rescue NoMethodError => e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "Global_immutable_vars_cpp::specific_immutable_var is writable (expected to be immutable)")
-+
-diff --git a/Examples/test-suite/ruby/global_immutable_vars_runme.rb b/Examples/test-suite/ruby/global_immutable_vars_runme.rb
-new file mode 100644
-index 000000000..af55cfeb3
---- /dev/null
-+++ b/Examples/test-suite/ruby/global_immutable_vars_runme.rb
-@@ -0,0 +1,51 @@
-+#!/usr/bin/env ruby
-+#
-+# Here the proper generation of mutable and immutable variables is tested
-+# in the target language.
-+# Immutable variables do not have "=" methods generated by SWIG,
-+# therefore trying to assign these variables shall throw a NoMethodError
-+# exception.
-+#
-+
-+require 'swig_assert'
-+
-+require 'global_immutable_vars'
-+
-+# first check if all variables can be read
-+swig_assert_each_line( < e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "Global_immutable_vars::global_immutable_var is writable (expected to be immutable)")
-+
-+had_exception = false
-+begin
-+ Global_immutable_vars::specific_immutable_var = 81
-+rescue NoMethodError => e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "Global_immutable_vars::specific_immutable_var is writable (expected to be immutable)")
-+
-diff --git a/Examples/test-suite/ruby/ruby_global_immutable_vars_cpp_runme.rb b/Examples/test-suite/ruby/ruby_global_immutable_vars_cpp_runme.rb
-new file mode 100644
-index 000000000..8453254eb
---- /dev/null
-+++ b/Examples/test-suite/ruby/ruby_global_immutable_vars_cpp_runme.rb
-@@ -0,0 +1,47 @@
-+#!/usr/bin/env ruby
-+#
-+# C++ version of ruby_global_immutable_vars_runme.rb.
-+#
-+
-+require 'swig_assert'
-+
-+require 'ruby_global_immutable_vars_cpp'
-+
-+# first check if all variables can be read
-+swig_assert_each_line( < e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "$global_immutable_var is writable (expected to be immutable)")
-+
-+had_exception = false
-+begin
-+ $specific_immutable_var = 81
-+rescue NameError => e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "$specific_immutable_var is writable (expected to be immutable)")
-+
-diff --git a/Examples/test-suite/ruby/ruby_global_immutable_vars_runme.rb b/Examples/test-suite/ruby/ruby_global_immutable_vars_runme.rb
-new file mode 100644
-index 000000000..fda1ccf0f
---- /dev/null
-+++ b/Examples/test-suite/ruby/ruby_global_immutable_vars_runme.rb
-@@ -0,0 +1,51 @@
-+#!/usr/bin/env ruby
-+#
-+# This test program is similar to global_immutable_vars_runme.rb
-+# with the difference that the global variables to check are also
-+# Ruby global variables (SWIG Ruby option "-globalmodule").
-+#
-+# Immutable global variables shall throw a NameError exception.
-+#
-+
-+require 'swig_assert'
-+
-+require 'ruby_global_immutable_vars'
-+
-+# first check if all variables can be read
-+swig_assert_each_line( < e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "$global_immutable_var is writable (expected to be immutable)")
-+
-+had_exception = false
-+begin
-+ $specific_immutable_var = 81
-+rescue NameError => e
-+ had_exception = true
-+end
-+swig_assert(had_exception, nil,
-+ "$specific_immutable_var is writable (expected to be immutable)")
-+
-diff --git a/Examples/test-suite/ruby_global_immutable_vars.i b/Examples/test-suite/ruby_global_immutable_vars.i
-new file mode 100644
-index 000000000..dc49cd946
---- /dev/null
-+++ b/Examples/test-suite/ruby_global_immutable_vars.i
-@@ -0,0 +1,25 @@
-+%module ruby_global_immutable_vars
-+
-+// This copy of global_immutable_vars.i shall be compiled with the
-+// SWIG Ruby option "-globalmodule" in order to check the code path
-+// for registering global methods (in contrast to module methods).
-+
-+%inline %{
-+ int default_mutable_var = 40;
-+%}
-+
-+%immutable;
-+%feature("immutable", "0") specific_mutable_var;
-+
-+%inline %{
-+ int global_immutable_var = 41;
-+ int specific_mutable_var = 42;
-+%}
-+
-+%mutable;
-+%immutable specific_immutable_var;
-+%inline %{
-+ int global_mutable_var = 43;
-+ int specific_immutable_var = 44;
-+%}
-+
-diff --git a/Examples/test-suite/ruby_global_immutable_vars_cpp.i b/Examples/test-suite/ruby_global_immutable_vars_cpp.i
-new file mode 100644
-index 000000000..cf3145e80
---- /dev/null
-+++ b/Examples/test-suite/ruby_global_immutable_vars_cpp.i
-@@ -0,0 +1,23 @@
-+%module ruby_global_immutable_vars_cpp
-+
-+// C++ version of ruby_global_immutable_vars.i
-+
-+%inline %{
-+ int default_mutable_var = 40;
-+%}
-+
-+%immutable;
-+%feature("immutable", "0") specific_mutable_var;
-+
-+%inline %{
-+ int global_immutable_var = 41;
-+ int specific_mutable_var = 42;
-+%}
-+
-+%mutable;
-+%immutable specific_immutable_var;
-+%inline %{
-+ int global_mutable_var = 43;
-+ int specific_immutable_var = 44;
-+%}
-+
-diff --git a/Source/Modules/ruby.cxx b/Source/Modules/ruby.cxx
-index 6a1e16d5d..c8f582679 100644
---- a/Source/Modules/ruby.cxx
-+++ b/Source/Modules/ruby.cxx
-@@ -2192,6 +2192,11 @@ public:
- String *getfname, *setfname;
- Wrapper *getf, *setf;
-
-+ // Determine whether virtual global variables shall be used
-+ // which have different getter and setter signatures,
-+ // see https://docs.ruby-lang.org/en/2.6.0/extension_rdoc.html#label-Global+Variables+Shared+Between+C+and+Ruby
-+ const bool use_virtual_var = (current == NO_CPP && useGlobalModule);
-+
- getf = NewWrapper();
- setf = NewWrapper();
-
-@@ -2201,7 +2206,7 @@ public:
- getfname = Swig_name_wrapper(getname);
- Setattr(n, "wrap:name", getfname);
- Printv(getf->def, "SWIGINTERN VALUE\n", getfname, "(", NIL);
-- Printf(getf->def, "VALUE self");
-+ Printf(getf->def, (use_virtual_var) ? "ID id" : "VALUE self");
- Printf(getf->def, ") {");
- Wrapper_add_local(getf, "_val", "VALUE _val");
-
-@@ -2235,8 +2240,12 @@ public:
- String *setname = Swig_name_set(NSPACE_TODO, iname);
- setfname = Swig_name_wrapper(setname);
- Setattr(n, "wrap:name", setfname);
-- Printv(setf->def, "SWIGINTERN VALUE\n", setfname, "(VALUE self, ", NIL);
-- Printf(setf->def, "VALUE _val) {");
-+ Printf(setf->def, "SWIGINTERN ");
-+ if (use_virtual_var) {
-+ Printv(setf->def, "void\n", setfname, "(VALUE _val, ID id) {", NIL);
-+ } else {
-+ Printv(setf->def, "VALUE\n", setfname, "(VALUE self, VALUE _val) {", NIL);
-+ }
- tm = Swig_typemap_lookup("varin", n, name, 0);
- if (tm) {
- Replaceall(tm, "$input", "_val");
-@@ -2247,9 +2256,14 @@ public:
- } else {
- Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number, "Unable to set variable of type %s\n", SwigType_str(t, 0));
- }
-- Printv(setf->code, tab4, "return _val;\n", NIL);
-- Printf(setf->code, "fail:\n");
-- Printv(setf->code, tab4, "return Qnil;\n", NIL);
-+ if (use_virtual_var) {
-+ Printf(setf->code, "fail:\n");
-+ Printv(setf->code, tab4, "return;\n", NIL);
-+ } else {
-+ Printv(setf->code, tab4, "return _val;\n", NIL);
-+ Printf(setf->code, "fail:\n");
-+ Printv(setf->code, tab4, "return Qnil;\n", NIL);
-+ }
- Printf(setf->code, "}\n");
- Wrapper_print(setf, f_wrappers);
- Delete(setname);
-@@ -2259,7 +2273,7 @@ public:
- if (CPlusPlus) {
- Insert(getfname, 0, "VALUEFUNC(");
- Append(getfname, ")");
-- Insert(setfname, 0, "VALUEFUNC(");
-+ Insert(setfname, 0, (use_virtual_var) ? "(void (*)(ANYARGS))(" : "VALUEFUNC(");
- Append(setfname, ")");
- }
-
-@@ -2283,9 +2297,11 @@ public:
- Printv(s, tab4, "rb_define_singleton_method(", modvar, ", \"", iname, "=\", ", setfname, ", 1);\n", NIL);
- }
- } else {
-- Printv(s, tab4, "rb_define_global_method(\"", iname, "\", ", getfname, ", 0);\n", NIL);
-- if (!GetFlag(n, "feature:immutable")) {
-- Printv(s, tab4, "rb_define_global_method(\"", iname, "=\", ", setfname, ", 1);\n", NIL);
-+ Printv(s, tab4, "rb_define_virtual_variable(\"$", iname, "\", ", getfname, ", ", NIL);
-+ if (GetFlag(n, "feature:immutable")) {
-+ Printv(s, tab4, "0);\n", NIL);
-+ } else {
-+ Printv(s, tab4, setfname, ");\n", NIL);
- }
- }
- Printv(f_init, s, NIL);
---
-2.21.1
-
diff --git a/swig-4.0.1-Fix-crash-in-Python-backend-when-using-empty-docstrings.patch b/swig-4.0.1-Fix-crash-in-Python-backend-when-using-empty-docstrings.patch
deleted file mode 100644
index c9b5ce7..0000000
--- a/swig-4.0.1-Fix-crash-in-Python-backend-when-using-empty-docstrings.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From e14532ce52a654768cc4010e9e18e1a0a4d965db Mon Sep 17 00:00:00 2001
-From: Vadim Zeitlin
-Date: Sat, 25 Jan 2020 17:06:20 +0100
-Subject: [PATCH] Fix crash in Python backend when using empty docstrings
-
-Due to confusion in build_combined_docstring(), we could call
-DohDelete() on the "feature:docstring" string, which resulted in a crash
-when trying to use it later.
-
-Fix this and simplify the code at the same time by ensuring that we
-always use a copy of "feature:docstring" if it's not empty or don't use
-it at all if it's empty -- like this we don't have to check for its
-length each time before using it.
-
-Closes #1648.
----
- Examples/test-suite/autodoc.i | 9 +++++++++
- Examples/test-suite/python/autodoc_runme.py | 2 ++
- Source/Modules/python.cxx | 15 +++++++++++----
- 3 files changed, 22 insertions(+), 4 deletions(-)
-
-diff --git a/Examples/test-suite/autodoc.i b/Examples/test-suite/autodoc.i
-index 9f4365ee1c..efc7201553 100644
---- a/Examples/test-suite/autodoc.i
-+++ b/Examples/test-suite/autodoc.i
-@@ -183,3 +183,12 @@ const int PROCESS_DEFAULT_VALUE = 17;
- typedef long int some_type;
- int process_complex_defval(int val = PROCESS_DEFAULT_VALUE, int factor = some_type(-1)) { return val*factor; }
- %}
-+
-+// Test for empty docstring, which should be ignored.
-+%feature("docstring") ""
-+
-+%inline %{
-+struct a_structure{
-+ char my_array[1];
-+};
-+%}
-diff --git a/Examples/test-suite/python/autodoc_runme.py b/Examples/test-suite/python/autodoc_runme.py
-index 6002d49fec..7bc918644d 100644
---- a/Examples/test-suite/python/autodoc_runme.py
-+++ b/Examples/test-suite/python/autodoc_runme.py
-@@ -279,3 +279,5 @@ def check(got, expected, expected_builtin=None, skip=False):
- check(inspect.getdoc(process4), "process4(int _from=0, int _in=1, int var=2) -> int")
-
- check(inspect.getdoc(process_complex_defval), "process_complex_defval(val=PROCESS_DEFAULT_VALUE, factor=some_type(-1)) -> int")
-+
-+check(inspect.getdoc(a_structure.__init__), "__init__(a_structure self) -> a_structure", None, skip)
-diff --git a/Source/Modules/python.cxx b/Source/Modules/python.cxx
-index 1dbedad26a..f6b47be244 100644
---- a/Source/Modules/python.cxx
-+++ b/Source/Modules/python.cxx
-@@ -1484,8 +1484,15 @@ class PYTHON:public Language {
-
- String *build_combined_docstring(Node *n, autodoc_t ad_type, const String *indent = "", bool low_level = false) {
- String *docstr = Getattr(n, "feature:docstring");
-- if (docstr && Len(docstr)) {
-- docstr = Copy(docstr);
-+ if (docstr) {
-+ // Simplify the code below by just ignoring empty docstrings.
-+ if (!Len(docstr))
-+ docstr = NULL;
-+ else
-+ docstr = Copy(docstr);
-+ }
-+
-+ if (docstr) {
- char *t = Char(docstr);
- if (*t == '{') {
- Delitem(docstr, 0);
-@@ -1496,7 +1503,7 @@ class PYTHON:public Language {
- if (Getattr(n, "feature:autodoc") && !GetFlag(n, "feature:noautodoc")) {
- String *autodoc = make_autodoc(n, ad_type, low_level);
- if (autodoc && Len(autodoc) > 0) {
-- if (docstr && Len(docstr)) {
-+ if (docstr) {
- Append(autodoc, "\n");
- Append(autodoc, docstr);
- }
-@@ -1509,7 +1516,7 @@ class PYTHON:public Language {
- Delete(autodoc);
- }
-
-- if (!docstr || !Len(docstr)) {
-+ if (!docstr) {
- if (doxygen) {
- docstr = Getattr(n, "python:docstring");
- if (!docstr && doxygenTranslator->hasDocumentation(n)) {
diff --git a/swig-4.0.1-ruby27-minimum.patch b/swig-4.0.1-ruby27-minimum.patch
deleted file mode 100644
index 4370b35..0000000
--- a/swig-4.0.1-ruby27-minimum.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- swig-4.0.1/Lib/ruby/rubytracking.swg.orig 2019-08-21 06:34:03.000000000 +0900
-+++ swig-4.0.1/Lib/ruby/rubytracking.swg 2020-01-18 18:32:38.909450596 +0900
-@@ -69,7 +69,7 @@ SWIGRUNTIME void SWIG_RubyInitializeTrac
- swig_ruby_trackings = (st_table*)NUM2SWIG(trackings_value);
- }
-
-- rb_define_virtual_variable("SWIG_TRACKINGS_COUNT", swig_ruby_trackings_count, NULL);
-+ rb_define_virtual_variable("SWIG_TRACKINGS_COUNT", (rb_gvar_getter_t *)swig_ruby_trackings_count, (rb_gvar_setter_t *)NULL);
- }
-
- /* Add a Tracking from a C/C++ struct to a Ruby object */
diff --git a/swig.spec b/swig.spec
index d21ec0c..809f7a8 100644
--- a/swig.spec
+++ b/swig.spec
@@ -52,8 +52,8 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
-Version: 4.0.1
-Release: 9%{?dist}
+Version: 4.0.2
+Release: 1%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -65,18 +65,8 @@ Source3: ccache-swig.sh
Source4: ccache-swig.csh
%endif
-Patch0: swig308-Do-not-use-isystem.patch
-# Fix code generated for Ruby global variables
-# https://github.com/swig/swig/issues/1668
-Patch1: swig-4.0.1-Fix-code-generated-for-Ruby-global-variables.patch
-# Add support for Ruby 2.7
-# https://github.com/swig/swig/pull/1692
-Patch2: swig-4.0.1-Add-support-for-Ruby-2.7.patch
-# Fix crash in Python backend when using empty docstrings
-# https://github.com/swig/swig/pull/1710
-Patch3: swig-4.0.1-Fix-crash-in-Python-backend-when-using-empty-docstrings.patch
# https://github.com/swig/swig/pull/1702
-Patch4: swig-Upgrade-to-support-newer-NodeJS.patch
+Patch0: swig-Upgrade-to-support-newer-NodeJS.patch
BuildRequires: perl-interpreter, pcre-devel
BuildRequires: python%{python3_pkgversion}-devel
@@ -344,6 +334,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Mon Jun 08 2020 Jitka Plesnikova - 4.0.2-1
+- Update to 4.0.2
+
* Fri Mar 06 2020 Jitka Plesnikova - 4.0.1-9
- Remove BR for Python 2 (bug#1807547)
diff --git a/swig308-Do-not-use-isystem.patch b/swig308-Do-not-use-isystem.patch
deleted file mode 100644
index efd0312..0000000
--- a/swig308-Do-not-use-isystem.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -up swig-3.0.8/configure.ac.orig swig-3.0.8/configure.ac
---- swig-3.0.8/configure.ac.orig 2016-02-02 16:01:09.094852303 +0100
-+++ swig-3.0.8/configure.ac 2016-02-02 16:01:42.096702679 +0100
-@@ -118,7 +118,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
From f8b278b91f0f50dfcca93fe67151b98f5ff075cc Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Wed, 29 Jul 2020 10:27:31 +0200
Subject: [PATCH 04/67] Use make macros; Disable Go tests
---
swig.spec | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/swig.spec b/swig.spec
index 809f7a8..2263b52 100644
--- a/swig.spec
+++ b/swig.spec
@@ -45,7 +45,8 @@
# Do not run Go tests, they failed with 4.0.0 on ppc64le
%ifarch %{ix86} x86_64 %{arm} aarch64
-%{!?golang:%global golang 1}
+# Tests do not work with Go 1.15
+%{!?golang:%global golang 0}
%else
%{!?golang:%global golang 0}
%endif
@@ -53,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 1%{?dist}
+Release: 2%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -212,7 +213,7 @@ done
--disable-ccache \
%endif
;
-make %{?_smp_mflags}
+%{make_build}
%if %{with testsuite}
# Test suite
@@ -239,7 +240,7 @@ for all in `find -type f`; do
done
popd
-make DESTDIR=%{buildroot} install
+%{make_install}
#################################################
# Use help output for generating of man page swig
@@ -334,6 +335,11 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Wed Jul 29 2020 Tom Stellard - 4.0.2-2
+- Use make macros
+ https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
+- Disable Go tests
+
* Mon Jun 08 2020 Jitka Plesnikova - 4.0.2-1
- Update to 4.0.2
From 8f1b0502975792d18744ed41db0eacb9abaeee54 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Fri, 28 Aug 2020 12:20:47 +0200
Subject: [PATCH 05/67] Enable tests for Python 3
---
swig.spec | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/swig.spec b/swig.spec
index 2263b52..cece5ed 100644
--- a/swig.spec
+++ b/swig.spec
@@ -54,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 2%{?dist}
+Release: 3%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -177,16 +177,18 @@ done
# Disable maximum compile warnings when octave is supported, because Octave
# code produces lots of the warnings demanded by strict ISO C and ISO C++.
# It causes that log had more then 600M.
+# AC_CHECK_PROGS requires just the name, so use for configure
+# --with-python3=python3 --with-2to3=2to3
%configure \
--without-ocaml \
%if %{python3lang}
- --with-python3=%__python3 \
- --with-2to3=%{_bindir}/2to3 \
+ --with-python3=python3 \
+ --with-2to3=2to3 \
%else
--without-python3 \
%endif
%if %{phplang}
- --with-php=%{__php} \
+ --with-php \
%else
--without-php \
%endif
@@ -217,7 +219,7 @@ done
%if %{with testsuite}
# Test suite
-make check
+make check PY3=1
%endif
%install
@@ -335,6 +337,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Fri Aug 28 2020 Jitka Plesnikova - 4.0.2-3
+- Enable tests for Python 3
+
* Wed Jul 29 2020 Tom Stellard - 4.0.2-2
- Use make macros
https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
From fd0b982bf59bdbc48885d11b9e3e1f40a7204f3e Mon Sep 17 00:00:00 2001
From: Tom Stellard
Date: Fri, 8 Jan 2021 22:08:23 +0000
Subject: [PATCH 06/67] Add BuildRequires: make
https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot
---
swig.spec | 1 +
1 file changed, 1 insertion(+)
diff --git a/swig.spec b/swig.spec
index cece5ed..9356360 100644
--- a/swig.spec
+++ b/swig.spec
@@ -69,6 +69,7 @@ Source4: ccache-swig.csh
# https://github.com/swig/swig/pull/1702
Patch0: swig-Upgrade-to-support-newer-NodeJS.patch
+BuildRequires: make
BuildRequires: perl-interpreter, pcre-devel
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: autoconf, automake, gawk, dos2unix
From 2cd003f12e247e3f6257676a1b288a23fcb54e26 Mon Sep 17 00:00:00 2001
From: Fedora Release Engineering
Date: Wed, 27 Jan 2021 21:24:18 +0000
Subject: [PATCH 07/67] - Rebuilt for
https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering
---
swig.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index 9356360..cd1092c 100644
--- a/swig.spec
+++ b/swig.spec
@@ -54,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 3%{?dist}
+Release: 4%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -338,6 +338,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Wed Jan 27 2021 Fedora Release Engineering - 4.0.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
* Fri Aug 28 2020 Jitka Plesnikova - 4.0.2-3
- Enable tests for Python 3
From 62dded8bacb09398b03d1352820636182d2494ab Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Mon, 22 Mar 2021 07:32:46 +0100
Subject: [PATCH 08/67] Backport support of PHP8 from upstream
---
...har-typecheck-typemap-to-accept-Null.patch | 82 ++++
...ed-directed-methods-with-non-void-re.patch | 101 +++++
swig-4.0.2-Improve-PHP-object-creation.patch | 82 ++++
swig-4.0.2-Support-PHP8.patch | 409 ++++++++++++++++++
swig.spec | 12 +-
5 files changed, 684 insertions(+), 2 deletions(-)
create mode 100644 swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
create mode 100644 swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
create mode 100644 swig-4.0.2-Improve-PHP-object-creation.patch
create mode 100644 swig-4.0.2-Support-PHP8.patch
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 @@
+
+
+ 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 @@
+ -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.spec b/swig.spec
index cd1092c..21aa752 100644
--- a/swig.spec
+++ b/swig.spec
@@ -20,7 +20,7 @@
%{!?perllang:%global perllang 1}
%{!?phplang:%global phplang 1}
# Disable Ruby test failed with swig 4.0.0 on s390
-%ifarch s390x
+%ifarch s390x %{power64}
%{!?rubylang:%global rubylang 0}
%else
%{!?rubylang:%global rubylang 1}
@@ -54,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 4%{?dist}
+Release: 5%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -68,6 +68,11 @@ Source4: ccache-swig.csh
# https://github.com/swig/swig/pull/1702
Patch0: swig-Upgrade-to-support-newer-NodeJS.patch
+# Backport PHP 7.x and 88888888 updates
+Patch1: swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
+Patch2: swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
+Patch3: swig-4.0.2-Improve-PHP-object-creation.patch
+Patch4: swig-4.0.2-Support-PHP8.patch
BuildRequires: make
BuildRequires: perl-interpreter, pcre-devel
@@ -338,6 +343,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Fri Mar 05 2021 Jitka Plesnikova - 4.0.2-5
+- Backport support of PHP8 from upstream
+
* Wed Jan 27 2021 Fedora Release Engineering - 4.0.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
From 54b745be0c0eacd1075ce017352245164a48ed25 Mon Sep 17 00:00:00 2001
From: Orion Poplawski
Date: Thu, 6 May 2021 21:53:04 -0600
Subject: [PATCH 09/67] Add patch for octave 6 support (bz#1919617)
---
swig-octave-6.patch | 346 ++++++++++++++++++++++++++++++++++++++++++++
swig.spec | 7 +-
2 files changed, 352 insertions(+), 1 deletion(-)
create mode 100644 swig-octave-6.patch
diff --git a/swig-octave-6.patch b/swig-octave-6.patch
new file mode 100644
index 0000000..f3cc909
--- /dev/null
+++ b/swig-octave-6.patch
@@ -0,0 +1,346 @@
+From 582e3a3fee8a7cfe5903da1c4b0db8e40d5d2deb Mon Sep 17 00:00:00 2001
+From: Robert Fries
+Date: Wed, 12 May 2021 19:44:17 -0400
+Subject: [PATCH 2/5] Allow swig wrapped modules to compile with -Bsymbolic
+
+---
+ Lib/octave/octrun.swg | 8 ++++++++
+ Lib/octave/octruntime.swg | 2 ++
+ 2 files changed, 10 insertions(+)
+
+diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
+index 1069e0e54b7..a7291df1478 100644
+--- a/Lib/octave/octrun.swg
++++ b/Lib/octave/octrun.swg
+@@ -1178,6 +1178,10 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ #endif
+ { return ptr->print(os, pr_as_read_syntax); }
+
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++ static void set_type_id(int type_id) { t_id=type_id; }
++#endif
++
+ virtual type_conv_info numeric_conversion_function(void) const {
+ return octave_base_value::type_conv_info (default_numeric_conversion_function,
+ octave_scalar::static_type_id ());
+@@ -1285,6 +1289,10 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ # endif
+ #endif
+
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++ static void set_type_id(int type_id) { t_id=type_id; }
++#endif
++
+ private:
+ #if !SWIG_OCTAVE_PREREQ(4,0,0)
+ DECLARE_OCTAVE_ALLOCATOR;
+diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
+index a397fb7c189..ca69e44c48f 100644
+--- a/Lib/octave/octruntime.swg
++++ b/Lib/octave/octruntime.swg
+@@ -295,9 +295,11 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
+ for (int i = 0; i < types.numel(); ++i) {
+ if (types(i) == octave_swig_ref::static_type_name()) {
+ register_octave_swig_ref = false;
++ octave_swig_ref::set_type_id(i);
+ }
+ if (types(i) == octave_swig_packed::static_type_name()) {
+ register_octave_swig_packed = false;
++ octave_swig_packed::set_type_id(i);
+ }
+ }
+ if (register_octave_swig_ref) {
+
+From 2536f07ec26a06adb4290747cd229928b569ed72 Mon Sep 17 00:00:00 2001
+From: Robert Fries
+Date: Wed, 12 May 2021 19:45:24 -0400
+Subject: [PATCH 3/5] Octave module lets examples and tests work with Octave-6
+ * Try-catch replacement for check of error_state * Add execute method in
+ addition to call * Replace oct_mach_info with octave::mach_info * Call
+ from interpreter: global_varval global_assign * Assign a global name
+ requires locating the stack which requires interpreter to tree evaluator
+ to callStack * Do not use discard_error_messages or
+ discard_warning_messages
+
+---
+ Lib/octave/octcontainer.swg | 11 +++++-
+ Lib/octave/octrun.swg | 69 ++++++++++++++++++++++++++++++++++---
+ Lib/octave/octruntime.swg | 12 +++++--
+ 3 files changed, 83 insertions(+), 9 deletions(-)
+
+diff --git a/Lib/octave/octcontainer.swg b/Lib/octave/octcontainer.swg
+index 80d593f4fd5..85954acb031 100644
+--- a/Lib/octave/octcontainer.swg
++++ b/Lib/octave/octcontainer.swg
+@@ -569,8 +569,17 @@ namespace swig {
+ } else {
+ return octseq.check() ? SWIG_OK : SWIG_ERROR;
+ }
+- } catch (std::exception& e) {
++ }
++%#if SWIG_OCTAVE_PREREQ(6,0,0)
++ catch (octave::execution_exception& exec) {
++ }
++%#endif
++ catch (std::exception& e) {
++%#if SWIG_OCTAVE_PREREQ(6,0,0)
++ if (seq) // Know that octave is not in an error state
++%#else
+ if (seq&&!error_state)
++%#endif
+ error("swig type error: %s",e.what());
+ return SWIG_ERROR;
+ }
+diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
+index a7291df1478..68bdeea0993 100644
+--- a/Lib/octave/octrun.swg
++++ b/Lib/octave/octrun.swg
+@@ -171,7 +171,16 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+
+ octave_function* function_value(bool = false) { return this; }
+
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave_value_list call(octave::tree_evaluator& tw, int nargout = 0, const octave_value_list& args = octave_value_list()) {
++ return execute(tw,nargout,args);
++ }
++#endif
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave_value_list execute(octave::tree_evaluator& tw, int nargout = 0, const octave_value_list& args = octave_value_list()) {
++#else
+ octave_value_list call(octave::tree_evaluator& tw, int nargout = 0, const octave_value_list& args = octave_value_list()) {
++#endif
+ octave_value_list all_args;
+ all_args.append(first_args);
+ all_args.append(args);
+@@ -456,10 +465,20 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ // Fill in dim_vector
+ for (int k=0;k a;
++ try {
++ a = out.int_vector_value();
++ }
++ catch (octave::execution_exception& oee) {
++ return dim_vector(1,1);
++ }
++#else
+ Array a = out.int_vector_value();
+ if (error_state) return dim_vector(1,1);
++#endif
+ dim_vector d;
+ d.resize(a.numel() < 2 ? 2 : a.numel());
+ d(0) = d(1) = 1;
+@@ -874,7 +903,11 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ }
+
+ virtual bool load_binary (std::istream& is, bool swap,
+- oct_mach_info::float_format fmt) {
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave::mach_info::float_format fmt) {
++#else
++ oct_mach_info::float_format fmt) {
++#endif
+ return true;
+ }
+
+@@ -1142,7 +1175,11 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ { return ptr->save_binary(os, save_as_floats); }
+
+ virtual bool load_binary (std::istream& is, bool swap,
+- oct_mach_info::float_format fmt)
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave::mach_info::float_format fmt)
++#else
++ oct_mach_info::float_format fmt)
++#endif
+ { return ptr->load_binary(is, swap, fmt); }
+
+ #if defined (HAVE_HDF5)
+@@ -1261,7 +1298,11 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ }
+
+ virtual bool load_binary (std::istream& is, bool swap,
+- oct_mach_info::float_format fmt) {
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave::mach_info::float_format fmt) {
++#else
++ oct_mach_info::float_format fmt) {
++#endif
+ return true;
+ }
+
+@@ -1515,16 +1556,24 @@ SWIGRUNTIMEINLINE void SWIG_Octave_SetConstant(octave_swig_type *module_ns, cons
+ }
+
+ SWIGRUNTIMEINLINE octave_value SWIG_Octave_GetGlobalValue(std::string name) {
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave::interpreter *interp = octave::interpreter::the_interpreter ();
++ return interp->global_varval(name);
++#else
+ #if SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
+ return symtab.global_varval(name);
+ #else
+ return get_global_value(name, true);
+ #endif
++#endif
+ }
+
+ SWIGRUNTIME void SWIG_Octave_SetGlobalValue(std::string name, const octave_value& value) {
+-#if SWIG_OCTAVE_PREREQ(4,4,0)
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave::interpreter *interp = octave::interpreter::the_interpreter ();
++ interp->global_assign(name, value);
++#elif SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
+ symtab.global_assign(name, value);
+ #else
+@@ -1534,10 +1583,20 @@ SWIGRUNTIME void SWIG_Octave_SetGlobalValue(std::string name, const octave_value
+
+ SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) {
+ #if SWIG_OCTAVE_PREREQ(4,4,0)
+- octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
+ octave::symbol_scope symscope = octave::interpreter::the_interpreter()->get_current_scope();
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave::interpreter *interp = octave::interpreter::the_interpreter ();
++ interp->assign(name, interp->global_varval(name));
++ octave::tree_evaluator& tree_eval = interp->get_evaluator();
++ octave::call_stack& callStack = tree_eval.get_call_stack();
++ std::shared_ptr stackFrame = callStack.get_current_stack_frame();
++ octave::symbol_record sym=symscope.lookup_symbol(name);
++ stackFrame->mark_global(sym);
++#else
++ octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
+ symscope.assign(name, symtab.global_varval(name));
+ symscope.mark_global(name);
++#endif
+ #else
+ #if !SWIG_OCTAVE_PREREQ(3,2,0)
+ link_to_global_variable(curr_sym_tab->lookup(name, true));
+diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg
+index ca69e44c48f..e76151f146b 100644
+--- a/Lib/octave/octruntime.swg
++++ b/Lib/octave/octruntime.swg
+@@ -19,7 +19,8 @@ static bool SWIG_init_user(octave_swig_type* module_ns);
+ SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
+ bool retn = false;
+ {
+-#if SWIG_OCTAVE_PREREQ(4,2,0)
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++#elif SWIG_OCTAVE_PREREQ(4,2,0)
+ octave::unwind_protect frame;
+ frame.protect_var(discard_error_messages); discard_error_messages = true;
+ frame.protect_var(discard_warning_messages); discard_warning_messages = true;
+@@ -62,7 +63,8 @@ SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) {
+ SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) {
+ bool retn = false;
+ {
+-#if SWIG_OCTAVE_PREREQ(4,2,0)
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++#elif SWIG_OCTAVE_PREREQ(4,2,0)
+ octave::unwind_protect frame;
+ frame.protect_var(discard_error_messages); discard_error_messages = true;
+ frame.protect_var(discard_warning_messages); discard_warning_messages = true;
+@@ -316,7 +318,11 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
+ SWIG_InitializeModule(0);
+ SWIG_PropagateClientData();
+
+-#if SWIG_OCTAVE_PREREQ(4,4,0)
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ octave::tree_evaluator& tree_eval = octave::interpreter::the_interpreter()->get_evaluator();
++ octave::call_stack& stack = tree_eval.get_call_stack();
++ octave_function *me = stack.current_function();
++#elif SWIG_OCTAVE_PREREQ(4,4,0)
+ octave::call_stack& stack = octave::interpreter::the_interpreter()->get_call_stack();
+ octave_function *me = stack.current();
+ #else
+
+From 0bf0d58c52e477cae99986b7c7a656c09d50aa43 Mon Sep 17 00:00:00 2001
+From: Robert Fries
+Date: Wed, 12 May 2021 20:22:30 -0400
+Subject: [PATCH 4/5] Additional changes due to name changes in octave-6 *
+ is_map to isstruct, is_object to isobject
+
+---
+ Lib/octave/octrun.swg | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg
+index 68bdeea0993..e95f9e9de6b 100644
+--- a/Lib/octave/octrun.swg
++++ b/Lib/octave/octrun.swg
+@@ -660,7 +660,11 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ return true;
+ }
+
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ virtual bool isstruct() const {
++#else
+ virtual bool is_map() const {
++#endif
+ return true;
+ }
+
+@@ -808,7 +812,11 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ return as_value();
+ }
+
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ virtual bool isobject() const {
++#else
+ virtual bool is_object() const {
++#endif
+ return true;
+ }
+
+@@ -1117,8 +1125,13 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ bool is_defined() const
+ { return ptr->is_defined(); }
+
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ virtual bool isstruct() const
++ { return ptr->isstruct(); }
++#else
+ virtual bool is_map() const
+ { return ptr->is_map(); }
++#endif
+
+ virtual octave_value subsref(const std::string &ops, const std::list < octave_value_list > &idx)
+ { return ptr->subsref(ops, idx); }
+@@ -1129,8 +1142,13 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own);
+ octave_value subsasgn(const std::string &ops, const std::list < octave_value_list > &idx, const octave_value &rhs)
+ { return ptr->subsasgn(ops, idx, rhs); }
+
++#if SWIG_OCTAVE_PREREQ(6,0,0)
++ virtual bool isobject() const
++ { return ptr->isobject(); }
++#else
+ virtual bool is_object() const
+ { return ptr->is_object(); }
++#endif
+
+ virtual bool is_string() const
+ { return ptr->is_string(); }
+
diff --git a/swig.spec b/swig.spec
index 21aa752..3a3a024 100644
--- a/swig.spec
+++ b/swig.spec
@@ -54,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 5%{?dist}
+Release: 6%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -73,6 +73,8 @@ Patch1: swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
Patch2: swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
Patch3: swig-4.0.2-Improve-PHP-object-creation.patch
Patch4: swig-4.0.2-Support-PHP8.patch
+# octave 6 support - rebased version of https://github.com/swig/swig/pull/2020
+Patch5: swig-octave-6.patch
BuildRequires: make
BuildRequires: perl-interpreter, pcre-devel
@@ -343,6 +345,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Mon May 31 2021 Orion Poplawski - 4.0.2-6
+- Add patch for octave 6 support (bz#1919617)
+
* Fri Mar 05 2021 Jitka Plesnikova - 4.0.2-5
- Backport support of PHP8 from upstream
From c9c90115bf57b8f1266b565db8b5c9ddd7263899 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Thu, 15 Jul 2021 17:28:29 +0200
Subject: [PATCH 10/67] Disable Python tests, they fail with 3.10.0~b2
---
swig.spec | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/swig.spec b/swig.spec
index 3a3a024..8afcb2a 100644
--- a/swig.spec
+++ b/swig.spec
@@ -25,7 +25,8 @@
%else
%{!?rubylang:%global rubylang 1}
%endif
-%{!?python3lang:%global python3lang 1}
+# Disable Python tests - they fail with 3.10.0~b2
+%{!?python3lang:%global python3lang 0}
%if 0%{?rhel}
%{!?golang:%global golang 0}
@@ -54,7 +55,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 6%{?dist}
+Release: 7%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -345,6 +346,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Thu Jul 15 2021 Jitka Plesnikova - 4.0.2-7
+- Disable Python tests, they fail with 3.10.0~b2
+
* Mon May 31 2021 Orion Poplawski - 4.0.2-6
- Add patch for octave 6 support (bz#1919617)
From cb9865cf16ba16bc9e8716d109919fa80787c217 Mon Sep 17 00:00:00 2001
From: Fedora Release Engineering
Date: Fri, 23 Jul 2021 18:39:52 +0000
Subject: [PATCH 11/67] - Rebuilt for
https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering
---
swig.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index 8afcb2a..f30e448 100644
--- a/swig.spec
+++ b/swig.spec
@@ -55,7 +55,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 7%{?dist}
+Release: 8%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -346,6 +346,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Fri Jul 23 2021 Fedora Release Engineering - 4.0.2-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
* Thu Jul 15 2021 Jitka Plesnikova - 4.0.2-7
- Disable Python tests, they fail with 3.10.0~b2
From a7dae3fb980a3329d801c5ad8f79b4f0daf13d1c Mon Sep 17 00:00:00 2001
From: Orion Poplawski
Date: Tue, 10 Aug 2021 18:37:00 -0600
Subject: [PATCH 12/67] Rebuild for octave 6.3.0
---
swig.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index f30e448..bae5053 100644
--- a/swig.spec
+++ b/swig.spec
@@ -55,7 +55,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 8%{?dist}
+Release: 9%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -346,6 +346,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Tue Aug 10 2021 Orion Poplawski - 4.0.2-9
+- Rebuild for octave 6.3.0
+
* Fri Jul 23 2021 Fedora Release Engineering - 4.0.2-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
From 7022269bc4abb47ce72d628c1291f73a4a5950e5 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Thu, 7 Oct 2021 14:40:10 +0200
Subject: [PATCH 13/67] Enable Python tests
---
...ad_simple_cast-test-with-Python-3.10.patch | 23 +++++++++++++++++++
swig.spec | 15 +++++++-----
2 files changed, 32 insertions(+), 6 deletions(-)
create mode 100644 swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
diff --git a/swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch b/swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
new file mode 100644
index 0000000..a3c8cff
--- /dev/null
+++ b/swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
@@ -0,0 +1,23 @@
+From a2850397ba3eec5d4c58304cf8277ca535919760 Mon Sep 17 00:00:00 2001
+From: Julien Schueller
+Date: Thu, 5 Aug 2021 14:05:10 +0200
+Subject: [PATCH] [Python] Fix overload_simple_cast test with 3.10
+
+Closes #2044
+---
+ Examples/test-suite/python/python_overload_simple_cast_runme.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Examples/test-suite/python/python_overload_simple_cast_runme.py b/Examples/test-suite/python/python_overload_simple_cast_runme.py
+index fc398ab29b9..7a0174af8a2 100644
+--- a/Examples/test-suite/python/python_overload_simple_cast_runme.py
++++ b/Examples/test-suite/python/python_overload_simple_cast_runme.py
+@@ -9,6 +9,8 @@ def __init__(self, x):
+ def __int__(self):
+ return self.x
+
++ def __index__(self):
++ return self.x
+
+ class Ad:
+
diff --git a/swig.spec b/swig.spec
index bae5053..fbc65b9 100644
--- a/swig.spec
+++ b/swig.spec
@@ -25,8 +25,7 @@
%else
%{!?rubylang:%global rubylang 1}
%endif
-# Disable Python tests - they fail with 3.10.0~b2
-%{!?python3lang:%global python3lang 0}
+%{!?python3lang:%global python3lang 1}
%if 0%{?rhel}
%{!?golang:%global golang 0}
@@ -46,8 +45,7 @@
# Do not run Go tests, they failed with 4.0.0 on ppc64le
%ifarch %{ix86} x86_64 %{arm} aarch64
-# Tests do not work with Go 1.15
-%{!?golang:%global golang 0}
+%{!?golang:%global golang 1}
%else
%{!?golang:%global golang 0}
%endif
@@ -55,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 9%{?dist}
+Release: 10%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -69,13 +67,15 @@ Source4: ccache-swig.csh
# https://github.com/swig/swig/pull/1702
Patch0: swig-Upgrade-to-support-newer-NodeJS.patch
-# Backport PHP 7.x and 88888888 updates
+# Backport PHP 7.x and 8 updates
Patch1: swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
Patch2: swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
Patch3: swig-4.0.2-Improve-PHP-object-creation.patch
Patch4: swig-4.0.2-Support-PHP8.patch
# octave 6 support - rebased version of https://github.com/swig/swig/pull/2020
Patch5: swig-octave-6.patch
+# Fix overload_simple_cast test with Python 3.10 GH#2044
+Patch6: swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
BuildRequires: make
BuildRequires: perl-interpreter, pcre-devel
@@ -346,6 +346,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Thu Oct 07 2021 Jitka Plesnikova - 4.0.2-10
+- Enable Python tests
+
* Tue Aug 10 2021 Orion Poplawski - 4.0.2-9
- Rebuild for octave 6.3.0
From 3b059fb6f110462532be241d51990cfe560a7741 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Wed, 24 Nov 2021 17:26:33 +0100
Subject: [PATCH 14/67] Disable PHP test, it fails with PHP 8.1
---
swig.spec | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/swig.spec b/swig.spec
index fbc65b9..8d35689 100644
--- a/swig.spec
+++ b/swig.spec
@@ -18,7 +18,8 @@
%{!?guile:%global guile 0}
%{!?lualang:%global lualang 1}
%{!?perllang:%global perllang 1}
-%{!?phplang:%global phplang 1}
+# Disable PHP test it fails with 8.1.0
+%{!?phplang:%global phplang 0}
# Disable Ruby test failed with swig 4.0.0 on s390
%ifarch s390x %{power64}
%{!?rubylang:%global rubylang 0}
@@ -53,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 10%{?dist}
+Release: 11%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -346,6 +347,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Wed Nov 24 2021 Jitka Plesnikova - 4.0.2-11
+- Disable PHP test, it fails with PHP 8.1
+
* Thu Oct 07 2021 Jitka Plesnikova - 4.0.2-10
- Enable Python tests
From a2bd7ba1ee01bf0dd31268f2d0f6033d54e79db1 Mon Sep 17 00:00:00 2001
From: Fedora Release Engineering
Date: Sat, 22 Jan 2022 02:03:26 +0000
Subject: [PATCH 15/67] - Rebuilt for
https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering
---
swig.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index 8d35689..73caa38 100644
--- a/swig.spec
+++ b/swig.spec
@@ -54,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 11%{?dist}
+Release: 12%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -347,6 +347,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Sat Jan 22 2022 Fedora Release Engineering - 4.0.2-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
* Wed Nov 24 2021 Jitka Plesnikova - 4.0.2-11
- Disable PHP test, it fails with PHP 8.1
From 4adf2d12844890a556117691302141ca7317a205 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Sat, 22 Jan 2022 10:32:40 +0100
Subject: [PATCH 16/67] Fix tests against GCC12, enable Guile tests
---
....0.2-gcc-12-warning-fix-in-test-case.patch | 26 +++++++++++++++++++
swig.spec | 15 +++++++++--
2 files changed, 39 insertions(+), 2 deletions(-)
create mode 100644 swig-4.0.2-gcc-12-warning-fix-in-test-case.patch
diff --git a/swig-4.0.2-gcc-12-warning-fix-in-test-case.patch b/swig-4.0.2-gcc-12-warning-fix-in-test-case.patch
new file mode 100644
index 0000000..44e6b16
--- /dev/null
+++ b/swig-4.0.2-gcc-12-warning-fix-in-test-case.patch
@@ -0,0 +1,26 @@
+From 76d5a9ec270a763c892ae28070e391cf99e0b7cd Mon Sep 17 00:00:00 2001
+From: William S Fulton
+Date: Tue, 18 Jan 2022 21:37:02 +0000
+Subject: [PATCH] gcc-12 warning fix in test-case
+
+Closes #2145
+---
+ Examples/test-suite/nested_class.i | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Examples/test-suite/nested_class.i b/Examples/test-suite/nested_class.i
+index b10c33949..c778a12cf 100644
+--- a/Examples/test-suite/nested_class.i
++++ b/Examples/test-suite/nested_class.i
+@@ -201,7 +201,7 @@ struct Outer {
+ Integer xx;
+ } MultipleInstanceAnonDerived1, MultipleInstanceAnonDerived2, *MultipleInstanceAnonDerived3, MultipleInstanceAnonDerived4[2];
+
+-#if defined(__GNUC__) || defined(_MSC_VER) || defined(SWIG)
++#if (defined(__GNUC__) && __GNUC__ < 12) || defined(_MSC_VER) || defined(SWIG)
+ /* some compilers do not accept these */
+ struct : public InnerMultiple {
+ Integer xx;
+--
+2.31.1
+
diff --git a/swig.spec b/swig.spec
index 8d35689..5db556e 100644
--- a/swig.spec
+++ b/swig.spec
@@ -15,7 +15,7 @@
%endif
%{!?tcl:%global tcl 1}
-%{!?guile:%global guile 0}
+%{!?guile:%global guile 1}
%{!?lualang:%global lualang 1}
%{!?perllang:%global perllang 1}
# Disable PHP test it fails with 8.1.0
@@ -54,7 +54,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 11%{?dist}
+Release: 12%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -77,13 +77,18 @@ Patch4: swig-4.0.2-Support-PHP8.patch
Patch5: swig-octave-6.patch
# Fix overload_simple_cast test with Python 3.10 GH#2044
Patch6: swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
+# gcc-12 warning fix in test-case
+Patch7: swig-4.0.2-gcc-12-warning-fix-in-test-case.patch
+BuildRequires: coreutils
+BuildRequires: findutils
BuildRequires: make
BuildRequires: perl-interpreter, pcre-devel
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: autoconf, automake, gawk, dos2unix
BuildRequires: gcc-c++
BuildRequires: help2man
+BuildRequires: sed
BuildRequires: perl-devel
BuildRequires: perl(base)
BuildRequires: perl(Config)
@@ -217,6 +222,9 @@ done
%if ! %{golang}
--without-go \
%endif
+%if ! %{guile}
+ --without-guile \
+%endif
%if %{octave}
--with-octave=%{_bindir}/octave \
--without-maximum-compile-warnings \
@@ -347,6 +355,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Fri Jan 21 2022 Jitka Plesnikova - 4.0.2-12
+- Fix tests against GCC12, enable Guile tests
+
* Wed Nov 24 2021 Jitka Plesnikova - 4.0.2-11
- Disable PHP test, it fails with PHP 8.1
From c972358d3644a960a06ba327d8b6856192b59327 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Tue, 8 Feb 2022 12:16:55 +0100
Subject: [PATCH 17/67] Enable Ruby tests on all arches
---
swig.spec | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/swig.spec b/swig.spec
index dac8c84..25b3297 100644
--- a/swig.spec
+++ b/swig.spec
@@ -3,6 +3,7 @@
%if %{without testsuite}
%global tcl 0
+%global guile 0
%global lualang 0
%global perllang 0
%global phplang 0
@@ -20,12 +21,7 @@
%{!?perllang:%global perllang 1}
# Disable PHP test it fails with 8.1.0
%{!?phplang:%global phplang 0}
-# Disable Ruby test failed with swig 4.0.0 on s390
-%ifarch s390x %{power64}
-%{!?rubylang:%global rubylang 0}
-%else
%{!?rubylang:%global rubylang 1}
-%endif
%{!?python3lang:%global python3lang 1}
%if 0%{?rhel}
@@ -38,6 +34,7 @@
%{!?Rlang:%global Rlang 1}
%bcond_without build_ccache_swig
%endif
+
%ifarch aarch64 %{arm} %{mips} ppc %{power64} s390 s390x
%{!?javalang:%global javalang 0}
%else
From f74f288cd00d6b02e58a820174c197b6c70cf63a Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Thu, 3 Mar 2022 09:17:44 +0100
Subject: [PATCH 18/67] Disable Java tests
---
swig.spec | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/swig.spec b/swig.spec
index 25b3297..868a083 100644
--- a/swig.spec
+++ b/swig.spec
@@ -38,7 +38,9 @@
%ifarch aarch64 %{arm} %{mips} ppc %{power64} s390 s390x
%{!?javalang:%global javalang 0}
%else
-%{!?javalang:%global javalang 1}
+# Disable tests failing with java-17-openjdk
+# it will pass with swig 4.1.0
+%{!?javalang:%global javalang 0}
%endif
# Do not run Go tests, they failed with 4.0.0 on ppc64le
@@ -51,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 13%{?dist}
+Release: 14%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -352,6 +354,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Thu Feb 24 2022 Jitka Plesnikova - 4.0.2-14
+- Disable Java tests
+
* Sat Jan 22 2022 Jitka Plesnikova - 4.0.2-13
- Fix tests against GCC12, enable Guile tests
From 1fe0c72f6bca8c27f8374b996c5c503a9a31cea8 Mon Sep 17 00:00:00 2001
From: Orion Poplawski
Date: Tue, 31 May 2022 21:58:09 -0600
Subject: [PATCH 19/67] Rebuild for octave 7.1
---
swig.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index 868a083..389b5d8 100644
--- a/swig.spec
+++ b/swig.spec
@@ -53,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 14%{?dist}
+Release: 15%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -354,6 +354,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Wed Jun 01 2022 Orion Poplawski - 4.0.2-15
+- Rebuild for octave 7.1
+
* Thu Feb 24 2022 Jitka Plesnikova - 4.0.2-14
- Disable Java tests
From 37afcecc7cacc1509d5e7e55f8bfeb78b6ee97be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?=
Date: Sat, 18 Jun 2022 12:22:12 +0200
Subject: [PATCH 20/67] Rebuilt for CVE-2022-1996, CVE-2022-24675,
CVE-2022-28327, CVE-2022-27191, CVE-2022-29526, CVE-2022-30629
---
swig.spec | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index 389b5d8..0234e69 100644
--- a/swig.spec
+++ b/swig.spec
@@ -53,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 15%{?dist}
+Release: 16%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -354,6 +354,10 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Sat Jun 18 2022 Robert-André Mauchin - 4.0.2-16
+- Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191,
+ CVE-2022-29526, CVE-2022-30629
+
* Wed Jun 01 2022 Orion Poplawski - 4.0.2-15
- Rebuild for octave 7.1
From 1d2ecc9240a9aeb04db18f3f7f38462634226d9f Mon Sep 17 00:00:00 2001
From: Maxwell G
Date: Tue, 19 Jul 2022 13:59:09 -0500
Subject: [PATCH 21/67] Rebuild for
CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in golang
---
swig.spec | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index 0234e69..bcc22a6 100644
--- a/swig.spec
+++ b/swig.spec
@@ -53,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 16%{?dist}
+Release: 17%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -354,6 +354,10 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Tue Jul 19 2022 Maxwell G - 4.0.2-17
+- Rebuild for CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in
+ golang
+
* Sat Jun 18 2022 Robert-André Mauchin - 4.0.2-16
- Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191,
CVE-2022-29526, CVE-2022-30629
From cff75cf870a85e34767334d3eb98fd9d2f1a3c7e Mon Sep 17 00:00:00 2001
From: Maxwell G
Date: Thu, 21 Jul 2022 15:27:35 -0500
Subject: [PATCH 22/67] Exclude golang extension from i686
---
swig.spec | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/swig.spec b/swig.spec
index bcc22a6..6b02e1d 100644
--- a/swig.spec
+++ b/swig.spec
@@ -44,7 +44,7 @@
%endif
# Do not run Go tests, they failed with 4.0.0 on ppc64le
-%ifarch %{ix86} x86_64 %{arm} aarch64
+%ifarch x86_64 %{arm} aarch64
%{!?golang:%global golang 1}
%else
%{!?golang:%global golang 0}
@@ -53,7 +53,7 @@
Summary: Connects C/C++/Objective C to some high-level programming languages
Name: swig
Version: 4.0.2
-Release: 17%{?dist}
+Release: 18%{?dist}
License: GPLv3+ and BSD
URL: http://swig.sourceforge.net/
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
@@ -354,6 +354,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
%{_datadir}/%{name}/gdb
%changelog
+* Thu Jul 21 2022 Maxwell G - 4.0.2-18
+- Exclude golang extension from i686
+
* Tue Jul 19 2022 Maxwell G - 4.0.2-17
- Rebuild for CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in
golang
From f1e63a86403734fe82ea8ce9f8040d76ab8f6c18 Mon Sep 17 00:00:00 2001
From: Jitka Plesnikova
Date: Tue, 25 Oct 2022 14:11:18 +0200
Subject: [PATCH 23/67] Update to 4.1.0
---
.gitignore | 1 +
sources | 2 +-
...har-typecheck-typemap-to-accept-Null.patch | 82 -
...ad_simple_cast-test-with-Python-3.10.patch | 23 -
...ed-directed-methods-with-non-void-re.patch | 101 -
swig-4.0.2-Improve-PHP-object-creation.patch | 82 -
swig-4.0.2-Support-PHP8.patch | 409 ----
....0.2-gcc-12-warning-fix-in-test-case.patch | 26 -
swig-Upgrade-to-support-newer-NodeJS.patch | 1863 -----------------
swig.spec | 39 +-
10 files changed, 16 insertions(+), 2612 deletions(-)
delete mode 100644 swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
delete mode 100644 swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
delete mode 100644 swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
delete mode 100644 swig-4.0.2-Improve-PHP-object-creation.patch
delete mode 100644 swig-4.0.2-Support-PHP8.patch
delete mode 100644 swig-4.0.2-gcc-12-warning-fix-in-test-case.patch
delete mode 100644 swig-Upgrade-to-support-newer-NodeJS.patch
diff --git a/.gitignore b/.gitignore
index 2286b59..13374dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@ swig-2.0.0.tar.gz
/swig-4.0.0.tar.gz
/swig-4.0.1.tar.gz
/swig-4.0.2.tar.gz
+/swig-4.1.0.tar.gz
diff --git a/sources b/sources
index f9f798f..c9baee1 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (swig-4.0.2.tar.gz) = 05e7da70ce6d9a733b96c0bcfa3c1b82765bd859f48c74759bbf4bb1467acb1809caa310cba5e2b3280cd704fca249eaa0624821dffae1d2a75097c7f55d14ed
+SHA512 (swig-4.1.0.tar.gz) = a7d43d6aa764923826786081a3f2e25aa0f8345e1169c1e57bf02d01f6f41c92d8db0f360ec86e0e428ef5a21d1b5cd3edb7e4b71d0beff3e6611e344b5c22b1
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
deleted file mode 100644
index b293d2f..0000000
--- a/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-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-overload_simple_cast-test-with-Python-3.10.patch b/swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
deleted file mode 100644
index a3c8cff..0000000
--- a/swig-4.0.2-Fix-overload_simple_cast-test-with-Python-3.10.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From a2850397ba3eec5d4c58304cf8277ca535919760 Mon Sep 17 00:00:00 2001
-From: Julien Schueller
-Date: Thu, 5 Aug 2021 14:05:10 +0200
-Subject: [PATCH] [Python] Fix overload_simple_cast test with 3.10
-
-Closes #2044
----
- Examples/test-suite/python/python_overload_simple_cast_runme.py | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/Examples/test-suite/python/python_overload_simple_cast_runme.py b/Examples/test-suite/python/python_overload_simple_cast_runme.py
-index fc398ab29b9..7a0174af8a2 100644
---- a/Examples/test-suite/python/python_overload_simple_cast_runme.py
-+++ b/Examples/test-suite/python/python_overload_simple_cast_runme.py
-@@ -9,6 +9,8 @@ def __init__(self, x):
- def __int__(self):
- return self.x
-
-+ def __index__(self):
-+ return self.x
-
- class Ad:
-
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
deleted file mode 100644
index 1cc5e91..0000000
--- a/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-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
deleted file mode 100644
index 2239053..0000000
--- a/swig-4.0.2-Improve-PHP-object-creation.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-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
deleted file mode 100644
index 56e9831..0000000
--- a/swig-4.0.2-Support-PHP8.patch
+++ /dev/null
@@ -1,409 +0,0 @@
-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 @@
-
-
- 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 @@
- -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-4.0.2-gcc-12-warning-fix-in-test-case.patch b/swig-4.0.2-gcc-12-warning-fix-in-test-case.patch
deleted file mode 100644
index 44e6b16..0000000
--- a/swig-4.0.2-gcc-12-warning-fix-in-test-case.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 76d5a9ec270a763c892ae28070e391cf99e0b7cd Mon Sep 17 00:00:00 2001
-From: William S Fulton
-Date: Tue, 18 Jan 2022 21:37:02 +0000
-Subject: [PATCH] gcc-12 warning fix in test-case
-
-Closes #2145
----
- Examples/test-suite/nested_class.i | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Examples/test-suite/nested_class.i b/Examples/test-suite/nested_class.i
-index b10c33949..c778a12cf 100644
---- a/Examples/test-suite/nested_class.i
-+++ b/Examples/test-suite/nested_class.i
-@@ -201,7 +201,7 @@ struct Outer {
- Integer xx;
- } MultipleInstanceAnonDerived1, MultipleInstanceAnonDerived2, *MultipleInstanceAnonDerived3, MultipleInstanceAnonDerived4[2];
-
--#if defined(__GNUC__) || defined(_MSC_VER) || defined(SWIG)
-+#if (defined(__GNUC__) && __GNUC__ < 12) || defined(_MSC_VER) || defined(SWIG)
- /* some compilers do not accept these */
- struct : public InnerMultiple {
- Integer xx;
---
-2.31.1
-
diff --git a/swig-Upgrade-to-support-newer-NodeJS.patch b/swig-Upgrade-to-support-newer-NodeJS.patch
deleted file mode 100644
index e3338ef..0000000
--- a/swig-Upgrade-to-support-newer-NodeJS.patch
+++ /dev/null
@@ -1,1863 +0,0 @@
-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