From 377be74c8a583b29afd47ae78617c027a0162719 Mon Sep 17 00:00:00 2001 From: Toshaan Bharvani Date: Mon, 23 May 2022 09:20:35 +0200 Subject: [PATCH] initial package creation Signed-off-by: Toshaan Bharvani --- SOURCES/description.h2m | 24 + ...har-typecheck-typemap-to-accept-Null.patch | 82 + ...ed-directed-methods-with-non-void-re.patch | 101 + ...ig-4.0.2-Improve-PHP-object-creation.patch | 82 + SOURCES/swig-4.0.2-Support-PHP8.patch | 409 ++++ ...swig-Upgrade-to-support-newer-NodeJS.patch | 1863 +++++++++++++++++ SPECS/swig.spec | 1037 +++++++++ 7 files changed, 3598 insertions(+) create mode 100644 SOURCES/description.h2m create mode 100644 SOURCES/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch create mode 100644 SOURCES/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch create mode 100644 SOURCES/swig-4.0.2-Improve-PHP-object-creation.patch create mode 100644 SOURCES/swig-4.0.2-Support-PHP8.patch create mode 100644 SOURCES/swig-Upgrade-to-support-newer-NodeJS.patch create mode 100644 SPECS/swig.spec diff --git a/SOURCES/description.h2m b/SOURCES/description.h2m new file mode 100644 index 0000000..e894cdd --- /dev/null +++ b/SOURCES/description.h2m @@ -0,0 +1,24 @@ +[name] +swig - Simplified Wrapper and Interface Generator + +[synopsis] +swig [ options ] " file" + +[description] +The swig command is used to create wrapper code to connect C and C++ code to +scripting languages like Perl, Python, Tcl etc. from the definition of the +interface. For detailed information on writing those interface definitions +please refer to /usr/share/doc/swig-doc/Doc/Manual/index.html from the swig-doc +package. + +This manpage concentrates on explaining the invocation of the swig command. + +[author] +SWIG was originally created by David Beazley. For up-to-date information +about authors and contributors please check http://www.swig.org/guilty.html. +This manual page was written by Torsten Landschoff and +updated by Jitka Plesnikova (but may be used by +others). + + + diff --git a/SOURCES/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch b/SOURCES/swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch new file mode 100644 index 0000000..b293d2f --- /dev/null +++ b/SOURCES/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/SOURCES/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch b/SOURCES/swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch new file mode 100644 index 0000000..1cc5e91 --- /dev/null +++ b/SOURCES/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/SOURCES/swig-4.0.2-Improve-PHP-object-creation.patch b/SOURCES/swig-4.0.2-Improve-PHP-object-creation.patch new file mode 100644 index 0000000..2239053 --- /dev/null +++ b/SOURCES/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/SOURCES/swig-4.0.2-Support-PHP8.patch b/SOURCES/swig-4.0.2-Support-PHP8.patch new file mode 100644 index 0000000..56e9831 --- /dev/null +++ b/SOURCES/swig-4.0.2-Support-PHP8.patch @@ -0,0 +1,409 @@ +From 3584c7d49cb598ce79d5e285d6c17b2dedfe3ecb Mon Sep 17 00:00:00 2001 +From: Olly Betts +Date: Wed, 17 Mar 2021 12:45:17 +1300 +Subject: [PATCH 1/4] Add initial support for PHP8 + +Testcase director_overload2 is failing, but the rest of the testsuite +passes. +--- + .travis.yml | 4 ++ + Doc/Manual/Php.html | 6 +- + Doc/Manual/Preprocessor.html | 2 +- + Doc/Manual/SWIG.html | 2 +- + Examples/Makefile.in | 6 +- + .../php/evil_diamond_prop_runme.php | 2 +- + Lib/cdata.i | 2 +- + Lib/exception.i | 2 +- + Lib/php/phprun.swg | 8 ++- + Source/Modules/php.cxx | 55 +++++++++++++++---- + configure.ac | 10 ++-- + 11 files changed, 72 insertions(+), 27 deletions(-) + +#diff --git a/.travis.yml b/.travis.yml +#index 8c293c2f9fb..9477bed946f 100644 +#--- a/.travis.yml +#+++ b/.travis.yml +#@@ -154,6 +154,10 @@ matrix: +# os: linux +# env: SWIGLANG=php VER=7.4 +# dist: xenial +#+ - compiler: gcc +#+ os: linux +#+ env: SWIGLANG=php VER=8.0 +#+ dist: xenial +# - compiler: gcc +# os: linux +# env: SWIGLANG=python # 2.7 +diff --git a/Doc/Manual/Php.html b/Doc/Manual/Php.html +index 09c514e944a..4b91958894a 100644 +--- a/Doc/Manual/Php.html ++++ b/Doc/Manual/Php.html +@@ -51,12 +51,12 @@

32 SWIG and PHP

+ +

+ In this chapter, we discuss SWIG's support of PHP. SWIG currently supports +-generating wrappers for PHP7. Support for PHP5 was removed in SWIG 4.0.0 +-and support for PHP4 was removed in SWIG 1.3.37. ++generating wrappers for PHP7 and PHP8. Support for PHP5 was removed in SWIG ++4.0.0 and support for PHP4 was removed in SWIG 1.3.37. +

+ +

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

+ +

+diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html +index 51cc0637836..0c704bde959 100644 +--- a/Doc/Manual/Preprocessor.html ++++ b/Doc/Manual/Preprocessor.html +@@ -123,7 +123,7 @@

11.3 Conditional Compilation5.1 Running SWIG

