summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Andrejak2016-04-30 19:01:18 +0200
committerThomas Andrejak2016-04-30 19:01:18 +0200
commit6b1d430522584c09b36057443e8f9e9a39308732 (patch)
tree62f3f73aaf3b769c7e31e50b26a08aee7b9b9fc1
parenta3656a527a4777508252b984226bd233d4e1abe0 (diff)
downloadaur-6b1d430522584c09b36057443e8f9e9a39308732.tar.gz
Add support for all bindings
-rw-r--r--.SRCINFO18
-rw-r--r--PKGBUILD28
-rw-r--r--python_swig.patch1698
-rw-r--r--ruby.patch24
-rw-r--r--ruby_swig.patch39
5 files changed, 1794 insertions, 13 deletions
diff --git a/.SRCINFO b/.SRCINFO
index f7f70f59876a..66d59b58c642 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -6,12 +6,24 @@ pkgbase = libprelude
arch = i686
arch = x86_64
license = GPLv2
- makedepends = swig
depends = gnutls
depends = python2
- options = !libtool
- source = https://www.prelude-siem.org/attachments/download/569/libprelude-3.0.0.tar.gz
+ depends = python3
+ depends = gtk-doc
+ depends = lua
+ depends = ruby
+ backup = etc/prelude/default/client.conf
+ backup = etc/prelude/default/global.conf
+ backup = etc/prelude/default/idmef-client.conf
+ backup = etc/prelude/default/tls.conf
+ source = https://www.prelude-siem.org/pkg/src/3.0.0/libprelude-3.0.0.tar.gz
+ source = ruby.patch
+ source = ruby_swig.patch
+ source = python_swig.patch
md5sums = c93f5735c3dd162835b5597542f05282
+ md5sums = 76a67088c8fc3b09cf47faa4b5d82d6b
+ md5sums = 5c6260da1c4de6c7779e0f572994df51
+ md5sums = 7a841d6ec5b2657a2a8d991a00f17a05
pkgname = libprelude
diff --git a/PKGBUILD b/PKGBUILD
index 5aec614a8919..c8b1bbb7d62e 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,5 +1,6 @@
# Contributor: William Rea <sillywilly@gmail.com>
# Contributor: Connor Behan <connor.behan@gmail.com>
+# Contributor: Thomas Andrejak <thomas.andrejak@gmail.com>
pkgname=libprelude
pkgver=3.0.0
@@ -7,24 +8,31 @@ pkgrel=1
pkgdesc="Provides the framework for using the Prelude system"
arch=('i686' 'x86_64')
url="http://www.prelude-siem.org"
-options=('!libtool')
license=('GPLv2')
-depends=('gnutls' 'python2')
-makedepends=('swig')
-source=(https://www.prelude-siem.org/attachments/download/569/$pkgname-$pkgver.tar.gz)
+depends=('gnutls' 'python2' 'python3' 'gtk-doc' 'lua' 'ruby')
+backup=('etc/prelude/default/client.conf'
+ 'etc/prelude/default/global.conf'
+ 'etc/prelude/default/idmef-client.conf'
+ 'etc/prelude/default/tls.conf')
+source=("https://www.prelude-siem.org/pkg/src/3.0.0/$pkgname-$pkgver.tar.gz"
+ "ruby.patch" "ruby_swig.patch" "python_swig.patch")
build() {
- cd "$srcdir"/$pkgname-$pkgver
+ cd "$srcdir/$pkgname-$pkgver"
CPP="cpp -P" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
- --without-perl --without-lua --with-python=/usr/bin/python2
-
- #sed -i '1 i\#include <cstddef>' bindings/python/_PreludeEasy.cxx
+ --enable-gtk-doc
make
}
package() {
- cd "$srcdir"/$pkgname-$pkgver
+ cd "$srcdir/$pkgname-$pkgver"
make DESTDIR="$pkgdir" install
}
-md5sums=('c93f5735c3dd162835b5597542f05282')
+prepare() {
+ patch -p0 <ruby.patch
+ patch -p0 <python_swig.patch
+ patch -p0 <ruby_swig.patch
+}
+
+md5sums=('c93f5735c3dd162835b5597542f05282' '76a67088c8fc3b09cf47faa4b5d82d6b' '5c6260da1c4de6c7779e0f572994df51' '7a841d6ec5b2657a2a8d991a00f17a05')
diff --git a/python_swig.patch b/python_swig.patch
new file mode 100644
index 000000000000..a26511897298
--- /dev/null
+++ b/python_swig.patch
@@ -0,0 +1,1698 @@
+--- libprelude-3.0.0/bindings/python/prelude.py 2016-04-28 12:03:15.703333327 +0200
++++ libprelude-3.0.0/bindings/python/prelude.py.new 2016-04-28 12:02:56.816666658 +0200
+@@ -1,5 +1,5 @@
+ # This file was automatically generated by SWIG (http://www.swig.org).
+-# Version 3.0.6
++# Version 3.0.8
+ #
+ # Do not make changes to this file unless you know what you are doing--modify
+ # the SWIG interface file instead.
+@@ -75,7 +75,7 @@
+ def _swig_repr(self):
+ try:
+ strthis = "proxy of " + self.this.__repr__()
+- except:
++ except Exception:
+ strthis = ""
+ return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+--- libprelude-3.0.0/bindings/python/_prelude.cxx 2016-04-28 12:03:15.703333327 +0200
++++ libprelude-3.0.0/bindings/python/_prelude.cxx.new 2016-04-28 12:03:03.326666667 +0200
+@@ -1,6 +1,6 @@
+ /* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+- * Version 3.0.6
++ * Version 3.0.8
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+@@ -12,7 +12,11 @@
+ #define TARGET_LANGUAGE_OUTPUT_TYPE PyObject **
+
+
++
++#ifndef SWIGPYTHON
+ #define SWIGPYTHON
++#endif
++
+ #define SWIG_PYTHON_THREADS
+ #define SWIG_PYTHON_NO_BUILD_NONE
+ #define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+@@ -1332,7 +1336,7 @@
+
+ /* Unpack the argument tuple */
+
+-SWIGINTERN int
++SWIGINTERN Py_ssize_t
+ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs)
+ {
+ if (!args) {
+@@ -1346,7 +1350,7 @@
+ }
+ if (!PyTuple_Check(args)) {
+ if (min <= 1 && max >= 1) {
+- int i;
++ Py_ssize_t i;
+ objs[0] = args;
+ for (i = 1; i < max; ++i) {
+ objs[i] = 0;
+@@ -1366,7 +1370,7 @@
+ name, (min == max ? "" : "at most "), (int)max, (int)l);
+ return 0;
+ } else {
+- int i;
++ Py_ssize_t i;
+ for (i = 0; i < l; ++i) {
+ objs[i] = PyTuple_GET_ITEM(args, i);
+ }
+@@ -1707,16 +1711,32 @@
+ if (destroy) {
+ /* destroy is always a VARARGS method */
+ PyObject *res;
++
++ /* PyObject_CallFunction() has the potential to silently drop
++ the active active exception. In cases of unnamed temporary
++ variable or where we just finished iterating over a generator
++ StopIteration will be active right now, and this needs to
++ remain true upon return from SwigPyObject_dealloc. So save
++ and restore. */
++
++ PyObject *val = NULL, *type = NULL, *tb = NULL;
++ PyErr_Fetch(&val, &type, &tb);
++
+ if (data->delargs) {
+- /* we need to create a temporary object to carry the destroy operation */
+- PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0);
+- res = SWIG_Python_CallFunctor(destroy, tmp);
+- Py_DECREF(tmp);
++ /* we need to create a temporary object to carry the destroy operation */
++ PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0);
++ res = SWIG_Python_CallFunctor(destroy, tmp);
++ Py_DECREF(tmp);
+ } else {
+- PyCFunction meth = PyCFunction_GET_FUNCTION(destroy);
+- PyObject *mself = PyCFunction_GET_SELF(destroy);
+- res = ((*meth)(mself, v));
++ PyCFunction meth = PyCFunction_GET_FUNCTION(destroy);
++ PyObject *mself = PyCFunction_GET_SELF(destroy);
++ res = ((*meth)(mself, v));
+ }
++ if (!res)
++ PyErr_WriteUnraisable(destroy);
++
++ PyErr_Restore(val, type, tb);
++
+ Py_XDECREF(res);
+ }
+ #if !defined(SWIG_PYTHON_SILENT_MEMLEAK)
+@@ -1740,6 +1760,7 @@
+ next = tmp;
+ #endif
+ if (!SwigPyObject_Check(next)) {
++ PyErr_SetString(PyExc_TypeError, "Attempt to append a non SwigPyObject");
+ return NULL;
+ }
+ sobj->next = next;
+@@ -1895,7 +1916,9 @@
+ (unaryfunc)SwigPyObject_oct, /*nb_oct*/
+ (unaryfunc)SwigPyObject_hex, /*nb_hex*/
+ #endif
+-#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */
++#if PY_VERSION_HEX >= 0x03050000 /* 3.5 */
++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_matrix_multiply */
++#elif PY_VERSION_HEX >= 0x03000000 /* 3.0 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */
+ #elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */
+@@ -1975,10 +1998,19 @@
+ 0, /* tp_del */
+ #endif
+ #if PY_VERSION_HEX >= 0x02060000
+- 0, /* tp_version */
++ 0, /* tp_version_tag */
++#endif
++#if PY_VERSION_HEX >= 0x03040000
++ 0, /* tp_finalize */
+ #endif
+ #ifdef COUNT_ALLOCS
+- 0,0,0,0 /* tp_alloc -> tp_next */
++ 0, /* tp_allocs */
++ 0, /* tp_frees */
++ 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ 0, /* tp_prev */
++#endif
++ 0 /* tp_next */
+ #endif
+ };
+ swigpyobject_type = tmp;
+@@ -2154,10 +2186,19 @@
+ 0, /* tp_del */
+ #endif
+ #if PY_VERSION_HEX >= 0x02060000
+- 0, /* tp_version */
++ 0, /* tp_version_tag */
++#endif
++#if PY_VERSION_HEX >= 0x03040000
++ 0, /* tp_finalize */
+ #endif
+ #ifdef COUNT_ALLOCS
+- 0,0,0,0 /* tp_alloc -> tp_next */
++ 0, /* tp_allocs */
++ 0, /* tp_frees */
++ 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ 0, /* tp_prev */
++#endif
++ 0 /* tp_next */
+ #endif
+ };
+ swigpypacked_type = tmp;
+@@ -2685,13 +2726,11 @@
+ {
+ PyObject *dict;
+ if (!PyModule_Check(m)) {
+- PyErr_SetString(PyExc_TypeError,
+- "PyModule_AddObject() needs module as first arg");
++ PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs module as first arg");
+ return SWIG_ERROR;
+ }
+ if (!o) {
+- PyErr_SetString(PyExc_TypeError,
+- "PyModule_AddObject() needs non-NULL value");
++ PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs non-NULL value");
+ return SWIG_ERROR;
+ }
+
+@@ -2975,9 +3014,18 @@
+ wrapper##_closure(PyObject *a) { \
+ SwigPyObject *sobj; \
+ sobj = (SwigPyObject *)a; \
+- Py_XDECREF(sobj->dict); \
++ Py_XDECREF(sobj->dict); \
+ if (sobj->own) { \
+- PyObject *o = wrapper(a, NULL); \
++ PyObject *o; \
++ PyObject *val = 0, *type = 0, *tb = 0; \
++ PyErr_Fetch(&val, &type, &tb); \
++ o = wrapper(a, NULL); \
++ if (!o) { \
++ PyObject *deallocname = PyString_FromString(#wrapper); \
++ PyErr_WriteUnraisable(deallocname); \
++ Py_DECREF(deallocname); \
++ } \
++ PyErr_Restore(val, type, tb); \
+ Py_XDECREF(o); \
+ } \
+ if (PyType_IS_GC(a->ob_type)) { \
+@@ -3030,7 +3078,7 @@
+
+ #define SWIGPY_TERNARYCALLFUNC_CLOSURE(wrapper) \
+ SWIGINTERN PyObject * \
+-wrapper##_closure(PyObject *callable_object, PyObject *args, PyObject *) { \
++wrapper##_closure(PyObject *callable_object, PyObject *args, PyObject *) { \
+ return wrapper(callable_object, args); \
+ }
+
+@@ -3090,7 +3138,7 @@
+ return result; \
+ }
+
+-#define SWIGPY_FUNPACK_SSIZEARGFUNC_CLOSURE(wrapper) \
++#define SWIGPY_FUNPACK_SSIZEARGFUNC_CLOSURE(wrapper) \
+ SWIGINTERN PyObject * \
+ wrapper##_closure(PyObject *a, Py_ssize_t b) { \
+ PyObject *arg, *result; \
+@@ -3399,10 +3447,19 @@
+ 0, /* tp_del */
+ #endif
+ #if PY_VERSION_HEX >= 0x02060000
+- 0, /* tp_version */
++ 0, /* tp_version_tag */
++#endif
++#if PY_VERSION_HEX >= 0x03040000
++ 0, /* tp_finalize */
+ #endif
+ #ifdef COUNT_ALLOCS
+- 0,0,0,0 /* tp_alloc -> tp_next */
++ 0, /* tp_allocs */
++ 0, /* tp_frees */
++ 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ 0, /* tp_prev */
++#endif
++ 0 /* tp_next */
+ #endif
+ };
+ staticvar_type = tmp;
+@@ -3574,7 +3631,7 @@
+ #endif
+ #define SWIG_name "_prelude"
+
+-#define SWIGVERSION 0x030006
++#define SWIGVERSION 0x030008
+ #define SWIG_VERSION SWIGVERSION
+
+
+@@ -3814,9 +3871,11 @@
+ if (PyFloat_Check(obj)) {
+ if (val) *val = PyFloat_AsDouble(obj);
+ return SWIG_OK;
++#if PY_VERSION_HEX < 0x03000000
+ } else if (PyInt_Check(obj)) {
+ if (val) *val = PyInt_AsLong(obj);
+ return SWIG_OK;
++#endif
+ } else if (PyLong_Check(obj)) {
+ double v = PyLong_AsDouble(obj);
+ if (!PyErr_Occurred()) {
+@@ -3908,18 +3967,7 @@
+ return SWIG_OK;
+ } else {
+ PyErr_Clear();
+-#if PY_VERSION_HEX >= 0x03000000
+- {
+- long v = PyLong_AsLong(obj);
+- if (!PyErr_Occurred()) {
+- if (v < 0) {
+- return SWIG_OverflowError;
+- }
+- } else {
+- PyErr_Clear();
+- }
+- }
+-#endif
++ return SWIG_OverflowError;
+ }
+ }
+ #ifdef SWIG_PYTHON_CAST_MODE
+@@ -3976,16 +4024,20 @@
+ SWIGINTERN int
+ SWIG_AsVal_long (PyObject *obj, long* val)
+ {
++#if PY_VERSION_HEX < 0x03000000
+ if (PyInt_Check(obj)) {
+ if (val) *val = PyInt_AsLong(obj);
+ return SWIG_OK;
+- } else if (PyLong_Check(obj)) {
++ } else
++#endif
++ if (PyLong_Check(obj)) {
+ long v = PyLong_AsLong(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_OK;
+ } else {
+ PyErr_Clear();
++ return SWIG_OverflowError;
+ }
+ }
+ #ifdef SWIG_PYTHON_CAST_MODE
+@@ -4160,7 +4212,7 @@
+ MYPY_OBJOBJPROC_CLOSURE(_wrap_IDMEF___contains__)
+
+
+-namespace swig {
++namespace swig {
+ template <class Type>
+ struct noconst_traits {
+ typedef Type noconst_type;
+@@ -4174,7 +4226,7 @@
+ /*
+ type categories
+ */
+- struct pointer_category { };
++ struct pointer_category { };
+ struct value_category { };
+
+ /*
+@@ -4187,12 +4239,12 @@
+ return traits<typename noconst_traits<Type >::noconst_type >::type_name();
+ }
+
+- template <class Type>
++ template <class Type>
+ struct traits_info {
+ static swig_type_info *type_query(std::string name) {
+ name += " *";
+ return SWIG_TypeQuery(name.c_str());
+- }
++ }
+ static swig_type_info *type_info() {
+ static swig_type_info *info = type_query(type_name<Type>());
+ return info;
+@@ -4213,17 +4265,17 @@
+ std::string ptrname = name;
+ ptrname += " *";
+ return ptrname;
+- }
++ }
+ static const char* type_name() {
+ static std::string name = make_ptr_name(swig::type_name<Type>());
+ return name.c_str();
+ }
+ };
+
+- template <class Type, class Category>
++ template <class Type, class Category>
+ struct traits_as { };
+-
+- template <class Type, class Category>
++
++ template <class Type, class Category>
+ struct traits_check { };
+
+ }
+@@ -4567,6 +4619,12 @@
+ return pos;
+ }
+
++ template <class Sequence>
++ inline void
++ erase(Sequence* seq, const typename Sequence::iterator& position) {
++ seq->erase(position);
++ }
++
+ template <class Sequence, class Difference>
+ inline Sequence*
+ getslice(const Sequence* self, Difference i, Difference j, Py_ssize_t step) {
+@@ -4941,7 +4999,7 @@
+ template <class T>
+ struct SwigPySequence_Ref
+ {
+- SwigPySequence_Ref(PyObject* seq, int index)
++ SwigPySequence_Ref(PyObject* seq, Py_ssize_t index)
+ : _seq(seq), _index(index)
+ {
+ }
+@@ -4953,7 +5011,7 @@
+ return swig::as<T>(item, true);
+ } catch (std::exception& e) {
+ char msg[1024];
+- sprintf(msg, "in sequence element %d ", _index);
++ sprintf(msg, "in sequence element %d ", (int)_index);
+ if (!PyErr_Occurred()) {
+ ::SWIG_Error(SWIG_TypeError, swig::type_name<T>());
+ }
+@@ -4971,7 +5029,7 @@
+
+ private:
+ PyObject* _seq;
+- int _index;
++ Py_ssize_t _index;
+ };
+
+ template <class T>
+@@ -4992,13 +5050,13 @@
+ typedef Reference reference;
+ typedef T value_type;
+ typedef T* pointer;
+- typedef int difference_type;
++ typedef Py_ssize_t difference_type;
+
+ SwigPySequence_InputIterator()
+ {
+ }
+
+- SwigPySequence_InputIterator(PyObject* seq, int index)
++ SwigPySequence_InputIterator(PyObject* seq, Py_ssize_t index)
+ : _seq(seq), _index(index)
+ {
+ }
+@@ -5078,6 +5136,7 @@
+ difference_type _index;
+ };
+
++ // STL container wrapper around a Python sequence
+ template <class T>
+ struct SwigPySequence_Cont
+ {
+@@ -5085,8 +5144,8 @@
+ typedef const SwigPySequence_Ref<T> const_reference;
+ typedef T value_type;
+ typedef T* pointer;
+- typedef int difference_type;
+- typedef int size_type;
++ typedef Py_ssize_t difference_type;
++ typedef size_t size_type;
+ typedef const pointer const_pointer;
+ typedef SwigPySequence_InputIterator<T, reference> iterator;
+ typedef SwigPySequence_InputIterator<T, const_reference> const_iterator;
+@@ -5147,13 +5206,13 @@
+
+ bool check(bool set_err = true) const
+ {
+- int s = size();
+- for (int i = 0; i < s; ++i) {
++ Py_ssize_t s = size();
++ for (Py_ssize_t i = 0; i < s; ++i) {
+ swig::SwigVar_PyObject item = PySequence_GetItem(_seq, i);
+ if (!swig::check<value_type>(item)) {
+ if (set_err) {
+ char msg[1024];
+- sprintf(msg, "in sequence element %d", i);
++ sprintf(msg, "in sequence element %d", (int)i);
+ SWIG_Error(SWIG_RuntimeError, msg);
+ }
+ return false;
+@@ -5341,6 +5400,7 @@
+ return SWIG_OK;
+ } else {
+ PyErr_Clear();
++ res = SWIG_OverflowError;
+ }
+ } else {
+ unsigned long v;
+@@ -5411,7 +5471,7 @@
+
+
+ namespace swig {
+- template <> struct traits<Prelude::Connection > {
++ template <> struct traits< Prelude::Connection > {
+ typedef pointer_category category;
+ static const char* type_name() { return"Prelude::Connection"; }
+ };
+@@ -5483,10 +5543,9 @@
+ #endif
+ size_type size = seq.size();
+ if (size <= (size_type)INT_MAX) {
+- PyObject *obj = PyTuple_New((int)size);
+- int i = 0;
+- for (const_iterator it = seq.begin();
+- it != seq.end(); ++it, ++i) {
++ PyObject *obj = PyTuple_New((Py_ssize_t)size);
++ Py_ssize_t i = 0;
++ for (const_iterator it = seq.begin(); it != seq.end(); ++it, ++i) {
+ PyTuple_SetItem(obj,i,swig::from<value_type>(*it));
+ }
+ return obj;
+@@ -5517,7 +5576,7 @@
+
+
+ namespace swig {
+- template <> struct traits<std::vector<Prelude::Connection, std::allocator< Prelude::Connection > > > {
++ template <> struct traits<std::vector< Prelude::Connection, std::allocator< Prelude::Connection > > > {
+ typedef pointer_category category;
+ static const char* type_name() {
+ return "std::vector<" "Prelude::Connection" "," "std::allocator< Prelude::Connection >" " >";
+@@ -5558,7 +5617,7 @@
+
+
+ namespace swig {
+- template <> struct traits<Prelude::IDMEF > {
++ template <> struct traits< Prelude::IDMEF > {
+ typedef pointer_category category;
+ static const char* type_name() { return"Prelude::IDMEF"; }
+ };
+@@ -5566,7 +5625,7 @@
+
+
+ namespace swig {
+- template <> struct traits<std::vector<Prelude::IDMEF, std::allocator< Prelude::IDMEF > > > {
++ template <> struct traits<std::vector< Prelude::IDMEF, std::allocator< Prelude::IDMEF > > > {
+ typedef pointer_category category;
+ static const char* type_name() {
+ return "std::vector<" "Prelude::IDMEF" "," "std::allocator< Prelude::IDMEF >" " >";
+@@ -5576,7 +5635,7 @@
+
+
+ namespace swig {
+- template <> struct traits<Prelude::IDMEFValue > {
++ template <> struct traits< Prelude::IDMEFValue > {
+ typedef pointer_category category;
+ static const char* type_name() { return"Prelude::IDMEFValue"; }
+ };
+@@ -5584,7 +5643,7 @@
+
+
+ namespace swig {
+- template <> struct traits<std::vector<Prelude::IDMEFValue, std::allocator< Prelude::IDMEFValue > > > {
++ template <> struct traits<std::vector< Prelude::IDMEFValue, std::allocator< Prelude::IDMEFValue > > > {
+ typedef pointer_category category;
+ static const char* type_name() {
+ return "std::vector<" "Prelude::IDMEFValue" "," "std::allocator< Prelude::IDMEFValue >" " >";
+@@ -5604,6 +5663,7 @@
+ return SWIG_OK;
+ } else {
+ PyErr_Clear();
++ res = SWIG_OverflowError;
+ }
+ } else {
+ long v;
+@@ -5863,17 +5923,17 @@
+
+
+ namespace swig {
+- template <> struct traits<std::string > {
++ template <> struct traits< std::string > {
+ typedef value_category category;
+ static const char* type_name() { return"std::string"; }
+- };
+- template <> struct traits_asval<std::string > {
++ };
++ template <> struct traits_asval< std::string > {
+ typedef std::string value_type;
+- static int asval(PyObject *obj, value_type *val) {
++ static int asval(PyObject *obj, value_type *val) {
+ return SWIG_AsVal_std_string (obj, val);
+ }
+ };
+- template <> struct traits_from<std::string > {
++ template <> struct traits_from< std::string > {
+ typedef std::string value_type;
+ static PyObject *from(const value_type& val) {
+ return SWIG_From_std_string (val);
+@@ -5883,7 +5943,7 @@
+
+
+ namespace swig {
+- template <> struct traits<std::vector<std::string, std::allocator< std::string > > > {
++ template <> struct traits<std::vector< std::string, std::allocator< std::string > > > {
+ typedef pointer_category category;
+ static const char* type_name() {
+ return "std::vector<" "std::string" "," "std::allocator< std::string >" " >";
+@@ -6088,8 +6148,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"SwigPyIterator_incr",0,2,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -6180,8 +6242,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_SwigPyIterator_decr(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"SwigPyIterator_decr",0,2,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -6705,8 +6769,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_SwigPyIterator___sub__(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"SwigPyIterator___sub__",0,2,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -6789,8 +6855,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_checkVersion(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"checkVersion",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -6929,8 +6997,10 @@
+
+
+ SWIGINTERN int _wrap_new_ClientProfile(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_ClientProfile",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -7805,8 +7875,10 @@
+
+
+ SWIGINTERN int _wrap_new_Connection(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_Connection",0,2,argv))) SWIG_fail;
+ --argc;
+@@ -8666,8 +8738,10 @@
+
+
+ SWIGINTERN int _wrap_new_ConnectionPool(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_ConnectionPool",0,2,argv))) SWIG_fail;
+ --argc;
+@@ -8847,7 +8921,7 @@
+ SWIG_fail;
+ }
+ }
+- resultobj = swig::from(static_cast< std::vector<Prelude::Connection,std::allocator< Prelude::Connection > > >(result));
++ resultobj = swig::from(static_cast< std::vector< Prelude::Connection,std::allocator< Prelude::Connection > > >(result));
+ return resultobj;
+ fail:
+ return NULL;
+@@ -9354,8 +9428,10 @@
+
+
+ SWIGINTERN int _wrap_new_Client(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_Client",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -10412,8 +10488,10 @@
+
+
+ SWIGINTERN int _wrap_new_PreludeError(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_PreludeError",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -10883,8 +10961,10 @@
+
+
+ SWIGINTERN int _wrap_new_IDMEFCriteria(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_IDMEFCriteria",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -11281,7 +11361,7 @@
+
+ if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+ {
+- std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *ptr = (std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *)0;
++ std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *ptr = (std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *)0;
+ res1 = swig::asptr(swig_obj[0], &ptr);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IDMEFValue" "', argument " "1"" of type '" "std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > const &""'");
+@@ -11351,7 +11431,7 @@
+
+ if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+ {
+- std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
++ std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
+ res1 = swig::asptr(swig_obj[0], &ptr);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IDMEFValue" "', argument " "1"" of type '" "std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > const &""'");
+@@ -11631,8 +11711,10 @@
+
+
+ SWIGINTERN int _wrap_new_IDMEFValue(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_IDMEFValue",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -11765,7 +11847,7 @@
+ if (argc == 1) {
+ int _v = 0;
+ {
+- int res = swig::asptr(argv[0], (std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > >**)(0));
++ int res = swig::asptr(argv[0], (std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > >**)(0));
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_12;
+@@ -11945,7 +12027,7 @@
+ }
+ arg1 = reinterpret_cast< Prelude::IDMEFValue * >(argp1);
+ {
+- std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
++ std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
+ res2 = swig::asptr(swig_obj[1], &ptr);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDMEFValue___eq__" "', argument " "2"" of type '" "std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > const &""'");
+@@ -12188,8 +12270,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_IDMEFValue___eq__(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"IDMEFValue___eq__",0,2,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -12398,8 +12482,10 @@
+
+
+ SWIGINTERN int _wrap_new_IDMEFPath(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_IDMEFPath",0,2,argv))) SWIG_fail;
+ --argc;
+@@ -12500,7 +12586,7 @@
+ }
+ arg2 = reinterpret_cast< Prelude::IDMEF * >(argp2);
+ {
+- std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *ptr = (std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *)0;
++ std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *ptr = (std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *)0;
+ res3 = swig::asptr(swig_obj[2], &ptr);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "IDMEFPath_set" "', argument " "3"" of type '" "std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > const &""'");
+@@ -12603,7 +12689,7 @@
+ }
+ arg2 = reinterpret_cast< Prelude::IDMEF * >(argp2);
+ {
+- std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
++ std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
+ res3 = swig::asptr(swig_obj[2], &ptr);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "IDMEFPath_set" "', argument " "3"" of type '" "std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > const &""'");
+@@ -13027,8 +13113,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_IDMEFPath_set(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[4];
++ Py_ssize_t argc;
++ PyObject *argv[4] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"IDMEFPath_set",0,3,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -13147,7 +13235,7 @@
+ if (argc == 3) {
+ int _v = 0;
+ {
+- int res = swig::asptr(argv[2], (std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > >**)(0));
++ int res = swig::asptr(argv[2], (std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > >**)(0));
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_10;
+@@ -14073,8 +14161,10 @@
+
+
+ SWIGINTERN int _wrap_new_IDMEFTime(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_IDMEFTime",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -14320,8 +14410,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_IDMEFTime_set(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"IDMEFTime_set",0,2,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -15104,8 +15196,10 @@
+
+
+ SWIGINTERN int _wrap_new_IDMEFClass(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_IDMEFClass",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -15266,8 +15360,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_IDMEFClass_get(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[3];
++ Py_ssize_t argc;
++ PyObject *argv[3] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"IDMEFClass_get",0,2,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -15608,7 +15704,7 @@
+ SWIG_fail;
+ }
+ }
+- resultobj = swig::from(static_cast< std::vector<std::string,std::allocator< std::string > > >(result));
++ resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result));
+ return resultobj;
+ fail:
+ return NULL;
+@@ -15833,8 +15929,10 @@
+
+
+ SWIGINTERN int _wrap_new_IDMEF(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[2];
++ Py_ssize_t argc;
++ PyObject *argv[2] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"new_IDMEF",0,1,argv))) SWIG_fail;
+ --argc;
+@@ -15890,7 +15988,7 @@
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ {
+- std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *ptr = (std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *)0;
++ std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *ptr = (std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > *)0;
+ res3 = swig::asptr(swig_obj[2], &ptr);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "IDMEF_set" "', argument " "3"" of type '" "std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > > const &""'");
+@@ -15993,7 +16091,7 @@
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ {
+- std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector<Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
++ std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *ptr = (std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > *)0;
+ res3 = swig::asptr(swig_obj[2], &ptr);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "IDMEF_set" "', argument " "3"" of type '" "std::vector< Prelude::IDMEFValue,std::allocator< Prelude::IDMEFValue > > const &""'");
+@@ -16419,8 +16517,10 @@
+
+
+ SWIGINTERN PyObject *_wrap_IDMEF_set(PyObject *self, PyObject *args) {
+- int argc;
+- PyObject *argv[4];
++ Py_ssize_t argc;
++ PyObject *argv[4] = {
++ 0
++ };
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"IDMEF_set",0,3,argv+1))) SWIG_fail;
+ argv[0] = self;
+@@ -16539,7 +16639,7 @@
+ if (argc == 3) {
+ int _v = 0;
+ {
+- int res = swig::asptr(argv[2], (std::vector<Prelude::IDMEF,std::allocator< Prelude::IDMEF > >**)(0));
++ int res = swig::asptr(argv[2], (std::vector< Prelude::IDMEF,std::allocator< Prelude::IDMEF > >**)(0));
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_10;
+@@ -17213,7 +17313,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) (binaryfunc) _wrap_SwigPyIterator___add__, /* nb_add */
+ (binaryfunc) (binaryfunc) _wrap_SwigPyIterator___sub___closure, /* nb_subtract */
+@@ -17268,6 +17387,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -17308,6 +17431,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__swig__SwigPyIterator_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__swig__SwigPyIterator_type};
+@@ -17420,7 +17547,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -17475,6 +17621,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -17515,6 +17665,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__ClientProfile_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__ClientProfile_type};
+@@ -17626,7 +17780,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -17681,6 +17854,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -17721,6 +17898,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__Connection_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__Connection_type};
+@@ -17828,7 +18009,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -17883,6 +18083,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -17923,6 +18127,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__ConnectionPool_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__ConnectionPool_type};
+@@ -18033,7 +18241,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -18088,6 +18315,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -18128,6 +18359,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__Client_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__Client_type};
+@@ -18228,7 +18463,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
++ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
+ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -18283,6 +18537,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -18323,6 +18581,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__PreludeLog_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__PreludeLog_type};
+@@ -18419,7 +18681,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -18474,6 +18755,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -18514,6 +18799,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__PreludeError_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__PreludeError_type};
+@@ -18608,7 +18897,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
++ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
+ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -18663,6 +18971,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -18703,6 +19015,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__ClientEasy_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__ClientEasy_type};
+@@ -18797,7 +19113,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
++ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
+ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -18852,6 +19187,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -18892,6 +19231,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__IDMEFCriterion_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__IDMEFCriterion_type};
+@@ -18991,7 +19334,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -19046,6 +19408,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -19086,6 +19452,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__IDMEFCriteria_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__IDMEFCriteria_type};
+@@ -19200,7 +19570,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -19255,6 +19644,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -19295,6 +19688,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__IDMEFValue_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__IDMEFValue_type};
+@@ -19407,7 +19804,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -19462,6 +19878,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -19502,6 +19922,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__IDMEFPath_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__IDMEFPath_type};
+@@ -19622,7 +20046,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -19677,6 +20120,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -19717,6 +20164,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__IDMEFTime_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__IDMEFTime_type};
+@@ -19823,7 +20274,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -19878,6 +20348,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) (lenfunc) _wrap_IDMEFClass_getChildCount_closure, /* mp_length */
+@@ -19918,6 +20392,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__IDMEFClass_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__IDMEFClass_type};
+@@ -20028,7 +20506,26 @@
+ #if PY_VERSION_HEX >= 0x02060000
+ (int) 0, /* tp_version_tag */
+ #endif
++#if PY_VERSION_HEX >= 0x03040000
++ (destructor) 0, /* tp_finalize */
++#endif
++#ifdef COUNT_ALLOCS
++ (Py_ssize_t) 0, /* tp_allocs */
++ (Py_ssize_t) 0, /* tp_frees */
++ (Py_ssize_t) 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ (struct _typeobject*) 0, /* tp_prev */
++#endif
++ (struct _typeobject*) 0, /* tp_next */
++#endif
+ },
++#if PY_VERSION_HEX >= 0x03050000
++ {
++ (unaryfunc) 0, /* am_await */
++ (unaryfunc) 0, /* am_aiter */
++ (unaryfunc) 0, /* am_anext */
++ },
++#endif
+ {
+ (binaryfunc) 0, /* nb_add */
+ (binaryfunc) 0, /* nb_subtract */
+@@ -20083,6 +20580,10 @@
+ #if PY_VERSION_HEX >= 0x02050000
+ (unaryfunc) 0, /* nb_index */
+ #endif
++#if PY_VERSION_HEX >= 0x03050000
++ (binaryfunc) 0, /* nb_matrix_multiply */
++ (binaryfunc) 0, /* nb_inplace_matrix_multiply */
++#endif
+ },
+ {
+ (lenfunc) 0, /* mp_length */
+@@ -20123,6 +20624,10 @@
+ },
+ (PyObject*) 0, /* ht_name */
+ (PyObject*) 0, /* ht_slots */
++#if PY_VERSION_HEX >= 0x03030000
++ (PyObject*) 0, /* ht_qualname */
++ (struct _dictkeysobject*) 0, /* ht_cached_keys */
++#endif
+ };
+
+ SWIGINTERN SwigPyClientData SwigPyBuiltin__Prelude__IDMEF_clientdata = {0, 0, 0, 0, 0, 0, (PyTypeObject *)&SwigPyBuiltin__Prelude__IDMEF_type};
+@@ -20739,10 +21244,19 @@
+ 0, /* tp_del */
+ #endif
+ #if PY_VERSION_HEX >= 0x02060000
+- 0, /* tp_version */
++ 0, /* tp_version_tag */
++#endif
++#if PY_VERSION_HEX >= 0x03040000
++ 0, /* tp_finalize */
+ #endif
+ #ifdef COUNT_ALLOCS
+- 0,0,0,0 /* tp_alloc -> tp_next */
++ 0, /* tp_allocs */
++ 0, /* tp_frees */
++ 0, /* tp_maxalloc */
++#if PY_VERSION_HEX >= 0x02050000
++ 0, /* tp_prev */
++#endif
++ 0 /* tp_next */
+ #endif
+ };
+ varlink_type = tmp;
diff --git a/ruby.patch b/ruby.patch
new file mode 100644
index 000000000000..6a0886d32042
--- /dev/null
+++ b/ruby.patch
@@ -0,0 +1,24 @@
+--- libprelude-3.0.0/configure 2016-04-23 00:04:31.791000363 +0200
++++ libprelude-3.0.0/configure 2016-04-28 11:34:46.723333332 +0200
+@@ -21843,7 +21843,8 @@
+
+
+ RUBY_INCLUDES=`$RUBY -r rbconfig -e 'if RbConfig::CONFIG["archdir"] then print " -I" + RbConfig::CONFIG["archdir"] end
+- if RbConfig::CONFIG["rubyhdrdir"] then print " -I" + RbConfig::CONFIG["rubyhdrdir"] end'`
++ if RbConfig::CONFIG["rubyhdrdir"] then print " -I" + RbConfig::CONFIG["rubyhdrdir"] end
++ if RbConfig::CONFIG["rubyhdrdir"] then print " -I" + RbConfig::CONFIG["rubyhdrdir"] + "/" + RbConfig::CONFIG["sitearch"] end'`
+
+
+
+--- libprelude-3.0.0/m4/am_path_ruby.m4 2016-04-22 23:26:58.614000363 +0200
++++ libprelude-3.0.0/m4/am_path_ruby.m4 2016-04-28 11:35:05.476666650 +0200
+@@ -100,7 +100,8 @@
+ AC_SUBST([rbexecdir], [$am_cv_ruby_rbexecdir])
+
+ RUBY_INCLUDES=`$RUBY -r rbconfig -e 'if RbConfig::CONFIG[["archdir"]] then print " -I" + RbConfig::CONFIG[["archdir"]] end
+- if RbConfig::CONFIG[["rubyhdrdir"]] then print " -I" + RbConfig::CONFIG[["rubyhdrdir"]] end'`
++ if RbConfig::CONFIG[["rubyhdrdir"]] then print " -I" + RbConfig::CONFIG[["rubyhdrdir"]] end
++ if RbConfig::CONFIG["rubyhdrdir"] then print " -I" + RbConfig::CONFIG["rubyhdrdir"] + "/" + RbConfig::CONFIG["sitearch"] end'`
+ AC_SUBST([RUBY_INCLUDES])
+
+ dnl pkgrbexecdir -- $(rbexecdir)/$(PACKAGE)
diff --git a/ruby_swig.patch b/ruby_swig.patch
new file mode 100644
index 000000000000..1b30a8c3138f
--- /dev/null
+++ b/ruby_swig.patch
@@ -0,0 +1,39 @@
+--- libprelude-3.0.0/bindings/ruby/Prelude.cxx 2016-04-22 23:26:58.270000362 +0200
++++ libprelude-3.0.0/bindings/ruby/Prelude.cxx 2016-04-28 11:37:20.826666666 +0200
+@@ -867,7 +867,17 @@
+ #define SWIG_NullReferenceError -13
+
+
+-
++#ifdef __cplusplus
++// Work around C++ incompatibility in Ruby 2.3.0 headers:
++// https://bugs.ruby-lang.org/issues/11962
++# include <ruby/config.h>
++# ifdef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
++# undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
++# endif
++# ifdef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P
++# undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P
++# endif
++#endif
+ #include <ruby.h>
+
+ /* Ruby 1.9.1 has a "memoisation optimisation" when compiling with GCC which
+@@ -2596,6 +2606,17 @@
+
+ extern "C" {
+
++#ifdef __cplusplus
++// Work around C++ incompatibility in Ruby 2.3.0 headers:
++// https://bugs.ruby-lang.org/issues/11962
++# include <ruby/config.h>
++# ifdef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
++# undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
++# endif
++# ifdef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P
++# undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P
++# endif
++#endif
+ #include <ruby.h>
+ /*
+ * cannot put libmissing into the include path, as it will trigger