~ruther/guix-local

58c345f56c05f8d02b1ba22660ad1cf71d50d727 — John Kehayias 6 months ago c0c4ce6
gnu: libxml2: Update to 2.14.6; deprecate python-libxml2.

Python bindings for libxml2 are now built as part of libxml2; remove all
python-libxml2 inputs for libxml2 (nearly all already had libxml2) and
deprecate the package.  This was done manually using

git grep python-libxml2 gnu/packages

to find affected packages and then check all their input fields.

With the update to libxml2, we can remove all the libxml2-next* variants.
This change was automated with:

git grep -rl libxml2-next | xargs sed -i 's/\(libxml2-next\|libxml2-next-for-grafting\)/libxml2/g'

* gnu/packages/xml.scm (libxml2): Update to 2.14.6.
[arguments]<#:phases>: Add configure-python phase (from python-libxml2).
[native-inputs]: Add pkg-config and python-minimal.
(libxml2-next, libxml2-next/fixed, libxml2-next-for-grafting): Remove.
(python-libxml2): Deprecate in favor of libxml2.

Change-Id: I2976f2fde086e9bc345d661edbdc125abbb7a753
M gnu/packages/augeas.scm => gnu/packages/augeas.scm +1 -1
@@ 57,7 57,7 @@
                "1zzdp5bwnszza5q6cjw66hkicay8b49n5pda7cbcgfg4hbbzv2rn"))))
    (build-system gnu-build-system)
    (propagated-inputs
     (list libxml2-next))
     (list libxml2))
    (native-inputs
     (list readline pkg-config))
    (home-page "https://augeas.net")

M gnu/packages/bioinformatics.scm => gnu/packages/bioinformatics.scm +1 -1
@@ 23604,7 23604,7 @@ The output is in SAM format.")
                               #$(this-package-input "libxml2")
                               "/include/libxml2"))))
    (propagated-inputs
     (list libxml2-next))
     (list libxml2))
    (native-inputs
     (list check swig))
    (home-page "https://sbml.org/Software/libSBML")

M gnu/packages/elf.scm => gnu/packages/elf.scm +1 -1
@@ 243,7 243,7 @@ object or archive file), @command{eu-strip} (for discarding symbols),
     (list pkg-config texinfo python-sphinx python))
    (propagated-inputs
     (list elfutils ;libabigail.la says -lelf
           libxml2-next))           ;in Requires.private of libabigail.pc
           libxml2))           ;in Requires.private of libabigail.pc
    (synopsis "Analyze application binary interfaces (ABIs)")
    (description
     "@dfn{ABIGAIL} stands for the Application Binary Interface Generic

M gnu/packages/engineering.scm => gnu/packages/engineering.scm +1 -2
@@ 1566,8 1566,7 @@ use on a given system.")
           parallel
           perl
           pkg-config
           python-wrapper
           python-libxml2))
           python-wrapper))
    (inputs
     (list pcre2))
    (home-page "https://www.gnu.org/software/libredwg/")

M gnu/packages/freedesktop.scm => gnu/packages/freedesktop.scm +1 -1
@@ 2234,7 2234,7 @@ between protocols to provide a unified interface for applications.")
      (inputs (list sqlite))
      (propagated-inputs
       ;; telepathy-logger-0.2.pc refers to all these.
       (list libxml2-next telepathy-glib))
       (list libxml2 telepathy-glib))
      (synopsis "Telepathy logger library")
      (home-page "https://telepathy.freedesktop.org/")
      (description

M gnu/packages/gl.scm => gnu/packages/gl.scm +0 -1
@@ 357,7 357,6 @@ also known as DXTn or DXTC) for Mesa.")
            glslang
            libclc
            pkg-config
            python-libxml2              ;for OpenGL ES 1.1 and 2.0 support
            python-mako
            python-ply
            python-pyyaml