+ -lua - Generate Lua wrappers + -octave - Generate Octave wrappers + -perl5 - Generate Perl 5 wrappers +- -php7 - Generate PHP 7 wrappers ++ -php7 - Generate PHP 7 or later wrappers + -python - Generate Python wrappers + -r - Generate R (aka GNU S) wrappers + -ruby - Generate Ruby wrappers +diff --git a/Examples/Makefile.in b/Examples/Makefile.in +index 3f6140b5e79..3978a959836 100644 +--- a/Examples/Makefile.in ++++ b/Examples/Makefile.in +@@ -1045,7 +1045,7 @@ ruby_clean: + rm -f *.@OBJEXT@ *$(RUBY_SO) + + ################################################################## +-##### PHP7 ###### ++##### PHP ###### + ################################################################## + + PHP = @PHP@ +@@ -1058,7 +1058,7 @@ PHP_SCRIPT = $(SRCDIR)$(RUNME).php + # ------------------------------------------------------------------- + + php: $(SRCDIR_SRCS) +- $(SWIG) -php7 $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH) ++ $(SWIG) -php $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH) + $(CC) -c $(CCSHARED) $(CPPFLAGS) $(CFLAGS) $(SRCDIR_SRCS) $(ISRCS) $(INCLUDES) $(PHP_INCLUDE) + $(LDSHARED) $(CFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO) + +@@ -1067,7 +1067,7 @@ php: $(SRCDIR_SRCS) + # -------------------------------------------------------------------- + + php_cpp: $(SRCDIR_SRCS) +- $(SWIG) -php7 -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH) ++ $(SWIG) -php -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH) + $(CXX) -c $(CCSHARED) $(CPPFLAGS) $(CXXFLAGS) $(SRCDIR_SRCS) $(SRCDIR_CXXSRCS) $(ICXXSRCS) $(INCLUDES) $(PHP_INCLUDE) + $(CXXSHARED) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO) + +diff --git a/Examples/test-suite/php/evil_diamond_prop_runme.php b/Examples/test-suite/php/evil_diamond_prop_runme.php +index 9bdb7435f1c..645328affda 100644 +--- a/Examples/test-suite/php/evil_diamond_prop_runme.php ++++ b/Examples/test-suite/php/evil_diamond_prop_runme.php +@@ -31,7 +31,7 @@ + check::equal(1,$spam->_foo,"1==spam->_foo"); + check::equal(2,$spam->_bar,"2==spam->_bar"); + // multiple inheritance not supported in PHP +-set_error_handler(NULL, 0); // Don't complain that _baz is unknown. ++set_error_handler(function () {return true;}, E_NOTICE|E_WARNING); // Don't complain that _baz is unknown. + check::equal(null,$spam->_baz,"null==spam->_baz"); + restore_error_handler(); + check::equal(4,$spam->_spam,"4==spam->_spam"); +diff --git a/Lib/cdata.i b/Lib/cdata.i +index f18ed4af53c..cd15266431e 100644 +--- a/Lib/cdata.i ++++ b/Lib/cdata.i +@@ -21,7 +21,7 @@ typedef struct SWIGCDATA { + } + %typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); + +-#elif SWIGPHP7 ++#elif SWIGPHP + + %typemap(out) SWIGCDATA { + ZVAL_STRINGL($result, $1.data, $1.len); +diff --git a/Lib/exception.i b/Lib/exception.i +index ee9ce9bc632..3d6eeccdf2e 100644 +--- a/Lib/exception.i ++++ b/Lib/exception.i +@@ -12,7 +12,7 @@ + %insert("runtime") "swigerrors.swg" + + +-#ifdef SWIGPHP7 ++#ifdef SWIGPHP + %{ + #include "zend_exceptions.h" + #define SWIG_exception(code, msg) do { zend_throw_exception(NULL, (char*)msg, code); goto thrown; } while (0) +diff --git a/Lib/php/phprun.swg b/Lib/php/phprun.swg +index f3a4e6ad1a9..04919878743 100644 +--- a/Lib/php/phprun.swg ++++ b/Lib/php/phprun.swg +@@ -12,8 +12,8 @@ extern "C" { + #include "zend_exceptions.h" + #include "php.h" + +-#if PHP_MAJOR_VERSION != 7 +-# error These bindings need PHP7 - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5 ++#if PHP_MAJOR_VERSION < 7 ++# error These bindings need PHP 7 or later - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5 + #endif + + #include "ext/standard/php_string.h" +@@ -200,7 +200,11 @@ SWIG_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags) { + + switch (Z_TYPE_P(z)) { + case IS_OBJECT: { ++#if PHP_MAJOR_VERSION < 8 + HashTable * ht = Z_OBJ_HT_P(z)->get_properties(z); ++#else ++ HashTable * ht = Z_OBJ_HT_P(z)->get_properties(Z_OBJ_P(z)); ++#endif + if (ht) { + zval * _cPtr = zend_hash_str_find(ht, "_cPtr", sizeof("_cPtr") - 1); + if (_cPtr) { +diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx +index eaae32d633b..d8ee75b45fb 100644 +--- a/Source/Modules/php.cxx ++++ b/Source/Modules/php.cxx +@@ -473,6 +473,20 @@ class PHP : public Language { + s_arginfo = NewString("/* arginfo subsection */\n"); + arginfo_used = NewHash(); + ++ // Add arginfo we'll definitely need for *_alter_newobject and *_get_newobject. ++ SetFlag(arginfo_used, "1"); ++ Append(s_arginfo, ++ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_1, 0, 0, 0)\n" ++ " ZEND_ARG_INFO(0,arg1)\n" ++ "ZEND_END_ARG_INFO()\n"); ++ ++ SetFlag(arginfo_used, "2"); ++ Append(s_arginfo, ++ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_2, 0, 0, 0)\n" ++ " ZEND_ARG_INFO(0,arg1)\n" ++ " ZEND_ARG_INFO(0,arg2)\n" ++ "ZEND_END_ARG_INFO()\n"); ++ + /* start the function entry section */ + s_entry = NewString("/* entry subsection */\n"); + +@@ -653,8 +667,8 @@ class PHP : public Language { + } + Printv(f_begin, s_vdecl, s_wrappers, NIL); + Printv(f_begin, all_cs_entry, "\n\n", s_arginfo, "\n\n", s_entry, +- " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,NULL)\n" +- " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,NULL)\n" ++ " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,swig_arginfo_2)\n" ++ " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,swig_arginfo_1)\n" + " ZEND_FE_END\n};\n\n", NIL); + Printv(f_begin, s_init, NIL); + Delete(s_header); +@@ -689,25 +703,46 @@ class PHP : public Language { + + // We want to only emit each different arginfo once, as that reduces the + // size of both the generated source code and the compiled extension +- // module. To do this, we name the arginfo to encode the number of +- // parameters and which (if any) are passed by reference by using a +- // sequence of 0s (for non-reference) and 1s (for by references). ++ // module. The parameters at this level are just named arg1, arg2, etc ++ // so we generate an arginfo name with the number of parameters and a ++ // bitmap value saying which (if any) are passed by reference. + ParmList *l = Getattr(n, "parms"); +- String * arginfo_code = NewStringEmpty(); ++ unsigned long bitmap = 0, bit = 1; ++ int n_params = 0; ++ bool overflowed = false; + for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) { + /* Ignored parameters */ + if (checkAttribute(p, "tmap:in:numinputs", "0")) { + continue; + } +- Append(arginfo_code, GetFlag(p, "tmap:in:byref") ? "1" : "0"); ++ ++n_params; ++ if (GetFlag(p, "tmap:in:byref")) { ++ bitmap |= bit; ++ if (bit == 0) overflowed = true; ++ } ++ bit <<= 1; ++ } ++ String * arginfo_code; ++ if (overflowed) { ++ // We overflowed the bitmap so just generate a unique name - this only ++ // happens for a function with more parameters than bits in a long ++ // where a high numbered parameter is passed by reference, so should be ++ // rare in practice. ++ static int overflowed_counter = 0; ++ arginfo_code = NewStringf("z%d", ++overflowed_counter); ++ } else if (bitmap == 0) { ++ // No parameters passed by reference. ++ arginfo_code = NewStringf("%d", n_params); ++ } else { ++ arginfo_code = NewStringf("%d_%lx", n_params, bitmap); + } + + if (!GetFlag(arginfo_used, arginfo_code)) { +- // Not had this one before, so emit it. ++ // Not had this one before so emit it. + SetFlag(arginfo_used, arginfo_code); + Printf(s_arginfo, "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_%s, 0, 0, 0)\n", arginfo_code); +- for (const char * p = Char(arginfo_code); *p; ++p) { +- Printf(s_arginfo, " ZEND_ARG_PASS_INFO(%c)\n", *p); ++ for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) { ++ Printf(s_arginfo, " ZEND_ARG_INFO(%d,%s)\n", GetFlag(p, "tmap:in:byref"), Getattr(p, "lname")); + } + Printf(s_arginfo, "ZEND_END_ARG_INFO()\n"); + } +diff --git a/configure.ac b/configure.ac +index 7d5824a06b5..1894001c521 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2021,7 +2021,7 @@ AC_SUBST(RUBYSO) + AC_SUBST(RUBYDYNAMICLINKING) + + #------------------------------------------------------------------------- +-# Look for PHP7 ++# Look for PHP + #------------------------------------------------------------------------- + + PHPBIN= +@@ -2035,7 +2035,7 @@ if test x"${PHPBIN}" = xno; then + PHP= + else + if test "x$PHPBIN" = xyes; then +- AC_CHECK_PROGS(PHP, [php7.3 php7.2 php7.1 php7.0 php]) ++ AC_CHECK_PROGS(PHP, [php8.0 php7.4 php7.3 php7.2 php7.1 php7.0 php]) + else + PHP=$PHPBIN + fi +@@ -2046,12 +2046,14 @@ else + case $PHP in + *7.*) + PHPCONFIG=`echo "$PHP"|sed 's/7\...*$/-config&/'` ;; ++ *8.*) ++ PHPCONFIG=`echo "$PHP"|sed 's/8\...*$/-config&/'` ;; + *) + PHPCONFIG=$PHP-config ;; + esac + php_version=`$PHPCONFIG --version 2>/dev/null` + case $php_version in +- 7.*) ++ 7.*|8.*) + PHPINC=`$PHPCONFIG --includes 2>/dev/null` + if test -n "$PHPINC"; then + AC_MSG_RESULT($PHPINC) +@@ -2062,7 +2064,7 @@ else + "") + AC_MSG_RESULT([could not find $PHPCONFIG or obtain PHP version from it]) ;; + *) +- AC_MSG_RESULT([found PHP $php_version - not PHP 7]) ;; ++ AC_MSG_RESULT([found PHP $php_version - not PHP 7 or 8]) ;; + esac + fi + fi + +From fd96627b2fc65353c03b160efd60fdce864d386c Mon Sep 17 00:00:00 2001 +From: Olly Betts +Date: Wed, 17 Mar 2021 13:00:02 +1300 +Subject: [PATCH 2/4] Temporary hack so testsuite passes for PHP8 + +--- + Examples/test-suite/director_overload2.i | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Examples/test-suite/director_overload2.i b/Examples/test-suite/director_overload2.i +index e467c18cea6..ddfa65bb4d3 100644 +--- a/Examples/test-suite/director_overload2.i ++++ b/Examples/test-suite/director_overload2.i +@@ -14,11 +14,15 @@ struct OverloadDerived1 : OverloadBase { + virtual void nnn(int vvv) {} + #if defined(__SUNPRO_CC) + virtual void nnn() {} ++#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8 ++ virtual void nnn() {} + #endif + }; + struct OverloadDerived2 : OverloadBase { + #if defined(__SUNPRO_CC) + virtual void nnn(int vvv) {} ++#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8 ++ virtual void nnn(int vvv) {} + #endif + virtual void nnn() {} + }; + +From 4c3e85fbd47f804b5956bf37f0073795296ddde2 Mon Sep 17 00:00:00 2001 +From: Olly Betts +Date: Sun, 21 Mar 2021 10:43:06 +1300 +Subject: [PATCH 3/4] Clarify what SWIGPHP7 means + +--- + Doc/Manual/Preprocessor.html | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html +index 0c704bde959..7611ea40c2b 100644 +--- a/Doc/Manual/Preprocessor.html ++++ b/Doc/Manual/Preprocessor.html +@@ -123,7 +123,7 @@

