[packages/lasso] - updated to 2.9.0

qboosh qboosh at pld-linux.org
Sun Apr 12 10:13:32 CEST 2026


commit 056fe3b2dfd1ba9c1af85094eedcb448c7a1fe59
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sun Apr 12 10:14:00 2026 +0200

    - updated to 2.9.0

 git.patch        | 7918 ------------------------------------------------------
 lasso-java.patch |   20 +
 lasso.spec       |   59 +-
 3 files changed, 56 insertions(+), 7941 deletions(-)
---
diff --git a/lasso.spec b/lasso.spec
index eda7038..d39cc6b 100644
--- a/lasso.spec
+++ b/lasso.spec
@@ -3,33 +3,32 @@
 # - fix tests (some linkage errors)
 #
 # Conditional build:
-%bcond_with	wsf		# experimental ID-WSF support
 %bcond_with	tests		# build tests
-%bcond_with	java		# Java bindings
-%bcond_with	php		# PHP 5 bindings (not ready for PHP 7)
+%bcond_with	java		# Java bindings (some files missing in repo)
+%bcond_with	php5		# PHP 5 bindings
+%bcond_with	php7		# PHP 7.x bindings (PHP 8 not supported at least by configure)
 %bcond_without	perl		# Perl bindings
 %bcond_without	python		# Python 3.x bindings
 %bcond_without	static_libs	# static library
 
-%if "%{?php_suffix}" == ""
+%if %{with php5} && "%{?php_suffix}" == ""
 %define		php_suffix	55
 %endif
 %define		php_name	php%{?php_suffix}
 Summary:	Liberty Alliance Single Sign On
 Summary(pl.UTF-8):	Implementacja Liberty Alliance Single Sign On
 Name:		lasso
-Version:	2.8.2
-Release:	7
+Version:	2.9.0
+Release:	1
 License:	GPL v2+
 Group:		Libraries
 Source0:	https://dev.entrouvert.org/lasso/%{name}-%{version}.tar.gz
-# Source0-md5:	ad2e167973cc1c21cd16329bfbcd3d16
-Patch0:		git.patch
+# Source0-md5:	beae6a2669dacd8b306cae04ae2795ae
+Patch0:		%{name}-java.patch
 URL:		https://lasso.entrouvert.org/
 BuildRequires:	autoconf >= 2.53
 BuildRequires:	automake >= 1:1.11
 %{?with_tests:BuildRequires:	check-devel}
-%{?with_wsf:BuildRequires: cyrus-sasl-devel >= 2}
 BuildRequires:	glib2-devel >= 1:2.17.0
 BuildRequires:	gtk-doc >= 1.9
 BuildRequires:	libtool
@@ -43,7 +42,12 @@ BuildRequires:	xmlsec1-openssl-devel >= 1.2.6
 BuildRequires:	zlib-devel
 %if %{with php}
 BuildRequires:	expat-devel
+%if %{with php5}
 BuildRequires:	%{php_name}-devel >= 5
+%endif
+%if %{with php7}
+BuildRequires:	%{php_name}-devel >= 7
+%endif
 BuildRequires:	python3
 %endif
 %if %{with perl}
@@ -178,22 +182,31 @@ On).
 %{__autoconf}
 %{__automake}
 %configure \
-	%{!?with_java:--disable-java} \
+%if %{with java}
+	--enable-java \
+	--with-java-home=%{java_home} \
+%else
+	--disable-java \
+%endif
 	%{!?with_perl:--disable-perl} \
-%if %{with php}
+%if %{with php5}
 	--enable-php5 \
 	--with-php5-config-dir=%{php_sysconfdir}/conf.d \
 %else
 	--disable-php5 \
+%endif
+%if %{with php7}
+	PHP7=%{__php} \
+	PHP7_CONFIG=/usr/bin/php-config \
+	--enable-php7 \
+	--with-php7-config-dir=%{php_sysconfdir}/conf.d \
+%else
+	--disable-php7 \
 %endif
 	%{!?with_python:--disable-python} \
 	--disable-silent-rules \
 	%{!?with_static_libs:--disable-static} \
 	%{!?with_tests:--disable-tests} \
-%if %{with wsf}
-	--enable-wsf \
-	--with-sasl2 \
-%endif
 	--with-html-dir=%{_gtkdocdir}
 
 %{__make}
@@ -237,12 +250,12 @@ rm -rf $RPM_BUILD_ROOT
 %files
 %defattr(644,root,root,755)
 %doc AUTHORS ChangeLog NEWS README
-%attr(755,root,root) %{_libdir}/liblasso.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/liblasso.so.3
+%{_libdir}/liblasso.so.*.*.*
+%ghost %{_libdir}/liblasso.so.3
 
 %files devel
 %defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/liblasso.so
+%{_libdir}/liblasso.so
 %{_pkgconfigdir}/lasso.pc
 %{_includedir}/lasso
 
@@ -257,21 +270,21 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(644,root,root,755)
 %{perl_vendorarch}/Lasso.pm
 %dir %{perl_vendorarch}/auto/Lasso
-%attr(755,root,root) %{perl_vendorarch}/auto/Lasso/Lasso.so
+%{perl_vendorarch}/auto/Lasso/Lasso.so
 %endif
 
 %if %{with java}
 %files -n java-%{name}
 %defattr(644,root,root,755)
-%attr(755,root,root) %{_jnidir}/libjnilasso.so
+%{_jnidir}/libjnilasso.so
 %{_javadir}/lasso.jar
 %endif
 
-%if %{with php}
+%if %{with php5} || %{with php7}
 %files -n %{php_name}-%{name}
 %defattr(644,root,root,755)
 %config(noreplace) %verify(not md5 mtime size) %{php_sysconfdir}/conf.d/lasso.ini
-%attr(755,root,root) %{php_extensiondir}/lasso.so
+%{php_extensiondir}/lasso.so
 %{php_data_dir}/lasso.php
 %endif
 
@@ -280,5 +293,5 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(644,root,root,755)
 %{py3_sitedir}/__pycache__
 %{py3_sitedir}/lasso.py
-%attr(755,root,root) %{py3_sitedir}/_lasso.so
+%{py3_sitedir}/_lasso.so
 %endif
