Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag
Index: MATE/caja/1.27.2/Makefile
===================================================================
--- MATE/caja/1.27.2/Makefile	(revision 450)
+++ MATE/caja/1.27.2/Makefile	(revision 451)
@@ -64,7 +64,7 @@
 REQUIRES          += X11/libs/libnotify/0.8.2
 REQUIRES          += Wayland/wayland-protocols/1.31
 REQUIRES          += libs/libexif/0.6.24
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: MATE/mate-applets/1.27.1/Makefile
===================================================================
--- MATE/mate-applets/1.27.1/Makefile	(revision 450)
+++ MATE/mate-applets/1.27.1/Makefile	(revision 451)
@@ -68,7 +68,7 @@
 REQUIRES          += app/upower/1.90.2
 REQUIRES          += net/libnl3/3.5.0
 REQUIRES          += libs/dbus-glib/0.112
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/polkit/123
 
 # ======= __END_OF_REQUIRES__ =======
Index: MATE/mate-calc/1.27.0/Makefile
===================================================================
--- MATE/mate-calc/1.27.0/Makefile	(revision 450)
+++ MATE/mate-calc/1.27.0/Makefile	(revision 451)
@@ -61,7 +61,7 @@
 SOURCE_REQUIRES    = sources/MATE/1.27/mate-calc
 
 REQUIRES           = X11/libs/gtk+3/3.24.37
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/mpfr/4.2.1
 
 # ======= __END_OF_REQUIRES__ =======
Index: MATE/mate-notification-daemon/1.27.1/Makefile
===================================================================
--- MATE/mate-notification-daemon/1.27.1/Makefile	(revision 450)
+++ MATE/mate-notification-daemon/1.27.1/Makefile	(revision 451)
@@ -65,7 +65,7 @@
 REQUIRES          += X11/libs/libcanberra/0.30
 REQUIRES          += X11/libs/libwnck/43.0
 REQUIRES          += libs/dbus-glib/0.112
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/zlib/1.3.1
 REQUIRES          += app/xz/5.6.3
 
Index: Wayland/wayland/1.21.0/Makefile
===================================================================
--- Wayland/wayland/1.21.0/Makefile	(revision 450)
+++ Wayland/wayland/1.21.0/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = libs/expat/2.6.4
 REQUIRES          += libs/libffi/3.4.7
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: Wayland/wayland/1.21.0-ppc32/Makefile
===================================================================
--- Wayland/wayland/1.21.0-ppc32/Makefile	(revision 450)
+++ Wayland/wayland/1.21.0-ppc32/Makefile	(revision 451)
@@ -18,7 +18,7 @@
 REQUIRES           = Wayland/wayland/1.21.0
 REQUIRES          += libs/expat/2.6.4-ppc32
 REQUIRES          += libs/libffi/3.4.7-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: Wayland/wayland/1.21.0-x86_32/Makefile
===================================================================
--- Wayland/wayland/1.21.0-x86_32/Makefile	(revision 450)
+++ Wayland/wayland/1.21.0-x86_32/Makefile	(revision 451)
@@ -15,7 +15,7 @@
 REQUIRES           = Wayland/wayland/1.21.0
 REQUIRES          += libs/expat/2.6.4-x86_32
 REQUIRES          += libs/libffi/3.4.7-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/app/conky/1.18.3/Makefile
===================================================================
--- X11/app/conky/1.18.3/Makefile	(revision 450)
+++ X11/app/conky/1.18.3/Makefile	(revision 451)
@@ -68,7 +68,7 @@
 REQUIRES          += X11/libs/imlib2/1.11.0
 REQUIRES          += X11/libs/cairo/1.17.8
 REQUIRES          += X11/media/pulseaudio/16.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/ncurses/6.5
 REQUIRES          += net/curl/7.75.0
 REQUIRES          += dev/lua/5.4.2
Index: X11/app/gnome-calculator/44.0/Makefile
===================================================================
--- X11/app/gnome-calculator/44.0/Makefile	(revision 450)
+++ X11/app/gnome-calculator/44.0/Makefile	(revision 451)
@@ -66,7 +66,7 @@
 REQUIRES          += X11/libs/libadwaita/1.3.2
 REQUIRES          += X11/libs/gtksourceview5/5.8.0
 REQUIRES          += libs/libsoup3/3.4.2
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libgee/0.20.6
 REQUIRES          += libs/dconf/0.40.0
 REQUIRES          += libs/mpc/1.3.1
Index: X11/app/nautilus/44.0/Makefile
===================================================================
--- X11/app/nautilus/44.0/Makefile	(revision 450)
+++ X11/app/nautilus/44.0/Makefile	(revision 451)
@@ -70,7 +70,7 @@
 REQUIRES          += libs/gobject-introspection/1.76.1
 REQUIRES          += X11/libs/libadwaita/1.3.2
 REQUIRES          += X11/libs/libportal/0.6
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/app/openbox/3.6.1/Makefile
===================================================================
--- X11/app/openbox/3.6.1/Makefile	(revision 450)
+++ X11/app/openbox/3.6.1/Makefile	(revision 451)
@@ -64,7 +64,7 @@
 REQUIRES          += X11/X.org/lib/libXinerama/1.1.5
 REQUIRES          += X11/libs/imlib2/1.11.0
 REQUIRES          += X11/libs/startup-notification/0.12
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/libs/at-spi2-core/2.47.1/Makefile
===================================================================
--- X11/libs/at-spi2-core/2.47.1/Makefile	(revision 450)
+++ X11/libs/at-spi2-core/2.47.1/Makefile	(revision 451)
@@ -63,7 +63,7 @@
 REQUIRES           = app/dbus/1.13.18
 REQUIRES          += libs/glib2/2.76.0
 REQUIRES          += libs/gobject-introspection/1.76.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += X11/X.org/lib/libXtst/1.2.4
 
 # ======= __END_OF_REQUIRES__ =======
Index: X11/libs/at-spi2-core/2.47.1-ppc32/Makefile
===================================================================
--- X11/libs/at-spi2-core/2.47.1-ppc32/Makefile	(revision 450)
+++ X11/libs/at-spi2-core/2.47.1-ppc32/Makefile	(revision 451)
@@ -18,7 +18,7 @@
 REQUIRES           = X11/libs/at-spi2-core/2.47.1
 REQUIRES          += app/dbus/1.13.18-ppc32
 REQUIRES          += libs/glib2/2.76.0-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += X11/X.org/lib/libXtst/1.2.4-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
Index: X11/libs/at-spi2-core/2.47.1-x86_32/Makefile
===================================================================
--- X11/libs/at-spi2-core/2.47.1-x86_32/Makefile	(revision 450)
+++ X11/libs/at-spi2-core/2.47.1-x86_32/Makefile	(revision 451)
@@ -15,7 +15,7 @@
 REQUIRES           = X11/libs/at-spi2-core/2.47.1
 REQUIRES          += app/dbus/1.13.18-x86_32
 REQUIRES          += libs/glib2/2.76.0-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += X11/X.org/lib/libXtst/1.2.4-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
Index: X11/libs/caribou/0.4.21/Makefile
===================================================================
--- X11/libs/caribou/0.4.21/Makefile	(revision 450)
+++ X11/libs/caribou/0.4.21/Makefile	(revision 451)
@@ -67,7 +67,7 @@
 REQUIRES          += X11/libs/libxklavier/5.4
 REQUIRES          += X11/libs/pygobject/3.44.1
 REQUIRES          += X11/libs/pyatspi2/2.46.0
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libgee/0.20.6
 REQUIRES          += libs/dconf/0.40.0
 
Index: X11/libs/gst-plugins-bad/1.22.0/Makefile
===================================================================
--- X11/libs/gst-plugins-bad/1.22.0/Makefile	(revision 450)
+++ X11/libs/gst-plugins-bad/1.22.0/Makefile	(revision 451)
@@ -71,7 +71,7 @@
 REQUIRES          += libs/libgudev/236
 REQUIRES          += libs/sbc/2.0
 REQUIRES          += libs/libwebp/1.2.2
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libusb/1.0.24
 REQUIRES          += media/gsm/1.0.22
 REQUIRES          += media/libass/0.17.0
Index: X11/libs/gst-plugins-bad/1.22.0-ppc32/Makefile
===================================================================
--- X11/libs/gst-plugins-bad/1.22.0-ppc32/Makefile	(revision 450)
+++ X11/libs/gst-plugins-bad/1.22.0-ppc32/Makefile	(revision 451)
@@ -27,7 +27,7 @@
 REQUIRES          += libs/libgudev/236-ppc32
 REQUIRES          += libs/sbc/2.0-ppc32
 REQUIRES          += libs/libwebp/1.2.2-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += libs/libusb/1.0.24-ppc32
 REQUIRES          += media/gsm/1.0.22-ppc32
 REQUIRES          += media/libass/0.17.0-ppc32
Index: X11/libs/gst-plugins-bad/1.22.0-x86_32/Makefile
===================================================================
--- X11/libs/gst-plugins-bad/1.22.0-x86_32/Makefile	(revision 450)
+++ X11/libs/gst-plugins-bad/1.22.0-x86_32/Makefile	(revision 451)
@@ -24,7 +24,7 @@
 REQUIRES          += libs/libgudev/236-x86_32
 REQUIRES          += libs/sbc/2.0-x86_32
 REQUIRES          += libs/libwebp/1.2.2-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += libs/libusb/1.0.24-x86_32
 REQUIRES          += media/gsm/1.0.22-x86_32
 REQUIRES          += media/libass/0.17.0-x86_32
Index: X11/libs/gst-plugins-good/1.22.0/Makefile
===================================================================
--- X11/libs/gst-plugins-good/1.22.0/Makefile	(revision 450)
+++ X11/libs/gst-plugins-good/1.22.0/Makefile	(revision 451)
@@ -77,7 +77,7 @@
 REQUIRES          += libs/libiec61883/1.2.0
 REQUIRES          += libs/libjpeg-turbo/2.1.2
 REQUIRES          += libs/libraw1394/2.1.2
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += media/flac/1.4.2
 REQUIRES          += media/jack2/1.9.21
 REQUIRES          += media/lame/3.100
Index: X11/libs/gst-plugins-good/1.22.0-ppc32/Makefile
===================================================================
--- X11/libs/gst-plugins-good/1.22.0-ppc32/Makefile	(revision 450)
+++ X11/libs/gst-plugins-good/1.22.0-ppc32/Makefile	(revision 451)
@@ -33,7 +33,7 @@
 REQUIRES          += libs/libiec61883/1.2.0-ppc32
 REQUIRES          += libs/libjpeg-turbo/2.1.2-ppc32
 REQUIRES          += libs/libraw1394/2.1.2-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += media/flac/1.4.2-ppc32
 REQUIRES          += media/jack2/1.9.21-ppc32
 REQUIRES          += media/lame/3.100-ppc32
Index: X11/libs/gst-plugins-good/1.22.0-x86_32/Makefile
===================================================================
--- X11/libs/gst-plugins-good/1.22.0-x86_32/Makefile	(revision 450)
+++ X11/libs/gst-plugins-good/1.22.0-x86_32/Makefile	(revision 451)
@@ -30,7 +30,7 @@
 REQUIRES          += libs/libiec61883/1.2.0-x86_32
 REQUIRES          += libs/libjpeg-turbo/2.1.2-x86_32
 REQUIRES          += libs/libraw1394/2.1.2-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += media/flac/1.4.2-x86_32
 REQUIRES          += media/jack2/1.9.21-x86_32
 REQUIRES          += media/lame/3.100-x86_32
Index: X11/libs/gtksourceview4/4.8.4/Makefile
===================================================================
--- X11/libs/gtksourceview4/4.8.4/Makefile	(revision 450)
+++ X11/libs/gtksourceview4/4.8.4/Makefile	(revision 451)
@@ -67,7 +67,7 @@
 REQUIRES          += X11/libs/cairo/1.17.8
 REQUIRES          += X11/libs/pango/1.50.12
 REQUIRES          += libs/pcre2/10.45
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/libs/gtksourceview5/5.8.0/Makefile
===================================================================
--- X11/libs/gtksourceview5/5.8.0/Makefile	(revision 450)
+++ X11/libs/gtksourceview5/5.8.0/Makefile	(revision 451)
@@ -66,7 +66,7 @@
 REQUIRES          += X11/libs/cairo/1.17.8
 REQUIRES          += X11/libs/pango/1.50.12
 REQUIRES          += libs/pcre2/10.45
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/libs/imagemagick/7.1.1.20/Makefile
===================================================================
--- X11/libs/imagemagick/7.1.1.20/Makefile	(revision 450)
+++ X11/libs/imagemagick/7.1.1.20/Makefile	(revision 451)
@@ -76,7 +76,7 @@
 REQUIRES          += X11/X.org/lib/libXau/1.0.11
 REQUIRES          += X11/X.org/lib/libXdmcp/1.1.4
 REQUIRES          += libs/jemalloc/5.2.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/fftw/3.3.10
 REQUIRES          += libs/libtiff/4.3.0
 
Index: X11/libs/libgsf/1.14.51/Makefile
===================================================================
--- X11/libs/libgsf/1.14.51/Makefile	(revision 450)
+++ X11/libs/libgsf/1.14.51/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = libs/gobject-introspection/1.76.1
 REQUIRES          += X11/libs/gdk-pixbuf2-xlib/2.40.2
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/zlib/1.3.1
 REQUIRES          += app/bzip2/1.0.8
 REQUIRES          += app/xz/5.6.3
Index: X11/libs/libxkbcommon/1.5.0/Makefile
===================================================================
--- X11/libs/libxkbcommon/1.5.0/Makefile	(revision 450)
+++ X11/libs/libxkbcommon/1.5.0/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = X11/X.org/data/xkeyboard-config/2.38
 REQUIRES          += Wayland/wayland/1.21.0
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/libs/libxkbcommon/1.5.0-ppc32/Makefile
===================================================================
--- X11/libs/libxkbcommon/1.5.0-ppc32/Makefile	(revision 450)
+++ X11/libs/libxkbcommon/1.5.0-ppc32/Makefile	(revision 451)
@@ -17,7 +17,7 @@
 
 REQUIRES           = X11/libs/libxkbcommon/1.5.0
 REQUIRES          += Wayland/wayland/1.21.0-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/libs/libxkbcommon/1.5.0-x86_32/Makefile
===================================================================
--- X11/libs/libxkbcommon/1.5.0-x86_32/Makefile	(revision 450)
+++ X11/libs/libxkbcommon/1.5.0-x86_32/Makefile	(revision 451)
@@ -14,7 +14,7 @@
 
 REQUIRES           = X11/libs/libxkbcommon/1.5.0
 REQUIRES          += Wayland/wayland/1.21.0-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: X11/libs/libxklavier/5.4/Makefile
===================================================================
--- X11/libs/libxklavier/5.4/Makefile	(revision 450)
+++ X11/libs/libxklavier/5.4/Makefile	(revision 451)
@@ -69,7 +69,7 @@
 REQUIRES          += X11/X.org/lib/libXau/1.0.11
 REQUIRES          += X11/X.org/lib/libXdmcp/1.1.4
 REQUIRES          += libs/iso-codes/4.13.0
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/zlib/1.3.1
 REQUIRES          += app/xz/5.6.3
 
Index: X11/libs/mesa/23.2.1/Makefile
===================================================================
--- X11/libs/mesa/23.2.1/Makefile	(revision 450)
+++ X11/libs/mesa/23.2.1/Makefile	(revision 451)
@@ -64,7 +64,7 @@
 REQUIRES           = dev/gcc/14.2.0
 endif
 REQUIRES          += libs/expat/2.6.4
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/eudev/3.2.10
 REQUIRES          += libs/elfutils/0.192
 REQUIRES          += media/libomxil-bellagio/0.9.3
Index: X11/libs/mesa/23.2.1-ppc32/Makefile
===================================================================
--- X11/libs/mesa/23.2.1-ppc32/Makefile	(revision 450)
+++ X11/libs/mesa/23.2.1-ppc32/Makefile	(revision 451)
@@ -17,7 +17,7 @@
 
 REQUIRES           = X11/libs/mesa/23.2.1
 REQUIRES          += libs/expat/2.6.4-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += libs/eudev/3.2.10-ppc32
 REQUIRES          += libs/elfutils/0.192-ppc32
 REQUIRES          += media/libomxil-bellagio/0.9.3-ppc32
Index: X11/libs/mesa/23.2.1-x86_32/Makefile
===================================================================
--- X11/libs/mesa/23.2.1-x86_32/Makefile	(revision 450)
+++ X11/libs/mesa/23.2.1-x86_32/Makefile	(revision 451)
@@ -14,7 +14,7 @@
 
 REQUIRES           = X11/libs/mesa/23.2.1
 REQUIRES          += libs/expat/2.6.4-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += libs/eudev/3.2.10-x86_32
 REQUIRES          += libs/elfutils/0.192-x86_32
 REQUIRES          += media/libomxil-bellagio/0.9.3-x86_32
Index: X11/libs/pyatspi2/2.46.0/Makefile
===================================================================
--- X11/libs/pyatspi2/2.46.0/Makefile	(revision 450)
+++ X11/libs/pyatspi2/2.46.0/Makefile	(revision 451)
@@ -63,7 +63,7 @@
 REQUIRES           = X11/libs/gtk+3/3.24.37
 REQUIRES          += X11/libs/at-spi2-core/2.47.1
 REQUIRES          += X11/libs/pygobject/3.44.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += app/dbus/1.13.18
 
 # ======= __END_OF_REQUIRES__ =======
Index: X11/libs/tracker/3.6.0/Makefile
===================================================================
--- X11/libs/tracker/3.6.0/Makefile	(revision 450)
+++ X11/libs/tracker/3.6.0/Makefile	(revision 451)
@@ -65,7 +65,7 @@
 REQUIRES          += libs/libsoup3/3.4.2
 REQUIRES          += libs/icu4c/76.1
 REQUIRES          += libs/json-glib/1.6.6
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += app/dbus/1.13.18
 REQUIRES          += app/sqlite/3.49.1.0
 
Index: X11/media/audacious-plugins/4.3/Makefile
===================================================================
--- X11/media/audacious-plugins/4.3/Makefile	(revision 450)
+++ X11/media/audacious-plugins/4.3/Makefile	(revision 451)
@@ -71,7 +71,7 @@
 REQUIRES          += media/faad2/2.10.1
 REQUIRES          += media/flac/1.4.2
 REQUIRES          += media/lame/3.100
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += net/curl/7.75.0
 
 # ======= __END_OF_REQUIRES__ =======
Index: X11/media/vlc/3.0.20/Makefile
===================================================================
--- X11/media/vlc/3.0.20/Makefile	(revision 450)
+++ X11/media/vlc/3.0.20/Makefile	(revision 451)
@@ -142,7 +142,7 @@
 REQUIRES          += libs/ncurses/6.5
 REQUIRES          += libs/libidn/1.36
 REQUIRES          += libs/libsecret/0.20.4
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libraw1394/2.1.2
 REQUIRES          += net/libupnp/1.14.18
 REQUIRES          += net/gnutls/3.8.0
Index: app/fontconfig/2.13.95/Makefile
===================================================================
--- app/fontconfig/2.13.95/Makefile	(revision 450)
+++ app/fontconfig/2.13.95/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = libs/expat/2.6.4
 REQUIRES          += libs/freetype/2.11.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: app/fontconfig/2.13.95-ppc32/Makefile
===================================================================
--- app/fontconfig/2.13.95-ppc32/Makefile	(revision 450)
+++ app/fontconfig/2.13.95-ppc32/Makefile	(revision 451)
@@ -18,7 +18,7 @@
 REQUIRES           = app/fontconfig/2.13.95
 REQUIRES          += libs/expat/2.6.4-ppc32
 REQUIRES          += libs/freetype/2.11.1-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: app/fontconfig/2.13.95-x86_32/Makefile
===================================================================
--- app/fontconfig/2.13.95-x86_32/Makefile	(revision 450)
+++ app/fontconfig/2.13.95-x86_32/Makefile	(revision 451)
@@ -15,7 +15,7 @@
 REQUIRES           = app/fontconfig/2.13.95
 REQUIRES          += libs/expat/2.6.4-x86_32
 REQUIRES          += libs/freetype/2.11.1-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: app/gettext/0.24-tools/Makefile
===================================================================
--- app/gettext/0.24-tools/Makefile	(revision 450)
+++ app/gettext/0.24-tools/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = app/gettext/0.24
 REQUIRES          += libs/libunistring/1.3
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += app/acl/2.3.2
 
 # ======= __END_OF_REQUIRES__ =======
Index: app/itstool/2.0.7/Makefile
===================================================================
--- app/itstool/2.0.7/Makefile	(revision 450)
+++ app/itstool/2.0.7/Makefile	(revision 451)
@@ -61,7 +61,7 @@
 SOURCE_REQUIRES    = sources/packages/a/itstool
 
 REQUIRES           = dev/python3/3.12.9
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += share/docbook-xml/4.5
 
 # ======= __END_OF_REQUIRES__ =======
Index: app/postgresql/14.1/Makefile
===================================================================
--- app/postgresql/14.1/Makefile	(revision 450)
+++ app/postgresql/14.1/Makefile	(revision 451)
@@ -63,7 +63,7 @@
 REQUIRES           = dev/perl/5.36.0
 REQUIRES          += dev/python3/3.12.9
 REQUIRES          += app/util-linux/2.38.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libxslt/1.1.34
 REQUIRES          += libs/readline/8.2
 REQUIRES          += libs/icu4c/76.1
Index: app/postgresql/14.1-ppc32/Makefile
===================================================================
--- app/postgresql/14.1-ppc32/Makefile	(revision 450)
+++ app/postgresql/14.1-ppc32/Makefile	(revision 451)
@@ -19,7 +19,7 @@
 REQUIRES          += dev/perl/5.36.0-ppc32
 REQUIRES          += dev/python3/3.12.9-ppc32
 REQUIRES          += app/util-linux/2.38.1-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += libs/libxslt/1.1.34-ppc32
 REQUIRES          += libs/readline/8.2-ppc32
 REQUIRES          += libs/icu4c/76.1-ppc32
Index: app/postgresql/14.1-x86_32/Makefile
===================================================================
--- app/postgresql/14.1-x86_32/Makefile	(revision 450)
+++ app/postgresql/14.1-x86_32/Makefile	(revision 451)
@@ -16,7 +16,7 @@
 REQUIRES          += dev/perl/5.36.0-x86_32
 REQUIRES          += dev/python3/3.12.9-x86_32
 REQUIRES          += app/util-linux/2.38.1-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += libs/libxslt/1.1.34-x86_32
 REQUIRES          += libs/readline/8.2-x86_32
 REQUIRES          += libs/icu4c/76.1-x86_32
Index: dev/llvm/16.0.2/Makefile
===================================================================
--- dev/llvm/16.0.2/Makefile	(revision 450)
+++ dev/llvm/16.0.2/Makefile	(revision 451)
@@ -63,7 +63,7 @@
 REQUIRES           = dev/gcc/14.2.0
 REQUIRES          += libs/libffi/3.4.7
 REQUIRES          += libs/elfutils/0.192
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libedit/20191231-3.1
 REQUIRES          += libs/ncurses/6.5
 REQUIRES          += dev/python2/2.7.18
Index: dev/llvm/16.0.2-ppc32/Makefile
===================================================================
--- dev/llvm/16.0.2-ppc32/Makefile	(revision 450)
+++ dev/llvm/16.0.2-ppc32/Makefile	(revision 451)
@@ -18,7 +18,7 @@
 REQUIRES           = dev/llvm/16.0.2
 REQUIRES          += libs/libffi/3.4.7-ppc32
 REQUIRES          += libs/elfutils/0.192-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += libs/libedit/20191231-3.1-ppc32
 REQUIRES          += libs/ncurses/6.5-ppc32
 REQUIRES          += dev/python2/2.7.18-ppc32
Index: dev/llvm/16.0.2-x86_32/Makefile
===================================================================
--- dev/llvm/16.0.2-x86_32/Makefile	(revision 450)
+++ dev/llvm/16.0.2-x86_32/Makefile	(revision 451)
@@ -15,7 +15,7 @@
 REQUIRES           = dev/llvm/16.0.2
 REQUIRES          += libs/libffi/3.4.7-x86_32
 REQUIRES          += libs/elfutils/0.192-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += libs/libedit/20191231-3.1-x86_32
 REQUIRES          += libs/ncurses/6.5-x86_32
 REQUIRES          += dev/python2/2.7.18-x86_32
Index: dev/perl-modules/perl-alien-libxml2/0.19/Makefile
===================================================================
--- dev/perl-modules/perl-alien-libxml2/0.19/Makefile	(revision 450)
+++ dev/perl-modules/perl-alien-libxml2/0.19/Makefile	(revision 451)
@@ -61,7 +61,7 @@
 SOURCE_REQUIRES    = sources/packages/d/perl-modules/CPAN/Alien-Libxml2
 
 REQUIRES           = dev/perl-modules/perl-alien-build/2.80
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: dev/perl-modules/perl-xml-libxml/2.0208/Makefile
===================================================================
--- dev/perl-modules/perl-xml-libxml/2.0208/Makefile	(revision 450)
+++ dev/perl-modules/perl-xml-libxml/2.0208/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = dev/perl-modules/perl-xml-sax/1.02
 REQUIRES          += dev/perl-modules/perl-alien-libxml2/0.19
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: libs/libarchive/3.5.2/Makefile
===================================================================
--- libs/libarchive/3.5.2/Makefile	(revision 450)
+++ libs/libarchive/3.5.2/Makefile	(revision 451)
@@ -67,7 +67,7 @@
 REQUIRES          += libs/lzo/2.10
 REQUIRES          += libs/zstd/1.5.6
 REQUIRES          += net/nettle/3.7.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: libs/libarchive/3.5.2-ppc32/Makefile
===================================================================
--- libs/libarchive/3.5.2-ppc32/Makefile	(revision 450)
+++ libs/libarchive/3.5.2-ppc32/Makefile	(revision 451)
@@ -23,7 +23,7 @@
 REQUIRES          += libs/lzo/2.10-ppc32
 REQUIRES          += libs/zstd/1.5.6-ppc32
 REQUIRES          += net/nettle/3.7.1-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: libs/libarchive/3.5.2-x86_32/Makefile
===================================================================
--- libs/libarchive/3.5.2-x86_32/Makefile	(revision 450)
+++ libs/libarchive/3.5.2-x86_32/Makefile	(revision 451)
@@ -20,7 +20,7 @@
 REQUIRES          += libs/lzo/2.10-x86_32
 REQUIRES          += libs/zstd/1.5.6-x86_32
 REQUIRES          += net/nettle/3.7.1-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: libs/libcroco/0.6.13/Makefile
===================================================================
--- libs/libcroco/0.6.13/Makefile	(revision 450)
+++ libs/libcroco/0.6.13/Makefile	(revision 451)
@@ -61,7 +61,7 @@
 SOURCE_REQUIRES    = sources/GNOME/core/libcroco
 
 REQUIRES           = libs/glib2/2.76.0
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: libs/libcroco/0.6.13-ppc32/Makefile
===================================================================
--- libs/libcroco/0.6.13-ppc32/Makefile	(revision 450)
+++ libs/libcroco/0.6.13-ppc32/Makefile	(revision 451)
@@ -17,7 +17,7 @@
 
 REQUIRES           = libs/libcroco/0.6.13
 REQUIRES          += libs/glib2/2.76.0-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: libs/libcroco/0.6.13-x86_32/Makefile
===================================================================
--- libs/libcroco/0.6.13-x86_32/Makefile	(revision 450)
+++ libs/libcroco/0.6.13-x86_32/Makefile	(revision 451)
@@ -14,7 +14,7 @@
 
 REQUIRES           = libs/libcroco/0.6.13
 REQUIRES          += libs/glib2/2.76.0-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: libs/libical/3.0.9/Makefile
===================================================================
--- libs/libical/3.0.9/Makefile	(revision 450)
+++ libs/libical/3.0.9/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = libs/icu4c/76.1
 REQUIRES          += libs/glib2/2.76.0
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += app/db/18.1.40
 
 # ======= __END_OF_REQUIRES__ =======
Index: libs/libical/3.0.9-ppc32/Makefile
===================================================================
--- libs/libical/3.0.9-ppc32/Makefile	(revision 450)
+++ libs/libical/3.0.9-ppc32/Makefile	(revision 451)
@@ -18,7 +18,7 @@
 REQUIRES           = libs/libical/3.0.9
 REQUIRES          += libs/icu4c/76.1-ppc32
 REQUIRES          += libs/glib2/2.76.0-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += app/db/18.1.40-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
Index: libs/libical/3.0.9-x86_32/Makefile
===================================================================
--- libs/libical/3.0.9-x86_32/Makefile	(revision 450)
+++ libs/libical/3.0.9-x86_32/Makefile	(revision 451)
@@ -15,7 +15,7 @@
 REQUIRES           = libs/libical/3.0.9
 REQUIRES          += libs/icu4c/76.1-x86_32
 REQUIRES          += libs/glib2/2.76.0-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += app/db/18.1.40-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
Index: libs/libsoup/2.74.3/Makefile
===================================================================
--- libs/libsoup/2.74.3/Makefile	(revision 450)
+++ libs/libsoup/2.74.3/Makefile	(revision 451)
@@ -65,7 +65,7 @@
 REQUIRES          += libs/gobject-introspection/1.76.1
 REQUIRES          += libs/brotli/1.0.9
 REQUIRES          += libs/libpsl/0.21.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += net/nghttp2/1.43.0
 REQUIRES          += net/krb5/1.19.1
 REQUIRES          += dev/vala/0.56.6
Index: libs/libsoup/2.74.3-ppc32/Makefile
===================================================================
--- libs/libsoup/2.74.3-ppc32/Makefile	(revision 450)
+++ libs/libsoup/2.74.3-ppc32/Makefile	(revision 451)
@@ -20,7 +20,7 @@
 REQUIRES          += libs/glib-networking/2.76.0-ppc32
 REQUIRES          += libs/brotli/1.0.9-ppc32
 REQUIRES          += libs/libpsl/0.21.1-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += net/nghttp2/1.43.0-ppc32
 REQUIRES          += net/krb5/1.19.1-ppc32
 
Index: libs/libsoup/2.74.3-x86_32/Makefile
===================================================================
--- libs/libsoup/2.74.3-x86_32/Makefile	(revision 450)
+++ libs/libsoup/2.74.3-x86_32/Makefile	(revision 451)
@@ -17,7 +17,7 @@
 REQUIRES          += libs/glib-networking/2.76.0-x86_32
 REQUIRES          += libs/brotli/1.0.9-x86_32
 REQUIRES          += libs/libpsl/0.21.1-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += net/nghttp2/1.43.0-x86_32
 REQUIRES          += net/krb5/1.19.1-x86_32
 
Index: libs/libxml2/2.11.4-ppc32/libxml2-x32-pkg-description.in
===================================================================
--- libs/libxml2/2.11.4-ppc32/libxml2-x32-pkg-description.in	(revision 450)
+++ libs/libxml2/2.11.4-ppc32/libxml2-x32-pkg-description.in	(nonexistent)
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.  Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in.  You must
-# make exactly 11 lines for the formatting to be correct.  It's also
-# customary to leave one space after the ':'.
-
-           |-----handy-ruler------------------------------------------------------|
-libxml2-x32: libxml2-x32 @VERSION@ (XML parser library)
-libxml2-x32:
-libxml2-x32: Libxml2 is the XML C parser library and toolkit. XML itself is a
-libxml2-x32: metalanguage to design markup languages - i.e. a text language where
-libxml2-x32: structures are added to the content using extra "markup" information
-libxml2-x32: enclosed between angle brackets. HTML is the most well-known markup
-libxml2-x32: language. Though the library is written in C, a variety of language
-libxml2-x32: bindings make it available in other environments.
-libxml2-x32:
-libxml2-x32:
-libxml2-x32:
Index: libs/libxml2/2.11.4-ppc32/PATCHES
===================================================================
--- libs/libxml2/2.11.4-ppc32/PATCHES	(revision 450)
+++ libs/libxml2/2.11.4-ppc32/PATCHES	(nonexistent)
@@ -1,2 +0,0 @@
-
-../../../sources/packages/l/libxml2/patches/libxml2-2.11.4-python-unicode.patch -p0
Index: libs/libxml2/2.11.4-ppc32/libxml2-x32-pkg-install.sh
===================================================================
--- libs/libxml2/2.11.4-ppc32/libxml2-x32-pkg-install.sh	(revision 450)
+++ libs/libxml2/2.11.4-ppc32/libxml2-x32-pkg-install.sh	(nonexistent)
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-# arg 1:  the new package version
-pre_install() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-post_install() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-# arg 2:  the old package version
-pre_update() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-# arg 2:  the old package version
-post_update() {
-  post_install
-}
-
-# arg 1:  the old package version
-pre_remove() {
-  /bin/true
-}
-
-# arg 1:  the old package version
-post_remove() {
-  /bin/true
-}
-
-
-operation=$1
-shift
-
-$operation $*

Property changes on: libs/libxml2/2.11.4-ppc32/libxml2-x32-pkg-install.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: libs/libxml2/2.11.4-ppc32/Makefile
===================================================================
--- libs/libxml2/2.11.4-ppc32/Makefile	(revision 450)
+++ libs/libxml2/2.11.4-ppc32/Makefile	(nonexistent)
@@ -1,278 +0,0 @@
-
-COMPONENT_TARGETS  = $(HARDWARE_S824L)
-COMPONENT_TARGETS += $(HARDWARE_VESNIN)
-COMPONENT_TARGETS += $(HARDWARE_TL2WK2)
-COMPONENT_TARGETS += $(HARDWARE_TL2SV2)
-
-NEED_ABS_PATH      = true
-COMPONENT_IS_3PP   = true
-
-CREATE_PPC32_PACKAGE = true
-
-
-include ../../../build-system/constants.mk
-
-
-SOURCE_REQUIRES    = sources/packages/l/libxml2
-
-REQUIRES           = libs/libxml2/2.11.4
-REQUIRES          += libs/zlib/1.3.1-ppc32
-REQUIRES          += app/xz/5.6.3-ppc32
-REQUIRES          += libs/icu4c/76.1-ppc32
-REQUIRES          += libs/readline/8.2-ppc32
-REQUIRES          += dev/python2/2.7.18-ppc32
-REQUIRES          += dev/python3/3.12.9-ppc32
-
-# ======= __END_OF_REQUIRES__ =======
-
-version            = 2.11.4
-tar_xz_archive     = $(SRC_PACKAGE_PATH)/packages/l/libxml2/libxml2-$(version).tar.xz
-SRC_ARCHIVE        = $(tar_xz_archive)
-SRC_DIR            = $(TARGET_BUILD_DIR)/libxml2-$(version)
-src_dir_name       = libxml2-$(version)
-src_done           = $(TARGET_BUILD_DIR)/.source_done
-
-PATCHES = PATCHES
-
-build2_dir         = $(TARGET_BUILD_DIR)/build2
-build3_dir         = $(TARGET_BUILD_DIR)/build3
-build_target       = $(TARGET_BUILD_DIR)/.build_done
-install_target     = $(TARGET_BUILD_DIR)/.install_done
-
-
-####### Targets
-
-PKG_GROUP = libs
-#
-# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
-#
-LIBXML2_32_PKG_NAME                = libxml2-x32
-LIBXML2_32_PKG_VERSION             = 2.11.4
-LIBXML2_32_PKG_ARCH                = $(PKGARCH)
-LIBXML2_32_PKG_DISTRO_NAME         = $(DISTRO_NAME)
-LIBXML2_32_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
-LIBXML2_32_PKG_GROUP               = $(PKG_GROUP)
-###                                 |---handy-ruler-------------------------------|
-LIBXML2_32_PKG_SHORT_DESCRIPTION   = XML parser library
-LIBXML2_32_PKG_URL                 = $(BUG_URL)
-LIBXML2_32_PKG_LICENSE             = custom
-LIBXML2_32_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-pkg-description
-LIBXML2_32_PKG_DESCRIPTION_FILE_IN = $(LIBXML2_32_PKG_NAME)-pkg-description.in
-LIBXML2_32_PKG_INSTALL_SCRIPT      = $(LIBXML2_32_PKG_NAME)-pkg-install.sh
-
-LIBXML2_32_PKG   = $(CURDIR)/$(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-package
-
-pkg_basename     = $(LIBXML2_32_PKG_NAME)-$(LIBXML2_32_PKG_VERSION)-$(LIBXML2_32_PKG_ARCH)-$(LIBXML2_32_PKG_DISTRO_NAME)-$(LIBXML2_32_PKG_DISTRO_VERSION)
-
-pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
-pkg_certificate  = $(call cert-name,$(pkg_archive))
-pkg_signature    = $(call sign-name,$(pkg_archive))
-pkg_description  = $(call desc-name,$(pkg_archive))
-products         = $(call pkg-files,$(pkg_archive))
-
-BUILD_TARGETS    = $(build_target)
-BUILD_TARGETS   += $(install_target)
-
-PRODUCT_TARGETS  = $(products)
-
-ROOTFS_TARGETS   = $(pkg_archive)
-
-
-include ../../../build-system/core.mk
-
-
-env_sysroot  = DESTDIR=$(LIBXML2_32_PKG)
-
-
-extra_configure_switches  = --libdir=/usr/lib$(MULTILIB_PPC32_SUFFIX)
-extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
-extra_configure_switches += --infodir=/usr/share/info
-extra_configure_switches += --mandir=/usr/share/man
-
-extra_configure_switches += --bindir=/usr/bin/32
-
-extra_configure_switches += --disable-dependency-tracking
-
-ifeq ($(__ENABLE_STATIC__),yes)
-extra_configure_switches += --enable-static=yes
-else
-extra_configure_switches += --enable-static=no
-endif
-extra_configure_switches += --enable-shared=yes
-
-
-PYTHON2_VERSION = 2.7
-PYTHON3_VERSION = 3.12
-
-
-WITH_PYTHON2         = $(PYTHON2)
-python2_environment  = PYTHON=$(PYTHON2)
-python2_environment += PYTHON_VERSION=$(PYTHON2_VERSION)
-python2_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages
-python2_environment += PYTHON_INCLUDES=$(TARGET_DEST_DIR)/usr/include/python$(PYTHON2_VERSION)
-python2_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON2_VERSION)-config --ldflags)'
-
-
-WITH_PYTHON3         = $(PYTHON3)
-python3_environment  = PYTHON=$(PYTHON3)
-python3_environment += PYTHON_VERSION=$(PYTHON3_VERSION)
-python3_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages
-python3_environment += PYTHON_INCLUDES='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --includes)'
-python3_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --ldflags)'
-
-
-CFLAGS += -Wno-maybe-uninitialized -Wno-format-overflow -Wno-cast-align
-
-TARGET_BIN_RPATH = /lib$(MULTILIB_PPC32_SUFFIX):/usr/lib$(MULTILIB_PPC32_SUFFIX)
-TARGET_LIB_RPATH = /lib$(MULTILIB_PPC32_SUFFIX):/usr/lib$(MULTILIB_PPC32_SUFFIX):/usr/lib/../lib$(MULTILIB_PPC32_SUFFIX)
-
-
-####### Dependencies
-
-$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
-	$(UNPACK_SRC_ARCHIVE)
-	$(APPLY_PATCHES)
-	@touch $@
-
-$(build_target): $(src_done)
-	@mkdir -p $(build2_dir)
-	# ======= Build libxml2 with Python2 =======
-	@cd $(build2_dir) && \
-	  $(BUILD_ENVIRONMENT) $(python2_environment) ../$(src_dir_name)/configure \
-	  --prefix=/usr                \
-	  --build=$(BUILD)             \
-	  --host=$(TARGET32)           \
-	  --with-python=$(WITH_PYTHON2) \
-	  $(extra_configure_switches)
-	@( cd $(build2_dir) ; \
-	   for file in `find . -type f -name 'Makefile'` ; do \
-	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
-	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
-	   done ; \
-	 )
-	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python2_environment)
-	@mkdir -p $(build3_dir)
-	# ======= Build libxml2 with Python3 =======
-	@cd $(build3_dir) && \
-	  $(BUILD_ENVIRONMENT) $(python3_environment) ../$(src_dir_name)/configure \
-	  --prefix=/usr                \
-	  --build=$(BUILD)             \
-	  --host=$(TARGET32)           \
-	  --with-python=$(WITH_PYTHON3) \
-	  $(extra_configure_switches)
-	@( cd $(build3_dir) ; \
-	   for file in `find . -type f -name 'Makefile'` ; do \
-	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
-	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
-	   done ; \
-	 )
-	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python3_environment)
-	@touch $@
-
-$(install_target): $(build_target)
-	@mkdir -p $(LIBXML2_32_PKG)
-	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
-	@( cd $(LIBXML2_32_PKG) ; \
-	   rm -rf bin include share lib$(MULTILIB_PPC32_SUFFIX)/{cmake,pkgconfig} lib$(MULTILIB_PPC32_SUFFIX)/lib* ; \
-	 )
-	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
-	@rm -rf $(LIBXML2_32_PKG)/usr/include
-	@rm -rf $(LIBXML2_32_PKG)/usr/share
-	# ======= remove toolchain path from xml2-config script =======
-	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g"               xml2-config ; \
-	   sed -i "s,lib64,lib$(MULTILIB_PPC32_SUFFIX),g" xml2-config ; \
-	 )
-	# ======= remove toolchain path from target libtool *.la files =======
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX) ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2.la  ; \
-	 )
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
-	 )
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
-	 )
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX)/pkgconfig ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml-2.0.pc ; \
-	 )
-	# ======= Install the same to $(TARGET_DEST_DIR) =======
-	$(call install-into-devenv, $(LIBXML2_32_PKG))
-	# ======= tune libtool *.la search path to the target destination for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX) ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2.la  ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2.la  ; \
-	 )
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
-	 )
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
-	 )
-	# ======= tune pkg-config *.pc search path to the target destination for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX)/pkgconfig ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g" libxml-2.0.pc \
-	 )
-	# ======= tune xml2-config script for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/bin/32 ; \
-	   sed -i "s,=/usr,=$(TARGET_DEST_DIR)/usr,g"                 xml2-config ; \
-	   sed -i "s,prefix/lib,prefix/lib$(MULTILIB_PPC32_SUFFIX),g" xml2-config ; \
-	   sed -i "s,L/usr,L$(TARGET_DEST_DIR)/usr,g"                 xml2-config ; \
-	 )
-	# ======= Strip binaries =======
-	@( cd $(LIBXML2_32_PKG) ; \
-	   find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
-	   find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
-	 )
-ifeq ($(__ENABLE_STATIC__),yes)
-	@( cd $(LIBXML2_32_PKG) ; \
-	   find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs $(STRIP) -g 2> /dev/null ; \
-	 )
-endif
-ifneq ($(PATCHELF),)
-	# ======= Set RPATH/RUNPATH for target binaries =======
-	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
-	   for file in `find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
-	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
-	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
-	       $(PATCHELF) --set-rpath $(TARGET_BIN_RPATH) $$file 1> /dev/null 2> /dev/null ; \
-	     fi ; \
-	   done ; \
-	 )
-	# ======= Set RPATH/RUNPATH for target shared objects =======
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX) ; \
-	   for file in `find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
-	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
-	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
-	       $(PATCHELF) --set-rpath $(TARGET_LIB_RPATH) $$file 1> /dev/null 2> /dev/null ; \
-	     fi ; \
-	   done ; \
-	 )
-endif
-	@touch $@
-
-$(LIBXML2_32_PKG_DESCRIPTION_FILE): $(LIBXML2_32_PKG_DESCRIPTION_FILE_IN)
-	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
-
-$(pkg_certificate) : $(pkg_archive) ;
-$(pkg_signature)   : $(pkg_archive) ;
-$(pkg_description) : $(pkg_archive) ;
-
-$(pkg_archive): $(install_target) $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG_INSTALL_SCRIPT)
-	@cp $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG)/.DESCRIPTION
-	@cp $(LIBXML2_32_PKG_INSTALL_SCRIPT) $(LIBXML2_32_PKG)/.INSTALL
-	@$(BUILD_PKG_REQUIRES) $(LIBXML2_32_PKG)/.REQUIRES
-	@echo "pkgname=$(LIBXML2_32_PKG_NAME)"                            >  $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "pkgver=$(LIBXML2_32_PKG_VERSION)"                          >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "arch=$(LIBXML2_32_PKG_ARCH)"                               >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "distroname=$(LIBXML2_32_PKG_DISTRO_NAME)"                  >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "distrover=$(LIBXML2_32_PKG_DISTRO_VERSION)"                >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "group=$(LIBXML2_32_PKG_GROUP)"                             >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "short_description=\"$(LIBXML2_32_PKG_SHORT_DESCRIPTION)\"" >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "url=$(LIBXML2_32_PKG_URL)"                                 >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "license=$(LIBXML2_32_PKG_LICENSE)"                         >> $(LIBXML2_32_PKG)/.PKGINFO
-	@$(PSEUDO) sh -c "cd $(LIBXML2_32_PKG) && \
-	                  chown -R root:root . && \
-	                  $(MAKE_PACKAGE) -J --linkadd=yes $(GNUPG_OPTIONS) -m -d .. ."
Index: libs/libxml2/2.11.4-ppc32
===================================================================
--- libs/libxml2/2.11.4-ppc32	(revision 450)
+++ libs/libxml2/2.11.4-ppc32	(nonexistent)

Property changes on: libs/libxml2/2.11.4-ppc32
___________________________________________________________________
Deleted: svn:ignore
## -1,74 +0,0 ##
-
-# install dir
-dist
-
-# Target build dirs
-.a1x-newlib
-.a2x-newlib
-.at91sam7s-newlib
-
-.build-machine
-
-.a1x-glibc
-.a2x-glibc
-.h3-glibc
-.h5-glibc
-.i586-glibc
-.i686-glibc
-.imx6-glibc
-.jz47xx-glibc
-.makefile
-.am335x-glibc
-.omap543x-glibc
-.p5600-glibc
-.power8-glibc
-.power8le-glibc
-.power9-glibc
-.power9le-glibc
-.m1000-glibc
-.riscv64-glibc
-.rk328x-glibc
-.rk33xx-glibc
-.rk339x-glibc
-.rk358x-glibc
-.s8xx-glibc
-.s9xx-glibc
-.x86_64-glibc
-
-# Hidden files (each file)
-.makefile
-.dist
-.rootfs
-
-# src & hw requires
-.src_requires
-.src_requires_depend
-.requires
-.requires_depend
-
-# Tarballs
-*.gz
-*.bz2
-*.lz
-*.xz
-*.tgz
-*.txz
-
-# Signatures
-*.asc
-*.sig
-*.sign
-*.sha1sum
-
-# Patches
-*.patch
-
-# Descriptions
-*.dsc
-*.txt
-
-# Default linux config files
-*.defconfig
-
-# backup copies
-*~
Index: libs/libxml2/2.11.4-x86_32/libxml2-x32-pkg-description.in
===================================================================
--- libs/libxml2/2.11.4-x86_32/libxml2-x32-pkg-description.in	(revision 450)
+++ libs/libxml2/2.11.4-x86_32/libxml2-x32-pkg-description.in	(nonexistent)
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.  Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in.  You must
-# make exactly 11 lines for the formatting to be correct.  It's also
-# customary to leave one space after the ':'.
-
-           |-----handy-ruler------------------------------------------------------|
-libxml2-x32: libxml2-x32 @VERSION@ (XML parser library)
-libxml2-x32:
-libxml2-x32: Libxml2 is the XML C parser library and toolkit. XML itself is a
-libxml2-x32: metalanguage to design markup languages - i.e. a text language where
-libxml2-x32: structures are added to the content using extra "markup" information
-libxml2-x32: enclosed between angle brackets. HTML is the most well-known markup
-libxml2-x32: language. Though the library is written in C, a variety of language
-libxml2-x32: bindings make it available in other environments.
-libxml2-x32:
-libxml2-x32:
-libxml2-x32:
Index: libs/libxml2/2.11.4-x86_32/PATCHES
===================================================================
--- libs/libxml2/2.11.4-x86_32/PATCHES	(revision 450)
+++ libs/libxml2/2.11.4-x86_32/PATCHES	(nonexistent)
@@ -1,2 +0,0 @@
-
-../../../sources/packages/l/libxml2/patches/libxml2-2.11.4-python-unicode.patch -p0
Index: libs/libxml2/2.11.4-x86_32/libxml2-x32-pkg-install.sh
===================================================================
--- libs/libxml2/2.11.4-x86_32/libxml2-x32-pkg-install.sh	(revision 450)
+++ libs/libxml2/2.11.4-x86_32/libxml2-x32-pkg-install.sh	(nonexistent)
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-# arg 1:  the new package version
-pre_install() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-post_install() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-# arg 2:  the old package version
-pre_update() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-# arg 2:  the old package version
-post_update() {
-  post_install
-}
-
-# arg 1:  the old package version
-pre_remove() {
-  /bin/true
-}
-
-# arg 1:  the old package version
-post_remove() {
-  /bin/true
-}
-
-
-operation=$1
-shift
-
-$operation $*

Property changes on: libs/libxml2/2.11.4-x86_32/libxml2-x32-pkg-install.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: libs/libxml2/2.11.4-x86_32/Makefile
===================================================================
--- libs/libxml2/2.11.4-x86_32/Makefile	(revision 450)
+++ libs/libxml2/2.11.4-x86_32/Makefile	(nonexistent)
@@ -1,275 +0,0 @@
-
-COMPONENT_TARGETS  = $(HARDWARE_INTEL_PC64)
-
-NEED_ABS_PATH      = true
-COMPONENT_IS_3PP   = true
-
-CREATE_X86_32_PACKAGE = true
-
-
-include ../../../build-system/constants.mk
-
-
-SOURCE_REQUIRES    = sources/packages/l/libxml2
-
-REQUIRES           = libs/libxml2/2.11.4
-REQUIRES          += libs/zlib/1.3.1-x86_32
-REQUIRES          += app/xz/5.6.3-x86_32
-REQUIRES          += libs/icu4c/76.1-x86_32
-REQUIRES          += libs/readline/8.2-x86_32
-REQUIRES          += dev/python2/2.7.18-x86_32
-REQUIRES          += dev/python3/3.12.9-x86_32
-
-# ======= __END_OF_REQUIRES__ =======
-
-version            = 2.11.4
-tar_xz_archive     = $(SRC_PACKAGE_PATH)/packages/l/libxml2/libxml2-$(version).tar.xz
-SRC_ARCHIVE        = $(tar_xz_archive)
-SRC_DIR            = $(TARGET_BUILD_DIR)/libxml2-$(version)
-src_dir_name       = libxml2-$(version)
-src_done           = $(TARGET_BUILD_DIR)/.source_done
-
-PATCHES = PATCHES
-
-build2_dir         = $(TARGET_BUILD_DIR)/build2
-build3_dir         = $(TARGET_BUILD_DIR)/build3
-build_target       = $(TARGET_BUILD_DIR)/.build_done
-install_target     = $(TARGET_BUILD_DIR)/.install_done
-
-
-####### Targets
-
-PKG_GROUP = libs
-#
-# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
-#
-LIBXML2_32_PKG_NAME                = libxml2-x32
-LIBXML2_32_PKG_VERSION             = 2.11.4
-LIBXML2_32_PKG_ARCH                = $(PKGARCH)
-LIBXML2_32_PKG_DISTRO_NAME         = $(DISTRO_NAME)
-LIBXML2_32_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
-LIBXML2_32_PKG_GROUP               = $(PKG_GROUP)
-###                                 |---handy-ruler-------------------------------|
-LIBXML2_32_PKG_SHORT_DESCRIPTION   = XML parser library
-LIBXML2_32_PKG_URL                 = $(BUG_URL)
-LIBXML2_32_PKG_LICENSE             = custom
-LIBXML2_32_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-pkg-description
-LIBXML2_32_PKG_DESCRIPTION_FILE_IN = $(LIBXML2_32_PKG_NAME)-pkg-description.in
-LIBXML2_32_PKG_INSTALL_SCRIPT      = $(LIBXML2_32_PKG_NAME)-pkg-install.sh
-
-LIBXML2_32_PKG   = $(CURDIR)/$(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-package
-
-pkg_basename     = $(LIBXML2_32_PKG_NAME)-$(LIBXML2_32_PKG_VERSION)-$(LIBXML2_32_PKG_ARCH)-$(LIBXML2_32_PKG_DISTRO_NAME)-$(LIBXML2_32_PKG_DISTRO_VERSION)
-
-pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
-pkg_certificate  = $(call cert-name,$(pkg_archive))
-pkg_signature    = $(call sign-name,$(pkg_archive))
-pkg_description  = $(call desc-name,$(pkg_archive))
-products         = $(call pkg-files,$(pkg_archive))
-
-BUILD_TARGETS    = $(build_target)
-BUILD_TARGETS   += $(install_target)
-
-PRODUCT_TARGETS  = $(products)
-
-ROOTFS_TARGETS   = $(pkg_archive)
-
-
-include ../../../build-system/core.mk
-
-
-env_sysroot  = DESTDIR=$(LIBXML2_32_PKG)
-
-
-extra_configure_switches  = --libdir=/usr/lib$(MULTILIB_X86_32_SUFFIX)
-extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
-extra_configure_switches += --infodir=/usr/share/info
-extra_configure_switches += --mandir=/usr/share/man
-
-extra_configure_switches += --bindir=/usr/bin/32
-
-extra_configure_switches += --disable-dependency-tracking
-
-ifeq ($(__ENABLE_STATIC__),yes)
-extra_configure_switches += --enable-static=yes
-else
-extra_configure_switches += --enable-static=no
-endif
-extra_configure_switches += --enable-shared=yes
-
-
-PYTHON2_VERSION = 2.7
-PYTHON3_VERSION = 3.12
-
-
-WITH_PYTHON2         = $(PYTHON2)
-python2_environment  = PYTHON=$(PYTHON2)
-python2_environment += PYTHON_VERSION=$(PYTHON2_VERSION)
-python2_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages
-python2_environment += PYTHON_INCLUDES=$(TARGET_DEST_DIR)/usr/include/python$(PYTHON2_VERSION)
-python2_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON2_VERSION)-config --ldflags)'
-
-
-WITH_PYTHON3         = $(PYTHON3)
-python3_environment  = PYTHON=$(PYTHON3)
-python3_environment += PYTHON_VERSION=$(PYTHON3_VERSION)
-python3_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages
-python3_environment += PYTHON_INCLUDES='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --includes)'
-python3_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --ldflags)'
-
-
-CFLAGS += -Wno-maybe-uninitialized -Wno-format-overflow -Wno-cast-align
-
-TARGET_BIN_RPATH = /lib$(MULTILIB_X86_32_SUFFIX):/usr/lib$(MULTILIB_X86_32_SUFFIX)
-TARGET_LIB_RPATH = /lib$(MULTILIB_X86_32_SUFFIX):/usr/lib$(MULTILIB_X86_32_SUFFIX):/usr/lib/../lib$(MULTILIB_X86_32_SUFFIX)
-
-
-####### Dependencies
-
-$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
-	$(UNPACK_SRC_ARCHIVE)
-	$(APPLY_PATCHES)
-	@touch $@
-
-$(build_target): $(src_done)
-	@mkdir -p $(build2_dir)
-	# ======= Build libxml2 with Python2 =======
-	@cd $(build2_dir) && \
-	  $(BUILD_ENVIRONMENT) $(python2_environment) ../$(src_dir_name)/configure \
-	  --prefix=/usr                \
-	  --build=$(BUILD)             \
-	  --host=$(TARGET32)           \
-	  --with-python=$(WITH_PYTHON2) \
-	  $(extra_configure_switches)
-	@( cd $(build2_dir) ; \
-	   for file in `find . -type f -name 'Makefile'` ; do \
-	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
-	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
-	   done ; \
-	 )
-	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python2_environment)
-	@mkdir -p $(build3_dir)
-	# ======= Build libxml2 with Python3 =======
-	@cd $(build3_dir) && \
-	  $(BUILD_ENVIRONMENT) $(python3_environment) ../$(src_dir_name)/configure \
-	  --prefix=/usr                \
-	  --build=$(BUILD)             \
-	  --host=$(TARGET32)           \
-	  --with-python=$(WITH_PYTHON3) \
-	  $(extra_configure_switches)
-	@( cd $(build3_dir) ; \
-	   for file in `find . -type f -name 'Makefile'` ; do \
-	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
-	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
-	   done ; \
-	 )
-	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python3_environment)
-	@touch $@
-
-$(install_target): $(build_target)
-	@mkdir -p $(LIBXML2_32_PKG)
-	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
-	@( cd $(LIBXML2_32_PKG) ; \
-	   rm -rf bin include share lib$(MULTILIB_X86_32_SUFFIX)/{cmake,pkgconfig} lib$(MULTILIB_X86_32_SUFFIX)/lib* ; \
-	 )
-	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
-	@rm -rf $(LIBXML2_32_PKG)/usr/include
-	@rm -rf $(LIBXML2_32_PKG)/usr/share
-	# ======= remove toolchain path from xml2-config script =======
-	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g"                xml2-config ; \
-	   sed -i "s,lib64,lib$(MULTILIB_X86_32_SUFFIX),g" xml2-config ; \
-	 )
-	# ======= remove toolchain path from target libtool *.la files =======
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX) ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2.la  ; \
-	 )
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
-	 )
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
-	 )
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX)/pkgconfig ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml-2.0.pc ; \
-	 )
-	# ======= Install the same to $(TARGET_DEST_DIR) =======
-	$(call install-into-devenv, $(LIBXML2_32_PKG))
-	# ======= tune libtool *.la search path to the target destination for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX) ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2.la  ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2.la  ; \
-	 )
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
-	 )
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
-	 )
-	# ======= tune pkg-config *.pc search path to the target destination for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX)/pkgconfig ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g" libxml-2.0.pc \
-	 )
-	# ======= tune xml2-config script for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/bin/32 ; \
-	   sed -i "s,=/usr,=$(TARGET_DEST_DIR)/usr,g"                  xml2-config ; \
-	   sed -i "s,prefix/lib,prefix/lib$(MULTILIB_X86_32_SUFFIX),g" xml2-config ; \
-	   sed -i "s,L/usr,L$(TARGET_DEST_DIR)/usr,g"                  xml2-config ; \
-	 )
-	# ======= Strip binaries =======
-	@( cd $(LIBXML2_32_PKG) ; \
-	   find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
-	   find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
-	 )
-ifeq ($(__ENABLE_STATIC__),yes)
-	@( cd $(LIBXML2_32_PKG) ; \
-	   find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs $(STRIP) -g 2> /dev/null ; \
-	 )
-endif
-ifneq ($(PATCHELF),)
-	# ======= Set RPATH/RUNPATH for target binaries =======
-	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
-	   for file in `find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
-	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
-	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
-	       $(PATCHELF) --set-rpath $(TARGET_BIN_RPATH) $$file 1> /dev/null 2> /dev/null ; \
-	     fi ; \
-	   done ; \
-	 )
-	# ======= Set RPATH/RUNPATH for target shared objects =======
-	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX) ; \
-	   for file in `find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
-	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
-	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
-	       $(PATCHELF) --set-rpath $(TARGET_LIB_RPATH) $$file 1> /dev/null 2> /dev/null ; \
-	     fi ; \
-	   done ; \
-	 )
-endif
-	@touch $@
-
-$(LIBXML2_32_PKG_DESCRIPTION_FILE): $(LIBXML2_32_PKG_DESCRIPTION_FILE_IN)
-	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
-
-$(pkg_certificate) : $(pkg_archive) ;
-$(pkg_signature)   : $(pkg_archive) ;
-$(pkg_description) : $(pkg_archive) ;
-
-$(pkg_archive): $(install_target) $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG_INSTALL_SCRIPT)
-	@cp $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG)/.DESCRIPTION
-	@cp $(LIBXML2_32_PKG_INSTALL_SCRIPT) $(LIBXML2_32_PKG)/.INSTALL
-	@$(BUILD_PKG_REQUIRES) $(LIBXML2_32_PKG)/.REQUIRES
-	@echo "pkgname=$(LIBXML2_32_PKG_NAME)"                            >  $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "pkgver=$(LIBXML2_32_PKG_VERSION)"                          >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "arch=$(LIBXML2_32_PKG_ARCH)"                               >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "distroname=$(LIBXML2_32_PKG_DISTRO_NAME)"                  >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "distrover=$(LIBXML2_32_PKG_DISTRO_VERSION)"                >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "group=$(LIBXML2_32_PKG_GROUP)"                             >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "short_description=\"$(LIBXML2_32_PKG_SHORT_DESCRIPTION)\"" >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "url=$(LIBXML2_32_PKG_URL)"                                 >> $(LIBXML2_32_PKG)/.PKGINFO ; \
-	 echo "license=$(LIBXML2_32_PKG_LICENSE)"                         >> $(LIBXML2_32_PKG)/.PKGINFO
-	@$(PSEUDO) sh -c "cd $(LIBXML2_32_PKG) && \
-	                  chown -R root:root . && \
-	                  $(MAKE_PACKAGE) -J --linkadd=yes $(GNUPG_OPTIONS) -m -d .. ."
Index: libs/libxml2/2.11.4-x86_32
===================================================================
--- libs/libxml2/2.11.4-x86_32	(revision 450)
+++ libs/libxml2/2.11.4-x86_32	(nonexistent)

Property changes on: libs/libxml2/2.11.4-x86_32
___________________________________________________________________
Deleted: svn:ignore
## -1,74 +0,0 ##
-
-# install dir
-dist
-
-# Target build dirs
-.a1x-newlib
-.a2x-newlib
-.at91sam7s-newlib
-
-.build-machine
-
-.a1x-glibc
-.a2x-glibc
-.h3-glibc
-.h5-glibc
-.i586-glibc
-.i686-glibc
-.imx6-glibc
-.jz47xx-glibc
-.makefile
-.am335x-glibc
-.omap543x-glibc
-.p5600-glibc
-.power8-glibc
-.power8le-glibc
-.power9-glibc
-.power9le-glibc
-.m1000-glibc
-.riscv64-glibc
-.rk328x-glibc
-.rk33xx-glibc
-.rk339x-glibc
-.rk358x-glibc
-.s8xx-glibc
-.s9xx-glibc
-.x86_64-glibc
-
-# Hidden files (each file)
-.makefile
-.dist
-.rootfs
-
-# src & hw requires
-.src_requires
-.src_requires_depend
-.requires
-.requires_depend
-
-# Tarballs
-*.gz
-*.bz2
-*.lz
-*.xz
-*.tgz
-*.txz
-
-# Signatures
-*.asc
-*.sig
-*.sign
-*.sha1sum
-
-# Patches
-*.patch
-
-# Descriptions
-*.dsc
-*.txt
-
-# Default linux config files
-*.defconfig
-
-# backup copies
-*~
Index: libs/libxml2/2.11.4/libxml2-pkg-description.in
===================================================================
--- libs/libxml2/2.11.4/libxml2-pkg-description.in	(revision 450)
+++ libs/libxml2/2.11.4/libxml2-pkg-description.in	(nonexistent)
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.  Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in.  You must
-# make exactly 11 lines for the formatting to be correct.  It's also
-# customary to leave one space after the ':'.
-
-       |-----handy-ruler------------------------------------------------------|
-libxml2: libxml2 @VERSION@ (XML parser library)
-libxml2:
-libxml2: Libxml2 is the XML C parser library and toolkit. XML itself is a
-libxml2: metalanguage to design markup languages - i.e. a text language where
-libxml2: structures are added to the content using extra "markup" information
-libxml2: enclosed between angle brackets. HTML is the most well-known markup
-libxml2: language. Though the library is written in C, a variety of language
-libxml2: bindings make it available in other environments.
-libxml2:
-libxml2:
-libxml2:
Index: libs/libxml2/2.11.4/PATCHES
===================================================================
--- libs/libxml2/2.11.4/PATCHES	(revision 450)
+++ libs/libxml2/2.11.4/PATCHES	(nonexistent)
@@ -1,2 +0,0 @@
-
-../../../sources/packages/l/libxml2/patches/libxml2-2.11.4-python-unicode.patch -p0
Index: libs/libxml2/2.11.4/libxml2-pkg-install.sh
===================================================================
--- libs/libxml2/2.11.4/libxml2-pkg-install.sh	(revision 450)
+++ libs/libxml2/2.11.4/libxml2-pkg-install.sh	(nonexistent)
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-# arg 1:  the new package version
-pre_install() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-post_install() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-# arg 2:  the old package version
-pre_update() {
-  /bin/true
-}
-
-# arg 1:  the new package version
-# arg 2:  the old package version
-post_update() {
-  post_install
-}
-
-# arg 1:  the old package version
-pre_remove() {
-  /bin/true
-}
-
-# arg 1:  the old package version
-post_remove() {
-  /bin/true
-}
-
-
-operation=$1
-shift
-
-$operation $*

Property changes on: libs/libxml2/2.11.4/libxml2-pkg-install.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: libs/libxml2/2.11.4/Makefile
===================================================================
--- libs/libxml2/2.11.4/Makefile	(revision 450)
+++ libs/libxml2/2.11.4/Makefile	(nonexistent)
@@ -1,347 +0,0 @@
-
-COMPONENT_TARGETS  = $(HARDWARE_INTEL_PC32)
-COMPONENT_TARGETS += $(HARDWARE_INTEL_PC64)
-COMPONENT_TARGETS += $(HARDWARE_EBOX_3350DX2)
-COMPONENT_TARGETS += $(HARDWARE_CB1X)
-COMPONENT_TARGETS += $(HARDWARE_CB2X)
-COMPONENT_TARGETS += $(HARDWARE_CB3X)
-COMPONENT_TARGETS += $(HARDWARE_ORANGE_PP2E)
-COMPONENT_TARGETS += $(HARDWARE_NANOPI_NEO)
-COMPONENT_TARGETS += $(HARDWARE_ORANGE_PP)
-COMPONENT_TARGETS += $(HARDWARE_ORANGE_PL2)
-COMPONENT_TARGETS += $(HARDWARE_ORANGE_PI5)
-COMPONENT_TARGETS += $(HARDWARE_ORANGE_PI5B)
-COMPONENT_TARGETS += $(HARDWARE_ORANGE_PI5P)
-COMPONENT_TARGETS += $(HARDWARE_ROCK_5B)
-COMPONENT_TARGETS += $(HARDWARE_WECHIP_TX6)
-COMPONENT_TARGETS += $(HARDWARE_REPKA_PI3)
-COMPONENT_TARGETS += $(HARDWARE_FFRK3288)
-COMPONENT_TARGETS += $(HARDWARE_POIN2)
-COMPONENT_TARGETS += $(HARDWARE_RK3328_CC)
-COMPONENT_TARGETS += $(HARDWARE_KHADAS_EDGE)
-COMPONENT_TARGETS += $(HARDWARE_LEEZ_P710)
-COMPONENT_TARGETS += $(HARDWARE_M201)
-COMPONENT_TARGETS += $(HARDWARE_MXV)
-COMPONENT_TARGETS += $(HARDWARE_P201)
-COMPONENT_TARGETS += $(HARDWARE_NEXBOX_A95X)
-COMPONENT_TARGETS += $(HARDWARE_ODROID_C2)
-COMPONENT_TARGETS += $(HARDWARE_P212)
-COMPONENT_TARGETS += $(HARDWARE_KHADAS_VIM)
-COMPONENT_TARGETS += $(HARDWARE_Q201)
-COMPONENT_TARGETS += $(HARDWARE_ENYBOX_X2)
-COMPONENT_TARGETS += $(HARDWARE_KHADAS_VIM2)
-COMPONENT_TARGETS += $(HARDWARE_NIT6Q)
-COMPONENT_TARGETS += $(HARDWARE_OKMX6DL_C)
-COMPONENT_TARGETS += $(HARDWARE_OKMX6Q_C)
-COMPONENT_TARGETS += $(HARDWARE_BONE_BLACK)
-COMPONENT_TARGETS += $(HARDWARE_OMAP5UEVM)
-COMPONENT_TARGETS += $(HARDWARE_DRA7XXEVM)
-COMPONENT_TARGETS += $(HARDWARE_CI20)
-COMPONENT_TARGETS += $(HARDWARE_BAIKAL_T1)
-COMPONENT_TARGETS += $(HARDWARE_BAIKAL_M1)
-COMPONENT_TARGETS += $(HARDWARE_S824L)
-COMPONENT_TARGETS += $(HARDWARE_VESNIN)
-COMPONENT_TARGETS += $(HARDWARE_S824L_LSB)
-COMPONENT_TARGETS += $(HARDWARE_VESNIN_LSB)
-COMPONENT_TARGETS += $(HARDWARE_TL2WK2)
-COMPONENT_TARGETS += $(HARDWARE_TL2SV2)
-COMPONENT_TARGETS += $(HARDWARE_TL2WK2_LSB)
-COMPONENT_TARGETS += $(HARDWARE_TL2SV2_LSB)
-COMPONENT_TARGETS += $(HARDWARE_VISIONFIVE2)
-COMPONENT_TARGETS += $(HARDWARE_SIFIVE_U740)
-
-
-NEED_ABS_PATH      = true
-COMPONENT_IS_3PP   = true
-
-
-include ../../../build-system/constants.mk
-
-
-SOURCE_REQUIRES    = sources/packages/l/libxml2
-
-REQUIRES           = libs/zlib/1.3.1
-REQUIRES          += app/xz/5.6.3
-REQUIRES          += libs/icu4c/76.1
-REQUIRES          += libs/readline/8.2
-REQUIRES          += dev/python2/2.7.18
-REQUIRES          += dev/python3/3.12.9
-
-# ======= __END_OF_REQUIRES__ =======
-
-version            = 2.11.4
-tar_xz_archive     = $(SRC_PACKAGE_PATH)/packages/l/libxml2/libxml2-$(version).tar.xz
-SRC_ARCHIVE        = $(tar_xz_archive)
-SRC_DIR            = $(TARGET_BUILD_DIR)/libxml2-$(version)
-src_dir_name       = libxml2-$(version)
-src_done           = $(TARGET_BUILD_DIR)/.source_done
-
-PATCHES = PATCHES
-
-build2_dir         = $(TARGET_BUILD_DIR)/build2
-build3_dir         = $(TARGET_BUILD_DIR)/build3
-build_target       = $(TARGET_BUILD_DIR)/.build_done
-install_target     = $(TARGET_BUILD_DIR)/.install_done
-
-
-####### Targets
-
-PKG_GROUP = libs
-
-#
-# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
-#
-LIBXML2_PKG_NAME                = libxml2
-LIBXML2_PKG_VERSION             = 2.11.4
-LIBXML2_PKG_ARCH                = $(PKGARCH)
-LIBXML2_PKG_DISTRO_NAME         = $(DISTRO_NAME)
-LIBXML2_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
-LIBXML2_PKG_GROUP               = $(PKG_GROUP)
-###                              |---handy-ruler-------------------------------|
-LIBXML2_PKG_SHORT_DESCRIPTION   = XML parser library
-LIBXML2_PKG_URL                 = $(BUG_URL)
-LIBXML2_PKG_LICENSE             = custom
-LIBXML2_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(LIBXML2_PKG_NAME)-pkg-description
-LIBXML2_PKG_DESCRIPTION_FILE_IN = $(LIBXML2_PKG_NAME)-pkg-description.in
-LIBXML2_PKG_INSTALL_SCRIPT      = $(LIBXML2_PKG_NAME)-pkg-install.sh
-
-LIBXML2_PKG      = $(CURDIR)/$(TARGET_BUILD_DIR)/$(LIBXML2_PKG_NAME)-package
-
-pkg_basename     = $(LIBXML2_PKG_NAME)-$(LIBXML2_PKG_VERSION)-$(LIBXML2_PKG_ARCH)-$(LIBXML2_PKG_DISTRO_NAME)-$(LIBXML2_PKG_DISTRO_VERSION)
-
-pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
-pkg_certificate  = $(call cert-name,$(pkg_archive))
-pkg_signature    = $(call sign-name,$(pkg_archive))
-pkg_description  = $(call desc-name,$(pkg_archive))
-products         = $(call pkg-files,$(pkg_archive))
-
-BUILD_TARGETS    = $(build_target)
-BUILD_TARGETS   += $(install_target)
-
-PRODUCT_TARGETS  = $(products)
-
-ROOTFS_TARGETS   = $(pkg_archive)
-
-
-include ../../../build-system/core.mk
-
-
-env_sysroot = DESTDIR=$(LIBXML2_PKG)
-
-
-extra_configure_switches  = --libdir=/usr/lib$(LIBSUFFIX)
-extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
-extra_configure_switches += --infodir=/usr/share/info
-extra_configure_switches += --mandir=/usr/share/man
-extra_configure_switches += --disable-dependency-tracking
-
-ifeq ($(__ENABLE_STATIC__),yes)
-extra_configure_switches += --enable-static=yes
-else
-extra_configure_switches += --enable-static=no
-endif
-extra_configure_switches += --enable-shared=yes
-
-
-PYTHON2_VERSION = 2.7
-PYTHON3_VERSION = 3.12
-
-
-WITH_PYTHON2         = $(PYTHON2)
-python2_environment  = PYTHON=$(PYTHON2)
-python2_environment += PYTHON_VERSION=$(PYTHON2_VERSION)
-python2_environment += PYTHON_SITE_PACKAGES=/usr/lib$(LIBSUFFIX)/python$(PYTHON2_VERSION)/site-packages
-python2_environment += PYTHON_INCLUDES=$(TARGET_DEST_DIR)/usr/include/python$(PYTHON2_VERSION)
-python2_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/python$(PYTHON2_VERSION)-config --ldflags)'
-
-
-WITH_PYTHON3         = $(PYTHON3)
-python3_environment  = PYTHON=$(PYTHON3)
-python3_environment += PYTHON_VERSION=$(PYTHON3_VERSION)
-python3_environment += PYTHON_SITE_PACKAGES=/usr/lib$(LIBSUFFIX)/python$(PYTHON3_VERSION)/site-packages
-python3_environment += PYTHON_INCLUDES='$(shell $(TARGET_DEST_DIR)/usr/bin/python$(PYTHON3_VERSION)-config --includes)'
-python3_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/python$(PYTHON3_VERSION)-config --ldflags)'
-
-
-CFLAGS += -Wno-maybe-uninitialized -Wno-format-overflow -Wno-cast-align
-
-TARGET_BIN_RPATH = /lib$(LIBSUFFIX):/usr/lib$(LIBSUFFIX)
-TARGET_LIB_RPATH = /lib$(LIBSUFFIX):/usr/lib$(LIBSUFFIX):/usr/lib/../lib$(LIBSUFFIX)
-
-
-####### Dependencies
-
-$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
-	$(UNPACK_SRC_ARCHIVE)
-	$(APPLY_PATCHES)
-	@touch $@
-
-$(build_target): $(src_done)
-	@mkdir -p $(build2_dir)
-	# ======= Build libxml2 with Python2 =======
-	@cd $(build2_dir) && \
-	  $(BUILD_ENVIRONMENT) $(python2_environment) ../$(src_dir_name)/configure \
-	  --prefix=/usr                \
-	  --build=$(BUILD)             \
-	  --host=$(TARGET)             \
-	  --with-python=$(WITH_PYTHON2) \
-	  $(extra_configure_switches)
-	@( cd $(build2_dir) ; \
-	   for file in `find . -type f -name 'Makefile'` ; do \
-	     sed -i '/^pyexecdir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
-	     sed -i '/^pythondir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
-	   done ; \
-	 )
-	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python2_environment)
-	@mkdir -p $(build3_dir)
-	# ======= Build libxml2 with Python3 =======
-	@cd $(build3_dir) && \
-	  $(BUILD_ENVIRONMENT) $(python3_environment) ../$(src_dir_name)/configure \
-	  --prefix=/usr                \
-	  --build=$(BUILD)             \
-	  --host=$(TARGET)             \
-	  --with-python=$(WITH_PYTHON3) \
-	  $(extra_configure_switches)
-	@( cd $(build3_dir) ; \
-	   for file in `find . -type f -name 'Makefile'` ; do \
-	     sed -i '/^pyexecdir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
-	     sed -i '/^pythondir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
-	   done ; \
-	 )
-	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python3_environment)
-	@touch $@
-
-$(install_target): $(build_target)
-	@mkdir -p $(LIBXML2_PKG)
-	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
-	@( cd $(LIBXML2_PKG) ; \
-	   rm -rf bin include share lib$(LIBSUFFIX)/{cmake,pkgconfig} lib$(LIBSUFFIX)/lib* ; \
-	 )
-	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
-	# ======= Install Documentation =======
-	@if [ -d $(LIBXML2_PKG)/usr/share/man ]; then \
-	  ( cd $(LIBXML2_PKG)/usr/share/man ; \
-	    for manpagedir in `find . -type d -name "man*"` ; do \
-	      ( cd $$manpagedir ; \
-	        for eachpage in `find . -type l -maxdepth 1` ; do \
-	          ln -s `readlink $$eachpage`.gz $$eachpage.gz ; \
-	          rm $$eachpage ; \
-	        done ; \
-	        gzip -9 *.?  ; \
-	      ) \
-	    done \
-	  ) \
-	 fi
-	@mkdir -p $(LIBXML2_PKG)/usr/doc/$(src_dir_name)
-	@cp -a $(SRC_DIR)/Copyright \
-	       $(LIBXML2_PKG)/usr/doc/$(src_dir_name)
-	@mkdir -p $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name)
-	@( cd $(SRC_DIR) ; \
-	   cp -a Copyright INSTALL README.md \
-	         $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name) ; \
-	 )
-	@ln -sf ../../gtk-doc/html/libxml2 $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name)/html
-	@( cd $(SRC_DIR) ; \
-	   if [ -r NEWS ]; then \
-	     DOCSDIR=`echo $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name)` ; \
-	     cat NEWS | head -n 1000 > $$DOCSDIR/NEWS ; \
-	     touch -r NEWS $$DOCSDIR/NEWS ; \
-	   fi \
-	 )
-	# ======= remove toolchain path from xml2-config script =======
-	@( cd $(LIBXML2_PKG)/usr/bin ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" xml2-config ; \
-	 )
-	# ======= remove toolchain path from target libtool *.la files =======
-	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX) ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2.la  ; \
-	 )
-	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
-	 )
-	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
-	 )
-	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX)/pkgconfig ; \
-	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml-2.0.pc  ; \
-	 )
-	# ======= Install the same to $(TARGET_DEST_DIR) =======
-	$(call install-into-devenv, $(LIBXML2_PKG))
-	# ======= tune libtool *.la search path to the target destination for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX) ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2.la  ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2.la  ; \
-	 )
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
-	 )
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
-	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
-	 )
-	# ======= tune pkg-config *.pc search path to the target destination for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX)/pkgconfig ; \
-	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g" libxml-2.0.pc ; \
-	 )
-	# ======= tune xml2-config script for development =======
-	@( cd $(TARGET_DEST_DIR)/usr/bin ; \
-	   sed -i "s,=/usr,=$(TARGET_DEST_DIR)/usr,g"     xml2-config ; \
-	   sed -i "s,prefix/lib,prefix/lib$(LIBSUFFIX),g" xml2-config ; \
-	   sed -i "s,L/usr,L$(TARGET_DEST_DIR)/usr,g"     xml2-config ; \
-	 )
-	# ======= Strip binaries =======
-	@( cd $(LIBXML2_PKG) ; \
-	   find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
-	   find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
-	 )
-ifeq ($(__ENABLE_STATIC__),yes)
-	@( cd $(LIBXML2_PKG) ; \
-	   find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs $(STRIP) -g 2> /dev/null ; \
-	 )
-endif
-ifneq ($(PATCHELF),)
-	# ======= Set RPATH/RUNPATH for target binaries =======
-	@( cd $(LIBXML2_PKG)/usr/bin ; \
-	   for file in `find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
-	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
-	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
-	       $(PATCHELF) --set-rpath $(TARGET_BIN_RPATH) $$file 1> /dev/null 2> /dev/null ; \
-	     fi ; \
-	   done ; \
-	 )
-	# ======= Set RPATH/RUNPATH for target shared objects =======
-	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX) ; \
-	   for file in `find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
-	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
-	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
-	       $(PATCHELF) --set-rpath $(TARGET_LIB_RPATH) $$file 1> /dev/null 2> /dev/null ; \
-	     fi ; \
-	   done ; \
-	 )
-endif
-	@touch $@
-
-$(LIBXML2_PKG_DESCRIPTION_FILE): $(LIBXML2_PKG_DESCRIPTION_FILE_IN)
-	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
-
-$(pkg_certificate) : $(pkg_archive) ;
-$(pkg_signature)   : $(pkg_archive) ;
-$(pkg_description) : $(pkg_archive) ;
-
-$(pkg_archive): $(install_target) $(LIBXML2_PKG_DESCRIPTION_FILE) $(LIBXML2_PKG_INSTALL_SCRIPT)
-	@cp $(LIBXML2_PKG_DESCRIPTION_FILE) $(LIBXML2_PKG)/.DESCRIPTION
-	@cp $(LIBXML2_PKG_INSTALL_SCRIPT) $(LIBXML2_PKG)/.INSTALL
-	@$(BUILD_PKG_REQUIRES) $(LIBXML2_PKG)/.REQUIRES
-	@echo "pkgname=$(LIBXML2_PKG_NAME)"                            >  $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "pkgver=$(LIBXML2_PKG_VERSION)"                          >> $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "arch=$(LIBXML2_PKG_ARCH)"                               >> $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "distroname=$(LIBXML2_PKG_DISTRO_NAME)"                  >> $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "distrover=$(LIBXML2_PKG_DISTRO_VERSION)"                >> $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "group=$(LIBXML2_PKG_GROUP)"                             >> $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "short_description=\"$(LIBXML2_PKG_SHORT_DESCRIPTION)\"" >> $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "url=$(LIBXML2_PKG_URL)"                                 >> $(LIBXML2_PKG)/.PKGINFO ; \
-	 echo "license=$(LIBXML2_PKG_LICENSE)"                         >> $(LIBXML2_PKG)/.PKGINFO
-	@$(PSEUDO) sh -c "cd $(LIBXML2_PKG) && \
-	                  chown -R root:root . && \
-	                  $(MAKE_PACKAGE) -J --linkadd=yes $(GNUPG_OPTIONS) -m -d .. ."
Index: libs/libxml2/2.11.4
===================================================================
--- libs/libxml2/2.11.4	(revision 450)
+++ libs/libxml2/2.11.4	(nonexistent)

Property changes on: libs/libxml2/2.11.4
___________________________________________________________________
Deleted: svn:ignore
## -1,74 +0,0 ##
-
-# install dir
-dist
-
-# Target build dirs
-.a1x-newlib
-.a2x-newlib
-.at91sam7s-newlib
-
-.build-machine
-
-.a1x-glibc
-.a2x-glibc
-.h3-glibc
-.h5-glibc
-.i586-glibc
-.i686-glibc
-.imx6-glibc
-.jz47xx-glibc
-.makefile
-.am335x-glibc
-.omap543x-glibc
-.p5600-glibc
-.power8-glibc
-.power8le-glibc
-.power9-glibc
-.power9le-glibc
-.m1000-glibc
-.riscv64-glibc
-.rk328x-glibc
-.rk33xx-glibc
-.rk339x-glibc
-.rk358x-glibc
-.s8xx-glibc
-.s9xx-glibc
-.x86_64-glibc
-
-# Hidden files (each file)
-.makefile
-.dist
-.rootfs
-
-# src & hw requires
-.src_requires
-.src_requires_depend
-.requires
-.requires_depend
-
-# Tarballs
-*.gz
-*.bz2
-*.lz
-*.xz
-*.tgz
-*.txz
-
-# Signatures
-*.asc
-*.sig
-*.sign
-*.sha1sum
-
-# Patches
-*.patch
-
-# Descriptions
-*.dsc
-*.txt
-
-# Default linux config files
-*.defconfig
-
-# backup copies
-*~
Index: libs/libxml2/2.13.6/Makefile
===================================================================
--- libs/libxml2/2.13.6/Makefile	(nonexistent)
+++ libs/libxml2/2.13.6/Makefile	(revision 451)
@@ -0,0 +1,347 @@
+
+COMPONENT_TARGETS  = $(HARDWARE_INTEL_PC32)
+COMPONENT_TARGETS += $(HARDWARE_INTEL_PC64)
+COMPONENT_TARGETS += $(HARDWARE_EBOX_3350DX2)
+COMPONENT_TARGETS += $(HARDWARE_CB1X)
+COMPONENT_TARGETS += $(HARDWARE_CB2X)
+COMPONENT_TARGETS += $(HARDWARE_CB3X)
+COMPONENT_TARGETS += $(HARDWARE_ORANGE_PP2E)
+COMPONENT_TARGETS += $(HARDWARE_NANOPI_NEO)
+COMPONENT_TARGETS += $(HARDWARE_ORANGE_PP)
+COMPONENT_TARGETS += $(HARDWARE_ORANGE_PL2)
+COMPONENT_TARGETS += $(HARDWARE_ORANGE_PI5)
+COMPONENT_TARGETS += $(HARDWARE_ORANGE_PI5B)
+COMPONENT_TARGETS += $(HARDWARE_ORANGE_PI5P)
+COMPONENT_TARGETS += $(HARDWARE_ROCK_5B)
+COMPONENT_TARGETS += $(HARDWARE_WECHIP_TX6)
+COMPONENT_TARGETS += $(HARDWARE_REPKA_PI3)
+COMPONENT_TARGETS += $(HARDWARE_FFRK3288)
+COMPONENT_TARGETS += $(HARDWARE_POIN2)
+COMPONENT_TARGETS += $(HARDWARE_RK3328_CC)
+COMPONENT_TARGETS += $(HARDWARE_KHADAS_EDGE)
+COMPONENT_TARGETS += $(HARDWARE_LEEZ_P710)
+COMPONENT_TARGETS += $(HARDWARE_M201)
+COMPONENT_TARGETS += $(HARDWARE_MXV)
+COMPONENT_TARGETS += $(HARDWARE_P201)
+COMPONENT_TARGETS += $(HARDWARE_NEXBOX_A95X)
+COMPONENT_TARGETS += $(HARDWARE_ODROID_C2)
+COMPONENT_TARGETS += $(HARDWARE_P212)
+COMPONENT_TARGETS += $(HARDWARE_KHADAS_VIM)
+COMPONENT_TARGETS += $(HARDWARE_Q201)
+COMPONENT_TARGETS += $(HARDWARE_ENYBOX_X2)
+COMPONENT_TARGETS += $(HARDWARE_KHADAS_VIM2)
+COMPONENT_TARGETS += $(HARDWARE_NIT6Q)
+COMPONENT_TARGETS += $(HARDWARE_OKMX6DL_C)
+COMPONENT_TARGETS += $(HARDWARE_OKMX6Q_C)
+COMPONENT_TARGETS += $(HARDWARE_BONE_BLACK)
+COMPONENT_TARGETS += $(HARDWARE_OMAP5UEVM)
+COMPONENT_TARGETS += $(HARDWARE_DRA7XXEVM)
+COMPONENT_TARGETS += $(HARDWARE_CI20)
+COMPONENT_TARGETS += $(HARDWARE_BAIKAL_T1)
+COMPONENT_TARGETS += $(HARDWARE_BAIKAL_M1)
+COMPONENT_TARGETS += $(HARDWARE_S824L)
+COMPONENT_TARGETS += $(HARDWARE_VESNIN)
+COMPONENT_TARGETS += $(HARDWARE_S824L_LSB)
+COMPONENT_TARGETS += $(HARDWARE_VESNIN_LSB)
+COMPONENT_TARGETS += $(HARDWARE_TL2WK2)
+COMPONENT_TARGETS += $(HARDWARE_TL2SV2)
+COMPONENT_TARGETS += $(HARDWARE_TL2WK2_LSB)
+COMPONENT_TARGETS += $(HARDWARE_TL2SV2_LSB)
+COMPONENT_TARGETS += $(HARDWARE_VISIONFIVE2)
+COMPONENT_TARGETS += $(HARDWARE_SIFIVE_U740)
+
+
+NEED_ABS_PATH      = true
+COMPONENT_IS_3PP   = true
+
+
+include ../../../build-system/constants.mk
+
+
+SOURCE_REQUIRES    = sources/packages/l/libxml2
+
+REQUIRES           = libs/zlib/1.3.1
+REQUIRES          += app/xz/5.6.3
+REQUIRES          += libs/icu4c/76.1
+REQUIRES          += libs/readline/8.2
+REQUIRES          += dev/python2/2.7.18
+REQUIRES          += dev/python3/3.12.9
+
+# ======= __END_OF_REQUIRES__ =======
+
+version            = 2.13.6
+tar_xz_archive     = $(SRC_PACKAGE_PATH)/packages/l/libxml2/libxml2-$(version).tar.xz
+SRC_ARCHIVE        = $(tar_xz_archive)
+SRC_DIR            = $(TARGET_BUILD_DIR)/libxml2-$(version)
+src_dir_name       = libxml2-$(version)
+src_done           = $(TARGET_BUILD_DIR)/.source_done
+
+PATCHES = PATCHES
+
+build2_dir         = $(TARGET_BUILD_DIR)/build2
+build3_dir         = $(TARGET_BUILD_DIR)/build3
+build_target       = $(TARGET_BUILD_DIR)/.build_done
+install_target     = $(TARGET_BUILD_DIR)/.install_done
+
+
+####### Targets
+
+PKG_GROUP = libs
+
+#
+# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
+#
+LIBXML2_PKG_NAME                = libxml2
+LIBXML2_PKG_VERSION             = 2.13.6
+LIBXML2_PKG_ARCH                = $(PKGARCH)
+LIBXML2_PKG_DISTRO_NAME         = $(DISTRO_NAME)
+LIBXML2_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
+LIBXML2_PKG_GROUP               = $(PKG_GROUP)
+###                              |---handy-ruler-------------------------------|
+LIBXML2_PKG_SHORT_DESCRIPTION   = XML parser library
+LIBXML2_PKG_URL                 = $(BUG_URL)
+LIBXML2_PKG_LICENSE             = custom
+LIBXML2_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(LIBXML2_PKG_NAME)-pkg-description
+LIBXML2_PKG_DESCRIPTION_FILE_IN = $(LIBXML2_PKG_NAME)-pkg-description.in
+LIBXML2_PKG_INSTALL_SCRIPT      = $(LIBXML2_PKG_NAME)-pkg-install.sh
+
+LIBXML2_PKG      = $(CURDIR)/$(TARGET_BUILD_DIR)/$(LIBXML2_PKG_NAME)-package
+
+pkg_basename     = $(LIBXML2_PKG_NAME)-$(LIBXML2_PKG_VERSION)-$(LIBXML2_PKG_ARCH)-$(LIBXML2_PKG_DISTRO_NAME)-$(LIBXML2_PKG_DISTRO_VERSION)
+
+pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
+pkg_certificate  = $(call cert-name,$(pkg_archive))
+pkg_signature    = $(call sign-name,$(pkg_archive))
+pkg_description  = $(call desc-name,$(pkg_archive))
+products         = $(call pkg-files,$(pkg_archive))
+
+BUILD_TARGETS    = $(build_target)
+BUILD_TARGETS   += $(install_target)
+
+PRODUCT_TARGETS  = $(products)
+
+ROOTFS_TARGETS   = $(pkg_archive)
+
+
+include ../../../build-system/core.mk
+
+
+env_sysroot = DESTDIR=$(LIBXML2_PKG)
+
+
+extra_configure_switches  = --libdir=/usr/lib$(LIBSUFFIX)
+extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
+extra_configure_switches += --infodir=/usr/share/info
+extra_configure_switches += --mandir=/usr/share/man
+extra_configure_switches += --disable-dependency-tracking
+
+ifeq ($(__ENABLE_STATIC__),yes)
+extra_configure_switches += --enable-static=yes
+else
+extra_configure_switches += --enable-static=no
+endif
+extra_configure_switches += --enable-shared=yes
+
+
+PYTHON2_VERSION = 2.7
+PYTHON3_VERSION = 3.12
+
+
+WITH_PYTHON2         = $(PYTHON2)
+python2_environment  = PYTHON=$(PYTHON2)
+python2_environment += PYTHON_VERSION=$(PYTHON2_VERSION)
+python2_environment += PYTHON_SITE_PACKAGES=/usr/lib$(LIBSUFFIX)/python$(PYTHON2_VERSION)/site-packages
+python2_environment += PYTHON_INCLUDES=$(TARGET_DEST_DIR)/usr/include/python$(PYTHON2_VERSION)
+python2_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/python$(PYTHON2_VERSION)-config --ldflags)'
+
+
+WITH_PYTHON3         = $(PYTHON3)
+python3_environment  = PYTHON=$(PYTHON3)
+python3_environment += PYTHON_VERSION=$(PYTHON3_VERSION)
+python3_environment += PYTHON_SITE_PACKAGES=/usr/lib$(LIBSUFFIX)/python$(PYTHON3_VERSION)/site-packages
+python3_environment += PYTHON_INCLUDES='$(shell $(TARGET_DEST_DIR)/usr/bin/python$(PYTHON3_VERSION)-config --includes)'
+python3_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/python$(PYTHON3_VERSION)-config --ldflags)'
+
+
+CFLAGS += -Wno-maybe-uninitialized -Wno-format-overflow -Wno-cast-align -Wno-pointer-sign
+
+TARGET_BIN_RPATH = /lib$(LIBSUFFIX):/usr/lib$(LIBSUFFIX)
+TARGET_LIB_RPATH = /lib$(LIBSUFFIX):/usr/lib$(LIBSUFFIX):/usr/lib/../lib$(LIBSUFFIX)
+
+
+####### Dependencies
+
+$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
+	$(UNPACK_SRC_ARCHIVE)
+	$(APPLY_PATCHES)
+	@touch $@
+
+$(build_target): $(src_done)
+	@mkdir -p $(build2_dir)
+	# ======= Build libxml2 with Python2 =======
+	@cd $(build2_dir) && \
+	  $(BUILD_ENVIRONMENT) $(python2_environment) ../$(src_dir_name)/configure \
+	  --prefix=/usr                \
+	  --build=$(BUILD)             \
+	  --host=$(TARGET)             \
+	  --with-python=$(WITH_PYTHON2) \
+	  $(extra_configure_switches)
+	@( cd $(build2_dir) ; \
+	   for file in `find . -type f -name 'Makefile'` ; do \
+	     sed -i '/^pyexecdir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
+	     sed -i '/^pythondir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
+	   done ; \
+	 )
+	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python2_environment)
+	@mkdir -p $(build3_dir)
+	# ======= Build libxml2 with Python3 =======
+	@cd $(build3_dir) && \
+	  $(BUILD_ENVIRONMENT) $(python3_environment) ../$(src_dir_name)/configure \
+	  --prefix=/usr                \
+	  --build=$(BUILD)             \
+	  --host=$(TARGET)             \
+	  --with-python=$(WITH_PYTHON3) \
+	  $(extra_configure_switches)
+	@( cd $(build3_dir) ; \
+	   for file in `find . -type f -name 'Makefile'` ; do \
+	     sed -i '/^pyexecdir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
+	     sed -i '/^pythondir =/s,lib,lib$(LIBSUFFIX),' $${file} ; \
+	   done ; \
+	 )
+	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python3_environment)
+	@touch $@
+
+$(install_target): $(build_target)
+	@mkdir -p $(LIBXML2_PKG)
+	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	@( cd $(LIBXML2_PKG) ; \
+	   rm -rf bin include share lib$(LIBSUFFIX)/{cmake,pkgconfig} lib$(LIBSUFFIX)/lib* ; \
+	 )
+	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	# ======= Install Documentation =======
+	@if [ -d $(LIBXML2_PKG)/usr/share/man ]; then \
+	  ( cd $(LIBXML2_PKG)/usr/share/man ; \
+	    for manpagedir in `find . -type d -name "man*"` ; do \
+	      ( cd $$manpagedir ; \
+	        for eachpage in `find . -type l -maxdepth 1` ; do \
+	          ln -s `readlink $$eachpage`.gz $$eachpage.gz ; \
+	          rm $$eachpage ; \
+	        done ; \
+	        gzip -9 *.?  ; \
+	      ) \
+	    done \
+	  ) \
+	 fi
+	@mkdir -p $(LIBXML2_PKG)/usr/doc/$(src_dir_name)
+	@cp -a $(SRC_DIR)/Copyright \
+	       $(LIBXML2_PKG)/usr/doc/$(src_dir_name)
+	@mkdir -p $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name)
+	@( cd $(SRC_DIR) ; \
+	   cp -a Copyright README.md \
+	         $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name) ; \
+	 )
+	@ln -sf ../../gtk-doc/html/libxml2 $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name)/html
+	@( cd $(SRC_DIR) ; \
+	   if [ -r NEWS ]; then \
+	     DOCSDIR=`echo $(LIBXML2_PKG)/usr/share/doc/$(src_dir_name)` ; \
+	     cat NEWS | head -n 1000 > $$DOCSDIR/NEWS ; \
+	     touch -r NEWS $$DOCSDIR/NEWS ; \
+	   fi \
+	 )
+	# ======= remove toolchain path from xml2-config script =======
+	@( cd $(LIBXML2_PKG)/usr/bin ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" xml2-config ; \
+	 )
+	# ======= remove toolchain path from target libtool *.la files =======
+	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX) ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2.la  ; \
+	 )
+	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
+	 )
+	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
+	 )
+	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX)/pkgconfig ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml-2.0.pc  ; \
+	 )
+	# ======= Install the same to $(TARGET_DEST_DIR) =======
+	$(call install-into-devenv, $(LIBXML2_PKG))
+	# ======= tune libtool *.la search path to the target destination for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX) ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2.la  ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2.la  ; \
+	 )
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
+	 )
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
+	 )
+	# ======= tune pkg-config *.pc search path to the target destination for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(LIBSUFFIX)/pkgconfig ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g" libxml-2.0.pc ; \
+	 )
+	# ======= tune xml2-config script for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/bin ; \
+	   sed -i "s,=/usr,=$(TARGET_DEST_DIR)/usr,g"     xml2-config ; \
+	   sed -i "s,prefix/lib,prefix/lib$(LIBSUFFIX),g" xml2-config ; \
+	   sed -i "s,L/usr,L$(TARGET_DEST_DIR)/usr,g"     xml2-config ; \
+	 )
+	# ======= Strip binaries =======
+	@( cd $(LIBXML2_PKG) ; \
+	   find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
+	   find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
+	 )
+ifeq ($(__ENABLE_STATIC__),yes)
+	@( cd $(LIBXML2_PKG) ; \
+	   find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs $(STRIP) -g 2> /dev/null ; \
+	 )
+endif
+ifneq ($(PATCHELF),)
+	# ======= Set RPATH/RUNPATH for target binaries =======
+	@( cd $(LIBXML2_PKG)/usr/bin ; \
+	   for file in `find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
+	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
+	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
+	       $(PATCHELF) --set-rpath $(TARGET_BIN_RPATH) $$file 1> /dev/null 2> /dev/null ; \
+	     fi ; \
+	   done ; \
+	 )
+	# ======= Set RPATH/RUNPATH for target shared objects =======
+	@( cd $(LIBXML2_PKG)/usr/lib$(LIBSUFFIX) ; \
+	   for file in `find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
+	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
+	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
+	       $(PATCHELF) --set-rpath $(TARGET_LIB_RPATH) $$file 1> /dev/null 2> /dev/null ; \
+	     fi ; \
+	   done ; \
+	 )
+endif
+	@touch $@
+
+$(LIBXML2_PKG_DESCRIPTION_FILE): $(LIBXML2_PKG_DESCRIPTION_FILE_IN)
+	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
+
+$(pkg_certificate) : $(pkg_archive) ;
+$(pkg_signature)   : $(pkg_archive) ;
+$(pkg_description) : $(pkg_archive) ;
+
+$(pkg_archive): $(install_target) $(LIBXML2_PKG_DESCRIPTION_FILE) $(LIBXML2_PKG_INSTALL_SCRIPT)
+	@cp $(LIBXML2_PKG_DESCRIPTION_FILE) $(LIBXML2_PKG)/.DESCRIPTION
+	@cp $(LIBXML2_PKG_INSTALL_SCRIPT) $(LIBXML2_PKG)/.INSTALL
+	@$(BUILD_PKG_REQUIRES) $(LIBXML2_PKG)/.REQUIRES
+	@echo "pkgname=$(LIBXML2_PKG_NAME)"                            >  $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "pkgver=$(LIBXML2_PKG_VERSION)"                          >> $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "arch=$(LIBXML2_PKG_ARCH)"                               >> $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "distroname=$(LIBXML2_PKG_DISTRO_NAME)"                  >> $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "distrover=$(LIBXML2_PKG_DISTRO_VERSION)"                >> $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "group=$(LIBXML2_PKG_GROUP)"                             >> $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "short_description=\"$(LIBXML2_PKG_SHORT_DESCRIPTION)\"" >> $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "url=$(LIBXML2_PKG_URL)"                                 >> $(LIBXML2_PKG)/.PKGINFO ; \
+	 echo "license=$(LIBXML2_PKG_LICENSE)"                         >> $(LIBXML2_PKG)/.PKGINFO
+	@$(PSEUDO) sh -c "cd $(LIBXML2_PKG) && \
+	                  chown -R root:root . && \
+	                  $(MAKE_PACKAGE) -J --linkadd=yes $(GNUPG_OPTIONS) -m -d .. ."
Index: libs/libxml2/2.13.6/PATCHES
===================================================================
--- libs/libxml2/2.13.6/PATCHES	(nonexistent)
+++ libs/libxml2/2.13.6/PATCHES	(revision 451)
@@ -0,0 +1,2 @@
+
+../../../sources/packages/l/libxml2/patches/libxml2-2.13.6-python-unicode.patch -p0
Index: libs/libxml2/2.13.6/libxml2-pkg-description.in
===================================================================
--- libs/libxml2/2.13.6/libxml2-pkg-description.in	(nonexistent)
+++ libs/libxml2/2.13.6/libxml2-pkg-description.in	(revision 451)
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.  Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in.  You must
+# make exactly 11 lines for the formatting to be correct.  It's also
+# customary to leave one space after the ':'.
+
+       |-----handy-ruler------------------------------------------------------|
+libxml2: libxml2 @VERSION@ (XML parser library)
+libxml2:
+libxml2: Libxml2 is the XML C parser library and toolkit. XML itself is a
+libxml2: metalanguage to design markup languages - i.e. a text language where
+libxml2: structures are added to the content using extra "markup" information
+libxml2: enclosed between angle brackets. HTML is the most well-known markup
+libxml2: language. Though the library is written in C, a variety of language
+libxml2: bindings make it available in other environments.
+libxml2:
+libxml2:
+libxml2:
Index: libs/libxml2/2.13.6/libxml2-pkg-install.sh
===================================================================
--- libs/libxml2/2.13.6/libxml2-pkg-install.sh	(nonexistent)
+++ libs/libxml2/2.13.6/libxml2-pkg-install.sh	(revision 451)
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# arg 1:  the new package version
+pre_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+post_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+pre_update() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_update() {
+  post_install
+}
+
+# arg 1:  the old package version
+pre_remove() {
+  /bin/true
+}
+
+# arg 1:  the old package version
+post_remove() {
+  /bin/true
+}
+
+
+operation=$1
+shift
+
+$operation $*

Property changes on: libs/libxml2/2.13.6/libxml2-pkg-install.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: libs/libxml2/2.13.6
===================================================================
--- libs/libxml2/2.13.6	(nonexistent)
+++ libs/libxml2/2.13.6	(revision 451)

Property changes on: libs/libxml2/2.13.6
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,74 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.rk358x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: libs/libxml2/2.13.6-ppc32/Makefile
===================================================================
--- libs/libxml2/2.13.6-ppc32/Makefile	(nonexistent)
+++ libs/libxml2/2.13.6-ppc32/Makefile	(revision 451)
@@ -0,0 +1,278 @@
+
+COMPONENT_TARGETS  = $(HARDWARE_S824L)
+COMPONENT_TARGETS += $(HARDWARE_VESNIN)
+COMPONENT_TARGETS += $(HARDWARE_TL2WK2)
+COMPONENT_TARGETS += $(HARDWARE_TL2SV2)
+
+NEED_ABS_PATH      = true
+COMPONENT_IS_3PP   = true
+
+CREATE_PPC32_PACKAGE = true
+
+
+include ../../../build-system/constants.mk
+
+
+SOURCE_REQUIRES    = sources/packages/l/libxml2
+
+REQUIRES           = libs/libxml2/2.13.6
+REQUIRES          += libs/zlib/1.3.1-ppc32
+REQUIRES          += app/xz/5.6.3-ppc32
+REQUIRES          += libs/icu4c/76.1-ppc32
+REQUIRES          += libs/readline/8.2-ppc32
+REQUIRES          += dev/python2/2.7.18-ppc32
+REQUIRES          += dev/python3/3.12.9-ppc32
+
+# ======= __END_OF_REQUIRES__ =======
+
+version            = 2.13.6
+tar_xz_archive     = $(SRC_PACKAGE_PATH)/packages/l/libxml2/libxml2-$(version).tar.xz
+SRC_ARCHIVE        = $(tar_xz_archive)
+SRC_DIR            = $(TARGET_BUILD_DIR)/libxml2-$(version)
+src_dir_name       = libxml2-$(version)
+src_done           = $(TARGET_BUILD_DIR)/.source_done
+
+PATCHES = PATCHES
+
+build2_dir         = $(TARGET_BUILD_DIR)/build2
+build3_dir         = $(TARGET_BUILD_DIR)/build3
+build_target       = $(TARGET_BUILD_DIR)/.build_done
+install_target     = $(TARGET_BUILD_DIR)/.install_done
+
+
+####### Targets
+
+PKG_GROUP = libs
+#
+# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
+#
+LIBXML2_32_PKG_NAME                = libxml2-x32
+LIBXML2_32_PKG_VERSION             = 2.13.6
+LIBXML2_32_PKG_ARCH                = $(PKGARCH)
+LIBXML2_32_PKG_DISTRO_NAME         = $(DISTRO_NAME)
+LIBXML2_32_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
+LIBXML2_32_PKG_GROUP               = $(PKG_GROUP)
+###                                 |---handy-ruler-------------------------------|
+LIBXML2_32_PKG_SHORT_DESCRIPTION   = XML parser library
+LIBXML2_32_PKG_URL                 = $(BUG_URL)
+LIBXML2_32_PKG_LICENSE             = custom
+LIBXML2_32_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-pkg-description
+LIBXML2_32_PKG_DESCRIPTION_FILE_IN = $(LIBXML2_32_PKG_NAME)-pkg-description.in
+LIBXML2_32_PKG_INSTALL_SCRIPT      = $(LIBXML2_32_PKG_NAME)-pkg-install.sh
+
+LIBXML2_32_PKG   = $(CURDIR)/$(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-package
+
+pkg_basename     = $(LIBXML2_32_PKG_NAME)-$(LIBXML2_32_PKG_VERSION)-$(LIBXML2_32_PKG_ARCH)-$(LIBXML2_32_PKG_DISTRO_NAME)-$(LIBXML2_32_PKG_DISTRO_VERSION)
+
+pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
+pkg_certificate  = $(call cert-name,$(pkg_archive))
+pkg_signature    = $(call sign-name,$(pkg_archive))
+pkg_description  = $(call desc-name,$(pkg_archive))
+products         = $(call pkg-files,$(pkg_archive))
+
+BUILD_TARGETS    = $(build_target)
+BUILD_TARGETS   += $(install_target)
+
+PRODUCT_TARGETS  = $(products)
+
+ROOTFS_TARGETS   = $(pkg_archive)
+
+
+include ../../../build-system/core.mk
+
+
+env_sysroot  = DESTDIR=$(LIBXML2_32_PKG)
+
+
+extra_configure_switches  = --libdir=/usr/lib$(MULTILIB_PPC32_SUFFIX)
+extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
+extra_configure_switches += --infodir=/usr/share/info
+extra_configure_switches += --mandir=/usr/share/man
+
+extra_configure_switches += --bindir=/usr/bin/32
+
+extra_configure_switches += --disable-dependency-tracking
+
+ifeq ($(__ENABLE_STATIC__),yes)
+extra_configure_switches += --enable-static=yes
+else
+extra_configure_switches += --enable-static=no
+endif
+extra_configure_switches += --enable-shared=yes
+
+
+PYTHON2_VERSION = 2.7
+PYTHON3_VERSION = 3.12
+
+
+WITH_PYTHON2         = $(PYTHON2)
+python2_environment  = PYTHON=$(PYTHON2)
+python2_environment += PYTHON_VERSION=$(PYTHON2_VERSION)
+python2_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages
+python2_environment += PYTHON_INCLUDES=$(TARGET_DEST_DIR)/usr/include/python$(PYTHON2_VERSION)
+python2_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON2_VERSION)-config --ldflags)'
+
+
+WITH_PYTHON3         = $(PYTHON3)
+python3_environment  = PYTHON=$(PYTHON3)
+python3_environment += PYTHON_VERSION=$(PYTHON3_VERSION)
+python3_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages
+python3_environment += PYTHON_INCLUDES='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --includes)'
+python3_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --ldflags)'
+
+
+CFLAGS += -Wno-maybe-uninitialized -Wno-format-overflow -Wno-cast-align -Wno-pointer-sign
+
+TARGET_BIN_RPATH = /lib$(MULTILIB_PPC32_SUFFIX):/usr/lib$(MULTILIB_PPC32_SUFFIX)
+TARGET_LIB_RPATH = /lib$(MULTILIB_PPC32_SUFFIX):/usr/lib$(MULTILIB_PPC32_SUFFIX):/usr/lib/../lib$(MULTILIB_PPC32_SUFFIX)
+
+
+####### Dependencies
+
+$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
+	$(UNPACK_SRC_ARCHIVE)
+	$(APPLY_PATCHES)
+	@touch $@
+
+$(build_target): $(src_done)
+	@mkdir -p $(build2_dir)
+	# ======= Build libxml2 with Python2 =======
+	@cd $(build2_dir) && \
+	  $(BUILD_ENVIRONMENT) $(python2_environment) ../$(src_dir_name)/configure \
+	  --prefix=/usr                \
+	  --build=$(BUILD)             \
+	  --host=$(TARGET32)           \
+	  --with-python=$(WITH_PYTHON2) \
+	  $(extra_configure_switches)
+	@( cd $(build2_dir) ; \
+	   for file in `find . -type f -name 'Makefile'` ; do \
+	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
+	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
+	   done ; \
+	 )
+	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python2_environment)
+	@mkdir -p $(build3_dir)
+	# ======= Build libxml2 with Python3 =======
+	@cd $(build3_dir) && \
+	  $(BUILD_ENVIRONMENT) $(python3_environment) ../$(src_dir_name)/configure \
+	  --prefix=/usr                \
+	  --build=$(BUILD)             \
+	  --host=$(TARGET32)           \
+	  --with-python=$(WITH_PYTHON3) \
+	  $(extra_configure_switches)
+	@( cd $(build3_dir) ; \
+	   for file in `find . -type f -name 'Makefile'` ; do \
+	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
+	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_PPC32_SUFFIX),' $${file} ; \
+	   done ; \
+	 )
+	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python3_environment)
+	@touch $@
+
+$(install_target): $(build_target)
+	@mkdir -p $(LIBXML2_32_PKG)
+	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	@( cd $(LIBXML2_32_PKG) ; \
+	   rm -rf bin include share lib$(MULTILIB_PPC32_SUFFIX)/{cmake,pkgconfig} lib$(MULTILIB_PPC32_SUFFIX)/lib* ; \
+	 )
+	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	@rm -rf $(LIBXML2_32_PKG)/usr/include
+	@rm -rf $(LIBXML2_32_PKG)/usr/share
+	# ======= remove toolchain path from xml2-config script =======
+	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g"               xml2-config ; \
+	   sed -i "s,lib64,lib$(MULTILIB_PPC32_SUFFIX),g" xml2-config ; \
+	 )
+	# ======= remove toolchain path from target libtool *.la files =======
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX) ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2.la  ; \
+	 )
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
+	 )
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
+	 )
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX)/pkgconfig ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml-2.0.pc ; \
+	 )
+	# ======= Install the same to $(TARGET_DEST_DIR) =======
+	$(call install-into-devenv, $(LIBXML2_32_PKG))
+	# ======= tune libtool *.la search path to the target destination for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX) ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2.la  ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2.la  ; \
+	 )
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
+	 )
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
+	 )
+	# ======= tune pkg-config *.pc search path to the target destination for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_PPC32_SUFFIX)/pkgconfig ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g" libxml-2.0.pc \
+	 )
+	# ======= tune xml2-config script for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/bin/32 ; \
+	   sed -i "s,=/usr,=$(TARGET_DEST_DIR)/usr,g"                 xml2-config ; \
+	   sed -i "s,prefix/lib,prefix/lib$(MULTILIB_PPC32_SUFFIX),g" xml2-config ; \
+	   sed -i "s,L/usr,L$(TARGET_DEST_DIR)/usr,g"                 xml2-config ; \
+	 )
+	# ======= Strip binaries =======
+	@( cd $(LIBXML2_32_PKG) ; \
+	   find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
+	   find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
+	 )
+ifeq ($(__ENABLE_STATIC__),yes)
+	@( cd $(LIBXML2_32_PKG) ; \
+	   find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs $(STRIP) -g 2> /dev/null ; \
+	 )
+endif
+ifneq ($(PATCHELF),)
+	# ======= Set RPATH/RUNPATH for target binaries =======
+	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
+	   for file in `find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
+	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
+	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
+	       $(PATCHELF) --set-rpath $(TARGET_BIN_RPATH) $$file 1> /dev/null 2> /dev/null ; \
+	     fi ; \
+	   done ; \
+	 )
+	# ======= Set RPATH/RUNPATH for target shared objects =======
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_PPC32_SUFFIX) ; \
+	   for file in `find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
+	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
+	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
+	       $(PATCHELF) --set-rpath $(TARGET_LIB_RPATH) $$file 1> /dev/null 2> /dev/null ; \
+	     fi ; \
+	   done ; \
+	 )
+endif
+	@touch $@
+
+$(LIBXML2_32_PKG_DESCRIPTION_FILE): $(LIBXML2_32_PKG_DESCRIPTION_FILE_IN)
+	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
+
+$(pkg_certificate) : $(pkg_archive) ;
+$(pkg_signature)   : $(pkg_archive) ;
+$(pkg_description) : $(pkg_archive) ;
+
+$(pkg_archive): $(install_target) $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG_INSTALL_SCRIPT)
+	@cp $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG)/.DESCRIPTION
+	@cp $(LIBXML2_32_PKG_INSTALL_SCRIPT) $(LIBXML2_32_PKG)/.INSTALL
+	@$(BUILD_PKG_REQUIRES) $(LIBXML2_32_PKG)/.REQUIRES
+	@echo "pkgname=$(LIBXML2_32_PKG_NAME)"                            >  $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "pkgver=$(LIBXML2_32_PKG_VERSION)"                          >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "arch=$(LIBXML2_32_PKG_ARCH)"                               >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "distroname=$(LIBXML2_32_PKG_DISTRO_NAME)"                  >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "distrover=$(LIBXML2_32_PKG_DISTRO_VERSION)"                >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "group=$(LIBXML2_32_PKG_GROUP)"                             >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "short_description=\"$(LIBXML2_32_PKG_SHORT_DESCRIPTION)\"" >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "url=$(LIBXML2_32_PKG_URL)"                                 >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "license=$(LIBXML2_32_PKG_LICENSE)"                         >> $(LIBXML2_32_PKG)/.PKGINFO
+	@$(PSEUDO) sh -c "cd $(LIBXML2_32_PKG) && \
+	                  chown -R root:root . && \
+	                  $(MAKE_PACKAGE) -J --linkadd=yes $(GNUPG_OPTIONS) -m -d .. ."
Index: libs/libxml2/2.13.6-ppc32/PATCHES
===================================================================
--- libs/libxml2/2.13.6-ppc32/PATCHES	(nonexistent)
+++ libs/libxml2/2.13.6-ppc32/PATCHES	(revision 451)
@@ -0,0 +1,2 @@
+
+../../../sources/packages/l/libxml2/patches/libxml2-2.13.6-python-unicode.patch -p0
Index: libs/libxml2/2.13.6-ppc32/libxml2-x32-pkg-description.in
===================================================================
--- libs/libxml2/2.13.6-ppc32/libxml2-x32-pkg-description.in	(nonexistent)
+++ libs/libxml2/2.13.6-ppc32/libxml2-x32-pkg-description.in	(revision 451)
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.  Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in.  You must
+# make exactly 11 lines for the formatting to be correct.  It's also
+# customary to leave one space after the ':'.
+
+           |-----handy-ruler------------------------------------------------------|
+libxml2-x32: libxml2-x32 @VERSION@ (XML parser library)
+libxml2-x32:
+libxml2-x32: Libxml2 is the XML C parser library and toolkit. XML itself is a
+libxml2-x32: metalanguage to design markup languages - i.e. a text language where
+libxml2-x32: structures are added to the content using extra "markup" information
+libxml2-x32: enclosed between angle brackets. HTML is the most well-known markup
+libxml2-x32: language. Though the library is written in C, a variety of language
+libxml2-x32: bindings make it available in other environments.
+libxml2-x32:
+libxml2-x32:
+libxml2-x32:
Index: libs/libxml2/2.13.6-ppc32/libxml2-x32-pkg-install.sh
===================================================================
--- libs/libxml2/2.13.6-ppc32/libxml2-x32-pkg-install.sh	(nonexistent)
+++ libs/libxml2/2.13.6-ppc32/libxml2-x32-pkg-install.sh	(revision 451)
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# arg 1:  the new package version
+pre_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+post_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+pre_update() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_update() {
+  post_install
+}
+
+# arg 1:  the old package version
+pre_remove() {
+  /bin/true
+}
+
+# arg 1:  the old package version
+post_remove() {
+  /bin/true
+}
+
+
+operation=$1
+shift
+
+$operation $*

Property changes on: libs/libxml2/2.13.6-ppc32/libxml2-x32-pkg-install.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: libs/libxml2/2.13.6-ppc32
===================================================================
--- libs/libxml2/2.13.6-ppc32	(nonexistent)
+++ libs/libxml2/2.13.6-ppc32	(revision 451)

Property changes on: libs/libxml2/2.13.6-ppc32
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,74 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.rk358x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: libs/libxml2/2.13.6-x86_32/Makefile
===================================================================
--- libs/libxml2/2.13.6-x86_32/Makefile	(nonexistent)
+++ libs/libxml2/2.13.6-x86_32/Makefile	(revision 451)
@@ -0,0 +1,275 @@
+
+COMPONENT_TARGETS  = $(HARDWARE_INTEL_PC64)
+
+NEED_ABS_PATH      = true
+COMPONENT_IS_3PP   = true
+
+CREATE_X86_32_PACKAGE = true
+
+
+include ../../../build-system/constants.mk
+
+
+SOURCE_REQUIRES    = sources/packages/l/libxml2
+
+REQUIRES           = libs/libxml2/2.13.6
+REQUIRES          += libs/zlib/1.3.1-x86_32
+REQUIRES          += app/xz/5.6.3-x86_32
+REQUIRES          += libs/icu4c/76.1-x86_32
+REQUIRES          += libs/readline/8.2-x86_32
+REQUIRES          += dev/python2/2.7.18-x86_32
+REQUIRES          += dev/python3/3.12.9-x86_32
+
+# ======= __END_OF_REQUIRES__ =======
+
+version            = 2.13.6
+tar_xz_archive     = $(SRC_PACKAGE_PATH)/packages/l/libxml2/libxml2-$(version).tar.xz
+SRC_ARCHIVE        = $(tar_xz_archive)
+SRC_DIR            = $(TARGET_BUILD_DIR)/libxml2-$(version)
+src_dir_name       = libxml2-$(version)
+src_done           = $(TARGET_BUILD_DIR)/.source_done
+
+PATCHES = PATCHES
+
+build2_dir         = $(TARGET_BUILD_DIR)/build2
+build3_dir         = $(TARGET_BUILD_DIR)/build3
+build_target       = $(TARGET_BUILD_DIR)/.build_done
+install_target     = $(TARGET_BUILD_DIR)/.install_done
+
+
+####### Targets
+
+PKG_GROUP = libs
+#
+# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
+#
+LIBXML2_32_PKG_NAME                = libxml2-x32
+LIBXML2_32_PKG_VERSION             = 2.13.6
+LIBXML2_32_PKG_ARCH                = $(PKGARCH)
+LIBXML2_32_PKG_DISTRO_NAME         = $(DISTRO_NAME)
+LIBXML2_32_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
+LIBXML2_32_PKG_GROUP               = $(PKG_GROUP)
+###                                 |---handy-ruler-------------------------------|
+LIBXML2_32_PKG_SHORT_DESCRIPTION   = XML parser library
+LIBXML2_32_PKG_URL                 = $(BUG_URL)
+LIBXML2_32_PKG_LICENSE             = custom
+LIBXML2_32_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-pkg-description
+LIBXML2_32_PKG_DESCRIPTION_FILE_IN = $(LIBXML2_32_PKG_NAME)-pkg-description.in
+LIBXML2_32_PKG_INSTALL_SCRIPT      = $(LIBXML2_32_PKG_NAME)-pkg-install.sh
+
+LIBXML2_32_PKG   = $(CURDIR)/$(TARGET_BUILD_DIR)/$(LIBXML2_32_PKG_NAME)-package
+
+pkg_basename     = $(LIBXML2_32_PKG_NAME)-$(LIBXML2_32_PKG_VERSION)-$(LIBXML2_32_PKG_ARCH)-$(LIBXML2_32_PKG_DISTRO_NAME)-$(LIBXML2_32_PKG_DISTRO_VERSION)
+
+pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
+pkg_certificate  = $(call cert-name,$(pkg_archive))
+pkg_signature    = $(call sign-name,$(pkg_archive))
+pkg_description  = $(call desc-name,$(pkg_archive))
+products         = $(call pkg-files,$(pkg_archive))
+
+BUILD_TARGETS    = $(build_target)
+BUILD_TARGETS   += $(install_target)
+
+PRODUCT_TARGETS  = $(products)
+
+ROOTFS_TARGETS   = $(pkg_archive)
+
+
+include ../../../build-system/core.mk
+
+
+env_sysroot  = DESTDIR=$(LIBXML2_32_PKG)
+
+
+extra_configure_switches  = --libdir=/usr/lib$(MULTILIB_X86_32_SUFFIX)
+extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
+extra_configure_switches += --infodir=/usr/share/info
+extra_configure_switches += --mandir=/usr/share/man
+
+extra_configure_switches += --bindir=/usr/bin/32
+
+extra_configure_switches += --disable-dependency-tracking
+
+ifeq ($(__ENABLE_STATIC__),yes)
+extra_configure_switches += --enable-static=yes
+else
+extra_configure_switches += --enable-static=no
+endif
+extra_configure_switches += --enable-shared=yes
+
+
+PYTHON2_VERSION = 2.7
+PYTHON3_VERSION = 3.12
+
+
+WITH_PYTHON2         = $(PYTHON2)
+python2_environment  = PYTHON=$(PYTHON2)
+python2_environment += PYTHON_VERSION=$(PYTHON2_VERSION)
+python2_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages
+python2_environment += PYTHON_INCLUDES=$(TARGET_DEST_DIR)/usr/include/python$(PYTHON2_VERSION)
+python2_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON2_VERSION)-config --ldflags)'
+
+
+WITH_PYTHON3         = $(PYTHON3)
+python3_environment  = PYTHON=$(PYTHON3)
+python3_environment += PYTHON_VERSION=$(PYTHON3_VERSION)
+python3_environment += PYTHON_SITE_PACKAGES=/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages
+python3_environment += PYTHON_INCLUDES='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --includes)'
+python3_environment += PYTHON_LIBS='$(shell $(TARGET_DEST_DIR)/usr/bin/32/python$(PYTHON3_VERSION)-config --ldflags)'
+
+
+CFLAGS += -Wno-maybe-uninitialized -Wno-format-overflow -Wno-cast-align -Wno-pointer-sign
+
+TARGET_BIN_RPATH = /lib$(MULTILIB_X86_32_SUFFIX):/usr/lib$(MULTILIB_X86_32_SUFFIX)
+TARGET_LIB_RPATH = /lib$(MULTILIB_X86_32_SUFFIX):/usr/lib$(MULTILIB_X86_32_SUFFIX):/usr/lib/../lib$(MULTILIB_X86_32_SUFFIX)
+
+
+####### Dependencies
+
+$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
+	$(UNPACK_SRC_ARCHIVE)
+	$(APPLY_PATCHES)
+	@touch $@
+
+$(build_target): $(src_done)
+	@mkdir -p $(build2_dir)
+	# ======= Build libxml2 with Python2 =======
+	@cd $(build2_dir) && \
+	  $(BUILD_ENVIRONMENT) $(python2_environment) ../$(src_dir_name)/configure \
+	  --prefix=/usr                \
+	  --build=$(BUILD)             \
+	  --host=$(TARGET32)           \
+	  --with-python=$(WITH_PYTHON2) \
+	  $(extra_configure_switches)
+	@( cd $(build2_dir) ; \
+	   for file in `find . -type f -name 'Makefile'` ; do \
+	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
+	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
+	   done ; \
+	 )
+	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python2_environment)
+	@mkdir -p $(build3_dir)
+	# ======= Build libxml2 with Python3 =======
+	@cd $(build3_dir) && \
+	  $(BUILD_ENVIRONMENT) $(python3_environment) ../$(src_dir_name)/configure \
+	  --prefix=/usr                \
+	  --build=$(BUILD)             \
+	  --host=$(TARGET32)           \
+	  --with-python=$(WITH_PYTHON3) \
+	  $(extra_configure_switches)
+	@( cd $(build3_dir) ; \
+	   for file in `find . -type f -name 'Makefile'` ; do \
+	     sed -i '/^pyexecdir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
+	     sed -i '/^pythondir =/s,lib,lib$(MULTILIB_X86_32_SUFFIX),' $${file} ; \
+	   done ; \
+	 )
+	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) $(python3_environment)
+	@touch $@
+
+$(install_target): $(build_target)
+	@mkdir -p $(LIBXML2_32_PKG)
+	@cd $(build2_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	@( cd $(LIBXML2_32_PKG) ; \
+	   rm -rf bin include share lib$(MULTILIB_X86_32_SUFFIX)/{cmake,pkgconfig} lib$(MULTILIB_X86_32_SUFFIX)/lib* ; \
+	 )
+	@cd $(build3_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	@rm -rf $(LIBXML2_32_PKG)/usr/include
+	@rm -rf $(LIBXML2_32_PKG)/usr/share
+	# ======= remove toolchain path from xml2-config script =======
+	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g"                xml2-config ; \
+	   sed -i "s,lib64,lib$(MULTILIB_X86_32_SUFFIX),g" xml2-config ; \
+	 )
+	# ======= remove toolchain path from target libtool *.la files =======
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX) ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2.la  ; \
+	 )
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
+	 )
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml2mod.la ; \
+	 )
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX)/pkgconfig ; \
+	   sed -i "s,$(TARGET_DEST_DIR),,g" libxml-2.0.pc ; \
+	 )
+	# ======= Install the same to $(TARGET_DEST_DIR) =======
+	$(call install-into-devenv, $(LIBXML2_32_PKG))
+	# ======= tune libtool *.la search path to the target destination for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX) ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2.la  ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2.la  ; \
+	 )
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON2_VERSION)/site-packages ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
+	 )
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX)/python$(PYTHON3_VERSION)/site-packages ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g"   libxml2mod.la ; \
+	   sed -i "s,L/lib,L$(TARGET_DEST_DIR)/lib,g" libxml2mod.la ; \
+	 )
+	# ======= tune pkg-config *.pc search path to the target destination for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/lib$(MULTILIB_X86_32_SUFFIX)/pkgconfig ; \
+	   sed -i "s,/usr,$(TARGET_DEST_DIR)/usr,g" libxml-2.0.pc \
+	 )
+	# ======= tune xml2-config script for development =======
+	@( cd $(TARGET_DEST_DIR)/usr/bin/32 ; \
+	   sed -i "s,=/usr,=$(TARGET_DEST_DIR)/usr,g"                  xml2-config ; \
+	   sed -i "s,prefix/lib,prefix/lib$(MULTILIB_X86_32_SUFFIX),g" xml2-config ; \
+	   sed -i "s,L/usr,L$(TARGET_DEST_DIR)/usr,g"                  xml2-config ; \
+	 )
+	# ======= Strip binaries =======
+	@( cd $(LIBXML2_32_PKG) ; \
+	   find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
+	   find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null ; \
+	 )
+ifeq ($(__ENABLE_STATIC__),yes)
+	@( cd $(LIBXML2_32_PKG) ; \
+	   find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs $(STRIP) -g 2> /dev/null ; \
+	 )
+endif
+ifneq ($(PATCHELF),)
+	# ======= Set RPATH/RUNPATH for target binaries =======
+	@( cd $(LIBXML2_32_PKG)/usr/bin/32 ; \
+	   for file in `find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
+	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
+	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
+	       $(PATCHELF) --set-rpath $(TARGET_BIN_RPATH) $$file 1> /dev/null 2> /dev/null ; \
+	     fi ; \
+	   done ; \
+	 )
+	# ======= Set RPATH/RUNPATH for target shared objects =======
+	@( cd $(LIBXML2_32_PKG)/usr/lib$(MULTILIB_X86_32_SUFFIX) ; \
+	   for file in `find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs echo` ; do \
+	     rpath=`$(PATCHELF) --print-rpath $$file 2> /dev/null` ; \
+	     if echo "$$rpath" | grep -q "$(TARGET_DEST_DIR)" ; then \
+	       $(PATCHELF) --set-rpath $(TARGET_LIB_RPATH) $$file 1> /dev/null 2> /dev/null ; \
+	     fi ; \
+	   done ; \
+	 )
+endif
+	@touch $@
+
+$(LIBXML2_32_PKG_DESCRIPTION_FILE): $(LIBXML2_32_PKG_DESCRIPTION_FILE_IN)
+	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
+
+$(pkg_certificate) : $(pkg_archive) ;
+$(pkg_signature)   : $(pkg_archive) ;
+$(pkg_description) : $(pkg_archive) ;
+
+$(pkg_archive): $(install_target) $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG_INSTALL_SCRIPT)
+	@cp $(LIBXML2_32_PKG_DESCRIPTION_FILE) $(LIBXML2_32_PKG)/.DESCRIPTION
+	@cp $(LIBXML2_32_PKG_INSTALL_SCRIPT) $(LIBXML2_32_PKG)/.INSTALL
+	@$(BUILD_PKG_REQUIRES) $(LIBXML2_32_PKG)/.REQUIRES
+	@echo "pkgname=$(LIBXML2_32_PKG_NAME)"                            >  $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "pkgver=$(LIBXML2_32_PKG_VERSION)"                          >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "arch=$(LIBXML2_32_PKG_ARCH)"                               >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "distroname=$(LIBXML2_32_PKG_DISTRO_NAME)"                  >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "distrover=$(LIBXML2_32_PKG_DISTRO_VERSION)"                >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "group=$(LIBXML2_32_PKG_GROUP)"                             >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "short_description=\"$(LIBXML2_32_PKG_SHORT_DESCRIPTION)\"" >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "url=$(LIBXML2_32_PKG_URL)"                                 >> $(LIBXML2_32_PKG)/.PKGINFO ; \
+	 echo "license=$(LIBXML2_32_PKG_LICENSE)"                         >> $(LIBXML2_32_PKG)/.PKGINFO
+	@$(PSEUDO) sh -c "cd $(LIBXML2_32_PKG) && \
+	                  chown -R root:root . && \
+	                  $(MAKE_PACKAGE) -J --linkadd=yes $(GNUPG_OPTIONS) -m -d .. ."
Index: libs/libxml2/2.13.6-x86_32/PATCHES
===================================================================
--- libs/libxml2/2.13.6-x86_32/PATCHES	(nonexistent)
+++ libs/libxml2/2.13.6-x86_32/PATCHES	(revision 451)
@@ -0,0 +1,2 @@
+
+../../../sources/packages/l/libxml2/patches/libxml2-2.13.6-python-unicode.patch -p0
Index: libs/libxml2/2.13.6-x86_32/libxml2-x32-pkg-description.in
===================================================================
--- libs/libxml2/2.13.6-x86_32/libxml2-x32-pkg-description.in	(nonexistent)
+++ libs/libxml2/2.13.6-x86_32/libxml2-x32-pkg-description.in	(revision 451)
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.  Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in.  You must
+# make exactly 11 lines for the formatting to be correct.  It's also
+# customary to leave one space after the ':'.
+
+           |-----handy-ruler------------------------------------------------------|
+libxml2-x32: libxml2-x32 @VERSION@ (XML parser library)
+libxml2-x32:
+libxml2-x32: Libxml2 is the XML C parser library and toolkit. XML itself is a
+libxml2-x32: metalanguage to design markup languages - i.e. a text language where
+libxml2-x32: structures are added to the content using extra "markup" information
+libxml2-x32: enclosed between angle brackets. HTML is the most well-known markup
+libxml2-x32: language. Though the library is written in C, a variety of language
+libxml2-x32: bindings make it available in other environments.
+libxml2-x32:
+libxml2-x32:
+libxml2-x32:
Index: libs/libxml2/2.13.6-x86_32/libxml2-x32-pkg-install.sh
===================================================================
--- libs/libxml2/2.13.6-x86_32/libxml2-x32-pkg-install.sh	(nonexistent)
+++ libs/libxml2/2.13.6-x86_32/libxml2-x32-pkg-install.sh	(revision 451)
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# arg 1:  the new package version
+pre_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+post_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+pre_update() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_update() {
+  post_install
+}
+
+# arg 1:  the old package version
+pre_remove() {
+  /bin/true
+}
+
+# arg 1:  the old package version
+post_remove() {
+  /bin/true
+}
+
+
+operation=$1
+shift
+
+$operation $*

Property changes on: libs/libxml2/2.13.6-x86_32/libxml2-x32-pkg-install.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: libs/libxml2/2.13.6-x86_32
===================================================================
--- libs/libxml2/2.13.6-x86_32	(nonexistent)
+++ libs/libxml2/2.13.6-x86_32	(revision 451)

Property changes on: libs/libxml2/2.13.6-x86_32
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,74 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.rk358x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: libs/libxslt/1.1.34/Makefile
===================================================================
--- libs/libxslt/1.1.34/Makefile	(revision 450)
+++ libs/libxslt/1.1.34/Makefile	(revision 451)
@@ -60,7 +60,7 @@
 
 SOURCE_REQUIRES    = sources/packages/l/libxslt
 
-REQUIRES           = libs/libxml2/2.11.4
+REQUIRES           = libs/libxml2/2.13.6
 REQUIRES          += net/libgcrypt/1.11.0
 
 # ======= __END_OF_REQUIRES__ =======
Index: libs/libxslt/1.1.34-ppc32/Makefile
===================================================================
--- libs/libxslt/1.1.34-ppc32/Makefile	(revision 450)
+++ libs/libxslt/1.1.34-ppc32/Makefile	(revision 451)
@@ -16,7 +16,7 @@
 SOURCE_REQUIRES    = sources/packages/l/libxslt
 
 REQUIRES           = libs/libxslt/1.1.34
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += net/libgcrypt/1.11.0-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
Index: libs/libxslt/1.1.34-x86_32/Makefile
===================================================================
--- libs/libxslt/1.1.34-x86_32/Makefile	(revision 450)
+++ libs/libxslt/1.1.34-x86_32/Makefile	(revision 451)
@@ -13,7 +13,7 @@
 SOURCE_REQUIRES    = sources/packages/l/libxslt
 
 REQUIRES           = libs/libxslt/1.1.34
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += net/libgcrypt/1.11.0-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
Index: libs/netcdf/4.9.0/Makefile
===================================================================
--- libs/netcdf/4.9.0/Makefile	(revision 450)
+++ libs/netcdf/4.9.0/Makefile	(revision 451)
@@ -65,7 +65,7 @@
 REQUIRES          += net/nghttp2/1.43.0
 REQUIRES          += libs/libzip/1.9.2
 REQUIRES          += libs/libunistring/1.3
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/brotli/1.0.9
 REQUIRES          += libs/libpsl/0.21.1
 
Index: libs/netcdf/4.9.0-ppc32/Makefile
===================================================================
--- libs/netcdf/4.9.0-ppc32/Makefile	(revision 450)
+++ libs/netcdf/4.9.0-ppc32/Makefile	(revision 451)
@@ -21,7 +21,7 @@
 REQUIRES          += net/nghttp2/1.43.0-ppc32
 REQUIRES          += libs/libzip/1.9.2-ppc32
 REQUIRES          += libs/libunistring/1.3-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += libs/brotli/1.0.9-ppc32
 REQUIRES          += libs/libpsl/0.21.1-ppc32
 
Index: libs/netcdf/4.9.0-x86_32/Makefile
===================================================================
--- libs/netcdf/4.9.0-x86_32/Makefile	(revision 450)
+++ libs/netcdf/4.9.0-x86_32/Makefile	(revision 451)
@@ -18,7 +18,7 @@
 REQUIRES          += net/nghttp2/1.43.0-x86_32
 REQUIRES          += libs/libzip/1.9.2-x86_32
 REQUIRES          += libs/libunistring/1.3-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += libs/brotli/1.0.9-x86_32
 REQUIRES          += libs/libpsl/0.21.1-x86_32
 
Index: libs/shared-mime-info/2.2/Makefile
===================================================================
--- libs/shared-mime-info/2.2/Makefile	(revision 450)
+++ libs/shared-mime-info/2.2/Makefile	(revision 451)
@@ -60,7 +60,7 @@
 SOURCE_REQUIRES    = sources/packages/l/shared-mime-info
 
 REQUIRES           = libs/glib2/2.76.0
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += app/gettext/0.24
 
 # ======= __END_OF_REQUIRES__ =======
Index: media/ices/2.0.3/Makefile
===================================================================
--- media/ices/2.0.3/Makefile	(revision 450)
+++ media/ices/2.0.3/Makefile	(revision 451)
@@ -62,7 +62,7 @@
 
 REQUIRES           = app/xz/5.6.3
 REQUIRES          += libs/zlib/1.3.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += media/alsa-lib/1.2.8
 REQUIRES          += media/libshout/2.4.6
 
Index: media/libbluray/1.3.4/Makefile
===================================================================
--- media/libbluray/1.3.4/Makefile	(revision 450)
+++ media/libbluray/1.3.4/Makefile	(revision 451)
@@ -63,7 +63,7 @@
 REQUIRES           = app/xz/5.6.3
 REQUIRES          += app/fontconfig/2.13.95
 REQUIRES          += libs/freetype/2.11.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: media/libbluray/1.3.4-ppc32/Makefile
===================================================================
--- media/libbluray/1.3.4-ppc32/Makefile	(revision 450)
+++ media/libbluray/1.3.4-ppc32/Makefile	(revision 451)
@@ -19,7 +19,7 @@
 REQUIRES          += app/xz/5.6.3-ppc32
 REQUIRES          += app/fontconfig/2.13.95-ppc32
 REQUIRES          += libs/freetype/2.11.1-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: media/libbluray/1.3.4-x86_32/Makefile
===================================================================
--- media/libbluray/1.3.4-x86_32/Makefile	(revision 450)
+++ media/libbluray/1.3.4-x86_32/Makefile	(revision 451)
@@ -16,7 +16,7 @@
 REQUIRES          += app/xz/5.6.3-x86_32
 REQUIRES          += app/fontconfig/2.13.95-x86_32
 REQUIRES          += libs/freetype/2.11.1-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 
 # ======= __END_OF_REQUIRES__ =======
 
Index: media/libgphoto2/2.5.30/Makefile
===================================================================
--- media/libgphoto2/2.5.30/Makefile	(revision 450)
+++ media/libgphoto2/2.5.30/Makefile	(revision 451)
@@ -63,7 +63,7 @@
 REQUIRES           = libs/libexif/0.6.24
 REQUIRES          += libs/libgd/2.3.3
 REQUIRES          += libs/libusb/1.0.24
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/brotli/1.0.9
 REQUIRES          += libs/libpsl/0.21.1
 REQUIRES          += net/curl/7.75.0
Index: media/libgphoto2/2.5.30-ppc32/Makefile
===================================================================
--- media/libgphoto2/2.5.30-ppc32/Makefile	(revision 450)
+++ media/libgphoto2/2.5.30-ppc32/Makefile	(revision 451)
@@ -19,7 +19,7 @@
 REQUIRES          += libs/libexif/0.6.24-ppc32
 REQUIRES          += libs/libgd/2.3.3-ppc32
 REQUIRES          += libs/libusb/1.0.24-ppc32
-REQUIRES          += libs/libxml2/2.11.4-ppc32
+REQUIRES          += libs/libxml2/2.13.6-ppc32
 REQUIRES          += libs/brotli/1.0.9-ppc32
 REQUIRES          += libs/libpsl/0.21.1-ppc32
 REQUIRES          += net/curl/7.75.0-ppc32
Index: media/libgphoto2/2.5.30-x86_32/Makefile
===================================================================
--- media/libgphoto2/2.5.30-x86_32/Makefile	(revision 450)
+++ media/libgphoto2/2.5.30-x86_32/Makefile	(revision 451)
@@ -16,7 +16,7 @@
 REQUIRES          += libs/libexif/0.6.24-x86_32
 REQUIRES          += libs/libgd/2.3.3-x86_32
 REQUIRES          += libs/libusb/1.0.24-x86_32
-REQUIRES          += libs/libxml2/2.11.4-x86_32
+REQUIRES          += libs/libxml2/2.13.6-x86_32
 REQUIRES          += libs/brotli/1.0.9-x86_32
 REQUIRES          += libs/libpsl/0.21.1-x86_32
 REQUIRES          += net/curl/7.75.0-x86_32
Index: net/bind/9.16.13/Makefile
===================================================================
--- net/bind/9.16.13/Makefile	(revision 450)
+++ net/bind/9.16.13/Makefile	(revision 451)
@@ -61,7 +61,7 @@
 SOURCE_REQUIRES    = sources/packages/n/bind
 
 REQUIRES           = secure/libcap/2.48
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libidn2/2.3.0
 REQUIRES          += libs/libuv/1.41.0
 REQUIRES          += libs/json-c/0.15
Index: net/cyrus-imapd/3.4.4/Makefile
===================================================================
--- net/cyrus-imapd/3.4.4/Makefile	(revision 450)
+++ net/cyrus-imapd/3.4.4/Makefile	(revision 451)
@@ -66,7 +66,7 @@
 REQUIRES          += app/sqlite/3.49.1.0
 REQUIRES          += dev/perl/5.36.0
 REQUIRES          += libs/jansson/2.13.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/icu4c/76.1
 REQUIRES          += libs/zstd/1.5.6
 REQUIRES          += libs/zlib/1.3.1
Index: net/httpd/2.4.51/Makefile
===================================================================
--- net/httpd/2.4.51/Makefile	(revision 450)
+++ net/httpd/2.4.51/Makefile	(revision 451)
@@ -71,7 +71,7 @@
 REQUIRES          += libs/brotli/1.0.9
 REQUIRES          += libs/jansson/2.13.1
 REQUIRES          += libs/expat/2.6.4
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/pcre/8.45
 REQUIRES          += libs/zlib/1.3.1
 REQUIRES          += net/curl/7.75.0
Index: net/php/8.1.2/Makefile
===================================================================
--- net/php/8.1.2/Makefile	(revision 450)
+++ net/php/8.1.2/Makefile	(revision 451)
@@ -79,7 +79,7 @@
 
 REQUIRES          += libs/enchant/2.3.2
 REQUIRES          += libs/expat/2.6.4
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/libxslt/1.1.34
 REQUIRES          += libs/libedit/20191231-3.1
 REQUIRES          += libs/icu4c/76.1
Index: net/uwsgi/2.0.20/Makefile
===================================================================
--- net/uwsgi/2.0.20/Makefile	(revision 450)
+++ net/uwsgi/2.0.20/Makefile	(revision 451)
@@ -63,7 +63,7 @@
 REQUIRES           = app/util-linux/2.38.1
 REQUIRES          += libs/pcre/8.45
 REQUIRES          += libs/zlib/1.3.1
-REQUIRES          += libs/libxml2/2.11.4
+REQUIRES          += libs/libxml2/2.13.6
 REQUIRES          += libs/jansson/2.13.1
 REQUIRES          += app/xz/5.6.3
 REQUIRES          += app/sqlite/3.49.1.0
Index: share/docbook-xml/4.5/Makefile
===================================================================
--- share/docbook-xml/4.5/Makefile	(revision 450)
+++ share/docbook-xml/4.5/Makefile	(revision 451)
@@ -60,7 +60,7 @@
 
 SOURCE_REQUIRES    = sources/packages/a/linuxdoc-tools/docbook-xml/4.x
 
-REQUIRES           = libs/libxml2/2.11.4
+REQUIRES           = libs/libxml2/2.13.6
 REQUIRES          += share/sgml-common/0.6.3
 
 # ======= __END_OF_REQUIRES__ =======
Index: share/docbook-xsl/1.79.1/Makefile
===================================================================
--- share/docbook-xsl/1.79.1/Makefile	(revision 450)
+++ share/docbook-xsl/1.79.1/Makefile	(revision 451)
@@ -61,7 +61,7 @@
 SOURCE_REQUIRES    = sources/packages/a/linuxdoc-tools/docbook-xsl
 SOURCE_REQUIRES   += sources/packages/a/linuxdoc-tools/docbook-xsl-doc
 
-REQUIRES           = libs/libxml2/2.11.4
+REQUIRES           = libs/libxml2/2.13.6
 REQUIRES          += libs/libxslt/1.1.34
 REQUIRES          += share/docbook-xml/4.5
 
Index: sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/file.list
===================================================================
--- sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/file.list	(revision 450)
+++ sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/file.list	(nonexistent)
@@ -1 +0,0 @@
-libxml2-2.11.4/python/libxml.c
Index: sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/create.patch.sh
===================================================================
--- sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/create.patch.sh	(revision 450)
+++ sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/create.patch.sh	(nonexistent)
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-VERSION=2.11.4
-
-tar --files-from=file.list -xJvf ../libxml2-$VERSION.tar.xz
-mv libxml2-$VERSION libxml2-$VERSION-orig
-
-cp -rf ./libxml2-$VERSION-new ./libxml2-$VERSION
-
-diff --unified -Nr  libxml2-$VERSION-orig  libxml2-$VERSION > libxml2-$VERSION-python-unicode.patch
-
-mv libxml2-$VERSION-python-unicode.patch ../patches
-
-rm -rf ./libxml2-$VERSION
-rm -rf ./libxml2-$VERSION-orig

Property changes on: sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/create.patch.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/libxml2-2.11.4-new/python/libxml.c
===================================================================
--- sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/libxml2-2.11.4-new/python/libxml.c	(revision 450)
+++ sources/packages/l/libxml2/create-2.11.4-python-unicode-patch/libxml2-2.11.4-new/python/libxml.c	(nonexistent)
@@ -1,3929 +0,0 @@
-/*
- * libxml.c: this modules implements the main part of the glue of the
- *           libxml2 library and the Python interpreter. It provides the
- *           entry points where an automatically generated stub is either
- *           unpractical or would not match cleanly the Python model.
- *
- * If compiled with MERGED_MODULES, the entry point will be used to
- * initialize both the libxml2 and the libxslt wrappers
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-#define PY_SSIZE_T_CLEAN
-#include <Python.h>
-#include <fileobject.h>
-/* #include "config.h" */
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/xpath.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/xmlIO.h>
-#include <libxml/c14n.h>
-#include <libxml/xmlreader.h>
-#include <libxml/xmlsave.h>
-#include "libxml_wrap.h"
-#include "libxml2-py.h"
-
-#if defined(WITH_TRIO)
-#include "trio.h"
-#define vsnprintf trio_vsnprintf
-#endif
-
-/* #define DEBUG */
-/* #define DEBUG_SAX */
-/* #define DEBUG_XPATH */
-/* #define DEBUG_ERROR */
-/* #define DEBUG_MEMORY */
-/* #define DEBUG_FILES */
-/* #define DEBUG_LOADER */
-
-#if PY_MAJOR_VERSION >= 3
-PyObject *PyInit_libxml2mod(void);
-
-#define PY_IMPORT_STRING_SIZE PyUnicode_FromStringAndSize
-#define PY_IMPORT_STRING PyUnicode_FromString
-#else
-void initlibxml2mod(void);
-#define PY_IMPORT_STRING_SIZE PyString_FromStringAndSize
-#define PY_IMPORT_STRING PyString_FromString
-#endif
-
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- */
-#define TODO 								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-/*
- * the following vars are used for XPath extensions, but
- * are also referenced within the parser cleanup routine.
- */
-static int libxml_xpathCallbacksInitialized = 0;
-
-typedef struct libxml_xpathCallback {
-    xmlXPathContextPtr ctx;
-    xmlChar *name;
-    xmlChar *ns_uri;
-    PyObject *function;
-} libxml_xpathCallback, *libxml_xpathCallbackPtr;
-typedef libxml_xpathCallback libxml_xpathCallbackArray[];
-static int libxml_xpathCallbacksAllocd = 10;
-static libxml_xpathCallbackArray *libxml_xpathCallbacks = NULL;
-static int libxml_xpathCallbacksNb = 0;
-
-/************************************************************************
- *									*
- *		Memory debug interface					*
- *									*
- ************************************************************************/
-
-#if 0
-extern void xmlMemFree(void *ptr);
-extern void *xmlMemMalloc(size_t size);
-extern void *xmlMemRealloc(void *ptr, size_t size);
-extern char *xmlMemoryStrdup(const char *str);
-#endif
-
-static int libxmlMemoryDebugActivated = 0;
-static long libxmlMemoryAllocatedBase = 0;
-
-static int libxmlMemoryDebug = 0;
-static xmlFreeFunc freeFunc = NULL;
-static xmlMallocFunc mallocFunc = NULL;
-static xmlReallocFunc reallocFunc = NULL;
-static xmlStrdupFunc strdupFunc = NULL;
-
-static void
-libxml_xmlErrorInitialize(void); /* forward declare */
-
-PyObject *
-libxml_xmlMemoryUsed(PyObject * self ATTRIBUTE_UNUSED, 
-        PyObject * args ATTRIBUTE_UNUSED)
-{
-    long ret;
-    PyObject *py_retval;
-
-    ret = xmlMemUsed();
-
-    py_retval = libxml_longWrap(ret);
-    return (py_retval);
-}
-
-PyObject *
-libxml_xmlDebugMemory(PyObject * self ATTRIBUTE_UNUSED, PyObject * args)
-{
-    int activate;
-    PyObject *py_retval;
-    long ret;
-
-    if (!PyArg_ParseTuple(args, (char *) "i:xmlDebugMemory", &activate))
-        return (NULL);
-
-#ifdef DEBUG_MEMORY
-    printf("libxml_xmlDebugMemory(%d) called\n", activate);
-#endif
-
-    if (activate != 0) {
-        if (libxmlMemoryDebug == 0) {
-            /*
-             * First initialize the library and grab the old memory handlers
-             * and switch the library to memory debugging
-             */
-            xmlMemGet((xmlFreeFunc *) & freeFunc,
-                      (xmlMallocFunc *) & mallocFunc,
-                      (xmlReallocFunc *) & reallocFunc,
-                      (xmlStrdupFunc *) & strdupFunc);
-            if ((freeFunc == xmlMemFree) && (mallocFunc == xmlMemMalloc) &&
-                (reallocFunc == xmlMemRealloc) &&
-                (strdupFunc == xmlMemoryStrdup)) {
-            } else {
-                ret = (long) xmlMemSetup(xmlMemFree, xmlMemMalloc,
-                                         xmlMemRealloc, xmlMemoryStrdup);
-                if (ret < 0)
-                    goto error;
-            }
-            libxmlMemoryAllocatedBase = xmlMemUsed();
-            ret = 0;
-        } else if (libxmlMemoryDebugActivated == 0) {
-            libxmlMemoryAllocatedBase = xmlMemUsed();
-            ret = 0;
-        } else {
-            ret = xmlMemUsed() - libxmlMemoryAllocatedBase;
-        }
-        libxmlMemoryDebug = 1;
-        libxmlMemoryDebugActivated = 1;
-    } else {
-        if (libxmlMemoryDebugActivated == 1)
-            ret = xmlMemUsed() - libxmlMemoryAllocatedBase;
-        else
-            ret = 0;
-        libxmlMemoryDebugActivated = 0;
-    }
-  error:
-    py_retval = libxml_longWrap(ret);
-    return (py_retval);
-}
-
-PyObject *
-libxml_xmlPythonCleanupParser(PyObject *self ATTRIBUTE_UNUSED,
-                              PyObject *args ATTRIBUTE_UNUSED) {
-
-    int ix;
-
-    /*
-     * Need to confirm whether we really want to do this (required for
-     * memcheck) in all cases...
-     */
-   
-    if (libxml_xpathCallbacks != NULL) {	/* if ext funcs declared */
-	for (ix=0; ix<libxml_xpathCallbacksNb; ix++) {
-	    if ((*libxml_xpathCallbacks)[ix].name != NULL)
-	        xmlFree((*libxml_xpathCallbacks)[ix].name);
-	    if ((*libxml_xpathCallbacks)[ix].ns_uri != NULL)
-	        xmlFree((*libxml_xpathCallbacks)[ix].ns_uri);
-	}
-	libxml_xpathCallbacksNb = 0;
-        xmlFree(libxml_xpathCallbacks);
-	libxml_xpathCallbacks = NULL;
-    }
-
-    xmlCleanupParser();
-
-    Py_INCREF(Py_None);
-    return(Py_None);
-}
-
-PyObject *
-libxml_xmlDumpMemory(ATTRIBUTE_UNUSED PyObject * self,
-                     ATTRIBUTE_UNUSED PyObject * args)
-{
-
-    if (libxmlMemoryDebug != 0)
-        xmlMemoryDump();
-    Py_INCREF(Py_None);
-    return (Py_None);
-}
-
-/************************************************************************
- *									*
- *		Handling Python FILE I/O at the C level			*
- *	The raw I/O attack directly the File objects, while the		*
- *	other routines address the ioWrapper instance instead		*
- *									*
- ************************************************************************/
-
-/**
- * xmlPythonFileCloseUnref:
- * @context:  the I/O context
- *
- * Close an I/O channel
- */
-static int
-xmlPythonFileCloseRaw (void * context) {
-    PyObject *file, *ret;
-
-#ifdef DEBUG_FILES
-    printf("xmlPythonFileCloseUnref\n");
-#endif
-    file = (PyObject *) context;
-    if (file == NULL) return(-1);
-    ret = PyObject_CallMethod(file, (char *) "close", (char *) "()");
-    if (ret != NULL) {
-	Py_DECREF(ret);
-    }
-    Py_DECREF(file);
-    return(0);
-}
-
-/**
- * xmlPythonFileReadRaw:
- * @context:  the I/O context
- * @buffer:  where to drop data
- * @len:  number of bytes to write
- *
- * Read @len bytes to @buffer from the Python file in the I/O channel
- *
- * Returns the number of bytes read
- */
-static int
-xmlPythonFileReadRaw (void * context, char * buffer, int len) {
-    PyObject *file;
-    PyObject *ret;
-    int lenread = -1;
-    char *data;
-
-#ifdef DEBUG_FILES
-    printf("xmlPythonFileReadRaw: %d\n", len);
-#endif
-    file = (PyObject *) context;
-    if (file == NULL) return(-1);
-    ret = PyObject_CallMethod(file, (char *) "read", (char *) "(i)", len);
-    if (ret == NULL) {
-	printf("xmlPythonFileReadRaw: result is NULL\n");
-	return(-1);
-    } else if (PyBytes_Check(ret)) {
-	lenread = PyBytes_Size(ret);
-	data = PyBytes_AsString(ret);
-#ifdef PyUnicode_Check
-    } else if (PyUnicode_Check (ret)) {
-#if PY_VERSION_HEX >= 0x03030000
-        Py_ssize_t size;
-	const char *tmp;
-
-	/* tmp doesn't need to be deallocated */
-        tmp = PyUnicode_AsUTF8AndSize(ret, &size);
-
-	lenread = (int) size;
-	data = (char *) tmp;
-#else
-        PyObject *b;
-	b = PyUnicode_AsUTF8String(ret);
-	if (b == NULL) {
-	    printf("xmlPythonFileReadRaw: failed to convert to UTF-8\n");
-	    return(-1);
-	}
-	lenread = PyBytes_Size(b);
-	data = PyBytes_AsString(b);
-	Py_DECREF(b);
-#endif
-#endif
-    } else {
-	printf("xmlPythonFileReadRaw: result is not a String\n");
-	Py_DECREF(ret);
-	return(-1);
-    }
-    if (lenread > len)
-	memcpy(buffer, data, len);
-    else
-	memcpy(buffer, data, lenread);
-    Py_DECREF(ret);
-    return(lenread);
-}
-
-/**
- * xmlPythonFileRead:
- * @context:  the I/O context
- * @buffer:  where to drop data
- * @len:  number of bytes to write
- *
- * Read @len bytes to @buffer from the I/O channel.
- *
- * Returns the number of bytes read
- */
-static int
-xmlPythonFileRead (void * context, char * buffer, int len) {
-    PyObject *file;
-    PyObject *ret;
-    int lenread = -1;
-    char *data;
-
-#ifdef DEBUG_FILES
-    printf("xmlPythonFileRead: %d\n", len);
-#endif
-    file = (PyObject *) context;
-    if (file == NULL) return(-1);
-    ret = PyObject_CallMethod(file, (char *) "io_read", (char *) "(i)", len);
-    if (ret == NULL) {
-	printf("xmlPythonFileRead: result is NULL\n");
-	return(-1);
-    } else if (PyBytes_Check(ret)) {
-	lenread = PyBytes_Size(ret);
-	data = PyBytes_AsString(ret);
-#ifdef PyUnicode_Check
-    } else if (PyUnicode_Check (ret)) {
-#if PY_VERSION_HEX >= 0x03030000
-        Py_ssize_t size;
-	const char *tmp;
-
-	/* tmp doesn't need to be deallocated */
-        tmp = PyUnicode_AsUTF8AndSize(ret, &size);
-
-	lenread = (int) size;
-	data = (char *) tmp;
-#else
-        PyObject *b;
-	b = PyUnicode_AsUTF8String(ret);
-	if (b == NULL) {
-	    printf("xmlPythonFileRead: failed to convert to UTF-8\n");
-	    return(-1);
-	}
-	lenread = PyBytes_Size(b);
-	data = PyBytes_AsString(b);
-	Py_DECREF(b);
-#endif
-#endif
-    } else {
-	printf("xmlPythonFileRead: result is not a String\n");
-	Py_DECREF(ret);
-	return(-1);
-    }
-    if (lenread > len)
-	memcpy(buffer, data, len);
-    else
-	memcpy(buffer, data, lenread);
-    Py_DECREF(ret);
-    return(lenread);
-}
-
-/**
- * xmlFileWrite:
- * @context:  the I/O context
- * @buffer:  where to drop data
- * @len:  number of bytes to write
- *
- * Write @len bytes from @buffer to the I/O channel.
- *
- * Returns the number of bytes written
- */
-static int
-xmlPythonFileWrite (void * context, const char * buffer, int len) {
-    PyObject *file;
-    PyObject *string;
-    PyObject *ret = NULL;
-    int written = -1;
-
-#ifdef DEBUG_FILES
-    printf("xmlPythonFileWrite: %d\n", len);
-#endif
-    file = (PyObject *) context;
-    if (file == NULL) return(-1);
-    string = PY_IMPORT_STRING_SIZE(buffer, len);
-    if (string == NULL) return(-1);
-    if (PyObject_HasAttrString(file, (char *) "io_write")) {
-        ret = PyObject_CallMethod(file, (char *) "io_write", (char *) "(O)",
-	                        string);
-    } else if (PyObject_HasAttrString(file, (char *) "write")) {
-        ret = PyObject_CallMethod(file, (char *) "write", (char *) "(O)",
-	                        string);
-    }
-    Py_DECREF(string);
-    if (ret == NULL) {
-	printf("xmlPythonFileWrite: result is NULL\n");
-	return(-1);
-    } else if (PyLong_Check(ret)) {
-	written = (int) PyLong_AsLong(ret);
-	Py_DECREF(ret);
-    } else if (ret == Py_None) {
-	written = len;
-	Py_DECREF(ret);
-    } else {
-	printf("xmlPythonFileWrite: result is not an Int nor None\n");
-	Py_DECREF(ret);
-    }
-    return(written);
-}
-
-/**
- * xmlPythonFileClose:
- * @context:  the I/O context
- *
- * Close an I/O channel
- */
-static int
-xmlPythonFileClose (void * context) {
-    PyObject *file, *ret = NULL;
-
-#ifdef DEBUG_FILES
-    printf("xmlPythonFileClose\n");
-#endif
-    file = (PyObject *) context;
-    if (file == NULL) return(-1);
-    if (PyObject_HasAttrString(file, (char *) "io_close")) {
-        ret = PyObject_CallMethod(file, (char *) "io_close", (char *) "()");
-    } else if (PyObject_HasAttrString(file, (char *) "flush")) {
-        ret = PyObject_CallMethod(file, (char *) "flush", (char *) "()");
-    }
-    if (ret != NULL) {
-	Py_DECREF(ret);
-    }
-    return(0);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlOutputBufferCreatePythonFile:
- * @file:  a PyFile_Type
- * @encoder:  the encoding converter or NULL
- *
- * Create a buffered output for the progressive saving to a PyFile_Type
- * buffered C I/O
- *
- * Returns the new parser output or NULL
- */
-static xmlOutputBufferPtr
-xmlOutputBufferCreatePythonFile(PyObject *file, 
-	                        xmlCharEncodingHandlerPtr encoder) {
-    xmlOutputBufferPtr ret;
-
-    if (file == NULL) return(NULL);
-
-    ret = xmlAllocOutputBuffer(encoder);
-    if (ret != NULL) {
-        ret->context = file;
-	/* Py_INCREF(file); */
-	ret->writecallback = xmlPythonFileWrite;
-	ret->closecallback = xmlPythonFileClose;
-    }
-
-    return(ret);
-}
-
-PyObject *
-libxml_xmlCreateOutputBuffer(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
-    PyObject *py_retval;
-    PyObject *file;
-    xmlChar  *encoding;
-    xmlCharEncodingHandlerPtr handler = NULL;
-    xmlOutputBufferPtr buffer;
-
-
-    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlOutputBufferCreate",
-		&file, &encoding))
-	return(NULL);
-    if ((encoding != NULL) && (encoding[0] != 0)) {
-	handler = xmlFindCharEncodingHandler((const char *) encoding);
-    }
-    buffer = xmlOutputBufferCreatePythonFile(file, handler);
-    if (buffer == NULL)
-	printf("libxml_xmlCreateOutputBuffer: buffer == NULL\n");
-    py_retval = libxml_xmlOutputBufferPtrWrap(buffer);
-    return(py_retval);
-}
-
-/**
- * libxml_outputBufferGetPythonFile:
- * @buffer:  the I/O buffer
- *
- * read the Python I/O from the CObject
- *
- * Returns the new parser output or NULL
- */
-static PyObject *
-libxml_outputBufferGetPythonFile(ATTRIBUTE_UNUSED PyObject *self,
-                                    PyObject *args) {
-    PyObject *buffer;
-    PyObject *file;
-    xmlOutputBufferPtr obj;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:outputBufferGetPythonFile",
-			  &buffer))
-	return(NULL);
-
-    obj = PyoutputBuffer_Get(buffer);
-    if (obj == NULL) {
-	fprintf(stderr,
-	        "outputBufferGetPythonFile: obj == NULL\n");
-	Py_INCREF(Py_None);
-	return(Py_None);
-    }
-    if (obj->closecallback != xmlPythonFileClose) {
-	fprintf(stderr,
-	        "outputBufferGetPythonFile: not a python file wrapper\n");
-	Py_INCREF(Py_None);
-	return(Py_None);
-    }
-    file = (PyObject *) obj->context;
-    if (file == NULL) {
-	Py_INCREF(Py_None);
-	return(Py_None);
-    }
-    Py_INCREF(file);
-    return(file);
-}
-
-static PyObject *
-libxml_xmlOutputBufferClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-    PyObject *py_retval;
-    int c_retval;
-    xmlOutputBufferPtr out;
-    PyObject *pyobj_out;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferClose", &pyobj_out))
-        return(NULL);
-    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
-    /* Buffer may already have been destroyed elsewhere. This is harmless. */
-    if (out == NULL) {
-	Py_INCREF(Py_None);
-	return(Py_None);
-    }
-
-    c_retval = xmlOutputBufferClose(out);
-    py_retval = libxml_intWrap((int) c_retval);
-    return(py_retval);
-}
-
-static PyObject *
-libxml_xmlOutputBufferFlush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-    PyObject *py_retval;
-    int c_retval;
-    xmlOutputBufferPtr out;
-    PyObject *pyobj_out;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferFlush", &pyobj_out))
-        return(NULL);
-    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
-
-    c_retval = xmlOutputBufferFlush(out);
-    py_retval = libxml_intWrap((int) c_retval);
-    return(py_retval);
-}
-
-static PyObject *
-libxml_xmlSaveFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-    PyObject *py_retval;
-    int c_retval;
-    xmlOutputBufferPtr buf;
-    PyObject *pyobj_buf;
-    xmlDocPtr cur;
-    PyObject *pyobj_cur;
-    char * encoding;
-
-    if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSaveFileTo", &pyobj_buf, &pyobj_cur, &encoding))
-        return(NULL);
-    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
-    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
-
-    c_retval = xmlSaveFileTo(buf, cur, encoding);
-	/* xmlSaveTo() freed the memory pointed to by buf, so record that in the
-	 * Python object. */
-    ((PyoutputBuffer_Object *)(pyobj_buf))->obj = NULL;
-    py_retval = libxml_intWrap((int) c_retval);
-    return(py_retval);
-}
-
-static PyObject *
-libxml_xmlSaveFormatFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-    PyObject *py_retval;
-    int c_retval;
-    xmlOutputBufferPtr buf;
-    PyObject *pyobj_buf;
-    xmlDocPtr cur;
-    PyObject *pyobj_cur;
-    char * encoding;
-    int format;
-
-    if (!PyArg_ParseTuple(args, (char *)"OOzi:xmlSaveFormatFileTo", &pyobj_buf, &pyobj_cur, &encoding, &format))
-        return(NULL);
-    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
-    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
-
-    c_retval = xmlSaveFormatFileTo(buf, cur, encoding, format);
-	/* xmlSaveFormatFileTo() freed the memory pointed to by buf, so record that
-	 * in the Python object */
-	((PyoutputBuffer_Object *)(pyobj_buf))->obj = NULL;
-    py_retval = libxml_intWrap((int) c_retval);
-    return(py_retval);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-
-/**
- * xmlParserInputBufferCreatePythonFile:
- * @file:  a PyFile_Type
- * @encoder:  the encoding converter or NULL
- *
- * Create a buffered output for the progressive saving to a PyFile_Type
- * buffered C I/O
- *
- * Returns the new parser output or NULL
- */
-static xmlParserInputBufferPtr
-xmlParserInputBufferCreatePythonFile(PyObject *file, 
-	                        xmlCharEncoding encoding) {
-    xmlParserInputBufferPtr ret;
-
-    if (file == NULL) return(NULL);
-
-    ret = xmlAllocParserInputBuffer(encoding);
-    if (ret != NULL) {
-        ret->context = file;
-	/* Py_INCREF(file); */
-	ret->readcallback = xmlPythonFileRead;
-	ret->closecallback = xmlPythonFileClose;
-    }
-
-    return(ret);
-}
-
-PyObject *
-libxml_xmlCreateInputBuffer(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
-    PyObject *py_retval;
-    PyObject *file;
-    xmlChar  *encoding;
-    xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
-    xmlParserInputBufferPtr buffer;
-
-
-    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlParserInputBufferCreate",
-		&file, &encoding))
-	return(NULL);
-    if ((encoding != NULL) && (encoding[0] != 0)) {
-	enc = xmlParseCharEncoding((const char *) encoding);
-    }
-    buffer = xmlParserInputBufferCreatePythonFile(file, enc);
-    if (buffer == NULL)
-	printf("libxml_xmlParserInputBufferCreate: buffer == NULL\n");
-    py_retval = libxml_xmlParserInputBufferPtrWrap(buffer);
-    return(py_retval);
-}
-
-/************************************************************************
- *									*
- *		Providing the resolver at the Python level		*
- *									*
- ************************************************************************/
-
-static xmlExternalEntityLoader defaultExternalEntityLoader = NULL;
-static PyObject *pythonExternalEntityLoaderObjext;
-
-static xmlParserInputPtr
-pythonExternalEntityLoader(const char *URL, const char *ID,
-			   xmlParserCtxtPtr ctxt) {
-    xmlParserInputPtr result = NULL;
-    if (pythonExternalEntityLoaderObjext != NULL) {
-	PyObject *ret;
-	PyObject *ctxtobj;
-
-	ctxtobj = libxml_xmlParserCtxtPtrWrap(ctxt);
-#ifdef DEBUG_LOADER
-	printf("pythonExternalEntityLoader: ready to call\n");
-#endif
-
-	ret = PyObject_CallFunction(pythonExternalEntityLoaderObjext,
-		      (char *) "(ssO)", URL, ID, ctxtobj);
-	Py_XDECREF(ctxtobj);
-#ifdef DEBUG_LOADER
-	printf("pythonExternalEntityLoader: result ");
-	PyObject_Print(ret, stdout, 0);
-	printf("\n");
-#endif
-
-	if (ret != NULL) {
-	    if (PyObject_HasAttrString(ret, (char *) "read")) {
-		xmlParserInputBufferPtr buf;
-
-		buf = xmlAllocParserInputBuffer(XML_CHAR_ENCODING_NONE);
-		if (buf != NULL) {
-		    buf->context = ret;
-		    buf->readcallback = xmlPythonFileReadRaw;
-		    buf->closecallback = xmlPythonFileCloseRaw;
-		    result = xmlNewIOInputStream(ctxt, buf,
-			                         XML_CHAR_ENCODING_NONE);
-		}
-#if 0
-	    } else {
-		if (URL != NULL)
-		    printf("pythonExternalEntityLoader: can't read %s\n",
-		           URL);
-#endif
-	    }
-	    if (result == NULL) {
-		Py_DECREF(ret);
-	    } else if (URL != NULL) {
-		result->filename = (char *) xmlStrdup((const xmlChar *)URL);
-		result->directory = xmlParserGetDirectory((const char *) URL);
-	    }
-	}
-    }
-    if ((result == NULL) && (defaultExternalEntityLoader != NULL)) {
-	result = defaultExternalEntityLoader(URL, ID, ctxt);
-    }
-    return(result);
-}
-
-PyObject *
-libxml_xmlSetEntityLoader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
-    PyObject *py_retval;
-    PyObject *loader;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:libxml_xmlSetEntityLoader",
-		&loader))
-	return(NULL);
-
-    if (!PyCallable_Check(loader)) {
-	PyErr_SetString(PyExc_ValueError, "entity loader is not callable");
-	return(NULL);
-    }
-
-#ifdef DEBUG_LOADER
-    printf("libxml_xmlSetEntityLoader\n");
-#endif
-    if (defaultExternalEntityLoader == NULL) 
-	defaultExternalEntityLoader = xmlGetExternalEntityLoader();
-
-    Py_XDECREF(pythonExternalEntityLoaderObjext);
-    pythonExternalEntityLoaderObjext = loader;
-    Py_XINCREF(pythonExternalEntityLoaderObjext);
-    xmlSetExternalEntityLoader(pythonExternalEntityLoader);
-
-    py_retval = PyLong_FromLong(0);
-    return(py_retval);
-}
-
-/************************************************************************
- *									*
- *		Input callback registration				*
- *									*
- ************************************************************************/
-static PyObject *pythonInputOpenCallbackObject;
-static int pythonInputCallbackID = -1;
-
-static int
-pythonInputMatchCallback(ATTRIBUTE_UNUSED const char *URI)
-{
-    /* Always return success, real decision whether URI is supported will be
-     * made in open callback.  */
-    return 1;
-}
-
-static void *
-pythonInputOpenCallback(const char *URI)
-{
-    PyObject *ret;
-
-    ret = PyObject_CallFunction(pythonInputOpenCallbackObject,
-	    (char *)"s", URI);
-    if (ret == Py_None) {
-	Py_DECREF(Py_None);
-	return NULL;
-    }
-    return ret;
-}
-
-PyObject *
-libxml_xmlRegisterInputCallback(ATTRIBUTE_UNUSED PyObject *self,
-                                PyObject *args) {
-    PyObject *cb;
-
-    if (!PyArg_ParseTuple(args,
-		(const char *)"O:libxml_xmlRegisterInputCallback", &cb))
-	return(NULL);
-
-    if (!PyCallable_Check(cb)) {
-	PyErr_SetString(PyExc_ValueError, "input callback is not callable");
-	return(NULL);
-    }
-
-    /* Python module registers a single callback and manages the list of
-     * all callbacks internally. This is necessitated by xmlInputMatchCallback
-     * API, which does not allow for passing of data objects to discriminate
-     * different Python methods.  */
-    if (pythonInputCallbackID == -1) {
-	pythonInputCallbackID = xmlRegisterInputCallbacks(
-		pythonInputMatchCallback, pythonInputOpenCallback,
-		xmlPythonFileReadRaw, xmlPythonFileCloseRaw);
-	if (pythonInputCallbackID == -1)
-	    return PyErr_NoMemory();
-	pythonInputOpenCallbackObject = cb;
-	Py_INCREF(pythonInputOpenCallbackObject);
-    }
-
-    Py_INCREF(Py_None);
-    return(Py_None);
-}
-
-PyObject *
-libxml_xmlUnregisterInputCallback(ATTRIBUTE_UNUSED PyObject *self,
-                                ATTRIBUTE_UNUSED PyObject *args) {
-    int ret;
-
-    ret = xmlPopInputCallbacks();
-    if (pythonInputCallbackID != -1) {
-	/* Assert that the right input callback was popped. libxml's API does not
-	 * allow removal by ID, so all that could be done is an assert.  */
-	if (pythonInputCallbackID == ret) {
-	    pythonInputCallbackID = -1;
-	    Py_DECREF(pythonInputOpenCallbackObject);
-	    pythonInputOpenCallbackObject = NULL;
-	} else {
-	    PyErr_SetString(PyExc_AssertionError, "popped non-python input callback");
-	    return(NULL);
-	}
-    } else if (ret == -1) {
-	/* No more callbacks to pop */
-	PyErr_SetString(PyExc_IndexError, "no input callbacks to pop");
-	return(NULL);
-    }
-
-    Py_INCREF(Py_None);
-    return(Py_None);
-}
-
-/************************************************************************
- *									*
- *		Handling SAX/xmllib/sgmlop callback interfaces		*
- *									*
- ************************************************************************/
-
-static void
-pythonStartElement(void *user_data, const xmlChar * name,
-                   const xmlChar ** attrs)
-{
-    int i;
-    PyObject *handler;
-    PyObject *dict;
-    PyObject *attrname;
-    PyObject *attrvalue;
-    PyObject *result = NULL;
-    int type = 0;
-
-#ifdef DEBUG_SAX
-    printf("pythonStartElement(%s) called\n", name);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "startElement"))
-        type = 1;
-    else if (PyObject_HasAttrString(handler, (char *) "start"))
-        type = 2;
-    if (type != 0) {
-        /*
-         * the xmllib interface always generates a dictionary,
-         * possibly empty
-         */
-        if ((attrs == NULL) && (type == 1)) {
-            Py_XINCREF(Py_None);
-            dict = Py_None;
-        } else if (attrs == NULL) {
-            dict = PyDict_New();
-        } else {
-            dict = PyDict_New();
-            for (i = 0; attrs[i] != NULL; i++) {
-                attrname = PY_IMPORT_STRING((char *) attrs[i]);
-                i++;
-                if (attrs[i] != NULL) {
-                    attrvalue = PY_IMPORT_STRING((char *) attrs[i]);
-                } else {
-                    Py_XINCREF(Py_None);
-                    attrvalue = Py_None;
-                }
-                PyDict_SetItem(dict, attrname, attrvalue);
-		Py_DECREF(attrname);
-		Py_DECREF(attrvalue);
-            }
-        }
-
-        if (type == 1)
-            result = PyObject_CallMethod(handler, (char *) "startElement",
-                                         (char *) "sO", name, dict);
-        else if (type == 2)
-            result = PyObject_CallMethod(handler, (char *) "start",
-                                         (char *) "sO", name, dict);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(dict);
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonStartDocument(void *user_data)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonStartDocument() called\n");
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "startDocument")) {
-        result =
-            PyObject_CallMethod(handler, (char *) "startDocument", NULL);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonEndDocument(void *user_data)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonEndDocument() called\n");
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "endDocument")) {
-        result =
-            PyObject_CallMethod(handler, (char *) "endDocument", NULL);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-    /*
-     * The reference to the handler is released there
-     */
-    Py_XDECREF(handler);
-}
-
-static void
-pythonEndElement(void *user_data, const xmlChar * name)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonEndElement(%s) called\n", name);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "endElement")) {
-        result = PyObject_CallMethod(handler, (char *) "endElement",
-                                     (char *) "s", name);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    } else if (PyObject_HasAttrString(handler, (char *) "end")) {
-        result = PyObject_CallMethod(handler, (char *) "end",
-                                     (char *) "s", name);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonReference(void *user_data, const xmlChar * name)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonReference(%s) called\n", name);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "reference")) {
-        result = PyObject_CallMethod(handler, (char *) "reference",
-                                     (char *) "s", name);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonCharacters(void *user_data, const xmlChar * ch, int len)
-{
-    PyObject *handler;
-    PyObject *result = NULL;
-    int type = 0;
-
-#ifdef DEBUG_SAX
-    printf("pythonCharacters(%s, %d) called\n", ch, len);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "characters"))
-        type = 1;
-    else if (PyObject_HasAttrString(handler, (char *) "data"))
-        type = 2;
-    if (type != 0) {
-        if (type == 1)
-            result = PyObject_CallMethod(handler, (char *) "characters",
-                                         (char *) "s#", ch, (Py_ssize_t)len);
-        else if (type == 2)
-            result = PyObject_CallMethod(handler, (char *) "data",
-                                         (char *) "s#", ch, (Py_ssize_t)len);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonIgnorableWhitespace(void *user_data, const xmlChar * ch, int len)
-{
-    PyObject *handler;
-    PyObject *result = NULL;
-    int type = 0;
-
-#ifdef DEBUG_SAX
-    printf("pythonIgnorableWhitespace(%s, %d) called\n", ch, len);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "ignorableWhitespace"))
-        type = 1;
-    else if (PyObject_HasAttrString(handler, (char *) "data"))
-        type = 2;
-    if (type != 0) {
-        if (type == 1)
-            result =
-                PyObject_CallMethod(handler,
-                                    (char *) "ignorableWhitespace",
-                                    (char *) "s#", ch, (Py_ssize_t)len);
-        else if (type == 2)
-            result =
-                PyObject_CallMethod(handler, (char *) "data",
-                                    (char *) "s#", ch, (Py_ssize_t)len);
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonProcessingInstruction(void *user_data,
-                            const xmlChar * target, const xmlChar * data)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonProcessingInstruction(%s, %s) called\n", target, data);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "processingInstruction")) {
-        result = PyObject_CallMethod(handler, (char *)
-                                     "processingInstruction",
-                                     (char *) "ss", target, data);
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonComment(void *user_data, const xmlChar * value)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonComment(%s) called\n", value);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "comment")) {
-        result =
-            PyObject_CallMethod(handler, (char *) "comment", (char *) "s",
-                                value);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonWarning(void *user_data, const char *msg, ...)
-{
-    PyObject *handler;
-    PyObject *result;
-    va_list args;
-    char buf[1024];
-
-#ifdef DEBUG_SAX
-    printf("pythonWarning(%s) called\n", msg);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "warning")) {
-        va_start(args, msg);
-        vsnprintf(buf, 1023, msg, args);
-        va_end(args);
-        buf[1023] = 0;
-        result =
-            PyObject_CallMethod(handler, (char *) "warning", (char *) "s",
-                                buf);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonError(void *user_data, const char *msg, ...)
-{
-    PyObject *handler;
-    PyObject *result;
-    va_list args;
-    char buf[1024];
-
-#ifdef DEBUG_SAX
-    printf("pythonError(%s) called\n", msg);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "error")) {
-        va_start(args, msg);
-        vsnprintf(buf, 1023, msg, args);
-        va_end(args);
-        buf[1023] = 0;
-        result =
-            PyObject_CallMethod(handler, (char *) "error", (char *) "s",
-                                buf);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonFatalError(void *user_data, const char *msg, ...)
-{
-    PyObject *handler;
-    PyObject *result;
-    va_list args;
-    char buf[1024];
-
-#ifdef DEBUG_SAX
-    printf("pythonFatalError(%s) called\n", msg);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "fatalError")) {
-        va_start(args, msg);
-        vsnprintf(buf, 1023, msg, args);
-        va_end(args);
-        buf[1023] = 0;
-        result =
-            PyObject_CallMethod(handler, (char *) "fatalError",
-                                (char *) "s", buf);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonCdataBlock(void *user_data, const xmlChar * ch, int len)
-{
-    PyObject *handler;
-    PyObject *result = NULL;
-    int type = 0;
-
-#ifdef DEBUG_SAX
-    printf("pythonCdataBlock(%s, %d) called\n", ch, len);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "cdataBlock"))
-        type = 1;
-    else if (PyObject_HasAttrString(handler, (char *) "cdata"))
-        type = 2;
-    if (type != 0) {
-        if (type == 1)
-            result =
-                PyObject_CallMethod(handler, (char *) "cdataBlock",
-                                    (char *) "s#", ch, (Py_ssize_t)len);
-        else if (type == 2)
-            result =
-                PyObject_CallMethod(handler, (char *) "cdata",
-                                    (char *) "s#", ch, (Py_ssize_t)len);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonExternalSubset(void *user_data,
-                     const xmlChar * name,
-                     const xmlChar * externalID, const xmlChar * systemID)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonExternalSubset(%s, %s, %s) called\n",
-           name, externalID, systemID);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "externalSubset")) {
-        result =
-            PyObject_CallMethod(handler, (char *) "externalSubset",
-                                (char *) "sss", name, externalID,
-                                systemID);
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonEntityDecl(void *user_data,
-                 const xmlChar * name,
-                 int type,
-                 const xmlChar * publicId,
-                 const xmlChar * systemId, xmlChar * content)
-{
-    PyObject *handler;
-    PyObject *result;
-
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "entityDecl")) {
-        result = PyObject_CallMethod(handler, (char *) "entityDecl",
-                                     (char *) "sisss", name, type,
-                                     publicId, systemId, content);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-
-
-static void
-
-pythonNotationDecl(void *user_data,
-                   const xmlChar * name,
-                   const xmlChar * publicId, const xmlChar * systemId)
-{
-    PyObject *handler;
-    PyObject *result;
-
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "notationDecl")) {
-        result = PyObject_CallMethod(handler, (char *) "notationDecl",
-                                     (char *) "sss", name, publicId,
-                                     systemId);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonAttributeDecl(void *user_data,
-                    const xmlChar * elem,
-                    const xmlChar * name,
-                    int type,
-                    int def,
-                    const xmlChar * defaultValue, xmlEnumerationPtr tree)
-{
-    PyObject *handler;
-    PyObject *nameList;
-    PyObject *newName;
-    xmlEnumerationPtr node;
-    PyObject *result;
-    int count;
-
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "attributeDecl")) {
-        count = 0;
-        for (node = tree; node != NULL; node = node->next) {
-            count++;
-        }
-        nameList = PyList_New(count);
-        count = 0;
-        for (node = tree; node != NULL; node = node->next) {
-            newName = PY_IMPORT_STRING((char *) node->name);
-            PyList_SetItem(nameList, count, newName);
-	    Py_DECREF(newName);
-            count++;
-        }
-        result = PyObject_CallMethod(handler, (char *) "attributeDecl",
-                                     (char *) "ssiisO", elem, name, type,
-                                     def, defaultValue, nameList);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(nameList);
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonElementDecl(void *user_data,
-                  const xmlChar * name,
-                  int type, ATTRIBUTE_UNUSED xmlElementContentPtr content)
-{
-    PyObject *handler;
-    PyObject *obj;
-    PyObject *result;
-
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "elementDecl")) {
-        /* TODO: wrap in an elementContent object */
-        printf
-            ("pythonElementDecl: xmlElementContentPtr wrapper missing !\n");
-        obj = Py_None;
-        /* Py_XINCREF(Py_None); isn't the reference just borrowed ??? */
-        result = PyObject_CallMethod(handler, (char *) "elementDecl",
-                                     (char *) "siO", name, type, obj);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonUnparsedEntityDecl(void *user_data,
-                         const xmlChar * name,
-                         const xmlChar * publicId,
-                         const xmlChar * systemId,
-                         const xmlChar * notationName)
-{
-    PyObject *handler;
-    PyObject *result;
-
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "unparsedEntityDecl")) {
-        result =
-            PyObject_CallMethod(handler, (char *) "unparsedEntityDecl",
-                                (char *) "ssss", name, publicId, systemId,
-                                notationName);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static void
-pythonInternalSubset(void *user_data, const xmlChar * name,
-                     const xmlChar * ExternalID, const xmlChar * SystemID)
-{
-    PyObject *handler;
-    PyObject *result;
-
-#ifdef DEBUG_SAX
-    printf("pythonInternalSubset(%s, %s, %s) called\n",
-           name, ExternalID, SystemID);
-#endif
-    handler = (PyObject *) user_data;
-    if (PyObject_HasAttrString(handler, (char *) "internalSubset")) {
-        result = PyObject_CallMethod(handler, (char *) "internalSubset",
-                                     (char *) "sss", name, ExternalID,
-                                     SystemID);
-        if (PyErr_Occurred())
-            PyErr_Print();
-        Py_XDECREF(result);
-    }
-}
-
-static xmlSAXHandler pythonSaxHandler = {
-    pythonInternalSubset,
-    NULL,                       /* TODO pythonIsStandalone, */
-    NULL,                       /* TODO pythonHasInternalSubset, */
-    NULL,                       /* TODO pythonHasExternalSubset, */
-    NULL,                       /* TODO pythonResolveEntity, */
-    NULL,                       /* TODO pythonGetEntity, */
-    pythonEntityDecl,
-    pythonNotationDecl,
-    pythonAttributeDecl,
-    pythonElementDecl,
-    pythonUnparsedEntityDecl,
-    NULL,                       /* OBSOLETED pythonSetDocumentLocator, */
-    pythonStartDocument,
-    pythonEndDocument,
-    pythonStartElement,
-    pythonEndElement,
-    pythonReference,
-    pythonCharacters,
-    pythonIgnorableWhitespace,
-    pythonProcessingInstruction,
-    pythonComment,
-    pythonWarning,
-    pythonError,
-    pythonFatalError,
-    NULL,                       /* TODO pythonGetParameterEntity, */
-    pythonCdataBlock,
-    pythonExternalSubset,
-    1,
-    NULL,			/* TODO migrate to SAX2 */
-    NULL,
-    NULL,
-    NULL
-};
-
-/************************************************************************
- *									*
- *		Handling of specific parser context			*
- *									*
- ************************************************************************/
-
-PyObject *
-libxml_xmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,
-                           PyObject * args)
-{
-    const char *chunk;
-    int size;
-    const char *URI;
-    PyObject *pyobj_SAX = NULL;
-    xmlSAXHandlerPtr SAX = NULL;
-    xmlParserCtxtPtr ret;
-    PyObject *pyret;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "Oziz:xmlCreatePushParser", &pyobj_SAX, &chunk,
-         &size, &URI))
-        return (NULL);
-
-#ifdef DEBUG
-    printf("libxml_xmlCreatePushParser(%p, %s, %d, %s) called\n",
-           pyobj_SAX, chunk, size, URI);
-#endif
-    if (pyobj_SAX != Py_None) {
-        SAX = &pythonSaxHandler;
-        Py_INCREF(pyobj_SAX);
-        /* The reference is released in pythonEndDocument() */
-    }
-    ret = xmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI);
-    pyret = libxml_xmlParserCtxtPtrWrap(ret);
-    return (pyret);
-}
-
-PyObject *
-libxml_htmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,
-                            PyObject * args)
-{
-#ifdef LIBXML_HTML_ENABLED
-    const char *chunk;
-    int size;
-    const char *URI;
-    PyObject *pyobj_SAX = NULL;
-    xmlSAXHandlerPtr SAX = NULL;
-    xmlParserCtxtPtr ret;
-    PyObject *pyret;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "Oziz:htmlCreatePushParser", &pyobj_SAX, &chunk,
-         &size, &URI))
-        return (NULL);
-
-#ifdef DEBUG
-    printf("libxml_htmlCreatePushParser(%p, %s, %d, %s) called\n",
-           pyobj_SAX, chunk, size, URI);
-#endif
-    if (pyobj_SAX != Py_None) {
-        SAX = &pythonSaxHandler;
-        Py_INCREF(pyobj_SAX);
-        /* The reference is released in pythonEndDocument() */
-    }
-    ret = htmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI,
-                                   XML_CHAR_ENCODING_NONE);
-    pyret = libxml_xmlParserCtxtPtrWrap(ret);
-    return (pyret);
-#else
-    Py_INCREF(Py_None);
-    return (Py_None);
-#endif /* LIBXML_HTML_ENABLED */
-}
-
-PyObject *
-libxml_xmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-#ifdef LIBXML_SAX1_ENABLED
-    int recover;
-    const char *URI;
-    PyObject *pyobj_SAX = NULL;
-    xmlSAXHandlerPtr SAX = NULL;
-    xmlParserCtxtPtr ctxt;
-
-    if (!PyArg_ParseTuple(args, (char *) "Osi:xmlSAXParseFile", &pyobj_SAX,
-                          &URI, &recover))
-        return (NULL);
-
-#ifdef DEBUG
-    printf("libxml_xmlSAXParseFile(%p, %s, %d) called\n",
-           pyobj_SAX, URI, recover);
-#endif
-    if (pyobj_SAX == Py_None) {
-        Py_INCREF(Py_None);
-        return (Py_None);
-    }
-    SAX = &pythonSaxHandler;
-    Py_INCREF(pyobj_SAX);
-    /* The reference is released in pythonEndDocument() */
-    ctxt = xmlNewSAXParserCtxt(SAX, pyobj_SAX);
-    xmlCtxtReadFile(ctxt, URI, NULL, 0);
-    xmlFreeParserCtxt(ctxt);
-#endif /* LIBXML_SAX1_ENABLED */
-    Py_INCREF(Py_None);
-    return (Py_None);
-}
-
-PyObject *
-libxml_htmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-#ifdef LIBXML_HTML_ENABLED
-    const char *URI;
-    const char *encoding;
-    PyObject *pyobj_SAX = NULL;
-    xmlSAXHandlerPtr SAX = NULL;
-    htmlParserCtxtPtr ctxt;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "Osz:htmlSAXParseFile", &pyobj_SAX, &URI,
-         &encoding))
-        return (NULL);
-
-#ifdef DEBUG
-    printf("libxml_htmlSAXParseFile(%p, %s, %s) called\n",
-           pyobj_SAX, URI, encoding);
-#endif
-    if (pyobj_SAX == Py_None) {
-        Py_INCREF(Py_None);
-        return (Py_None);
-    }
-    SAX = &pythonSaxHandler;
-    Py_INCREF(pyobj_SAX);
-    /* The reference is released in pythonEndDocument() */
-    ctxt = htmlNewSAXParserCtxt(SAX, pyobj_SAX);
-    htmlCtxtReadFile(ctxt, URI, encoding, 0);
-    htmlFreeParserCtxt(ctxt);
-    Py_INCREF(Py_None);
-    return (Py_None);
-#else
-    Py_INCREF(Py_None);
-    return (Py_None);
-#endif /* LIBXML_HTML_ENABLED */
-}
-
-/************************************************************************
- *									*
- *			Error message callback				*
- *									*
- ************************************************************************/
-
-static PyObject *libxml_xmlPythonErrorFuncHandler = NULL;
-static PyObject *libxml_xmlPythonErrorFuncCtxt = NULL;
-
-/* helper to build a xmlMalloc'ed string from a format and va_list */
-/* 
- * disabled the loop, the repeated call to vsnprintf without reset of ap
- * in case the initial buffer was too small segfaulted on x86_64
- * we now directly vsnprintf on a large buffer.
- */
-static char *
-libxml_buildMessage(const char *msg, va_list ap)
-{
-    int chars;
-    char *str;
-
-    str = (char *) xmlMalloc(1000);
-    if (str == NULL)
-        return NULL;
-
-    chars = vsnprintf(str, 999, msg, ap);
-    if (chars >= 998)
-        str[999] = 0;
-
-    return str;
-}
-
-static void
-libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
-                           ...)
-{
-    va_list ap;
-    PyObject *list;
-    PyObject *message;
-    PyObject *result;
-    char str[1000];
-    unsigned char *ptr = (unsigned char *)str;
-
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlErrorFuncHandler(%p, %s, ...) called\n", ctx, msg);
-#endif
-
-
-    if (libxml_xmlPythonErrorFuncHandler == NULL) {
-        va_start(ap, msg);
-        vfprintf(stderr, msg, ap);
-        va_end(ap);
-    } else {
-        va_start(ap, msg);
-        if (vsnprintf(str, 999, msg, ap) >= 998)
-	    str[999] = 0;
-        va_end(ap);
-
-#if PY_MAJOR_VERSION >= 3
-        /* Ensure the error string doesn't start at UTF8 continuation. */
-        while (*ptr && (*ptr & 0xc0) == 0x80)
-            ptr++;
-#endif
-
-        list = PyTuple_New(2);
-        PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt);
-        Py_XINCREF(libxml_xmlPythonErrorFuncCtxt);
-        message = libxml_charPtrConstWrap(ptr);
-        PyTuple_SetItem(list, 1, message);
-        result = PyObject_CallObject(libxml_xmlPythonErrorFuncHandler, list);
-        /* Forget any errors caused in the error handler. */
-        PyErr_Clear();
-        Py_XDECREF(list);
-        Py_XDECREF(result);
-    }
-}
-
-static void
-libxml_xmlErrorInitialize(void)
-{
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlErrorInitialize() called\n");
-#endif
-    xmlSetGenericErrorFunc(NULL, libxml_xmlErrorFuncHandler);
-    xmlThrDefSetGenericErrorFunc(NULL, libxml_xmlErrorFuncHandler);
-}
-
-static PyObject *
-libxml_xmlRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self,
-                               PyObject * args)
-{
-    PyObject *py_retval;
-    PyObject *pyobj_f;
-    PyObject *pyobj_ctx;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "OO:xmlRegisterErrorHandler", &pyobj_f,
-         &pyobj_ctx))
-        return (NULL);
-
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlRegisterErrorHandler(%p, %p) called\n", pyobj_ctx,
-           pyobj_f);
-#endif
-
-    if (libxml_xmlPythonErrorFuncHandler != NULL) {
-        Py_XDECREF(libxml_xmlPythonErrorFuncHandler);
-    }
-    if (libxml_xmlPythonErrorFuncCtxt != NULL) {
-        Py_XDECREF(libxml_xmlPythonErrorFuncCtxt);
-    }
-
-    Py_XINCREF(pyobj_ctx);
-    Py_XINCREF(pyobj_f);
-
-    /* TODO: check f is a function ! */
-    libxml_xmlPythonErrorFuncHandler = pyobj_f;
-    libxml_xmlPythonErrorFuncCtxt = pyobj_ctx;
-
-    py_retval = libxml_intWrap(1);
-    return (py_retval);
-}
-
-
-/************************************************************************
- *									*
- *                      Per parserCtxt error handler                    *
- *									*
- ************************************************************************/
-
-typedef struct 
-{
-    PyObject *f;
-    PyObject *arg;
-} xmlParserCtxtPyCtxt;
-typedef xmlParserCtxtPyCtxt *xmlParserCtxtPyCtxtPtr;
-
-static void
-libxml_xmlParserCtxtGenericErrorFuncHandler(void *ctx, int severity, char *str) 
-{
-    PyObject *list;
-    PyObject *result;
-    xmlParserCtxtPtr ctxt;
-    xmlParserCtxtPyCtxtPtr pyCtxt;
-    
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlParserCtxtGenericErrorFuncHandler(%p, %s, ...) called\n", ctx, str);
-#endif
-
-    ctxt = (xmlParserCtxtPtr)ctx;
-    pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
-
-    list = PyTuple_New(4);
-    PyTuple_SetItem(list, 0, pyCtxt->arg);
-    Py_XINCREF(pyCtxt->arg);
-    PyTuple_SetItem(list, 1, libxml_charPtrWrap(str));
-    PyTuple_SetItem(list, 2, libxml_intWrap(severity));
-    PyTuple_SetItem(list, 3, Py_None);
-    Py_INCREF(Py_None);
-    result = PyObject_CallObject(pyCtxt->f, list);
-    if (result == NULL) 
-    {
-	/* TODO: manage for the exception to be propagated... */
-	PyErr_Print();
-    }
-    Py_XDECREF(list);
-    Py_XDECREF(result);
-}
-
-static void 
-libxml_xmlParserCtxtErrorFuncHandler(void *ctx, const char *msg, ...) 
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_ERROR,libxml_buildMessage(msg,ap));
-    va_end(ap);
-}
-
-static void 
-libxml_xmlParserCtxtWarningFuncHandler(void *ctx, const char *msg, ...) 
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_WARNING,libxml_buildMessage(msg,ap));
-    va_end(ap);
-}
-
-static void 
-libxml_xmlParserCtxtValidityErrorFuncHandler(void *ctx, const char *msg, ...) 
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_ERROR,libxml_buildMessage(msg,ap));
-    va_end(ap);
-}
-
-static void 
-libxml_xmlParserCtxtValidityWarningFuncHandler(void *ctx, const char *msg, ...) 
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_WARNING,libxml_buildMessage(msg,ap));
-    va_end(ap);
-}
-
-static PyObject *
-libxml_xmlParserCtxtSetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) 
-{
-    PyObject *py_retval;
-    xmlParserCtxtPtr ctxt;
-    xmlParserCtxtPyCtxtPtr pyCtxt;
-    PyObject *pyobj_ctxt;
-    PyObject *pyobj_f;
-    PyObject *pyobj_arg;
-
-    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlParserCtxtSetErrorHandler",
-		          &pyobj_ctxt, &pyobj_f, &pyobj_arg))
-        return(NULL);
-    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
-    if (ctxt->_private == NULL) {
-	pyCtxt = xmlMalloc(sizeof(xmlParserCtxtPyCtxt));
-	if (pyCtxt == NULL) {
-	    py_retval = libxml_intWrap(-1);
-	    return(py_retval);
-	}
-	memset(pyCtxt,0,sizeof(xmlParserCtxtPyCtxt));
-	ctxt->_private = pyCtxt;
-    }
-    else {
-	pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
-    }
-    /* TODO: check f is a function ! */
-    Py_XDECREF(pyCtxt->f);
-    Py_XINCREF(pyobj_f);
-    pyCtxt->f = pyobj_f;
-    Py_XDECREF(pyCtxt->arg);
-    Py_XINCREF(pyobj_arg);
-    pyCtxt->arg = pyobj_arg;
-
-    if (pyobj_f != Py_None) {
-	ctxt->sax->error = libxml_xmlParserCtxtErrorFuncHandler;
-	ctxt->sax->warning = libxml_xmlParserCtxtWarningFuncHandler;
-	ctxt->vctxt.error = libxml_xmlParserCtxtValidityErrorFuncHandler;
-	ctxt->vctxt.warning = libxml_xmlParserCtxtValidityWarningFuncHandler;
-    }
-    else {
-	ctxt->sax->error = xmlParserError;
-	ctxt->vctxt.error = xmlParserValidityError;
-	ctxt->sax->warning = xmlParserWarning;
-	ctxt->vctxt.warning = xmlParserValidityWarning;
-    }
-
-    py_retval = libxml_intWrap(1);
-    return(py_retval);
-}
-
-static PyObject *
-libxml_xmlParserCtxtGetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) 
-{
-    PyObject *py_retval;
-    xmlParserCtxtPtr ctxt;
-    xmlParserCtxtPyCtxtPtr pyCtxt;
-    PyObject *pyobj_ctxt;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlParserCtxtGetErrorHandler",
-		          &pyobj_ctxt))
-        return(NULL);
-    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
-    py_retval = PyTuple_New(2);
-    if (ctxt->_private != NULL) {
-	pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
-
-	PyTuple_SetItem(py_retval, 0, pyCtxt->f);
-	Py_XINCREF(pyCtxt->f);
-	PyTuple_SetItem(py_retval, 1, pyCtxt->arg);
-	Py_XINCREF(pyCtxt->arg);
-    }
-    else {
-	/* no python error handler registered */
-	PyTuple_SetItem(py_retval, 0, Py_None);
-	Py_XINCREF(Py_None);
-	PyTuple_SetItem(py_retval, 1, Py_None);
-	Py_XINCREF(Py_None);
-    }
-    return(py_retval);
-}
-
-static PyObject *
-libxml_xmlFreeParserCtxt(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
-    xmlParserCtxtPtr ctxt;
-    PyObject *pyobj_ctxt;
-    xmlParserCtxtPyCtxtPtr pyCtxt;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeParserCtxt", &pyobj_ctxt))
-        return(NULL);
-    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
-
-    if (ctxt != NULL) {
-	pyCtxt = (xmlParserCtxtPyCtxtPtr)((xmlParserCtxtPtr)ctxt)->_private;
-	if (pyCtxt) {
-	    Py_XDECREF(pyCtxt->f);
-	    Py_XDECREF(pyCtxt->arg);
-	    xmlFree(pyCtxt);
-	}
-	xmlFreeParserCtxt(ctxt);
-    }
-
-    Py_INCREF(Py_None);
-    return(Py_None);
-}
-
-#ifdef LIBXML_VALID_ENABLED
-/***
- * xmlValidCtxt stuff
- */
-
-typedef struct 
-{
-    PyObject *warn;
-    PyObject *error;
-    PyObject *arg;
-} xmlValidCtxtPyCtxt;
-typedef xmlValidCtxtPyCtxt *xmlValidCtxtPyCtxtPtr;
-
-static void
-libxml_xmlValidCtxtGenericErrorFuncHandler(void *ctx, ATTRIBUTE_UNUSED int severity, char *str)
-{
-    PyObject *list;
-    PyObject *result;
-    xmlValidCtxtPyCtxtPtr pyCtxt;
-    
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlValidCtxtGenericErrorFuncHandler(%p, %d, %s, ...) called\n", ctx, severity, str);
-#endif
-
-    pyCtxt = (xmlValidCtxtPyCtxtPtr)ctx;
-    
-    list = PyTuple_New(2);
-    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
-    PyTuple_SetItem(list, 1, pyCtxt->arg);
-    Py_XINCREF(pyCtxt->arg);
-    result = PyObject_CallObject(pyCtxt->error, list);
-    if (result == NULL) 
-    {
-	/* TODO: manage for the exception to be propagated... */
-	PyErr_Print();
-    }
-    Py_XDECREF(list);
-    Py_XDECREF(result);
-}
-
-static void
-libxml_xmlValidCtxtGenericWarningFuncHandler(void *ctx, ATTRIBUTE_UNUSED int severity, char *str)
-{
-    PyObject *list;
-    PyObject *result;
-    xmlValidCtxtPyCtxtPtr pyCtxt;
-    
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlValidCtxtGenericWarningFuncHandler(%p, %d, %s, ...) called\n", ctx, severity, str);
-#endif
-
-    pyCtxt = (xmlValidCtxtPyCtxtPtr)ctx;
-
-    list = PyTuple_New(2);
-    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
-    PyTuple_SetItem(list, 1, pyCtxt->arg);
-    Py_XINCREF(pyCtxt->arg);
-    result = PyObject_CallObject(pyCtxt->warn, list);
-    if (result == NULL) 
-    {
-	/* TODO: manage for the exception to be propagated... */
-	PyErr_Print();
-    }
-    Py_XDECREF(list);
-    Py_XDECREF(result);
-}
-
-static void 
-libxml_xmlValidCtxtErrorFuncHandler(void *ctx, const char *msg, ...) 
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlValidCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_ERROR,libxml_buildMessage(msg,ap));
-    va_end(ap);
-}
-
-static void 
-libxml_xmlValidCtxtWarningFuncHandler(void *ctx, const char *msg, ...) 
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlValidCtxtGenericWarningFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_WARNING,libxml_buildMessage(msg,ap));
-    va_end(ap);
-}
-
-static PyObject *
-libxml_xmlSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_retval;
-    PyObject *pyobj_error;
-    PyObject *pyobj_warn;
-    PyObject *pyobj_ctx;
-    PyObject *pyobj_arg = Py_None;
-    xmlValidCtxtPtr ctxt;
-    xmlValidCtxtPyCtxtPtr pyCtxt;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "OOO|O:xmlSetValidErrors", &pyobj_ctx, &pyobj_error, &pyobj_warn, &pyobj_arg))
-        return (NULL);
-
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlSetValidErrors(%p, %p, %p) called\n", pyobj_ctx, pyobj_error, pyobj_warn);
-#endif
-
-    ctxt = PyValidCtxt_Get(pyobj_ctx);
-    pyCtxt = xmlMalloc(sizeof(xmlValidCtxtPyCtxt));
-    if (pyCtxt == NULL) {
-            py_retval = libxml_intWrap(-1);
-            return(py_retval);
-    }
-    memset(pyCtxt, 0, sizeof(xmlValidCtxtPyCtxt));
-
-    
-    /* TODO: check warn and error is a function ! */
-    Py_XDECREF(pyCtxt->error);
-    Py_XINCREF(pyobj_error);
-    pyCtxt->error = pyobj_error;
-    
-    Py_XDECREF(pyCtxt->warn);
-    Py_XINCREF(pyobj_warn);
-    pyCtxt->warn = pyobj_warn;
-    
-    Py_XDECREF(pyCtxt->arg);
-    Py_XINCREF(pyobj_arg);
-    pyCtxt->arg = pyobj_arg;
-
-    ctxt->error = libxml_xmlValidCtxtErrorFuncHandler;
-    ctxt->warning = libxml_xmlValidCtxtWarningFuncHandler;
-    ctxt->userData = pyCtxt;
-
-    py_retval = libxml_intWrap(1);
-    return (py_retval);
-}
-
-
-static PyObject *
-libxml_xmlFreeValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-    xmlValidCtxtPtr cur;
-    xmlValidCtxtPyCtxtPtr pyCtxt;
-    PyObject *pyobj_cur;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeValidCtxt", &pyobj_cur))
-        return(NULL);
-    cur = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_cur);
-
-    pyCtxt = (xmlValidCtxtPyCtxtPtr)(cur->userData);
-    if (pyCtxt != NULL)
-    {
-            Py_XDECREF(pyCtxt->error);
-            Py_XDECREF(pyCtxt->warn);
-            Py_XDECREF(pyCtxt->arg);
-            xmlFree(pyCtxt);
-    }
-
-    xmlFreeValidCtxt(cur);
-    Py_INCREF(Py_None);
-    return(Py_None);
-}
-#endif /* LIBXML_VALID_ENABLED */
-
-#ifdef LIBXML_READER_ENABLED
-/************************************************************************
- *									*
- *                      Per xmlTextReader error handler                 *
- *									*
- ************************************************************************/
-
-typedef struct 
-{
-    PyObject *f;
-    PyObject *arg;
-} xmlTextReaderPyCtxt;
-typedef xmlTextReaderPyCtxt *xmlTextReaderPyCtxtPtr;
-
-static void 
-libxml_xmlTextReaderErrorCallback(void *arg, 
-				  const char *msg,
-				  int severity,
-				  xmlTextReaderLocatorPtr locator)
-{
-    xmlTextReaderPyCtxt *pyCtxt = (xmlTextReaderPyCtxt *)arg;
-    PyObject *list;
-    PyObject *result;
-    
-    list = PyTuple_New(4);
-    PyTuple_SetItem(list, 0, pyCtxt->arg);
-    Py_XINCREF(pyCtxt->arg);
-    PyTuple_SetItem(list, 1, libxml_charPtrConstWrap(msg));
-    PyTuple_SetItem(list, 2, libxml_intWrap(severity));
-    PyTuple_SetItem(list, 3, libxml_xmlTextReaderLocatorPtrWrap(locator));
-    result = PyObject_CallObject(pyCtxt->f, list);
-    if (result == NULL)
-    {
-	/* TODO: manage for the exception to be propagated... */
-	PyErr_Print();
-    }
-    Py_XDECREF(list);
-    Py_XDECREF(result);
-}
-
-static PyObject *
-libxml_xmlTextReaderSetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
-{
-    xmlTextReaderPtr reader;
-    xmlTextReaderPyCtxtPtr pyCtxt;
-    xmlTextReaderErrorFunc f;
-    void *arg;
-    PyObject *pyobj_reader;
-    PyObject *pyobj_f;
-    PyObject *pyobj_arg;
-    PyObject *py_retval;
-
-    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlTextReaderSetErrorHandler", &pyobj_reader, &pyobj_f, &pyobj_arg))
-        return(NULL);
-    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
-    /* clear previous error handler */
-    xmlTextReaderGetErrorHandler(reader,&f,&arg);
-    if (arg != NULL) {
-	if (f == (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback) {
-	    /* ok, it's our error handler! */
-	    pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
-	    Py_XDECREF(pyCtxt->f);
-	    Py_XDECREF(pyCtxt->arg);
-	    xmlFree(pyCtxt);
-	}
-	else {
-	    /* 
-	     * there already an arg, and it's not ours,
-	     * there is definitely something wrong going on here...
-	     * we don't know how to free it, so we bail out... 
-	     */
-	    py_retval = libxml_intWrap(-1);
-	    return(py_retval);
-	}
-    }
-    xmlTextReaderSetErrorHandler(reader,NULL,NULL);
-    /* set new error handler */
-    if (pyobj_f != Py_None)
-    {
-	pyCtxt = (xmlTextReaderPyCtxtPtr)xmlMalloc(sizeof(xmlTextReaderPyCtxt));
-	if (pyCtxt == NULL) {
-	    py_retval = libxml_intWrap(-1);
-	    return(py_retval);
-	}
-	Py_XINCREF(pyobj_f);
-	pyCtxt->f = pyobj_f;
-	Py_XINCREF(pyobj_arg);
-	pyCtxt->arg = pyobj_arg;
-	xmlTextReaderSetErrorHandler(reader,
-	    (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback,
-	                             pyCtxt);
-    }
-
-    py_retval = libxml_intWrap(1);
-    return(py_retval);
-}
-
-static PyObject *
-libxml_xmlTextReaderGetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
-{
-    xmlTextReaderPtr reader;
-    xmlTextReaderPyCtxtPtr pyCtxt;
-    xmlTextReaderErrorFunc f;
-    void *arg;
-    PyObject *pyobj_reader;
-    PyObject *py_retval;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderSetErrorHandler", &pyobj_reader))
-        return(NULL);
-    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
-    xmlTextReaderGetErrorHandler(reader,&f,&arg);
-    py_retval = PyTuple_New(2);
-    if (f == (xmlTextReaderErrorFunc)libxml_xmlTextReaderErrorCallback) {
-	/* ok, it's our error handler! */
-	pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
-	PyTuple_SetItem(py_retval, 0, pyCtxt->f);
-	Py_XINCREF(pyCtxt->f);
-	PyTuple_SetItem(py_retval, 1, pyCtxt->arg);
-	Py_XINCREF(pyCtxt->arg);
-    }
-    else
-    {
-	/* f is null or it's not our error handler */
-	PyTuple_SetItem(py_retval, 0, Py_None);
-	Py_XINCREF(Py_None);
-	PyTuple_SetItem(py_retval, 1, Py_None);
-	Py_XINCREF(Py_None);
-    }
-    return(py_retval);
-}
-
-static PyObject *
-libxml_xmlFreeTextReader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
-    xmlTextReaderPtr reader;
-    PyObject *pyobj_reader;
-    xmlTextReaderPyCtxtPtr pyCtxt;
-    xmlTextReaderErrorFunc f;
-    void *arg;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeTextReader", &pyobj_reader))
-        return(NULL);
-    if (!PyCapsule_CheckExact(pyobj_reader)) {
-	Py_INCREF(Py_None);
-	return(Py_None);
-    }
-    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
-    if (reader == NULL) {
-	Py_INCREF(Py_None);
-	return(Py_None);
-    }
-
-    xmlTextReaderGetErrorHandler(reader,&f,&arg);
-    if (arg != NULL) {
-	if (f == (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback) {
-	    /* ok, it's our error handler! */
-	    pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
-	    Py_XDECREF(pyCtxt->f);
-	    Py_XDECREF(pyCtxt->arg);
-	    xmlFree(pyCtxt);
-	}
-	/* 
-	 * else, something wrong happened, because the error handler is
-	 * not owned by the python bindings...
-	 */
-    }
-
-    xmlFreeTextReader(reader);
-    Py_INCREF(Py_None);
-    return(Py_None);
-}
-#endif
-
-/************************************************************************
- *									*
- *			XPath extensions				*
- *									*
- ************************************************************************/
-
-static void
-libxml_xmlXPathFuncCallback(xmlXPathParserContextPtr ctxt, int nargs)
-{
-    PyObject *list, *cur, *result;
-    xmlXPathObjectPtr obj;
-    xmlXPathContextPtr rctxt;
-    PyObject *current_function = NULL;
-    const xmlChar *name;
-    const xmlChar *ns_uri;
-    int i;
-
-    if (ctxt == NULL)
-        return;
-    rctxt = ctxt->context;
-    if (rctxt == NULL)
-        return;
-    name = rctxt->function;
-    ns_uri = rctxt->functionURI;
-#ifdef DEBUG_XPATH
-    printf("libxml_xmlXPathFuncCallback called name %s URI %s\n", name,
-           ns_uri);
-#endif
-
-    /*
-     * Find the function, it should be there it was there at lookup
-     */
-    for (i = 0; i < libxml_xpathCallbacksNb; i++) {
-        if (                    /* TODO (ctxt == libxml_xpathCallbacks[i].ctx) && */
-						(xmlStrEqual(name, (*libxml_xpathCallbacks)[i].name)) &&
-               (xmlStrEqual(ns_uri, (*libxml_xpathCallbacks)[i].ns_uri))) {
-					current_function = (*libxml_xpathCallbacks)[i].function;
-        }
-    }
-    if (current_function == NULL) {
-        printf
-            ("libxml_xmlXPathFuncCallback: internal error %s not found !\n",
-             name);
-        return;
-    }
-
-    list = PyTuple_New(nargs + 1);
-    PyTuple_SetItem(list, 0, libxml_xmlXPathParserContextPtrWrap(ctxt));
-    for (i = nargs - 1; i >= 0; i--) {
-        obj = valuePop(ctxt);
-        cur = libxml_xmlXPathObjectPtrWrap(obj);
-        PyTuple_SetItem(list, i + 1, cur);
-    }
-    result = PyObject_CallObject(current_function, list);
-    Py_DECREF(list);
-
-    obj = libxml_xmlXPathObjectPtrConvert(result);
-    valuePush(ctxt, obj);
-}
-
-static xmlXPathFunction
-libxml_xmlXPathFuncLookupFunc(void *ctxt, const xmlChar * name,
-                              const xmlChar * ns_uri)
-{
-    int i;
-
-#ifdef DEBUG_XPATH
-    printf("libxml_xmlXPathFuncLookupFunc(%p, %s, %s) called\n",
-           ctxt, name, ns_uri);
-#endif
-    /*
-     * This is called once only. The address is then stored in the
-     * XPath expression evaluation, the proper object to call can
-     * then still be found using the execution context function
-     * and functionURI fields.
-     */
-    for (i = 0; i < libxml_xpathCallbacksNb; i++) {
-			if ((ctxt == (*libxml_xpathCallbacks)[i].ctx) &&
-					(xmlStrEqual(name, (*libxml_xpathCallbacks)[i].name)) &&
-					(xmlStrEqual(ns_uri, (*libxml_xpathCallbacks)[i].ns_uri))) {
-            return (libxml_xmlXPathFuncCallback);
-        }
-    }
-    return (NULL);
-}
-
-static void
-libxml_xpathCallbacksInitialize(void)
-{
-    int i;
-
-    if (libxml_xpathCallbacksInitialized != 0)
-        return;
-
-#ifdef DEBUG_XPATH
-    printf("libxml_xpathCallbacksInitialized called\n");
-#endif
-    libxml_xpathCallbacks = (libxml_xpathCallbackArray*)xmlMalloc(
-    		libxml_xpathCallbacksAllocd*sizeof(libxml_xpathCallback));
-
-    for (i = 0; i < libxml_xpathCallbacksAllocd; i++) {
-			(*libxml_xpathCallbacks)[i].ctx = NULL;
-			(*libxml_xpathCallbacks)[i].name = NULL;
-			(*libxml_xpathCallbacks)[i].ns_uri = NULL;
-			(*libxml_xpathCallbacks)[i].function = NULL;
-    }
-    libxml_xpathCallbacksInitialized = 1;
-}
-
-PyObject *
-libxml_xmlRegisterXPathFunction(ATTRIBUTE_UNUSED PyObject * self,
-                                PyObject * args)
-{
-    PyObject *py_retval;
-    int c_retval = 0;
-    xmlChar *name;
-    xmlChar *ns_uri;
-    xmlXPathContextPtr ctx;
-    PyObject *pyobj_ctx;
-    PyObject *pyobj_f;
-    int i;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "OszO:registerXPathFunction", &pyobj_ctx, &name,
-         &ns_uri, &pyobj_f))
-        return (NULL);
-
-    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
-    if (libxml_xpathCallbacksInitialized == 0)
-        libxml_xpathCallbacksInitialize();
-    xmlXPathRegisterFuncLookup(ctx, libxml_xmlXPathFuncLookupFunc, ctx);
-
-    if ((pyobj_ctx == NULL) || (name == NULL) || (pyobj_f == NULL)) {
-        py_retval = libxml_intWrap(-1);
-        return (py_retval);
-    }
-#ifdef DEBUG_XPATH
-    printf("libxml_registerXPathFunction(%p, %s, %s) called\n",
-           ctx, name, ns_uri);
-#endif
-    for (i = 0; i < libxml_xpathCallbacksNb; i++) {
-	if ((ctx == (*libxml_xpathCallbacks)[i].ctx) &&
-            (xmlStrEqual(name, (*libxml_xpathCallbacks)[i].name)) &&
-            (xmlStrEqual(ns_uri, (*libxml_xpathCallbacks)[i].ns_uri))) {
-            Py_XINCREF(pyobj_f);
-            Py_XDECREF((*libxml_xpathCallbacks)[i].function);
-            (*libxml_xpathCallbacks)[i].function = pyobj_f;
-            c_retval = 1;
-            goto done;
-        }
-    }
-    if (libxml_xpathCallbacksNb >= libxml_xpathCallbacksAllocd) {
-			libxml_xpathCallbacksAllocd+=10;
-	libxml_xpathCallbacks = (libxml_xpathCallbackArray*)xmlRealloc(
-		libxml_xpathCallbacks,
-		libxml_xpathCallbacksAllocd*sizeof(libxml_xpathCallback));
-    } 
-    i = libxml_xpathCallbacksNb++;
-    Py_XINCREF(pyobj_f);
-    (*libxml_xpathCallbacks)[i].ctx = ctx;
-    (*libxml_xpathCallbacks)[i].name = xmlStrdup(name);
-    (*libxml_xpathCallbacks)[i].ns_uri = xmlStrdup(ns_uri);
-    (*libxml_xpathCallbacks)[i].function = pyobj_f;
-        c_retval = 1;
-    
-  done:
-    py_retval = libxml_intWrap((int) c_retval);
-    return (py_retval);
-}
-
-PyObject *
-libxml_xmlXPathRegisterVariable(ATTRIBUTE_UNUSED PyObject * self,
-                                PyObject * args)
-{
-    PyObject *py_retval;
-    int c_retval = 0;
-    xmlChar *name;
-    xmlChar *ns_uri;
-    xmlXPathContextPtr ctx;
-    xmlXPathObjectPtr val;
-    PyObject *pyobj_ctx;
-    PyObject *pyobj_value;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "OszO:xpathRegisterVariable", &pyobj_ctx, &name,
-         &ns_uri, &pyobj_value))
-        return (NULL);
-
-    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
-    val = libxml_xmlXPathObjectPtrConvert(pyobj_value);
-
-    c_retval = xmlXPathRegisterVariableNS(ctx, name, ns_uri, val);
-    py_retval = libxml_intWrap(c_retval);
-    return (py_retval);
-}
-
-/************************************************************************
- *									*
- *			Global properties access			*
- *									*
- ************************************************************************/
-static PyObject *
-libxml_name(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    const xmlChar *res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:name", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-
-#ifdef DEBUG
-    printf("libxml_name: cur = %p type %d\n", cur, cur->type);
-#endif
-
-    switch (cur->type) {
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:{
-                xmlDocPtr doc = (xmlDocPtr) cur;
-
-                res = doc->URL;
-                break;
-            }
-        case XML_ATTRIBUTE_NODE:{
-                xmlAttrPtr attr = (xmlAttrPtr) cur;
-
-                res = attr->name;
-                break;
-            }
-        case XML_NAMESPACE_DECL:{
-                xmlNsPtr ns = (xmlNsPtr) cur;
-
-                res = ns->prefix;
-                break;
-            }
-        default:
-            res = cur->name;
-            break;
-    }
-    resultobj = libxml_constxmlCharPtrWrap(res);
-
-    return resultobj;
-}
-
-static PyObject *
-libxml_doc(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    xmlDocPtr res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:doc", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-
-#ifdef DEBUG
-    printf("libxml_doc: cur = %p\n", cur);
-#endif
-
-    switch (cur->type) {
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-            res = NULL;
-            break;
-        case XML_ATTRIBUTE_NODE:{
-                xmlAttrPtr attr = (xmlAttrPtr) cur;
-
-                res = attr->doc;
-                break;
-            }
-        case XML_NAMESPACE_DECL:
-            res = NULL;
-            break;
-        default:
-            res = cur->doc;
-            break;
-    }
-    resultobj = libxml_xmlDocPtrWrap(res);
-    return resultobj;
-}
-
-static PyObject *
-libxml_properties(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    xmlAttrPtr res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:properties", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-    if ((cur != NULL) && (cur->type == XML_ELEMENT_NODE))
-        res = cur->properties;
-    else
-        res = NULL;
-    resultobj = libxml_xmlAttrPtrWrap(res);
-    return resultobj;
-}
-
-static PyObject *
-libxml_next(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    xmlNodePtr res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:next", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-
-#ifdef DEBUG
-    printf("libxml_next: cur = %p\n", cur);
-#endif
-
-    switch (cur->type) {
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-            res = NULL;
-            break;
-        case XML_ATTRIBUTE_NODE:{
-                xmlAttrPtr attr = (xmlAttrPtr) cur;
-
-                res = (xmlNodePtr) attr->next;
-                break;
-            }
-        case XML_NAMESPACE_DECL:{
-                xmlNsPtr ns = (xmlNsPtr) cur;
-
-                res = (xmlNodePtr) ns->next;
-                break;
-            }
-        default:
-            res = cur->next;
-            break;
-
-    }
-    resultobj = libxml_xmlNodePtrWrap(res);
-    return resultobj;
-}
-
-static PyObject *
-libxml_prev(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    xmlNodePtr res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:prev", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-
-#ifdef DEBUG
-    printf("libxml_prev: cur = %p\n", cur);
-#endif
-
-    switch (cur->type) {
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-            res = NULL;
-            break;
-        case XML_ATTRIBUTE_NODE:{
-                xmlAttrPtr attr = (xmlAttrPtr) cur;
-
-                res = (xmlNodePtr) attr->prev;
-            }
-            break;
-        case XML_NAMESPACE_DECL:
-            res = NULL;
-            break;
-        default:
-            res = cur->prev;
-            break;
-    }
-    resultobj = libxml_xmlNodePtrWrap(res);
-    return resultobj;
-}
-
-static PyObject *
-libxml_children(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    xmlNodePtr res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:children", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-
-#ifdef DEBUG
-    printf("libxml_children: cur = %p\n", cur);
-#endif
-
-    switch (cur->type) {
-        case XML_ELEMENT_NODE:
-        case XML_ENTITY_REF_NODE:
-        case XML_ENTITY_NODE:
-        case XML_PI_NODE:
-        case XML_COMMENT_NODE:
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-        case XML_DTD_NODE:
-            res = cur->children;
-            break;
-        case XML_ATTRIBUTE_NODE:{
-                xmlAttrPtr attr = (xmlAttrPtr) cur;
-
-                res = attr->children;
-                break;
-            }
-        default:
-            res = NULL;
-            break;
-    }
-    resultobj = libxml_xmlNodePtrWrap(res);
-    return resultobj;
-}
-
-static PyObject *
-libxml_last(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    xmlNodePtr res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:last", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-
-#ifdef DEBUG
-    printf("libxml_last: cur = %p\n", cur);
-#endif
-
-    switch (cur->type) {
-        case XML_ELEMENT_NODE:
-        case XML_ENTITY_REF_NODE:
-        case XML_ENTITY_NODE:
-        case XML_PI_NODE:
-        case XML_COMMENT_NODE:
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-        case XML_DTD_NODE:
-            res = cur->last;
-            break;
-        case XML_ATTRIBUTE_NODE:{
-                xmlAttrPtr attr = (xmlAttrPtr) cur;
-
-                res = attr->last;
-		break;
-            }
-        default:
-            res = NULL;
-            break;
-    }
-    resultobj = libxml_xmlNodePtrWrap(res);
-    return resultobj;
-}
-
-static PyObject *
-libxml_parent(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    xmlNodePtr res;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:parent", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-
-#ifdef DEBUG
-    printf("libxml_parent: cur = %p\n", cur);
-#endif
-
-    switch (cur->type) {
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-            res = NULL;
-            break;
-        case XML_ATTRIBUTE_NODE:{
-                xmlAttrPtr attr = (xmlAttrPtr) cur;
-
-                res = attr->parent;
-            }
-	    break;
-        case XML_ENTITY_DECL:
-        case XML_NAMESPACE_DECL:
-        case XML_XINCLUDE_START:
-        case XML_XINCLUDE_END:
-            res = NULL;
-            break;
-        default:
-            res = cur->parent;
-            break;
-    }
-    resultobj = libxml_xmlNodePtrWrap(res);
-    return resultobj;
-}
-
-static PyObject *
-libxml_type(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *resultobj, *obj;
-    xmlNodePtr cur;
-    const xmlChar *res = NULL;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:last", &obj))
-        return NULL;
-    cur = PyxmlNode_Get(obj);
-    if (cur == NULL) {
-        Py_INCREF(Py_None);
-	return (Py_None);
-    }
-
-#ifdef DEBUG
-    printf("libxml_type: cur = %p\n", cur);
-#endif
-
-    switch (cur->type) {
-        case XML_ELEMENT_NODE:
-            res = (const xmlChar *) "element";
-            break;
-        case XML_ATTRIBUTE_NODE:
-            res = (const xmlChar *) "attribute";
-            break;
-        case XML_TEXT_NODE:
-            res = (const xmlChar *) "text";
-            break;
-        case XML_CDATA_SECTION_NODE:
-            res = (const xmlChar *) "cdata";
-            break;
-        case XML_ENTITY_REF_NODE:
-            res = (const xmlChar *) "entity_ref";
-            break;
-        case XML_ENTITY_NODE:
-            res = (const xmlChar *) "entity";
-            break;
-        case XML_PI_NODE:
-            res = (const xmlChar *) "pi";
-            break;
-        case XML_COMMENT_NODE:
-            res = (const xmlChar *) "comment";
-            break;
-        case XML_DOCUMENT_NODE:
-            res = (const xmlChar *) "document_xml";
-            break;
-        case XML_DOCUMENT_TYPE_NODE:
-            res = (const xmlChar *) "doctype";
-            break;
-        case XML_DOCUMENT_FRAG_NODE:
-            res = (const xmlChar *) "fragment";
-            break;
-        case XML_NOTATION_NODE:
-            res = (const xmlChar *) "notation";
-            break;
-        case XML_HTML_DOCUMENT_NODE:
-            res = (const xmlChar *) "document_html";
-            break;
-        case XML_DTD_NODE:
-            res = (const xmlChar *) "dtd";
-            break;
-        case XML_ELEMENT_DECL:
-            res = (const xmlChar *) "elem_decl";
-            break;
-        case XML_ATTRIBUTE_DECL:
-            res = (const xmlChar *) "attribute_decl";
-            break;
-        case XML_ENTITY_DECL:
-            res = (const xmlChar *) "entity_decl";
-            break;
-        case XML_NAMESPACE_DECL:
-            res = (const xmlChar *) "namespace";
-            break;
-        case XML_XINCLUDE_START:
-            res = (const xmlChar *) "xinclude_start";
-            break;
-        case XML_XINCLUDE_END:
-            res = (const xmlChar *) "xinclude_end";
-            break;
-    }
-#ifdef DEBUG
-    printf("libxml_type: cur = %p: %s\n", cur, res);
-#endif
-
-    resultobj = libxml_constxmlCharPtrWrap(res);
-    return resultobj;
-}
-
-/************************************************************************
- *									*
- *			Specific accessor functions			*
- *									*
- ************************************************************************/
-PyObject *
-libxml_xmlNodeGetNsDefs(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_retval;
-    xmlNsPtr c_retval;
-    xmlNodePtr node;
-    PyObject *pyobj_node;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "O:xmlNodeGetNsDefs", &pyobj_node))
-        return (NULL);
-    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
-
-    if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) {
-        Py_INCREF(Py_None);
-        return (Py_None);
-    }
-    c_retval = node->nsDef;
-    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
-    return (py_retval);
-}
-
-PyObject *
-libxml_xmlNodeRemoveNsDef(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_retval;
-    xmlNsPtr ns, prev;
-    xmlNodePtr node;
-    PyObject *pyobj_node;
-    xmlChar *href;
-    xmlNsPtr c_retval;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "Oz:xmlNodeRemoveNsDef", &pyobj_node, &href))
-        return (NULL);
-    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
-    ns = NULL;
-
-    if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) {
-        Py_INCREF(Py_None);
-        return (Py_None);
-    }
-
-    if (href == NULL) {
-	ns = node->nsDef;
-	node->nsDef = NULL;
-	c_retval = 0;
-    }
-    else {
-	prev = NULL;
-	ns = node->nsDef;
-	while (ns != NULL) {
-	    if (xmlStrEqual(ns->href, href)) {
-		if (prev != NULL)
-		    prev->next = ns->next;
-		else
-		    node->nsDef = ns->next;
-		ns->next = NULL;
-		c_retval = 0;
-		break;
-	    }
-	    prev = ns;
-	    ns = ns->next;
-	}
-    }
-
-    c_retval = ns;
-    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
-    return (py_retval);
-}
-
-PyObject *
-libxml_xmlNodeGetNs(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_retval;
-    xmlNsPtr c_retval;
-    xmlNodePtr node;
-    PyObject *pyobj_node;
-
-    if (!PyArg_ParseTuple(args, (char *) "O:xmlNodeGetNs", &pyobj_node))
-        return (NULL);
-    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
-
-    if ((node == NULL) ||
-        ((node->type != XML_ELEMENT_NODE) &&
-	 (node->type != XML_ATTRIBUTE_NODE))) {
-        Py_INCREF(Py_None);
-        return (Py_None);
-    }
-    c_retval = node->ns;
-    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
-    return (py_retval);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/************************************************************************
- *									*
- *			Serialization front-end				*
- *									*
- ************************************************************************/
-
-static PyObject *
-libxml_serializeNode(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_retval = NULL;
-    xmlChar *c_retval;
-    PyObject *pyobj_node;
-    xmlNodePtr node;
-    xmlDocPtr doc;
-    const char *encoding;
-    int format;
-    xmlSaveCtxtPtr ctxt;
-    xmlBufferPtr buf;
-    int options = 0;
-
-    if (!PyArg_ParseTuple(args, (char *) "Ozi:serializeNode", &pyobj_node,
-                          &encoding, &format))
-        return (NULL);
-    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
-
-    if (node == NULL) {
-        Py_INCREF(Py_None);
-        return (Py_None);
-    }
-    if (node->type == XML_DOCUMENT_NODE) {
-        doc = (xmlDocPtr) node;
-	node = NULL;
-#ifdef LIBXML_HTML_ENABLED
-    } else if (node->type == XML_HTML_DOCUMENT_NODE) {
-        doc = (xmlDocPtr) node;
-	node = NULL;
-#endif
-    } else {
-        if (node->type == XML_NAMESPACE_DECL)
-	    doc = NULL;
-	else
-            doc = node->doc;
-        if ((doc == NULL) || (doc->type == XML_DOCUMENT_NODE)) {
-#ifdef LIBXML_HTML_ENABLED
-        } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
-#endif /* LIBXML_HTML_ENABLED */
-        } else {
-            Py_INCREF(Py_None);
-            return (Py_None);
-        }
-    }
-
-
-    buf = xmlBufferCreate();
-    if (buf == NULL) {
-	Py_INCREF(Py_None);
-	return (Py_None);
-    }
-    if (format) options |= XML_SAVE_FORMAT;
-    ctxt = xmlSaveToBuffer(buf, encoding, options);
-    if (ctxt == NULL) {
-	xmlBufferFree(buf);
-	Py_INCREF(Py_None);
-	return (Py_None);
-    }
-    if (node == NULL)
-	xmlSaveDoc(ctxt, doc);
-    else
-	xmlSaveTree(ctxt, node);
-    xmlSaveClose(ctxt);
-
-    c_retval = buf->content;
-    buf->content = NULL;
-
-    xmlBufferFree(buf);
-    py_retval = libxml_charPtrWrap((char *) c_retval);
-
-    return (py_retval);
-}
-
-static PyObject *
-libxml_saveNodeTo(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_file = NULL;
-    FILE *output;
-    PyObject *pyobj_node;
-    xmlNodePtr node;
-    xmlDocPtr doc;
-    const char *encoding;
-    int format;
-    int len;
-    xmlOutputBufferPtr buf;
-    xmlCharEncodingHandlerPtr handler = NULL;
-
-    if (!PyArg_ParseTuple(args, (char *) "OOzi:serializeNode", &pyobj_node,
-                          &py_file, &encoding, &format))
-        return (NULL);
-    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
-    if (node == NULL) {
-        return (PyLong_FromLong((long) -1));
-    }
-    output = PyFile_Get(py_file);
-    if (output == NULL) {
-        return (PyLong_FromLong((long) -1));
-    }
-
-    if (node->type == XML_DOCUMENT_NODE) {
-        doc = (xmlDocPtr) node;
-    } else if (node->type == XML_HTML_DOCUMENT_NODE) {
-        doc = (xmlDocPtr) node;
-    } else {
-        doc = node->doc;
-    }
-#ifdef LIBXML_HTML_ENABLED
-    if (doc->type == XML_HTML_DOCUMENT_NODE) {
-        if (encoding == NULL)
-            encoding = (const char *) htmlGetMetaEncoding(doc);
-    }
-#endif /* LIBXML_HTML_ENABLED */
-    if (encoding != NULL) {
-        handler = xmlFindCharEncodingHandler(encoding);
-        if (handler == NULL) {
-            PyFile_Release(output);
-            return (PyLong_FromLong((long) -1));
-        }
-    }
-    if (doc->type == XML_HTML_DOCUMENT_NODE) {
-        if (handler == NULL)
-            handler = xmlFindCharEncodingHandler("HTML");
-        if (handler == NULL)
-            handler = xmlFindCharEncodingHandler("ascii");
-    }
-
-    buf = xmlOutputBufferCreateFile(output, handler);
-    if (node->type == XML_DOCUMENT_NODE) {
-        len = xmlSaveFormatFileTo(buf, doc, encoding, format);
-#ifdef LIBXML_HTML_ENABLED
-    } else if (node->type == XML_HTML_DOCUMENT_NODE) {
-        htmlDocContentDumpFormatOutput(buf, doc, encoding, format);
-        len = xmlOutputBufferClose(buf);
-    } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
-        htmlNodeDumpFormatOutput(buf, doc, node, encoding, format);
-        len = xmlOutputBufferClose(buf);
-#endif /* LIBXML_HTML_ENABLED */
-    } else {
-        xmlNodeDumpOutput(buf, doc, node, 0, format, encoding);
-        len = xmlOutputBufferClose(buf);
-    }
-    PyFile_Release(output);
-    return (PyLong_FromLong((long) len));
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- *									*
- *			Extra stuff					*
- *									*
- ************************************************************************/
-PyObject *
-libxml_xmlNewNode(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_retval;
-    xmlChar *name;
-    xmlNodePtr node;
-
-    if (!PyArg_ParseTuple(args, (char *) "s:xmlNewNode", &name))
-        return (NULL);
-    node = (xmlNodePtr) xmlNewNode(NULL, name);
-#ifdef DEBUG
-    printf("NewNode: %s : %p\n", name, (void *) node);
-#endif
-
-    if (node == NULL) {
-        Py_INCREF(Py_None);
-        return (Py_None);
-    }
-    py_retval = libxml_xmlNodePtrWrap(node);
-    return (py_retval);
-}
-
-
-/************************************************************************
- *									*
- *			Local Catalog stuff				*
- *									*
- ************************************************************************/
-static PyObject *
-libxml_addLocalCatalog(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    xmlChar *URL;
-    xmlParserCtxtPtr ctxt;
-    PyObject *pyobj_ctxt;
-
-    if (!PyArg_ParseTuple(args, (char *)"Os:addLocalCatalog", &pyobj_ctxt, &URL))
-        return(NULL);
-
-    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
-
-    if (URL != NULL) {
-	ctxt->catalogs = xmlCatalogAddLocal(ctxt->catalogs, URL);
-    }
-
-#ifdef DEBUG
-    printf("LocalCatalog: %s\n", URL);
-#endif
-
-    Py_INCREF(Py_None);
-    return (Py_None);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-/************************************************************************
- *                                                                      *
- * RelaxNG error handler registration                                   *
- *                                                                      *
- ************************************************************************/
-
-typedef struct 
-{
-    PyObject *warn;
-    PyObject *error;
-    PyObject *arg;
-} xmlRelaxNGValidCtxtPyCtxt;
-typedef xmlRelaxNGValidCtxtPyCtxt *xmlRelaxNGValidCtxtPyCtxtPtr;
-
-static void
-libxml_xmlRelaxNGValidityGenericErrorFuncHandler(void *ctx, char *str) 
-{
-    PyObject *list;
-    PyObject *result;
-    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
-    
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlRelaxNGValidityGenericErrorFuncHandler(%p, %s, ...) called\n", ctx, str);
-#endif
-
-    pyCtxt = (xmlRelaxNGValidCtxtPyCtxtPtr)ctx;
-
-    list = PyTuple_New(2);
-    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
-    PyTuple_SetItem(list, 1, pyCtxt->arg);
-    Py_XINCREF(pyCtxt->arg);
-    result = PyObject_CallObject(pyCtxt->error, list);
-    if (result == NULL) 
-    {
-        /* TODO: manage for the exception to be propagated... */
-        PyErr_Print();
-    }
-    Py_XDECREF(list);
-    Py_XDECREF(result);
-}
-
-static void
-libxml_xmlRelaxNGValidityGenericWarningFuncHandler(void *ctx, char *str) 
-{
-    PyObject *list;
-    PyObject *result;
-    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
-    
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlRelaxNGValidityGenericWarningFuncHandler(%p, %s, ...) called\n", ctx, str);
-#endif
-
-    pyCtxt = (xmlRelaxNGValidCtxtPyCtxtPtr)ctx;
-
-    list = PyTuple_New(2);
-    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
-    PyTuple_SetItem(list, 1, pyCtxt->arg);
-    Py_XINCREF(pyCtxt->arg);
-    result = PyObject_CallObject(pyCtxt->warn, list);
-    if (result == NULL) 
-    {
-        /* TODO: manage for the exception to be propagated... */
-        PyErr_Print();
-    }
-    Py_XDECREF(list);
-    Py_XDECREF(result);
-}
-
-static void
-libxml_xmlRelaxNGValidityErrorFunc(void *ctx, const char *msg, ...)
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlRelaxNGValidityGenericErrorFuncHandler(ctx, libxml_buildMessage(msg, ap));
-    va_end(ap);
-}
-
-static void
-libxml_xmlRelaxNGValidityWarningFunc(void *ctx, const char *msg, ...)
-{
-    va_list ap;
-
-    va_start(ap, msg);
-    libxml_xmlRelaxNGValidityGenericWarningFuncHandler(ctx, libxml_buildMessage(msg, ap));
-    va_end(ap);
-}
-
-static PyObject *
-libxml_xmlRelaxNGSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-    PyObject *py_retval;
-    PyObject *pyobj_error;
-    PyObject *pyobj_warn;
-    PyObject *pyobj_ctx;
-    PyObject *pyobj_arg = Py_None;
-    xmlRelaxNGValidCtxtPtr ctxt;
-    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
-
-    if (!PyArg_ParseTuple
-        (args, (char *) "OOO|O:xmlRelaxNGSetValidErrors", &pyobj_ctx, &pyobj_error, &pyobj_warn, &pyobj_arg))
-        return (NULL);
-
-#ifdef DEBUG_ERROR
-    printf("libxml_xmlRelaxNGSetValidErrors(%p, %p, %p) called\n", pyobj_ctx, pyobj_error, pyobj_warn);
-#endif
-
-    ctxt = PyrelaxNgValidCtxt_Get(pyobj_ctx);
-    if (xmlRelaxNGGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == -1)
-    {
-        py_retval = libxml_intWrap(-1);
-        return(py_retval);
-    }
-    
-    if (pyCtxt == NULL)
-    {
-        /* first time to set the error handlers */
-        pyCtxt = xmlMalloc(sizeof(xmlRelaxNGValidCtxtPyCtxt));
-        if (pyCtxt == NULL) {
-            py_retval = libxml_intWrap(-1);
-            return(py_retval);
-        }
-        memset(pyCtxt, 0, sizeof(xmlRelaxNGValidCtxtPyCtxt));
-    }
-    
-    /* TODO: check warn and error is a function ! */
-    Py_XDECREF(pyCtxt->error);
-    Py_XINCREF(pyobj_error);
-    pyCtxt->error = pyobj_error;
-    
-    Py_XDECREF(pyCtxt->warn);
-    Py_XINCREF(pyobj_warn);
-    pyCtxt->warn = pyobj_warn;
-    
-    Py_XDECREF(pyCtxt->arg);
-    Py_XINCREF(pyobj_arg);
-    pyCtxt->arg = pyobj_arg;
-
-    xmlRelaxNGSetValidErrors(ctxt, &libxml_xmlRelaxNGValidityErrorFunc, &libxml_xmlRelaxNGValidityWarningFunc, pyCtxt);
-
-    py_retval = libxml_intWrap(1);
-    return (py_retval);
-}
-
-static PyObject *
-libxml_xmlRelaxNGFreeValidCtxt(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
-    xmlRelaxNGValidCtxtPtr ctxt;
-    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
-    PyObject *pyobj_ctxt;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGFreeValidCtxt", &pyobj_ctxt))
-        return(NULL);
-    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
-
-    if (xmlRelaxNGGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == 0)
-    {
-        if (pyCtxt != NULL)
-        {
-            Py_XDECREF(pyCtxt->error);
-            Py_XDECREF(pyCtxt->warn);
-            Py_XDECREF(pyCtxt->arg);
-            xmlFree(pyCtxt);
-        }
-    }
-    
-    xmlRelaxNGFreeValidCtxt(ctxt);
-    Py_INCREF(Py_None);
-    return(Py_None);
-}
-
-typedef struct
-{
-	PyObject *warn;
-	PyObject *error;
-	PyObject *arg;
-} xmlSchemaValidCtxtPyCtxt;
-typedef xmlSchemaValidCtxtPyCtxt *xmlSchemaValidCtxtPyCtxtPtr;
-
-static void
-libxml_xmlSchemaValidityGenericErrorFuncHandler(void *ctx, char *str)
-{
-	PyObject *list;
-	PyObject *result;
-	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
-
-#ifdef DEBUG_ERROR
-	printf("libxml_xmlSchemaValidityGenericErrorFuncHandler(%p, %s, ...) called\n", ctx, str);
-#endif
-
-	pyCtxt = (xmlSchemaValidCtxtPyCtxtPtr) ctx;
-
-	list = PyTuple_New(2);
-	PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
-	PyTuple_SetItem(list, 1, pyCtxt->arg);
-	Py_XINCREF(pyCtxt->arg);
-	result = PyObject_CallObject(pyCtxt->error, list);
-	if (result == NULL) 
-	{
-		/* TODO: manage for the exception to be propagated... */
-		PyErr_Print();
-	}
-	Py_XDECREF(list);
-	Py_XDECREF(result);
-}
-
-static void
-libxml_xmlSchemaValidityGenericWarningFuncHandler(void *ctx, char *str)
-{
-	PyObject *list;
-	PyObject *result;
-	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
-
-#ifdef DEBUG_ERROR
-	printf("libxml_xmlSchemaValidityGenericWarningFuncHandler(%p, %s, ...) called\n", ctx, str);
-#endif
-	
-	pyCtxt = (xmlSchemaValidCtxtPyCtxtPtr) ctx;
-
-	list = PyTuple_New(2);
-	PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
-	PyTuple_SetItem(list, 1, pyCtxt->arg);
-	Py_XINCREF(pyCtxt->arg);
-	result = PyObject_CallObject(pyCtxt->warn, list);
-	if (result == NULL)
-	{
-		/* TODO: manage for the exception to be propagated... */
-		PyErr_Print();
-	}
-	Py_XDECREF(list);
-	Py_XDECREF(result);
-}
-
-static void
-libxml_xmlSchemaValidityErrorFunc(void *ctx, const char *msg, ...)
-{
-	va_list ap;
-	
-	va_start(ap, msg);
-	libxml_xmlSchemaValidityGenericErrorFuncHandler(ctx, libxml_buildMessage(msg, ap));
-	va_end(ap);
-}
-
-static void
-libxml_xmlSchemaValidityWarningFunc(void *ctx, const char *msg, ...)
-{
-	va_list ap;
-
-	va_start(ap, msg);
-	libxml_xmlSchemaValidityGenericWarningFuncHandler(ctx, libxml_buildMessage(msg, ap));
-	va_end(ap);
-}
-
-PyObject *
-libxml_xmlSchemaSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-	PyObject *py_retval;
-	PyObject *pyobj_error;
-	PyObject *pyobj_warn;
-	PyObject *pyobj_ctx;
-	PyObject *pyobj_arg = Py_None;
-	xmlSchemaValidCtxtPtr ctxt;
-	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
-
-	if (!PyArg_ParseTuple
-		(args, (char *) "OOO|O:xmlSchemaSetValidErrors", &pyobj_ctx, &pyobj_error, &pyobj_warn, &pyobj_arg))
-		return (NULL);
-
-#ifdef DEBUG_ERROR
-	printf("libxml_xmlSchemaSetValidErrors(%p, %p, %p) called\n", pyobj_ctx, pyobj_error, pyobj_warn);
-#endif
-
-	ctxt = PySchemaValidCtxt_Get(pyobj_ctx);
-	if (xmlSchemaGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == -1)
-	{
-		py_retval = libxml_intWrap(-1);
-		return(py_retval);
-	}
-
-	if (pyCtxt == NULL)
-	{
-		/* first time to set the error handlers */
-		pyCtxt = xmlMalloc(sizeof(xmlSchemaValidCtxtPyCtxt));
-		if (pyCtxt == NULL) {
-			py_retval = libxml_intWrap(-1);
-			return(py_retval);
-		}
-		memset(pyCtxt, 0, sizeof(xmlSchemaValidCtxtPyCtxt));
-	}
-
-	/* TODO: check warn and error is a function ! */
-	Py_XDECREF(pyCtxt->error);
-	Py_XINCREF(pyobj_error);
-	pyCtxt->error = pyobj_error;
-
-	Py_XDECREF(pyCtxt->warn);
-	Py_XINCREF(pyobj_warn);
-	pyCtxt->warn = pyobj_warn;
-
-	Py_XDECREF(pyCtxt->arg);
-	Py_XINCREF(pyobj_arg);
-	pyCtxt->arg = pyobj_arg;
-
-	xmlSchemaSetValidErrors(ctxt, &libxml_xmlSchemaValidityErrorFunc, &libxml_xmlSchemaValidityWarningFunc, pyCtxt);
-
-	py_retval = libxml_intWrap(1);
-	return(py_retval);
-}
-
-static PyObject *
-libxml_xmlSchemaFreeValidCtxt(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
-{
-	xmlSchemaValidCtxtPtr ctxt;
-	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
-	PyObject *pyobj_ctxt;
-
-	if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaFreeValidCtxt", &pyobj_ctxt))
-		return(NULL);
-	ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
-
-	if (xmlSchemaGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == 0)
-	{
-		if (pyCtxt != NULL)
-		{
-			Py_XDECREF(pyCtxt->error);
-			Py_XDECREF(pyCtxt->warn);
-			Py_XDECREF(pyCtxt->arg);
-			xmlFree(pyCtxt);
-		}
-	}
-
-	xmlSchemaFreeValidCtxt(ctxt);
-	Py_INCREF(Py_None);
-	return(Py_None);
-}
-
-#endif
-
-#ifdef LIBXML_C14N_ENABLED
-#ifdef LIBXML_OUTPUT_ENABLED
-
-/************************************************************************
- *                                                                      *
- * XML Canonicalization c14n                                            *
- *                                                                      *
- ************************************************************************/
-
-static int
-PyxmlNodeSet_Convert(PyObject *py_nodeset, xmlNodeSetPtr *result)
-{
-    xmlNodeSetPtr nodeSet;
-    int is_tuple = 0;
-
-    if (PyTuple_Check(py_nodeset))
-        is_tuple = 1;
-    else if (PyList_Check(py_nodeset))
-        is_tuple = 0;
-    else if (py_nodeset == Py_None) {
-        *result = NULL;
-        return 0;
-    }
-    else {
-        PyErr_SetString(PyExc_TypeError,
-                        "must be a tuple or list of nodes.");
-        return -1;
-    }
-
-    nodeSet = (xmlNodeSetPtr) xmlMalloc(sizeof(xmlNodeSet));
-    if (nodeSet == NULL) {
-        PyErr_SetString(PyExc_MemoryError, "");
-        return -1;
-    }
-
-    nodeSet->nodeNr = 0;
-    nodeSet->nodeMax = (is_tuple
-                        ? PyTuple_GET_SIZE(py_nodeset)
-                        : PyList_GET_SIZE(py_nodeset));
-    nodeSet->nodeTab
-        = (xmlNodePtr *) xmlMalloc (nodeSet->nodeMax
-                                    * sizeof(xmlNodePtr));
-    if (nodeSet->nodeTab == NULL) {
-        xmlFree(nodeSet);
-        PyErr_SetString(PyExc_MemoryError, "");
-        return -1;
-    }
-    memset(nodeSet->nodeTab, 0 ,
-           nodeSet->nodeMax * sizeof(xmlNodePtr));
-
-    {
-        int idx;
-        for (idx=0; idx < nodeSet->nodeMax; ++idx) {
-            xmlNodePtr pynode =
-                PyxmlNode_Get (is_tuple
-                               ? PyTuple_GET_ITEM(py_nodeset, idx)
-                               : PyList_GET_ITEM(py_nodeset, idx));
-            if (pynode)
-                nodeSet->nodeTab[nodeSet->nodeNr++] = pynode;
-        }
-    }
-    *result = nodeSet;
-    return 0;
-}
-
-static int
-PystringSet_Convert(PyObject *py_strings, xmlChar *** result)
-{
-    /* NOTE: the array should be freed, but the strings are shared
-       with the python strings and so must not be freed. */
-
-    xmlChar ** strings;
-    int is_tuple = 0;
-    int count;
-    int init_index = 0;
-
-    if (PyTuple_Check(py_strings))
-        is_tuple = 1;
-    else if (PyList_Check(py_strings))
-        is_tuple = 0;
-    else if (py_strings == Py_None) {
-        *result = NULL;
-        return 0;
-    }
-    else {
-        PyErr_SetString(PyExc_TypeError,
-                        "must be a tuple or list of strings.");
-        return -1;
-    }
-
-    count = (is_tuple
-             ? PyTuple_GET_SIZE(py_strings)
-             : PyList_GET_SIZE(py_strings));
-
-    strings = (xmlChar **) xmlMalloc(sizeof(xmlChar *) * count);
-
-    if (strings == NULL) {
-        PyErr_SetString(PyExc_MemoryError, "");
-        return -1;
-    }
-
-    memset(strings, 0 , sizeof(xmlChar *) * count);
-
-    {
-        int idx;
-        for (idx=0; idx < count; ++idx) {
-            char* s = PyBytes_AsString
-                (is_tuple
-                 ? PyTuple_GET_ITEM(py_strings, idx)
-                 : PyList_GET_ITEM(py_strings, idx));
-            if (s)
-                strings[init_index++] = (xmlChar *)s;
-            else {
-                xmlFree(strings);
-                PyErr_SetString(PyExc_TypeError,
-                                "must be a tuple or list of strings.");
-                return -1;
-            }
-        }
-    }
-
-    *result = strings;
-    return 0;
-}
-
-static PyObject *
-libxml_C14NDocDumpMemory(ATTRIBUTE_UNUSED PyObject * self,
-                         PyObject * args)
-{
-    PyObject *py_retval = NULL;
-
-    PyObject *pyobj_doc;
-    PyObject *pyobj_nodes;
-    int exclusive;
-    PyObject *pyobj_prefixes;
-    int with_comments;
-
-    xmlDocPtr doc;
-    xmlNodeSetPtr nodes;
-    xmlChar **prefixes = NULL;
-    xmlChar *doc_txt;
-
-    int result;
-
-    if (!PyArg_ParseTuple(args, (char *) "OOiOi:C14NDocDumpMemory",
-                          &pyobj_doc,
-                          &pyobj_nodes,
-                          &exclusive,
-                          &pyobj_prefixes,
-                          &with_comments))
-        return (NULL);
-
-    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
-    if (!doc) {
-        PyErr_SetString(PyExc_TypeError, "bad document.");
-        return NULL;
-    }
-
-    result = PyxmlNodeSet_Convert(pyobj_nodes, &nodes);
-    if (result < 0) return NULL;
-
-    if (exclusive) {
-        result = PystringSet_Convert(pyobj_prefixes, &prefixes);
-        if (result < 0) {
-            if (nodes) {
-                xmlFree(nodes->nodeTab);
-                xmlFree(nodes);
-            }
-            return NULL;
-        }
-    }
-
-    result = xmlC14NDocDumpMemory(doc,
-                                  nodes,
-                                  exclusive,
-                                  prefixes,
-                                  with_comments,
-                                  &doc_txt);
-
-    if (nodes) {
-        xmlFree(nodes->nodeTab);
-        xmlFree(nodes);
-    }
-    if (prefixes) {
-        xmlChar ** idx = prefixes;
-        while (*idx) xmlFree(*(idx++));
-        xmlFree(prefixes);
-    }
-
-    if (result < 0) {
-        PyErr_SetString(PyExc_Exception,
-                        "libxml2 xmlC14NDocDumpMemory failure.");
-        return NULL;
-    }
-    else {
-        py_retval = PY_IMPORT_STRING_SIZE((const char *) doc_txt,
-                                                result);
-        xmlFree(doc_txt);
-        return py_retval;
-    }
-}
-
-static PyObject *
-libxml_C14NDocSaveTo(ATTRIBUTE_UNUSED PyObject * self,
-                     PyObject * args)
-{
-    PyObject *pyobj_doc;
-    PyObject *py_file;
-    PyObject *pyobj_nodes;
-    int exclusive;
-    PyObject *pyobj_prefixes;
-    int with_comments;
-
-    xmlDocPtr doc;
-    xmlNodeSetPtr nodes;
-    xmlChar **prefixes = NULL;
-    FILE * output;
-    xmlOutputBufferPtr buf;
-
-    int result;
-    int len;
-
-    if (!PyArg_ParseTuple(args, (char *) "OOiOiO:C14NDocSaveTo",
-                          &pyobj_doc,
-                          &pyobj_nodes,
-                          &exclusive,
-                          &pyobj_prefixes,
-                          &with_comments,
-                          &py_file))
-        return (NULL);
-
-    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
-    if (!doc) {
-        PyErr_SetString(PyExc_TypeError, "bad document.");
-        return NULL;
-    }
-
-    output = PyFile_Get(py_file);
-    if (output == NULL) {
-        PyErr_SetString(PyExc_TypeError, "bad file.");
-        return NULL;
-    }
-    buf = xmlOutputBufferCreateFile(output, NULL);
-
-    result = PyxmlNodeSet_Convert(pyobj_nodes, &nodes);
-    if (result < 0) {
-        xmlOutputBufferClose(buf);
-        return NULL;
-    }
-
-    if (exclusive) {
-        result = PystringSet_Convert(pyobj_prefixes, &prefixes);
-        if (result < 0) {
-            if (nodes) {
-                xmlFree(nodes->nodeTab);
-                xmlFree(nodes);
-            }
-            xmlOutputBufferClose(buf);
-            return NULL;
-        }
-    }
-
-    result = xmlC14NDocSaveTo(doc,
-                              nodes,
-                              exclusive,
-                              prefixes,
-                              with_comments,
-                              buf);
-
-    if (nodes) {
-        xmlFree(nodes->nodeTab);
-        xmlFree(nodes);
-    }
-    if (prefixes) {
-        xmlChar ** idx = prefixes;
-        while (*idx) xmlFree(*(idx++));
-        xmlFree(prefixes);
-    }
-
-    PyFile_Release(output);
-    len = xmlOutputBufferClose(buf);
-
-    if (result < 0) {
-        PyErr_SetString(PyExc_Exception,
-                        "libxml2 xmlC14NDocSaveTo failure.");
-        return NULL;
-    }
-    else
-        return PyLong_FromLong((long) len);
-}
-
-#endif
-#endif
-
-static PyObject *
-libxml_getObjDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-
-    PyObject *obj;
-    char *str;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:getObjDesc", &obj))
-        return NULL;
-    str = PyCapsule_GetPointer(obj, PyCapsule_GetName(obj));
-    return Py_BuildValue((char *)"s", str);
-}
-
-static PyObject *
-libxml_compareNodesEqual(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-    
-    PyObject *py_node1, *py_node2;
-    xmlNodePtr node1, node2;
-
-    if (!PyArg_ParseTuple(args, (char *)"OO:compareNodesEqual",
-		&py_node1, &py_node2))
-        return NULL;
-    /* To compare two node objects, we compare their pointer addresses */
-    node1 = PyxmlNode_Get(py_node1);
-    node2 = PyxmlNode_Get(py_node2);
-    if ( node1 == node2 )
-        return Py_BuildValue((char *)"i", 1);
-    else
-        return Py_BuildValue((char *)"i", 0);
-    
-}
-
-static PyObject *
-libxml_nodeHash(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
-
-    PyObject *py_node1;
-    xmlNodePtr node1;
-
-    if (!PyArg_ParseTuple(args, (char *)"O:nodeHash", &py_node1))
-	    return NULL;
-    /* For simplicity, we use the node pointer address as a hash value */
-    node1 = PyxmlNode_Get(py_node1);
-
-    return PyLong_FromVoidPtr(node1);
-
-}
-
-/************************************************************************
- *									*
- *		Deprecation warnings					*
- *									*
- ************************************************************************/
-
-int
-libxml_deprecationWarning(const char *func) {
-#if PY_VERSION_HEX >= 0x03020000
-    return PyErr_WarnFormat(PyExc_PendingDeprecationWarning, 1,
-            "libxml2mod.%s is deprecated and will be removed "
-            "in future versions", func);
-#else
-    return PyErr_WarnEx(PyExc_PendingDeprecationWarning, func, 1);
-#endif
-}
-
-/************************************************************************
- *									*
- *			The registration stuff				*
- *									*
- ************************************************************************/
-static PyMethodDef libxmlMethods[] = {
-#include "libxml2-export.c"
-    {(char *) "name", libxml_name, METH_VARARGS, NULL},
-    {(char *) "children", libxml_children, METH_VARARGS, NULL},
-    {(char *) "properties", libxml_properties, METH_VARARGS, NULL},
-    {(char *) "last", libxml_last, METH_VARARGS, NULL},
-    {(char *) "prev", libxml_prev, METH_VARARGS, NULL},
-    {(char *) "next", libxml_next, METH_VARARGS, NULL},
-    {(char *) "parent", libxml_parent, METH_VARARGS, NULL},
-    {(char *) "type", libxml_type, METH_VARARGS, NULL},
-    {(char *) "doc", libxml_doc, METH_VARARGS, NULL},
-    {(char *) "xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL},
-    {(char *) "xmlNodeRemoveNsDef", libxml_xmlNodeRemoveNsDef, METH_VARARGS, NULL},
-#ifdef LIBXML_VALID_ENABLED
-    {(char *)"xmlSetValidErrors", libxml_xmlSetValidErrors, METH_VARARGS, NULL},
-    {(char *)"xmlFreeValidCtxt", libxml_xmlFreeValidCtxt, METH_VARARGS, NULL},
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_OUTPUT_ENABLED
-    {(char *) "serializeNode", libxml_serializeNode, METH_VARARGS, NULL},
-    {(char *) "saveNodeTo", libxml_saveNodeTo, METH_VARARGS, NULL},
-    {(char *) "outputBufferCreate", libxml_xmlCreateOutputBuffer, METH_VARARGS, NULL},
-    {(char *) "outputBufferGetPythonFile", libxml_outputBufferGetPythonFile, METH_VARARGS, NULL},
-    {(char *) "xmlOutputBufferClose", libxml_xmlOutputBufferClose, METH_VARARGS, NULL},
-    { (char *)"xmlOutputBufferFlush", libxml_xmlOutputBufferFlush, METH_VARARGS, NULL },
-    { (char *)"xmlSaveFileTo", libxml_xmlSaveFileTo, METH_VARARGS, NULL },
-    { (char *)"xmlSaveFormatFileTo", libxml_xmlSaveFormatFileTo, METH_VARARGS, NULL },
-#endif /* LIBXML_OUTPUT_ENABLED */
-    {(char *) "inputBufferCreate", libxml_xmlCreateInputBuffer, METH_VARARGS, NULL},
-    {(char *) "setEntityLoader", libxml_xmlSetEntityLoader, METH_VARARGS, NULL},
-    {(char *)"xmlRegisterErrorHandler", libxml_xmlRegisterErrorHandler, METH_VARARGS, NULL },
-    {(char *)"xmlParserCtxtSetErrorHandler", libxml_xmlParserCtxtSetErrorHandler, METH_VARARGS, NULL },
-    {(char *)"xmlParserCtxtGetErrorHandler", libxml_xmlParserCtxtGetErrorHandler, METH_VARARGS, NULL },
-    {(char *)"xmlFreeParserCtxt", libxml_xmlFreeParserCtxt, METH_VARARGS, NULL },
-#ifdef LIBXML_READER_ENABLED
-    {(char *)"xmlTextReaderSetErrorHandler", libxml_xmlTextReaderSetErrorHandler, METH_VARARGS, NULL },
-    {(char *)"xmlTextReaderGetErrorHandler", libxml_xmlTextReaderGetErrorHandler, METH_VARARGS, NULL },
-    {(char *)"xmlFreeTextReader", libxml_xmlFreeTextReader, METH_VARARGS, NULL },
-#endif
-    {(char *)"addLocalCatalog", libxml_addLocalCatalog, METH_VARARGS, NULL },
-#ifdef LIBXML_SCHEMAS_ENABLED
-    {(char *)"xmlRelaxNGSetValidErrors", libxml_xmlRelaxNGSetValidErrors, METH_VARARGS, NULL},
-    {(char *)"xmlRelaxNGFreeValidCtxt", libxml_xmlRelaxNGFreeValidCtxt, METH_VARARGS, NULL},
-    {(char *)"xmlSchemaSetValidErrors", libxml_xmlSchemaSetValidErrors, METH_VARARGS, NULL},
-    {(char *)"xmlSchemaFreeValidCtxt", libxml_xmlSchemaFreeValidCtxt, METH_VARARGS, NULL},
-#endif
-#ifdef LIBXML_C14N_ENABLED
-#ifdef LIBXML_OUTPUT_ENABLED
-    {(char *)"xmlC14NDocDumpMemory", libxml_C14NDocDumpMemory, METH_VARARGS, NULL},
-    {(char *)"xmlC14NDocSaveTo", libxml_C14NDocSaveTo, METH_VARARGS, NULL},
-#endif
-#endif
-    {(char *) "getObjDesc", libxml_getObjDesc, METH_VARARGS, NULL},
-    {(char *) "compareNodesEqual", libxml_compareNodesEqual, METH_VARARGS, NULL},
-    {(char *) "nodeHash", libxml_nodeHash, METH_VARARGS, NULL},
-    {(char *) "xmlRegisterInputCallback", libxml_xmlRegisterInputCallback, METH_VARARGS, NULL},
-    {(char *) "xmlUnregisterInputCallback", libxml_xmlUnregisterInputCallback, METH_VARARGS, NULL},
-    {NULL, NULL, 0, NULL}
-};
-
-#if PY_MAJOR_VERSION >= 3
-#define INITERROR return NULL
-
-static struct PyModuleDef moduledef = {
-        PyModuleDef_HEAD_INIT,
-        "libxml2mod",
-        NULL,
-        -1,
-        libxmlMethods,
-        NULL,
-        NULL,
-        NULL,
-        NULL
-};
-
-#else
-#define INITERROR return
-
-#ifdef MERGED_MODULES
-extern void initlibxsltmod(void);
-#endif
-
-#endif
-
-#if PY_MAJOR_VERSION >= 3
-PyObject *PyInit_libxml2mod(void)
-#else
-void initlibxml2mod(void)
-#endif
-{
-    PyObject *module;
-
-#if PY_MAJOR_VERSION >= 3
-    module = PyModule_Create(&moduledef);
-#else
-    /* initialize the python extension module */
-    module = Py_InitModule((char *) "libxml2mod", libxmlMethods);
-#endif
-    if (module == NULL)
-        INITERROR;
-
-    /* initialize libxml2 */
-    xmlInitParser();
-    /* TODO this probably need to be revamped for Python3 */
-    libxml_xmlErrorInitialize();
-
-#if PY_MAJOR_VERSION < 3
-#ifdef MERGED_MODULES
-    initlibxsltmod();
-#endif
-#endif
-
-#if PY_MAJOR_VERSION >= 3
-    return module;
-#endif
-}
Index: sources/packages/l/libxml2/Makefile
===================================================================
--- sources/packages/l/libxml2/Makefile	(revision 450)
+++ sources/packages/l/libxml2/Makefile	(revision 451)
@@ -7,7 +7,7 @@
 
 url         = $(DOWNLOAD_SERVER)/sources/packages/l/libxml2
 
-versions    = 2.11.4
+versions    = 2.13.6
 pkgname     = libxml2
 suffix      = tar.xz
 
@@ -14,7 +14,7 @@
 tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
 sha1s       = $(addsuffix .sha1sum, $(tarballs))
 
-patches     = $(CURDIR)/patches/libxml2-2.11.4-python-unicode.patch
+patches     = $(CURDIR)/patches/libxml2-2.13.6-python-unicode.patch
 
 .NOTPARALLEL: $(patches)
 
@@ -49,7 +49,7 @@
 
 $(patches): $(sha1s)
 	@echo -e "\n======= Create Patches =======\n" ; \
-	 ( cd create-2.11.4-python-unicode-patch ; ./create.patch.sh ) ; \
+	 ( cd create-2.13.6-python-unicode-patch ; ./create.patch.sh ) ; \
 	 echo -e "\n"
 
 download_clean:
Index: sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/create.patch.sh
===================================================================
--- sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/create.patch.sh	(nonexistent)
+++ sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/create.patch.sh	(revision 451)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=2.13.6
+
+tar --files-from=file.list -xJvf ../libxml2-$VERSION.tar.xz
+mv libxml2-$VERSION libxml2-$VERSION-orig
+
+cp -rf ./libxml2-$VERSION-new ./libxml2-$VERSION
+
+diff --unified -Nr  libxml2-$VERSION-orig  libxml2-$VERSION > libxml2-$VERSION-python-unicode.patch
+
+mv libxml2-$VERSION-python-unicode.patch ../patches
+
+rm -rf ./libxml2-$VERSION
+rm -rf ./libxml2-$VERSION-orig

Property changes on: sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/file.list
===================================================================
--- sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/file.list	(nonexistent)
+++ sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/file.list	(revision 451)
@@ -0,0 +1 @@
+libxml2-2.13.6/python/libxml.c
Index: sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/libxml2-2.13.6-new/python/libxml.c
===================================================================
--- sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/libxml2-2.13.6-new/python/libxml.c	(nonexistent)
+++ sources/packages/l/libxml2/create-2.13.6-python-unicode-patch/libxml2-2.13.6-new/python/libxml.c	(revision 451)
@@ -0,0 +1,3713 @@
+/*
+ * libxml.c: this modules implements the main part of the glue of the
+ *           libxml2 library and the Python interpreter. It provides the
+ *           entry points where an automatically generated stub is either
+ *           unpractical or would not match cleanly the Python model.
+ *
+ * If compiled with MERGED_MODULES, the entry point will be used to
+ * initialize both the libxml2 and the libxslt wrappers
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include <fileobject.h>
+/* #include "config.h" */
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/xmlIO.h>
+#include <libxml/c14n.h>
+#include <libxml/xmlreader.h>
+#include <libxml/xmlsave.h>
+#include "libxml_wrap.h"
+#include "libxml2-py.h"
+
+#if PY_MAJOR_VERSION >= 3
+PyMODINIT_FUNC PyInit_libxml2mod(void);
+
+#define PY_IMPORT_STRING_SIZE PyUnicode_FromStringAndSize
+#define PY_IMPORT_STRING PyUnicode_FromString
+#else
+void initlibxml2mod(void);
+#define PY_IMPORT_STRING_SIZE PyString_FromStringAndSize
+#define PY_IMPORT_STRING PyString_FromString
+#endif
+
+
+/**
+ * TODO:
+ *
+ * macro to flag unimplemented blocks
+ */
+#define TODO 								\
+    xmlGenericError(xmlGenericErrorContext,				\
+	    "Unimplemented block at %s:%d\n",				\
+            __FILE__, __LINE__);
+
+#ifdef LIBXML_XPATH_ENABLED
+/*
+ * the following vars are used for XPath extensions, but
+ * are also referenced within the parser cleanup routine.
+ */
+static int libxml_xpathCallbacksInitialized = 0;
+
+typedef struct libxml_xpathCallback {
+    xmlXPathContextPtr ctx;
+    xmlChar *name;
+    xmlChar *ns_uri;
+    PyObject *function;
+} libxml_xpathCallback, *libxml_xpathCallbackPtr;
+typedef libxml_xpathCallback libxml_xpathCallbackArray[];
+static int libxml_xpathCallbacksAllocd = 10;
+static libxml_xpathCallbackArray *libxml_xpathCallbacks = NULL;
+static int libxml_xpathCallbacksNb = 0;
+#endif /* LIBXML_XPATH_ENABLED */
+
+/************************************************************************
+ *									*
+ *		Memory debug interface					*
+ *									*
+ ************************************************************************/
+
+#if 0
+extern void xmlMemFree(void *ptr);
+extern void *xmlMemMalloc(size_t size);
+extern void *xmlMemRealloc(void *ptr, size_t size);
+extern char *xmlMemoryStrdup(const char *str);
+#endif
+
+static int libxmlMemoryDebugActivated = 0;
+static long libxmlMemoryAllocatedBase = 0;
+
+static int libxmlMemoryDebug = 0;
+static xmlFreeFunc freeFunc = NULL;
+static xmlMallocFunc mallocFunc = NULL;
+static xmlReallocFunc reallocFunc = NULL;
+static xmlStrdupFunc strdupFunc = NULL;
+
+static void
+libxml_xmlErrorInitialize(void); /* forward declare */
+
+PyObject *
+libxml_xmlMemoryUsed(PyObject * self ATTRIBUTE_UNUSED, 
+        PyObject * args ATTRIBUTE_UNUSED)
+{
+    long ret;
+    PyObject *py_retval;
+
+    ret = xmlMemUsed();
+
+    py_retval = libxml_longWrap(ret);
+    return (py_retval);
+}
+
+PyObject *
+libxml_xmlDebugMemory(PyObject * self ATTRIBUTE_UNUSED, PyObject * args)
+{
+    int activate;
+    PyObject *py_retval;
+    long ret;
+
+    if (!PyArg_ParseTuple(args, (char *) "i:xmlDebugMemory", &activate))
+        return (NULL);
+
+    if (activate != 0) {
+        if (libxmlMemoryDebug == 0) {
+            /*
+             * First initialize the library and grab the old memory handlers
+             * and switch the library to memory debugging
+             */
+            xmlMemGet((xmlFreeFunc *) & freeFunc,
+                      (xmlMallocFunc *) & mallocFunc,
+                      (xmlReallocFunc *) & reallocFunc,
+                      (xmlStrdupFunc *) & strdupFunc);
+            if ((freeFunc == xmlMemFree) && (mallocFunc == xmlMemMalloc) &&
+                (reallocFunc == xmlMemRealloc) &&
+                (strdupFunc == xmlMemoryStrdup)) {
+            } else {
+                ret = (long) xmlMemSetup(xmlMemFree, xmlMemMalloc,
+                                         xmlMemRealloc, xmlMemoryStrdup);
+                if (ret < 0)
+                    goto error;
+            }
+            libxmlMemoryAllocatedBase = xmlMemUsed();
+            ret = 0;
+        } else if (libxmlMemoryDebugActivated == 0) {
+            libxmlMemoryAllocatedBase = xmlMemUsed();
+            ret = 0;
+        } else {
+            ret = xmlMemUsed() - libxmlMemoryAllocatedBase;
+        }
+        libxmlMemoryDebug = 1;
+        libxmlMemoryDebugActivated = 1;
+    } else {
+        if (libxmlMemoryDebugActivated == 1)
+            ret = xmlMemUsed() - libxmlMemoryAllocatedBase;
+        else
+            ret = 0;
+        libxmlMemoryDebugActivated = 0;
+    }
+  error:
+    py_retval = libxml_longWrap(ret);
+    return (py_retval);
+}
+
+PyObject *
+libxml_xmlPythonCleanupParser(PyObject *self ATTRIBUTE_UNUSED,
+                              PyObject *args ATTRIBUTE_UNUSED) {
+
+#ifdef LIBXML_XPATH_ENABLED
+    int ix;
+
+    /*
+     * Need to confirm whether we really want to do this (required for
+     * memcheck) in all cases...
+     */
+   
+    if (libxml_xpathCallbacks != NULL) {	/* if ext funcs declared */
+	for (ix=0; ix<libxml_xpathCallbacksNb; ix++) {
+	    if ((*libxml_xpathCallbacks)[ix].name != NULL)
+	        xmlFree((*libxml_xpathCallbacks)[ix].name);
+	    if ((*libxml_xpathCallbacks)[ix].ns_uri != NULL)
+	        xmlFree((*libxml_xpathCallbacks)[ix].ns_uri);
+	}
+	libxml_xpathCallbacksNb = 0;
+        xmlFree(libxml_xpathCallbacks);
+	libxml_xpathCallbacks = NULL;
+    }
+#endif /* LIBXML_XPATH_ENABLED */
+
+    xmlCleanupParser();
+
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+/************************************************************************
+ *									*
+ *		Handling Python FILE I/O at the C level			*
+ *	The raw I/O attack directly the File objects, while the		*
+ *	other routines address the ioWrapper instance instead		*
+ *									*
+ ************************************************************************/
+
+/**
+ * xmlPythonFileCloseUnref:
+ * @context:  the I/O context
+ *
+ * Close an I/O channel
+ */
+static int
+xmlPythonFileCloseRaw (void * context) {
+    PyObject *file, *ret;
+
+    file = (PyObject *) context;
+    if (file == NULL) return(-1);
+    ret = PyObject_CallMethod(file, (char *) "close", (char *) "()");
+    if (ret != NULL) {
+	Py_DECREF(ret);
+    }
+    Py_DECREF(file);
+    return(0);
+}
+
+/**
+ * xmlPythonFileReadRaw:
+ * @context:  the I/O context
+ * @buffer:  where to drop data
+ * @len:  number of bytes to write
+ *
+ * Read @len bytes to @buffer from the Python file in the I/O channel
+ *
+ * Returns the number of bytes read
+ */
+static int
+xmlPythonFileReadRaw (void * context, char * buffer, int len) {
+    PyObject *file;
+    PyObject *ret;
+    int lenread = -1;
+    char *data;
+
+    file = (PyObject *) context;
+    if (file == NULL) return(-1);
+    ret = PyObject_CallMethod(file, (char *) "read", (char *) "(i)", len);
+    if (ret == NULL) {
+	printf("xmlPythonFileReadRaw: result is NULL\n");
+	return(-1);
+    } else if (PyBytes_Check(ret)) {
+	lenread = PyBytes_Size(ret);
+	data = PyBytes_AsString(ret);
+#ifdef PyUnicode_Check
+    } else if (PyUnicode_Check (ret)) {
+#if PY_VERSION_HEX >= 0x03030000
+        Py_ssize_t size;
+	const char *tmp;
+
+	/* tmp doesn't need to be deallocated */
+        tmp = PyUnicode_AsUTF8AndSize(ret, &size);
+
+	lenread = (int) size;
+	data = (char *) tmp;
+#else
+        PyObject *b;
+	b = PyUnicode_AsUTF8String(ret);
+	if (b == NULL) {
+	    printf("xmlPythonFileReadRaw: failed to convert to UTF-8\n");
+	    return(-1);
+	}
+	lenread = PyBytes_Size(b);
+	data = PyBytes_AsString(b);
+	Py_DECREF(b);
+#endif
+#endif
+    } else {
+	printf("xmlPythonFileReadRaw: result is not a String\n");
+	Py_DECREF(ret);
+	return(-1);
+    }
+    if (lenread > len)
+	memcpy(buffer, data, len);
+    else
+	memcpy(buffer, data, lenread);
+    Py_DECREF(ret);
+    return(lenread);
+}
+
+/**
+ * xmlPythonFileRead:
+ * @context:  the I/O context
+ * @buffer:  where to drop data
+ * @len:  number of bytes to write
+ *
+ * Read @len bytes to @buffer from the I/O channel.
+ *
+ * Returns the number of bytes read
+ */
+static int
+xmlPythonFileRead (void * context, char * buffer, int len) {
+    PyObject *file;
+    PyObject *ret;
+    int lenread = -1;
+    char *data;
+
+    file = (PyObject *) context;
+    if (file == NULL) return(-1);
+    ret = PyObject_CallMethod(file, (char *) "io_read", (char *) "(i)", len);
+    if (ret == NULL) {
+	printf("xmlPythonFileRead: result is NULL\n");
+	return(-1);
+    } else if (PyBytes_Check(ret)) {
+	lenread = PyBytes_Size(ret);
+	data = PyBytes_AsString(ret);
+#ifdef PyUnicode_Check
+    } else if (PyUnicode_Check (ret)) {
+#if PY_VERSION_HEX >= 0x03030000
+        Py_ssize_t size;
+	const char *tmp;
+
+	/* tmp doesn't need to be deallocated */
+        tmp = PyUnicode_AsUTF8AndSize(ret, &size);
+
+	lenread = (int) size;
+	data = (char *) tmp;
+#else
+        PyObject *b;
+	b = PyUnicode_AsUTF8String(ret);
+	if (b == NULL) {
+	    printf("xmlPythonFileRead: failed to convert to UTF-8\n");
+	    return(-1);
+	}
+	lenread = PyBytes_Size(b);
+	data = PyBytes_AsString(b);
+	Py_DECREF(b);
+#endif
+#endif
+    } else {
+	printf("xmlPythonFileRead: result is not a String\n");
+	Py_DECREF(ret);
+	return(-1);
+    }
+    if (lenread > len)
+	memcpy(buffer, data, len);
+    else
+	memcpy(buffer, data, lenread);
+    Py_DECREF(ret);
+    return(lenread);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlFileWrite:
+ * @context:  the I/O context
+ * @buffer:  where to drop data
+ * @len:  number of bytes to write
+ *
+ * Write @len bytes from @buffer to the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+static int
+xmlPythonFileWrite (void * context, const char * buffer, int len) {
+    PyObject *file;
+    PyObject *string;
+    PyObject *ret = NULL;
+    int written = -1;
+
+    file = (PyObject *) context;
+    if (file == NULL) return(-1);
+    string = PY_IMPORT_STRING_SIZE(buffer, len);
+    if (string == NULL) return(-1);
+    if (PyObject_HasAttrString(file, (char *) "io_write")) {
+        ret = PyObject_CallMethod(file, (char *) "io_write", (char *) "(O)",
+	                        string);
+    } else if (PyObject_HasAttrString(file, (char *) "write")) {
+        ret = PyObject_CallMethod(file, (char *) "write", (char *) "(O)",
+	                        string);
+    }
+    Py_DECREF(string);
+    if (ret == NULL) {
+	printf("xmlPythonFileWrite: result is NULL\n");
+	return(-1);
+    } else if (PyLong_Check(ret)) {
+	written = (int) PyLong_AsLong(ret);
+	Py_DECREF(ret);
+    } else if (ret == Py_None) {
+	written = len;
+	Py_DECREF(ret);
+    } else {
+	printf("xmlPythonFileWrite: result is not an Int nor None\n");
+	Py_DECREF(ret);
+    }
+    return(written);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlPythonFileClose:
+ * @context:  the I/O context
+ *
+ * Close an I/O channel
+ */
+static int
+xmlPythonFileClose (void * context) {
+    PyObject *file, *ret = NULL;
+
+    file = (PyObject *) context;
+    if (file == NULL) return(-1);
+    if (PyObject_HasAttrString(file, (char *) "io_close")) {
+        ret = PyObject_CallMethod(file, (char *) "io_close", (char *) "()");
+    } else if (PyObject_HasAttrString(file, (char *) "flush")) {
+        ret = PyObject_CallMethod(file, (char *) "flush", (char *) "()");
+    }
+    if (ret != NULL) {
+	Py_DECREF(ret);
+    }
+    return(0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferCreatePythonFile:
+ * @file:  a PyFile_Type
+ * @encoder:  the encoding converter or NULL
+ *
+ * Create a buffered output for the progressive saving to a PyFile_Type
+ * buffered C I/O
+ *
+ * Returns the new parser output or NULL
+ */
+static xmlOutputBufferPtr
+xmlOutputBufferCreatePythonFile(PyObject *file, 
+	                        xmlCharEncodingHandlerPtr encoder) {
+    xmlOutputBufferPtr ret;
+
+    if (file == NULL) return(NULL);
+
+    ret = xmlAllocOutputBuffer(encoder);
+    if (ret != NULL) {
+        ret->context = file;
+	/* Py_INCREF(file); */
+	ret->writecallback = xmlPythonFileWrite;
+	ret->closecallback = xmlPythonFileClose;
+    }
+
+    return(ret);
+}
+
+PyObject *
+libxml_xmlCreateOutputBuffer(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+    PyObject *py_retval;
+    PyObject *file;
+    xmlChar  *encoding;
+    xmlCharEncodingHandlerPtr handler = NULL;
+    xmlOutputBufferPtr buffer;
+
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlOutputBufferCreate",
+		&file, &encoding))
+	return(NULL);
+    if ((encoding != NULL) && (encoding[0] != 0)) {
+	handler = xmlFindCharEncodingHandler((const char *) encoding);
+    }
+    buffer = xmlOutputBufferCreatePythonFile(file, handler);
+    if (buffer == NULL)
+	printf("libxml_xmlCreateOutputBuffer: buffer == NULL\n");
+    py_retval = libxml_xmlOutputBufferPtrWrap(buffer);
+    return(py_retval);
+}
+
+/**
+ * libxml_outputBufferGetPythonFile:
+ * @buffer:  the I/O buffer
+ *
+ * read the Python I/O from the CObject
+ *
+ * Returns the new parser output or NULL
+ */
+static PyObject *
+libxml_outputBufferGetPythonFile(ATTRIBUTE_UNUSED PyObject *self,
+                                    PyObject *args) {
+    PyObject *buffer;
+    PyObject *file;
+    xmlOutputBufferPtr obj;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:outputBufferGetPythonFile",
+			  &buffer))
+	return(NULL);
+
+    obj = PyoutputBuffer_Get(buffer);
+    if (obj == NULL) {
+	fprintf(stderr,
+	        "outputBufferGetPythonFile: obj == NULL\n");
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+    if (obj->closecallback != xmlPythonFileClose) {
+	fprintf(stderr,
+	        "outputBufferGetPythonFile: not a python file wrapper\n");
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+    file = (PyObject *) obj->context;
+    if (file == NULL) {
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+    Py_INCREF(file);
+    return(file);
+}
+
+static PyObject *
+libxml_xmlOutputBufferClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlOutputBufferPtr out;
+    PyObject *pyobj_out;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferClose", &pyobj_out))
+        return(NULL);
+    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+    /* Buffer may already have been destroyed elsewhere. This is harmless. */
+    if (out == NULL) {
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+
+    c_retval = xmlOutputBufferClose(out);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+static PyObject *
+libxml_xmlOutputBufferFlush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlOutputBufferPtr out;
+    PyObject *pyobj_out;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferFlush", &pyobj_out))
+        return(NULL);
+    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+    c_retval = xmlOutputBufferFlush(out);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+static PyObject *
+libxml_xmlSaveFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlOutputBufferPtr buf;
+    PyObject *pyobj_buf;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSaveFileTo", &pyobj_buf, &pyobj_cur, &encoding))
+        return(NULL);
+    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlSaveFileTo(buf, cur, encoding);
+	/* xmlSaveTo() freed the memory pointed to by buf, so record that in the
+	 * Python object. */
+    ((PyoutputBuffer_Object *)(pyobj_buf))->obj = NULL;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+static PyObject *
+libxml_xmlSaveFormatFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlOutputBufferPtr buf;
+    PyObject *pyobj_buf;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzi:xmlSaveFormatFileTo", &pyobj_buf, &pyobj_cur, &encoding, &format))
+        return(NULL);
+    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlSaveFormatFileTo(buf, cur, encoding, format);
+	/* xmlSaveFormatFileTo() freed the memory pointed to by buf, so record that
+	 * in the Python object */
+	((PyoutputBuffer_Object *)(pyobj_buf))->obj = NULL;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+
+/**
+ * xmlParserInputBufferCreatePythonFile:
+ * @file:  a PyFile_Type
+ * @encoder:  the encoding converter or NULL
+ *
+ * Create a buffered output for the progressive saving to a PyFile_Type
+ * buffered C I/O
+ *
+ * Returns the new parser output or NULL
+ */
+static xmlParserInputBufferPtr
+xmlParserInputBufferCreatePythonFile(PyObject *file, 
+	                        xmlCharEncoding encoding) {
+    xmlParserInputBufferPtr ret;
+
+    if (file == NULL) return(NULL);
+
+    ret = xmlAllocParserInputBuffer(encoding);
+    if (ret != NULL) {
+        ret->context = file;
+	/* Py_INCREF(file); */
+	ret->readcallback = xmlPythonFileRead;
+	ret->closecallback = xmlPythonFileClose;
+    }
+
+    return(ret);
+}
+
+PyObject *
+libxml_xmlCreateInputBuffer(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+    PyObject *py_retval;
+    PyObject *file;
+    xmlChar  *encoding;
+    xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
+    xmlParserInputBufferPtr buffer;
+
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlParserInputBufferCreate",
+		&file, &encoding))
+	return(NULL);
+    if ((encoding != NULL) && (encoding[0] != 0)) {
+	enc = xmlParseCharEncoding((const char *) encoding);
+    }
+    buffer = xmlParserInputBufferCreatePythonFile(file, enc);
+    if (buffer == NULL)
+	printf("libxml_xmlParserInputBufferCreate: buffer == NULL\n");
+    py_retval = libxml_xmlParserInputBufferPtrWrap(buffer);
+    return(py_retval);
+}
+
+/************************************************************************
+ *									*
+ *		Providing the resolver at the Python level		*
+ *									*
+ ************************************************************************/
+
+static xmlExternalEntityLoader defaultExternalEntityLoader = NULL;
+static PyObject *pythonExternalEntityLoaderObjext;
+
+static xmlParserInputPtr
+pythonExternalEntityLoader(const char *URL, const char *ID,
+			   xmlParserCtxtPtr ctxt) {
+    xmlParserInputPtr result = NULL;
+    if (pythonExternalEntityLoaderObjext != NULL) {
+	PyObject *ret;
+	PyObject *ctxtobj;
+
+	ctxtobj = libxml_xmlParserCtxtPtrWrap(ctxt);
+
+	ret = PyObject_CallFunction(pythonExternalEntityLoaderObjext,
+		      (char *) "(ssO)", URL, ID, ctxtobj);
+	Py_XDECREF(ctxtobj);
+
+	if (ret != NULL) {
+	    if (PyObject_HasAttrString(ret, (char *) "read")) {
+		xmlParserInputBufferPtr buf;
+
+		buf = xmlAllocParserInputBuffer(XML_CHAR_ENCODING_NONE);
+		if (buf != NULL) {
+		    buf->context = ret;
+		    buf->readcallback = xmlPythonFileReadRaw;
+		    buf->closecallback = xmlPythonFileCloseRaw;
+		    result = xmlNewIOInputStream(ctxt, buf,
+			                         XML_CHAR_ENCODING_NONE);
+		}
+#if 0
+	    } else {
+		if (URL != NULL)
+		    printf("pythonExternalEntityLoader: can't read %s\n",
+		           URL);
+#endif
+	    }
+	    if (result == NULL) {
+		Py_DECREF(ret);
+	    } else if (URL != NULL) {
+		result->filename = (char *) xmlStrdup((const xmlChar *)URL);
+	    }
+	}
+    }
+    if ((result == NULL) && (defaultExternalEntityLoader != NULL)) {
+	result = defaultExternalEntityLoader(URL, ID, ctxt);
+    }
+    return(result);
+}
+
+PyObject *
+libxml_xmlSetEntityLoader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+    PyObject *py_retval;
+    PyObject *loader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:libxml_xmlSetEntityLoader",
+		&loader))
+	return(NULL);
+
+    if (!PyCallable_Check(loader)) {
+	PyErr_SetString(PyExc_ValueError, "entity loader is not callable");
+	return(NULL);
+    }
+
+    if (defaultExternalEntityLoader == NULL) 
+	defaultExternalEntityLoader = xmlGetExternalEntityLoader();
+
+    Py_XDECREF(pythonExternalEntityLoaderObjext);
+    pythonExternalEntityLoaderObjext = loader;
+    Py_XINCREF(pythonExternalEntityLoaderObjext);
+    xmlSetExternalEntityLoader(pythonExternalEntityLoader);
+
+    py_retval = PyLong_FromLong(0);
+    return(py_retval);
+}
+
+/************************************************************************
+ *									*
+ *		Input callback registration				*
+ *									*
+ ************************************************************************/
+static PyObject *pythonInputOpenCallbackObject;
+static int pythonInputCallbackID = -1;
+
+static int
+pythonInputMatchCallback(ATTRIBUTE_UNUSED const char *URI)
+{
+    /* Always return success, real decision whether URI is supported will be
+     * made in open callback.  */
+    return 1;
+}
+
+static void *
+pythonInputOpenCallback(const char *URI)
+{
+    PyObject *ret;
+
+    ret = PyObject_CallFunction(pythonInputOpenCallbackObject,
+	    (char *)"s", URI);
+    if (ret == Py_None) {
+	Py_DECREF(Py_None);
+	return NULL;
+    }
+    return ret;
+}
+
+PyObject *
+libxml_xmlRegisterInputCallback(ATTRIBUTE_UNUSED PyObject *self,
+                                PyObject *args) {
+    PyObject *cb;
+
+    if (!PyArg_ParseTuple(args,
+		(const char *)"O:libxml_xmlRegisterInputCallback", &cb))
+	return(NULL);
+
+    if (!PyCallable_Check(cb)) {
+	PyErr_SetString(PyExc_ValueError, "input callback is not callable");
+	return(NULL);
+    }
+
+    /* Python module registers a single callback and manages the list of
+     * all callbacks internally. This is necessitated by xmlInputMatchCallback
+     * API, which does not allow for passing of data objects to discriminate
+     * different Python methods.  */
+    if (pythonInputCallbackID == -1) {
+	pythonInputCallbackID = xmlRegisterInputCallbacks(
+		pythonInputMatchCallback, pythonInputOpenCallback,
+		xmlPythonFileReadRaw, xmlPythonFileCloseRaw);
+	if (pythonInputCallbackID == -1)
+	    return PyErr_NoMemory();
+	pythonInputOpenCallbackObject = cb;
+	Py_INCREF(pythonInputOpenCallbackObject);
+    }
+
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlUnregisterInputCallback(ATTRIBUTE_UNUSED PyObject *self,
+                                ATTRIBUTE_UNUSED PyObject *args) {
+    int ret;
+
+    ret = xmlPopInputCallbacks();
+    if (pythonInputCallbackID != -1) {
+	/* Assert that the right input callback was popped. libxml's API does not
+	 * allow removal by ID, so all that could be done is an assert.  */
+	if (pythonInputCallbackID == ret) {
+	    pythonInputCallbackID = -1;
+	    Py_DECREF(pythonInputOpenCallbackObject);
+	    pythonInputOpenCallbackObject = NULL;
+	} else {
+	    PyErr_SetString(PyExc_AssertionError, "popped non-python input callback");
+	    return(NULL);
+	}
+    } else if (ret == -1) {
+	/* No more callbacks to pop */
+	PyErr_SetString(PyExc_IndexError, "no input callbacks to pop");
+	return(NULL);
+    }
+
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+/************************************************************************
+ *									*
+ *		Handling SAX/xmllib/sgmlop callback interfaces		*
+ *									*
+ ************************************************************************/
+
+static void
+pythonStartElement(void *user_data, const xmlChar * name,
+                   const xmlChar ** attrs)
+{
+    int i;
+    PyObject *handler;
+    PyObject *dict;
+    PyObject *attrname;
+    PyObject *attrvalue;
+    PyObject *result = NULL;
+    int type = 0;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "startElement"))
+        type = 1;
+    else if (PyObject_HasAttrString(handler, (char *) "start"))
+        type = 2;
+    if (type != 0) {
+        /*
+         * the xmllib interface always generates a dictionary,
+         * possibly empty
+         */
+        if ((attrs == NULL) && (type == 1)) {
+            Py_XINCREF(Py_None);
+            dict = Py_None;
+        } else if (attrs == NULL) {
+            dict = PyDict_New();
+        } else {
+            dict = PyDict_New();
+            for (i = 0; attrs[i] != NULL; i++) {
+                attrname = PY_IMPORT_STRING((char *) attrs[i]);
+                i++;
+                if (attrs[i] != NULL) {
+                    attrvalue = PY_IMPORT_STRING((char *) attrs[i]);
+                } else {
+                    Py_XINCREF(Py_None);
+                    attrvalue = Py_None;
+                }
+                PyDict_SetItem(dict, attrname, attrvalue);
+		Py_DECREF(attrname);
+		Py_DECREF(attrvalue);
+            }
+        }
+
+        if (type == 1)
+            result = PyObject_CallMethod(handler, (char *) "startElement",
+                                         (char *) "sO", name, dict);
+        else if (type == 2)
+            result = PyObject_CallMethod(handler, (char *) "start",
+                                         (char *) "sO", name, dict);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(dict);
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonStartDocument(void *user_data)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "startDocument")) {
+        result =
+            PyObject_CallMethod(handler, (char *) "startDocument", NULL);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonEndDocument(void *user_data)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "endDocument")) {
+        result =
+            PyObject_CallMethod(handler, (char *) "endDocument", NULL);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+    /*
+     * The reference to the handler is released there
+     */
+    Py_XDECREF(handler);
+}
+
+static void
+pythonEndElement(void *user_data, const xmlChar * name)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "endElement")) {
+        result = PyObject_CallMethod(handler, (char *) "endElement",
+                                     (char *) "s", name);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    } else if (PyObject_HasAttrString(handler, (char *) "end")) {
+        result = PyObject_CallMethod(handler, (char *) "end",
+                                     (char *) "s", name);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonReference(void *user_data, const xmlChar * name)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "reference")) {
+        result = PyObject_CallMethod(handler, (char *) "reference",
+                                     (char *) "s", name);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonCharacters(void *user_data, const xmlChar * ch, int len)
+{
+    PyObject *handler;
+    PyObject *result = NULL;
+    int type = 0;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "characters"))
+        type = 1;
+    else if (PyObject_HasAttrString(handler, (char *) "data"))
+        type = 2;
+    if (type != 0) {
+        if (type == 1)
+            result = PyObject_CallMethod(handler, (char *) "characters",
+                                         (char *) "s#", ch, (Py_ssize_t)len);
+        else if (type == 2)
+            result = PyObject_CallMethod(handler, (char *) "data",
+                                         (char *) "s#", ch, (Py_ssize_t)len);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonIgnorableWhitespace(void *user_data, const xmlChar * ch, int len)
+{
+    PyObject *handler;
+    PyObject *result = NULL;
+    int type = 0;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "ignorableWhitespace"))
+        type = 1;
+    else if (PyObject_HasAttrString(handler, (char *) "data"))
+        type = 2;
+    if (type != 0) {
+        if (type == 1)
+            result =
+                PyObject_CallMethod(handler,
+                                    (char *) "ignorableWhitespace",
+                                    (char *) "s#", ch, (Py_ssize_t)len);
+        else if (type == 2)
+            result =
+                PyObject_CallMethod(handler, (char *) "data",
+                                    (char *) "s#", ch, (Py_ssize_t)len);
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonProcessingInstruction(void *user_data,
+                            const xmlChar * target, const xmlChar * data)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "processingInstruction")) {
+        result = PyObject_CallMethod(handler, (char *)
+                                     "processingInstruction",
+                                     (char *) "ss", target, data);
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonComment(void *user_data, const xmlChar * value)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "comment")) {
+        result =
+            PyObject_CallMethod(handler, (char *) "comment", (char *) "s",
+                                value);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonWarning(void *user_data, const char *msg, ...)
+{
+    PyObject *handler;
+    PyObject *result;
+    va_list args;
+    char buf[1024];
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "warning")) {
+        va_start(args, msg);
+        vsnprintf(buf, 1023, msg, args);
+        va_end(args);
+        buf[1023] = 0;
+        result =
+            PyObject_CallMethod(handler, (char *) "warning", (char *) "s",
+                                buf);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonError(void *user_data, const char *msg, ...)
+{
+    PyObject *handler;
+    PyObject *result;
+    va_list args;
+    char buf[1024];
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "error")) {
+        va_start(args, msg);
+        vsnprintf(buf, 1023, msg, args);
+        va_end(args);
+        buf[1023] = 0;
+        result =
+            PyObject_CallMethod(handler, (char *) "error", (char *) "s",
+                                buf);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonFatalError(void *user_data, const char *msg, ...)
+{
+    PyObject *handler;
+    PyObject *result;
+    va_list args;
+    char buf[1024];
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "fatalError")) {
+        va_start(args, msg);
+        vsnprintf(buf, 1023, msg, args);
+        va_end(args);
+        buf[1023] = 0;
+        result =
+            PyObject_CallMethod(handler, (char *) "fatalError",
+                                (char *) "s", buf);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonCdataBlock(void *user_data, const xmlChar * ch, int len)
+{
+    PyObject *handler;
+    PyObject *result = NULL;
+    int type = 0;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "cdataBlock"))
+        type = 1;
+    else if (PyObject_HasAttrString(handler, (char *) "cdata"))
+        type = 2;
+    if (type != 0) {
+        if (type == 1)
+            result =
+                PyObject_CallMethod(handler, (char *) "cdataBlock",
+                                    (char *) "s#", ch, (Py_ssize_t)len);
+        else if (type == 2)
+            result =
+                PyObject_CallMethod(handler, (char *) "cdata",
+                                    (char *) "s#", ch, (Py_ssize_t)len);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonExternalSubset(void *user_data,
+                     const xmlChar * name,
+                     const xmlChar * externalID, const xmlChar * systemID)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "externalSubset")) {
+        result =
+            PyObject_CallMethod(handler, (char *) "externalSubset",
+                                (char *) "sss", name, externalID,
+                                systemID);
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonEntityDecl(void *user_data,
+                 const xmlChar * name,
+                 int type,
+                 const xmlChar * publicId,
+                 const xmlChar * systemId, xmlChar * content)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "entityDecl")) {
+        result = PyObject_CallMethod(handler, (char *) "entityDecl",
+                                     (char *) "sisss", name, type,
+                                     publicId, systemId, content);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+
+
+static void
+
+pythonNotationDecl(void *user_data,
+                   const xmlChar * name,
+                   const xmlChar * publicId, const xmlChar * systemId)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "notationDecl")) {
+        result = PyObject_CallMethod(handler, (char *) "notationDecl",
+                                     (char *) "sss", name, publicId,
+                                     systemId);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonAttributeDecl(void *user_data,
+                    const xmlChar * elem,
+                    const xmlChar * name,
+                    int type,
+                    int def,
+                    const xmlChar * defaultValue, xmlEnumerationPtr tree)
+{
+    PyObject *handler;
+    PyObject *nameList;
+    PyObject *newName;
+    xmlEnumerationPtr node;
+    PyObject *result;
+    int count;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "attributeDecl")) {
+        count = 0;
+        for (node = tree; node != NULL; node = node->next) {
+            count++;
+        }
+        nameList = PyList_New(count);
+        count = 0;
+        for (node = tree; node != NULL; node = node->next) {
+            newName = PY_IMPORT_STRING((char *) node->name);
+            PyList_SetItem(nameList, count, newName);
+	    Py_DECREF(newName);
+            count++;
+        }
+        result = PyObject_CallMethod(handler, (char *) "attributeDecl",
+                                     (char *) "ssiisO", elem, name, type,
+                                     def, defaultValue, nameList);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(nameList);
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonElementDecl(void *user_data,
+                  const xmlChar * name,
+                  int type, ATTRIBUTE_UNUSED xmlElementContentPtr content)
+{
+    PyObject *handler;
+    PyObject *obj;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "elementDecl")) {
+        /* TODO: wrap in an elementContent object */
+        printf
+            ("pythonElementDecl: xmlElementContentPtr wrapper missing !\n");
+        obj = Py_None;
+        /* Py_XINCREF(Py_None); isn't the reference just borrowed ??? */
+        result = PyObject_CallMethod(handler, (char *) "elementDecl",
+                                     (char *) "siO", name, type, obj);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonUnparsedEntityDecl(void *user_data,
+                         const xmlChar * name,
+                         const xmlChar * publicId,
+                         const xmlChar * systemId,
+                         const xmlChar * notationName)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "unparsedEntityDecl")) {
+        result =
+            PyObject_CallMethod(handler, (char *) "unparsedEntityDecl",
+                                (char *) "ssss", name, publicId, systemId,
+                                notationName);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static void
+pythonInternalSubset(void *user_data, const xmlChar * name,
+                     const xmlChar * ExternalID, const xmlChar * SystemID)
+{
+    PyObject *handler;
+    PyObject *result;
+
+    handler = (PyObject *) user_data;
+    if (PyObject_HasAttrString(handler, (char *) "internalSubset")) {
+        result = PyObject_CallMethod(handler, (char *) "internalSubset",
+                                     (char *) "sss", name, ExternalID,
+                                     SystemID);
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_XDECREF(result);
+    }
+}
+
+static xmlSAXHandler pythonSaxHandler = {
+    pythonInternalSubset,
+    NULL,                       /* TODO pythonIsStandalone, */
+    NULL,                       /* TODO pythonHasInternalSubset, */
+    NULL,                       /* TODO pythonHasExternalSubset, */
+    NULL,                       /* TODO pythonResolveEntity, */
+    NULL,                       /* TODO pythonGetEntity, */
+    pythonEntityDecl,
+    pythonNotationDecl,
+    pythonAttributeDecl,
+    pythonElementDecl,
+    pythonUnparsedEntityDecl,
+    NULL,                       /* OBSOLETED pythonSetDocumentLocator, */
+    pythonStartDocument,
+    pythonEndDocument,
+    pythonStartElement,
+    pythonEndElement,
+    pythonReference,
+    pythonCharacters,
+    pythonIgnorableWhitespace,
+    pythonProcessingInstruction,
+    pythonComment,
+    pythonWarning,
+    pythonError,
+    pythonFatalError,
+    NULL,                       /* TODO pythonGetParameterEntity, */
+    pythonCdataBlock,
+    pythonExternalSubset,
+    1,
+    NULL,			/* TODO migrate to SAX2 */
+    NULL,
+    NULL,
+    NULL
+};
+
+/************************************************************************
+ *									*
+ *		Handling of specific parser context			*
+ *									*
+ ************************************************************************/
+
+#ifdef LIBXML_PUSH_ENABLED
+PyObject *
+libxml_xmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,
+                           PyObject * args)
+{
+    const char *chunk;
+    int size;
+    const char *URI;
+    PyObject *pyobj_SAX = NULL;
+    xmlSAXHandlerPtr SAX = NULL;
+    xmlParserCtxtPtr ret;
+    PyObject *pyret;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "Oziz:xmlCreatePushParser", &pyobj_SAX, &chunk,
+         &size, &URI))
+        return (NULL);
+
+    if (pyobj_SAX != Py_None) {
+        SAX = &pythonSaxHandler;
+        Py_INCREF(pyobj_SAX);
+        /* The reference is released in pythonEndDocument() */
+    }
+    ret = xmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI);
+    pyret = libxml_xmlParserCtxtPtrWrap(ret);
+    return (pyret);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,
+                            PyObject * args)
+{
+    const char *chunk;
+    int size;
+    const char *URI;
+    PyObject *pyobj_SAX = NULL;
+    xmlSAXHandlerPtr SAX = NULL;
+    xmlParserCtxtPtr ret;
+    PyObject *pyret;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "Oziz:htmlCreatePushParser", &pyobj_SAX, &chunk,
+         &size, &URI))
+        return (NULL);
+
+    if (pyobj_SAX != Py_None) {
+        SAX = &pythonSaxHandler;
+        Py_INCREF(pyobj_SAX);
+        /* The reference is released in pythonEndDocument() */
+    }
+    ret = htmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI,
+                                   XML_CHAR_ENCODING_NONE);
+    pyret = libxml_xmlParserCtxtPtrWrap(ret);
+    return (pyret);
+}
+#endif /* LIBXML_HTML_ENABLED */
+#endif /* LIBXML_PUSH_ENABLED */
+
+#ifdef LIBXML_SAX1_ENABLED
+PyObject *
+libxml_xmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    int recover;
+    const char *URI;
+    PyObject *pyobj_SAX = NULL;
+    xmlSAXHandlerPtr SAX = NULL;
+    xmlParserCtxtPtr ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *) "Osi:xmlSAXParseFile", &pyobj_SAX,
+                          &URI, &recover))
+        return (NULL);
+
+    if (pyobj_SAX == Py_None) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+    SAX = &pythonSaxHandler;
+    Py_INCREF(pyobj_SAX);
+    /* The reference is released in pythonEndDocument() */
+    ctxt = xmlNewSAXParserCtxt(SAX, pyobj_SAX);
+    xmlCtxtReadFile(ctxt, URI, NULL, 0);
+    xmlFreeParserCtxt(ctxt);
+    Py_INCREF(Py_None);
+    return (Py_None);
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    const char *URI;
+    const char *encoding;
+    PyObject *pyobj_SAX = NULL;
+    xmlSAXHandlerPtr SAX = NULL;
+    htmlParserCtxtPtr ctxt;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "Osz:htmlSAXParseFile", &pyobj_SAX, &URI,
+         &encoding))
+        return (NULL);
+
+    if (pyobj_SAX == Py_None) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+    SAX = &pythonSaxHandler;
+    Py_INCREF(pyobj_SAX);
+    /* The reference is released in pythonEndDocument() */
+    ctxt = htmlNewSAXParserCtxt(SAX, pyobj_SAX);
+    htmlCtxtReadFile(ctxt, URI, encoding, 0);
+    htmlFreeParserCtxt(ctxt);
+    Py_INCREF(Py_None);
+    return (Py_None);
+}
+#endif /* LIBXML_HTML_ENABLED */
+
+/************************************************************************
+ *									*
+ *			Error message callback				*
+ *									*
+ ************************************************************************/
+
+static PyObject *libxml_xmlPythonErrorFuncHandler = NULL;
+static PyObject *libxml_xmlPythonErrorFuncCtxt = NULL;
+
+/* helper to build a xmlMalloc'ed string from a format and va_list */
+/* 
+ * disabled the loop, the repeated call to vsnprintf without reset of ap
+ * in case the initial buffer was too small segfaulted on x86_64
+ * we now directly vsnprintf on a large buffer.
+ */
+static char *
+libxml_buildMessage(const char *msg, va_list ap)
+{
+    int chars;
+    char *str;
+
+    str = (char *) xmlMalloc(1000);
+    if (str == NULL)
+        return NULL;
+
+    chars = vsnprintf(str, 999, msg, ap);
+    if (chars >= 998)
+        str[999] = 0;
+
+    return str;
+}
+
+static void
+libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
+                           ...)
+{
+    va_list ap;
+    PyObject *list;
+    PyObject *message;
+    PyObject *result;
+    char str[1000];
+    unsigned char *ptr = (unsigned char *)str;
+
+    if (libxml_xmlPythonErrorFuncHandler == NULL) {
+        va_start(ap, msg);
+        vfprintf(stderr, msg, ap);
+        va_end(ap);
+    } else {
+        va_start(ap, msg);
+        if (vsnprintf(str, 999, msg, ap) >= 998)
+	    str[999] = 0;
+        va_end(ap);
+
+#if PY_MAJOR_VERSION >= 3
+        /* Ensure the error string doesn't start at UTF8 continuation. */
+        while (*ptr && (*ptr & 0xc0) == 0x80)
+            ptr++;
+#endif
+
+        list = PyTuple_New(2);
+        PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt);
+        Py_XINCREF(libxml_xmlPythonErrorFuncCtxt);
+        message = libxml_charPtrConstWrap(ptr);
+        PyTuple_SetItem(list, 1, message);
+        result = PyObject_CallObject(libxml_xmlPythonErrorFuncHandler, list);
+        /* Forget any errors caused in the error handler. */
+        PyErr_Clear();
+        Py_XDECREF(list);
+        Py_XDECREF(result);
+    }
+}
+
+static void
+libxml_xmlErrorInitialize(void)
+{
+    xmlSetGenericErrorFunc(NULL, libxml_xmlErrorFuncHandler);
+XML_IGNORE_DEPRECATION_WARNINGS
+    xmlThrDefSetGenericErrorFunc(NULL, libxml_xmlErrorFuncHandler);
+XML_POP_WARNINGS
+}
+
+static PyObject *
+libxml_xmlRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self,
+                               PyObject * args)
+{
+    PyObject *py_retval;
+    PyObject *pyobj_f;
+    PyObject *pyobj_ctx;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "OO:xmlRegisterErrorHandler", &pyobj_f,
+         &pyobj_ctx))
+        return (NULL);
+
+    if (libxml_xmlPythonErrorFuncHandler != NULL) {
+        Py_XDECREF(libxml_xmlPythonErrorFuncHandler);
+    }
+    if (libxml_xmlPythonErrorFuncCtxt != NULL) {
+        Py_XDECREF(libxml_xmlPythonErrorFuncCtxt);
+    }
+
+    Py_XINCREF(pyobj_ctx);
+    Py_XINCREF(pyobj_f);
+
+    /* TODO: check f is a function ! */
+    libxml_xmlPythonErrorFuncHandler = pyobj_f;
+    libxml_xmlPythonErrorFuncCtxt = pyobj_ctx;
+
+    py_retval = libxml_intWrap(1);
+    return (py_retval);
+}
+
+
+/************************************************************************
+ *									*
+ *                      Per parserCtxt error handler                    *
+ *									*
+ ************************************************************************/
+
+typedef struct 
+{
+    PyObject *f;
+    PyObject *arg;
+} xmlParserCtxtPyCtxt;
+typedef xmlParserCtxtPyCtxt *xmlParserCtxtPyCtxtPtr;
+
+static void
+libxml_xmlParserCtxtGenericErrorFuncHandler(void *ctx, int severity, char *str) 
+{
+    PyObject *list;
+    PyObject *result;
+    xmlParserCtxtPtr ctxt;
+    xmlParserCtxtPyCtxtPtr pyCtxt;
+    
+    ctxt = (xmlParserCtxtPtr)ctx;
+    pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
+
+    list = PyTuple_New(4);
+    PyTuple_SetItem(list, 0, pyCtxt->arg);
+    Py_XINCREF(pyCtxt->arg);
+    PyTuple_SetItem(list, 1, libxml_charPtrWrap(str));
+    PyTuple_SetItem(list, 2, libxml_intWrap(severity));
+    PyTuple_SetItem(list, 3, Py_None);
+    Py_INCREF(Py_None);
+    result = PyObject_CallObject(pyCtxt->f, list);
+    if (result == NULL) 
+    {
+	/* TODO: manage for the exception to be propagated... */
+	PyErr_Print();
+    }
+    Py_XDECREF(list);
+    Py_XDECREF(result);
+}
+
+static void 
+libxml_xmlParserCtxtErrorFuncHandler(void *ctx, const char *msg, ...) 
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_ERROR,libxml_buildMessage(msg,ap));
+    va_end(ap);
+}
+
+static void 
+libxml_xmlParserCtxtWarningFuncHandler(void *ctx, const char *msg, ...) 
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_WARNING,libxml_buildMessage(msg,ap));
+    va_end(ap);
+}
+
+static void 
+libxml_xmlParserCtxtValidityErrorFuncHandler(void *ctx, const char *msg, ...) 
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_ERROR,libxml_buildMessage(msg,ap));
+    va_end(ap);
+}
+
+static void 
+libxml_xmlParserCtxtValidityWarningFuncHandler(void *ctx, const char *msg, ...) 
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_WARNING,libxml_buildMessage(msg,ap));
+    va_end(ap);
+}
+
+static PyObject *
+libxml_xmlParserCtxtSetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) 
+{
+    PyObject *py_retval;
+    xmlParserCtxtPtr ctxt;
+    xmlParserCtxtPyCtxtPtr pyCtxt;
+    PyObject *pyobj_ctxt;
+    PyObject *pyobj_f;
+    PyObject *pyobj_arg;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlParserCtxtSetErrorHandler",
+		          &pyobj_ctxt, &pyobj_f, &pyobj_arg))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+    if (ctxt->_private == NULL) {
+	pyCtxt = xmlMalloc(sizeof(xmlParserCtxtPyCtxt));
+	if (pyCtxt == NULL) {
+	    py_retval = libxml_intWrap(-1);
+	    return(py_retval);
+	}
+	memset(pyCtxt,0,sizeof(xmlParserCtxtPyCtxt));
+	ctxt->_private = pyCtxt;
+    }
+    else {
+	pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
+    }
+    /* TODO: check f is a function ! */
+    Py_XDECREF(pyCtxt->f);
+    Py_XINCREF(pyobj_f);
+    pyCtxt->f = pyobj_f;
+    Py_XDECREF(pyCtxt->arg);
+    Py_XINCREF(pyobj_arg);
+    pyCtxt->arg = pyobj_arg;
+
+    if (pyobj_f != Py_None) {
+	ctxt->sax->error = libxml_xmlParserCtxtErrorFuncHandler;
+	ctxt->sax->warning = libxml_xmlParserCtxtWarningFuncHandler;
+	ctxt->vctxt.error = libxml_xmlParserCtxtValidityErrorFuncHandler;
+	ctxt->vctxt.warning = libxml_xmlParserCtxtValidityWarningFuncHandler;
+    }
+    else {
+	ctxt->sax->error = xmlParserError;
+	ctxt->vctxt.error = xmlParserValidityError;
+	ctxt->sax->warning = xmlParserWarning;
+	ctxt->vctxt.warning = xmlParserValidityWarning;
+    }
+
+    py_retval = libxml_intWrap(1);
+    return(py_retval);
+}
+
+static PyObject *
+libxml_xmlParserCtxtGetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) 
+{
+    PyObject *py_retval;
+    xmlParserCtxtPtr ctxt;
+    xmlParserCtxtPyCtxtPtr pyCtxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParserCtxtGetErrorHandler",
+		          &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+    py_retval = PyTuple_New(2);
+    if (ctxt->_private != NULL) {
+	pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
+
+	PyTuple_SetItem(py_retval, 0, pyCtxt->f);
+	Py_XINCREF(pyCtxt->f);
+	PyTuple_SetItem(py_retval, 1, pyCtxt->arg);
+	Py_XINCREF(pyCtxt->arg);
+    }
+    else {
+	/* no python error handler registered */
+	PyTuple_SetItem(py_retval, 0, Py_None);
+	Py_XINCREF(Py_None);
+	PyTuple_SetItem(py_retval, 1, Py_None);
+	Py_XINCREF(Py_None);
+    }
+    return(py_retval);
+}
+
+static PyObject *
+libxml_xmlFreeParserCtxt(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlParserCtxtPyCtxtPtr pyCtxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeParserCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    if (ctxt != NULL) {
+	pyCtxt = (xmlParserCtxtPyCtxtPtr)((xmlParserCtxtPtr)ctxt)->_private;
+	if (pyCtxt) {
+	    Py_XDECREF(pyCtxt->f);
+	    Py_XDECREF(pyCtxt->arg);
+	    xmlFree(pyCtxt);
+	}
+	xmlFreeParserCtxt(ctxt);
+    }
+
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#ifdef LIBXML_VALID_ENABLED
+/***
+ * xmlValidCtxt stuff
+ */
+
+typedef struct 
+{
+    PyObject *warn;
+    PyObject *error;
+    PyObject *arg;
+} xmlValidCtxtPyCtxt;
+typedef xmlValidCtxtPyCtxt *xmlValidCtxtPyCtxtPtr;
+
+static void
+libxml_xmlValidCtxtGenericErrorFuncHandler(void *ctx, ATTRIBUTE_UNUSED int severity, char *str)
+{
+    PyObject *list;
+    PyObject *result;
+    xmlValidCtxtPyCtxtPtr pyCtxt;
+    
+    pyCtxt = (xmlValidCtxtPyCtxtPtr)ctx;
+    
+    list = PyTuple_New(2);
+    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+    PyTuple_SetItem(list, 1, pyCtxt->arg);
+    Py_XINCREF(pyCtxt->arg);
+    result = PyObject_CallObject(pyCtxt->error, list);
+    if (result == NULL) 
+    {
+	/* TODO: manage for the exception to be propagated... */
+	PyErr_Print();
+    }
+    Py_XDECREF(list);
+    Py_XDECREF(result);
+}
+
+static void
+libxml_xmlValidCtxtGenericWarningFuncHandler(void *ctx, ATTRIBUTE_UNUSED int severity, char *str)
+{
+    PyObject *list;
+    PyObject *result;
+    xmlValidCtxtPyCtxtPtr pyCtxt;
+    
+    pyCtxt = (xmlValidCtxtPyCtxtPtr)ctx;
+
+    list = PyTuple_New(2);
+    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+    PyTuple_SetItem(list, 1, pyCtxt->arg);
+    Py_XINCREF(pyCtxt->arg);
+    result = PyObject_CallObject(pyCtxt->warn, list);
+    if (result == NULL) 
+    {
+	/* TODO: manage for the exception to be propagated... */
+	PyErr_Print();
+    }
+    Py_XDECREF(list);
+    Py_XDECREF(result);
+}
+
+static void 
+libxml_xmlValidCtxtErrorFuncHandler(void *ctx, const char *msg, ...) 
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlValidCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_ERROR,libxml_buildMessage(msg,ap));
+    va_end(ap);
+}
+
+static void 
+libxml_xmlValidCtxtWarningFuncHandler(void *ctx, const char *msg, ...) 
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlValidCtxtGenericWarningFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_WARNING,libxml_buildMessage(msg,ap));
+    va_end(ap);
+}
+
+static PyObject *
+libxml_xmlSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_retval;
+    PyObject *pyobj_error;
+    PyObject *pyobj_warn;
+    PyObject *pyobj_ctx;
+    PyObject *pyobj_arg = Py_None;
+    xmlValidCtxtPtr ctxt;
+    xmlValidCtxtPyCtxtPtr pyCtxt;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "OOO|O:xmlSetValidErrors", &pyobj_ctx, &pyobj_error, &pyobj_warn, &pyobj_arg))
+        return (NULL);
+
+    ctxt = PyValidCtxt_Get(pyobj_ctx);
+    pyCtxt = xmlMalloc(sizeof(xmlValidCtxtPyCtxt));
+    if (pyCtxt == NULL) {
+            py_retval = libxml_intWrap(-1);
+            return(py_retval);
+    }
+    memset(pyCtxt, 0, sizeof(xmlValidCtxtPyCtxt));
+
+    
+    /* TODO: check warn and error is a function ! */
+    Py_XDECREF(pyCtxt->error);
+    Py_XINCREF(pyobj_error);
+    pyCtxt->error = pyobj_error;
+    
+    Py_XDECREF(pyCtxt->warn);
+    Py_XINCREF(pyobj_warn);
+    pyCtxt->warn = pyobj_warn;
+    
+    Py_XDECREF(pyCtxt->arg);
+    Py_XINCREF(pyobj_arg);
+    pyCtxt->arg = pyobj_arg;
+
+    ctxt->error = libxml_xmlValidCtxtErrorFuncHandler;
+    ctxt->warning = libxml_xmlValidCtxtWarningFuncHandler;
+    ctxt->userData = pyCtxt;
+
+    py_retval = libxml_intWrap(1);
+    return (py_retval);
+}
+
+
+static PyObject *
+libxml_xmlFreeValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlValidCtxtPtr cur;
+    xmlValidCtxtPyCtxtPtr pyCtxt;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeValidCtxt", &pyobj_cur))
+        return(NULL);
+    cur = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_cur);
+
+    pyCtxt = (xmlValidCtxtPyCtxtPtr)(cur->userData);
+    if (pyCtxt != NULL)
+    {
+            Py_XDECREF(pyCtxt->error);
+            Py_XDECREF(pyCtxt->warn);
+            Py_XDECREF(pyCtxt->arg);
+            xmlFree(pyCtxt);
+    }
+
+    xmlFreeValidCtxt(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+#endif /* LIBXML_VALID_ENABLED */
+
+#ifdef LIBXML_READER_ENABLED
+/************************************************************************
+ *									*
+ *                      Per xmlTextReader error handler                 *
+ *									*
+ ************************************************************************/
+
+typedef struct 
+{
+    PyObject *f;
+    PyObject *arg;
+} xmlTextReaderPyCtxt;
+typedef xmlTextReaderPyCtxt *xmlTextReaderPyCtxtPtr;
+
+static void 
+libxml_xmlTextReaderErrorCallback(void *arg, 
+				  const char *msg,
+				  xmlParserSeverities severity,
+				  xmlTextReaderLocatorPtr locator)
+{
+    xmlTextReaderPyCtxt *pyCtxt = (xmlTextReaderPyCtxt *)arg;
+    PyObject *list;
+    PyObject *result;
+    
+    list = PyTuple_New(4);
+    PyTuple_SetItem(list, 0, pyCtxt->arg);
+    Py_XINCREF(pyCtxt->arg);
+    PyTuple_SetItem(list, 1, libxml_charPtrConstWrap(msg));
+    PyTuple_SetItem(list, 2, libxml_intWrap(severity));
+    PyTuple_SetItem(list, 3, libxml_xmlTextReaderLocatorPtrWrap(locator));
+    result = PyObject_CallObject(pyCtxt->f, list);
+    if (result == NULL)
+    {
+	/* TODO: manage for the exception to be propagated... */
+	PyErr_Print();
+    }
+    Py_XDECREF(list);
+    Py_XDECREF(result);
+}
+
+static PyObject *
+libxml_xmlTextReaderSetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
+{
+    xmlTextReaderPtr reader;
+    xmlTextReaderPyCtxtPtr pyCtxt;
+    xmlTextReaderErrorFunc f;
+    void *arg;
+    PyObject *pyobj_reader;
+    PyObject *pyobj_f;
+    PyObject *pyobj_arg;
+    PyObject *py_retval;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlTextReaderSetErrorHandler", &pyobj_reader, &pyobj_f, &pyobj_arg))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    /* clear previous error handler */
+    xmlTextReaderGetErrorHandler(reader,&f,&arg);
+    if (arg != NULL) {
+	if (f == (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback) {
+	    /* ok, it's our error handler! */
+	    pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
+	    Py_XDECREF(pyCtxt->f);
+	    Py_XDECREF(pyCtxt->arg);
+	    xmlFree(pyCtxt);
+	}
+	else {
+	    /* 
+	     * there already an arg, and it's not ours,
+	     * there is definitely something wrong going on here...
+	     * we don't know how to free it, so we bail out... 
+	     */
+	    py_retval = libxml_intWrap(-1);
+	    return(py_retval);
+	}
+    }
+    xmlTextReaderSetErrorHandler(reader,NULL,NULL);
+    /* set new error handler */
+    if (pyobj_f != Py_None)
+    {
+	pyCtxt = (xmlTextReaderPyCtxtPtr)xmlMalloc(sizeof(xmlTextReaderPyCtxt));
+	if (pyCtxt == NULL) {
+	    py_retval = libxml_intWrap(-1);
+	    return(py_retval);
+	}
+	Py_XINCREF(pyobj_f);
+	pyCtxt->f = pyobj_f;
+	Py_XINCREF(pyobj_arg);
+	pyCtxt->arg = pyobj_arg;
+	xmlTextReaderSetErrorHandler(reader,
+	                             libxml_xmlTextReaderErrorCallback,
+	                             pyCtxt);
+    }
+
+    py_retval = libxml_intWrap(1);
+    return(py_retval);
+}
+
+static PyObject *
+libxml_xmlTextReaderGetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
+{
+    xmlTextReaderPtr reader;
+    xmlTextReaderPyCtxtPtr pyCtxt;
+    xmlTextReaderErrorFunc f;
+    void *arg;
+    PyObject *pyobj_reader;
+    PyObject *py_retval;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderSetErrorHandler", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    xmlTextReaderGetErrorHandler(reader,&f,&arg);
+    py_retval = PyTuple_New(2);
+    if (f == (xmlTextReaderErrorFunc)libxml_xmlTextReaderErrorCallback) {
+	/* ok, it's our error handler! */
+	pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
+	PyTuple_SetItem(py_retval, 0, pyCtxt->f);
+	Py_XINCREF(pyCtxt->f);
+	PyTuple_SetItem(py_retval, 1, pyCtxt->arg);
+	Py_XINCREF(pyCtxt->arg);
+    }
+    else
+    {
+	/* f is null or it's not our error handler */
+	PyTuple_SetItem(py_retval, 0, Py_None);
+	Py_XINCREF(Py_None);
+	PyTuple_SetItem(py_retval, 1, Py_None);
+	Py_XINCREF(Py_None);
+    }
+    return(py_retval);
+}
+
+static PyObject *
+libxml_xmlFreeTextReader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlTextReaderPyCtxtPtr pyCtxt;
+    xmlTextReaderErrorFunc f;
+    void *arg;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeTextReader", &pyobj_reader))
+        return(NULL);
+    if (!PyCapsule_CheckExact(pyobj_reader)) {
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    if (reader == NULL) {
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+
+    xmlTextReaderGetErrorHandler(reader,&f,&arg);
+    if (arg != NULL) {
+	if (f == (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback) {
+	    /* ok, it's our error handler! */
+	    pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
+	    Py_XDECREF(pyCtxt->f);
+	    Py_XDECREF(pyCtxt->arg);
+	    xmlFree(pyCtxt);
+	}
+	/* 
+	 * else, something wrong happened, because the error handler is
+	 * not owned by the python bindings...
+	 */
+    }
+
+    xmlFreeTextReader(reader);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+#endif
+
+/************************************************************************
+ *									*
+ *			XPath extensions				*
+ *									*
+ ************************************************************************/
+
+#ifdef LIBXML_XPATH_ENABLED
+static void
+libxml_xmlXPathFuncCallback(xmlXPathParserContextPtr ctxt, int nargs)
+{
+    PyObject *list, *cur, *result;
+    xmlXPathObjectPtr obj;
+    xmlXPathContextPtr rctxt;
+    PyObject *current_function = NULL;
+    const xmlChar *name;
+    const xmlChar *ns_uri;
+    int i;
+
+    if (ctxt == NULL)
+        return;
+    rctxt = ctxt->context;
+    if (rctxt == NULL)
+        return;
+    name = rctxt->function;
+    ns_uri = rctxt->functionURI;
+
+    /*
+     * Find the function, it should be there it was there at lookup
+     */
+    for (i = 0; i < libxml_xpathCallbacksNb; i++) {
+        if (                    /* TODO (ctxt == libxml_xpathCallbacks[i].ctx) && */
+						(xmlStrEqual(name, (*libxml_xpathCallbacks)[i].name)) &&
+               (xmlStrEqual(ns_uri, (*libxml_xpathCallbacks)[i].ns_uri))) {
+					current_function = (*libxml_xpathCallbacks)[i].function;
+        }
+    }
+    if (current_function == NULL) {
+        printf
+            ("libxml_xmlXPathFuncCallback: internal error %s not found !\n",
+             name);
+        return;
+    }
+
+    list = PyTuple_New(nargs + 1);
+    PyTuple_SetItem(list, 0, libxml_xmlXPathParserContextPtrWrap(ctxt));
+    for (i = nargs - 1; i >= 0; i--) {
+        obj = valuePop(ctxt);
+        cur = libxml_xmlXPathObjectPtrWrap(obj);
+        PyTuple_SetItem(list, i + 1, cur);
+    }
+    result = PyObject_CallObject(current_function, list);
+    Py_DECREF(list);
+
+    obj = libxml_xmlXPathObjectPtrConvert(result);
+    valuePush(ctxt, obj);
+}
+
+static xmlXPathFunction
+libxml_xmlXPathFuncLookupFunc(void *ctxt, const xmlChar * name,
+                              const xmlChar * ns_uri)
+{
+    int i;
+
+    /*
+     * This is called once only. The address is then stored in the
+     * XPath expression evaluation, the proper object to call can
+     * then still be found using the execution context function
+     * and functionURI fields.
+     */
+    for (i = 0; i < libxml_xpathCallbacksNb; i++) {
+			if ((ctxt == (*libxml_xpathCallbacks)[i].ctx) &&
+					(xmlStrEqual(name, (*libxml_xpathCallbacks)[i].name)) &&
+					(xmlStrEqual(ns_uri, (*libxml_xpathCallbacks)[i].ns_uri))) {
+            return (libxml_xmlXPathFuncCallback);
+        }
+    }
+    return (NULL);
+}
+
+static void
+libxml_xpathCallbacksInitialize(void)
+{
+    int i;
+
+    if (libxml_xpathCallbacksInitialized != 0)
+        return;
+
+    libxml_xpathCallbacks = (libxml_xpathCallbackArray*)xmlMalloc(
+    		libxml_xpathCallbacksAllocd*sizeof(libxml_xpathCallback));
+
+    for (i = 0; i < libxml_xpathCallbacksAllocd; i++) {
+			(*libxml_xpathCallbacks)[i].ctx = NULL;
+			(*libxml_xpathCallbacks)[i].name = NULL;
+			(*libxml_xpathCallbacks)[i].ns_uri = NULL;
+			(*libxml_xpathCallbacks)[i].function = NULL;
+    }
+    libxml_xpathCallbacksInitialized = 1;
+}
+
+PyObject *
+libxml_xmlRegisterXPathFunction(ATTRIBUTE_UNUSED PyObject * self,
+                                PyObject * args)
+{
+    PyObject *py_retval;
+    int c_retval = 0;
+    xmlChar *name;
+    xmlChar *ns_uri;
+    xmlXPathContextPtr ctx;
+    PyObject *pyobj_ctx;
+    PyObject *pyobj_f;
+    int i;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "OszO:registerXPathFunction", &pyobj_ctx, &name,
+         &ns_uri, &pyobj_f))
+        return (NULL);
+
+    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+    if (libxml_xpathCallbacksInitialized == 0)
+        libxml_xpathCallbacksInitialize();
+    xmlXPathRegisterFuncLookup(ctx, libxml_xmlXPathFuncLookupFunc, ctx);
+
+    if ((pyobj_ctx == NULL) || (name == NULL) || (pyobj_f == NULL)) {
+        py_retval = libxml_intWrap(-1);
+        return (py_retval);
+    }
+    for (i = 0; i < libxml_xpathCallbacksNb; i++) {
+	if ((ctx == (*libxml_xpathCallbacks)[i].ctx) &&
+            (xmlStrEqual(name, (*libxml_xpathCallbacks)[i].name)) &&
+            (xmlStrEqual(ns_uri, (*libxml_xpathCallbacks)[i].ns_uri))) {
+            Py_XINCREF(pyobj_f);
+            Py_XDECREF((*libxml_xpathCallbacks)[i].function);
+            (*libxml_xpathCallbacks)[i].function = pyobj_f;
+            c_retval = 1;
+            goto done;
+        }
+    }
+    if (libxml_xpathCallbacksNb >= libxml_xpathCallbacksAllocd) {
+			libxml_xpathCallbacksAllocd+=10;
+	libxml_xpathCallbacks = (libxml_xpathCallbackArray*)xmlRealloc(
+		libxml_xpathCallbacks,
+		libxml_xpathCallbacksAllocd*sizeof(libxml_xpathCallback));
+    } 
+    i = libxml_xpathCallbacksNb++;
+    Py_XINCREF(pyobj_f);
+    (*libxml_xpathCallbacks)[i].ctx = ctx;
+    (*libxml_xpathCallbacks)[i].name = xmlStrdup(name);
+    (*libxml_xpathCallbacks)[i].ns_uri = xmlStrdup(ns_uri);
+    (*libxml_xpathCallbacks)[i].function = pyobj_f;
+        c_retval = 1;
+    
+  done:
+    py_retval = libxml_intWrap((int) c_retval);
+    return (py_retval);
+}
+
+PyObject *
+libxml_xmlXPathRegisterVariable(ATTRIBUTE_UNUSED PyObject * self,
+                                PyObject * args)
+{
+    PyObject *py_retval;
+    int c_retval = 0;
+    xmlChar *name;
+    xmlChar *ns_uri;
+    xmlXPathContextPtr ctx;
+    xmlXPathObjectPtr val;
+    PyObject *pyobj_ctx;
+    PyObject *pyobj_value;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "OszO:xpathRegisterVariable", &pyobj_ctx, &name,
+         &ns_uri, &pyobj_value))
+        return (NULL);
+
+    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+    val = libxml_xmlXPathObjectPtrConvert(pyobj_value);
+
+    c_retval = xmlXPathRegisterVariableNS(ctx, name, ns_uri, val);
+    py_retval = libxml_intWrap(c_retval);
+    return (py_retval);
+}
+#endif /* LIBXML_XPATH_ENABLED */
+
+/************************************************************************
+ *									*
+ *			Global properties access			*
+ *									*
+ ************************************************************************/
+static PyObject *
+libxml_name(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    const xmlChar *res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:name", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+
+    switch (cur->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:{
+                xmlDocPtr doc = (xmlDocPtr) cur;
+
+                res = doc->URL;
+                break;
+            }
+        case XML_ATTRIBUTE_NODE:{
+                xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+                res = attr->name;
+                break;
+            }
+        case XML_NAMESPACE_DECL:{
+                xmlNsPtr ns = (xmlNsPtr) cur;
+
+                res = ns->prefix;
+                break;
+            }
+        default:
+            res = cur->name;
+            break;
+    }
+    resultobj = libxml_constxmlCharPtrWrap(res);
+
+    return resultobj;
+}
+
+static PyObject *
+libxml_doc(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    xmlDocPtr res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:doc", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+
+    switch (cur->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            res = NULL;
+            break;
+        case XML_ATTRIBUTE_NODE:{
+                xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+                res = attr->doc;
+                break;
+            }
+        case XML_NAMESPACE_DECL:
+            res = NULL;
+            break;
+        default:
+            res = cur->doc;
+            break;
+    }
+    resultobj = libxml_xmlDocPtrWrap(res);
+    return resultobj;
+}
+
+static PyObject *
+libxml_properties(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    xmlAttrPtr res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:properties", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+    if ((cur != NULL) && (cur->type == XML_ELEMENT_NODE))
+        res = cur->properties;
+    else
+        res = NULL;
+    resultobj = libxml_xmlAttrPtrWrap(res);
+    return resultobj;
+}
+
+static PyObject *
+libxml_next(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    xmlNodePtr res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:next", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+
+    switch (cur->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            res = NULL;
+            break;
+        case XML_ATTRIBUTE_NODE:{
+                xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+                res = (xmlNodePtr) attr->next;
+                break;
+            }
+        case XML_NAMESPACE_DECL:{
+                xmlNsPtr ns = (xmlNsPtr) cur;
+
+                res = (xmlNodePtr) ns->next;
+                break;
+            }
+        default:
+            res = cur->next;
+            break;
+
+    }
+    resultobj = libxml_xmlNodePtrWrap(res);
+    return resultobj;
+}
+
+static PyObject *
+libxml_prev(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    xmlNodePtr res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:prev", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+
+    switch (cur->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            res = NULL;
+            break;
+        case XML_ATTRIBUTE_NODE:{
+                xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+                res = (xmlNodePtr) attr->prev;
+            }
+            break;
+        case XML_NAMESPACE_DECL:
+            res = NULL;
+            break;
+        default:
+            res = cur->prev;
+            break;
+    }
+    resultobj = libxml_xmlNodePtrWrap(res);
+    return resultobj;
+}
+
+static PyObject *
+libxml_children(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    xmlNodePtr res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:children", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+
+    switch (cur->type) {
+        case XML_ELEMENT_NODE:
+        case XML_ENTITY_REF_NODE:
+        case XML_ENTITY_NODE:
+        case XML_PI_NODE:
+        case XML_COMMENT_NODE:
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+        case XML_DTD_NODE:
+            res = cur->children;
+            break;
+        case XML_ATTRIBUTE_NODE:{
+                xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+                res = attr->children;
+                break;
+            }
+        default:
+            res = NULL;
+            break;
+    }
+    resultobj = libxml_xmlNodePtrWrap(res);
+    return resultobj;
+}
+
+static PyObject *
+libxml_last(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    xmlNodePtr res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:last", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+
+    switch (cur->type) {
+        case XML_ELEMENT_NODE:
+        case XML_ENTITY_REF_NODE:
+        case XML_ENTITY_NODE:
+        case XML_PI_NODE:
+        case XML_COMMENT_NODE:
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+        case XML_DTD_NODE:
+            res = cur->last;
+            break;
+        case XML_ATTRIBUTE_NODE:{
+                xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+                res = attr->last;
+		break;
+            }
+        default:
+            res = NULL;
+            break;
+    }
+    resultobj = libxml_xmlNodePtrWrap(res);
+    return resultobj;
+}
+
+static PyObject *
+libxml_parent(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    xmlNodePtr res;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:parent", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+
+    switch (cur->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            res = NULL;
+            break;
+        case XML_ATTRIBUTE_NODE:{
+                xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+                res = attr->parent;
+            }
+	    break;
+        case XML_ENTITY_DECL:
+        case XML_NAMESPACE_DECL:
+        case XML_XINCLUDE_START:
+        case XML_XINCLUDE_END:
+            res = NULL;
+            break;
+        default:
+            res = cur->parent;
+            break;
+    }
+    resultobj = libxml_xmlNodePtrWrap(res);
+    return resultobj;
+}
+
+static PyObject *
+libxml_type(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *resultobj, *obj;
+    xmlNodePtr cur;
+    const xmlChar *res = NULL;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:last", &obj))
+        return NULL;
+    cur = PyxmlNode_Get(obj);
+    if (cur == NULL) {
+        Py_INCREF(Py_None);
+	return (Py_None);
+    }
+
+    switch (cur->type) {
+        case XML_ELEMENT_NODE:
+            res = (const xmlChar *) "element";
+            break;
+        case XML_ATTRIBUTE_NODE:
+            res = (const xmlChar *) "attribute";
+            break;
+        case XML_TEXT_NODE:
+            res = (const xmlChar *) "text";
+            break;
+        case XML_CDATA_SECTION_NODE:
+            res = (const xmlChar *) "cdata";
+            break;
+        case XML_ENTITY_REF_NODE:
+            res = (const xmlChar *) "entity_ref";
+            break;
+        case XML_ENTITY_NODE:
+            res = (const xmlChar *) "entity";
+            break;
+        case XML_PI_NODE:
+            res = (const xmlChar *) "pi";
+            break;
+        case XML_COMMENT_NODE:
+            res = (const xmlChar *) "comment";
+            break;
+        case XML_DOCUMENT_NODE:
+            res = (const xmlChar *) "document_xml";
+            break;
+        case XML_DOCUMENT_TYPE_NODE:
+            res = (const xmlChar *) "doctype";
+            break;
+        case XML_DOCUMENT_FRAG_NODE:
+            res = (const xmlChar *) "fragment";
+            break;
+        case XML_NOTATION_NODE:
+            res = (const xmlChar *) "notation";
+            break;
+        case XML_HTML_DOCUMENT_NODE:
+            res = (const xmlChar *) "document_html";
+            break;
+        case XML_DTD_NODE:
+            res = (const xmlChar *) "dtd";
+            break;
+        case XML_ELEMENT_DECL:
+            res = (const xmlChar *) "elem_decl";
+            break;
+        case XML_ATTRIBUTE_DECL:
+            res = (const xmlChar *) "attribute_decl";
+            break;
+        case XML_ENTITY_DECL:
+            res = (const xmlChar *) "entity_decl";
+            break;
+        case XML_NAMESPACE_DECL:
+            res = (const xmlChar *) "namespace";
+            break;
+        case XML_XINCLUDE_START:
+            res = (const xmlChar *) "xinclude_start";
+            break;
+        case XML_XINCLUDE_END:
+            res = (const xmlChar *) "xinclude_end";
+            break;
+    }
+
+    resultobj = libxml_constxmlCharPtrWrap(res);
+    return resultobj;
+}
+
+/************************************************************************
+ *									*
+ *			Specific accessor functions			*
+ *									*
+ ************************************************************************/
+PyObject *
+libxml_xmlNodeGetNsDefs(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "O:xmlNodeGetNsDefs", &pyobj_node))
+        return (NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+    c_retval = node->nsDef;
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return (py_retval);
+}
+
+PyObject *
+libxml_xmlNodeRemoveNsDef(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_retval;
+    xmlNsPtr ns, prev;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar *href;
+    xmlNsPtr c_retval;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "Oz:xmlNodeRemoveNsDef", &pyobj_node, &href))
+        return (NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    ns = NULL;
+
+    if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+
+    if (href == NULL) {
+	ns = node->nsDef;
+	node->nsDef = NULL;
+	c_retval = 0;
+    }
+    else {
+	prev = NULL;
+	ns = node->nsDef;
+	while (ns != NULL) {
+	    if (xmlStrEqual(ns->href, href)) {
+		if (prev != NULL)
+		    prev->next = ns->next;
+		else
+		    node->nsDef = ns->next;
+		ns->next = NULL;
+		c_retval = 0;
+		break;
+	    }
+	    prev = ns;
+	    ns = ns->next;
+	}
+    }
+
+    c_retval = ns;
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return (py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetNs(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *) "O:xmlNodeGetNs", &pyobj_node))
+        return (NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    if ((node == NULL) ||
+        ((node->type != XML_ELEMENT_NODE) &&
+	 (node->type != XML_ATTRIBUTE_NODE))) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+    c_retval = node->ns;
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return (py_retval);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/************************************************************************
+ *									*
+ *			Serialization front-end				*
+ *									*
+ ************************************************************************/
+
+static PyObject *
+libxml_serializeNode(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_retval = NULL;
+    xmlChar *c_retval;
+    PyObject *pyobj_node;
+    xmlNodePtr node;
+    xmlDocPtr doc;
+    const char *encoding;
+    int format;
+    xmlSaveCtxtPtr ctxt;
+    xmlBufferPtr buf;
+    int options = 0;
+
+    if (!PyArg_ParseTuple(args, (char *) "Ozi:serializeNode", &pyobj_node,
+                          &encoding, &format))
+        return (NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    if (node == NULL) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+    if (node->type == XML_DOCUMENT_NODE) {
+        doc = (xmlDocPtr) node;
+	node = NULL;
+#ifdef LIBXML_HTML_ENABLED
+    } else if (node->type == XML_HTML_DOCUMENT_NODE) {
+        doc = (xmlDocPtr) node;
+	node = NULL;
+#endif
+    } else {
+        if (node->type == XML_NAMESPACE_DECL)
+	    doc = NULL;
+	else
+            doc = node->doc;
+        if ((doc == NULL) || (doc->type == XML_DOCUMENT_NODE)) {
+#ifdef LIBXML_HTML_ENABLED
+        } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
+#endif /* LIBXML_HTML_ENABLED */
+        } else {
+            Py_INCREF(Py_None);
+            return (Py_None);
+        }
+    }
+
+
+    buf = xmlBufferCreate();
+    if (buf == NULL) {
+	Py_INCREF(Py_None);
+	return (Py_None);
+    }
+    if (format) options |= XML_SAVE_FORMAT;
+    ctxt = xmlSaveToBuffer(buf, encoding, options);
+    if (ctxt == NULL) {
+	xmlBufferFree(buf);
+	Py_INCREF(Py_None);
+	return (Py_None);
+    }
+    if (node == NULL)
+	xmlSaveDoc(ctxt, doc);
+    else
+	xmlSaveTree(ctxt, node);
+    xmlSaveClose(ctxt);
+
+    c_retval = buf->content;
+    buf->content = NULL;
+
+    xmlBufferFree(buf);
+    py_retval = libxml_charPtrWrap((char *) c_retval);
+
+    return (py_retval);
+}
+
+static PyObject *
+libxml_saveNodeTo(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_file = NULL;
+    FILE *output;
+    PyObject *pyobj_node;
+    xmlNodePtr node;
+    xmlDocPtr doc;
+    const char *encoding;
+    int format;
+    int len;
+    xmlOutputBufferPtr buf;
+    xmlCharEncodingHandlerPtr handler = NULL;
+
+    if (!PyArg_ParseTuple(args, (char *) "OOzi:serializeNode", &pyobj_node,
+                          &py_file, &encoding, &format))
+        return (NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    if (node == NULL) {
+        return (PyLong_FromLong((long) -1));
+    }
+    output = PyFile_Get(py_file);
+    if (output == NULL) {
+        return (PyLong_FromLong((long) -1));
+    }
+
+    if (node->type == XML_DOCUMENT_NODE) {
+        doc = (xmlDocPtr) node;
+    } else if (node->type == XML_HTML_DOCUMENT_NODE) {
+        doc = (xmlDocPtr) node;
+    } else {
+        doc = node->doc;
+    }
+#ifdef LIBXML_HTML_ENABLED
+    if (doc->type == XML_HTML_DOCUMENT_NODE) {
+        if (encoding == NULL)
+            encoding = (const char *) htmlGetMetaEncoding(doc);
+    }
+#endif /* LIBXML_HTML_ENABLED */
+    if (encoding != NULL) {
+        handler = xmlFindCharEncodingHandler(encoding);
+        if (handler == NULL) {
+            PyFile_Release(output);
+            return (PyLong_FromLong((long) -1));
+        }
+    }
+    if (doc->type == XML_HTML_DOCUMENT_NODE) {
+        if (handler == NULL)
+            handler = xmlFindCharEncodingHandler("HTML");
+        if (handler == NULL)
+            handler = xmlFindCharEncodingHandler("ascii");
+    }
+
+    buf = xmlOutputBufferCreateFile(output, handler);
+    if (node->type == XML_DOCUMENT_NODE) {
+        len = xmlSaveFormatFileTo(buf, doc, encoding, format);
+#ifdef LIBXML_HTML_ENABLED
+    } else if (node->type == XML_HTML_DOCUMENT_NODE) {
+        htmlDocContentDumpFormatOutput(buf, doc, encoding, format);
+        len = xmlOutputBufferClose(buf);
+    } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
+        htmlNodeDumpFormatOutput(buf, doc, node, encoding, format);
+        len = xmlOutputBufferClose(buf);
+#endif /* LIBXML_HTML_ENABLED */
+    } else {
+        xmlNodeDumpOutput(buf, doc, node, 0, format, encoding);
+        len = xmlOutputBufferClose(buf);
+    }
+    PyFile_Release(output);
+    return (PyLong_FromLong((long) len));
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ *									*
+ *			Extra stuff					*
+ *									*
+ ************************************************************************/
+PyObject *
+libxml_xmlNewNode(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_retval;
+    xmlChar *name;
+    xmlNodePtr node;
+
+    if (!PyArg_ParseTuple(args, (char *) "s:xmlNewNode", &name))
+        return (NULL);
+    node = (xmlNodePtr) xmlNewNode(NULL, name);
+
+    if (node == NULL) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+    py_retval = libxml_xmlNodePtrWrap(node);
+    return (py_retval);
+}
+
+
+/************************************************************************
+ *									*
+ *			Local Catalog stuff				*
+ *									*
+ ************************************************************************/
+
+#ifdef LIBXML_CATALOG_ENABLED
+static PyObject *
+libxml_addLocalCatalog(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    xmlChar *URL;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"Os:addLocalCatalog", &pyobj_ctxt, &URL))
+        return(NULL);
+
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    if (URL != NULL) {
+	ctxt->catalogs = xmlCatalogAddLocal(ctxt->catalogs, URL);
+    }
+
+    Py_INCREF(Py_None);
+    return (Py_None);
+}
+#endif /* LIBXML_CATALOG_ENABLED */
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+/************************************************************************
+ *                                                                      *
+ * RelaxNG error handler registration                                   *
+ *                                                                      *
+ ************************************************************************/
+
+typedef struct 
+{
+    PyObject *warn;
+    PyObject *error;
+    PyObject *arg;
+} xmlRelaxNGValidCtxtPyCtxt;
+typedef xmlRelaxNGValidCtxtPyCtxt *xmlRelaxNGValidCtxtPyCtxtPtr;
+
+static void
+libxml_xmlRelaxNGValidityGenericErrorFuncHandler(void *ctx, char *str) 
+{
+    PyObject *list;
+    PyObject *result;
+    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+    
+    pyCtxt = (xmlRelaxNGValidCtxtPyCtxtPtr)ctx;
+
+    list = PyTuple_New(2);
+    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+    PyTuple_SetItem(list, 1, pyCtxt->arg);
+    Py_XINCREF(pyCtxt->arg);
+    result = PyObject_CallObject(pyCtxt->error, list);
+    if (result == NULL) 
+    {
+        /* TODO: manage for the exception to be propagated... */
+        PyErr_Print();
+    }
+    Py_XDECREF(list);
+    Py_XDECREF(result);
+}
+
+static void
+libxml_xmlRelaxNGValidityGenericWarningFuncHandler(void *ctx, char *str) 
+{
+    PyObject *list;
+    PyObject *result;
+    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+    
+    pyCtxt = (xmlRelaxNGValidCtxtPyCtxtPtr)ctx;
+
+    list = PyTuple_New(2);
+    PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+    PyTuple_SetItem(list, 1, pyCtxt->arg);
+    Py_XINCREF(pyCtxt->arg);
+    result = PyObject_CallObject(pyCtxt->warn, list);
+    if (result == NULL) 
+    {
+        /* TODO: manage for the exception to be propagated... */
+        PyErr_Print();
+    }
+    Py_XDECREF(list);
+    Py_XDECREF(result);
+}
+
+static void
+libxml_xmlRelaxNGValidityErrorFunc(void *ctx, const char *msg, ...)
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlRelaxNGValidityGenericErrorFuncHandler(ctx, libxml_buildMessage(msg, ap));
+    va_end(ap);
+}
+
+static void
+libxml_xmlRelaxNGValidityWarningFunc(void *ctx, const char *msg, ...)
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    libxml_xmlRelaxNGValidityGenericWarningFuncHandler(ctx, libxml_buildMessage(msg, ap));
+    va_end(ap);
+}
+
+static PyObject *
+libxml_xmlRelaxNGSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+    PyObject *py_retval;
+    PyObject *pyobj_error;
+    PyObject *pyobj_warn;
+    PyObject *pyobj_ctx;
+    PyObject *pyobj_arg = Py_None;
+    xmlRelaxNGValidCtxtPtr ctxt;
+    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "OOO|O:xmlRelaxNGSetValidErrors", &pyobj_ctx, &pyobj_error, &pyobj_warn, &pyobj_arg))
+        return (NULL);
+
+    ctxt = PyrelaxNgValidCtxt_Get(pyobj_ctx);
+    if (xmlRelaxNGGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == -1)
+    {
+        py_retval = libxml_intWrap(-1);
+        return(py_retval);
+    }
+    
+    if (pyCtxt == NULL)
+    {
+        /* first time to set the error handlers */
+        pyCtxt = xmlMalloc(sizeof(xmlRelaxNGValidCtxtPyCtxt));
+        if (pyCtxt == NULL) {
+            py_retval = libxml_intWrap(-1);
+            return(py_retval);
+        }
+        memset(pyCtxt, 0, sizeof(xmlRelaxNGValidCtxtPyCtxt));
+    }
+    
+    /* TODO: check warn and error is a function ! */
+    Py_XDECREF(pyCtxt->error);
+    Py_XINCREF(pyobj_error);
+    pyCtxt->error = pyobj_error;
+    
+    Py_XDECREF(pyCtxt->warn);
+    Py_XINCREF(pyobj_warn);
+    pyCtxt->warn = pyobj_warn;
+    
+    Py_XDECREF(pyCtxt->arg);
+    Py_XINCREF(pyobj_arg);
+    pyCtxt->arg = pyobj_arg;
+
+    xmlRelaxNGSetValidErrors(ctxt, &libxml_xmlRelaxNGValidityErrorFunc, &libxml_xmlRelaxNGValidityWarningFunc, pyCtxt);
+
+    py_retval = libxml_intWrap(1);
+    return (py_retval);
+}
+
+static PyObject *
+libxml_xmlRelaxNGFreeValidCtxt(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+    xmlRelaxNGValidCtxtPtr ctxt;
+    xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGFreeValidCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+
+    if (xmlRelaxNGGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == 0)
+    {
+        if (pyCtxt != NULL)
+        {
+            Py_XDECREF(pyCtxt->error);
+            Py_XDECREF(pyCtxt->warn);
+            Py_XDECREF(pyCtxt->arg);
+            xmlFree(pyCtxt);
+        }
+    }
+    
+    xmlRelaxNGFreeValidCtxt(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+typedef struct
+{
+	PyObject *warn;
+	PyObject *error;
+	PyObject *arg;
+} xmlSchemaValidCtxtPyCtxt;
+typedef xmlSchemaValidCtxtPyCtxt *xmlSchemaValidCtxtPyCtxtPtr;
+
+static void
+libxml_xmlSchemaValidityGenericErrorFuncHandler(void *ctx, char *str)
+{
+	PyObject *list;
+	PyObject *result;
+	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
+
+	pyCtxt = (xmlSchemaValidCtxtPyCtxtPtr) ctx;
+
+	list = PyTuple_New(2);
+	PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+	PyTuple_SetItem(list, 1, pyCtxt->arg);
+	Py_XINCREF(pyCtxt->arg);
+	result = PyObject_CallObject(pyCtxt->error, list);
+	if (result == NULL) 
+	{
+		/* TODO: manage for the exception to be propagated... */
+		PyErr_Print();
+	}
+	Py_XDECREF(list);
+	Py_XDECREF(result);
+}
+
+static void
+libxml_xmlSchemaValidityGenericWarningFuncHandler(void *ctx, char *str)
+{
+	PyObject *list;
+	PyObject *result;
+	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
+
+	pyCtxt = (xmlSchemaValidCtxtPyCtxtPtr) ctx;
+
+	list = PyTuple_New(2);
+	PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+	PyTuple_SetItem(list, 1, pyCtxt->arg);
+	Py_XINCREF(pyCtxt->arg);
+	result = PyObject_CallObject(pyCtxt->warn, list);
+	if (result == NULL)
+	{
+		/* TODO: manage for the exception to be propagated... */
+		PyErr_Print();
+	}
+	Py_XDECREF(list);
+	Py_XDECREF(result);
+}
+
+static void
+libxml_xmlSchemaValidityErrorFunc(void *ctx, const char *msg, ...)
+{
+	va_list ap;
+	
+	va_start(ap, msg);
+	libxml_xmlSchemaValidityGenericErrorFuncHandler(ctx, libxml_buildMessage(msg, ap));
+	va_end(ap);
+}
+
+static void
+libxml_xmlSchemaValidityWarningFunc(void *ctx, const char *msg, ...)
+{
+	va_list ap;
+
+	va_start(ap, msg);
+	libxml_xmlSchemaValidityGenericWarningFuncHandler(ctx, libxml_buildMessage(msg, ap));
+	va_end(ap);
+}
+
+PyObject *
+libxml_xmlSchemaSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+	PyObject *py_retval;
+	PyObject *pyobj_error;
+	PyObject *pyobj_warn;
+	PyObject *pyobj_ctx;
+	PyObject *pyobj_arg = Py_None;
+	xmlSchemaValidCtxtPtr ctxt;
+	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
+
+	if (!PyArg_ParseTuple
+		(args, (char *) "OOO|O:xmlSchemaSetValidErrors", &pyobj_ctx, &pyobj_error, &pyobj_warn, &pyobj_arg))
+		return (NULL);
+
+	ctxt = PySchemaValidCtxt_Get(pyobj_ctx);
+	if (xmlSchemaGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == -1)
+	{
+		py_retval = libxml_intWrap(-1);
+		return(py_retval);
+	}
+
+	if (pyCtxt == NULL)
+	{
+		/* first time to set the error handlers */
+		pyCtxt = xmlMalloc(sizeof(xmlSchemaValidCtxtPyCtxt));
+		if (pyCtxt == NULL) {
+			py_retval = libxml_intWrap(-1);
+			return(py_retval);
+		}
+		memset(pyCtxt, 0, sizeof(xmlSchemaValidCtxtPyCtxt));
+	}
+
+	/* TODO: check warn and error is a function ! */
+	Py_XDECREF(pyCtxt->error);
+	Py_XINCREF(pyobj_error);
+	pyCtxt->error = pyobj_error;
+
+	Py_XDECREF(pyCtxt->warn);
+	Py_XINCREF(pyobj_warn);
+	pyCtxt->warn = pyobj_warn;
+
+	Py_XDECREF(pyCtxt->arg);
+	Py_XINCREF(pyobj_arg);
+	pyCtxt->arg = pyobj_arg;
+
+	xmlSchemaSetValidErrors(ctxt, &libxml_xmlSchemaValidityErrorFunc, &libxml_xmlSchemaValidityWarningFunc, pyCtxt);
+
+	py_retval = libxml_intWrap(1);
+	return(py_retval);
+}
+
+static PyObject *
+libxml_xmlSchemaFreeValidCtxt(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+	xmlSchemaValidCtxtPtr ctxt;
+	xmlSchemaValidCtxtPyCtxtPtr pyCtxt;
+	PyObject *pyobj_ctxt;
+
+	if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaFreeValidCtxt", &pyobj_ctxt))
+		return(NULL);
+	ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+
+	if (xmlSchemaGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == 0)
+	{
+		if (pyCtxt != NULL)
+		{
+			Py_XDECREF(pyCtxt->error);
+			Py_XDECREF(pyCtxt->warn);
+			Py_XDECREF(pyCtxt->arg);
+			xmlFree(pyCtxt);
+		}
+	}
+
+	xmlSchemaFreeValidCtxt(ctxt);
+	Py_INCREF(Py_None);
+	return(Py_None);
+}
+
+#endif
+
+#ifdef LIBXML_C14N_ENABLED
+#ifdef LIBXML_OUTPUT_ENABLED
+
+/************************************************************************
+ *                                                                      *
+ * XML Canonicalization c14n                                            *
+ *                                                                      *
+ ************************************************************************/
+
+static int
+PyxmlNodeSet_Convert(PyObject *py_nodeset, xmlNodeSetPtr *result)
+{
+    xmlNodeSetPtr nodeSet;
+    int is_tuple = 0;
+
+    if (PyTuple_Check(py_nodeset))
+        is_tuple = 1;
+    else if (PyList_Check(py_nodeset))
+        is_tuple = 0;
+    else if (py_nodeset == Py_None) {
+        *result = NULL;
+        return 0;
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                        "must be a tuple or list of nodes.");
+        return -1;
+    }
+
+    nodeSet = (xmlNodeSetPtr) xmlMalloc(sizeof(xmlNodeSet));
+    if (nodeSet == NULL) {
+        PyErr_SetString(PyExc_MemoryError, "");
+        return -1;
+    }
+
+    nodeSet->nodeNr = 0;
+    nodeSet->nodeMax = (is_tuple
+                        ? PyTuple_GET_SIZE(py_nodeset)
+                        : PyList_GET_SIZE(py_nodeset));
+    nodeSet->nodeTab
+        = (xmlNodePtr *) xmlMalloc (nodeSet->nodeMax
+                                    * sizeof(xmlNodePtr));
+    if (nodeSet->nodeTab == NULL) {
+        xmlFree(nodeSet);
+        PyErr_SetString(PyExc_MemoryError, "");
+        return -1;
+    }
+    memset(nodeSet->nodeTab, 0 ,
+           nodeSet->nodeMax * sizeof(xmlNodePtr));
+
+    {
+        int idx;
+        for (idx=0; idx < nodeSet->nodeMax; ++idx) {
+            xmlNodePtr pynode =
+                PyxmlNode_Get (is_tuple
+                               ? PyTuple_GET_ITEM(py_nodeset, idx)
+                               : PyList_GET_ITEM(py_nodeset, idx));
+            if (pynode)
+                nodeSet->nodeTab[nodeSet->nodeNr++] = pynode;
+        }
+    }
+    *result = nodeSet;
+    return 0;
+}
+
+static int
+PystringSet_Convert(PyObject *py_strings, xmlChar *** result)
+{
+    /* NOTE: the array should be freed, but the strings are shared
+       with the python strings and so must not be freed. */
+
+    xmlChar ** strings;
+    int is_tuple = 0;
+    int count;
+    int init_index = 0;
+
+    if (PyTuple_Check(py_strings))
+        is_tuple = 1;
+    else if (PyList_Check(py_strings))
+        is_tuple = 0;
+    else if (py_strings == Py_None) {
+        *result = NULL;
+        return 0;
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                        "must be a tuple or list of strings.");
+        return -1;
+    }
+
+    count = (is_tuple
+             ? PyTuple_GET_SIZE(py_strings)
+             : PyList_GET_SIZE(py_strings));
+
+    strings = (xmlChar **) xmlMalloc(sizeof(xmlChar *) * count);
+
+    if (strings == NULL) {
+        PyErr_SetString(PyExc_MemoryError, "");
+        return -1;
+    }
+
+    memset(strings, 0 , sizeof(xmlChar *) * count);
+
+    {
+        int idx;
+        for (idx=0; idx < count; ++idx) {
+            char* s = PyBytes_AsString
+                (is_tuple
+                 ? PyTuple_GET_ITEM(py_strings, idx)
+                 : PyList_GET_ITEM(py_strings, idx));
+            if (s)
+                strings[init_index++] = (xmlChar *)s;
+            else {
+                xmlFree(strings);
+                PyErr_SetString(PyExc_TypeError,
+                                "must be a tuple or list of strings.");
+                return -1;
+            }
+        }
+    }
+
+    *result = strings;
+    return 0;
+}
+
+static PyObject *
+libxml_C14NDocDumpMemory(ATTRIBUTE_UNUSED PyObject * self,
+                         PyObject * args)
+{
+    PyObject *py_retval = NULL;
+
+    PyObject *pyobj_doc;
+    PyObject *pyobj_nodes;
+    int exclusive;
+    PyObject *pyobj_prefixes;
+    int with_comments;
+
+    xmlDocPtr doc;
+    xmlNodeSetPtr nodes;
+    xmlChar **prefixes = NULL;
+    xmlChar *doc_txt;
+
+    int result;
+
+    if (!PyArg_ParseTuple(args, (char *) "OOiOi:C14NDocDumpMemory",
+                          &pyobj_doc,
+                          &pyobj_nodes,
+                          &exclusive,
+                          &pyobj_prefixes,
+                          &with_comments))
+        return (NULL);
+
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    if (!doc) {
+        PyErr_SetString(PyExc_TypeError, "bad document.");
+        return NULL;
+    }
+
+    result = PyxmlNodeSet_Convert(pyobj_nodes, &nodes);
+    if (result < 0) return NULL;
+
+    if (exclusive) {
+        result = PystringSet_Convert(pyobj_prefixes, &prefixes);
+        if (result < 0) {
+            if (nodes) {
+                xmlFree(nodes->nodeTab);
+                xmlFree(nodes);
+            }
+            return NULL;
+        }
+    }
+
+    result = xmlC14NDocDumpMemory(doc,
+                                  nodes,
+                                  exclusive,
+                                  prefixes,
+                                  with_comments,
+                                  &doc_txt);
+
+    if (nodes) {
+        xmlFree(nodes->nodeTab);
+        xmlFree(nodes);
+    }
+    if (prefixes) {
+        xmlChar ** idx = prefixes;
+        while (*idx) xmlFree(*(idx++));
+        xmlFree(prefixes);
+    }
+
+    if (result < 0) {
+        PyErr_SetString(PyExc_Exception,
+                        "libxml2 xmlC14NDocDumpMemory failure.");
+        return NULL;
+    }
+    else {
+        py_retval = PY_IMPORT_STRING_SIZE((const char *) doc_txt,
+                                                result);
+        xmlFree(doc_txt);
+        return py_retval;
+    }
+}
+
+static PyObject *
+libxml_C14NDocSaveTo(ATTRIBUTE_UNUSED PyObject * self,
+                     PyObject * args)
+{
+    PyObject *pyobj_doc;
+    PyObject *py_file;
+    PyObject *pyobj_nodes;
+    int exclusive;
+    PyObject *pyobj_prefixes;
+    int with_comments;
+
+    xmlDocPtr doc;
+    xmlNodeSetPtr nodes;
+    xmlChar **prefixes = NULL;
+    FILE * output;
+    xmlOutputBufferPtr buf;
+
+    int result;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *) "OOiOiO:C14NDocSaveTo",
+                          &pyobj_doc,
+                          &pyobj_nodes,
+                          &exclusive,
+                          &pyobj_prefixes,
+                          &with_comments,
+                          &py_file))
+        return (NULL);
+
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    if (!doc) {
+        PyErr_SetString(PyExc_TypeError, "bad document.");
+        return NULL;
+    }
+
+    output = PyFile_Get(py_file);
+    if (output == NULL) {
+        PyErr_SetString(PyExc_TypeError, "bad file.");
+        return NULL;
+    }
+    buf = xmlOutputBufferCreateFile(output, NULL);
+
+    result = PyxmlNodeSet_Convert(pyobj_nodes, &nodes);
+    if (result < 0) {
+        xmlOutputBufferClose(buf);
+        return NULL;
+    }
+
+    if (exclusive) {
+        result = PystringSet_Convert(pyobj_prefixes, &prefixes);
+        if (result < 0) {
+            if (nodes) {
+                xmlFree(nodes->nodeTab);
+                xmlFree(nodes);
+            }
+            xmlOutputBufferClose(buf);
+            return NULL;
+        }
+    }
+
+    result = xmlC14NDocSaveTo(doc,
+                              nodes,
+                              exclusive,
+                              prefixes,
+                              with_comments,
+                              buf);
+
+    if (nodes) {
+        xmlFree(nodes->nodeTab);
+        xmlFree(nodes);
+    }
+    if (prefixes) {
+        xmlChar ** idx = prefixes;
+        while (*idx) xmlFree(*(idx++));
+        xmlFree(prefixes);
+    }
+
+    PyFile_Release(output);
+    len = xmlOutputBufferClose(buf);
+
+    if (result < 0) {
+        PyErr_SetString(PyExc_Exception,
+                        "libxml2 xmlC14NDocSaveTo failure.");
+        return NULL;
+    }
+    else
+        return PyLong_FromLong((long) len);
+}
+
+#endif
+#endif
+
+static PyObject *
+libxml_getObjDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+
+    PyObject *obj;
+    char *str;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:getObjDesc", &obj))
+        return NULL;
+    str = PyCapsule_GetPointer(obj, PyCapsule_GetName(obj));
+    return Py_BuildValue((char *)"s", str);
+}
+
+static PyObject *
+libxml_compareNodesEqual(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    
+    PyObject *py_node1, *py_node2;
+    xmlNodePtr node1, node2;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:compareNodesEqual",
+		&py_node1, &py_node2))
+        return NULL;
+    /* To compare two node objects, we compare their pointer addresses */
+    node1 = PyxmlNode_Get(py_node1);
+    node2 = PyxmlNode_Get(py_node2);
+    if ( node1 == node2 )
+        return Py_BuildValue((char *)"i", 1);
+    else
+        return Py_BuildValue((char *)"i", 0);
+    
+}
+
+static PyObject *
+libxml_nodeHash(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+
+    PyObject *py_node1;
+    xmlNodePtr node1;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:nodeHash", &py_node1))
+	    return NULL;
+    /* For simplicity, we use the node pointer address as a hash value */
+    node1 = PyxmlNode_Get(py_node1);
+
+    return PyLong_FromVoidPtr(node1);
+
+}
+
+/************************************************************************
+ *									*
+ *		Deprecation warnings					*
+ *									*
+ ************************************************************************/
+
+int
+libxml_deprecationWarning(const char *func) {
+#if PY_VERSION_HEX >= 0x03020000
+    return PyErr_WarnFormat(PyExc_PendingDeprecationWarning, 1,
+            "libxml2mod.%s is deprecated and will be removed "
+            "in future versions", func);
+#else
+    return PyErr_WarnEx(PyExc_PendingDeprecationWarning, func, 1);
+#endif
+}
+
+/************************************************************************
+ *									*
+ *			The registration stuff				*
+ *									*
+ ************************************************************************/
+static PyMethodDef libxmlMethods[] = {
+#include "libxml2-export.c"
+    {(char *) "name", libxml_name, METH_VARARGS, NULL},
+    {(char *) "children", libxml_children, METH_VARARGS, NULL},
+    {(char *) "properties", libxml_properties, METH_VARARGS, NULL},
+    {(char *) "last", libxml_last, METH_VARARGS, NULL},
+    {(char *) "prev", libxml_prev, METH_VARARGS, NULL},
+    {(char *) "next", libxml_next, METH_VARARGS, NULL},
+    {(char *) "parent", libxml_parent, METH_VARARGS, NULL},
+    {(char *) "type", libxml_type, METH_VARARGS, NULL},
+    {(char *) "doc", libxml_doc, METH_VARARGS, NULL},
+    {(char *) "xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL},
+    {(char *) "xmlNodeRemoveNsDef", libxml_xmlNodeRemoveNsDef, METH_VARARGS, NULL},
+#ifdef LIBXML_VALID_ENABLED
+    {(char *)"xmlSetValidErrors", libxml_xmlSetValidErrors, METH_VARARGS, NULL},
+    {(char *)"xmlFreeValidCtxt", libxml_xmlFreeValidCtxt, METH_VARARGS, NULL},
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_OUTPUT_ENABLED
+    {(char *) "serializeNode", libxml_serializeNode, METH_VARARGS, NULL},
+    {(char *) "saveNodeTo", libxml_saveNodeTo, METH_VARARGS, NULL},
+    {(char *) "outputBufferCreate", libxml_xmlCreateOutputBuffer, METH_VARARGS, NULL},
+    {(char *) "outputBufferGetPythonFile", libxml_outputBufferGetPythonFile, METH_VARARGS, NULL},
+    {(char *) "xmlOutputBufferClose", libxml_xmlOutputBufferClose, METH_VARARGS, NULL},
+    { (char *)"xmlOutputBufferFlush", libxml_xmlOutputBufferFlush, METH_VARARGS, NULL },
+    { (char *)"xmlSaveFileTo", libxml_xmlSaveFileTo, METH_VARARGS, NULL },
+    { (char *)"xmlSaveFormatFileTo", libxml_xmlSaveFormatFileTo, METH_VARARGS, NULL },
+#endif /* LIBXML_OUTPUT_ENABLED */
+    {(char *) "inputBufferCreate", libxml_xmlCreateInputBuffer, METH_VARARGS, NULL},
+    {(char *) "setEntityLoader", libxml_xmlSetEntityLoader, METH_VARARGS, NULL},
+    {(char *)"xmlRegisterErrorHandler", libxml_xmlRegisterErrorHandler, METH_VARARGS, NULL },
+    {(char *)"xmlParserCtxtSetErrorHandler", libxml_xmlParserCtxtSetErrorHandler, METH_VARARGS, NULL },
+    {(char *)"xmlParserCtxtGetErrorHandler", libxml_xmlParserCtxtGetErrorHandler, METH_VARARGS, NULL },
+    {(char *)"xmlFreeParserCtxt", libxml_xmlFreeParserCtxt, METH_VARARGS, NULL },
+#ifdef LIBXML_READER_ENABLED
+    {(char *)"xmlTextReaderSetErrorHandler", libxml_xmlTextReaderSetErrorHandler, METH_VARARGS, NULL },
+    {(char *)"xmlTextReaderGetErrorHandler", libxml_xmlTextReaderGetErrorHandler, METH_VARARGS, NULL },
+    {(char *)"xmlFreeTextReader", libxml_xmlFreeTextReader, METH_VARARGS, NULL },
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+    {(char *)"addLocalCatalog", libxml_addLocalCatalog, METH_VARARGS, NULL },
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+    {(char *)"xmlRelaxNGSetValidErrors", libxml_xmlRelaxNGSetValidErrors, METH_VARARGS, NULL},
+    {(char *)"xmlRelaxNGFreeValidCtxt", libxml_xmlRelaxNGFreeValidCtxt, METH_VARARGS, NULL},
+    {(char *)"xmlSchemaSetValidErrors", libxml_xmlSchemaSetValidErrors, METH_VARARGS, NULL},
+    {(char *)"xmlSchemaFreeValidCtxt", libxml_xmlSchemaFreeValidCtxt, METH_VARARGS, NULL},
+#endif
+#ifdef LIBXML_C14N_ENABLED
+#ifdef LIBXML_OUTPUT_ENABLED
+    {(char *)"xmlC14NDocDumpMemory", libxml_C14NDocDumpMemory, METH_VARARGS, NULL},
+    {(char *)"xmlC14NDocSaveTo", libxml_C14NDocSaveTo, METH_VARARGS, NULL},
+#endif
+#endif
+    {(char *) "getObjDesc", libxml_getObjDesc, METH_VARARGS, NULL},
+    {(char *) "compareNodesEqual", libxml_compareNodesEqual, METH_VARARGS, NULL},
+    {(char *) "nodeHash", libxml_nodeHash, METH_VARARGS, NULL},
+    {(char *) "xmlRegisterInputCallback", libxml_xmlRegisterInputCallback, METH_VARARGS, NULL},
+    {(char *) "xmlUnregisterInputCallback", libxml_xmlUnregisterInputCallback, METH_VARARGS, NULL},
+    {NULL, NULL, 0, NULL}
+};
+
+#if PY_MAJOR_VERSION >= 3
+#define INITERROR return NULL
+
+static struct PyModuleDef moduledef = {
+        PyModuleDef_HEAD_INIT,
+        "libxml2mod",
+        NULL,
+        -1,
+        libxmlMethods,
+        NULL,
+        NULL,
+        NULL,
+        NULL
+};
+
+#else
+#define INITERROR return
+
+#ifdef MERGED_MODULES
+extern void initlibxsltmod(void);
+#endif
+
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+PyMODINIT_FUNC PyInit_libxml2mod(void)
+#else
+void initlibxml2mod(void)
+#endif
+{
+    PyObject *module;
+
+#if PY_MAJOR_VERSION >= 3
+    module = PyModule_Create(&moduledef);
+#else
+    /* initialize the python extension module */
+    module = Py_InitModule((char *) "libxml2mod", libxmlMethods);
+#endif
+    if (module == NULL)
+        INITERROR;
+
+    /* initialize libxml2 */
+    xmlInitParser();
+    /* TODO this probably need to be revamped for Python3 */
+    libxml_xmlErrorInitialize();
+
+#if PY_MAJOR_VERSION < 3
+#ifdef MERGED_MODULES
+    initlibxsltmod();
+#endif
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+    return module;
+#endif
+}