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
This commit is contained in:
John Kehayias 2025-09-11 16:51:08 -04:00 committed by Maxim Cournoyer
parent 3f6ac45d1e
commit 502e5d335c
No known key found for this signature in database
GPG key ID: 1260E46482E63562
18 changed files with 63 additions and 136 deletions

View file

@ -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")

View file

@ -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")

View file

@ -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

View file

@ -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/")

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

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

View file

@ -816,7 +816,7 @@ the OpenCV-Python library.")
libpng
(librsvg-for-system)
libtiff
libxml2-next
libxml2
libwebp
matio
openexr

View file

@ -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")

View file

@ -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

View file

@ -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.")

View file

@ -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);

View file

@ -252,8 +252,7 @@ of parts of the Windows API.")
linux-pam
openssl
pixman
python
python-libxml2))
python))
(native-inputs
(append
(list bison

View file

@ -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

View file

@ -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

View file

@ -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