From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kei Kebreau Subject: Re: 04/05: gnu: swig: Patch for Octave 4.4. Date: Wed, 30 May 2018 10:49:46 -0400 Message-ID: <87a7shvzxo.fsf@posteo.net> References: <20180529222049.16826.20591@vcs0.savannah.gnu.org> <20180529222052.5A8DA20537@vcs0.savannah.gnu.org> <87bmcxbqy4.fsf@netris.org> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:48396) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fO4Vc-0004qA-1V for guix-devel@gnu.org; Wed, 30 May 2018 13:03:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fO4VX-0002H7-At for guix-devel@gnu.org; Wed, 30 May 2018 13:03:36 -0400 Received: from mout01.posteo.de ([185.67.36.65]:58389) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fO4VW-0002Fq-K0 for guix-devel@gnu.org; Wed, 30 May 2018 13:03:31 -0400 Received: from submission (posteo.de [89.146.220.130]) by mout01.posteo.de (Postfix) with ESMTPS id C255F20F8C for ; Wed, 30 May 2018 19:03:28 +0200 (CEST) In-Reply-To: <87bmcxbqy4.fsf@netris.org> (Mark H. Weaver's message of "Wed, 30 May 2018 02:25:23 -0400") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Mark H Weaver Cc: guix-devel@gnu.org --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain Mark H Weaver writes: > kkebreau@posteo.net (Kei Kebreau) writes: > >> kkebreau pushed a commit to branch master >> in repository guix. >> >> commit 3771000f893d4b53e302f5bca07afeba69e76cd4 >> Author: Kei Kebreau >> Date: Fri May 25 22:25:21 2018 -0400 >> >> gnu: swig: Patch for Octave 4.4. > > On the core-updates branch, "guix refresh -l swig" reports that updating > swig requires 1453 rebuilds. That's too many, so I reverted it. > > Instead, I suggest creating a different 'swig' package for octave that > inherits from the primary one and adds this patch. > > What do you think? > > Mark I agree that this will work. Is the attached patch something like what you're thinking? (Apologies if you get two of these messages; it seems to me like the first one didn't go through.) --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=0001-gnu-shogun-Use-a-patched-swig-for-Octave-4.4.patch Content-Transfer-Encoding: quoted-printable From=20475a7698fd4c88ea688cb43499344e65ffaf5b84 Mon Sep 17 00:00:00 2001 From: Kei Kebreau Date: Wed, 30 May 2018 08:34:42 -0400 Subject: [PATCH] gnu: shogun: Use a patched swig for Octave 4.4. * gnu/packages/machine-learning.scm (swig-for-octave): New variable * gnu/packages/machine-learning.scm (shogun)[inputs]: Replace swig with swig-for-octave. * gnu/packages/patches/swig-octave-patches.patch: New file. * gnu/local.mk (dist_patch_DATA): Register patch. =2D-- gnu/local.mk | 1 + gnu/packages/machine-learning.scm | 10 +- .../patches/swig-octave-patches.patch | 1119 +++++++++++++++++ 3 files changed, 1129 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/swig-octave-patches.patch diff --git a/gnu/local.mk b/gnu/local.mk index 7734586f0..895d33012 100644 =2D-- a/gnu/local.mk +++ b/gnu/local.mk @@ -1106,6 +1106,7 @@ dist_patch_DATA =3D \ %D%/packages/patches/steghide-fixes.patch \ %D%/packages/patches/strace-kernel-4.16.patch \ %D%/packages/patches/superlu-dist-scotchmetis.patch \ + %D%/packages/patches/swig-octave-patches.patch \ %D%/packages/patches/swish-e-search.patch \ %D%/packages/patches/swish-e-format-security.patch \ %D%/packages/patches/synfigstudio-fix-ui-with-gtk3.patch \ diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learn= ing.scm index e135ee0ee..4d54584a7 100644 =2D-- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -365,6 +365,14 @@ value imputation, classifier creation, generalization = error estimation and sample proximities between pairs of cases.") (license license:gpl3+))) =20 +(define swig-for-octave + (package/inherit swig + (name (string-append (package-name swig) "-for-octave")) + (source + (origin + (inherit (package-source swig)) + (patches (search-patches "swig-octave-patches.patch")))))) + (define-public shogun (package (name "shogun") @@ -487,7 +495,7 @@ sample proximities between pairs of cases.") ("numpy" ,python-numpy) ("r-minimal" ,r-minimal) ("octave" ,octave) =2D ("swig" ,swig) + ("swig" ,swig-for-octave) ("eigen" ,eigen) ("hdf5" ,hdf5) ("atlas" ,atlas) diff --git a/gnu/packages/patches/swig-octave-patches.patch b/gnu/packages/= patches/swig-octave-patches.patch new file mode 100644 index 000000000..9fb64a7b1 =2D-- /dev/null +++ b/gnu/packages/patches/swig-octave-patches.patch @@ -0,0 +1,1119 @@ +This patch represents the recently added support for Octave version 4.4 fo= und +here: + +https://github.com/swig/swig/commit/12c66f9b7d884020e896ce92b9783bc3bac95d= 2d + +diff -urN swig-3.0.12.old/CHANGES.current swig-3.0.12.new/CHANGES.current +--- swig-3.0.12.old/CHANGES.current 2017-01-27 18:52:02.000000000 -0500 ++++ swig-3.0.12.new/CHANGES.current 2018-05-26 08:40:06.501850058 -0400 +@@ -4,6 +4,14 @@ + Issue # numbers mentioned below can be found on Github. For more details,= add + the issue number to the end of the URL: https://github.com/swig/swig/issu= es/ +=20 ++Version 4.0.0 (in progress) ++=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D ++ ++2018-05-12: kwwette ++ [Octave] add support for version 4.4 ++ - Should not introduce any user-visible incompatibilities ++ ++ + Version 3.0.12 (27 Jan 2017) + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +=20 +diff -urN swig-3.0.12.old/Examples/Makefile.in swig-3.0.12.new/Examples/Ma= kefile.in +--- swig-3.0.12.old/Examples/Makefile.in 2017-01-27 18:52:02.000000000 -05= 00 ++++ swig-3.0.12.new/Examples/Makefile.in 2018-05-26 08:39:16.510124553 -04= 00 +@@ -463,7 +463,7 @@ + # ----------------------------------------------------------------- +=20 + octave_run: +- OCTAVE_HISTFILE=3D/dev/null $(RUNTOOL) $(OCTAVE) $(OCTAVE_SCRIPT) $(RUNP= IPE) ++ env OCTAVE_PATH=3D OCTAVE_HISTFILE=3D/dev/null $(RUNTOOL) $(OCTAVE) $(OC= TAVE_SCRIPT) $(RUNPIPE) +=20 + # ----------------------------------------------------------------- + # Version display +diff -urN swig-3.0.12.old/Examples/octave/module_load/runme.m swig-3.0.12.= new/Examples/octave/module_load/runme.m +--- swig-3.0.12.old/Examples/octave/module_load/runme.m 2017-01-27 18:52:0= 2.000000000 -0500 ++++ swig-3.0.12.new/Examples/octave/module_load/runme.m 2018-05-26 08:39:1= 6.518124669 -0400 +@@ -5,63 +5,73 @@ +=20 + # load module + clear all; ++assert(exist("swigexample") =3D=3D 3); + swigexample; ++assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +-assert(exist("swigexample","var")); + clear all ++assert(exist("swigexample") =3D=3D 3); + swigexample; ++assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +-assert(exist("swigexample","var")); + clear all +=20 + # load module in a function globally before base context + clear all; +-function testme ++function testme_1 ++ assert(exist("swigexample") =3D=3D 3); + swigexample; ++ assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +- assert(exist("swigexample","var")); + endfunction +-testme +-testme ++testme_1 ++testme_1 ++assert(exist("swigexample") =3D=3D 3); + swigexample; ++assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +-assert(exist("swigexample","var")); + clear all +-function testme ++function testme_2 ++ assert(exist("swigexample") =3D=3D 3); + swigexample; ++ assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +- assert(exist("swigexample","var")); + endfunction +-testme +-testme ++testme_2 ++testme_2 ++assert(exist("swigexample") =3D=3D 3); + swigexample; ++assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +-assert(exist("swigexample","var")); + clear all +=20 + # load module in a function globally after base context + clear all; ++assert(exist("swigexample") =3D=3D 3); + swigexample; ++assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +-assert(exist("swigexample","var")); +-function testme ++function testme_3 ++ assert(exist("swigexample") =3D=3D 3); + swigexample; ++ assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +- assert(exist("swigexample","var")); + endfunction +-testme +-testme ++testme_3 ++testme_3 + clear all ++assert(exist("swigexample") =3D=3D 3); + swigexample; ++assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +-assert(exist("swigexample","var")); +-function testme ++function testme_4 ++ assert(exist("swigexample") =3D=3D 3); + swigexample; ++ assert(isglobal("swigexample")); + assert(cvar.ivar =3D=3D ifunc); +- assert(exist("swigexample","var")); + endfunction +-testme +-testme ++testme_4 ++testme_4 + clear all +=20 + # octave 3.0.5 randomly crashes on the remaining tests +@@ -71,13 +81,16 @@ +=20 + # load module with no cvar + clear all; ++who; ++assert(exist("swigexample2") =3D=3D 3); + swigexample2; ++assert(isglobal("swigexample2")); + assert(swigexample2.ivar =3D=3D ifunc); +-assert(exist("swigexample2","var")); +-assert(!isglobal("cvar")) ++assert(!exist("cvar", "var")); + clear all ++assert(exist("swigexample2") =3D=3D 3); + swigexample2; ++assert(isglobal("swigexample2")); + assert(swigexample2.ivar =3D=3D ifunc); +-assert(exist("swigexample2","var")); +-assert(!isglobal("cvar")) ++assert(!exist("cvar", "var")); + clear all +diff -urN swig-3.0.12.old/Examples/test-suite/octave/Makefile.in swig-3.0.= 12.new/Examples/test-suite/octave/Makefile.in +--- swig-3.0.12.old/Examples/test-suite/octave/Makefile.in 2017-01-27 18:5= 2:02.000000000 -0500 ++++ swig-3.0.12.new/Examples/test-suite/octave/Makefile.in 2018-05-26 08:3= 9:16.511124567 -0400 +@@ -59,7 +59,7 @@ + # a file is found which has _runme.m appended after the testcase name. + run_testcase =3D \ + if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ +- env LD_LIBRARY_PATH=3D.:$$LD_LIBRARY_PATH OCTAVE_PATH=3D$(srcdir):$$OC= TAVE_PATH $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX= ); \ ++ env LD_LIBRARY_PATH=3D.:$$LD_LIBRARY_PATH OCTAVE_PATH=3D$(srcdir) OCTA= VE_HISTFILE=3D/dev/null $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*= $(SCRIPTSUFFIX); \ + fi +=20 + # Clean: remove the generated .m file +diff -urN swig-3.0.12.old/Examples/test-suite/octave/Makefile.in.orig swig= -3.0.12.new/Examples/test-suite/octave/Makefile.in.orig +--- swig-3.0.12.old/Examples/test-suite/octave/Makefile.in.orig 1969-12-31= 19:00:00.000000000 -0500 ++++ swig-3.0.12.new/Examples/test-suite/octave/Makefile.in.orig 2017-01-27= 18:52:02.000000000 -0500 +@@ -0,0 +1,92 @@ ++####################################################################### ++# Makefile for octave test-suite ++####################################################################### ++ ++LANGUAGE =3D octave ++OCTAVE =3D @OCTAVE@ ++SCRIPTSUFFIX =3D _runme.m ++ ++srcdir =3D @srcdir@ ++top_srcdir =3D @top_srcdir@ ++top_builddir =3D @top_builddir@ ++ ++CPP_TEST_CASES +=3D \ ++ li_std_pair_extra \ ++ li_std_string_extra \ ++ octave_cell_deref\ ++ octave_dim ++ ++CPP_TEST_BROKEN +=3D \ ++ implicittest \ ++ li_implicit \ ++ li_std_set \ ++ li_std_stream ++ ++#C_TEST_CASES +=3D ++ ++# ++# This test only works with modern C compilers ++# ++#C_TEST_CASES +=3D \ ++# complextest ++ ++include $(srcdir)/../common.mk ++ ++# Overridden variables here ++LIBS =3D -L. ++CSRCS =3D octave_empty.c ++ ++# Custom tests - tests with additional commandline options ++# none! ++ ++# Rules for the different types of tests ++%.cpptest: ++ $(setup) ++ +$(swig_and_compile_cpp) ++ $(run_testcase) ++ ++%.ctest: ++ $(setup) ++ +$(swig_and_compile_c) ++ $(run_testcase) ++ ++%.multicpptest: ++ $(setup) ++ +$(swig_and_compile_multi_cpp) ++ $(run_testcase) ++ ++# Runs the testcase. A testcase is only run if ++# a file is found which has _runme.m appended after the testcase name. ++run_testcase =3D \ ++ if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ ++ env LD_LIBRARY_PATH=3D.:$$LD_LIBRARY_PATH OCTAVE_PATH=3D$(srcdir):$$OC= TAVE_PATH $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX= ); \ ++ fi ++ ++# Clean: remove the generated .m file ++%.clean: ++ @rm -f hugemod.h hugemod_a.i hugemod_b.i hugemod_a.m hugemod_b.m hugemod= _runme.m ++ @rm -f $*.m; ++ ++clean: ++ $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR=3D'$(SRCDIR)' oct= ave_clean ++ ++cvsignore: ++ @echo '*wrap* *.mc *.so *.dll *.exp *.lib' ++ @echo Makefile ++ @for i in ${CPP_TEST_CASES} ${C_TEST_CASES}; do echo $$i.m; done ++ @for i in ${CPP_TEST_CASES} ${C_TEST_CASES}; do if grep -q $${i}_runme.m= CVS/Entries ; then echo $${i}_runme.m; fi; done ++ @echo clientdata_prop_a.m ++ @echo clientdata_prop_b.m ++ @echo imports_a.m ++ @echo imports_b.m ++ @echo mod_a.m mod_b.m ++ @echo hugemod.h hugemod_a.i hugemod_b.i hugemod_a.m hugemod_b.m hugemod_= runme.m ++ @echo template_typedef_import.m ++ ++ ++hugemod: ++ perl hugemod.pl ++ $(MAKE) hugemod_a.cpptest ++ $(MAKE) hugemod_b.cpptest ++ time $(OCTAVE) hugemod_runme.m ++ time $(OCTAVE) hugemod_runme.m +diff -urN swig-3.0.12.old/Examples/test-suite/register_par.i swig-3.0.12.n= ew/Examples/test-suite/register_par.i +--- swig-3.0.12.old/Examples/test-suite/register_par.i 2017-01-27 18:52:02= .000000000 -0500 ++++ swig-3.0.12.new/Examples/test-suite/register_par.i 2018-05-26 08:40:28= .146164544 -0400 +@@ -2,5 +2,5 @@ +=20 + // bug # 924413 + %inline { +- void clear_tree_flags(register struct tree *tp, register int i) {} ++ void clear_tree_flags(register struct swig_tree *tp, register int i) {} + } +diff -urN swig-3.0.12.old/Examples/test-suite/register_par.i.orig swig-3.0= .12.new/Examples/test-suite/register_par.i.orig +--- swig-3.0.12.old/Examples/test-suite/register_par.i.orig 1969-12-31 19:= 00:00.000000000 -0500 ++++ swig-3.0.12.new/Examples/test-suite/register_par.i.orig 2018-05-26 08:= 39:16.518124669 -0400 +@@ -0,0 +1,6 @@ ++%module register_par ++ ++// bug # 924413 ++%inline { ++ void clear_tree_flags(register struct tree *tp, register int i) {} ++} +diff -urN swig-3.0.12.old/Examples/test-suite/register_par.i.rej swig-3.0.= 12.new/Examples/test-suite/register_par.i.rej +--- swig-3.0.12.old/Examples/test-suite/register_par.i.rej 1969-12-31 19:0= 0:00.000000000 -0500 ++++ swig-3.0.12.new/Examples/test-suite/register_par.i.rej 2018-05-26 08:3= 9:16.518124669 -0400 +@@ -0,0 +1,15 @@ ++--- Examples/test-suite/register_par.i +++++ Examples/test-suite/register_par.i ++@@ -1,10 +1,10 @@ ++ %module register_par ++=20 ++ %{ ++-struct tree; +++struct swig_tree; ++ %} ++=20 ++ // bug # 924413 ++ %inline { ++- void clear_tree_flags(register struct tree *tp, register int i) {} +++ void clear_tree_flags(register struct swig_tree *tp, register int i) {} ++ } +diff -urN swig-3.0.12.old/Lib/octave/octcontainer.swg swig-3.0.12.new/Lib/= octave/octcontainer.swg +--- swig-3.0.12.old/Lib/octave/octcontainer.swg 2017-01-27 18:52:02.000000= 000 -0500 ++++ swig-3.0.12.new/Lib/octave/octcontainer.swg 2018-05-26 08:39:16.488124= 234 -0400 +@@ -567,7 +567,11 @@ + if (seq) *seq =3D p; + return SWIG_OLDOBJ; + } ++%#if SWIG_OCTAVE_PREREQ(4,4,0) ++ } else if (obj.iscell()) { ++%#else + } else if (obj.is_cell()) { ++%#endif + try { + OctSequence_Cont octseq(obj); + if (seq) { +diff -urN swig-3.0.12.old/Lib/octave/octprimtypes.swg swig-3.0.12.new/Lib/= octave/octprimtypes.swg +--- swig-3.0.12.old/Lib/octave/octprimtypes.swg 2017-01-27 18:52:02.000000= 000 -0500 ++++ swig-3.0.12.new/Lib/octave/octprimtypes.swg 2018-05-26 08:39:16.492124= 292 -0400 +@@ -18,7 +18,11 @@ + SWIGINTERN int + SWIG_AsVal_dec(bool)(const octave_value& ov, bool *val) + { ++%#if SWIG_OCTAVE_PREREQ(4,4,0) ++ if (!ov.islogical()) ++%#else + if (!ov.is_bool_type()) ++%#endif + return SWIG_ERROR; + if (val) + *val =3D ov.bool_value(); +@@ -214,7 +218,13 @@ + SWIGINTERN int + SWIG_AsCharPtrAndSize(octave_value ov, char** cptr, size_t* psize, int *a= lloc) + { +- if (ov.is_cell() && ov.rows() =3D=3D 1 && ov.columns() =3D=3D 1) ++ if ( ++%#if SWIG_OCTAVE_PREREQ(4,4,0) ++ ov.iscell() ++%#else ++ ov.is_cell() ++%#endif ++ && ov.rows() =3D=3D 1 && ov.columns() =3D=3D 1) + ov =3D ov.cell_value()(0); + if (!ov.is_string()) + return SWIG_TypeError; +diff -urN swig-3.0.12.old/Lib/octave/octrun.swg swig-3.0.12.new/Lib/octave= /octrun.swg +--- swig-3.0.12.old/Lib/octave/octrun.swg 2017-01-27 18:52:02.000000000 -0= 500 ++++ swig-3.0.12.new/Lib/octave/octrun.swg 2018-05-26 08:39:16.509124538 -0= 400 +@@ -151,6 +151,67 @@ + const swig_type_info **base; + }; +=20 ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ // in Octave 4.4 behaviour of octave_builtin() appears to have changed = and 'self' argument is no longer passed ++ // to function (maybe because this is now a 'method'??) so need to crea= te our own octave_function subclass ++#define SWIG_OCTAVE_BOUND_FUNC(func, args) octave_value(new octave_swig_b= ound_func(func, args)) ++ class octave_swig_bound_func : public octave_function { ++ public: ++ ++ octave_swig_bound_func(void) : octave_function(), method(0), first_ar= gs() ++ { } ++ ++ octave_swig_bound_func(octave_function* _method, octave_value_list _f= irst_args) ++ : octave_function("", ""), method(_method), first_args(_first_args) ++ { } ++ ++ octave_swig_bound_func(const octave_swig_bound_func& f) =3D delete; ++ ++ octave_swig_bound_func& operator=3D (const octave_swig_bound_func& f)= =3D delete; ++ ++ ~octave_swig_bound_func(void) =3D default; ++ ++ bool is_function(void) const { return true; } ++ ++ octave_function* function_value(bool =3D false) { return this; } ++ ++ octave_value_list call(octave::tree_evaluator& tw, int nargout =3D 0,= const octave_value_list& args =3D octave_value_list()) { ++ octave_value_list all_args; ++ all_args.append(first_args); ++ all_args.append(args); ++ return method->call(tw, nargout, all_args); ++ } ++ ++ octave_value subsref(const std::string &ops, const std::list < octave= _value_list > &idx) { ++ octave_value_list ovl =3D subsref(ops, idx, 1); ++ return ovl.length() ? ovl(0) : octave_value(); ++ } ++ ++ octave_value_list subsref(const std::string &ops, const std::list < o= ctave_value_list > &idx, int nargout) { ++ assert(ops.size() > 0); ++ assert(ops.size() =3D=3D idx.size()); ++ if (ops !=3D "(") ++ error("invalid function call"); ++ octave::tree_evaluator& tw =3D octave::interpreter::the_interpreter= ()->get_evaluator(); ++ return call(tw, nargout, *idx.begin()); ++ } ++ ++ protected: ++ ++ octave_function* method; ++ octave_value_list first_args; ++ ++ std::set dispatch_classes; ++ ++ private: ++ ++ DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA ++ }; ++ DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(octave_swig_bound_func, "octave_swi= g_bound_func", "octave_swig_bound_func"); ++#else ++#define SWIG_OCTAVE_BOUND_FUNC(func, args) octave_value(func) ++#endif ++ + // octave_swig_type plays the role of both the shadow class and the cla= ss=20 + // representation within Octave, since there is no support for classes. + // +@@ -323,13 +384,17 @@ + } +=20 + octave_value_list member_deref(member_value_pair *m, const octave_val= ue_list &args) { +- if (m->second.is_defined()) +- return m->second; +- else if (m->first) { ++ if (m->second.is_defined()) { ++ if (m->second.is_function() || m->second.is_function_handle()) { ++ return SWIG_OCTAVE_BOUND_FUNC(m->second.function_value(), args); ++ } else { ++ return m->second; ++ } ++ } else if (m->first) { + if (m->first->get_method) + return m->first->get_method(args, 1); + else if (m->first->method) +- return octave_value(new octave_builtin(m->first->method)); ++ return SWIG_OCTAVE_BOUND_FUNC(new octave_builtin(m->first->meth= od), args); + } + error("undefined member"); + return octave_value_list(); +@@ -383,7 +448,11 @@ + return dim_vector(1,1); +=20 + // Return value should be cell or matrix of integers ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ if (out.iscell()) { ++#else + if (out.is_cell()) { ++#endif + const Cell & c=3Dout.cell_value(); + int ndim =3D c.rows(); + if (ndim=3D=3D1 && c.columns()!=3D1) ndim =3D c.columns(); +@@ -401,7 +470,11 @@ + if (error_state) return dim_vector(1,1); + } + return d; ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ } else if (out.is_matrix_type() || out.isnumeric() ) { ++#else + } else if (out.is_matrix_type() || out.is_numeric_type() ) { ++#endif + if (out.rows()=3D=3D1 || out.columns()=3D=3D1) { + Array a =3D out.int_vector_value(); + if (error_state) return dim_vector(1,1); +@@ -476,8 +549,12 @@ + } + types.insert(types.end(), rhs.types.begin(), rhs.types.end()); + members.insert(rhs.members.begin(), rhs.members.end()); ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ assign(rhs.swig_type_name(), rhs.as_value()); ++#else + rhs.types.clear(); + rhs.members.clear(); ++#endif + } +=20 + typedef member_map::const_iterator swig_member_const_iterator; +@@ -848,7 +925,14 @@ + octave_function *fcn =3D is_valid_function(symbol, std::string(), f= alse); + if (!fcn) + return false; ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::tree_evaluator& tw =3D octave::interpreter::the_interpreter= ()->get_evaluator(); ++ octave_value_list retval =3D fcn->call(tw, 1, args); ++ if (retval.length() =3D=3D 1) ++ ret =3D retval(0); ++#else + ret =3D fcn->do_multi_index_op(1, args)(0); ++#endif + return true; + } +=20 +@@ -1238,7 +1322,13 @@ + } +=20 + SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov) { +- if (ov.is_cell() && ov.rows() =3D=3D 1 && ov.columns() =3D=3D 1) ++ if ( ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ ov.iscell() ++#else ++ ov.is_cell() ++#endif ++ && ov.rows() =3D=3D 1 && ov.columns() =3D=3D 1) + ov =3D ov.cell_value()(0); + return swig_value_deref(*ov.internal_rep()); + } +@@ -1261,12 +1351,24 @@ + SWIGRUNTIME octave_value swig_binary_op_##name(const octave_base_value&lh= s,const octave_base_value &rhs) { \ + return octave_swig_type::dispatch_binary_op(lhs,rhs,#name); \ + } ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++#define swigreg_unary_op(name) \ ++if (!octave_value_typeinfo::lookup_unary_op(octave_value::op_##name,tid))= \ ++typeinfo.register_unary_op(octave_value::op_##name,tid,swig_unary_op_##na= me); ++#else + #define swigreg_unary_op(name) \ + if (!octave_value_typeinfo::lookup_unary_op(octave_value::op_##name,tid))= \ + octave_value_typeinfo::register_unary_op(octave_value::op_##name,tid,swig= _unary_op_##name); ++#endif ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++#define swigreg_binary_op(name) \ ++if (!octave_value_typeinfo::lookup_binary_op(octave_value::op_##name,tid1= ,tid2)) \ ++typeinfo.register_binary_op(octave_value::op_##name,tid1,tid2,swig_binary= _op_##name); ++#else + #define swigreg_binary_op(name) \ + if (!octave_value_typeinfo::lookup_binary_op(octave_value::op_##name,tid1= ,tid2)) \ + octave_value_typeinfo::register_binary_op(octave_value::op_##name,tid1,ti= d2,swig_binary_op_##name); ++#endif +=20 + swig_unary_op(not); + swig_unary_op(uplus); +@@ -1300,6 +1402,9 @@ + swig_binary_op(el_or); +=20 + SWIGRUNTIME void SWIG_InstallUnaryOps(int tid) { ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::type_info& typeinfo =3D octave::interpreter::the_interpreter(= )->get_type_info(); ++#endif + swigreg_unary_op(not); + swigreg_unary_op(uplus); + swigreg_unary_op(uminus); +@@ -1309,6 +1414,9 @@ + swigreg_unary_op(decr); + } + SWIGRUNTIME void SWIG_InstallBinaryOps(int tid1, int tid2) { ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::type_info& typeinfo =3D octave::interpreter::the_interpreter(= )->get_type_info(); ++#endif + swigreg_binary_op(add); + swigreg_binary_op(sub); + swigreg_binary_op(mul); +@@ -1357,7 +1465,13 @@ + } +=20 + SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(octave_value ov, void **ptr,= swig_type_info *type, int flags, int *own) { +- if (ov.is_cell() && ov.rows() =3D=3D 1 && ov.columns() =3D=3D 1) ++ if ( ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ ov.iscell() ++#else ++ ov.is_cell() ++#endif ++ && ov.rows() =3D=3D 1 && ov.columns() =3D=3D 1) + ov =3D ov.cell_value()(0); + if (!ov.is_defined() || + (ov.is_matrix_type() && ov.rows() =3D=3D 0 && ov.columns() =3D=3D 0= ) ) { +@@ -1390,14 +1504,30 @@ + } +=20 + SWIGRUNTIMEINLINE octave_value SWIG_Octave_GetGlobalValue(std::string nam= e) { ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::symbol_table& symtab =3D octave::interpreter::the_interpreter()= ->get_symbol_table(); ++ return symtab.global_varval(name); ++#else + return get_global_value(name, true); ++#endif + } +=20 + SWIGRUNTIME void SWIG_Octave_SetGlobalValue(std::string name, const octav= e_value& value) { ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::symbol_table& symtab =3D octave::interpreter::the_interpreter()= ->get_symbol_table(); ++ symtab.global_assign(name, value); ++#else + set_global_value(name, value); ++#endif + } +=20 + SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) { ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::symbol_table& symtab =3D octave::interpreter::the_interpreter()= ->get_symbol_table(); ++ octave::symbol_scope symscope =3D octave::interpreter::the_interpreter(= )->get_current_scope(); ++ symscope.assign(name, symtab.global_varval(name)); ++ symscope.mark_global(name); ++#else + #if !SWIG_OCTAVE_PREREQ(3,2,0) + link_to_global_variable(curr_sym_tab->lookup(name, true)); + #else +@@ -1406,6 +1536,7 @@ + #endif + symbol_table::mark_global(name); + #endif ++#endif + } +=20 + SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { +diff -urN swig-3.0.12.old/Lib/octave/octruntime.swg swig-3.0.12.new/Lib/oc= tave/octruntime.swg +--- swig-3.0.12.old/Lib/octave/octruntime.swg 2017-01-27 18:52:02.00000000= 0 -0500 ++++ swig-3.0.12.new/Lib/octave/octruntime.swg 2018-05-26 08:39:16.50712450= 9 -0400 +@@ -139,7 +139,11 @@ + #endif + #if SWIG_OCTAVE_PREREQ(4,2,0) + try { ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::feval(name, octave_value_list(), 0); ++#else + feval(name, octave_value_list(), 0); ++#endif + retn =3D true; + } catch (octave::execution_exception&) { } + #else +@@ -170,7 +174,7 @@ + frame.protect_var(discard_error_messages); discard_error_mes= sages =3D true; + frame.protect_var(discard_warning_messages); discard_warning_m= essages =3D true; + #else +- unwind_protect::begin_frame("SWIG_Octave_LoadModule"); ++ unwind_protect::begin_frame("SWIG_Octave_InstallFunction"); + unwind_protect_int(error_state); error_state =3D 0; + unwind_protect_int(warning_state); warning_state =3D= 0; + unwind_protect_bool(discard_error_messages); discard_error_mes= sages =3D true; +@@ -181,7 +185,11 @@ + args.append(octloadfcn->fcn_file_name()); + #if SWIG_OCTAVE_PREREQ(4,2,0) + try { ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::feval("autoload", args, 0); ++#else + feval("autoload", args, 0); ++#endif + retn =3D true; + } catch (octave::execution_exception&) { } + #else +@@ -312,6 +320,8 @@ + Loads the SWIG-generated module `" SWIG_name_d "'.\n\ + @end deftypefn"; +=20 ++void __swig_atexit__(void) { ::_Exit(0); } ++ + DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) { +=20 + static octave_swig_type* module_ns =3D 0; +@@ -322,7 +332,9 @@ + // version 3.4.*, but reappeared in 4.2.*, so turn on for all versions = after 3.2.*. + // can be turned off with macro definition. + #ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK +-#if SWIG_OCTAVE_PREREQ(3,2,0) ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ atexit(__swig_atexit__); ++#elif SWIG_OCTAVE_PREREQ(3,2,0) + octave_exit =3D ::_Exit; + #endif + #endif +@@ -351,15 +363,54 @@ + "__swig_atexit__; " + "atexit(\"__swig_atexit__\", false); " + "atexit(\"__swig_atexit__\")"); ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::feval("evalin", eval_args, 0); ++#else + feval("evalin", eval_args, 0); + #endif ++#endif +=20 ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ { ++ octave::type_info& typeinfo =3D octave::interpreter::the_interprete= r()->get_type_info(); ++ string_vector types =3D typeinfo.installed_type_names(); ++ bool register_octave_swig_ref =3D true; ++ bool register_octave_swig_packed =3D true; ++ bool register_octave_swig_bound_func =3D true; ++ for (int i =3D 0; i < types.numel(); ++i) { ++ if (types(i) =3D=3D octave_swig_ref::static_type_name()) { ++ register_octave_swig_ref =3D false; ++ } ++ if (types(i) =3D=3D octave_swig_packed::static_type_name()) { ++ register_octave_swig_packed =3D false; ++ } ++ if (types(i) =3D=3D octave_swig_bound_func::static_type_name()) { ++ register_octave_swig_bound_func =3D false; ++ } ++ } ++ if (register_octave_swig_ref) { ++ octave_swig_ref::register_type(); ++ } ++ if (register_octave_swig_packed) { ++ octave_swig_packed::register_type(); ++ } ++ if (register_octave_swig_bound_func) { ++ octave_swig_bound_func::register_type(); ++ } ++ } ++#else + octave_swig_ref::register_type(); + octave_swig_packed::register_type(); ++#endif + SWIG_InitializeModule(0); + SWIG_PropagateClientData(); +=20 ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::call_stack& stack =3D octave::interpreter::the_interpreter()-= >get_call_stack(); ++ octave_function *me =3D stack.current(); ++#else + octave_function *me =3D octave_call_stack::current(); ++#endif +=20 + if (!SWIG_Octave_InstallFunction(me, "subclass")) { + return octave_value_list(); +@@ -426,10 +477,12 @@ + } + } +=20 +-#if !SWIG_OCTAVE_PREREQ(3,2,0) +- mlock(me->name()); +-#else ++#if SWIG_OCTAVE_PREREQ(4,4,0) ++ octave::interpreter::the_interpreter()->mlock(); ++#elif SWIG_OCTAVE_PREREQ(3,2,0) + mlock(); ++#else ++ mlock(me->name()); + #endif +=20 + } +diff -urN swig-3.0.12.old/Lib/octave/std_pair.i swig-3.0.12.new/Lib/octave= /std_pair.i +--- swig-3.0.12.old/Lib/octave/std_pair.i 2017-01-27 18:52:02.000000000 -0= 500 ++++ swig-3.0.12.new/Lib/octave/std_pair.i 2018-05-26 08:39:16.489124248 -0= 400 +@@ -38,7 +38,13 @@ + } +=20 + static int asval(const octave_value& obj, std::pair *val) { +- if (obj.is_cell()) { ++ if ( ++%#if SWIG_OCTAVE_PREREQ(4,4,0) ++ obj.iscell() ++%#else ++ obj.is_cell() ++%#endif ++ ) { + Cell c=3Dobj.cell_value(); + if (c.numel()<2) { + error("pair from Cell array requires at least two elements"); +@@ -96,7 +102,13 @@ + } +=20 + static int asptr(const octave_value& obj, std::pair **val) { +- if (obj.is_cell()) { ++ if ( ++%#if SWIG_OCTAVE_PREREQ(4,4,0) ++ obj.iscell() ++%#else ++ obj.is_cell() ++%#endif ++ ) { + Cell c=3Dobj.cell_value(); + if (c.numel()<2) { + error("pair from Cell array requires at least two elements"); +diff -urN swig-3.0.12.old/.travis.yml swig-3.0.12.new/.travis.yml +--- swig-3.0.12.old/.travis.yml 2017-01-27 18:52:02.000000000 -0500 ++++ swig-3.0.12.new/.travis.yml 2018-05-26 08:39:16.520124698 -0400 +@@ -92,6 +92,11 @@ + dist: trusty + - compiler: gcc + os: linux ++ env: SWIGLANG=3Doctave SWIGJOBS=3D-j2 VER=3D4.4 CPP11=3D1 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux + env: SWIGLANG=3Dperl5 + sudo: required + dist: trusty +diff -urN swig-3.0.12.old/.travis.yml.orig swig-3.0.12.new/.travis.yml.orig +--- swig-3.0.12.old/.travis.yml.orig 1969-12-31 19:00:00.000000000 -0500 ++++ swig-3.0.12.new/.travis.yml.orig 2017-01-27 18:52:02.000000000 -0500 +@@ -0,0 +1,334 @@ ++language: cpp ++matrix: ++ include: ++ - compiler: clang ++ os: linux ++ env: SWIGLANG=3D ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3D ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3D ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3D SWIG_CC=3Dgcc-5 SWIG_CXX=3Dg++-5 CPP11=3D1 ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3D SWIG_CC=3Dgcc-6 SWIG_CXX=3Dg++-6 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dcsharp ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dd ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dgo ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dgo VER=3D1.5 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dguile ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Djava ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Djavascript ENGINE=3Dnode ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Djavascript ENGINE=3Djsc ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Djavascript ENGINE=3Dv8 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dlua ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dlua VER=3D5.3 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Doctave SWIGJOBS=3D-j2 # 3.8 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Doctave SWIGJOBS=3D-j2 VER=3D4.0 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Doctave SWIGJOBS=3D-j2 VER=3D4.2 CPP11=3D1 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dperl5 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dphp5 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dphp VER=3D7.0 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dphp VER=3D7.1 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython VER=3D2.4 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython VER=3D2.5 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython VER=3D2.6 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython # 2.7 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython PY3=3D3 VER=3D3.2 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython PY3=3D3 VER=3D3.3 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython PY3=3D3 VER=3D3.4 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython PY3=3D3 VER=3D3.5 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-builtin VER=3D2.6 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-builtin ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-builtin PY3=3D3 VER=3D3.4 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-builtin PY3=3D3 VER=3D3.5 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-builtin PY3=3D3 VER=3D3.5 S= WIGOPTPY3=3D ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-O ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-classic ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dr ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Druby VER=3D1.9.3 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Druby VER=3D2.0.0 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Druby VER=3D2.3.0 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dscilab ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dtcl ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3Dcsharp SWIG_CC=3Dgcc-5 SWIG_CXX=3Dg++-5 CPP11=3D1 ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3Djava SWIG_CC=3Dgcc-5 SWIG_CXX=3Dg++-5 CPP11=3D1 ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3Dpython SWIG_CC=3Dgcc-5 SWIG_CXX=3Dg++-5 CPP11=3D1 ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3Dcsharp SWIG_CC=3Dgcc-6 SWIG_CXX=3Dg++-6 CPP14=3D1 ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3Djava SWIG_CC=3Dgcc-6 SWIG_CXX=3Dg++-6 CPP14=3D1 ++ sudo: required ++ dist: trusty ++ - os: linux ++ env: SWIGLANG=3Dpython SWIG_CC=3Dgcc-6 SWIG_CXX=3Dg++-6 CPP14=3D1 ++ sudo: required ++ dist: trusty ++ - compiler: gcc ++ os: osx ++ env: SWIGLANG=3D ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3D ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dcsharp ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dgo ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dguile ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Djava ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dlua ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dperl5 ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dphp5 ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dpython ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dpython PY3=3D3 ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Druby ++ - compiler: clang ++ os: osx ++ env: SWIGLANG=3Dtcl ++ ++ allow_failures: ++ # Lots of failing tests currently ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Docaml ++ sudo: required ++ dist: trusty ++ # Not quite working yet ++ - compiler: gcc ++ os: linux ++ env: SWIGLANG=3Dpython SWIG_FEATURES=3D-O ++ sudo: required ++ dist: trusty ++before_install: ++ - date -u ++ - uname -a ++ - if test "$TRAVIS_OS_NAME" =3D "linux"; then lscpu && cat /proc/cpuinf= o | grep "model name" && cat /proc/meminfo | grep MemTotal; fi ++ - if test "$TRAVIS_OS_NAME" =3D "osx"; then sysctl -a | grep brand_stri= ng; fi ++ # Travis overrides CC environment with compiler predefined values ++ - if test -n "$SWIG_CC"; then export CC=3D"$SWIG_CC"; fi ++ - if test -n "$SWIG_CXX"; then export CXX=3D"$SWIG_CXX"; fi ++install: ++ - if test "$TRAVIS_OS_NAME" =3D "linux"; then source Tools/travis-linux= -install.sh; fi ++ - if test "$TRAVIS_OS_NAME" =3D "osx"; then source Tools/travis-osx-ins= tall.sh; fi ++ - if test -n "$CPP11"; then CONFIGOPTS+=3D(--enable-cpp11-testing --wit= hout-maximum-compile-warnings "CXXFLAGS=3D-std=3Dc++11 -Wall -Wextra" "CFLA= GS=3D-std=3Dc11 -Wall -Wextra") && export CSTD=3Dc11 && export CPPSTD=3Dc++= 11; fi ++ - if test -n "$CPP14"; then CONFIGOPTS+=3D(--enable-cpp11-testing --wit= hout-maximum-compile-warnings "CXXFLAGS=3D-std=3Dc++14 -Wall -Wextra" "CFLA= GS=3D-std=3Dc11 -Wall -Wextra") && export CSTD=3Dc11 && export CPPSTD=3Dc++= 14; fi ++ - ls -la $(which $CC) ++ - ls -la $(which $CXX) ++ - $CC --version ++ - $CXX --version ++script: ++ - echo 'Configuring...' && echo -en 'travis_fold:start:script.1\\r' ++ - if test -n "$SWIGLANG"; then CONFIGOPTS+=3D(--without-alllang --with-= $WITHLANG); fi ++ - echo "${CONFIGOPTS[@]}" ++ - ./autogen.sh && mkdir -p build/build && cd build/build && ../../confi= gure "${CONFIGOPTS[@]}" ++ - echo -en 'travis_fold:end:script.1\\r' ++ - make -s $SWIGJOBS ++ - ./swig -version && ./swig -pcreversion ++ - if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-ccache; fi ++ - if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-errors-test-suit= e; fi ++ - echo 'Installing...' && echo -en 'travis_fold:start:script.2\\r' ++ - if test -z "$SWIGLANG"; then sudo make -s install && swig -version &&= ccache-swig -V; fi ++ - echo -en 'travis_fold:end:script.2\\r' ++ # Stricter compile flags for examples. Various headers and SWIG generat= ed code prevents full use of -pedantic. ++ - if test -n "$SWIGLANG"; then cflags=3D$($TRAVIS_BUILD_DIR/Tools/testf= lags.py --language $SWIGLANG --cflags --std=3D$CSTD --compiler=3D$CC) && ec= ho $cflags; fi ++ - if test -n "$SWIGLANG"; then cxxflags=3D$($TRAVIS_BUILD_DIR/Tools/tes= tflags.py --language $SWIGLANG --cxxflags --std=3D$CPPSTD --compiler=3D$CC)= && echo $cxxflags; fi ++ - if test -n "$SWIGLANG"; then make -s check-$SWIGLANG-version; fi ++ - if test -n "$SWIGLANG"; then make check-$SWIGLANG-enabled; fi ++ - if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-examples = CFLAGS=3D"$cflags" CXXFLAGS=3D"$cxxflags"; fi ++ - if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-test-suit= e CFLAGS=3D"$cflags" CXXFLAGS=3D"$cxxflags"; fi ++ - echo 'Cleaning...' && echo -en 'travis_fold:start:script.3\\r' ++ - make check-maintainer-clean && ../../configure $CONFIGOPTS ++ - echo -en 'travis_fold:end:script.3\\r' =2D-=20 2.17.1 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg7ZwOtzKO2lLzi2m5qXuPBlGeg0FAlsO2VMACgkQ5qXuPBlG eg0vbQ/9GHTesxhNTwe7AfTYuQnDUzz6GwdJJWrvlU1Oa9hJ68mPHU7Mtalmf27b twFzh1z327lQAANqxRHVN92+P84h0p59qXsGnhl1TJd4iV5QsCC75GLMEUxwDH7O AJ96nuJ3+0XiUSHKlo+Fuvq2cmWHWw/BwH7ysfL3uKSBPa9RRD2WtqmGid3S5rGV N72MACHLpKSE1iceav0U60RQKqcDjAqcgJug96xFnEX43mvQYngpEtMjT6ZkzQpf kGqCEVKd7LMI+y5j0gTq5l1KsiI7kZtPRBJx3zQGqO9e1fK7SO+erTeOFKGoiroP J2qF4tfSW7JajX/JhS81qFm67p+op5zp25nNYQUXGUyaxSriUghbP9ajdq+1/YZD fdBo0aPR0+WCW6QMOfHn8p/ln2eYSp+D41dXAIRF4MBhXo81RNCPJBSpjntxnLKt LBfd6QHn/5Yr8E5urMkI6VLIQH42xOoDqhbIMnVxGWWjaJ25SX/LeYlxoqPzvh2J APTQJNUp9fEjjj05bF/sKZ/IRX0uYmLdmpqX8yGuW+5OodGhN+jUfPAI5TD+1zZ1 XIJvwEcAuVS1Cs/AEN22qYu+bNRzP0IgkvwwYeS82VelJlv777vDpTxm0kCZntyI 94Fxwxq0HITVlm+vedxBDY+JB5oVpeHNtzZm+ZhYD5KVmbbcqIQ= =Wp80 -----END PGP SIGNATURE----- --==-=-=--