11.3 Conditional Compilation +Date: Sun, 21 Mar 2021 10:54:17 +1300 +Subject: [PATCH 4/4] Update CHANGES.current and RELEASENOTES re PHP8 + +--- + CHANGES.current | 3 +++ + RELEASENOTES | 3 +++ + 2 files changed, 6 insertions(+) + +#diff --git a/CHANGES.current b/CHANGES.current +#index 79d41001f0a..6ae5689ee37 100644 +#--- a/CHANGES.current +#+++ b/CHANGES.current +#@@ -7,6 +7,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ +# Version 4.1.0 (in progress) +# =========================== +# +#+2021-03-21: olly +#+ #1929, #1978 [PHP] Add support for PHP 8. +#+ +# 2021-03-19: olly +# #1527 [PHP] Improve PHP object creation in directorin case. +# Reportedly the code we were using in this case gave segfaults in +diff --git a/RELEASENOTES b/RELEASENOTES +index cc3ba07121d..55590108759 100644 +--- a/RELEASENOTES ++++ b/RELEASENOTES +@@ -7,6 +7,9 @@ Release Notes + Detailed release notes are available with the release and are also + published on the SWIG web site at http://swig.org/release.html. + ++SWIG-4.2.0 summary: ++- Add PHP 8 support. ++ + SWIG-4.0.2 summary: + - A few fixes around doxygen comment handling. + - Ruby 2.7 support added. diff --git a/SOURCES/swig-Upgrade-to-support-newer-NodeJS.patch b/SOURCES/swig-Upgrade-to-support-newer-NodeJS.patch new file mode 100644 index 0000000..e3338ef --- /dev/null +++ b/SOURCES/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/SPECS/swig.spec b/SPECS/swig.spec new file mode 100644 index 0000000..acc05fd --- /dev/null +++ b/SPECS/swig.spec @@ -0,0 +1,1037 @@ +# We can skip tests +%bcond_without testsuite + +%if %{without testsuite} +%global tcl 0 +%global lualang 0 +%global perllang 0 +%global phplang 0 +%global rubylang 0 +%global python3lang 0 +%global golang 0 +%global octave 0 +%global Rlang 0 +%global javalang 0 +%endif + +%{!?tcl:%global tcl 1} +%{!?guile:%global guile 0} +%{!?lualang:%global lualang 1} +%{!?perllang:%global perllang 1} +%{!?phplang:%global phplang 1} +# Disable Ruby test failed with swig 4.0.0 on s390 +%ifarch s390x %{power64} +%{!?rubylang:%global rubylang 0} +%else +%{!?rubylang:%global rubylang 1} +%endif +%{!?python3lang:%global python3lang 1} + +%if 0%{?rhel} +%{!?golang:%global golang 0} +%{!?octave:%global octave 0} +%{!?Rlang:%global Rlang 0} +%bcond_with build_ccache_swig +%else +%{!?octave:%global octave 1} +%{!?Rlang:%global Rlang 1} +%bcond_without build_ccache_swig +%endif +%ifarch aarch64 %{arm} %{mips} ppc %{power64} s390 s390x +%{!?javalang:%global javalang 0} +%else +%{!?javalang:%global javalang 1} +%endif + +# Do not run Go tests, they failed with 4.0.0 on ppc64le +%ifarch %{ix86} x86_64 %{arm} aarch64 +# Tests do not work with Go 1.15 +%{!?golang:%global golang 0} +%else +%{!?golang:%global golang 0} +%endif + +Summary: Connects C/C++/Objective C to some high-level programming languages +Name: swig +Version: 4.0.2 +Release: 8%{?dist} +License: GPLv3+ and BSD +URL: http://swig.sourceforge.net/ +Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz +# Define the part of man page sections +Source1: description.h2m +%if %{with build_ccache_swig} +Source2: description-ccache.h2m +Source3: ccache-swig.sh +Source4: ccache-swig.csh +%endif + +# 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 +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: autoconf, automake, gawk, dos2unix +BuildRequires: gcc-c++ +BuildRequires: help2man +BuildRequires: perl-devel +BuildRequires: perl(base) +BuildRequires: perl(Config) +BuildRequires: perl(Devel::Peek) +BuildRequires: perl(ExtUtils::MakeMaker) +BuildRequires: perl(fields) +BuildRequires: perl(Math::BigInt) +BuildRequires: perl(strict) +BuildRequires: perl(Test::More) +BuildRequires: perl(vars) +BuildRequires: perl(warnings) +BuildRequires: boost-devel +# Need when Source/CParse/parser.y is patched +BuildRequires: bison +%if %{tcl} +BuildRequires: tcl-devel +%endif +%if %{guile} +BuildRequires: guile-devel +%endif +%if %{octave} +BuildRequires: octave-devel +%endif +%if %{golang} +BuildRequires: golang +BuildRequires: golang-bin +BuildRequires: golang-shared +BuildRequires: golang-src +%endif +%if %{lualang} +BuildRequires: lua-devel +%endif +%if %{rubylang} +BuildRequires: ruby-devel +%endif +%if %{Rlang} +BuildRequires: R-devel +%endif +%if %{javalang} +BuildRequires: java, java-devel +%endif +%if %{phplang} +BuildRequires: php, php-devel +%endif + +%description +Simplified Wrapper and Interface Generator (SWIG) is a software +development tool for connecting C, C++ and Objective C programs with a +variety of high-level programming languages. SWIG is used with different +types of target languages including common scripting languages such as +Javascript, Perl, PHP, Python, Tcl and Ruby. The list of supported +languages also includes non-scripting languages such as C#, D, Go language, +Java including Android, Lua, OCaml, Octave, Scilab and R. Also several +interpreted and compiled Scheme implementations (Guile, MzScheme/Racket) +are supported. SWIG is most commonly used to create high-level interpreted +or compiled programming environments, user interfaces, and as a tool for +testing and prototyping C/C++ software. + +%if %{with build_ccache_swig} +%package -n ccache-swig +Summary: Fast compiler cache +License: GPLv2+ +Requires: swig +Conflicts: swig < 3.0.8-2 + +%description -n ccache-swig +ccache-swig is a compiler cache. It speeds up re-compilation of C/C++/SWIG +code by caching previous compiles and detecting when the same compile is +being done again. ccache-swig is ccache plus support for SWIG. +%endif + +%package doc +Summary: Documentation files for SWIG +License: BSD +BuildArch: noarch + +%description doc +This package contains documentation for SWIG and useful examples + +%package gdb +Summary: Commands for easier debugging of SWIG +License: BSD +Requires: swig + +%description gdb +This package contains file with commands for easier debugging of SWIG +in gdb. + +%prep +%autosetup -p1 + +for all in CHANGES README; do + iconv -f ISO88591 -t UTF8 < $all > $all.new + touch -r $all $all.new + mv -f $all.new $all +done + +%build +./autogen.sh + +# Disable maximum compile warnings when octave is supported, because Octave +# code produces lots of the warnings demanded by strict ISO C and ISO C++. +# It causes that log had more then 600M. +# 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=2to3 \ +%else + --without-python3 \ +%endif +%if %{phplang} + --with-php \ +%else + --without-php \ +%endif +%if ! %{perllang} + --without-perl5 \ +%endif +%if ! %{tcl} + --without-tcl \ +%endif +%if ! %{javalang} + --without-java \ +%endif +%if ! %{Rlang} + --without-r \ +%endif +%if ! %{golang} + --without-go \ +%endif +%if %{octave} + --with-octave=%{_bindir}/octave \ + --without-maximum-compile-warnings \ +%endif +%if %{without build_ccache_swig} + --disable-ccache \ +%endif +; +%{make_build} + +%if %{with testsuite} +# Test suite +make check PY3=1 +%endif + +%install +# Remove all arch dependent files in Examples/ created during tests +make clean-examples + +pushd Examples/ +# Remove all arch dependent files in Examples/ +find -type f -name 'Makefile.in' -delete -print + +# We don't want to ship files below. +rm -rf test-suite +find -type f -name '*.dsp' -delete -print +find -type f -name '*.dsw' -delete -print + +# Convert files to UNIX format +for all in `find -type f`; do + dos2unix -k $all + chmod -x $all +done +popd + +%{make_install} + +################################################# +# Use help output for generating of man page swig +echo "Options:" >help_swig +%{buildroot}%{_bindir}/swig --help >>help_swig + +# Update the output to be correctly formatted be help2man +sed -i -e 's/^\(\s\+-[^-]\+\)- \(.*\)$/\1 \2/' help_swig +sed -i -e 's/^\(\s\+-\w\+-[^-]*\)- \(.*\)$/\1 \2/' help_swig + +# Generate a helper script that will be used by help2man +cat >h2m_helper_swig <<'EOF' +#!/bin/bash +[ "$1" == "--version" ] && echo "" || cat help_swig +EOF +chmod a+x h2m_helper_swig + +# Generate man page +help2man -N --section 1 ./h2m_helper_swig --include %{SOURCE1} -o %{name}.1 + +%if %{with build_ccache_swig} +######################################################## +# Use help output for generating of man page ccache-swig +%{buildroot}%{_bindir}/ccache-swig -h >>help_ccache + +# Update the output to be correctly formatted be help2man +sed -i -e '/compiler cache/ d' help_ccache +sed -i -e '/Copyright/ d' help_ccache +sed -i -e 's/^Usage:/[synopsis]/' help_ccache +sed -i -e 's/^Options:/[options]/' help_ccache +sed -i -e 's/^\s\+/ /' help_ccache +sed -i -e 's/^\(-[^- ] <\w\+>\s\+\) \(\w.\+\)$/ \1 \2/' help_ccache +sed -i -e 's/^\(-[^- ]\s\+\) \(\w.\+\)$/ \1 \2/' help_ccache + +# Generate a helper script that will be used by help2man +cat >h2m_helper_ccache <<'EOF' +#!/bin/bash +[ "$1" == "--version" ] && echo "" +[ "$1" == "--help" ] && echo "" || echo "" +EOF +chmod a+x h2m_helper_ccache + +cat %{SOURCE2} >>help_ccache +sed -i -e 's#@DOCDIR@#%{_docdir}#' help_ccache + +# Generate man page +help2man -N --section 1 ./h2m_helper_ccache --include help_ccache -o ccache-swig.1 +%endif + +# Add man page for swig to repository +mkdir -p %{buildroot}%{_mandir}/man1/ +install -p -m 0644 %{name}.1 %{buildroot}%{_mandir}/man1/ +%if %{with build_ccache_swig} +install -p -m 0644 ccache-swig.1 %{buildroot}%{_mandir}/man1/ +%endif + +# Quiet some rpmlint complaints - remove empty file +rm -f %{buildroot}%{_datadir}/%name/%{version}/octave/std_carray.i + +%if %{with build_ccache_swig} +# Enable ccache-swig by default +mkdir -p %{buildroot}%{_sysconfdir}/profile.d/ +install -dm 755 %{buildroot}%{_sysconfdir}/profile.d +install -pm 644 %{SOURCE3} %{SOURCE4} %{buildroot}%{_sysconfdir}/profile.d +%endif + +# Add swig.gdb sub-package gdb +mkdir -p %{buildroot}%{_datadir}/%{name}/gdb +install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb + +%files +%{_bindir}/%{name} +%{_datadir}/%{name} +%exclude %{_datadir}/%{name}/gdb +%{_mandir}/man1/swig.1* +%license LICENSE LICENSE-GPL LICENSE-UNIVERSITIES +%doc ANNOUNCE CHANGES CHANGES.current +%doc COPYRIGHT README TODO + +%if %{with build_ccache_swig} +%files -n ccache-swig +%{_bindir}/ccache-swig +%config(noreplace) %{_sysconfdir}/profile.d/ccache-swig.*sh +%{_mandir}/man1/ccache-swig.1* +%endif + +%files doc +%license LICENSE LICENSE-GPL LICENSE-UNIVERSITIES +%doc Doc Examples COPYRIGHT + +%files gdb +%{_datadir}/%{name}/gdb + +%changelog +* Tue Aug 10 2021 Mohan Boddu - 4.0.2-8 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Tue Jun 22 2021 Mohan Boddu - 4.0.2-7 +- Rebuilt for RHEL 9 BETA for openssl 3.0 + Related: rhbz#1971065 + +* Fri Apr 16 2021 Mohan Boddu - 4.0.2-6 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* 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 + +* 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 +- Disable Go tests + +* 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) + +* 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 + +* Fri Jan 31 2020 Fedora Release Engineering - 4.0.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jan 23 2020 Jitka Plesnikova - 4.0.1-5 +- Add support for Ruby 2.7 +- Fix code generated for Ruby global variables + +* Sat Jan 18 2020 Mamoru TASAKA - 4.0.1-4 +- Backport upstream fixes for ruby 2.7 (as small as possible for now) + +* Tue Nov 19 2019 Jitka Plesnikova - 4.0.1-3 +- Disable Ruby tests on all archs + +* Thu Oct 17 2019 Jitka Plesnikova - 4.0.1-2 +- Disable Ruby tests on x86_64 + +* Wed Aug 21 2019 Jitka Plesnikova - 4.0.1-1 +- Update to 4.0.1 + - Add Python 3.8 support + - Python Sphinx compatibility added for Doxygen comments + - Fix some C++17 compatibility problems in Python and Ruby generated + code + +* Mon Aug 12 2019 Jitka Plesnikova - 4.0.0-5 +- Backport upstream fix for Go tests (BZ#1736731) + +* Tue Aug 06 2019 Jitka Plesnikova - 4.0.0-4 +- Disable Go tests, they fail with Go 1.13-beta + +* Sat Jul 27 2019 Fedora Release Engineering - 4.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed Jun 05 2019 Jitka Plesnikova - 4.0.0-2 +- Updated package description + +* Fri May 03 2019 Jitka Plesnikova - 4.0.0-1 +- Update to 4.0.0 + +* Sat Apr 27 2019 Orion Poplawski - 3.0.12-25 +- Add patches for octave 5.1 support + +* Sun Feb 03 2019 Fedora Release Engineering - 3.0.12-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jan 25 2019 Jonathan Wakely - 3.0.12-23 +- Rebuilt for Boost 1.69 + +* Thu Nov 15 2018 Jitka Plesnikova - 3.0.12-22 +- Add support for Octave 4.4 + +* Sat Jul 14 2018 Fedora Release Engineering - 3.0.12-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon Jul 02 2018 Miro Hrončok - 3.0.12-20 +- Rebuilt for Python 3.7 + +* Fri Jun 22 2018 Jitka Plesnikova - 3.0.12-19 +- Disable using of Python 2 + +* Tue Jun 19 2018 Miro Hrončok - 3.0.12-18 +- Rebuilt for Python 3.7 + +* Tue Apr 24 2018 Jitka Plesnikova - 3.0.12-17 +- Backport upstream Coverity fixes (bug#1570037) +- Do not build ccache-swig on RHEL + +* Wed Feb 14 2018 Jitka Plesnikova - 3.0.12-16 +- Update conditions for tests +- Fix configure to properly check version of Go 1.10 + +* Fri Feb 09 2018 Fedora Release Engineering - 3.0.12-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 23 2018 Jonathan Wakely - 3.0.12-14 +- Rebuilt for Boost 1.66 + +* Tue Nov 21 2017 Jitka Plesnikova - 3.0.12-13 +- Disable PHP tests, because they fail with PHP 7.2.0-RC + +* Wed Sep 20 2017 Jitka Plesnikova - 3.0.12-12 +- Fix generated code for constant expressions containing wchar_t L + literals + +* Thu Sep 07 2017 Jared Smith - 3.0.12-11 +- Add patch to support NodeJS versions 7 and 8, fixes FTBFS + +* Thu Aug 03 2017 Fedora Release Engineering - 3.0.12-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 3.0.12-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jun 14 2017 Jitka Plesnikova - 3.0.12-8 +- Fixed tests to building on Perl 5.26 without dot in INC + +* Mon May 15 2017 Fedora Release Engineering - 3.0.12-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Sat Apr 29 2017 Björn Esser - 3.0.12-6 +- Rebuilt for bootstrapping new arch: s390x + +* Mon Feb 13 2017 Björn Esser - 3.0.12-5 +- Rebuilt with R-testsuite enabled + +* Sat Feb 11 2017 Fedora Release Engineering - 3.0.12-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Feb 01 2017 Björn Esser - 3.0.12-3 +- Rebuilt with Octave-testsuite enabled + +* Sun Jan 29 2017 Björn Esser - 3.0.12-2 +- Rebuilt for Boost 1.63 + +* Sat Jan 28 2017 Björn Esser - 3.0.12-1 +- Update to 3.0.12 +- Drop Patch1 and Patch2, applied in upstream-tarball +- Build without Octave and R testsuite, since they are broken due to GCC-7 + +* Sat Jan 14 2017 Björn Esser - 3.0.11-2 +- Add Patch1 from upstream + - Do not dump Octave core in examples/test suite scripts +- Add Patch2 for Fedora >= 26, backported from upstream + - Support for Octave 4.2 + +* Mon Jan 02 2017 Jitka Plesnikova - 3.0.11-1 +- Update to 3.0.11 + - Add support for PHP 7 + - Disable guile tests + +* Wed Oct 19 2016 Jitka Plesnikova - 3.0.10-2 +- Sub-package file swig.gdb (bug #1332673) + +* Mon Jun 13 2016 Jitka Plesnikova - 3.0.10-1 +- Update to 3.0.10 + +* Wed May 25 2016 Jitka Plesnikova - 3.0.8-8 +- Fix Ruby opaque pointer handling (bug #1299502) + +* Mon Apr 18 2016 Jitka Plesnikova - 3.0.8-7 +- Add support for Go 1.6 + +* Fri Mar 11 2016 Michal Toman - 3.0.8-6 +- Do not build R, Java and Go on MIPS + +* Tue Mar 01 2016 Jitka Plesnikova - 3.0.8-5 +- Used updated upstream fix for GCC 6 issue + +* Mon Feb 22 2016 Jitka Plesnikova - 3.0.8-4 +- Patched to build against GCC 6 +- Disable Go tests, because they failed against new Go 1.6 + +* Fri Feb 05 2016 Fedora Release Engineering - 3.0.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 14 2016 Jitka Plesnikova - 3.0.8-2 +- Move ccache-swig to sub-package +- Generate man page for ccache-swig from help + +* Mon Jan 04 2016 Jitka Plesnikova - 3.0.8-1 +- Update to 3.0.8 + +* Sun Dec 06 2015 Björn Esser - 3.0.7-10 +- fix hunk-offsets in patches + +* Sun Dec 06 2015 Björn Esser - 3.0.7-9 +- add Patch10: Python 3.5, -builtin, excess elements in struct initializer +- add Patch11: Fix incorrect director_classic_runme.py test +- add Patch12: Python SystemError fix with -builtin +- add Patch13: size_type-correction for SwigPySequence_Cont +- add Patch14: Python use Py_ssize_t instead of int for better portability +- add Patch15: Add python inplace-operator caveats to pyopers.swg + +* Wed Oct 21 2015 David Sommerseth - 3.0.7-8 +- Ignore locally installed ccache when running CCache unit tests +- Resolves: bz#1274031 + +* Wed Sep 16 2015 Jitka Plesnikova - 3.0.7-7 +- Remove the old setools patch. The bug was already fixed by upstream +- Resolves: bz#1180257 + +* Mon Sep 14 2015 Jitka Plesnikova - 3.0.7-6 +- Fix Ruby tracking code (BZ#1225140) + +* Thu Sep 03 2015 Jonathan Wakely - 3.0.7-5 +- Rebuilt for Boost 1.59 + +* Tue Sep 01 2015 Jitka Plesnikova - 3.0.7-4 +- Disable Ruby tests + +* Thu Aug 27 2015 Jonathan Wakely - 3.0.7-3 +- Rebuilt for Boost 1.59 + +* Wed Aug 05 2015 Jonathan Wakely 3.0.7-2 +- Rebuilt for Boost 1.58 + +* Tue Aug 04 2015 Björn Esser - 3.0.7-1 +- Update to 3.0.7 (#1249845) +- Dropped Patch2, changes applied in upstream tarball + +* Wed Jul 29 2015 Fedora Release Engineering - 3.0.6-6 +- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159 + +* Thu Jul 23 2015 Jitka Plesnikova - 3.0.6-5 +- rebuild for Boost 1.58 + +* Thu Jul 23 2015 Jitka Plesnikova - 3.0.6-4 +- Disable Ruby tests on Fedora 23 and higher when building on armv7 +- Update list of Perl dependencies + +* Wed Jul 22 2015 David Tardon - 3.0.6-3 +- rebuild for Boost 1.58 + +* Fri Jul 10 2015 Orion Poplawski - 3.0.6-2 +- Add patch for octave 4.0.0 support + +* Mon Jul 06 2015 Björn Esser - 3.0.6-1 +- Update to 3.0.6 (#1240107) +- Dropped Patch2 and Patch3, changes applied in upstream tarball + +* Fri Jun 19 2015 Fedora Release Engineering - 3.0.5-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 26 2015 Dan Horák - 3.0.5-7 +- skip ruby also on s390 (#1225140) + +* Sat Apr 25 2015 Björn Esser - 3.0.5-6 +- Updated Patch3 with a more elaborated approach + +* Sat Apr 04 2015 Björn Esser - 3.0.5-5 +- Disable Ruby-testsuite on fc23 when building on armv7. It currently + segfaults for unknown reason. +- Add a notice about Patch2 got accepted by upstream and can be dropped + on next version. + +* Fri Apr 03 2015 Björn Esser - 3.0.5-4 +- Add Patch3 to fix segfaults of Python-wrappers when generating + code with `-buildin -modern -modernargs`-flags + +* Thu Feb 19 2015 Orion Poplawski - 3.0.5-3 +- Rebuild for gcc 5 C++11 ABI + +* Tue Feb 10 2015 Björn Esser - 3.0.5-2 +- Enable ccache-swig by default, if ccache is installed (#1176861) + +* Tue Feb 03 2015 Jitka Plesnikova - 3.0.5-1 +- Update to 3.0.5 (#1178440) + +* Tue Jan 27 2015 Petr Machata - 3.0.2-3 +- Rebuild for boost 1.57.0 + +* Mon Aug 18 2014 Fedora Release Engineering - 3.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Mon Jun 09 2014 Jitka Plesnikova - 3.0.2-1 +- Update to 3.0.2 + +* Sun Jun 08 2014 Fedora Release Engineering - 3.0.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu May 29 2014 Jitka Plesnikova - 3.0.1-1 +- Update to 3.0.1 +- Updated parameters for configure and conditions for BRs + +* Fri May 23 2014 Petr Machata - 3.0.0-7 +- Rebuild for boost 1.55.0 + +* Thu May 22 2014 Dan Horák 3.0.0-6 +- java unit tests fail on s390(x), too. disable for now + +* Mon May 12 2014 Peter Robinson 3.0.0-5 +- unit tests fail on aarch64, too. disable for now + +* Fri Apr 25 2014 Peter Robinson 3.0.0-4 +- No golang or R on aarch64 (currently) + +* Tue Apr 22 2014 Karsten Hopp 3.0.0-3 +- golang is exclusivearch %%{ix86} x86_64 %%{arm}, don't BR it on ppc*, s390* +- unit tests fail on other ppc archs, too. disable for now + +* Fri Mar 28 2014 Jitka Plesnikova - 3.0.0-2 +- Small changes to enable ppc64le (BZ#1081724) + +* Thu Mar 20 2014 Jitka Plesnikova - 3.0.0-1 +- Update to 3.0.0 +- Update BRs to run tests for Java, Ruby, Lua, R, Go +- Replace %%define by %%global (BZ#1063589) +- Remove Group tag (BZ#1063589) +- Generate man page from help to have the correct list of options + +* Fri Feb 28 2014 Orion Poplawski - 2.0.12-1 +- Update to 2.0.12 +- A patch to fix guile locale + +* Wed Oct 09 2013 Jitka Plesnikova - 2.0.11-2 +- Use bconds for enabling testsuite + +* Mon Sep 16 2013 Jitka Plesnikova - 2.0.11-1 +- Update to 2.0.11 + +* Wed Aug 21 2013 Jitka Plesnikova - 2.0.10-4 +- Fixed BZ#994120 + - Remove the req/prov filtering from version docdir (BZ#489421), because + it is not needed + +* Sun Aug 04 2013 Fedora Release Engineering - 2.0.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue Jul 30 2013 Petr Machata - 2.0.10-2 +- Rebuild for boost 1.54.0 + +* Fri May 31 2013 Jitka Plesnikova - 2.0.10-1 +- Update to 2.0.10 +- swig203-rh706140.patch merged +- swig204-rh752054.patch merged +- Create swig-2.0.10-Fix-x390-build.patch + +* Fri May 24 2013 Jitka Plesnikova - 2.0.9-3 +- Add man page for swig (BZ#948407) + +* Fri Feb 15 2013 Fedora Release Engineering - 2.0.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Jan 07 2013 Adam Tkac 2.0.9-1 +- update to 2.0.9 + +* Wed Sep 12 2012 Adam Tkac 2.0.8-1 +- update to 2.0.8 (#851364) +- swig207-rh830660.patch merged +- swig207-r13128.patch merged +- swig-rh841245.patch merged + +* Thu Jul 19 2012 Adam Tkac 2.0.7-4 +- don't clean "bool" definition in PERL 5 environment (#841245) + +* Wed Jun 27 2012 Adam Tkac 2.0.7-3 +- fix building of setools package + +* Tue Jun 12 2012 Adam Tkac 2.0.7-2 +- fix generating of python3 wrappers (#830660) +- don't crash when attepmting to warn about wrong descructor (#830249) + +* Thu Jun 07 2012 Adam Tkac 2.0.7-1 +- update to 2.0.7 +- swig-1.3.23-pylib.patch is no longer needed + +* Thu May 10 2012 Adam Tkac 2.0.6-1 +- update to 2.0.6 + +* Mon Apr 23 2012 Adam Tkac 2.0.5-1 +- update to 2.0.5 +- patches merged + - swig204-rh753321.patch + - swig204-rh679948.patch + - swig204-rh770696.patch + +* Thu Apr 19 2012 Adam Tkac - 2.0.4-7 +- drop Octave support on RHEL + +* Fri Feb 10 2012 Petr Pisar - 2.0.4-6 +- Rebuild against PCRE 8.30 + +* Thu Jan 05 2012 Adam Tkac 2.0.4-5 +- fix for PHP 5.4 bindings (#770696) + +* Tue Nov 15 2011 Adam Tkac 2.0.4-4 +- don't apply patch for #752054 till guile2 gets into distro + +* Mon Nov 14 2011 Adam Tkac 2.0.4-3 +- backport r12814 from trunk (#753321) +- use scm_to_utf8_string instead of SCM_STRING_CHARS in guile bindings (#752054) +- improve Octave compatibility (#679948) + +* Mon Aug 1 2011 Nick Bebout 2.0.4-2 +- rebuild to fix 2.0.3 being tagged in over 2.0.4-1 + +* Mon Jun 20 2011 Adam Tkac 2.0.4-1 +- update to 2.0.4 +- patches merged + - swig200-rh666429.patch + - swig200-rh623854.patch + +* Mon Jun 20 2011 Marcela Mašláňová 2.0.3-3 +- Perl mass rebuild + +* Fri May 20 2011 Adam Tkac 2.0.3-2 +- make guile generator compatible with guile2 (#706140) + +* Fri Apr 22 2011 Adam Tkac 2.0.3-1 +- update to 2.0.3 +- swig202-rh691513.patch merged + +* Tue Mar 29 2011 Adam Tkac 2.0.2-2 +- bacport fix for preprocessor regression (#691513) + +* Mon Feb 21 2011 Adam Tkac 2.0.2-1 +- update to 2.0.2 + +* Wed Feb 16 2011 Adam Tkac 2.0.1-4 +- improve fix for PySlice issue (#666429) + +* Wed Feb 09 2011 Fedora Release Engineering - 2.0.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Jan 03 2011 Adam Tkac 2.0.1-2 +- attempt to fix PySlice* API/ABI issues with the Python 3.2 (#666429) + +* Thu Oct 07 2010 Adam Tkac 2.0.1-1 +- update to 2.0.1 (#640354) +- BR pcre-devel + +* Fri Aug 27 2010 Adam Tkac 2.0.0-5 +- make PyCObjects->PyCapsule patch C++ compatible (#627310) + +* Fri Aug 20 2010 Adam Tkac 2.0.0-4 +- improve patch for #623854 (PyCObjects->PyCapsule transition) + +* Tue Aug 17 2010 Adam Tkac 2.0.0-3 +- python: use new PyCapsule API instead of former PyCObjects API + +* Mon Jul 12 2010 Adam Tkac 2.0.0-2 +- add LICENSE-GPL, LICENSE-UNIVERSITIES and COPYRIGHT to %%doc +- include all license files in the -doc subpkg + +* Thu Jun 24 2010 Adam Tkac 2.0.0-1 +- update to 2.0.0 +- license changed to GPLv3+ and BSD + +* Mon Feb 22 2010 Adam Tkac 1.3.40-5 +- s/LGPL/LGPLv2+ + +* Thu Feb 18 2010 Adam Tkac 1.3.40-4 +- correct license field again + +* Thu Feb 18 2010 Adam Tkac 1.3.40-3 +- correct license field + +* Mon Dec 07 2009 Adam Tkac 1.3.40-2 +- package review related fixes (#226442) + +* Wed Sep 02 2009 Adam Tkac 1.3.40-1 +- update to 1.3.40 + +* Tue Aug 11 2009 Adam Tkac 1.3.39-4 +- correct source URL + +* Mon Aug 03 2009 Adam Tkac 1.3.39-3 +- rebuilt + +* Sun Jul 26 2009 Fedora Release Engineering - 1.3.39-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Mar 30 2009 Adam Tkac 1.3.39-1 +- update to 1.3.39 +- swig-1.3.38-rh485540.patch was merged +- add Example/ to -doc again (#489077), filter provides correctly + +* Tue Mar 10 2009 Adam Tkac 1.3.38-5 +- revert #489077 enhancement due #489421 + +* Mon Mar 09 2009 Adam Tkac 1.3.38-4 +- moved documentation to -doc subpackage and build it as noarch +- added Example/ directory to -doc (#489077) +- fixed build root + +* Wed Feb 25 2009 Fedora Release Engineering - 1.3.38-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 16 2009 Adam Tkac 1.3.38-2 +- handle -co option gracefully (#485540) + +* Thu Feb 12 2009 Adam Tkac 1.3.38-1 +- updated to 1.3.38 + +* Thu Dec 04 2008 Adam Tkac 1.3.36-2 +- #470811 is fixed => dropped workaround + +* Mon Nov 10 2008 Adam Tkac 1.3.36-1 +- updated to 1.3.36 +- finally dropped swig-arch.patch +- temporary workaround rpm bug #470811 + +* Fri May 16 2008 Adam Tkac 1.3.35-2 +- readded swig-arch.patch, will be kept downstream + +* Mon May 05 2008 Adam Tkac 1.3.35-1 +- updated to latest upstream release + +* Mon Feb 18 2008 Fedora Release Engineering - 1.3.33-2 +- Autorebuild for GCC 4.3 + +* Thu Nov 29 2007 Adam Tkac 1.3.33-1 +- 1.3.33 +- removed swig-arch.patch because upstream will never accept + it ("swig is not low-level") + +* Wed Aug 22 2007 Adam Tkac 1.31.1-1 +- rebuild (BuildID feature) +- BuildRequires gawk + +* Tue Nov 28 2006 Adam Tkac 1.31.1-0 +- updated to 1.2.31 (#216991) + +* Tue Nov 07 2006 Adam Tkac 1.3.29-2 +- swig can determine architecture now (#211095) + +* Mon Aug 28 2006 Jitka Kudrnacova -1.3.29-1 +-rebuilt + +* Tue Jul 18 2006 Jitka Kudrnacova - 1.3.29-0.3 +- rebuilt + +* Fri Jun 30 2006 Jitka Kudrnacova - 1.3.29-0.2 +- Build requires autoconf, automake (bug #197132) + +* Wed Apr 19 2006 Jitka Kudrnacova - 1.3.29-0.1 +- folder /usr/share/swig should be owned by swig package (bug #189145) + +* Tue Mar 28 2006 Jitka Kudrnacova - 1.3.29-0 +- update to swig-1.2.29-0 + +* Fri Feb 10 2006 Jesse Keating - 1.3.24-2.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.3.24-2.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Mar 02 2005 Phil Knirsch 1.3.24-2 +- bump release and rebuild with gcc 4 + +* Thu Feb 03 2005 Karsten Hopp 1.3.24-1 +- update + +* Wed Dec 01 2004 Phil Knirsch 1.3.23-2 +- rebuild + +* Tue Nov 23 2004 Karsten Hopp 1.3.23-1 +- update +- new pylib patch +- remove destdir patch, swig.m4 is no longer included +- remove ldconfig patch, swig now uses *-config to find out linker options + +* Mon Nov 8 2004 Jeremy Katz - 1.3.21-7 +- rebuild against python 2.4 + +* Mon Oct 11 2004 Tim Waugh 1.3.21-6 +- Build requires tcl-devel (bug #134788). + +* Thu Sep 30 2004 Joe Orton 1.3.21-5 +- don't output -L$libdir in -ldflags + +* Wed Sep 22 2004 Florian La Roche +- add ldconfig calls to post/postun + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Wed May 19 2004 Joe Orton 1.3.21-2 +- restore missing runtime libraries + +* Tue May 04 2004 Phil Knirsch +- Update to swig-1.3.21 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Sep 23 2003 Florian La Roche +- allow compiling without tcl/guile + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Sun May 18 2003 Joe Orton 1.3.19-3 +- patch to pick up python libdir correctly + +* Sun May 18 2003 Joe Orton 1.3.19-2 +- add BuildPrereqs to ensure all bindings are built + +* Wed May 14 2003 Phil Knirsch 1.3.19-1 +- Update to swig-1.3.19 +- Major cleanup in specfile, too. :-) +- New lib64 fix. + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Wed Nov 27 2002 Tim Powers 1.1p5-21 +- lib64'ize + +* Fri Aug 30 2002 Phil Knirsch 1.1p5-20 +- Patch by Lon Hohberger for ia64. + +* Wed Aug 28 2002 Phil Knirsch 1.1p5-19 +- Added multilib safe patch from arjan (#72523) + +* Tue Aug 13 2002 Karsten Hopp +- rebuilt with gcc-3.2 + +* Sat Aug 10 2002 Elliot Lee +- rebuilt with gcc-3.2 (we hope) + +* Mon Jul 22 2002 Tim Powers +- rebuild using gcc-3.2-0.1 + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Fri Feb 8 2002 Bill Nottingham +- rebuild + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Fri Apr 27 2001 Nalin Dahyabhai +- use %%{_tmppath} instead of /var/tmp +- remove the postscript docs (pdftops from the xpdf pkg converts them just fine) + +* Wed Sep 13 2000 Tim Powers +- rebuilt for 7.1 + +* Mon Jul 24 2000 Prospector +- rebuilt + +* Mon Jul 17 2000 Tim Powers +- for some reason defattr wasn't before the docs, fixed + +* Mon Jul 10 2000 Tim Powers +- rebuilt + +* Fri Jun 2 2000 Tim Powers +- spec file cleanups + +* Sat May 20 2000 Tim Powers +- rebuilt for 7.0 +- man pages in /usr/share/man + +* Wed Jan 19 2000 Tim Powers +- bzipped sources to conserve space + +* Thu Jul 22 1999 Tim Powers +- rebuilt for 6.1 + +* Thu Apr 15 1999 Michael Maher +- built package for 6.0 + +* Tue Sep 15 1998 Michael Maher +- built package