M gnu/packages/glib.scm => gnu/packages/glib.scm +2 -2
@@ 770,7 770,7 @@ The intltool collection can be used to do these things:
               "1jl7gsr7aclb9nvqazr039m86y7f7ivfhl2pixcrbfqjkb97r6kb"))))
    (build-system gnu-build-system)
    (inputs
     (list bash-minimal libxml2 python-libxml2 python))
     (list bash-minimal libxml2 python))
    (arguments
     (list
      #:phases


@@ 858,7 858,7 @@ by GDBus included in Glib.")
                         pkg-config
                         vala))
    (inputs (list check python python-pygobject))
    (propagated-inputs (list glib libxml2-next sqlite))
    (propagated-inputs (list glib libxml2 sqlite))
    (arguments
     (list #:tests? #f                  ;one test fails.
           #:imported-modules `((guix build python-build-system)

M gnu/packages/gnome.scm => gnu/packages/gnome.scm +16 -16
@@ 443,7 443,7 @@ services.")
                                                     "/share/gtk-doc/html"))))
    (native-inputs (list docbook-xml-4.1.2 gobject-introspection gtk-doc/stable
                         pkg-config))
    (propagated-inputs (list glib libsoup-minimal-2 libxml2-next-for-grafting))
    (propagated-inputs (list glib libsoup-minimal-2 libxml2))
    (synopsis "Glib library for feeds")
    (description "LibGRSS is a Glib abstraction to handle feeds in RSS, Atom,
and other formats.")


@@ 1223,7 1223,7 @@ Library reference documentation.")
     ;; These inputs are required by the pkg-config file.
     (list glib
           libsoup
           libxml2-next-for-grafting))
           libxml2))
    (synopsis "WebDav server implementation using libsoup")
    (description "PhoDav was initially developed as a file-sharing mechanism for Spice,
but it is generic enough to be reused in other projects,


@@ 1433,7 1433,7 @@ a debugging tool, @command{gssdp-device-sniffer}.")
           gsettings-desktop-schemas    ;for ‘org.gnome.system.proxy’.
           gssdp
           libsoup
           libxml2-next-for-grafting))
           libxml2))
    (synopsis "PnP API for GNOME")
    (description "This package provides GUPnP, an object-oriented framework
for creating UPnP devices and control points, written in C using


@@ 2018,7 2018,7 @@ and system administrators.")
      (inputs
       (list graphene
             gtk+
             libxml2-next-for-grafting
             libxml2
             libxslt
             poppler
             python-minimal


@@ 2068,7 2068,7 @@ formats like PNG, SVG, PDF and EPS.")
       ("json-glib" ,json-glib)
       ("liboauth" ,liboauth)
       ("libsoup" ,libsoup-minimal-2)
       ("libxml2" ,libxml2-next-for-grafting)))
       ("libxml2" ,libxml2)))
    (home-page "https://wiki.gnome.org/Projects/libgdata")
    (synopsis "Library for accessing online service APIs")
    (description


@@ 3600,7 3600,7 @@ XML/CSS rendering engine.")
           zlib))
    (propagated-inputs
     (list glib
           libxml2-next-for-grafting))
           libxml2))
    (synopsis "G Structured File Library")
    (description "Libgsf aims to provide an efficient extensible I/O abstraction
for dealing with different structured file formats.")


@@ 4215,7 4215,7 @@ ported to GTK+.")
    (inputs
     (list python)) ;; needed for the optional libglade-convert program
    (propagated-inputs
     (list gtk+-2 libxml2-next-for-grafting)) ; required by libglade-2.0.pc
     (list gtk+-2 libxml2)) ; required by libglade-2.0.pc
    (native-inputs
     (list pkg-config))
    (home-page "https://developer.gnome.org/libglade")