diff --git a/git.patch b/git.patch
deleted file mode 100644
index b93f3f6..0000000
--- a/git.patch
+++ /dev/null
@@ -1,7918 +0,0 @@
-diff --git a/INSTALL b/INSTALL
-index b4ed0f73..c1544bb4 100644
---- a/INSTALL
-+++ b/INSTALL
-@@ -26,9 +26,6 @@ In all cases you need to install development packages for dependencies. On Debia
-     aptitude install libxml2-dev libxslt1-dev libxmlsec1-dev libxmlsec1-openssl \
-       libglib2.0-dev python-all-dev fastjar php5-dev php5-cli python-lxml
- 
--Python bindings require the "six" library:
--
--    pip install six
- 
- Basic Installation
- ==================
-diff --git a/NEWS b/NEWS
-index 1d98536d..cc0c3d92 100644
---- a/NEWS
-+++ b/NEWS
-@@ -1,6 +1,17 @@
- NEWS
- ====
- 
-+Future
-+------
-+
-+- Fix symbol deprecation of XMLSEC_CRYPTO macro in libxmlsec 1.3.0 (Patch
-+  provided by Simo Sorce of RedHat) (#78280)
-+- Annotate lasso_*_signature_method functions with LASSO_EXPORT (#86076)
-+- Fix implicit function declaration errors, patch provided by Rob Crittenden
-+  from RedHat (#85340)
-+- Adjust to structured error callback argument change in libxml2 2.12, patch
-+  provided by Florian Wiemer of RedHat (#86080)
-+
- 2.8.2 - March 14th 2023
- -----------------------
- 
-diff --git a/autogen.sh b/autogen.sh
-index bf0e0d3a..7067b634 100755
---- a/autogen.sh
-+++ b/autogen.sh
-@@ -27,40 +27,26 @@ cd "$srcdir"
- 	DIE=1
- }
- 
--if automake-1.16 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.16
--    ACLOCAL=aclocal-1.16
--elif automake-1.15 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.15
--    ACLOCAL=aclocal-1.15
--elif automake-1.14 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.14
--    ACLOCAL=aclocal-1.14
--elif automake-1.13 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.13
--    ACLOCAL=aclocal-1.13
--elif automake-1.12 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.12
--    ACLOCAL=aclocal-1.12
--elif automake-1.11 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.11
--    ACLOCAL=aclocal-1.11
--elif automake-1.10 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.10
--    ACLOCAL=aclocal-1.10
--elif automake-1.9 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.9
--    ACLOCAL=aclocal-1.9
--elif automake-1.8 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.8
--    ACLOCAL=aclocal-1.8
--elif automake-1.7 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.7
--    ACLOCAL=aclocal-1.7
--elif automake-1.6 --version < /dev/null > /dev/null 2>&1; then
--    AUTOMAKE=automake-1.6
--    ACLOCAL=aclocal-1.6
--else
-+am_versions() {
-+	major=$1
-+	minor_min=$2
-+	minor_max=$3
-+	seq "$minor_max" -1 "$minor_min" | xargs -I {} echo "$major.{}"
-+}
-+
-+AM_VERSIONS_SUPPORT=$(am_versions 1 6 17)
-+AUTOMAKE=""
-+ACLOCAL=""
-+for VERSION in $AM_VERSIONS_SUPPORT
-+do
-+	if which automake-${VERSION} < /dev/null > /dev/null 2>&1; then
-+		AUTOMAKE=automake-${VERSION}
-+		ACLOCAL=aclocal-${VERSION}
-+		break
-+	fi
-+done
-+if [ -z "$AUTOMAKE" ]
-+then
- 	echo
- 	echo "You must have automake installed to compile $PROJECT."
- 	echo "Download the appropriate package for your distribution,"
-diff --git a/bindings/bindings.py b/bindings/bindings.py
-index b8f9d503..ef3f9fbd 100644
---- a/bindings/bindings.py
-+++ b/bindings/bindings.py
-@@ -23,16 +23,9 @@
- 
- import os
- import re
--from six import print_, PY3
- import sys
- from utils import *
- 
--if PY3:
--    do_open = lambda *args, **kwargs: open(*args, encoding='utf-8', **kwargs)
--else:
--    do_open = open
--
--
- from optparse import OptionParser
- 
- try:
-@@ -166,10 +159,10 @@ class BindingData:
-             if not 'Makefile.am' in filenames:
-                 # not a source dir
-                 continue
--            makefile_am = do_open(os.path.join(base, 'Makefile.am')).read()
-+            makefile_am = open(os.path.join(base, 'Makefile.am')).read()
-             filenames = [x for x in filenames if x.endswith('.c') if x in makefile_am]
-             for filename in filenames:
--                s = do_open(os.path.join(base, filename)).read()
-+                s = open(os.path.join(base, filename)).read()
-                 docstrings = regex.findall(s)
-                 for d in docstrings:
-                     docstring = '\n'.join([x[3:] for x in d.splitlines()])
-@@ -247,7 +240,7 @@ class Function:
-                 try:
-                     arg = [x for x in self.args if x[1] == param.attrib.get('name')][0]
-                 except IndexError:
--                    print_('W: no such param (%s) in function (%s)' % (
-+                    print('W: no such param (%s) in function (%s)' % (
-                             param.attrib.get('name'), self.name), file=sys.stderr)
-                     continue
-                 if param.attrib.get('optional') == 'true':
-@@ -410,7 +403,7 @@ def parse_header(header_file):
-     in_struct_private = False
-     in_ifdef_zero = False
- 
--    lines = do_open(header_file).readlines()
-+    lines = open(header_file).readlines()
-     i = 0
-     while i < len(lines):
-         line = lines[i]
-@@ -435,7 +428,7 @@ def parse_header(header_file):
-                 enum_name = line[2:].strip().strip(';')
-                 binding.enums.append(enum_name)
-             else:
--                m = re.match('\s*([a-zA-Z0-9_]+)', line)
-+                m = re.match(r'\s*([a-zA-Z0-9_]+)', line)
-                 if m:
-                     binding.constants.append(('i', m.group(1)))
-         elif line.startswith('#define'):
-@@ -475,7 +468,7 @@ def parse_header(header_file):
-                 if not in_struct.name in binding.structs_toskip:
-                     binding.structs.append(in_struct)
-                 else:
--                    print_('W: skipping structure %s due to overrides.xml' % in_struct.name, file=sys.stderr)
-+                    print('W: skipping structure %s due to overrides.xml' % in_struct.name, file=sys.stderr)
-                 in_struct = None
-             elif '/*< public >*/' in line:
-                 in_struct_private = False
-@@ -489,13 +482,13 @@ def parse_header(header_file):
-                 # TODO: Add parsing of OFTYPE
-                 # Transform struct to typedef
-                 # example: "struct _LassoAssertion" -> "LassoAssertion"
--                line = re.sub('\s+struct _', ' ', line)
--                member_match = re.match('\s+(\w+)\s+(\*?\w+)', line)
-+                line = re.sub(r'\s+struct _', ' ', line)
-+                member_match = re.match(r'\s+(\w+)\s+(\*?\w+)', line)
-                 if member_match:
-                     member_type, member_name = normalise_var(member_match.group(1), member_match.group(2))
-                     field = (member_type, member_name, {})
-                     if member_type == 'void*':
--                        print_('W: skipping field %s.%s' % (in_struct.name, member_name), file=sys.stderr)
-+                        print('W: skipping field %s.%s' % (in_struct.name, member_name), file=sys.stderr)
-                     else:
-                         if is_glist(field) or is_hashtable(field):
-                             found = re.search(r' of ([^*]*)', line)
-@@ -544,13 +537,13 @@ def parse_header(header_file):
-                                 type = clean_type(type)
-                                 f.args.append(list((type, name, {})))
-                             else:
--                                print_('failed to process:', arg, 'in line:', line, file=sys.stderr)
-+                                print('failed to process:', arg, 'in line:', line, file=sys.stderr)
-                                 f.skip = True
-                         f.apply_overrides()
-                         if not f.skip:
-                             binding.functions.append(f)
-                         else:
--                            print_('W: skipping function', f, file=sys.stderr)
-+                            print('W: skipping function', f, file=sys.stderr)
- 
-         i += 1
- 
-diff --git a/bindings/overrides.xml b/bindings/overrides.xml
-index 9bb08e01..ce92fb15 100644
---- a/bindings/overrides.xml
-+++ b/bindings/overrides.xml
-@@ -23,6 +23,7 @@
-   <func name="lasso_registry_default_get_mapping" skip="true"/>
-   <!-- LassoProvider -->
-   <func name="lasso_provider_get_metadata_list" return_owner="false"/>
-+  <func name="lasso_provider_verify_saml_signature" skip="true"/>
-   <!-- LassoProfile -->
-   <func name="lasso_profile_get_server" skip="true"/>
-   <func name="lasso_profile_get_nameIdentifier"
-diff --git a/bindings/perl/glist_handling.c b/bindings/perl/glist_handling.c
-index 01deb274..f7e24ed6 100644
---- a/bindings/perl/glist_handling.c
-+++ b/bindings/perl/glist_handling.c
-@@ -70,6 +70,7 @@ xmlnode_to_pv(xmlNode *node, gboolean do_free)
- 	} else {
- 		pestring = newSVpv((char*)xmlBufferContent(buf), 0);
- 	}
-+	xmlBufferFree(buf);
- 	if (do_free) {
- 		lasso_release_xml_node(node);
- 	}
-diff --git a/bindings/perl/lang.py b/bindings/perl/lang.py
-index f412ff95..867e1b0c 100644
---- a/bindings/perl/lang.py
-+++ b/bindings/perl/lang.py
-@@ -22,20 +22,19 @@ import os
- import os.path
- import sys
- import re
--from six import print_
- from utils import *
- 
--class Output(object):
-+class Output:
-     def __init__(self, filename, indent = 4):
-         self.fd = open(filename, 'w')
-         self.indent_stack = [0]
-         self.indent_size = indent
- 
-     def pn(self, s = ''):
--        print_((' ' * self.indent_stack[-1]) + s, file=self.fd)
-+        print((' ' * self.indent_stack[-1]) + s, file=self.fd)
- 
-     def p(self, s = ''):
--        print_(s, file=self.fd, end="")
-+        print(s, file=self.fd, end="")
- 
-     def close(self):
-         self.fd.close()
-@@ -95,8 +94,8 @@ class Binding:
-         self.typemap.pn('''
- string_or_null\tT_STRING_OR_NULL
- string_non_null\tT_STRING_NON_NULL
--const gchar *\tT_PV
- gchar *\tT_PV
-+const gchar *\tT_PV
- gboolean\tT_IV
- const LassoProvider *\tT_GOBJECT_WRAPPER
- xmlNode*\tT_XMLNODE
-@@ -277,7 +276,7 @@ INCLUDE: LassoNode.xs
-             try:
-                 self.xs.pn(self.glist_type(func.return_arg))
-             except:
--                print_('failed', func.return_arg, func, file=sys.stderr)
-+                print('failed', func.return_arg, func, file=sys.stderr)
-                 raise
-         self.xs.p(name + '(')
-         arg_list = []
-@@ -376,12 +375,24 @@ INCLUDE: LassoNode.xs
-             self.xs.pn('''   OUTPUT:
-          RETVAL''')
-             cleanup.append('lasso_unref(RETVAL);')
--        elif func.return_type and is_object(func.return_type) and not is_int(func.return_type, self.binding_data) and func.return_owner:
--            cleanup.append('lasso_unref(RETVAL);')
-         elif is_rc(func.return_arg):
-             if name == 'lasso_check_version':
-                 cleanup.append('if (RETVAL != 1)')
-             cleanup.append('gperl_lasso_error(RETVAL);')
-+        elif func.return_type:
-+            if is_transfer_full(func.return_arg, default=True):
-+                if is_cstring(func.return_arg):
-+                    cleanup.append('lasso_release_string(RETVAL);')
-+                elif is_int(func.return_type, self.binding_data) or is_boolean(func.return_type):
-+                    pass
-+                elif is_xml_node(func.return_arg):
-+                    pass
-+                elif is_glist(func.return_arg):
-+                    pass
-+                elif is_object(func.return_arg):
-+                    cleanup.append('lasso_unref(RETVAL);')
-+                else:
-+                    raise Exception('Unsupported caller owned return type %s' % ((repr(func.return_arg), func),))
-         # Output cleanup code
-         if cleanup:
-             self.xs.pn('  CLEANUP:')
-@@ -448,7 +459,7 @@ INCLUDE: LassoNode.xs
-                 kind = "objects"
-             else:
-                 kind = "strings"
--            self.xs.pn('''
-+            self.xs.pn(r'''
- HV*
- %(field)s(%(clss)s* obj, ...)
-     PROTOTYPE:
-@@ -587,12 +598,12 @@ HV*
-                 self.generate_xs_function(func, prefix = prefix)
-             for member in struct.members:
-                 if arg_type(member) ==  'void*':
--                    print_('Skipping %s' % member)
-+                    print('Skipping %s' % member)
-                     continue
-                 try:
-                     self.generate_xs_getter_setter(struct, member)
-                 except:
--                    print_('failed', struct, member)
-+                    print('failed', struct, member)
-                     raise
- 
-     def generate_wrapper(self):
-diff --git a/bindings/php5/php_code.py b/bindings/php5/php_code.py
-index 7e94d16e..6794465c 100644
---- a/bindings/php5/php_code.py
-+++ b/bindings/php5/php_code.py
-@@ -20,7 +20,6 @@
- 
- import re
- import sys
--import six
- 
- from utils import *
- 
-@@ -40,7 +39,7 @@ class PhpCode:
-         self.generate_footer()
- 
-     def generate_header(self):
--        six.print_('''\
-+        print('''\
- <?php
- 
- /* this file has been generated automatically; do not edit */
-@@ -108,27 +107,27 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-         else:
-             inheritence = ' extends LassoObject'
- 
--        six.print_('/**', file=self.fd)
--        six.print_(' * @package Lasso', file=self.fd)
--        six.print_(' */', file=self.fd)
--        six.print_('class %(class_name)s%(inheritence)s {' % locals(), file=self.fd)
-+        print('/**', file=self.fd)
-+        print(' * @package Lasso', file=self.fd)
-+        print(' */', file=self.fd)
-+        print('class %(class_name)s%(inheritence)s {' % locals(), file=self.fd)
- 
-         if klass.members or klass.methods:
-             self.generate_constructors(klass)
-             self.generate_getters_and_setters(klass)
-             self.generate_methods(klass)
- 
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-         # Add a special class to get an object instance without initialising
--        six.print_('/**', file=self.fd)
--        six.print_(' * @package Lasso', file=self.fd)
--        six.print_(' */', file=self.fd)
--        six.print_('class %(class_name)sNoInit extends %(class_name)s {' % locals(), file=self.fd)
--        six.print_('    public function __construct() {}', file=self.fd)
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('/**', file=self.fd)
-+        print(' * @package Lasso', file=self.fd)
-+        print(' */', file=self.fd)
-+        print('class %(class_name)sNoInit extends %(class_name)s {' % locals(), file=self.fd)
-+        print('    public function __construct() {}', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_constructors(self, klass):
-         method_prefix = format_as_underscored(klass.name) + '_'
-@@ -153,13 +152,13 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                 c_args = ', '.join(c_args)
-                 # XXX: could check $this->_cptr->typename to see if it got the
-                 # right class type
--                six.print_('    public $_cptr = null;', file=self.fd)
--                six.print_('', file=self.fd)
--                six.print_('    public function __construct(%s) {' % php_args, file=self.fd)
--                six.print_('        $this->_cptr = %s(%s);' % (m.name, c_args), file=self.fd)
--                six.print_('        if (is_null($this->_cptr)) { throw new Exception("Constructor for ', klass.name, ' failed "); }', file=self.fd)
--                six.print_('    }', file=self.fd)
--                six.print_('', file=self.fd)
-+                print('    public $_cptr = null;', file=self.fd)
-+                print('', file=self.fd)
-+                print('    public function __construct(%s) {' % php_args, file=self.fd)
-+                print('        $this->_cptr = %s(%s);' % (m.name, c_args), file=self.fd)
-+                print('        if (is_null($this->_cptr)) { throw new Exception("Constructor for ', klass.name, ' failed "); }', file=self.fd)
-+                print('    }', file=self.fd)
-+                print('', file=self.fd)
- 
-             elif name.startswith(method_prefix) and m.args \
-                     and clean_type(unconstify(m.args[0][0])) != klass.name:
-@@ -186,10 +185,10 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                         c_args.append('$%s' % arg_name)
-                 php_args = ', '.join(php_args)
-                 c_args = ', '.join(c_args)
--                six.print_('    public static function %s(%s) {' % (php_name, php_args), file=self.fd)
--                six.print_('        return cptrToPhp(%s(%s));' % (m.name, c_args), file=self.fd)
--                six.print_('    }', file=self.fd)
--                six.print_('', file=self.fd)
-+                print('    public static function %s(%s) {' % (php_name, php_args), file=self.fd)
-+                print('        return cptrToPhp(%s(%s));' % (m.name, c_args), file=self.fd)
-+                print('    }', file=self.fd)
-+                print('', file=self.fd)
- 
- 
- 
-@@ -201,50 +200,50 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-             'class': c.name
-         }
- 
--        six.print_('''\
-+        print('''\
-     /**
-     * @return  %(docstring)s
-     */
-     protected function get_%(name)s() {''' % d, file=self.fd)
--        six.print_('        $t = %(class)s_%(name)s_get($this->_cptr);' % d, file=self.fd)
-+        print('        $t = %(class)s_%(name)s_get($this->_cptr);' % d, file=self.fd)
-         if self.is_object(m):
--            six.print_('        $t = cptrToPhp($t);', file=self.fd)
-+            print('        $t = cptrToPhp($t);', file=self.fd)
-         elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)):
--                six.print_('        foreach ($t as $key => $item) {', file=self.fd)
--                six.print_('            $t[$key] = cptrToPhp($item);', file=self.fd)
--                six.print_('        }', file=self.fd)
-+                print('        foreach ($t as $key => $item) {', file=self.fd)
-+                print('            $t[$key] = cptrToPhp($item);', file=self.fd)
-+                print('        }', file=self.fd)
-         elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \
-                 or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \
-                 or is_boolean(m) or is_cstring(m) or is_xml_node(m):
-             pass
-         else:
-             raise Exception('Cannot generate a Php getter %s.%s' % (c,m))
--        six.print_('        return $t;', file=self.fd)
--        six.print_('    }', file=self.fd)
-+        print('        return $t;', file=self.fd)
-+        print('    }', file=self.fd)
- 
-     def generate_setter(self, c, m):
-         d = { 'type': arg_type(m), 'name': format_as_camelcase(arg_name(m)),
-                 'docstring': self.get_docstring_return_type(arg_type(m)), 'class': c.name }
--        six.print_('    protected function set_%(name)s($value) {' % d, file=self.fd)
-+        print('    protected function set_%(name)s($value) {' % d, file=self.fd)
-         if self.is_object(m):
--            six.print_('        $value = $value->_cptr;', file=self.fd)
-+            print('        $value = $value->_cptr;', file=self.fd)
-         elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)):
--            six.print_('        $array = array();', file=self.fd)
--            six.print_('        if (!is_null($value)) {', file=self.fd)
--            six.print_('            foreach ($value as $key => $item) {', file=self.fd)
--            six.print_('                $array[$key] = $item->_cptr;', file=self.fd)
--            six.print_('            }', file=self.fd)
--            six.print_('        }', file=self.fd)
--            six.print_('        $value = $array;', file=self.fd)
-+            print('        $array = array();', file=self.fd)
-+            print('        if (!is_null($value)) {', file=self.fd)
-+            print('            foreach ($value as $key => $item) {', file=self.fd)
-+            print('                $array[$key] = $item->_cptr;', file=self.fd)
-+            print('            }', file=self.fd)
-+            print('        }', file=self.fd)
-+            print('        $value = $array;', file=self.fd)
-         elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \
-                 or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \
-                 or is_boolean(m) or is_cstring(m) or is_xml_node(m):
-             pass
-         else:
-             raise Exception('Cannot generate a Php setter %s.%s' % (c,m))
--        six.print_('        %(class)s_%(name)s_set($this->_cptr, $value);' % d, file=self.fd)
--        six.print_('    }', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('        %(class)s_%(name)s_set($this->_cptr, $value);' % d, file=self.fd)
-+        print('    }', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_getters_and_setters(self, klass):
-         for m in klass.members:
-@@ -272,27 +271,27 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-             mname = re.match(r'lasso_.*_get_(\w+)', meth_name).group(1)
-             mname = format_as_camelcase(mname)
- 
--            six.print_('    /**', file=self.fd)
--            six.print_('     * @return %s' % self.get_docstring_return_type(m.return_type), file=self.fd)
--            six.print_('     */', file=self.fd)
--            six.print_('    protected function get_%s() {' % mname, file=self.fd)
-+            print('    /**', file=self.fd)
-+            print('     * @return %s' % self.get_docstring_return_type(m.return_type), file=self.fd)
-+            print('     */', file=self.fd)
-+            print('    protected function get_%s() {' % mname, file=self.fd)
-             if self.is_object(m.return_type):
--                six.print_('        $cptr = %s($this->_cptr);' % meth_name, file=self.fd)
--                six.print_('        if (! is_null($cptr)) {', file=self.fd)
--                six.print_('            return cptrToPhp($cptr);', file=self.fd)
--                six.print_('        }', file=self.fd)
--                six.print_('        return null;', file=self.fd)
-+                print('        $cptr = %s($this->_cptr);' % meth_name, file=self.fd)
-+                print('        if (! is_null($cptr)) {', file=self.fd)
-+                print('            return cptrToPhp($cptr);', file=self.fd)
-+                print('        }', file=self.fd)
-+                print('        return null;', file=self.fd)
-             else:
--                six.print_('        return %s($this->_cptr);' % meth_name, file=self.fd)
--            six.print_('    }', file=self.fd)
-+                print('        return %s($this->_cptr);' % meth_name, file=self.fd)
-+            print('    }', file=self.fd)
-             if setter:
--                six.print_('    protected function set_%s($value) {' % mname, file=self.fd)
-+                print('    protected function set_%s($value) {' % mname, file=self.fd)
-                 if self.is_object(m.return_type):
--                    six.print_('        %s($this->_cptr, $value->_cptr);' % setter.name, file=self.fd)
-+                    print('        %s($this->_cptr, $value->_cptr);' % setter.name, file=self.fd)
-                 else:
--                    six.print_('        %s($this->_cptr, $value);' % setter.name, file=self.fd)
--                six.print_('    }', file=self.fd)
--            six.print_('', file=self.fd)
-+                    print('        %s($this->_cptr, $value);' % setter.name, file=self.fd)
-+                print('    }', file=self.fd)
-+            print('', file=self.fd)
- 
-         # second pass on methods, real methods
-         method_prefix = format_as_underscored(klass.name) + '_'
-@@ -301,7 +300,7 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                     m.name.endswith('_new_full'):
-                 continue
-             if not m.name.startswith(method_prefix):
--                six.print_('W:', m.name, 'vs', method_prefix, file=sys.stderr)
-+                print('W:', m.name, 'vs', method_prefix, file=sys.stderr)
-                 continue
- 
-             if m.rename:
-@@ -327,7 +326,7 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                         elif defval.startswith('b:'): # boolean
-                             php_args.append('%s = %s' % (arg_name, defval[2:]))
-                         else:
--                            six.print_("E: don't know what to do with %s" % defval, file=sys.stderr)
-+                            print("E: don't know what to do with %s" % defval, file=sys.stderr)
-                             sys.exit(1)
-                     else:
-                         php_args.append('%s = null' % arg_name)
-@@ -357,26 +356,26 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                 c_args = ''
- 
-             if m.docstring:
--                six.print_(self.generate_docstring(m, mname, 4), file=self.fd)
--            six.print_('    public function %s(%s) {' % (
-+                print(self.generate_docstring(m, mname, 4), file=self.fd)
-+            print('    public function %s(%s) {' % (
-                     format_underscore_as_camelcase(mname), php_args), file=self.fd)
-             if m.return_type == 'void':
--                six.print_('        %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-+                print('        %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-             elif is_rc(m.return_type):
--                six.print_('        $rc = %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
--                six.print_('        if ($rc == 0) {', file=self.fd)
--                six.print_('            return 0;', file=self.fd)
--                six.print_('        } else if ($rc > 0) {', file=self.fd) # recoverable error
--                six.print_('            return $rc;', file=self.fd)
--                six.print_('        } else if ($rc < 0) {', file=self.fd) # unrecoverable error
--                six.print_('            LassoError::throw_on_rc($rc);', file=self.fd)
--                six.print_('        }', file=self.fd)
-+                print('        $rc = %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-+                print('        if ($rc == 0) {', file=self.fd)
-+                print('            return 0;', file=self.fd)
-+                print('        } else if ($rc > 0) {', file=self.fd) # recoverable error
-+                print('            return $rc;', file=self.fd)
-+                print('        } else if ($rc < 0) {', file=self.fd) # unrecoverable error
-+                print('            LassoError::throw_on_rc($rc);', file=self.fd)
-+                print('        }', file=self.fd)
-             else:
--                six.print_('        return %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
--            six.print_('    }', file=self.fd)
--            six.print_('', file=self.fd)
-+                print('        return %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-+            print('    }', file=self.fd)
-+            print('', file=self.fd)
- 
--        six.print_('', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_docstring(self, func, method_name, indent):
-         docstring = func.docstring.orig_docstring
-@@ -393,7 +392,7 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-             elif type == '%': # %TRUE, %FALSE
-                 if var in ('TRUE', 'FALSE'):
-                     return var
--                six.print_('W: unknown docstring thingie \'%s\' in \'%s\'' % (s.group(1), func.docstring.orig_docstring),
-+                print('W: unknown docstring thingie \'%s\' in \'%s\'' % (s.group(1), func.docstring.orig_docstring),
-                            file=sys.stderr)
-             elif type == '@':
-                 if var == first_arg_name:
-@@ -437,7 +436,7 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-             cat = exc_cat.attrib.get('name')
-             done_cats.append(cat)
-             parent_cat = exc_cat.attrib.get('parent', '')
--            six.print_('''\
-+            print('''\
- /**
-  * @package Lasso
-  */
-@@ -462,7 +461,7 @@ class Lasso%sError extends Lasso%sError {}
-                 else:
-                     parent_cat = ''
- 
--                six.print_('''\
-+                print('''\
- /**
-  * @package Lasso
-  */
-@@ -470,7 +469,7 @@ class Lasso%sError extends Lasso%sError {}
- ''' % (cat, parent_cat), file=self.fd)
- 
-             if detail not in exceptions_dict:
--                six.print_('''\
-+                print('''\
- /**
-  * @package Lasso
-  */
-@@ -480,7 +479,7 @@ class Lasso%sError extends Lasso%sError {
- ''' % (detail, cat, c[1]), file=self.fd)
-                 exceptions_dict[detail] = c[1]
- 
--        six.print_('''\
-+        print('''\
- /**
-  * @package Lasso
-  */
-@@ -488,9 +487,9 @@ class LassoError extends Exception {
-     private static $exceptions_dict = array(''', file=self.fd)
- 
-         for k, v in exceptions_dict.items():
--            six.print_('        %s => "Lasso%sError",' % (v, k), file=self.fd)
-+            print('        %s => "Lasso%sError",' % (v, k), file=self.fd)
- 
--        six.print_('''\
-+        print('''\
-     );
- 
-     public static function throw_on_rc($rc) {
-@@ -504,6 +503,6 @@ class LassoError extends Exception {
- ''', file=self.fd)
- 
-     def generate_footer(self):
--        six.print_('''\
-+        print('''\
- ?>''', file=self.fd)
- 
-diff --git a/bindings/php5/wrapper_header.py b/bindings/php5/wrapper_header.py
-index 5236571a..22908945 100644
---- a/bindings/php5/wrapper_header.py
-+++ b/bindings/php5/wrapper_header.py
-@@ -17,7 +17,6 @@
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, see <http://www.gnu.org/licenses/>.
--import six
- 
- class WrapperHeader:
-     def __init__(self, binding_data, fd, functions_list):
-@@ -32,7 +31,7 @@ class WrapperHeader:
- 
-     def generate_header(self):
-         # FIXME: Get the current version and name
--        six.print_('''\
-+        print('''\
- /* this file has been generated automatically; do not edit */
- 
- #include "../../config.h"
-@@ -51,11 +50,11 @@ PHP_MSHUTDOWN_FUNCTION(lasso);
- 
-     def generate_functions_list(self):
-         for m in self.functions_list:
--            six.print_('PHP_FUNCTION(%s);' % m, file=self.fd)
--        six.print_('', file=self.fd)
-+            print('PHP_FUNCTION(%s);' % m, file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_footer(self):
--        six.print_('''\
-+        print('''\
- extern zend_module_entry lasso_module_entry;
- #define phpext_lasso_ptr &lasso_module_entry
- 
-diff --git a/bindings/php5/wrapper_source.py b/bindings/php5/wrapper_source.py
-index d84b6fdb..5ddd90e5 100644
---- a/bindings/php5/wrapper_source.py
-+++ b/bindings/php5/wrapper_source.py
-@@ -20,7 +20,6 @@
- 
- import sys
- import os
--import six
- 
- from utils import *
- 
-@@ -53,17 +52,17 @@ class WrapperSource:
-         self.functions_list.append('lasso_init')
-         self.functions_list.append('lasso_shutdown')
- 
--        six.print_('''\
-+        print('''\
- /* this file has been generated automatically; do not edit */
- ''', file=self.fd)
- 
--        six.print_(open(os.path.join(self.src_dir,'wrapper_source_top.c')).read(), file=self.fd)
-+        print(open(os.path.join(self.src_dir,'wrapper_source_top.c')).read(), file=self.fd)
- 
-         for h in self.binding_data.headers:
--            six.print_('#include <%s>' % h, file=self.fd)
--        six.print_('', file=self.fd)
-+            print('#include <%s>' % h, file=self.fd)
-+        print('', file=self.fd)
- 
--        six.print_('''\
-+        print('''\
- PHP_MINIT_FUNCTION(lasso)
- {
-     le_lasso_server = zend_register_list_destructors_ex(php_gobject_generic_destructor, NULL, PHP_LASSO_SERVER_RES_NAME, module_number);
-@@ -71,25 +70,25 @@ PHP_MINIT_FUNCTION(lasso)
- ''', file=self.fd)
- 
-     def generate_constants(self):
--        six.print_('    /* Constants (both enums and defines) */', file=self.fd)
-+        print('    /* Constants (both enums and defines) */', file=self.fd)
-         for c in self.binding_data.constants:
-             if c[0] == 'i':
--                six.print_('    REGISTER_LONG_CONSTANT("%s", %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-+                print('    REGISTER_LONG_CONSTANT("%s", %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-             elif c[0] == 's':
--                six.print_('    REGISTER_STRING_CONSTANT("%s", (char*) %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-+                print('    REGISTER_STRING_CONSTANT("%s", (char*) %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-             elif c[0] == 'b':
--                six.print_('''\
-+                print('''\
- #ifdef %s
-     REGISTER_LONG_CONSTANT("%s", 1, CONST_CS|CONST_PERSISTENT);
- #else
-     REGISTER_LONG_CONSTANT("%s", 0, CONST_CS|CONST_PERSISTENT);
- #endif''' % (c[1], c[1], c[1]), file=self.fd)
-             else:
--                six.print_('E: unknown constant type: %r' % c[0], file=sys.stderr)
--        six.print_('', file=self.fd)
-+                print('E: unknown constant type: %r' % c[0], file=sys.stderr)
-+        print('', file=self.fd)
- 
-     def generate_middle(self):
--        six.print_('''\
-+        print('''\
-     return SUCCESS;
- }
- 
-@@ -107,21 +106,21 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         # first we free the previous value
-         p = (zval_name, c_variable)
-         q = { 'zval_name' : zval_name, 'c_variable' : c_variable }
--        six.print_('    zval_dtor(%s);' % zval_name, file=self.fd)
-+        print('    zval_dtor(%s);' % zval_name, file=self.fd)
-         if is_pointer(type):
--            six.print_('    if (! %s) {' % c_variable, file=self.fd)
--            six.print_('       ZVAL_NULL(%s);' % zval_name, file=self.fd)
--            six.print_('    } else {', file=self.fd)
-+            print('    if (! %s) {' % c_variable, file=self.fd)
-+            print('       ZVAL_NULL(%s);' % zval_name, file=self.fd)
-+            print('    } else {', file=self.fd)
-         if is_int(type, self.binding_data):
--            six.print_('    ZVAL_LONG(%s, %s);' % p, file=self.fd)
-+            print('    ZVAL_LONG(%s, %s);' % p, file=self.fd)
-         elif is_boolean(type):
--            six.print_('    ZVAL_BOOL(%s, %s);' % p, file=self.fd)
-+            print('    ZVAL_BOOL(%s, %s);' % p, file=self.fd)
-         elif is_cstring(type):
--            six.print_('    ZVAL_STRING(%s, (char*)%s, 1);' % p, file=self.fd)
-+            print('    ZVAL_STRING(%s, (char*)%s, 1);' % p, file=self.fd)
-             if free and not is_const(type):
--                six.print_('g_free(%s)' % c_variable, file=self.fd)
-+                print('g_free(%s)' % c_variable, file=self.fd)
-         elif arg_type(type) == 'xmlNode*':
--            six.print_('''\
-+            print('''\
-     {
-         char* xmlString = get_string_from_xml_node(%(c_variable)s);
-         if (xmlString) {
-@@ -146,11 +145,11 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-                 free_function = 'g_list_free(%(c_variable)s);'
-             else:
-                 raise Exception('unknown element-type: ' + repr(type))
--            six.print_('     %s((GList*)%s, &%s);' % (function, c_variable, zval_name), file=self.fd)
-+            print('     %s((GList*)%s, &%s);' % (function, c_variable, zval_name), file=self.fd)
-             if free:
--                six.print_('   ', free_function % q, file=self.fd)
-+                print('   ', free_function % q, file=self.fd)
-         elif is_object(type):
--            six.print_('''\
-+            print('''\
-     if (G_IS_OBJECT(%(c_variable)s)) {
-         PhpGObjectPtr *obj = PhpGObjectPtr_New(G_OBJECT(%(c_variable)s));
-         ZEND_REGISTER_RESOURCE(%(zval_name)s, obj, le_lasso_server);
-@@ -158,7 +157,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         ZVAL_NULL(%(zval_name)s);
-     }''' % q, file=self.fd)
-             if free:
--                six.print_('''\
-+                print('''\
-     if (%(c_variable)s) {
-         g_object_unref(%(c_variable)s); // If constructor ref is off by one'
-     }''' % q, file=self.fd)
-@@ -166,7 +165,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         else:
-             raise Exception('unknown type: ' + repr(type) + unconstify(arg_type(type)))
-         if is_pointer(type):
--            six.print_('    }', file=self.fd)
-+            print('    }', file=self.fd)
- 
- 
- 
-@@ -175,20 +174,20 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-             return
- 
-         if is_boolean(arg):
--            six.print_('    RETVAL_BOOL(return_c_value);', file=self.fd)
-+            print('    RETVAL_BOOL(return_c_value);', file=self.fd)
-         elif is_int(arg, self.binding_data):
--            six.print_('    RETVAL_LONG(return_c_value);', file=self.fd)
-+            print('    RETVAL_LONG(return_c_value);', file=self.fd)
-         elif is_cstring(arg):
--            six.print_('''\
-+            print('''\
-     if (return_c_value) {
-         RETVAL_STRING((char*)return_c_value, 1);
-     } else {
-         RETVAL_NULL();
-     }''', file=self.fd)
-             if free:
--                six.print_('    free(return_c_value);', file=self.fd)
-+                print('    free(return_c_value);', file=self.fd)
-         elif is_xml_node(arg):
--            six.print_('''\
-+            print('''\
-     {
-         char* xmlString = get_string_from_xml_node(return_c_value);
-         if (xmlString) {
-@@ -199,44 +198,44 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-     }
- ''', file=self.fd)
-             if free:
--                six.print_('    lasso_release_xml_node(return_c_value);', file=self.fd)
-+                print('    lasso_release_xml_node(return_c_value);', file=self.fd)
-         elif is_glist(arg):
-             el_type = element_type(arg)
-             if is_cstring(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_list_of_strings((GList*)return_c_value, &return_value);
- ''', file=self.fd)
-                 if free:
--                    six.print_('    lasso_release_list_of_strings(return_c_value);', file=self.fd)
-+                    print('    lasso_release_list_of_strings(return_c_value);', file=self.fd)
-             elif is_xml_node(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_list_of_xmlnodes((GList*)return_c_value, &return_value);
- ''', file=self.fd)
-                 if free or is_transfer_full(arg):
--                    six.print_('    lasso_release_list_of_xml_node(return_c_value);', file=self.fd)
-+                    print('    lasso_release_list_of_xml_node(return_c_value);', file=self.fd)
-             elif is_object(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_list_of_objects((GList*)return_c_value, &return_value);
- ''', file=self.fd)
-                 if free:
--                    six.print_('    lasso_release_list_of_gobjects(return_c_value);', file=self.fd)
-+                    print('    lasso_release_list_of_gobjects(return_c_value);', file=self.fd)
-             else:
-                 raise Exception('cannot return value for %s' % (arg,))
-         elif is_hashtable(arg):
-             el_type = element_type(arg)
-             if is_object(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_hashtable_of_objects(return_c_value, &return_value);
- ''', file=self.fd)
-             else:
-                 if not is_cstring(arg):
--                    six.print_('W: %s has no explicit string annotation' % (arg,),
-+                    print('W: %s has no explicit string annotation' % (arg,),
-                                file=sys.stderr)
--                six.print_('''\
-+                print('''\
-     set_array_from_hashtable_of_strings(return_c_value, &return_value);
- ''', file=self.fd)
-         elif is_object(arg):
--            six.print_('''\
-+            print('''\
-     if (return_c_value) {
-         PhpGObjectPtr *self;
-         self = PhpGObjectPtr_New(G_OBJECT(return_c_value));
-@@ -245,7 +244,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         RETVAL_NULL();
-     }''', file=self.fd)
-             if free:
--                six.print_('    lasso_release_gobject(return_c_value);', file=self.fd)
-+                print('    lasso_release_gobject(return_c_value);', file=self.fd)
-         else:
-             raise Exception('cannot return value for %s' % (arg,))
- 
-@@ -257,61 +256,61 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         else:
-             name = m.name
-         self.functions_list.append(name)
--        six.print_('''PHP_FUNCTION(%s)
-+        print('''PHP_FUNCTION(%s)
- {''' % name, file=self.fd)
-         parse_tuple_format = []
-         parse_tuple_args = []
-         for arg in m.args:
-             if is_out(arg):
--                six.print_('   zval *php_out_%s = NULL;' % arg_name(arg), file=self.fd)
--                six.print_('   %s %s;' % (var_type(arg), arg_name(arg)), file=self.fd)
-+                print('   zval *php_out_%s = NULL;' % arg_name(arg), file=self.fd)
-+                print('   %s %s;' % (var_type(arg), arg_name(arg)), file=self.fd)
-                 parse_tuple_format.append('z!')
-                 parse_tuple_args.append('&php_out_%s' % arg_name(arg))
-             elif is_cstring(arg):
-                 parse_tuple_format.append('s!')
-                 parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg)))
--                six.print_('    %s %s = NULL;' % ('char*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_len = 0;' % ('int', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % ('char*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_len = 0;' % ('int', arg_name(arg)), file=self.fd)
-             elif is_int(arg, self.binding_data) or is_boolean(arg):
-                 parse_tuple_format.append('l')
-                 parse_tuple_args.append('&%s' % arg_name(arg))
--                six.print_('    %s %s;' % ('long', arg_name(arg)), file=self.fd)
-+                print('    %s %s;' % ('long', arg_name(arg)), file=self.fd)
-             elif is_time_t_pointer(arg):
-                 parse_tuple_format.append('l')
-                 parse_tuple_args.append('&%s' % (arg_name(arg),))
--                six.print_('    time_t %s = 0;' % (arg_name(arg),), file=self.fd)
-+                print('    time_t %s = 0;' % (arg_name(arg),), file=self.fd)
-             elif is_xml_node(arg):
-                 parse_tuple_format.append('s!')
-                 parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg)))
--                six.print_('    %s %s = NULL;' % ('xmlNode*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_str = NULL;'  % ('char*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_len = 0;' % ('int', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % ('xmlNode*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_str = NULL;'  % ('char*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_len = 0;' % ('int', arg_name(arg)), file=self.fd)
-             elif is_glist(arg):
-                 parse_tuple_format.append('a!')
-                 parse_tuple_args.append('&zval_%s' % arg_name(arg))
--                six.print_('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s = NULL;' % ('GList*', arg_name(arg)), file=self.fd)
-+                print('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % ('GList*', arg_name(arg)), file=self.fd)
-             elif is_object(arg):
-                 parse_tuple_format.append('r')
-                 parse_tuple_args.append('&zval_%s' % arg_name(arg))
--                six.print_('    %s %s = NULL;' % (arg_type(arg), arg_name(arg)), file=self.fd)
--                six.print_('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
--                six.print_('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % (arg_type(arg), arg_name(arg)), file=self.fd)
-+                print('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
-+                print('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', arg_name(arg)), file=self.fd)
-             else:
-                 raise Exception('Unsupported type %s %s' % (arg, m))
- 
-         if m.return_type:
--            six.print_('    %s return_c_value;' % m.return_type, file=self.fd)
-+            print('    %s return_c_value;' % m.return_type, file=self.fd)
-         if m.return_type is not None and self.is_object(m.return_arg):
--            six.print_('    G_GNUC_UNUSED PhpGObjectPtr *self;', file=self.fd)
--        six.print_('', file=self.fd)
-+            print('    G_GNUC_UNUSED PhpGObjectPtr *self;', file=self.fd)
-+        print('', file=self.fd)
- 
-         parse_tuple_args = ', '.join(parse_tuple_args)
-         if parse_tuple_args:
-             parse_tuple_args = ', ' + parse_tuple_args
- 
--        six.print_('''\
-+        print('''\
-     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "%s"%s) == FAILURE) {
-         RETURN_FALSE;
-     }
-@@ -321,22 +320,22 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-             if is_out(arg):
-                 continue
-             elif is_xml_node(arg):
--                six.print_('''\
-+                print('''\
-         %(name)s = get_xml_node_from_string(%(name)s_str);''' % {'name': arg[1]}, file=self.fd)
-             elif f.startswith('s'):
--                six.print_('''\
-+                print('''\
-         %(name)s = %(name)s_str;''' % {'name': arg[1]}, file=self.fd)
-             elif f.startswith('r'):
--                six.print_('    ZEND_FETCH_RESOURCE(cvt_%s, PhpGObjectPtr *, &zval_%s, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);' % (arg[1], arg[1]), file=self.fd)
--                six.print_('    %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=self.fd)
-+                print('    ZEND_FETCH_RESOURCE(cvt_%s, PhpGObjectPtr *, &zval_%s, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);' % (arg[1], arg[1]), file=self.fd)
-+                print('    %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=self.fd)
-             elif f.startswith('a'):
-                 el_type = element_type(arg)
-                 if is_cstring(el_type):
--                    six.print_('    %(name)s = get_list_from_array_of_strings(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-+                    print('    %(name)s = get_list_from_array_of_strings(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-                 elif is_object(el_type):
--                    six.print_('    %(name)s = get_list_from_array_of_objects(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-+                    print('    %(name)s = get_list_from_array_of_objects(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-                 else:
--                    six.print_('E: In %(function)s arg %(name)s is of type GList<%(elem)s>' % { 'function': m.name, 'name': arg[1], 'elem': el_type }, file=sys.stderr)
-+                    print('E: In %(function)s arg %(name)s is of type GList<%(elem)s>' % { 'function': m.name, 'name': arg[1], 'elem': el_type }, file=sys.stderr)
-             elif f == 'l':
-                 pass
-             else:
-@@ -344,17 +343,17 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
- 
- 
-         if m.return_type is not None:
--            six.print_('    return_c_value = ', file=self.fd)
-+            print('    return_c_value = ', file=self.fd)
-             if 'new' in m.name:
--                six.print_('(%s)' % m.return_type, file=self.fd)
-+                print('(%s)' % m.return_type, file=self.fd)
-         else:
--            six.print_('   ', file=self.fd)
-+            print('   ', file=self.fd)
-         def special(x):
-             if is_time_t_pointer(x):
-                 return '%(name)s ? &%(name)s : NULL' % { 'name': arg_name(x) }
-             else:
-                 return ref_name(x)
--        six.print_('%s(%s);' % (m.name, ', '.join([special(x) for x in m.args])), file=self.fd)
-+        print('%s(%s);' % (m.name, ', '.join([special(x) for x in m.args])), file=self.fd)
-         # Free the converted arguments
- 
-         for f, arg in zip(parse_tuple_format, m.args):
-@@ -365,21 +364,21 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-                 self.set_zval('php_out_%s' % argname, argname, unref_type(arg), free = free)
-                 pass
-             elif argtype == 'xmlNode*':
--                six.print_('    xmlFree(%s);' % argname, file=self.fd)
-+                print('    xmlFree(%s);' % argname, file=self.fd)
-             elif f.startswith('a'):
-                 el_type = element_type(arg)
-                 if is_cstring(el_type):
--                    six.print_('    if (%(name)s) {' % { 'name': arg[1] }, file=self.fd)
--                    six.print_('        free_glist(&%(name)s,(GFunc)free);' % { 'name': arg[1] }, file=self.fd)
--                    six.print_('    }', file=self.fd)
-+                    print('    if (%(name)s) {' % { 'name': arg[1] }, file=self.fd)
-+                    print('        free_glist(&%(name)s,(GFunc)free);' % { 'name': arg[1] }, file=self.fd)
-+                    print('    }', file=self.fd)
- 
-         try:
-             self.return_value(m.return_arg, is_transfer_full(m.return_arg, default=True))
-         except:
-             raise Exception('Cannot return value for function %s' % m)
- 
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_members(self, c):
-         for m in c.members:
-@@ -392,16 +391,16 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         type = arg_type(m)
- 
-         function_name = '%s_%s_get' % (klassname, format_as_camelcase(name))
--        six.print_('''PHP_FUNCTION(%s)
-+        print('''PHP_FUNCTION(%s)
- {''' % function_name, file=self.fd)
-         self.functions_list.append(function_name)
- 
--        six.print_('    %s return_c_value;' % type, file=self.fd)
--        six.print_('    %s* this;' % klassname, file=self.fd)
--        six.print_('    zval* zval_this;', file=self.fd)
--        six.print_('    PhpGObjectPtr *cvt_this;', file=self.fd)
--        six.print_('', file=self.fd)
--        six.print_('''\
-+        print('    %s return_c_value;' % type, file=self.fd)
-+        print('    %s* this;' % klassname, file=self.fd)
-+        print('    zval* zval_this;', file=self.fd)
-+        print('    PhpGObjectPtr *cvt_this;', file=self.fd)
-+        print('', file=self.fd)
-+        print('''\
-     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zval_this) == FAILURE) {
-         RETURN_FALSE;
-     }
-@@ -409,23 +408,23 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-     ZEND_FETCH_RESOURCE(cvt_this, PhpGObjectPtr *, &zval_this, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);
-     this = (%s*)cvt_this->obj;
- ''' % (klassname), file=self.fd)
--        six.print_('    return_c_value = (%s)this->%s;' % (type, name), file=self.fd)
-+        print('    return_c_value = (%s)this->%s;' % (type, name), file=self.fd)
-         self.return_value(m)
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_setter(self, c, m):
-         klassname = c.name
-         name = arg_name(m)
-         type = arg_type(m)
-         function_name = '%s_%s_set' % (klassname, format_as_camelcase(name))
--        six.print_('''PHP_FUNCTION(%s)
-+        print('''PHP_FUNCTION(%s)
- {''' % function_name, file=self.fd)
-         self.functions_list.append(function_name)
- 
--        six.print_('    %s* this;' % klassname, file=self.fd)
--        six.print_('    zval* zval_this;', file=self.fd)
--        six.print_('    PhpGObjectPtr *cvt_this;', file=self.fd)
-+        print('    %s* this;' % klassname, file=self.fd)
-+        print('    zval* zval_this;', file=self.fd)
-+        print('    PhpGObjectPtr *cvt_this;', file=self.fd)
- 
-         # FIXME: This bloc should be factorised
-         parse_tuple_format = ''
-@@ -434,41 +433,41 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-             # arg_type = arg_type.replace('const ', '')
-             parse_tuple_format += 's'
-             parse_tuple_args.append('&%s_str, &%s_len' % (name, name))
--            six.print_('    %s %s_str = NULL;' % ('char*', name), file=self.fd)
--            six.print_('    %s %s_len = 0;' % ('int', name), file=self.fd)
-+            print('    %s %s_str = NULL;' % ('char*', name), file=self.fd)
-+            print('    %s %s_len = 0;' % ('int', name), file=self.fd)
-         elif is_int(m, self.binding_data) or is_boolean(m):
-             parse_tuple_format += 'l'
-             parse_tuple_args.append('&%s' % name)
--            six.print_('    %s %s;' % ('long', name), file=self.fd)
-+            print('    %s %s;' % ('long', name), file=self.fd)
-         # Must also handle lists of Objects
-         elif is_glist(m) or is_hashtable(m):
-             parse_tuple_format += 'a'
-             parse_tuple_args.append('&zval_%s' % name)
--            six.print_('    %s zval_%s;' % ('zval*', name), file=self.fd)
-+            print('    %s zval_%s;' % ('zval*', name), file=self.fd)
-         elif is_object(m):
-             parse_tuple_format += 'r'
-             parse_tuple_args.append('&zval_%s' % name)
--            six.print_('    %s zval_%s = NULL;' % ('zval*', name), file=self.fd)
--            six.print_('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', name), file=self.fd)
-+            print('    %s zval_%s = NULL;' % ('zval*', name), file=self.fd)
-+            print('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', name), file=self.fd)
-         else:
-             raise Exception('Cannot make a setter for %s.%s' % (c,m))
- 
-         if parse_tuple_args:
-             parse_tuple_arg = parse_tuple_args[0]
-         else:
--            six.print_('}', file=self.fd)
--            six.print_('', file=self.fd)
-+            print('}', file=self.fd)
-+            print('', file=self.fd)
-             return
- 
--        six.print_('', file=self.fd)
--        six.print_('''\
-+        print('', file=self.fd)
-+        print('''\
-     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r%s", &zval_this, %s) == FAILURE) {
-         return;
-     }
- ''' % (parse_tuple_format, parse_tuple_arg), file=self.fd)
- 
-         # Get 'this' object
--        six.print_('''\
-+        print('''\
-     ZEND_FETCH_RESOURCE(cvt_this, PhpGObjectPtr *, &zval_this, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);
-     this = (%s*)cvt_this->obj;
- ''' % klassname, file=self.fd)
-@@ -476,51 +475,51 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         # Set new value
-         d = { 'name': name, 'type': type }
-         if is_int(m, self.binding_data) or is_boolean(m):
--            six.print_('    this->%s = %s;' % (name, name), file=self.fd)
-+            print('    this->%s = %s;' % (name, name), file=self.fd)
-         elif is_cstring(m):
--            six.print_('    lasso_assign_string(this->%(name)s, %(name)s_str);' % d, file=self.fd)
-+            print('    lasso_assign_string(this->%(name)s, %(name)s_str);' % d, file=self.fd)
-         elif is_xml_node(m):
--            six.print_('    lasso_assign_new_xml_node(this->%(name)s, get_xml_node_from_string(%(name)s_str));' % d, file=self.fd)
-+            print('    lasso_assign_new_xml_node(this->%(name)s, get_xml_node_from_string(%(name)s_str));' % d, file=self.fd)
-         elif is_glist(m):
-             el_type = element_type(m)
-             if is_cstring(el_type):
--                six.print_('    lasso_assign_new_list_of_strings(this->%(name)s, get_list_from_array_of_strings(zval_%(name)s));' % d, file=self.fd)
-+                print('    lasso_assign_new_list_of_strings(this->%(name)s, get_list_from_array_of_strings(zval_%(name)s));' % d, file=self.fd)
-             elif is_xml_node(el_type):
--                six.print_('    lasso_assign_new_list_of_xml_node(this->%(name)s, get_list_from_array_of_xmlnodes(zval_%(name)s))' % d, file=self.fd)
-+                print('    lasso_assign_new_list_of_xml_node(this->%(name)s, get_list_from_array_of_xmlnodes(zval_%(name)s))' % d, file=self.fd)
-             elif is_object(el_type):
--                six.print_('    lasso_assign_new_list_of_gobjects(this->%(name)s, get_list_from_array_of_objects(zval_%(name)s));' % d, file=self.fd)
-+                print('    lasso_assign_new_list_of_gobjects(this->%(name)s, get_list_from_array_of_objects(zval_%(name)s));' % d, file=self.fd)
-             else:
-                 raise Exception('Cannot create C setter for %s.%s' % (c,m))
-         elif is_hashtable(m):
-             el_type = element_type(m)
--            six.print_('''\
-+            print('''\
-         {
-             GHashTable *oldhash = this->%(name)s;''' % d, file=self.fd)
-             if is_object(el_type):
--                six.print_('            this->%(name)s = get_hashtable_from_array_of_objects(zval_%(name)s);' % d, file=self.fd)
-+                print('            this->%(name)s = get_hashtable_from_array_of_objects(zval_%(name)s);' % d, file=self.fd)
-             else:
--                six.print_('            this->%(name)s = get_hashtable_from_array_of_strings(zval_%(name)s);' % d, file=self.fd)
--            six.print_('            g_hash_table_destroy(oldhash);', file=self.fd)
--            six.print_('        }', file=self.fd)
-+                print('            this->%(name)s = get_hashtable_from_array_of_strings(zval_%(name)s);' % d, file=self.fd)
-+            print('            g_hash_table_destroy(oldhash);', file=self.fd)
-+            print('        }', file=self.fd)
-         elif is_object(m):
--            six.print_('    ZEND_FETCH_RESOURCE(cvt_%(name)s, PhpGObjectPtr*, &zval_%(name)s, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);' % d, file=self.fd)
--            six.print_('    lasso_assign_gobject(this->%(name)s, cvt_%(name)s->obj);' % d, file=self.fd)
-+            print('    ZEND_FETCH_RESOURCE(cvt_%(name)s, PhpGObjectPtr*, &zval_%(name)s, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);' % d, file=self.fd)
-+            print('    lasso_assign_gobject(this->%(name)s, cvt_%(name)s->obj);' % d, file=self.fd)
- 
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_functions_list(self):
--        six.print_('''\
-+        print('''\
- static zend_function_entry lasso_functions[] = {''', file=self.fd)
-         for m in self.functions_list:
--            six.print_('    PHP_FE(%s, NULL)' % m, file=self.fd)
--        six.print_('''\
-+            print('    PHP_FE(%s, NULL)' % m, file=self.fd)
-+        print('''\
-     {NULL, NULL, NULL, 0, 0}
- };
- ''', file=self.fd)
- 
-     def generate_footer(self):
--        six.print_('''\
-+        print('''\
- zend_module_entry lasso_module_entry = {
- #if ZEND_MODULE_API_NO >= 20010901
-     STANDARD_MODULE_HEADER,
-diff --git a/bindings/php7/php_code.py b/bindings/php7/php_code.py
-index a4eaf929..3f7b1a36 100644
---- a/bindings/php7/php_code.py
-+++ b/bindings/php7/php_code.py
-@@ -20,7 +20,6 @@
- 
- import re
- import sys
--import six
- 
- from utils import *
- 
-@@ -40,7 +39,7 @@ class PhpCode:
-         self.generate_footer()
- 
-     def generate_header(self):
--        six.print_('''\
-+        print('''\
- <?php
- 
- /* this file has been generated automatically; do not edit */
-@@ -107,27 +106,27 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-         else:
-             inheritence = ' extends LassoObject'
- 
--        six.print_('/**', file=self.fd)
--        six.print_(' * @package Lasso', file=self.fd)
--        six.print_(' */', file=self.fd)
--        six.print_('class %(class_name)s%(inheritence)s {' % locals(), file=self.fd)
-+        print('/**', file=self.fd)
-+        print(' * @package Lasso', file=self.fd)
-+        print(' */', file=self.fd)
-+        print('class %(class_name)s%(inheritence)s {' % locals(), file=self.fd)
- 
-         if klass.members or klass.methods:
-             self.generate_constructors(klass)
-             self.generate_getters_and_setters(klass)
-             self.generate_methods(klass)
- 
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-         # Add a special class to get an object instance without initialising
--        six.print_('/**', file=self.fd)
--        six.print_(' * @package Lasso', file=self.fd)
--        six.print_(' */', file=self.fd)
--        six.print_('class %(class_name)sNoInit extends %(class_name)s {' % locals(), file=self.fd)
--        six.print_('    public function __construct() {}', file=self.fd)
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('/**', file=self.fd)
-+        print(' * @package Lasso', file=self.fd)
-+        print(' */', file=self.fd)
-+        print('class %(class_name)sNoInit extends %(class_name)s {' % locals(), file=self.fd)
-+        print('    public function __construct() {}', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_constructors(self, klass):
-         method_prefix = format_as_underscored(klass.name) + '_'
-@@ -152,13 +151,13 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                 c_args = ', '.join(c_args)
-                 # XXX: could check $this->_cptr->typename to see if it got the
-                 # right class type
--                six.print_('    public $_cptr = null;', file=self.fd)
--                six.print_('', file=self.fd)
--                six.print_('    public function __construct(%s) {' % php_args, file=self.fd)
--                six.print_('        $this->_cptr = %s(%s);' % (m.name, c_args), file=self.fd)
--                six.print_('        if (is_null($this->_cptr)) { throw new Exception("Constructor for ', klass.name, ' failed "); }', file=self.fd)
--                six.print_('    }', file=self.fd)
--                six.print_('', file=self.fd)
-+                print('    public $_cptr = null;', file=self.fd)
-+                print('', file=self.fd)
-+                print('    public function __construct(%s) {' % php_args, file=self.fd)
-+                print('        $this->_cptr = %s(%s);' % (m.name, c_args), file=self.fd)
-+                print('        if (is_null($this->_cptr)) { throw new Exception("Constructor for ', klass.name, ' failed "); }', file=self.fd)
-+                print('    }', file=self.fd)
-+                print('', file=self.fd)
- 
-             elif name.startswith(method_prefix) and m.args \
-                     and clean_type(unconstify(m.args[0][0])) != klass.name:
-@@ -185,10 +184,10 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                         c_args.append('$%s' % arg_name)
-                 php_args = ', '.join(php_args)
-                 c_args = ', '.join(c_args)
--                six.print_('    public static function %s(%s) {' % (php_name, php_args), file=self.fd)
--                six.print_('        return cptrToPhp(%s(%s));' % (m.name, c_args), file=self.fd)
--                six.print_('    }', file=self.fd)
--                six.print_('', file=self.fd)
-+                print('    public static function %s(%s) {' % (php_name, php_args), file=self.fd)
-+                print('        return cptrToPhp(%s(%s));' % (m.name, c_args), file=self.fd)
-+                print('    }', file=self.fd)
-+                print('', file=self.fd)
- 
- 
- 
-@@ -200,50 +199,50 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-             'class': c.name
-         }
- 
--        six.print_('''\
-+        print('''\
-     /**
-     * @return  %(docstring)s
-     */
-     protected function get_%(name)s() {''' % d, file=self.fd)
--        six.print_('        $t = %(class)s_%(name)s_get($this->_cptr);' % d, file=self.fd)
-+        print('        $t = %(class)s_%(name)s_get($this->_cptr);' % d, file=self.fd)
-         if self.is_object(m):
--            six.print_('        $t = cptrToPhp($t);', file=self.fd)
-+            print('        $t = cptrToPhp($t);', file=self.fd)
-         elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)):
--                six.print_('        foreach ($t as $key => $item) {', file=self.fd)
--                six.print_('            $t[$key] = cptrToPhp($item);', file=self.fd)
--                six.print_('        }', file=self.fd)
-+                print('        foreach ($t as $key => $item) {', file=self.fd)
-+                print('            $t[$key] = cptrToPhp($item);', file=self.fd)
-+                print('        }', file=self.fd)
-         elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \
-                 or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \
-                 or is_boolean(m) or is_cstring(m) or is_xml_node(m):
-             pass
-         else:
-             raise Exception('Cannot generate a Php getter %s.%s' % (c,m))
--        six.print_('        return $t;', file=self.fd)
--        six.print_('    }', file=self.fd)
-+        print('        return $t;', file=self.fd)
-+        print('    }', file=self.fd)
- 
-     def generate_setter(self, c, m):
-         d = { 'type': arg_type(m), 'name': format_as_camelcase(arg_name(m)),
-                 'docstring': self.get_docstring_return_type(arg_type(m)), 'class': c.name }
--        six.print_('    protected function set_%(name)s($value) {' % d, file=self.fd)
-+        print('    protected function set_%(name)s($value) {' % d, file=self.fd)
-         if self.is_object(m):
--            six.print_('        $value = $value->_cptr;', file=self.fd)
-+            print('        $value = $value->_cptr;', file=self.fd)
-         elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)):
--            six.print_('        $array = array();', file=self.fd)
--            six.print_('        if (!is_null($value)) {', file=self.fd)
--            six.print_('            foreach ($value as $key => $item) {', file=self.fd)
--            six.print_('                $array[$key] = $item->_cptr;', file=self.fd)
--            six.print_('            }', file=self.fd)
--            six.print_('        }', file=self.fd)
--            six.print_('        $value = $array;', file=self.fd)
-+            print('        $array = array();', file=self.fd)
-+            print('        if (!is_null($value)) {', file=self.fd)
-+            print('            foreach ($value as $key => $item) {', file=self.fd)
-+            print('                $array[$key] = $item->_cptr;', file=self.fd)
-+            print('            }', file=self.fd)
-+            print('        }', file=self.fd)
-+            print('        $value = $array;', file=self.fd)
-         elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \
-                 or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \
-                 or is_boolean(m) or is_cstring(m) or is_xml_node(m):
-             pass
-         else:
-             raise Exception('Cannot generate a Php setter %s.%s' % (c,m))
--        six.print_('        %(class)s_%(name)s_set($this->_cptr, $value);' % d, file=self.fd)
--        six.print_('    }', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('        %(class)s_%(name)s_set($this->_cptr, $value);' % d, file=self.fd)
-+        print('    }', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_getters_and_setters(self, klass):
-         for m in klass.members:
-@@ -271,27 +270,27 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-             mname = re.match(r'lasso_.*_get_(\w+)', meth_name).group(1)
-             mname = format_as_camelcase(mname)
- 
--            six.print_('    /**', file=self.fd)
--            six.print_('     * @return %s' % self.get_docstring_return_type(m.return_type), file=self.fd)
--            six.print_('     */', file=self.fd)
--            six.print_('    protected function get_%s() {' % mname, file=self.fd)
-+            print('    /**', file=self.fd)
-+            print('     * @return %s' % self.get_docstring_return_type(m.return_type), file=self.fd)
-+            print('     */', file=self.fd)
-+            print('    protected function get_%s() {' % mname, file=self.fd)
-             if self.is_object(m.return_type):
--                six.print_('        $cptr = %s($this->_cptr);' % meth_name, file=self.fd)
--                six.print_('        if (! is_null($cptr)) {', file=self.fd)
--                six.print_('            return cptrToPhp($cptr);', file=self.fd)
--                six.print_('        }', file=self.fd)
--                six.print_('        return null;', file=self.fd)
-+                print('        $cptr = %s($this->_cptr);' % meth_name, file=self.fd)
-+                print('        if (! is_null($cptr)) {', file=self.fd)
-+                print('            return cptrToPhp($cptr);', file=self.fd)
-+                print('        }', file=self.fd)
-+                print('        return null;', file=self.fd)
-             else:
--                six.print_('        return %s($this->_cptr);' % meth_name, file=self.fd)
--            six.print_('    }', file=self.fd)
-+                print('        return %s($this->_cptr);' % meth_name, file=self.fd)
-+            print('    }', file=self.fd)
-             if setter:
--                six.print_('    protected function set_%s($value) {' % mname, file=self.fd)
-+                print('    protected function set_%s($value) {' % mname, file=self.fd)
-                 if self.is_object(m.return_type):
--                    six.print_('        %s($this->_cptr, $value->_cptr);' % setter.name, file=self.fd)
-+                    print('        %s($this->_cptr, $value->_cptr);' % setter.name, file=self.fd)
-                 else:
--                    six.print_('        %s($this->_cptr, $value);' % setter.name, file=self.fd)
--                six.print_('    }', file=self.fd)
--            six.print_('', file=self.fd)
-+                    print('        %s($this->_cptr, $value);' % setter.name, file=self.fd)
-+                print('    }', file=self.fd)
-+            print('', file=self.fd)
- 
-         # second pass on methods, real methods
-         method_prefix = format_as_underscored(klass.name) + '_'
-@@ -356,26 +355,26 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-                 c_args = ''
- 
-             if m.docstring:
--                six.print_(self.generate_docstring(m, mname, 4), file=self.fd)
--            six.print_('    public function %s(%s) {' % (
-+                print(self.generate_docstring(m, mname, 4), file=self.fd)
-+            print('    public function %s(%s) {' % (
-                     format_underscore_as_camelcase(mname), php_args), file=self.fd)
-             if m.return_type == 'void':
--                six.print_('        %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-+                print('        %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-             elif is_rc(m.return_type):
--                six.print_('        $rc = %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
--                six.print_('        if ($rc == 0) {', file=self.fd)
--                six.print_('            return 0;', file=self.fd)
--                six.print_('        } else if ($rc > 0) {', file=self.fd) # recoverable error
--                six.print_('            return $rc;', file=self.fd)
--                six.print_('        } else if ($rc < 0) {', file=self.fd) # unrecoverable error
--                six.print_('            LassoError::throw_on_rc($rc);', file=self.fd)
--                six.print_('        }', file=self.fd)
-+                print('        $rc = %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-+                print('        if ($rc == 0) {', file=self.fd)
-+                print('            return 0;', file=self.fd)
-+                print('        } else if ($rc > 0) {', file=self.fd) # recoverable error
-+                print('            return $rc;', file=self.fd)
-+                print('        } else if ($rc < 0) {', file=self.fd) # unrecoverable error
-+                print('            LassoError::throw_on_rc($rc);', file=self.fd)
-+                print('        }', file=self.fd)
-             else:
--                six.print_('        return %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
--            six.print_('    }', file=self.fd)
--            six.print_('', file=self.fd)
-+                print('        return %s($this->_cptr%s);' % (cname, c_args), file=self.fd)
-+            print('    }', file=self.fd)
-+            print('', file=self.fd)
- 
--        six.print_('', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_docstring(self, func, method_name, indent):
-         docstring = func.docstring.orig_docstring
-@@ -435,7 +434,7 @@ function lassoGetRequestTypeFromSoapMsg($mesg) {
-             cat = exc_cat.attrib.get('name')
-             done_cats.append(cat)
-             parent_cat = exc_cat.attrib.get('parent', '')
--            six.print_('''\
-+            print('''\
- /**
-  * @package Lasso
-  */
-@@ -460,7 +459,7 @@ class Lasso%sError extends Lasso%sError {}
-                 else:
-                     parent_cat = ''
- 
--                six.print_('''\
-+                print('''\
- /**
-  * @package Lasso
-  */
-@@ -468,7 +467,7 @@ class Lasso%sError extends Lasso%sError {}
- ''' % (cat, parent_cat), file=self.fd)
- 
-             if detail not in exceptions_dict:
--                six.print_('''\
-+                print('''\
- /**
-  * @package Lasso
-  */
-@@ -478,7 +477,7 @@ class Lasso%sError extends Lasso%sError {
- ''' % (detail, cat, c[1]), file=self.fd)
-                 exceptions_dict[detail] = c[1]
- 
--        six.print_('''\
-+        print('''\
- /**
-  * @package Lasso
-  */
-@@ -486,9 +485,9 @@ class LassoError extends Exception {
-     private static $exceptions_dict = array(''', file=self.fd)
- 
-         for k, v in exceptions_dict.items():
--            six.print_('        %s => "Lasso%sError",' % (v, k), file=self.fd)
-+            print('        %s => "Lasso%sError",' % (v, k), file=self.fd)
- 
--        six.print_('''\
-+        print('''\
-     );
- 
-     public static function throw_on_rc($rc) {
-@@ -502,6 +501,6 @@ class LassoError extends Exception {
- ''', file=self.fd)
- 
-     def generate_footer(self):
--        six.print_('''\
-+        print('''\
- ?>''', file=self.fd)
- 
-diff --git a/bindings/php7/wrapper_header.py b/bindings/php7/wrapper_header.py
-index 5236571a..22908945 100644
---- a/bindings/php7/wrapper_header.py
-+++ b/bindings/php7/wrapper_header.py
-@@ -17,7 +17,6 @@
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, see <http://www.gnu.org/licenses/>.
--import six
- 
- class WrapperHeader:
-     def __init__(self, binding_data, fd, functions_list):
-@@ -32,7 +31,7 @@ class WrapperHeader:
- 
-     def generate_header(self):
-         # FIXME: Get the current version and name
--        six.print_('''\
-+        print('''\
- /* this file has been generated automatically; do not edit */
- 
- #include "../../config.h"
-@@ -51,11 +50,11 @@ PHP_MSHUTDOWN_FUNCTION(lasso);
- 
-     def generate_functions_list(self):
-         for m in self.functions_list:
--            six.print_('PHP_FUNCTION(%s);' % m, file=self.fd)
--        six.print_('', file=self.fd)
-+            print('PHP_FUNCTION(%s);' % m, file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_footer(self):
--        six.print_('''\
-+        print('''\
- extern zend_module_entry lasso_module_entry;
- #define phpext_lasso_ptr &lasso_module_entry
- 
-diff --git a/bindings/php7/wrapper_source.py b/bindings/php7/wrapper_source.py
-index c429e563..3d434402 100644
---- a/bindings/php7/wrapper_source.py
-+++ b/bindings/php7/wrapper_source.py
-@@ -20,7 +20,6 @@
- 
- import sys
- import os
--import six
- 
- from utils import *
- 
-@@ -53,17 +52,17 @@ class WrapperSource:
-         self.functions_list.append('lasso_init')
-         self.functions_list.append('lasso_shutdown')
- 
--        six.print_('''\
-+        print('''\
- /* this file has been generated automatically; do not edit */
- ''', file=self.fd)
- 
--        six.print_(open(os.path.join(self.src_dir,'wrapper_source_top.c')).read(), file=self.fd)
-+        print(open(os.path.join(self.src_dir,'wrapper_source_top.c')).read(), file=self.fd)
- 
-         for h in self.binding_data.headers:
--            six.print_('#include <%s>' % h, file=self.fd)
--        six.print_('', file=self.fd)
-+            print('#include <%s>' % h, file=self.fd)
-+        print('', file=self.fd)
- 
--        six.print_('''\
-+        print('''\
- PHP_MINIT_FUNCTION(lasso)
- {
-     le_lasso_server = zend_register_list_destructors_ex(php_gobject_generic_destructor, NULL, PHP_LASSO_SERVER_RES_NAME, module_number);
-@@ -71,25 +70,25 @@ PHP_MINIT_FUNCTION(lasso)
- ''', file=self.fd)
- 
-     def generate_constants(self):
--        six.print_('    /* Constants (both enums and defines) */', file=self.fd)
-+        print('    /* Constants (both enums and defines) */', file=self.fd)
-         for c in self.binding_data.constants:
-             if c[0] == 'i':
--                six.print_('    REGISTER_LONG_CONSTANT("%s", %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-+                print('    REGISTER_LONG_CONSTANT("%s", %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-             elif c[0] == 's':
--                six.print_('    REGISTER_STRING_CONSTANT("%s", (char*) %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-+                print('    REGISTER_STRING_CONSTANT("%s", (char*) %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd)
-             elif c[0] == 'b':
--                six.print_('''\
-+                print('''\
- #ifdef %s
-     REGISTER_LONG_CONSTANT("%s", 1, CONST_CS|CONST_PERSISTENT);
- #else
-     REGISTER_LONG_CONSTANT("%s", 0, CONST_CS|CONST_PERSISTENT);
- #endif''' % (c[1], c[1], c[1]), file=self.fd)
-             else:
--                six.print_('E: unknown constant type: %r' % c[0], file=sys.stderr)
--        six.print_('', file=self.fd)
-+                print('E: unknown constant type: %r' % c[0], file=sys.stderr)
-+        print('', file=self.fd)
- 
-     def generate_middle(self):
--        six.print_('''\
-+        print('''\
-     return SUCCESS;
- }
- 
-@@ -107,21 +106,21 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         # first we free the previous value
-         p = (zval_name, c_variable)
-         q = { 'zval_name' : zval_name, 'c_variable' : c_variable }
--        six.print_('    zval_dtor(%s);' % zval_name, file=self.fd)
-+        print('    zval_dtor(%s);' % zval_name, file=self.fd)
-         if is_pointer(type):
--            six.print_('    if (! %s) {' % c_variable, file=self.fd)
--            six.print_('       ZVAL_NULL(%s);' % zval_name, file=self.fd)
--            six.print_('    } else {', file=self.fd)
-+            print('    if (! %s) {' % c_variable, file=self.fd)
-+            print('       ZVAL_NULL(%s);' % zval_name, file=self.fd)
-+            print('    } else {', file=self.fd)
-         if is_int(type, self.binding_data):
--            six.print_('    ZVAL_LONG(%s, %s);' % p, file=self.fd)
-+            print('    ZVAL_LONG(%s, %s);' % p, file=self.fd)
-         elif is_boolean(type):
--            six.print_('    ZVAL_BOOL(%s, %s);' % p, file=self.fd)
-+            print('    ZVAL_BOOL(%s, %s);' % p, file=self.fd)
-         elif is_cstring(type):
--            six.print_('    ZVAL_STRING(%s, (char*)%s);' % p, file=self.fd)
-+            print('    ZVAL_STRING(%s, (char*)%s);' % p, file=self.fd)
-             if free and not is_const(type):
--                six.print_('g_free(%s)' % c_variable, file=self.fd)
-+                print('g_free(%s)' % c_variable, file=self.fd)
-         elif arg_type(type) == 'xmlNode*':
--            six.print_('''\
-+            print('''\
-     {
-         char* xmlString = get_string_from_xml_node(%(c_variable)s);
-         if (xmlString) {
-@@ -146,11 +145,11 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-                 free_function = 'g_list_free(%(c_variable)s);'
-             else:
-                 raise Exception('unknown element-type: ' + repr(type))
--            six.print_('     %s((GList*)%s, &%s);' % (function, c_variable, zval_name), file=self.fd)
-+            print('     %s((GList*)%s, &%s);' % (function, c_variable, zval_name), file=self.fd)
-             if free:
--                six.print_('   ', free_function % q, file=self.fd)
-+                print('   ', free_function % q, file=self.fd)
-         elif is_object(type):
--            six.print_('''\
-+            print('''\
-     if (G_IS_OBJECT(%(c_variable)s)) {
-         PhpGObjectPtr *obj = PhpGObjectPtr_New(G_OBJECT(%(c_variable)s));
-         zend_resource *res = zend_register_resource(obj, le_lasso_server);
-@@ -159,7 +158,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         ZVAL_NULL(%(zval_name)s);
-     }''' % q, file=self.fd)
-             if free:
--                six.print_('''\
-+                print('''\
-     if (%(c_variable)s) {
-         g_object_unref(%(c_variable)s); // If constructor ref is off by one'
-     }''' % q, file=self.fd)
-@@ -167,7 +166,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         else:
-             raise Exception('unknown type: ' + repr(type) + unconstify(arg_type(type)))
-         if is_pointer(type):
--            six.print_('    }', file=self.fd)
-+            print('    }', file=self.fd)
- 
- 
- 
-@@ -176,20 +175,20 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-             return
- 
-         if is_boolean(arg):
--            six.print_('    RETVAL_BOOL(return_c_value);', file=self.fd)
-+            print('    RETVAL_BOOL(return_c_value);', file=self.fd)
-         elif is_int(arg, self.binding_data):
--            six.print_('    RETVAL_LONG(return_c_value);', file=self.fd)
-+            print('    RETVAL_LONG(return_c_value);', file=self.fd)
-         elif is_cstring(arg):
--            six.print_('''\
-+            print('''\
-     if (return_c_value) {
-         RETVAL_STRING((char*)return_c_value);
-     } else {
-         RETVAL_NULL();
-     }''', file=self.fd)
-             if free:
--                six.print_('    free(return_c_value);', file=self.fd)
-+                print('    free(return_c_value);', file=self.fd)
-         elif is_xml_node(arg):
--            six.print_('''\
-+            print('''\
-     {
-         char* xmlString = get_string_from_xml_node(return_c_value);
-         if (xmlString) {
-@@ -200,43 +199,43 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-     }
- ''', file=self.fd)
-             if free:
--                six.print_('    lasso_release_xml_node(return_c_value);', file=self.fd)
-+                print('    lasso_release_xml_node(return_c_value);', file=self.fd)
-         elif is_glist(arg):
-             el_type = element_type(arg)
-             if is_cstring(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_list_of_strings((GList*)return_c_value, &return_value);
- ''', file=self.fd)
-                 if free:
--                    six.print_('    lasso_release_list_of_strings(return_c_value);', file=self.fd)
-+                    print('    lasso_release_list_of_strings(return_c_value);', file=self.fd)
-             elif is_xml_node(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_list_of_xmlnodes((GList*)return_c_value, &return_value);
- ''', file=self.fd)
-                 if free or is_transfer_full(arg):
--                    six.print_('    lasso_release_list_of_xml_node(return_c_value);', file=self.fd)
-+                    print('    lasso_release_list_of_xml_node(return_c_value);', file=self.fd)
-             elif is_object(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_list_of_objects((GList*)return_c_value, &return_value);
- ''', file=self.fd)
-                 if free:
--                    six.print_('    lasso_release_list_of_gobjects(return_c_value);', file=self.fd)
-+                    print('    lasso_release_list_of_gobjects(return_c_value);', file=self.fd)
-             else:
-                 raise Exception('cannot return value for %s' % (arg,))
-         elif is_hashtable(arg):
-             el_type = element_type(arg)
-             if is_object(el_type):
--                six.print_('''\
-+                print('''\
-     set_array_from_hashtable_of_objects(return_c_value, &return_value);
- ''', file=self.fd)
-             else:
-                 if not is_cstring(arg):
-                     print >>sys.stderr, 'W: %s has no explicit string annotation' % (arg,)
--                six.print_('''\
-+                print('''\
-     set_array_from_hashtable_of_strings(return_c_value, &return_value);
- ''', file=self.fd)
-         elif is_object(arg):
--            six.print_('''\
-+            print('''\
-     if (return_c_value) {
-         PhpGObjectPtr *self;
-         self = PhpGObjectPtr_New(G_OBJECT(return_c_value));
-@@ -246,7 +245,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         RETVAL_NULL();
-     }''', file=self.fd)
-             if free:
--                six.print_('    lasso_release_gobject(return_c_value);', file=self.fd)
-+                print('    lasso_release_gobject(return_c_value);', file=self.fd)
-         else:
-             raise Exception('cannot return value for %s' % (arg,))
- 
-@@ -258,26 +257,26 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         else:
-             name = m.name
-         self.functions_list.append(name)
--        six.print_('''PHP_FUNCTION(%s)
-+        print('''PHP_FUNCTION(%s)
- {''' % name, file=self.fd)
-         parse_tuple_format = []
-         parse_tuple_args = []
-         for arg in m.args:
-             if is_out(arg):
--                six.print_('   zval *php_out_%s = NULL;' % arg_name(arg), file=self.fd)
--                six.print_('   %s %s;' % (var_type(arg), arg_name(arg)), file=self.fd)
-+                print('   zval *php_out_%s = NULL;' % arg_name(arg), file=self.fd)
-+                print('   %s %s;' % (var_type(arg), arg_name(arg)), file=self.fd)
-                 parse_tuple_format.append('z!')
-                 parse_tuple_args.append('&php_out_%s' % arg_name(arg))
-             elif is_cstring(arg):
-                 parse_tuple_format.append('s!')
-                 parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg)))
--                six.print_('    %s %s = NULL;' % ('char*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_len = 0;' % ('size_t', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % ('char*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_len = 0;' % ('size_t', arg_name(arg)), file=self.fd)
-             elif is_int(arg, self.binding_data) or is_boolean(arg):
-                 parse_tuple_format.append('l')
-                 parse_tuple_args.append('&%s' % arg_name(arg))
--                six.print_('    %s %s;' % ('long', arg_name(arg)), file=self.fd)
-+                print('    %s %s;' % ('long', arg_name(arg)), file=self.fd)
-             elif is_time_t_pointer(arg):
-                 parse_tuple_format.append('l')
-                 parse_tuple_args.append('&%s' % (arg_name(arg),))
-@@ -285,34 +284,34 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-             elif is_xml_node(arg):
-                 parse_tuple_format.append('s!')
-                 parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg)))
--                six.print_('    %s %s = NULL;' % ('xmlNode*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_str = NULL;'  % ('char*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s_len = 0;' % ('size_t', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % ('xmlNode*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_str = NULL;'  % ('char*', arg_name(arg)), file=self.fd)
-+                print('    %s %s_len = 0;' % ('size_t', arg_name(arg)), file=self.fd)
-             elif is_glist(arg):
-                 parse_tuple_format.append('a!')
-                 parse_tuple_args.append('&zval_%s' % arg_name(arg))
--                six.print_('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
--                six.print_('    %s %s = NULL;' % ('GList*', arg_name(arg)), file=self.fd)
-+                print('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % ('GList*', arg_name(arg)), file=self.fd)
-             elif is_object(arg):
-                 parse_tuple_format.append('r')
-                 parse_tuple_args.append('&zval_%s' % arg_name(arg))
--                six.print_('    %s %s = NULL;' % (arg_type(arg), arg_name(arg)), file=self.fd)
--                six.print_('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
--                six.print_('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', arg_name(arg)), file=self.fd)
-+                print('    %s %s = NULL;' % (arg_type(arg), arg_name(arg)), file=self.fd)
-+                print('    %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd)
-+                print('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', arg_name(arg)), file=self.fd)
-             else:
-                 raise Exception('Unsupported type %s %s' % (arg, m))
- 
-         if m.return_type:
--            six.print_('    %s return_c_value;' % m.return_type, file=self.fd)
-+            print('    %s return_c_value;' % m.return_type, file=self.fd)
-         if m.return_type is not None and self.is_object(m.return_arg):
--            six.print_('    G_GNUC_UNUSED PhpGObjectPtr *self;', file=self.fd)
--        six.print_('', file=self.fd)
-+            print('    G_GNUC_UNUSED PhpGObjectPtr *self;', file=self.fd)
-+        print('', file=self.fd)
- 
-         parse_tuple_args = ', '.join(parse_tuple_args)
-         if parse_tuple_args:
-             parse_tuple_args = ', ' + parse_tuple_args
- 
--        six.print_('''\
-+        print('''\
-     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "%s"%s) == FAILURE) {
-         RETURN_FALSE;
-     }
-@@ -322,24 +321,24 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-             if is_out(arg):
-                 continue
-             elif is_xml_node(arg):
--                six.print_('''\
-+                print('''\
-         %(name)s = get_xml_node_from_string(%(name)s_str);''' % {'name': arg[1]}, file=self.fd)
-             elif f.startswith('s'):
--                six.print_('''\
-+                print('''\
-         %(name)s = %(name)s_str;''' % {'name': arg[1]}, file=self.fd)
-             elif f.startswith('r'):
--                six.print_('    if ((cvt_%s = (PhpGObjectPtr *)zend_fetch_resource(Z_RES_P(zval_%s), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) {' % (arg[1], arg[1]), file=self.fd)
--                six.print_('        RETURN_FALSE;', file=self.fd)
--                six.print_('    }', file=self.fd)
--                six.print_('    %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=self.fd)
-+                print('    if ((cvt_%s = (PhpGObjectPtr *)zend_fetch_resource(Z_RES_P(zval_%s), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) {' % (arg[1], arg[1]), file=self.fd)
-+                print('        RETURN_FALSE;', file=self.fd)
-+                print('    }', file=self.fd)
-+                print('    %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=self.fd)
-             elif f.startswith('a'):
-                 el_type = element_type(arg)
-                 if is_cstring(el_type):
--                    six.print_('    %(name)s = get_list_from_array_of_strings(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-+                    print('    %(name)s = get_list_from_array_of_strings(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-                 elif is_object(el_type):
--                    six.print_('    %(name)s = get_list_from_array_of_objects(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-+                    print('    %(name)s = get_list_from_array_of_objects(zval_%(name)s);' % {'name': arg[1]}, file=self.fd)
-                 else:
--                    six.print_('E: In %(function)s arg %(name)s is of type GList<%(elem)s>' % { 'function': m.name, 'name': arg[1], 'elem': el_type }, file=sys.stderr)
-+                    print('E: In %(function)s arg %(name)s is of type GList<%(elem)s>' % { 'function': m.name, 'name': arg[1], 'elem': el_type }, file=sys.stderr)
-             elif f == 'l':
-                 pass
-             else:
-@@ -347,17 +346,17 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
- 
- 
-         if m.return_type is not None:
--            six.print_('    return_c_value = ', file=self.fd)
-+            print('    return_c_value = ', file=self.fd)
-             if 'new' in m.name:
--                six.print_('(%s)' % m.return_type, file=self.fd)
-+                print('(%s)' % m.return_type, file=self.fd)
-         else:
--            six.print_('   ', file=self.fd)
-+            print('   ', file=self.fd)
-         def special(x):
-             if is_time_t_pointer(x):
-                 return '%(name)s ? &%(name)s : NULL' % { 'name': arg_name(x) }
-             else:
-                 return ref_name(x)
--        six.print_('%s(%s);' % (m.name, ', '.join([special(x) for x in m.args])), file=self.fd)
-+        print('%s(%s);' % (m.name, ', '.join([special(x) for x in m.args])), file=self.fd)
-         # Free the converted arguments
- 
-         for f, arg in zip(parse_tuple_format, m.args):
-@@ -368,21 +367,21 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-                 self.set_zval('php_out_%s' % argname, argname, unref_type(arg), free = free)
-                 pass
-             elif argtype == 'xmlNode*':
--                six.print_('    xmlFree(%s);' % argname, file=self.fd)
-+                print('    xmlFree(%s);' % argname, file=self.fd)
-             elif f.startswith('a'):
-                 el_type = element_type(arg)
-                 if is_cstring(el_type):
--                    six.print_('    if (%(name)s) {' % { 'name': arg[1] }, file=self.fd)
--                    six.print_('        free_glist(&%(name)s,(GFunc)free);' % { 'name': arg[1] }, file=self.fd)
--                    six.print_('    }', file=self.fd)
-+                    print('    if (%(name)s) {' % { 'name': arg[1] }, file=self.fd)
-+                    print('        free_glist(&%(name)s,(GFunc)free);' % { 'name': arg[1] }, file=self.fd)
-+                    print('    }', file=self.fd)
- 
-         try:
-             self.return_value(m.return_arg, is_transfer_full(m.return_arg, default=True))
-         except:
-             raise Exception('Cannot return value for function %s' % m)
- 
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_members(self, c):
-         for m in c.members:
-@@ -395,16 +394,16 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         type = arg_type(m)
- 
-         function_name = '%s_%s_get' % (klassname, format_as_camelcase(name))
--        six.print_('''PHP_FUNCTION(%s)
-+        print('''PHP_FUNCTION(%s)
- {''' % function_name, file=self.fd)
-         self.functions_list.append(function_name)
- 
--        six.print_('    %s return_c_value;' % type, file=self.fd)
--        six.print_('    %s* this;' % klassname, file=self.fd)
--        six.print_('    zval* zval_this;', file=self.fd)
--        six.print_('    PhpGObjectPtr *cvt_this;', file=self.fd)
--        six.print_('', file=self.fd)
--        six.print_('''\
-+        print('    %s return_c_value;' % type, file=self.fd)
-+        print('    %s* this;' % klassname, file=self.fd)
-+        print('    zval* zval_this;', file=self.fd)
-+        print('    PhpGObjectPtr *cvt_this;', file=self.fd)
-+        print('', file=self.fd)
-+        print('''\
-     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zval_this) == FAILURE) {
-         RETURN_FALSE;
-     }
-@@ -414,23 +413,23 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-     }
-     this = (%s*)cvt_this->obj;
- ''' % (klassname), file=self.fd)
--        six.print_('    return_c_value = (%s)this->%s;' % (type, name), file=self.fd)
-+        print('    return_c_value = (%s)this->%s;' % (type, name), file=self.fd)
-         self.return_value(m)
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_setter(self, c, m):
-         klassname = c.name
-         name = arg_name(m)
-         type = arg_type(m)
-         function_name = '%s_%s_set' % (klassname, format_as_camelcase(name))
--        six.print_('''PHP_FUNCTION(%s)
-+        print('''PHP_FUNCTION(%s)
- {''' % function_name, file=self.fd)
-         self.functions_list.append(function_name)
- 
--        six.print_('    %s* this;' % klassname, file=self.fd)
--        six.print_('    zval* zval_this;', file=self.fd)
--        six.print_('    PhpGObjectPtr *cvt_this;', file=self.fd)
-+        print('    %s* this;' % klassname, file=self.fd)
-+        print('    zval* zval_this;', file=self.fd)
-+        print('    PhpGObjectPtr *cvt_this;', file=self.fd)
- 
-         # FIXME: This bloc should be factorised
-         parse_tuple_format = ''
-@@ -439,41 +438,41 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-             # arg_type = arg_type.replace('const ', '')
-             parse_tuple_format += 's'
-             parse_tuple_args.append('&%s_str, &%s_len' % (name, name))
--            six.print_('    %s %s_str = NULL;' % ('char*', name), file=self.fd)
--            six.print_('    %s %s_len = 0;' % ('size_t', name), file=self.fd)
-+            print('    %s %s_str = NULL;' % ('char*', name), file=self.fd)
-+            print('    %s %s_len = 0;' % ('size_t', name), file=self.fd)
-         elif is_int(m, self.binding_data) or is_boolean(m):
-             parse_tuple_format += 'l'
-             parse_tuple_args.append('&%s' % name)
--            six.print_('    %s %s;' % ('long', name), file=self.fd)
-+            print('    %s %s;' % ('long', name), file=self.fd)
-         # Must also handle lists of Objects
-         elif is_glist(m) or is_hashtable(m):
-             parse_tuple_format += 'a'
-             parse_tuple_args.append('&zval_%s' % name)
--            six.print_('    %s zval_%s;' % ('zval*', name), file=self.fd)
-+            print('    %s zval_%s;' % ('zval*', name), file=self.fd)
-         elif is_object(m):
-             parse_tuple_format += 'r'
-             parse_tuple_args.append('&zval_%s' % name)
--            six.print_('    %s zval_%s = NULL;' % ('zval*', name), file=self.fd)
--            six.print_('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', name), file=self.fd)
-+            print('    %s zval_%s = NULL;' % ('zval*', name), file=self.fd)
-+            print('    %s cvt_%s = NULL;' % ('PhpGObjectPtr*', name), file=self.fd)
-         else:
-             raise Exception('Cannot make a setter for %s.%s' % (c,m))
- 
-         if parse_tuple_args:
-             parse_tuple_arg = parse_tuple_args[0]
-         else:
--            six.print_('}', file=self.fd)
--            six.print_('', file=self.fd)
-+            print('}', file=self.fd)
-+            print('', file=self.fd)
-             return
- 
--        six.print_('', file=self.fd)
--        six.print_('''\
-+        print('', file=self.fd)
-+        print('''\
-     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r%s", &zval_this, %s) == FAILURE) {
-         return;
-     }
- ''' % (parse_tuple_format, parse_tuple_arg), file=self.fd)
- 
-         # Get 'this' object
--        six.print_('''\
-+        print('''\
-     if ((cvt_this = (PhpGObjectPtr *)zend_fetch_resource(Z_RES_P(zval_this), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) {
-         RETURN_FALSE;
-     }
-@@ -483,53 +482,53 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
-         # Set new value
-         d = { 'name': name, 'type': type }
-         if is_int(m, self.binding_data) or is_boolean(m):
--            six.print_('    this->%s = %s;' % (name, name), file=self.fd)
-+            print('    this->%s = %s;' % (name, name), file=self.fd)
-         elif is_cstring(m):
--            six.print_('    lasso_assign_string(this->%(name)s, %(name)s_str);' % d, file=self.fd)
-+            print('    lasso_assign_string(this->%(name)s, %(name)s_str);' % d, file=self.fd)
-         elif is_xml_node(m):
--            six.print_('    lasso_assign_new_xml_node(this->%(name)s, get_xml_node_from_string(%(name)s_str));' % d, file=self.fd)
-+            print('    lasso_assign_new_xml_node(this->%(name)s, get_xml_node_from_string(%(name)s_str));' % d, file=self.fd)
-         elif is_glist(m):
-             el_type = element_type(m)
-             if is_cstring(el_type):
--                six.print_('    lasso_assign_new_list_of_strings(this->%(name)s, get_list_from_array_of_strings(zval_%(name)s));' % d, file=self.fd)
-+                print('    lasso_assign_new_list_of_strings(this->%(name)s, get_list_from_array_of_strings(zval_%(name)s));' % d, file=self.fd)
-             elif is_xml_node(el_type):
--                six.print_('    lasso_assign_new_list_of_xml_node(this->%(name)s, get_list_from_array_of_xmlnodes(zval_%(name)s))' % d, file=self.fd)
-+                print('    lasso_assign_new_list_of_xml_node(this->%(name)s, get_list_from_array_of_xmlnodes(zval_%(name)s))' % d, file=self.fd)
-             elif is_object(el_type):
--                six.print_('    lasso_assign_new_list_of_gobjects(this->%(name)s, get_list_from_array_of_objects(zval_%(name)s));' % d, file=self.fd)
-+                print('    lasso_assign_new_list_of_gobjects(this->%(name)s, get_list_from_array_of_objects(zval_%(name)s));' % d, file=self.fd)
-             else:
-                 raise Exception('Cannot create C setter for %s.%s' % (c,m))
-         elif is_hashtable(m):
-             el_type = element_type(m)
--            six.print_('''\
-+            print('''\
-         {
-             GHashTable *oldhash = this->%(name)s;''' % d, file=self.fd)
-             if is_object(el_type):
--                six.print_('            this->%(name)s = get_hashtable_from_array_of_objects(zval_%(name)s);' % d, file=self.fd)
-+                print('            this->%(name)s = get_hashtable_from_array_of_objects(zval_%(name)s);' % d, file=self.fd)
-             else:
--                six.print_('            this->%(name)s = get_hashtable_from_array_of_strings(zval_%(name)s);' % d, file=self.fd)
--            six.print_('            g_hash_table_destroy(oldhash);', file=self.fd)
--            six.print_('        }', file=self.fd)
-+                print('            this->%(name)s = get_hashtable_from_array_of_strings(zval_%(name)s);' % d, file=self.fd)
-+            print('            g_hash_table_destroy(oldhash);', file=self.fd)
-+            print('        }', file=self.fd)
-         elif is_object(m):
--            six.print_('    if ((cvt_%(name)s = (PhpGObjectPtr*)zend_fetch_resource(Z_RES_P(zval_%(name)s), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) {' % d, file=self.fd)
--            six.print_('        RETURN_FALSE;', file=self.fd)
--            six.print_('    }', file=self.fd)
--            six.print_('    lasso_assign_gobject(this->%(name)s, cvt_%(name)s->obj);' % d, file=self.fd)
-+            print('    if ((cvt_%(name)s = (PhpGObjectPtr*)zend_fetch_resource(Z_RES_P(zval_%(name)s), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) {' % d, file=self.fd)
-+            print('        RETURN_FALSE;', file=self.fd)
-+            print('    }', file=self.fd)
-+            print('    lasso_assign_gobject(this->%(name)s, cvt_%(name)s->obj);' % d, file=self.fd)
- 
--        six.print_('}', file=self.fd)
--        six.print_('', file=self.fd)
-+        print('}', file=self.fd)
-+        print('', file=self.fd)
- 
-     def generate_functions_list(self):
--        six.print_('''\
-+        print('''\
- static zend_function_entry lasso_functions[] = {''', file=self.fd)
-         for m in self.functions_list:
--            six.print_('    PHP_FE(%s, NULL)' % m, file=self.fd)
--        six.print_('''\
-+            print('    PHP_FE(%s, NULL)' % m, file=self.fd)
-+        print('''\
-     {NULL, NULL, NULL, 0, 0}
- };
- ''', file=self.fd)
- 
-     def generate_footer(self):
--        six.print_('''\
-+        print('''\
- zend_module_entry lasso_module_entry = {
- #if ZEND_MODULE_API_NO >= 20010901
-     STANDARD_MODULE_HEADER,
-diff --git a/bindings/python/examples/get_attributes_from_assertion.py b/bindings/python/examples/get_attributes_from_assertion.py
-index 8f37a337..87236b91 100644
---- a/bindings/python/examples/get_attributes_from_assertion.py
-+++ b/bindings/python/examples/get_attributes_from_assertion.py
-@@ -1,10 +1,9 @@
- # Example SP Python code to get attributes from an assertion
- 
--from six import print_
- 
- for attribute in assertion.attributeStatement[0].attribute:
-     if attribute.name == lasso.SAML2_ATTRIBUTE_NAME_EPR:
-         continue
--    print_('attribute : ' + attribute.name)
-+    print('attribute : ' + attribute.name)
-     for value in attribute.attributeValue:
--        print_('  value : ' + value.any[0].content)
-+        print('  value : ' + value.any[0].content)
-diff --git a/bindings/python/lang.py b/bindings/python/lang.py
-index 5ba4265c..1e7b36e1 100644
---- a/bindings/python/lang.py
-+++ b/bindings/python/lang.py
-@@ -19,7 +19,6 @@
- # along with this program; if not, see <http://www.gnu.org/licenses/>.
- 
- import os
--from six import print_
- import sys
- import re
- import textwrap
-@@ -34,9 +33,9 @@ def remove_bad_optional(args):
-         if not '=' in x:
-             non_opt = True
-         elif non_opt:
--            print_('W: changed', x, file=sys.stderr, end=' ')
-+            print('W: changed', x, file=sys.stderr, end=' ')
-             x = re.sub(' *=.*', '', x)
--            print_('to', x, file=sys.stderr)
-+            print('to', x, file=sys.stderr)
-         new_args.append(x)
-     new_args.reverse()
-     return new_args
-@@ -73,17 +72,17 @@ class Binding:
-         if not name:
-             raise Exception('Cannot free, missing a name')
-         if is_cstring(type):
--            print_('    lasso_release_string(%s);' % name, file=fd)
-+            print('    lasso_release_string(%s);' % name, file=fd)
-         elif is_int(type, self.binding_data) or is_boolean(type):
-             pass
-         elif is_xml_node(type):
--            print_('    lasso_release_xml_node(%s);' % name, file=fd)
-+            print('    lasso_release_xml_node(%s);' % name, file=fd)
-         elif is_glist(type):
-             etype = element_type(type)
-             if is_cstring(etype):
--                print_('    lasso_release_list_of_strings(%s);' % name, file=fd)
-+                print('    lasso_release_list_of_strings(%s);' % name, file=fd)
-             elif is_object(etype):
--                print_('    lasso_release_list_of_gobjects(%s);' % name, file=fd)
-+                print('    lasso_release_list_of_gobjects(%s);' % name, file=fd)
-             else:
-                 raise Exception('Unsupported caller owned return type %s' % ((repr(type), name),))
-         elif is_hashtable(type):
-@@ -91,11 +90,11 @@ class Binding:
-             k_type = key_type(type)
-             v_type = value_type(type)
-             if is_cstring(el_type) or (is_cstring(k_type) and is_cstring(v_type)):
--                print_('    if (%s) { g_hash_table_destroy(%s); }' % (name, name), file=fd)
-+                print('    if (%s) { g_hash_table_destroy(%s); }' % (name, name), file=fd)
-             else:
-                 raise Exception('Unsupported free value of type GHashTable: %s' % type)
-         elif is_object(type):
--            print_('    if (return_value) g_object_unref(%s);' % name, file=fd)
-+            print('    if (return_value) g_object_unref(%s);' % name, file=fd)
-         else:
-             raise Exception('Unsupported caller owned return type %s' % ((repr(type), name),))
- 
-@@ -116,7 +115,7 @@ class Binding:
-         fd.close()
- 
-     def generate_header(self, fd):
--        print_('''\
-+        print('''\
- # this file has been generated automatically; do not edit
- 
- import _lasso
-@@ -172,7 +171,7 @@ class frozendict(dict):
- 
-     def generate_exceptions(self, fd):
-         done_cats = []
--        print_('''\
-+        print('''\
- class Error(Exception):
-     code = None
- 
-@@ -206,7 +205,7 @@ class Error(Exception):
-             cat = exc_cat.attrib.get('name')
-             done_cats.append(cat)
-             parent_cat = exc_cat.attrib.get('parent', '')
--            print_('''\
-+            print('''\
- class %sError(%sError):
-     pass
- ''' % (cat, parent_cat), file=fd)
-@@ -229,7 +228,7 @@ class %sError(%sError):
-                 else:
-                     parent_cat = ''
- 
--                print_('''\
-+                print('''\
- class %sError(%sError):
-     pass
- ''' % (cat, parent_cat), file=fd)
-@@ -247,19 +246,19 @@ class %sError(%sError):
-                 # ordering would change)
-                 continue
- 
--            print_('''\
-+            print('''\
- class %sError(%sError):
-     pass
- ''' % (detail, cat), file=fd)
- 
--        print_('exceptions_dict = {', file=fd)
-+        print('exceptions_dict = {', file=fd)
-         for k, v in exceptions_dict.items():
--            print_('    _lasso.%s: %sError,' % (v, k), file=fd)
--        print_('}', file=fd)
--        print_('', file=fd)
-+            print('    _lasso.%s: %sError,' % (v, k), file=fd)
-+        print('}', file=fd)
-+        print('', file=fd)
- 
-     def generate_footer(self, fd):
--        print_('''
-+        print('''
- 
- def _profileGetIssuer(cls, *args, **kwargs):
-     return profileGetIssuer(*args, **kwargs)
-@@ -304,19 +303,19 @@ StringDict = dict
- ''', file=fd)
- 
-     def generate_constants(self, fd):
--        print_('### Constants (both enums and defines)', file=fd)
-+        print('### Constants (both enums and defines)', file=fd)
-         for c in self.binding_data.constants:
--            print_('%s = _lasso.%s' % (c[1][6:], c[1][6:]), file=fd)
-+            print('%s = _lasso.%s' % (c[1][6:], c[1][6:]), file=fd)
-         for c in self.binding_data.overrides.findall('constant'):
-             name = c.attrib.get('name')
-             if c.attrib.get('value'):
-                 name = name[6:] # dropping LASSO_
-                 value = c.attrib.get('value')
-                 if value == 'True':
--                    print_('%s = True' % name, file=fd)
-+                    print('%s = True' % name, file=fd)
-                 else:
--                    print_('E: unknown value for constant: %r' % value, file=sys.stderr)
--        print_('', file=fd)
-+                    print('E: unknown value for constant: %r' % value, file=sys.stderr)
-+        print('', file=fd)
- 
-     def generate_class(self, clss, fd):
-         klassname = clss.name[5:] # remove Lasso from class name
-@@ -325,7 +324,7 @@ StringDict = dict
-         else:
-             parentname = clss.parent[5:]
- 
--        print_('''class %(klassname)s(%(parentname)s):''' % locals(), file=fd)
-+        print('''class %(klassname)s(%(parentname)s):''' % locals(), file=fd)
- 
-         methods = clss.methods[:]
-         # constructor(s)
-@@ -348,14 +347,14 @@ StringDict = dict
- 
-                 c_args = ', '.join(c_args)
-                 py_args = ', ' + ', '.join(py_args)
--                print_('    def __init__(self%s):' % py_args, file=fd)
-+                print('    def __init__(self%s):' % py_args, file=fd)
-                 # XXX: could check self._cptr.typename to see if it got the
-                 # right class type
--                print_('        self._cptr = _lasso.%s(%s)' % (
-+                print('        self._cptr = _lasso.%s(%s)' % (
-                         m.name[6:], c_args), file=fd)
--                print_('        if self._cptr is None:', file=fd)
--                print_('            raise Error(\'failed to create object\')', file=fd)
--                print_('', file=fd)
-+                print('        if self._cptr is None:', file=fd)
-+                print('            raise Error(\'failed to create object\')', file=fd)
-+                print('', file=fd)
- 
-         for m in self.binding_data.functions:
-             if m.name.startswith(method_prefix + 'new_'):
-@@ -379,13 +378,13 @@ StringDict = dict
-                     if '=' in x:
-                         opt = True
-                     elif opt:
--                        print_('W: non-optional follows optional,', m, file=sys.stderr)
-+                        print('W: non-optional follows optional,', m, file=sys.stderr)
-                 c_args = ', '.join(c_args)
-                 py_args = ', ' + ', '.join(py_args)
--                print_('    @classmethod', file=fd)
--                print_('    def %s(cls%s):' % (constructor_name, py_args), file=fd)
--                print_('         return cptrToPy(_lasso.%s(%s))' % (m.name[6:], c_args), file=fd)
--                print_('', file=fd)
-+                print('    @classmethod', file=fd)
-+                print('    def %s(cls%s):' % (constructor_name, py_args), file=fd)
-+                print('         return cptrToPy(_lasso.%s(%s))' % (m.name[6:], c_args), file=fd)
-+                print('', file=fd)
- 
-         # create properties for members
-         for m in clss.members:
-@@ -393,13 +392,13 @@ StringDict = dict
-             mname = format_as_camelcase(m[1])
-             options = m[2]
-             # getter
--            print_('    def get_%s(self):' % mname, file=fd)
--            print_('        t = _lasso.%s_%s_get(self._cptr)' % (
-+            print('    def get_%s(self):' % mname, file=fd)
-+            print('        t = _lasso.%s_%s_get(self._cptr)' % (
-                     klassname, mname), file=fd)
-             if is_int(m, self.binding_data) or is_xml_node(m) or is_cstring(m) or is_boolean(m):
-                 pass
-             elif is_object(m):
--                print_('        t = cptrToPy(t)', file=fd)
-+                print('        t = cptrToPy(t)', file=fd)
-             elif is_glist(m):
-                 el_type = element_type(m)
-                 if is_cstring(el_type):
-@@ -407,54 +406,54 @@ StringDict = dict
-                 elif is_xml_node(el_type):
-                     pass
-                 elif is_object(el_type):
--                    print_('        if not t: return t', file=fd)
--                    print_('        t = tuple([cptrToPy(x) for x in t])', file=fd)
-+                    print('        if not t: return t', file=fd)
-+                    print('        t = tuple([cptrToPy(x) for x in t])', file=fd)
-                 else:
-                     raise Exception('Unsupported python getter %s.%s' % (clss, m))
-             elif is_hashtable(m):
-                 el_type = element_type(m)
--                print_('        if not t: return t', file=fd)
-+                print('        if not t: return t', file=fd)
-                 if is_object(el_type):
--                    print_('        d2 = {}', file=fd)
--                    print_('        for k, v in t.items():', file=fd)
--                    print_('            d2[k] = cptrToPy(v)', file=fd)
--                    print_('        t = frozendict(d2)', file=fd)
-+                    print('        d2 = {}', file=fd)
-+                    print('        for k, v in t.items():', file=fd)
-+                    print('            d2[k] = cptrToPy(v)', file=fd)
-+                    print('        t = frozendict(d2)', file=fd)
-                 else:
--                    print_('        t = frozendict(t)', file=fd)
-+                    print('        t = frozendict(t)', file=fd)
-             elif is_boolean(m) or is_int(m, self.binding_data) or is_xml_node(m) or is_cstring(m):
-                 pass
-             else:
-                 raise Exception('Unsupported python getter %s.%s' % (clss, m))
--            print_('        return t;', file=fd)
-+            print('        return t;', file=fd)
-             # setter
--            print_('    def set_%s(self, value):' % mname, file=fd)
-+            print('    def set_%s(self, value):' % mname, file=fd)
-             if is_int(m, self.binding_data) or is_xml_node(m) or is_boolean(m):
-                 pass
-             elif is_cstring(m):
--                print_('        value = str2lasso(value)', file=fd)
-+                print('        value = str2lasso(value)', file=fd)
-             elif is_object(m):
--                print_('        if value is not None:', file=fd)
--                print_('            value = value and value._cptr', file=fd)
-+                print('        if value is not None:', file=fd)
-+                print('            value = value and value._cptr', file=fd)
-             elif is_glist(m):
-                 el_type = element_type(m)
-                 if is_cstring(el_type) or is_xml_node(el_type):
-                     pass
-                 elif is_object(el_type):
--                    print_('        if value is not None:', file=fd)
--                    print_('            value = tuple([x._cptr for x in value])', file=fd)
-+                    print('        if value is not None:', file=fd)
-+                    print('            value = tuple([x._cptr for x in value])', file=fd)
-                 else:
-                     raise Exception('Unsupported python setter %s.%s' % (clss, m))
-             elif is_hashtable(m):
--                print_('W: unsupported setter for hashtable %s' % (m,), file=sys.stderr)
-+                print('W: unsupported setter for hashtable %s' % (m,), file=sys.stderr)
-             else:
--                print_('W: unsupported setter for %s' % (m,), file=sys.stderr)
--            print_('        _lasso.%s_%s_set(self._cptr, value)' % (
-+                print('W: unsupported setter for %s' % (m,), file=sys.stderr)
-+            print('        _lasso.%s_%s_set(self._cptr, value)' % (
-                     klassname, mname), file=fd)
--            print_('    %s = property(get_%s, set_%s)' % (mname, mname, mname), file=fd)
-+            print('    %s = property(get_%s, set_%s)' % (mname, mname, mname), file=fd)
-             old_mname = old_format_as_camelcase(m[1])
-             if mname != old_mname:
--                print_('    %s = %s' % (old_mname, mname), file=fd)
--            print_('', file=fd)
-+                print('    %s = %s' % (old_mname, mname), file=fd)
-+            print('', file=fd)
- 
-         # first pass on methods, getting accessors
-         # second pass on methods, real methods
-@@ -464,7 +463,7 @@ StringDict = dict
-                     m.name.endswith('_new_full'):
-                 continue
-             if not m.name.startswith(method_prefix):
--                print_('W:', m.name, 'vs', method_prefix, file=sys.stderr)
-+                print('W:', m.name, 'vs', method_prefix, file=sys.stderr)
-                 continue
- 
-             if m.rename:
-@@ -501,7 +500,7 @@ StringDict = dict
-                 if '=' in x:
-                     opt = True
-                 elif opt:
--                    print_('W: non-optional follow optional,', m, file=sys.stderr)
-+                    print('W: non-optional follow optional,', m, file=sys.stderr)
- 
-             if py_args:
-                 py_args = ', ' + ', '.join(py_args)
-@@ -512,51 +511,51 @@ StringDict = dict
-             else:
-                 c_args = ''
- 
--            print_('    def %s(self%s):' % (
-+            print('    def %s(self%s):' % (
-                     format_underscore_as_camelcase(mname), py_args), file=fd)
-             if m.docstring:
--                print_("        '''", file=fd)
--                print_(self.format_docstring(m, mname, 8), file=fd)
--                print_("        '''", file=fd)
-+                print("        '''", file=fd)
-+                print(self.format_docstring(m, mname, 8), file=fd)
-+                print("        '''", file=fd)
- 
-             if outarg:
--                print_("        %s = list((None,))" % outvar, file=fd)
-+                print("        %s = list((None,))" % outvar, file=fd)
-             return_type = m.return_type
-             return_type_qualifier = m.return_type_qualifier
-             assert is_int(make_arg(return_type),self.binding_data) or not outarg
-             if return_type in (None, 'void'):
--                print_('        _lasso.%s(self._cptr%s)' % (
-+                print('        _lasso.%s(self._cptr%s)' % (
-                         function_name, c_args), file=fd)
-             elif is_rc(m.return_arg):
--                print_('        rc = _lasso.%s(self._cptr%s)' % (
-+                print('        rc = _lasso.%s(self._cptr%s)' % (
-                         function_name, c_args), file=fd)
--                print_('        Error.raise_on_rc(rc)', file=fd)
-+                print('        Error.raise_on_rc(rc)', file=fd)
-             elif (is_int(m.return_arg, self.binding_data) or is_xml_node(m.return_arg) or
-                     is_cstring(m.return_arg) or is_boolean(m.return_arg) or
-                     is_hashtable(m.return_arg)):
--                print_('        return _lasso.%s(self._cptr%s)' % (
-+                print('        return _lasso.%s(self._cptr%s)' % (
-                         function_name, c_args), file=fd)
-             elif is_glist(m.return_arg):
-                 el_type = element_type(m.return_arg)
-                 if is_object(el_type):
--                    print_('        value = _lasso.%s(self._cptr%s)' % (
-+                    print('        value = _lasso.%s(self._cptr%s)' % (
-                             function_name, c_args), file=fd)
--                    print_('        if value is not None:', file=fd)
--                    print_('            value = tuple([cptrToPy(x) for x in value])', file=fd)
--                    print_('        return value', file=fd)
-+                    print('        if value is not None:', file=fd)
-+                    print('            value = tuple([cptrToPy(x) for x in value])', file=fd)
-+                    print('        return value', file=fd)
-                 elif is_cstring(el_type) or is_xml_node(el_type):
--                    print_('        return _lasso.%s(self._cptr%s)' % (
-+                    print('        return _lasso.%s(self._cptr%s)' % (
-                             function_name, c_args), file=fd)
-                 else:
-                     raise Exception('Return Type GList<%s> is not supported' % el_type)
-             elif is_object(m.return_arg):
--                print_('        return cptrToPy(_lasso.%s(self._cptr%s))' % (
-+                print('        return cptrToPy(_lasso.%s(self._cptr%s))' % (
-                         function_name, c_args), file=fd)
-             else:
-                 raise Exception('Return type %s is unsupported' % (m.return_arg,))
-             if outarg:
--                print_('        return %s[0]' % outvar, file=fd)
--            print_('', file=fd)
-+                print('        return %s[0]' % outvar, file=fd)
-+            print('', file=fd)
-         # transform methods to properties
-         for m in methods:
-             if len(m.args) > 1:
-@@ -564,7 +563,7 @@ StringDict = dict
-             name = m.rename or m.name
-             suffix = name[len(method_prefix)+len('get_'):]
-             if clss.getMember(suffix):
--                print_('W: method %s and member %s clashes' % (m.name, arg_name(clss.getMember(suffix))), file=sys.stderr)
-+                print('W: method %s and member %s clashes' % (m.name, arg_name(clss.getMember(suffix))), file=sys.stderr)
-                 continue
-             if not name.startswith(method_prefix) or not name[len(method_prefix):].startswith('get_'):
-                 continue
-@@ -576,13 +575,13 @@ StringDict = dict
-             pname = format_as_camelcase(name[len(method_prefix)+len('get_'):])
-             fname = format_as_camelcase(name[len(method_prefix):])
-             if not setter:
--                print_('    %s = property(%s)' % (pname, fname), file=fd)
-+                print('    %s = property(%s)' % (pname, fname), file=fd)
-             else:
-                 f2name = format_as_camelcase(setter.name[len(method_prefix):])
--                print_('    %s = property(%s, %s)' % (pname, fname, f2name), file=fd)
-+                print('    %s = property(%s, %s)' % (pname, fname, f2name), file=fd)
-         if empty:
--            print_('    pass', file=fd)
--        print_('', file=fd)
-+            print('    pass', file=fd)
-+        print('', file=fd)
- 
-     def format_docstring(self, func, method_name, indent):
-         if func.args:
-@@ -601,7 +600,7 @@ StringDict = dict
-                     return 'True'
-                 if var == 'FALSE':
-                     return 'False'
--                print_('W: unknown docstring thingie: %s' % s.group(1), file=sys.stderr)
-+                print('W: unknown docstring thingie: %s' % s.group(1), file=sys.stderr)
-             elif type == '@':
-                 if var == first_arg_name:
-                     var = 'self'
-@@ -686,14 +685,14 @@ StringDict = dict
-             else:
-                 name = m.name[6:]
-                 pname = format_as_camelcase(name)
--            print_('%s = _lasso.%s' % (pname, name), file=fd)
-+            print('%s = _lasso.%s' % (pname, name), file=fd)
- 
- 
-     def generate_wrapper(self, fd):
--        print_(open(os.path.join(self.src_dir,'wrapper_top.c')).read(), file=fd)
-+        print(open(os.path.join(self.src_dir,'wrapper_top.c')).read(), file=fd)
-         for h in self.binding_data.headers:
--            print_('#include <%s>' % h, file=fd)
--        print_('', file=fd)
-+            print('#include <%s>' % h, file=fd)
-+        print('', file=fd)
- 
-         self.generate_constants_wrapper(fd)
- 
-@@ -705,33 +704,33 @@ StringDict = dict
-             for m in c.methods:
-                 self.generate_function_wrapper(m, fd)
-         self.generate_wrapper_list(fd)
--        print_(open(os.path.join(self.src_dir,'wrapper_bottom.c')).read(), file=fd)
-+        print(open(os.path.join(self.src_dir,'wrapper_bottom.c')).read(), file=fd)
- 
-     def generate_constants_wrapper(self, fd):
--        print_('''static void
-+        print('''static void
- register_constants(PyObject *d)
- {
-     PyObject *obj;
- ''', file=fd)
-         for c in self.binding_data.constants:
-             if c[0] == 'i':
--                print_('    obj = PyInt_FromLong(%s);' % c[1], file=fd)
-+                print('    obj = PyInt_FromLong(%s);' % c[1], file=fd)
-             elif c[0] == 's':
--                print_('    obj = PyString_FromString((char*)%s);' % c[1], file=fd)
-+                print('    obj = PyString_FromString((char*)%s);' % c[1], file=fd)
-             elif c[0] == 'b':
--                print_('''\
-+                print('''\
- #ifdef %s
-     obj = Py_True;
- #else
-     obj = Py_False;
- #endif''' % c[1], file=fd)
-             else:
--                print_('E: unknown constant type: %r' % c[0], file=sys.stderr)
--            print_('    PyDict_SetItemString(d, "%s", obj);' % c[1][6:], file=fd)
-+                print('E: unknown constant type: %r' % c[0], file=sys.stderr)
-+            print('    PyDict_SetItemString(d, "%s", obj);' % c[1][6:], file=fd)
-             if c[0] != 'b':  # refcount of Py_True/False should not be changed
--                print_('    Py_DECREF(obj);', file=fd)
--        print_('}', file=fd)
--        print_('', file=fd)
-+                print('    Py_DECREF(obj);', file=fd)
-+        print('}', file=fd)
-+        print('', file=fd)
- 
- 
-     def generate_member_wrapper(self, c, fd):
-@@ -740,7 +739,7 @@ register_constants(PyObject *d)
-             name = arg_name(m)
-             mname = format_as_camelcase(arg_name(m))
-             # getter
--            print_('''static PyObject*
-+            print('''static PyObject*
- %s_%s_get(G_GNUC_UNUSED PyObject *self, PyObject *args)
- {''' % (klassname[5:], mname), file=fd)
-             self.wrapper_list.append('%s_%s_get' % (klassname[5:], mname))
-@@ -748,140 +747,140 @@ register_constants(PyObject *d)
-             ftype = arg_type(m)
-             if is_cstring(m):
-                 ftype = 'char*'
--            print_('    %s return_value;' % ftype, file=fd)
--            print_('    PyObject* return_pyvalue;', file=fd)
--            print_('    PyGObjectPtr* cvt_this;', file=fd)
--            print_('    %s* this;' % klassname, file=fd)
--            print_('', file=fd)
--            print_('    if (! PyArg_ParseTuple(args, "O", &cvt_this)) return NULL;', file=fd)
--            print_('    this = (%s*)cvt_this->obj;' % klassname, file=fd)
--            print_('    return_value = this->%s;' % arg_name(m), file=fd)
-+            print('    %s return_value;' % ftype, file=fd)
-+            print('    PyObject* return_pyvalue;', file=fd)
-+            print('    PyGObjectPtr* cvt_this;', file=fd)
-+            print('    %s* this;' % klassname, file=fd)
-+            print('', file=fd)
-+            print('    if (! PyArg_ParseTuple(args, "O", &cvt_this)) return NULL;', file=fd)
-+            print('    this = (%s*)cvt_this->obj;' % klassname, file=fd)
-+            print('    return_value = this->%s;' % arg_name(m), file=fd)
-             try:
-                 self.return_value(fd, m)
-             except:
--                print_('W: cannot make an assignment for', c, m, file=sys.stderr)
-+                print('W: cannot make an assignment for', c, m, file=sys.stderr)
-                 raise
--            print_('    return return_pyvalue;', file=fd)
--            print_('}', file=fd)
--            print_('', file=fd)
-+            print('    return return_pyvalue;', file=fd)
-+            print('}', file=fd)
-+            print('', file=fd)
- 
-             # setter
--            print_('''static PyObject*
-+            print('''static PyObject*
- %s_%s_set(G_GNUC_UNUSED PyObject *self, PyObject *args)
- {''' % (klassname[5:], mname), file=fd)
-             self.wrapper_list.append('%s_%s_set' % (klassname[5:], mname))
- 
--            print_('    PyGObjectPtr* cvt_this;', file=fd)
--            print_('    %s* this;' % klassname, file=fd)
-+            print('    PyGObjectPtr* cvt_this;', file=fd)
-+            print('    %s* this;' % klassname, file=fd)
-             type = m[0]
-             # Determine type class
-             if is_cstring(m):
-                 type = type.replace('const ', '')
-                 parse_format = 'z'
-                 parse_arg = '&value'
--                print_('    %s value;' % type, file=fd)
-+                print('    %s value;' % type, file=fd)
-             elif is_int(m, self.binding_data):
-                 parse_format = 'l'
-                 parse_arg = '&value'
--                print_('    long value;', file=fd)
-+                print('    long value;', file=fd)
-             elif is_glist(m) or is_hashtable(m) or is_xml_node(m) or is_boolean(m):
-                 parse_format = 'O'
--                print_('    PyObject *cvt_value;', file=fd)
-+                print('    PyObject *cvt_value;', file=fd)
-                 parse_arg = '&cvt_value'
-             elif is_object(m):
-                 parse_format = 'O'
--                print_('    PyGObjectPtr *cvt_value;', file=fd)
-+                print('    PyGObjectPtr *cvt_value;', file=fd)
-                 parse_arg = '&cvt_value'
-             else:
-                 raise Exception('Unsupported field: %s' % (m,))
-             # Get GObject
--            print_('    if (! PyArg_ParseTuple(args, "O%s", &cvt_this, %s)) return NULL;' % (
-+            print('    if (! PyArg_ParseTuple(args, "O%s", &cvt_this, %s)) return NULL;' % (
-                     parse_format, parse_arg), file=fd)
--            print_('    this = (%s*)cvt_this->obj;' % klassname, file=fd)
-+            print('    this = (%s*)cvt_this->obj;' % klassname, file=fd)
-             # Change value
-             if is_int(m, self.binding_data):
--                print_('    this->%s = value;' % name, file=fd)
-+                print('    this->%s = value;' % name, file=fd)
-             elif is_boolean(m):
--                print_('    this->%s = PyInt_AS_LONG(cvt_value) ? TRUE : FALSE;' % name, file=fd)
-+                print('    this->%s = PyInt_AS_LONG(cvt_value) ? TRUE : FALSE;' % name, file=fd)
-             elif is_cstring(m):
--                print_('    lasso_assign_string(this->%s, value);' % name, file=fd)
-+                print('    lasso_assign_string(this->%s, value);' % name, file=fd)
-             elif is_xml_node(m):
--                print_('    if (this->%s) xmlFreeNode(this->%s);' % (name, name), file=fd)
--                print_('    this->%s = get_xml_node_from_pystring(cvt_value);' % name, file=fd)
-+                print('    if (this->%s) xmlFreeNode(this->%s);' % (name, name), file=fd)
-+                print('    this->%s = get_xml_node_from_pystring(cvt_value);' % name, file=fd)
-             elif is_glist(m):
-                 el_type = element_type(m)
-                 if is_cstring(el_type):
--                    print_('    RETURN_IF_FAIL(set_list_of_strings(&this->%s, cvt_value));' % name, file=fd)
-+                    print('    RETURN_IF_FAIL(set_list_of_strings(&this->%s, cvt_value));' % name, file=fd)
-                 elif is_xml_node(el_type):
--                    print_('    RETURN_IF_FAIL(set_list_of_xml_nodes(&this->%s, cvt_value));' % name, file=fd)
-+                    print('    RETURN_IF_FAIL(set_list_of_xml_nodes(&this->%s, cvt_value));' % name, file=fd)
-                 elif is_object(el_type):
--                    print_('    RETURN_IF_FAIL(set_list_of_pygobject(&this->%s, cvt_value));' % name, file=fd)
-+                    print('    RETURN_IF_FAIL(set_list_of_pygobject(&this->%s, cvt_value));' % name, file=fd)
-                 else:
-                     raise Exception('Unsupported setter for %s' % (m,))
-             elif is_hashtable(m):
-                 el_type = element_type(m)
-                 if is_object(el_type):
--                    print_('    RETURN_IF_FAIL(set_hashtable_of_pygobject(this->%s, cvt_value));' % name, file=fd)
-+                    print('    RETURN_IF_FAIL(set_hashtable_of_pygobject(this->%s, cvt_value));' % name, file=fd)
-                 else:
--                    print_('    RETURN_IF_FAIL(set_hashtable_of_strings(this->%s, cvt_value));' % name, file=fd)
-+                    print('    RETURN_IF_FAIL(set_hashtable_of_strings(this->%s, cvt_value));' % name, file=fd)
-             elif is_object(m):
--                print_('    set_object_field((GObject**)&this->%s, cvt_value);' % name, file=fd)
-+                print('    set_object_field((GObject**)&this->%s, cvt_value);' % name, file=fd)
-             else:
-                 raise Exception('Unsupported member %s.%s' % (klassname, m))
--            print_('    return noneRef();', file=fd)
--            print_('}', file=fd)
--            print_('', file=fd)
-+            print('    return noneRef();', file=fd)
-+            print('}', file=fd)
-+            print('', file=fd)
- 
- 
-     def return_value(self, fd, arg, return_var_name = 'return_value', return_pyvar_name = 'return_pyvalue'):
-         if is_boolean(arg):
--            print_('    if (%s) {' % return_var_name, file=fd)
--            print_('        Py_INCREF(Py_True);', file=fd)
--            print_('        %s = Py_True;' % return_pyvar_name, file=fd)
--            print_('    } else {', file=fd)
--            print_('        Py_INCREF(Py_False);', file=fd)
--            print_('        %s = Py_False;' % return_pyvar_name, file=fd)
--            print_('    }', file=fd)
-+            print('    if (%s) {' % return_var_name, file=fd)
-+            print('        Py_INCREF(Py_True);', file=fd)
-+            print('        %s = Py_True;' % return_pyvar_name, file=fd)
-+            print('    } else {', file=fd)
-+            print('        Py_INCREF(Py_False);', file=fd)
-+            print('        %s = Py_False;' % return_pyvar_name, file=fd)
-+            print('    }', file=fd)
-         elif is_int(arg, self.binding_data):
--            print_('    %s = PyInt_FromLong(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+            print('    %s = PyInt_FromLong(%s);' % (return_pyvar_name, return_var_name), file=fd)
-         elif is_cstring(arg) and is_transfer_full(arg):
--            print_('    if (%s) {' % return_var_name, file=fd)
--            print_('        %s = PyString_FromString(%s);' % (return_pyvar_name, return_var_name), file=fd)
--            print_('    } else {', file=fd)
--            print_('        %s = noneRef();' % return_pyvar_name, file=fd)
--            print_('    }', file=fd)
-+            print('    if (%s) {' % return_var_name, file=fd)
-+            print('        %s = PyString_FromString(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+            print('    } else {', file=fd)
-+            print('        %s = noneRef();' % return_pyvar_name, file=fd)
-+            print('    }', file=fd)
-         elif is_cstring(arg):
--            print_('    if (%s) {' % return_var_name, file=fd)
--            print_('        %s = PyString_FromString(%s);' % (return_pyvar_name, return_var_name), file=fd)
--            print_('    } else {', file=fd)
--            print_('        %s = noneRef();' % return_pyvar_name, file=fd)
--            print_('    }', file=fd)
-+            print('    if (%s) {' % return_var_name, file=fd)
-+            print('        %s = PyString_FromString(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+            print('    } else {', file=fd)
-+            print('        %s = noneRef();' % return_pyvar_name, file=fd)
-+            print('    }', file=fd)
-         elif is_glist(arg):
-             el_type = element_type(arg)
-             if is_object(el_type):
--                print_('    %s = get_list_of_pygobject(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+                print('    %s = get_list_of_pygobject(%s);' % (return_pyvar_name, return_var_name), file=fd)
-             elif is_cstring(el_type):
--                print_('    %s = get_list_of_strings(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+                print('    %s = get_list_of_strings(%s);' % (return_pyvar_name, return_var_name), file=fd)
-             elif is_xml_node(el_type):
--                print_('    %s = get_list_of_xml_nodes(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+                print('    %s = get_list_of_xml_nodes(%s);' % (return_pyvar_name, return_var_name), file=fd)
-             else:
-                 raise Exception('failed to make an assignment for %s' % (arg,))
-         elif is_hashtable(arg):
-             el_type = element_type(arg)
-             if is_object(el_type):
--                print_('    %s = get_dict_from_hashtable_of_objects(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+                print('    %s = get_dict_from_hashtable_of_objects(%s);' % (return_pyvar_name, return_var_name), file=fd)
-             else:
--                print_('    %s = get_dict_from_hashtable_of_strings(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+                print('    %s = get_dict_from_hashtable_of_strings(%s);' % (return_pyvar_name, return_var_name), file=fd)
-         elif is_xml_node(arg):
-             # convert xmlNode* to strings
--            print_('    if (%s) {' % return_var_name, file=fd)
--            print_('        %s = get_pystring_from_xml_node(%s);' % (return_pyvar_name, return_var_name), file=fd)
--            print_('    } else {', file=fd)
--            print_('        %s = noneRef();' % return_pyvar_name, file=fd)
--            print_('    }', file=fd)
-+            print('    if (%s) {' % return_var_name, file=fd)
-+            print('        %s = get_pystring_from_xml_node(%s);' % (return_pyvar_name, return_var_name), file=fd)
-+            print('    } else {', file=fd)
-+            print('        %s = noneRef();' % return_pyvar_name, file=fd)
-+            print('    }', file=fd)
-         elif is_object(arg):
-             # return a PyGObjectPtr (wrapper around GObject)
--            print_('''\
-+            print('''\
-     if (%s) {
-         %s = PyGObjectPtr_New(G_OBJECT(%s));
-     } else {
-@@ -899,7 +898,7 @@ register_constants(PyObject *d)
-         else:
-             name = m.name[6:]
-         self.wrapper_list.append(name)
--        print_('''static PyObject*
-+        print('''static PyObject*
- %s(G_GNUC_UNUSED PyObject *self, PyObject *args)
- {
-     int ok = 1;''' % name, file=fd)
-@@ -951,21 +950,21 @@ register_constants(PyObject *d)
-                 parse_tuple_args.pop()
-                 parse_tuple_args.append('&cvt_%s_out' % aname)
-                 python_cvt_def = '    PyObject *cvt_%s_out = NULL;' % aname
--                print_('    PyObject *out_pyvalue = NULL;', file=fd)
--            print_(arg_def, file=fd)
-+                print('    PyObject *out_pyvalue = NULL;', file=fd)
-+            print(arg_def, file=fd)
-             if python_cvt_def:
--                print_(python_cvt_def, file=fd)
-+                print(python_cvt_def, file=fd)
- 
-         if m.return_type:
--            print_('    %s return_value;' % m.return_type, file=fd)
--            print_('    PyObject* return_pyvalue = NULL;', file=fd)
--        print_('', file=fd)
-+            print('    %s return_value;' % m.return_type, file=fd)
-+            print('    PyObject* return_pyvalue = NULL;', file=fd)
-+        print('', file=fd)
- 
-         parse_tuple_args = ', '.join(parse_tuple_args)
-         if parse_tuple_args:
-             parse_tuple_args = ', ' + parse_tuple_args
- 
--        print_('    if (! PyArg_ParseTuple(args, "%s"%s)) return NULL;' % (
-+        print('    if (! PyArg_ParseTuple(args, "%s"%s)) return NULL;' % (
-                 ''.join(parse_tuple_format), parse_tuple_args), file=fd)
- 
-         for f, arg in zip([ x for x in parse_tuple_format if x != '|'], m.args):
-@@ -974,48 +973,48 @@ register_constants(PyObject *d)
-             if is_list(arg):
-                 qualifier = element_type(arg)
-                 if is_cstring(qualifier):
--                    print_('    EXIT_IF_FAIL(set_list_of_strings(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-+                    print('    EXIT_IF_FAIL(set_list_of_strings(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-                 elif is_xml_node(qualifier):
--                    print_('    EXIT_IF_FAIL(set_list_of_xml_nodes(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-+                    print('    EXIT_IF_FAIL(set_list_of_xml_nodes(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-                 elif isinstance(qualifier, str) and qualifier.startswith('Lasso'):
--                    print_('    EXIT_IF_FAIL(set_list_of_pygobject(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-+                    print('    EXIT_IF_FAIL(set_list_of_pygobject(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-                 else:
--                    print_('E: unqualified GList argument in', name, qualifier, arg, file=sys.stderr)
-+                    print('E: unqualified GList argument in', name, qualifier, arg, file=sys.stderr)
-             elif is_xml_node(arg):
--                print_('    %s = get_xml_node_from_pystring(cvt_%s);' % (arg[1], arg[1]), file=fd)
-+                print('    %s = get_xml_node_from_pystring(cvt_%s);' % (arg[1], arg[1]), file=fd)
-             elif is_time_t_pointer(arg):
--                print_('    %s = get_time_t(cvt_%s);' % (arg[1], arg[1]), file=fd)
-+                print('    %s = get_time_t(cvt_%s);' % (arg[1], arg[1]), file=fd)
-             elif is_hashtable(arg):
-                 el_type = element_type(arg)
-                 k_type = key_type(arg)
-                 v_type = value_type(arg)
-                 if is_cstring(el_type) or (is_cstring(k_type) and is_cstring(v_type)):
- 
--                    print_('    %s = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);' % arg[1], file=fd)
--                    print_('    EXIT_IF_FAIL(set_hashtable_of_strings(%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-+                    print('    %s = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);' % arg[1], file=fd)
-+                    print('    EXIT_IF_FAIL(set_hashtable_of_strings(%s, cvt_%s));' % (arg[1], arg[1]), file=fd)
-             elif f == 'O':
-                 if is_optional(arg):
--                    print_('    if (PyObject_TypeCheck((PyObject*)cvt_%s, &PyGObjectPtrType)) {' % arg[1], file=fd)
--                    print_('        %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=fd)
--                    print_('    } else {', file=fd)
--                    print_('        %s = NULL;' % arg[1], file=fd)
--                    print_('    }', file=fd)
-+                    print('    if (PyObject_TypeCheck((PyObject*)cvt_%s, &PyGObjectPtrType)) {' % arg[1], file=fd)
-+                    print('        %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=fd)
-+                    print('    } else {', file=fd)
-+                    print('        %s = NULL;' % arg[1], file=fd)
-+                    print('    }', file=fd)
-                 else:
--                    print_('    if (PyObject_TypeCheck((PyObject*)cvt_%s, &PyGObjectPtrType)) {' % arg[1], file=fd)
--                    print_('        %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=fd)
--                    print_('    } else {', file=fd)
--                    print_('        PyErr_SetString(PyExc_TypeError, "value should be a PyGObject");', file=fd)
--                    print_('        return NULL;', file=fd)
--                    print_('    }', file=fd)
-+                    print('    if (PyObject_TypeCheck((PyObject*)cvt_%s, &PyGObjectPtrType)) {' % arg[1], file=fd)
-+                    print('        %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=fd)
-+                    print('    } else {', file=fd)
-+                    print('        PyErr_SetString(PyExc_TypeError, "value should be a PyGObject");', file=fd)
-+                    print('        return NULL;', file=fd)
-+                    print('    }', file=fd)
- 
- 
-         if m.return_type:
--            print_('    return_value = ', file=fd, end='')
-+            print('    return_value = ', file=fd, end='')
-             if 'new' in m.name:
--                print_('(%s)' % m.return_type, file=fd)
-+                print('(%s)' % m.return_type, file=fd)
-         else:
--            print_('    ', file=fd, end='')
--        print_('%s(%s);' % (m.name, ', '.join([ref_name(x) for x in m.args])), file=fd)
-+            print('    ', file=fd, end='')
-+        print('%s(%s);' % (m.name, ', '.join([ref_name(x) for x in m.args])), file=fd)
- 
-         if m.return_type:
-             # Constructor so decrease refcount (it was incremented by PyGObjectPtr_New called
-@@ -1023,7 +1022,7 @@ register_constants(PyObject *d)
-             try:
-                 self.return_value(fd, m.return_arg)
-             except:
--                print_('W: cannot assign return value of', m, file=sys.stderr)
-+                print('W: cannot assign return value of', m, file=sys.stderr)
-                 raise
- 
-             if is_transfer_full(m.return_arg, default=True):
-@@ -1033,48 +1032,48 @@ register_constants(PyObject *d)
-             if is_out(arg):
-                 self.return_value(fd, arg, return_var_name = arg[1], return_pyvar_name = 'out_pyvalue')
- 
--                print_('    EXIT_IF_FAIL(%s);' % arg[1], file=fd)
--                print_('    if (PyList_SetItem(cvt_%s_out, 0, out_pyvalue) == -1) {' % arg[1], file=fd)
--                print_('        ok = 0;', file=fd)
--                print_('        Py_XDECREF(out_pyvalue);', file=fd)
--                print_('    }', file=fd)
-+                print('    EXIT_IF_FAIL(%s);' % arg[1], file=fd)
-+                print('    if (PyList_SetItem(cvt_%s_out, 0, out_pyvalue) == -1) {' % arg[1], file=fd)
-+                print('        ok = 0;', file=fd)
-+                print('        Py_XDECREF(out_pyvalue);', file=fd)
-+                print('    }', file=fd)
-             elif arg[0] == 'GList*':
-                 qualifier = arg[2].get('element-type')
-                 if is_cstring(qualifier):
--                    print_('    free_list(&%s, (GFunc)g_free);' % arg[1], file=fd)
-+                    print('    free_list(&%s, (GFunc)g_free);' % arg[1], file=fd)
-                 elif is_xml_node(qualifier):
--                    print_('    free_list(&%s, (GFunc)xmlFreeNode);' % arg[1], file=fd)
-+                    print('    free_list(&%s, (GFunc)xmlFreeNode);' % arg[1], file=fd)
-                 elif is_object(qualifier):
--                    print_('    free_list(&%s, (GFunc)g_object_unref);' % arg[1], file=fd)
-+                    print('    free_list(&%s, (GFunc)g_object_unref);' % arg[1], file=fd)
-             elif is_time_t_pointer(arg):
--                print_('    if (%s) free(%s);' % (arg[1], arg[1]), file=fd)
-+                print('    if (%s) free(%s);' % (arg[1], arg[1]), file=fd)
-             elif not is_transfer_full(arg) and is_hashtable(arg):
-                 self.free_value(fd, arg)
-             elif not is_transfer_full(arg) and is_xml_node(arg):
-                 self.free_value(fd, arg)
- 
--        print_('failure:', file=fd)
-+        print('failure:', file=fd)
- 
-         if not m.return_type:
--            print_('    if (ok) {', file=fd)
--            print_('        return noneRef();', file=fd)
-+            print('    if (ok) {', file=fd)
-+            print('        return noneRef();', file=fd)
-         else:
--            print_('    if (ok && return_pyvalue) {', file=fd)
--            print_('        return return_pyvalue;', file=fd)
--        print_('    } else {', file=fd)
-+            print('    if (ok && return_pyvalue) {', file=fd)
-+            print('        return return_pyvalue;', file=fd)
-+        print('    } else {', file=fd)
-         if m.return_type:
--            print_('        Py_XDECREF(return_pyvalue);', file=fd)
--        print_('        return NULL;', file=fd)
--        print_('    }', file=fd)
--        print_('}', file=fd)
--        print_('', file=fd)
-+            print('        Py_XDECREF(return_pyvalue);', file=fd)
-+        print('        return NULL;', file=fd)
-+        print('    }', file=fd)
-+        print('}', file=fd)
-+        print('', file=fd)
- 
-     def generate_wrapper_list(self, fd):
--        print_('''
-+        print('''
- static PyMethodDef lasso_methods[] = {''', file=fd)
-         for m in self.wrapper_list:
--            print_('    {"%s", %s, METH_VARARGS, NULL},' % (m, m), file=fd)
--        print_('    {NULL, NULL, 0, NULL}', file=fd)
--        print_('};', file=fd)
--        print_('', file=fd)
-+            print('    {"%s", %s, METH_VARARGS, NULL},' % (m, m), file=fd)
-+        print('    {NULL, NULL, 0, NULL}', file=fd)
-+        print('};', file=fd)
-+        print('', file=fd)
- 
-diff --git a/bindings/python/tests/XmlTestRunner.py b/bindings/python/tests/XmlTestRunner.py
-index 7a4150b4..d27d7da0 100644
---- a/bindings/python/tests/XmlTestRunner.py
-+++ b/bindings/python/tests/XmlTestRunner.py
-@@ -1,4 +1,3 @@
--# -*- coding: utf-8 -*-
- #
- # $Id: XmlTestRunner.py 3254 2007-06-05 21:23:57Z fpeters $
- #
-@@ -25,7 +24,6 @@
- import unittest
- import time
- import sys
--from six import print_
- 
- def xml(text):
-     if not text:
-@@ -34,14 +32,14 @@ def xml(text):
- 
- class XmlTestResult(unittest.TestResult):
-     def addSuccess(self, test):
--        print_("""    <test result="success">
-+        print("""    <test result="success">
-       <id>%s</id>
-       <description>%s</description>
-     </test>""" % (test.id(), xml(test.shortDescription())))
- 
-     def addError(self, test, err):
-         unittest.TestResult.addError(self, test, err)
--        print_("""    <test result="error">
-+        print("""    <test result="error">
-       <id>%s</id>
-       <description>%s</description>
-     </test>""" % (test.id(), xml(test.shortDescription())))
-@@ -49,7 +47,7 @@ class XmlTestResult(unittest.TestResult):
- 
-     def addFailure(self, test, err):
-         unittest.TestResult.addFailure(self, test, err)
--        print_("""    <test result="failure">
-+        print("""    <test result="failure">
-       <id>%s</id>
-       <description>%s</description>
-     </test>""" % (test.id(), xml(test.shortDescription())))
-@@ -61,14 +59,14 @@ class XmlTestRunner:
-         return XmlTestResult()
- 
-     def run(self, test):
--        print_("<suite>")
-+        print("<suite>")
-         result = self._makeResult()
-         startTime = time.time()
-         test(result)
-         stopTime = time.time()
-         timeTaken = float(stopTime - startTime)
--        print_("  <duration>%s</duration>" % timeTaken)
--        print_("</suite>")
-+        print("  <duration>%s</duration>" % timeTaken)
-+        print("</suite>")
- 
-         return result
- 
-diff --git a/bindings/python/tests/binding_tests.py b/bindings/python/tests/binding_tests.py
-index 4fe7fde6..e074b893 100755
---- a/bindings/python/tests/binding_tests.py
-+++ b/bindings/python/tests/binding_tests.py
-@@ -254,10 +254,13 @@ class BindingTestCase(unittest.TestCase):
-     def test07(self):
-         '''Check reference counting'''
-         s = lasso.Samlp2AuthnRequest()
--        cptr = s._cptr
-+        # Starting with Python 3.14 some reference count changes
-+        # are avoided.
-+        # Creating a reference in a dict still increments refcount
-+        data = {'cptr': s._cptr}
-         a = sys.getrefcount(s._cptr)
-         del(s)
--        b = sys.getrefcount(cptr)
-+        b = sys.getrefcount(data['cptr'])
-         self.assertEqual(b, a-1)
- 
-     def test08(self):
-@@ -339,6 +342,12 @@ class BindingTestCase(unittest.TestCase):
-         self.assertEqual(str(cm.exception),
-                          '<lasso.XmlSchemaInvalidFragmentError(17): An XML tree does not respect at least an XML schema of its namespaces.>')
- 
-+    def test_provider_get_key_encryption_method(self):
-+        # check getKeyEncryptionMethod is a Provider method #101250
-+        with self.assertRaises(AttributeError):
-+            getattr(lasso, 'providerGetKeyEncryptionMethod')
-+        getattr(lasso.Provider, 'getKeyEncryptionMethod')
-+
-     def test_set_list_of_strings(self):
-         node = lasso.Samlp2RequestedAuthnContext()
-         with self.assertRaises(TypeError, msg='value should be a tuple of strings'):
-@@ -353,7 +362,91 @@ class BindingTestCase(unittest.TestCase):
-         with self.assertRaises(TypeError, msg='value should be a tuple of PyGobject'):
-             node.attributeValue = value
- 
--bindingSuite = unittest.makeSuite(BindingTestCase, 'test')
-+    def test_saml1_soap_attributes(self):
-+        # Test AttributeStatement AttributeValue text extraction
-+        # Example SAML 1.1 validation response taken from
-+        # https://github.com/apereo/cas/blob/master/docs/cas-server-documentation/protocol/CAS-Protocol-Specification.md
-+        soap_content = """ 
-+<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">
-+  <SOAP-ENV:Header />
-+  <SOAP-ENV:Body>
-+    <Response xmlns=\"urn:oasis:names:tc:SAML:1.0:protocol\" xmlns:saml=\"urn:oasis:names:tc:SAML:1.0:assertion\"
-+    xmlns:samlp=\"urn:oasis:names:tc:SAML:1.0:protocol\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
-+    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" IssueInstant=\"2008-12-10T14:12:14.817Z\"
-+    MajorVersion=\"1\" MinorVersion=\"1\" Recipient=\"https://eiger.iad.vt.edu/dat/home.do\"
-+    ResponseID=\"_5c94b5431c540365e5a70b2874b75996\">
-+      <Status>
-+        <StatusCode Value=\"samlp:Success\">
-+        </StatusCode>
-+      </Status>
-+      <Assertion xmlns=\"urn:oasis:names:tc:SAML:1.0:assertion\" AssertionID=\"_e5c23ff7a3889e12fa01802a47331653\"
-+      IssueInstant=\"2008-12-10T14:12:14.817Z\" Issuer=\"localhost\" MajorVersion=\"1\"
-+      MinorVersion=\"1\">
-+        <Conditions NotBefore=\"2008-12-10T14:12:14.817Z\" NotOnOrAfter=\"2008-12-10T14:12:44.817Z\">
-+          <AudienceRestrictionCondition>
-+            <Audience>
-+              https://some-service.example.com/app/
-+            </Audience>
-+          </AudienceRestrictionCondition>
-+        </Conditions>
-+        <AttributeStatement>
-+          <Subject>
-+            <NameIdentifier>johnq</NameIdentifier>
-+            <SubjectConfirmation>
-+              <ConfirmationMethod>
-+                urn:oasis:names:tc:SAML:1.0:cm:artifact
-+              </ConfirmationMethod>
-+            </SubjectConfirmation>
-+          </Subject>
-+          <Attribute AttributeName=\"uid\" AttributeNamespace=\"http://www.ja-sig.org/products/cas/\">
-+            <AttributeValue>12345</AttributeValue>
-+          </Attribute>
-+          <Attribute AttributeName=\"groupMembership\" AttributeNamespace=\"http://www.ja-sig.org/products/cas/\">
-+            <AttributeValue>
-+              uugid=middleware.staff,ou=Groups,dc=vt,dc=edu
-+            </AttributeValue>
-+          </Attribute>
-+          <Attribute AttributeName=\"eduPersonAffiliation\" AttributeNamespace=\"http://www.ja-sig.org/products/cas/\">
-+            <AttributeValue>staff</AttributeValue>
-+          </Attribute>
-+          <Attribute AttributeName=\"accountState\" AttributeNamespace=\"http://www.ja-sig.org/products/cas/\">
-+            <AttributeValue>ACTIVE</AttributeValue>
-+          </Attribute>
-+        </AttributeStatement>
-+        <AuthenticationStatement AuthenticationInstant=\"2008-12-10T14:12:14.741Z\"
-+        AuthenticationMethod=\"urn:oasis:names:tc:SAML:1.0:am:password\">
-+          <Subject>
-+            <NameIdentifier>johnq</NameIdentifier>
-+            <SubjectConfirmation>
-+              <ConfirmationMethod>
-+                urn:oasis:names:tc:SAML:1.0:cm:artifact
-+              </ConfirmationMethod>
-+            </SubjectConfirmation>
-+          </Subject>
-+        </AuthenticationStatement>
-+      </Assertion>
-+    </Response>
-+  </SOAP-ENV:Body>
-+</SOAP-ENV:Envelope>
-+"""
-+        expt_attrs = {'uid': '12345',
-+                      'groupMembership': 'uugid=middleware.staff,ou=Groups,dc=vt,dc=edu',
-+                      'eduPersonAffiliation': 'staff',
-+                      'accountState': 'ACTIVE'}
-+        node = lasso.Node.newFromSoap(soap_content)
-+        assert len(node.assertion) == 1
-+        assertion = node.assertion[0]
-+        for attribute in assertion.attributeStatement.attribute:
-+            attr_name = attribute.attributeName
-+            with self.subTest(name=attr_name):
-+                self.assertEqual(len(attribute.attributeValue), 1)
-+                value = attribute.attributeValue[0]
-+                self.assertEqual(len(value.any), 1)
-+                content = value.any[0].content
-+                self.assertIn(attr_name, expt_attrs)
-+                self.assertEqual(expt_attrs[attr_name], content.strip())
-+
-+bindingSuite = unittest.defaultTestLoader.loadTestsFromTestCase(BindingTestCase)
- 
- allTests = unittest.TestSuite((bindingSuite, ))
- 
-diff --git a/bindings/python/tests/profiles_tests.py b/bindings/python/tests/profiles_tests.py
-index 03f33ea9..8679d663 100755
---- a/bindings/python/tests/profiles_tests.py
-+++ b/bindings/python/tests/profiles_tests.py
-@@ -330,6 +330,12 @@ class LoginTestCase(unittest.TestCase):
-             sp_login.setSignatureVerifyHint(lasso.PROFILE_SIGNATURE_VERIFY_HINT_FORCE)
-             sp_login.processAuthnResponseMsg(idp_login.msgBody)
-             sp_login.acceptSso()
-+
-+            if key_encryption_method:
-+                expected_key_encryption_method = key_encryption_method
-+            else:
-+                expected_key_encryption_method = lasso.getDefaultKeyEncryptionMethod()
-+            assert provider.getKeyEncryptionMethod() == expected_key_encryption_method
-             return sp_login.response.debug()
- 
-         os.environ['LASSO_DEFAULT_KEY_ENCRYPTION_METHOD'] = 'rsa-pkcs1'
-@@ -543,12 +549,12 @@ class AttributeAuthorityTestCase(unittest.TestCase):
-         assert aq.response.assertion[0].attributeStatement[0].attribute[0]
-         assert aq.response.assertion[0].attributeStatement[0].attribute[0].attributeValue[0]
- 
--serverSuite = unittest.makeSuite(ServerTestCase, 'test')
--loginSuite = unittest.makeSuite(LoginTestCase, 'test')
--logoutSuite = unittest.makeSuite(LogoutTestCase, 'test')
--defederationSuite = unittest.makeSuite(DefederationTestCase, 'test')
--identitySuite = unittest.makeSuite(IdentityTestCase, 'test')
--attributeSuite = unittest.makeSuite(AttributeAuthorityTestCase, 'test')
-+serverSuite = unittest.defaultTestLoader.loadTestsFromTestCase(ServerTestCase)
-+loginSuite = unittest.defaultTestLoader.loadTestsFromTestCase(LoginTestCase)
-+logoutSuite = unittest.defaultTestLoader.loadTestsFromTestCase(LogoutTestCase)
-+defederationSuite = unittest.defaultTestLoader.loadTestsFromTestCase(DefederationTestCase)
-+identitySuite = unittest.defaultTestLoader.loadTestsFromTestCase(IdentityTestCase)
-+attributeSuite = unittest.defaultTestLoader.loadTestsFromTestCase(AttributeAuthorityTestCase)
- 
- allTests = unittest.TestSuite((serverSuite, loginSuite, logoutSuite, defederationSuite,
-                                identitySuite, attributeSuite))
-diff --git a/bindings/python/tests/tests.py b/bindings/python/tests/tests.py
-index efed53d1..5f2f0c8d 100755
---- a/bindings/python/tests/tests.py
-+++ b/bindings/python/tests/tests.py
-@@ -1,5 +1,4 @@
- #! /usr/bin/env python
--# -*- coding: utf-8 -*-
- #
- # $Id: tests.py 3425 2007-10-10 09:31:03Z dlaniel $
- #
-@@ -31,7 +30,6 @@ import os
- import sys
- import time
- import unittest
--from six import print_
- 
- from XmlTestRunner import XmlTestRunner
- 
-@@ -61,10 +59,10 @@ parser.add_option(
- __builtin__.__dict__['dataDir'] = os.path.join(options.srcDir, '../../../tests/data')
- 
- if options.xmlMode:
--    print_('<?xml version="1.0"?>')
--    print_('<testsuites xmlns="http://check.sourceforge.net/ns">')
--    print_('  <title>Python Bindings</title>')
--    print_('  <datetime>%s</datetime>' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
-+    print('<?xml version="1.0"?>')
-+    print('<testsuites xmlns="http://check.sourceforge.net/ns">')
-+    print('  <title>Python Bindings</title>')
-+    print('  <datetime>%s</datetime>' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
- 
- success = True
- for testSuite in testSuites:
-@@ -75,7 +73,7 @@ for testSuite in testSuites:
-         if fp:
-             fp.close()
-     if not module:
--        print_('Unable to load test suite:', testSuite, file=sys.stderr)
-+        print('Unable to load test suite:', testSuite, file=sys.stderr)
-         continue
- 
-     if module.__doc__:
-@@ -88,13 +86,13 @@ for testSuite in testSuites:
-     else:
-         runner = unittest.TextTestRunner(verbosity=2)
-         print
--        print_('-' * len(doc))
--        print_(doc)
--        print_('-' * len(doc))
-+        print('-' * len(doc))
-+        print(doc)
-+        print('-' * len(doc))
-     result = runner.run(module.allTests)
-     success = success and result.wasSuccessful()
- 
- if options.xmlMode:
--    print_('</testsuites>')
-+    print('</testsuites>')
- 
- sys.exit(not success)
-diff --git a/configure.ac b/configure.ac
-index 79d06985..cb9be5d5 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -90,6 +90,7 @@ fi
- dnl
- dnl Check for programs
- dnl
-+CFLAGS="$CFLAGS -Werror=undef -Werror=implicit-function-declaration"
- AC_PROG_CC
- AM_CFLAGS=""
- AC_HEADER_STDC
-@@ -133,7 +134,7 @@ AC_CHECK_PROGS(PHP5, php5 php)
- AC_CHECK_PROGS(PHP5_CONFIG, php-config5 php-config)
- AC_CHECK_PROGS(PHP7, php7.4 php7.3 php7.2 php7.1 php7.0 php7 php)
- AC_CHECK_PROGS(PHP7_CONFIG, php-config7.4 php-config7.3 php-config7.2 php-config7.1 php-config7.0 php-config7 php-config)
--AC_CHECK_PROGS(PYTHON, python3 python python2)
-+AC_CHECK_PROGS(PYTHON, python3 python)
- AC_CHECK_PROGS(SWIG, swig)
- 
- dnl Make sure we have an ANSI compiler
-@@ -325,25 +326,49 @@ if test "X$with_python" != "X"; then
-     PYTHON=$with_python
- fi
- 
-+test "x$PYTHON" != "x" || AC_MSG_ERROR(Python must be installed to compile lasso)
- 
- dnl need to change quotes to allow square brackets
- changequote(<<, >>)dnl
--PYTHON_VERSION=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_config_var("VERSION"))'`
-+PYTHON_VERSION=`$PYTHON -c '
-+try:
-+  import sysconfig
-+except ImportError:
-+  from distutils import sysconfig
-+print(sysconfig.get_config_var("VERSION"))'`
- changequote([, ])dnl
- 
--test "x$PYTHON" != "x" || AC_MSG_ERROR(Python must be installed to compile lasso)
--
- AC_MSG_CHECKING(for Python development files)
- dnl Check if we were be able to extract a good version number.
- if test "X$PYTHON_VERSION" != "X"; then
-     changequote(<<, >>)dnl
--    PYTHON_INC=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_python_inc())'`
--    PYTHON_LIB=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_python_lib(1))'`
-+    PYTHON_INC=`$PYTHON -c '
-+try:
-+  import sysconfig
-+  print(sysconfig.get_path("include"))
-+except ImportError:
-+  from distutils import sysconfig
-+  print(sysconfig.get_python_inc())
-+'`
-+    PYTHON_LIB=`$PYTHON -c '
-+try:
-+  import sysconfig
-+  print(sysconfig.get_path("platlib"))
-+except ImportError:
-+  from distutils import sysconfig
-+  print(sysconfig.get_python_lib(True))
-+'`
-     changequote([, ])dnl
-     PYTHON_H=$PYTHON_INC/Python.h
-     if test -f $PYTHON_H; then
-             PY_CFLAGS="-I$PYTHON_INC"
--            PY_MAKEFILE=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_makefile_filename())'`
-+	    PY_MAKEFILE=`$PYTHON -c '
-+try:
-+  import sysconfig
-+except ImportError:
-+  from distutils import sysconfig
-+print(sysconfig.get_makefile_filename())
-+'`
-             PY_OTHER_LIBS=`$SED -n -e 's/^LIBS=\(.*\)/\1/p' $PY_MAKEFILE`
-             PY_EXTRA_LIBS="$PY_LOCALMODLIBS $PY_BASEMODLIBS $PY_OTHER_LIBS"
-             dnl this extracts the $libdir out of python lib directory,
-diff --git a/lasso/build_strerror.py b/lasso/build_strerror.py
-index 908638d5..041c23a2 100644
---- a/lasso/build_strerror.py
-+++ b/lasso/build_strerror.py
-@@ -4,14 +4,14 @@ import glob
- import re
- import sys
- import os
--from six import print_, StringIO
-+from io import StringIO
- 
- srcdir = sys.argv[1]
- 
- messages = dict()
- description = ''
- 
--with open('%s/errors.h' % srcdir,'r') as f:
-+with open('%s/errors.h' % srcdir) as f:
-     for line in f:
-         m = re.match(r'^ \* LASSO.*ERROR', line)
-         if m:
-@@ -30,13 +30,13 @@ with open('%s/errors.h' % srcdir,'r') as f:
-             if m:
-                 messages[m.group(1)] = m.group(1)
- 
--with open('%s/errors.c.in' % srcdir,'r') as f:
-+with open('%s/errors.c.in' % srcdir) as f:
-     for line in f:
-         if '@ERROR_CASES@' in line:
-             keys = sorted(messages.keys())
-             for k in keys:
--                print_('		case %s:\n'
-+                print('		case %s:\n'
-                        '			return "%s";' %
-                        (k,messages[k].rstrip('\n')))
-         else:
--            print_(line, end="")
-+            print(line, end="")
-diff --git a/lasso/extract_sections.py b/lasso/extract_sections.py
-index a03d8551..0130480d 100644
---- a/lasso/extract_sections.py
-+++ b/lasso/extract_sections.py
-@@ -5,7 +5,6 @@ import re
- import sys
- import os
- import os.path
--from six import print_
- 
- if len(sys.argv) == 2:
-     srcdir = sys.argv[1]
-@@ -19,21 +18,21 @@ for root, dirs, files in os.walk(srcdir):
-             prefixes.append(os.path.splitext(file)[0])
-     for prefix in prefixes:
-         try:
--            header = io.open(os.path.join(root, prefix + '.h'), encoding='utf-8').read()
--            implementation = io.open(os.path.join(root, prefix + '.c'), encoding='utf-8').read()
--            exported_functions = re.findall('LASSO_EXPORT.*(lasso_\w*)', header)
-+            header = open(os.path.join(root, prefix + '.h'), encoding='utf-8').read()
-+            implementation = open(os.path.join(root, prefix + '.c'), encoding='utf-8').read()
-+            exported_functions = re.findall(r'LASSO_EXPORT.*(lasso_\w*)', header)
-             normal_functions = sorted ([ x for x in exported_functions if not x.endswith('get_type') ])
-             get_type = [ x for x in exported_functions if x.endswith('get_type') ][0]
-             file_name = re.findall('lasso_(.*)_get_type', get_type)[0]
-             try:
--                macro_type = re.findall('LASSO_(\w*)_CLASS\(', header)[0]
-+                macro_type = re.findall(r'LASSO_(\w*)_CLASS\(', header)[0]
-             except:
-                 macro_type = None
-             try:
-                 type = re.findall(r'^struct _(Lasso\w*)', header, re.MULTILINE)[0]
-             except:
-                 type = None
--            types = re.findall('^} (Lasso\w*);', header)
-+            types = re.findall(r'^} (Lasso\w*);', header)
-             def convert(x):
-                 if '%s' in x:
-                     return x % macro_type
-@@ -41,17 +40,17 @@ for root, dirs, files in os.walk(srcdir):
-                     return x
-             if type and macro_type:
-                 standard_decl = [ convert(x) for x in [ 'LASSO_%s', 'LASSO_IS_%s', 'LASSO_TYPE_%s', get_type, 'LASSO_%s_CLASS', 'LASSO_IS_%s_CLASS', 'LASSO_%s_GET_CLASS' ] ]
--                print_('')
--                print_('<SECTION>')
--                print_('<FILE>%s</FILE>' % file_name)
--                print_('<TITLE>%s</TITLE>' % type)
--                print_(type)
-+                print('')
-+                print('<SECTION>')
-+                print('<FILE>%s</FILE>' % file_name)
-+                print('<TITLE>%s</TITLE>' % type)
-+                print(type)
-                 for x in types + normal_functions:
--                    print_(x)
--                print_('<SUBSECTION Standard>')
-+                    print(x)
-+                print('<SUBSECTION Standard>')
-                 for x in standard_decl:
--                    print_(x)
--                print_('</SECTION>')
-+                    print(x)
-+                print('</SECTION>')
-         except:
-             continue
- 
-diff --git a/lasso/extract_symbols.py b/lasso/extract_symbols.py
-index fc34e405..3bbe6160 100644
---- a/lasso/extract_symbols.py
-+++ b/lasso/extract_symbols.py
-@@ -4,7 +4,6 @@ import io
- import glob
- import re
- import sys
--import six
- 
- if len(sys.argv) == 2:
-     srcdir = sys.argv[1]
-@@ -17,8 +16,8 @@ symbols = []
- for header_file in glob.glob('%s/*/*.h' % srcdir) + glob.glob('%s/*.h' % srcdir) + \
-         glob.glob('%s/*/*/*.h' % srcdir):
-     assert not ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file)
--    symbols.extend(regex.findall(io.open(header_file, encoding='utf-8').read().replace('\\\n', '')))
-+    symbols.extend(regex.findall(open(header_file, encoding='utf-8').read().replace('\\\n', '')))
- 
- for s in symbols:
--    six.print_(s)
-+    print(s)
- 
-diff --git a/lasso/extract_types.py b/lasso/extract_types.py
-index f1ac26e2..9c0a12be 100644
---- a/lasso/extract_types.py
-+++ b/lasso/extract_types.py
-@@ -4,7 +4,6 @@ import io
- import glob
- import re
- import sys
--import six
- 
- if len(sys.argv) == 2:
-     srcdir = sys.argv[1]
-@@ -14,30 +13,30 @@ else:
- 
- fd = io.StringIO()
- 
--six.print_(u"/* This file has been autogenerated; changes will be lost */", file=fd)
--six.print_(u"", file=fd)
--six.print_(u"typedef GType (*type_function) ();", file=fd)
--six.print_(u"", file=fd)
-+print("/* This file has been autogenerated; changes will be lost */", file=fd)
-+print("", file=fd)
-+print("typedef GType (*type_function) ();", file=fd)
-+print("", file=fd)
- 
- header_files = []
- for header_file in sorted(glob.glob('%s/*/*.h' % srcdir) + glob.glob('%s/*/*/*.h' % srcdir)):
-     assert not ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file)
-     header_files.append(header_file)
-     try:
--        type = re.findall('lasso_.*get_type', io.open(header_file, encoding='utf-8').read())[0]
-+        type = re.findall('lasso_.*get_type', open(header_file, encoding='utf-8').read())[0]
-     except IndexError:
-         continue
--    six.print_("extern GType %s();" % type, file=fd)
-+    print("extern GType %s();" % type, file=fd)
- 
--six.print_(u"", file=fd)
--six.print_(u"type_function functions[] = {", file=fd)
-+print("", file=fd)
-+print("type_function functions[] = {", file=fd)
- for header_file in header_files:
-     try:
--        type = re.findall('lasso_.*get_type', io.open(header_file, encoding='utf-8').read())[0]
-+        type = re.findall('lasso_.*get_type', open(header_file, encoding='utf-8').read())[0]
-     except IndexError:
-         continue
--    six.print_(u"\t%s," % type, file=fd)
--six.print_(u"\tNULL", file=fd)
--six.print_(u"};", file=fd)
-+    print("\t%s," % type, file=fd)
-+print("\tNULL", file=fd)
-+print("};", file=fd)
- 
--io.open('types.c', 'w', encoding='utf-8').write(fd.getvalue())
-+open('types.c', 'w', encoding='utf-8').write(fd.getvalue())
-diff --git a/lasso/id-ff/login.c b/lasso/id-ff/login.c
-index bc3b2249..09b0b1bb 100644
---- a/lasso/id-ff/login.c
-+++ b/lasso/id-ff/login.c
-@@ -270,9 +270,8 @@
- #include "../saml-2.0/loginprivate.h"
- #include "../lasso_config.h"
- 
--#define LASSO_LOGIN_GET_PRIVATE(o) \
--	   (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_LOGIN, LassoLoginPrivate))
- 
-+G_DEFINE_TYPE_WITH_PRIVATE(LassoLogin, lasso_login, LASSO_TYPE_PROFILE);
- 
- static void lasso_login_build_assertion_artifact(LassoLogin *login);
- 
-@@ -623,6 +622,7 @@ lasso_login_process_response_status_and_assertion(LassoLogin *login)
- 	LassoSamlSubjectStatementAbstract *sssa = NULL;
- 	LassoSamlSubjectStatementAbstract *sas = NULL;
- 	int rc = 0;
-+	LassoLoginPrivate *private_data = lasso_login_get_instance_private(login);
- 
- 	g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
- 
-@@ -672,7 +672,7 @@ lasso_login_process_response_status_and_assertion(LassoLogin *login)
- 
- 		/* Validate AuthnRequest RequestID and InResponseTo */
- 		{
--			char *previous_reqid = login->private_data->request_id;
-+			char *previous_reqid = private_data->request_id;
- 			if (previous_reqid) {
- 				if (lib_assertion == NULL ||
- 					lib_assertion->InResponseTo == NULL ||
-@@ -852,7 +852,7 @@ lasso_login_build_assertion_artifact(LassoLogin *login)
- 	b64_samlArt = xmlSecBase64Encode(samlArt, 42, 0);
- 
- 	lasso_assign_string(login->assertionArtifact, (char*)b64_samlArt);
--	lasso_assign_string(login->parent.private_data->artifact,
-+	lasso_profile_set_artifact(&login->parent,
- 			(char*)b64_samlArt);
- 	lasso_release_xml_string(b64_samlArt);
- }
-@@ -1024,13 +1024,12 @@ lasso_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_method)
- 				profile->remote_providerID,
- 				profile->response));
- 	/* comply with the new way of storing artifacts */
--	lasso_assign_string(profile->private_data->artifact,
--			login->assertionArtifact);
-+	lasso_profile_set_artifact(profile, login->assertionArtifact);
- 	/* Artifact profile for ID-FF 1.2 is special, this is not the full message which is relayed
- 	 * but only its assertion content, the Response container is changed from a
- 	 * lib:AuthnResponse to a samlp:Response.
- 	 */
--	lasso_assign_new_string(profile->private_data->artifact_message,
-+	lasso_profile_set_new_artifact_message(profile,
- 			lasso_node_export_to_xml((LassoNode*)login->assertion));
- cleanup:
- 	lasso_release_string(url);
-@@ -1380,6 +1379,7 @@ lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID)
- 	LassoProvider *remote_provider = NULL;
- 	LassoProfile *profile = NULL;
- 	lasso_error_t rc = 0;
-+	LassoLoginPrivate *private_data = lasso_login_get_instance_private(login);
- 
- 	g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
- 	profile = LASSO_PROFILE(login);
-@@ -1402,9 +1402,9 @@ lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID)
- 		lasso_assign_string(profile->remote_providerID, remote_providerID);
- 		remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID);
- 		rc = lasso_provider_verify_signature(remote_provider,
--				login->private_data->soap_request_msg,
-+				private_data->soap_request_msg,
- 				"RequestID", LASSO_MESSAGE_FORMAT_SOAP);
--		lasso_release_string(login->private_data->soap_request_msg);
-+		lasso_release_string(private_data->soap_request_msg);
- 
- 		/* lasso_profile_set_session_from_dump has not been called */
- 		if (profile->session == NULL) {
-@@ -1440,9 +1440,9 @@ lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID)
- 				lasso_profile_set_response_status(profile,
- 						LASSO_SAML_STATUS_CODE_SUCCESS);
- 				lasso_session_remove_status(profile->session, remote_providerID);
--			} else if (profile->private_data->artifact_message) {
-+			} else if (lasso_profile_get_artifact_message(profile)) {
- 				xmlDoc *doc;
--				char *artifact_message = profile->private_data->artifact_message;
-+				const char *artifact_message = lasso_profile_get_artifact_message(profile);
- 				doc = lasso_xml_parse_memory(artifact_message,
- 						strlen(artifact_message));
- 				lasso_profile_set_response_status(profile,
-@@ -1519,6 +1519,7 @@ lasso_login_init_authn_request(LassoLogin *login, const gchar *remote_providerID
- 	LassoServer *server = NULL;
- 	LassoSamlpRequestAbstract *request;
- 	lasso_error_t rc = 0;
-+	LassoLoginPrivate *private_data = lasso_login_get_instance_private(login);
- 
- 	g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
- 
-@@ -1569,7 +1570,7 @@ lasso_login_init_authn_request(LassoLogin *login, const gchar *remote_providerID
- 
- 	request = LASSO_SAMLP_REQUEST_ABSTRACT(profile->request);
- 	request->RequestID = lasso_build_unique_id(32);
--	lasso_assign_string(login->private_data->request_id, request->RequestID);
-+	lasso_assign_string(private_data->request_id, request->RequestID);
- 	request->MajorVersion = LASSO_LIB_MAJOR_VERSION_N;
- 	request->MinorVersion = LASSO_LIB_MINOR_VERSION_N;
- 	if (remote_provider &&
-@@ -2241,6 +2242,7 @@ lasso_login_process_request_msg(LassoLogin *login, gchar *request_msg)
- {
- 	gint ret = 0;
- 	LassoProfile *profile = LASSO_PROFILE(login);
-+	LassoLoginPrivate *private_data = lasso_login_get_instance_private(login);
- 
- 	g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
- 	g_return_val_if_fail(request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
-@@ -2257,13 +2259,12 @@ lasso_login_process_request_msg(LassoLogin *login, gchar *request_msg)
- 	/* get AssertionArtifact */
- 	lasso_assign_string(login->assertionArtifact,
- 			LASSO_SAMLP_REQUEST(profile->request)->AssertionArtifact);
--	lasso_assign_string(login->parent.private_data->artifact,
--			login->assertionArtifact);
-+	lasso_profile_set_artifact(&login->parent, login->assertionArtifact);
- 
- 	/* Keep a copy of request msg so signature can be verified when we get
- 	 * the providerId in lasso_login_build_response_msg()
- 	 */
--	lasso_assign_string(login->private_data->soap_request_msg, request_msg);
-+	lasso_assign_string(private_data->soap_request_msg, request_msg);
- 
- 	return ret;
- }
-@@ -2441,10 +2442,11 @@ static void
- dispose(GObject *object)
- {
- 	LassoLogin *login = LASSO_LOGIN(object);
-+	LassoLoginPrivate *private_data = lasso_login_get_instance_private(login);
- 
--	lasso_release_string(login->private_data->soap_request_msg);
--	lasso_release_gobject(login->private_data->saml2_assertion);
--	lasso_release_string(login->private_data->request_id);
-+	lasso_release_string(private_data->soap_request_msg);
-+	lasso_release_gobject(private_data->saml2_assertion);
-+	lasso_release_string(private_data->request_id);
- 	G_OBJECT_CLASS(parent_class)->dispose(object);
- }
- 
-@@ -2453,9 +2455,12 @@ dispose(GObject *object)
- /*****************************************************************************/
- 
- static void
--instance_init(LassoLogin *login, G_GNUC_UNUSED void *unused)
-+lasso_login_init(LassoLogin *login)
- {
--	login->private_data = LASSO_LOGIN_GET_PRIVATE(login);
-+#pragma GCC diagnostic push
-+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-+	login->private_data = lasso_login_get_instance_private(login);
-+#pragma GCC diagnostic pop
- 	login->protocolProfile = 0;
- 	login->assertionArtifact = NULL;
- 	login->nameIDPolicy = NULL;
-@@ -2463,7 +2468,7 @@ instance_init(LassoLogin *login, G_GNUC_UNUSED void *unused)
- }
- 
- static void
--class_init(LassoLoginClass *klass, void *unused G_GNUC_UNUSED)
-+lasso_login_class_init(LassoLoginClass *klass)
- {
- 	LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
- 
-@@ -2474,36 +2479,10 @@ class_init(LassoLoginClass *klass, void *unused G_GNUC_UNUSED)
- 	lasso_node_class_set_nodename(nclass, "Login");
- 	lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
- 	lasso_node_class_add_snippets(nclass, schema_snippets);
--	g_type_class_add_private(klass, sizeof(LassoLoginPrivate));
- 
- 	G_OBJECT_CLASS(klass)->dispose = dispose;
- }
- 
--GType
--lasso_login_get_type()
--{
--	static GType this_type = 0;
--
--	if (!this_type) {
--		static const GTypeInfo this_info = {
--			sizeof(LassoLoginClass),
--			NULL,
--			NULL,
--			(GClassInitFunc) class_init,
--			NULL,
--			NULL,
--			sizeof(LassoLogin),
--			0,
--			(GInstanceInitFunc) instance_init,
--			NULL
--		};
--
--		this_type = g_type_register_static(LASSO_TYPE_PROFILE,
--				"LassoLogin", &this_info, 0);
--	}
--	return this_type;
<Skipped 4121 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/lasso.git/commitdiff/056fe3b2dfd1ba9c1af85094eedcb448c7a1fe59




More information about the pld-cvs-commit mailing list