@@ 4254,7 4254,7 @@ widgets built in the loading process.")
               ;; Therefore we must do it.
               (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp)))))))))
    ;; Mentioned as Required by the .pc file
    (propagated-inputs (list libxml2-next-for-grafting))
    (propagated-inputs (list libxml2))
    (inputs
     (list popt pangox-compat libgnome libgnomecanvas libglade))
    (native-inputs


@@ 4911,7 4911,7 @@ GLib and GObject, and integrates JSON with GLib data types.")
       ("libtool" ,libtool)))
    (propagated-inputs
     ;; Required by libxklavier.pc.
     (list glib libxml2-next-for-grafting))
     (list glib libxml2))
    (inputs
     (list iso-codes/pinned libxi libxkbfile xkbcomp xkeyboard-config))
    (home-page "https://www.freedesktop.org/wiki/Software/LibXklavier/")


@@ 5040,7 5040,7 @@ files.")
     (list `(,glib "bin") gobject-introspection pkg-config))
    (propagated-inputs
     ;; rest-0.7.pc refers to all these.
     (list glib libsoup-minimal-2 libxml2-next-for-grafting))
     (list glib libsoup-minimal-2 libxml2))
    (home-page "https://www.gtk.org/")
    (synopsis "RESTful web api query library")
    (description


@@ 5202,7 5202,7 @@ as OpenStreetMap, OpenCycleMap, OpenAerialMap and Maps.")
           libpsl
           nghttp2 ;for pkg-config
           `(,nghttp2 "lib")
           libxml2-next-for-grafting
           libxml2
           sqlite
           zlib))
    (inputs


@@ 6010,7 6010,7 @@ service via the system message bus.")
     (list gtk+
           gdk-pixbuf
           json-glib
           libxml2-next-for-grafting
           libxml2
           libsoup
           geocode-glib))
    (inputs


@@ 6129,7 6129,7 @@ settings, themes, mouse settings, and startup of other daemons.")
    (list intltool
          `(,glib "bin") gobject-introspection pkg-config))
   (propagated-inputs
    (list glib gmime libarchive libgcrypt libxml2-next-for-grafting))
    (list glib gmime libarchive libgcrypt libxml2))
   (inputs
    (list libsoup))
   (home-page "https://projects.gnome.org/totem")


@@ 8114,7 8114,7 @@ to display dialog boxes from the commandline and shell scripts.")
           libxext
           libxfixes
           libxkbcommon
           libxml2-next-for-grafting
           libxml2
           libxrandr
           mesa
           pango


@@ 8940,7 8940,7 @@ the available networks and allows users to easily switch between them.")
        (base32 "0gp8irc5ny9i6bw9fp21p8djgksi1s8l5flbn5blisgfpcb2w820"))))
    (build-system gnu-build-system)
    (propagated-inputs
     (list libxml2-next-for-grafting))  ;required by .pc file
     (list libxml2))  ;required by .pc file
    (native-inputs
     (list autoconf
           automake


@@ 13877,7 13877,7 @@ developed with the aim of being used with the Librem 5 phone.")
           sqlite
           vala))
    (propagated-inputs
     (list libxml2-next-for-grafting))  ; required by libgda-5.0.pc
     (list libxml2))  ; required by libgda-5.0.pc
    (home-page "https://gitlab.gnome.org/GNOME/libgda")
    (synopsis "Uniform data access")
    (description

M gnu/packages/gtk.scm => gnu/packages/gtk.scm +1 -1
@@ 613,7 613,7 @@ diagrams.")
           fribidi
           glib
           gtk
           libxml2-next
           libxml2
           pango
           pcre2))
    (home-page "https://wiki.gnome.org/Projects/GtkSourceView")

M gnu/packages/image-processing.scm => gnu/packages/image-processing.scm +1 -1
@@ 816,7 816,7 @@ the OpenCV-Python library.")
           libpng
           (librsvg-for-system)
           libtiff
           libxml2-next
           libxml2
           libwebp
           matio
           openexr

M gnu/packages/libreoffice.scm => gnu/packages/libreoffice.scm +4 -4
@@ 286,7 286,7 @@ into other word processors.")
    (native-inputs
     (list cppunit gperf pkg-config))
    (propagated-inputs ; in Requires or Requires.private field of .pkg
     (list icu4c liblangtag librevenge libxml2-next))
     (list icu4c liblangtag librevenge libxml2))
    (inputs
      (list boost))
    (arguments


@@ 372,7 372,7 @@ working with graphics in the WPG (WordPerfect Graphics) format.")
    (native-inputs
     (list autoconf automake libtool cppunit pkg-config))
    (propagated-inputs                  ;in Requires field of .pkg
     (list curl libxml2-next))
     (list curl libxml2))
    (inputs
     (list boost cyrus-sasl openssl))
    (arguments


@@ 413,7 413,7 @@ as Alfresco or Nuxeo.")
    (native-inputs
     (list doxygen gperf perl pkg-config))
    (propagated-inputs ; in Requires or Requires.private field of .pkg
     (list librevenge libxml2-next))
     (list librevenge libxml2))
    (inputs
     (list boost))
    (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libabw")


@@ 467,7 467,7 @@ CorelDRAW documents of all versions.")
    (native-inputs
     (list cppunit doxygen gperf pkg-config))
    (propagated-inputs ; in Requires or Requires.private field of .pkg
     (list liblangtag librevenge libxml2-next zlib))
     (list liblangtag librevenge libxml2 zlib))
    (inputs
     (list boost glm mdds))
    (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libetonyek")

M gnu/packages/mate.scm => gnu/packages/mate.scm +1 -1
@@ 303,7 303,7 @@ desktop and the mate-about program.")
    (propagated-inputs
     ;; both of these are requires.private in mateweather.pc
     (list libsoup-minimal-2
           libxml2-next))
           libxml2))
    (home-page "https://mate-desktop.org/")
    (synopsis "MATE library for weather information from the Internet")
    (description

M gnu/packages/messaging.scm => gnu/packages/messaging.scm +1 -1
@@ 300,7 300,7 @@ XMPP-based sessions.")
           gtk-doc/stable
           pkg-config))
    (inputs (list libxcrypt ncurses))
    (propagated-inputs (list glib libxml2-next))
    (propagated-inputs (list glib libxml2))
    (synopsis "GLib Ncurses Toolkit")
    (description "GNT is an ncurses toolkit for creating text-mode graphical
user interfaces in a fast and easy way.  It is based on GLib and ncurses.")

M gnu/packages/patches/python-libxml2-utf8.patch => gnu/packages/patches/python-libxml2-utf8.patch +8 -8
@@ 6,18 6,18 @@ that 'itstool' stumbles upon when processing UTF-8 data:
Patch by Jan Matejek
from <https://bugzilla.opensuse.org/show_bug.cgi?id=1065270>.

--- libxml2-2.9.5.orig/python/libxml.c
+++ libxml2-2.9.5/python/libxml.c
@@ -1620,6 +1620,7 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -1499,6 +1499,7 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
     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);
@@ -1636,12 +1637,20 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU
 	    str[999] = 0;
     if (libxml_xmlPythonErrorFuncHandler == NULL) {
         va_start(ap, msg);
@@ -1510,12 +1511,20 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
            str[999] = 0;
         va_end(ap);
 
+#if PY_MAJOR_VERSION >= 3


@@ 32,7 32,7 @@ from <https://bugzilla.opensuse.org/show_bug.cgi?id=1065270>.
-        message = libxml_charPtrConstWrap(str);
+        message = libxml_charPtrConstWrap(ptr);
         PyTuple_SetItem(list, 1, message);
         result = PyEval_CallObject(libxml_xmlPythonErrorFuncHandler, list);
         result = PyObject_CallObject(libxml_xmlPythonErrorFuncHandler, list);
+        /* Forget any errors caused in the error handler. */
+        PyErr_Clear();
         Py_XDECREF(list);

M gnu/packages/rdesktop.scm => gnu/packages/rdesktop.scm +1 -2
@@ 252,8 252,7 @@ of parts of the Windows API.")
                  linux-pam
                  openssl
                  pixman
                  python
                  python-libxml2))
                  python))
    (native-inputs
     (append
       (list bison

M gnu/packages/virtualization.scm => gnu/packages/virtualization.scm +2 -2
@@ 1775,7 1775,7 @@ to integrate other virtualization mechanisms if needed.")
           `(,glib "bin") vala))
    (propagated-inputs
     ;; ‘Required:’ by the installed .pc files.
     (list glib libvirt libxml2-next gobject-introspection))
     (list glib libvirt libxml2 gobject-introspection))
    (home-page "https://libvirt.org")
    (synopsis "GLib wrapper around libvirt")
    (description "libvirt-glib wraps the libvirt library to provide a


@@ 1901,8 1901,8 @@ virtualization library.")
           libosinfo
           libvirt
           libvirt-glib
           libxml2
           python-minimal
           python-libxml2
           python-libvirt
           python-pycairo
           python-pygobject

M gnu/packages/vpn.scm => gnu/packages/vpn.scm +1 -1
@@ 771,7 771,7 @@ the user specifically asks to proxy, so the @dfn{VPN} interface no longer
                                                     "etc/vpnc/vpnc-script")))))
    (native-inputs (list gettext-minimal pkg-config))
    (inputs (list lz4 vpnc-scripts))
    (propagated-inputs (list libxml2-next gnutls zlib))
    (propagated-inputs (list libxml2 gnutls zlib))
    (synopsis "Client for Cisco VPN")
    (description
     "OpenConnect is a client for Cisco's AnyConnect SSL VPN, which is

M gnu/packages/xml.scm => gnu/packages/xml.scm +20 -90
@@ 37,6 37,7 @@
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2024 gemmaro <gemmaro.dev@gmail.com>
;;; Copyright © 2025 Antoine Côté <antoine.cote@posteo.net>
;;; Copyright © 2025 John Kehayias <john.kehayias@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 192,15 193,16 @@ hierarchical form with variable field lengths.")
(define-public libxml2
  (package
    (name "libxml2")
    (version "2.9.14")
    (version "2.14.6")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/libxml2/"
                                 (version-major+minor version)"/libxml2-"
                                 version ".tar.xz"))
             (sha256
              (base32
               "1vnzk33wfms348lgz9pvkq9li7jm44pvm73lbr3w1khwgljlmmv0"))))
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/libxml2/"
                                  (version-major+minor version)"/libxml2-"
                                  version ".tar.xz"))
              (sha256
               (base32
                "0fi0jysncjpvhvp29qcx3bydndapwphgkx7ial5kzf7ymyh5ir3w"))
              (patches (search-patches "python-libxml2-utf8.patch"))))
    (build-system gnu-build-system)
    (outputs '("out" "static" "doc"))
    (arguments


@@ 218,6 220,13 @@ hierarchical form with variable field lengths.")
                                      (string-append "/bin/" file)) "."))
                                  '("config.guess" "config.sub")))))
                 #~())
          (add-before 'configure 'configure-python
            (lambda _
              (substitute* "python/setup.py.in"
                ;; The build system ignores C_INCLUDE_PATH & co, so
                ;; provide the absolute directory name.
                (("/opt/include")
                 (string-append #$output "/include/libxml2")))))
          (add-after 'install 'use-other-outputs
            (lambda _
              (let ((doc (string-append #$output:doc "/share/"))


@@ 245,7 254,7 @@ hierarchical form with variable field lengths.")
    (native-inputs (append (if (target-loongarch64?)
                               (list config)
                               '())
                           (list perl)))
                           (list perl pkg-config python-minimal)))
    (native-search-paths
     (list $SGML_CATALOG_FILES $XML_CATALOG_FILES))
    (search-paths native-search-paths)


@@ 254,58 263,6 @@ hierarchical form with variable field lengths.")
project (but it is usable outside of the Gnome platform).")
    (license license:x11)))

(define-public libxml2-next
  (package
    (inherit libxml2)
    (name "libxml2")
    (version "2.14.5")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/libxml2/"
                                  (version-major+minor version)"/libxml2-"
                                  version ".tar.xz"))
              (sha256
               (base32
                "0jylv2kkyzih710blg24al7b43iaqg6xsfn52qy865knagrhdl03"))))
    (native-inputs (modify-inputs (package-native-inputs libxml2)
                     (append pkg-config
                             python-minimal)))))

(define-public libxml2-next/fixed
  (package
    (inherit libxml2)
    (properties '((hidden? . #t)))
    (name "libxml2")
    (version "2.14.5")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/libxml2/"
                                  (version-major+minor version)"/libxml2-"
                                  version ".tar.xz"))
              (sha256
               (base32
                "0jylv2kkyzih710blg24al7b43iaqg6xsfn52qy865knagrhdl03"))))
    (arguments
     (substitute-keyword-arguments (package-arguments libxml2-next)
       ((#:phases phases #~%standard-phases)
        #~(modify-phases #$phases
            (add-after 'install 'symlink-hardcoded-lib-for-grafts
              (lambda _
                (let ((lib (string-append #$output "/lib/libxml2.so")))
                  ;; XXX: When grafting, we need to reproduce the file paths to
                  ;; the libraries too.
                  (symlink (string-append lib ".16")
                           (string-append lib ".2")))))))))
    (native-inputs (modify-inputs (package-native-inputs libxml2)
                     (append pkg-config
                             python-minimal)))))

(define-public libxml2-next-for-grafting
  (package
    (inherit libxml2)
    (replacement libxml2-next/fixed)
    (properties '((hidden? . #t)))))

(define-public libxml2-xpath0
  (package/inherit libxml2
    (name "libxml2-xpath0")


@@ 320,34 277,7 @@ provides an @code{--xpath0} option to @command{xmllint} that enables it
to output XPath results with a null delimiter.")))

(define-public python-libxml2
  (package/inherit libxml2
    (name "python-libxml2")
    (source (origin
              (inherit (package-source libxml2))
              (patches
                (append (search-patches "python-libxml2-utf8.patch")
                        (origin-patches (package-source libxml2))))))
    (build-system pyproject-build-system)
    (outputs '("out"))
    (arguments
     (list
      ;; XXX: Tests are specified in 'Makefile.am', but not in 'setup.py'.
      #:tests? #f
      #:phases
      #~(modify-phases %standard-phases
          (add-before 'build 'configure
            (lambda* (#:key inputs #:allow-other-keys)
              (chdir "python")
              (let ((libxml2-headers (search-input-directory
                                      inputs "include/libxml2")))
                (substitute* "setup.py"
                  ;; The build system ignores C_INCLUDE_PATH & co, so
                  ;; provide the absolute directory name.
                  (("/opt/include")
                   (dirname libxml2-headers)))))))))
    (native-inputs (list python-setuptools))
    (inputs (list libxml2))
    (synopsis "Python bindings for the libxml2 library")))
  (deprecated-package "python-libxml2" libxml2))

(define-public libxlsxwriter
  (package


@@ 1256,7 1186,7 @@ XSL-T processor.  It also performs any necessary post-processing.")
                "1shk40mpaqaf05skgyxa7qxgcarjd6i1fadn2sk0b8lakfv96bnq"))))
    (build-system gnu-build-system)
    (propagated-inputs                  ; according to xmlsec1.pc
     (list libxml2-next libxslt))
     (list libxml2 libxslt))
    (inputs
     (list gnutls libgcrypt libltdl))
    (native-inputs