Commit57076620Recorded30 Jul 2026Repositorycore-channel

Add libxml2, sqlite, and tree-sitter for the Emacs feature set

Message

These are the leaf dependencies behind Emacs' shr/eww rendering, its built-in sqlite- functions, and the -ts-mode major modes. None has a package dependency, so all three land in one publish level.

tree-sitter is the first definition here that does not fit the configure/make/install shape: it ships no configure script, only a Makefile driven by PREFIX and DESTDIR. Omitting the configure phase and passing PREFIX=/out to the other two works, but only because that Makefile happens to accept the variables the phase model already sets. The module header records that, since plain-Makefile is not exotic.

jansson is deliberately absent. Emacs 30.2 does not use it: zero references in configure.ac or configure, no --with-json, and JSON is in-tree at src/json.c with DEFUN ("json-serialize", ...). Guix's dependency list for emacs-no-x carries it vestigially. Checked rather than inherited, with a positive control -- the same grep finds 15 to 33 references to each dependency Emacs really does have.

Executed all three: sqlite runs a real query and the JSON1 extension, xmllint resolves XPath over HTML and XML and rejects malformed input, and tree-sitter drives its parser API through both the static and the shared library.

Changed
 channel.catalogue.sgl                                                        |  5 ++++-
 channel.catalogue.sgl.minisig                                                |  6 +++---
 channel.sgl                                                                  |  6 ++++++
 objects/39a80e18e85b9f228b147d47a3243c0276f639e30f72d841320abbeedc28900a.sgl |  1 +
 objects/870ba86f60d2a5663ebf7208e9d7335ace0f824d7491b82c4eaedcb2be1655e7.sgl |  1 +
 objects/cc4c7518170d4f5db3c72025a429c57c83e8d07244c06f922a0e2af3ffd9120c.sgl |  1 +
 snapshot.sgl                                                                 |  4 ++--
 snapshot.sgl.minisig                                                         |  6 +++---
 src/core/packages/databases.sgl                                              | 30 ++++++++++++++++++++++++++++++
 src/core/packages/parsing.sgl                                                | 37 +++++++++++++++++++++++++++++++++++++
 src/core/packages/xml.sgl                                                    | 34 ++++++++++++++++++++++++++++++++++
 11 files changed, 122 insertions(+), 9 deletions(-)
Diff
channel.catalogue.sglmodified
@@ -1,5 +1,8 @@
1
(catalogue schema: 1 sequence: 3 snapshot: "core-stable@3:sha256:92696415c49351450ff4601de0174e9222d91214049da93ef79343510d7d703d" channel-source: "sha256:59da1bbefc5232c2120d6221ad0d68ceaba412ee6c0a811189f2c13aea715276" content-hash: "sha256:4f3f6b668ad29865842c3c34557dd40eac9c82e9ecb874bbee7dee6596d1eda3")
+1
(catalogue schema: 1 sequence: 4 snapshot: "core-stable@4:sha256:ea46962821ceb61bc8f331ee0eca5a4fd1db6650403ed2ba00e1c7352269e858" channel-source: "sha256:5db8e61c4c7e38a53a1d32bd0f73b9aa0b6cc372706586e6711b7a7e0daa303c" content-hash: "sha256:87d970255f4ce1cd9c93a4064cd6e2da80f8f46fbc3f7400e20b9dd1aaa2b784")
2
(binding name: "core/binaryen" package: "sha256:014baf016eec17892f30a30847b070ffb09e397182d2ef50eda2ceb3fded2a58")
+3
(binding name: "core/libxml2" package: "sha256:cc4c7518170d4f5db3c72025a429c57c83e8d07244c06f922a0e2af3ffd9120c")
4
(binding name: "core/ncurses" package: "sha256:e803a7f68e4a55eac49be30b3dc84855749037be91aa48ec7315f73dd5c0d1b3")
+5
(binding name: "core/sqlite" package: "sha256:39a80e18e85b9f228b147d47a3243c0276f639e30f72d841320abbeedc28900a")
+6
(binding name: "core/tree-sitter" package: "sha256:870ba86f60d2a5663ebf7208e9d7335ace0f824d7491b82c4eaedcb2be1655e7")
7
(binding name: "core/vim" package: "sha256:ef59035716fe957378c12680f11c954a9eb93202214cfb2efd86fb0f94c7abc3")
8
(binding name: "core/zlib" package: "sha256:4b55a7c1959668ea8fd26c702350a1640deb4d360bc6877f14985da587552ca7")
channel.catalogue.sgl.minisigmodified
@@ -1,4 +1,4 @@
1
untrusted comment: signature from minisign secret key
2
RUQ0HOFEHrNeRK+KIRrAOzVy4tWZ3NTdzxE930nKR98cPCkTmI/R3clWQXh4d1Q6GTJzlLiKdtzqWKo6AbjYKxL4/bXLVcm0jQs=
3
trusted comment: registry=pkg.usesigil.org path=/v1/channels/core-stable/channel.catalogue.sgl seq=506 ts=2026-07-30T18:50:00Z
4
8brhT9ENX6zPYbh31yWj+6LFWSc6hU+vn6vJ2qkbfE5oiCzLrCBa2L4ou0RRb1z+DJ+3BF4ICHBQqrfB9KGsAw==
+2
RUQ0HOFEHrNeRIL6qFa743en5litQy9WITcI7UTehPi1tbwuxJ6YzcpNWhBY6b9lKMK9TsHQ2z4Jg2AfD82SmMrMVZEXkQcpLgA=
+3
trusted comment: registry=pkg.usesigil.org path=/v1/channels/core-stable/channel.catalogue.sgl seq=508 ts=2026-07-30T19:20:00Z
+4
+p0luUXsem4c8uQOiUSClYPdIemnFULg3xgoLhPYSRhA0R+mnqdQ0Q6/BxXsChdw46h6wLbLNUl0J70VvvpODQ==
channel.sglmodified
@@ -1,6 +1,9 @@
1
(import (core packages wasm)
2
(core packages compression)
3
(core packages terminal)
+4
(core packages xml)
+5
(core packages databases)
+6
(core packages parsing)
7
(core packages editors))
8
9
(channel
@@ -9,4 +12,7 @@
12
(channel-binding name: "core/binaryen" value: binaryen)
13
(channel-binding name: "core/zlib" value: zlib)
14
(channel-binding name: "core/ncurses" value: ncurses)
+15
(channel-binding name: "core/libxml2" value: libxml2)
+16
(channel-binding name: "core/sqlite" value: sqlite)
+17
(channel-binding name: "core/tree-sitter" value: tree-sitter)
18
(channel-binding name: "core/vim" value: vim)))
objects/39a80e18e85b9f228b147d47a3243c0276f639e30f72d841320abbeedc28900a.sgladded
@@ -0,0 +1 @@
+1
(package-v1 name: "sqlite" version: "3.46.1" source: (source location: "https://www.sqlite.org/2024/sqlite-autoconf-3460100.tar.gz" sha256: "67d3fe6d268e6eaddcae3727fce58fcc8e9c53869bdd07a0c61e38ddf2965071") buildenv: "894ca74bdb03c25d79f00ce915bbe25c56eba192334963c69e1846e6c84526cb" dependencies: () phases: ((phase kind: configure args: ("--prefix=/out" "--disable-shared" "--enable-static" "--disable-readline") patches: ()) (phase kind: make args: () patches: ()) (phase kind: install args: () patches: ())) divergences: ())
objects/870ba86f60d2a5663ebf7208e9d7335ace0f824d7491b82c4eaedcb2be1655e7.sgladded
@@ -0,0 +1 @@
+1
(package-v1 name: "tree-sitter" version: "0.24.7" source: (source location: "https://github.com/tree-sitter/tree-sitter/archive/refs/tags/v0.24.7.tar.gz" sha256: "7cbc13c974d6abe978cafc9da12d1e79e07e365c42af75e43ec1b5cdc03ed447") buildenv: "894ca74bdb03c25d79f00ce915bbe25c56eba192334963c69e1846e6c84526cb" dependencies: () phases: ((phase kind: make args: ("PREFIX=/out") patches: ()) (phase kind: install args: ("PREFIX=/out") patches: ())) divergences: ())
objects/cc4c7518170d4f5db3c72025a429c57c83e8d07244c06f922a0e2af3ffd9120c.sgladded
@@ -0,0 +1 @@
+1
(package-v1 name: "libxml2" version: "2.13.5" source: (source location: "https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.5.tar.xz" sha256: "74fc163217a3964257d3be39af943e08861263c4231f9ef5b496b6f6d4c7b2b6") buildenv: "894ca74bdb03c25d79f00ce915bbe25c56eba192334963c69e1846e6c84526cb" dependencies: () phases: ((phase kind: configure args: ("--prefix=/out" "--disable-shared" "--enable-static" "--without-python" "--without-lzma" "--without-zlib" "--without-http" "--without-modules") patches: ()) (phase kind: make args: () patches: ()) (phase kind: install args: () patches: ())) divergences: ())
snapshot.sglmodified
@@ -1,3 +1,3 @@
1
(snapshot schema: 1 id: "core-stable" sequence: 3 content-hash: "sha256:92696415c49351450ff4601de0174e9222d91214049da93ef79343510d7d703d")
+1
(snapshot schema: 1 id: "core-stable" sequence: 4 content-hash: "sha256:ea46962821ceb61bc8f331ee0eca5a4fd1db6650403ed2ba00e1c7352269e858")
2
(toolchain id: "toolchain/zig" version: "0.16.0" recipe: "sha256:5bc02f4c7abc6055b1f5fc37c57c4b063c18f9e3431ba2cab0cc9f30f313e33b" output: "sha256:70e49664a74374b48b51e6f3fdfbf437f6395d42509050588bd49abe52ba3d00")
3
(pkg id: "core/packages/wasm" version: "0.1.0" recipe: "sha256:59da1bbefc5232c2120d6221ad0d68ceaba412ee6c0a811189f2c13aea715276")
+3
(pkg id: "core/packages/wasm" version: "0.1.0" recipe: "sha256:5db8e61c4c7e38a53a1d32bd0f73b9aa0b6cc372706586e6711b7a7e0daa303c")
snapshot.sgl.minisigmodified
@@ -1,4 +1,4 @@
1
untrusted comment: signature from minisign secret key
2
RUQ0HOFEHrNeRBREnMSDSO/Eao4V+Tz5+fP5UCRar+N3qaBVE43W38YDJ/UE4bIBPUv7ttrvdLIsKgSbNqB0yFjAbzdWdhSMwQU=
3
trusted comment: registry=pkg.usesigil.org path=/v1/channels/core-stable/snapshot.sgl seq=505 ts=2026-07-30T18:50:00Z
4
oH/APIz7o8tthwf3+SV/1rRvNPcOKbvDI2bziRleWSEsoWevYSLRyRFoSrP3Glk1l/zDgZWw8t+DvhxyFGfADA==
+2
RUQ0HOFEHrNeRF9tOsiMdGpoFALsMi3+nIEREAcx885kaQmhwDAg2XDAHxM9PYJPzT5R0N+lQ9yeBqrvOLJ4YIFfTxvH9RcPjAk=
+3
trusted comment: registry=pkg.usesigil.org path=/v1/channels/core-stable/snapshot.sgl seq=507 ts=2026-07-30T19:20:00Z
+4
sybTz3/5QuEO+2YR1ETBbFjGm2goUuUQV0Hao9UNajzeWbrdNBpP90De+IBdgNEMBAR9JKHXj6aBzkFk8kVvAw==
src/core/packages/databases.sgladded
@@ -0,0 +1,30 @@
+1
;;; Embedded databases.
+2
;;;
+3
;;; sqlite backs Emacs' built-in `sqlite-*` functions, which org-roam, forge and
+4
;;; friends build on. The `sqlite-autoconf` distribution is used rather than
+5
;;; the raw source tree because it is the one that ships a `configure` script;
+6
;;; the phase model here can only run `./configure`.
+7
(define-library (core packages databases)
+8
(import (sigil core)
+9
(core build-environments)
+10
(sigil env package)
+11
(sigil build external))
+12
(export sqlite)
+13
(begin
+14
(define sqlite
+15
(package
+16
name: "sqlite"
+17
version: "3.46.1"
+18
source: (external-source
+19
location: "https://www.sqlite.org/2024/sqlite-autoconf-3460100.tar.gz"
+20
sha256: "67d3fe6d268e6eaddcae3727fce58fcc8e9c53869bdd07a0c61e38ddf2965071")
+21
buildenv: core-buildenv
+22
phases: (list
+23
(external-phase
+24
kind: 'configure
+25
args: (list "--prefix=/out"
+26
"--disable-shared"
+27
"--enable-static"
+28
"--disable-readline"))
+29
(external-phase kind: 'make)
+30
(external-phase kind: 'install))))))
src/core/packages/parsing.sgladded
@@ -0,0 +1,37 @@
+1
;;; Incremental parsing.
+2
;;;
+3
;;; tree-sitter is what the `*-ts-mode` major modes in Emacs 29+ are built on.
+4
;;;
+5
;;; NOTE FOR ANYONE ADDING A PACKAGE: this is the first definition in the
+6
;;; channel that does not fit the configure/make/install shape the phase model
+7
;;; assumes. tree-sitter ships **no configure script** -- it is a plain
+8
;;; Makefile driven by `PREFIX`/`DESTDIR` -- so the `configure` phase is simply
+9
;;; omitted and `PREFIX=/out` is passed to both remaining phases. The builder
+10
;;; rewrites the literal `/out` in phase arguments to the real store prefix, and
+11
;;; a command-line assignment overrides the Makefile's `PREFIX ?= /usr/local`.
+12
;;;
+13
;;; This works, but only because tree-sitter's Makefile happens to accept the
+14
;;; two variables the model already passes. A package needing an `autoreconf`,
+15
;;; a CMake configure step, or any per-package environment variable has no
+16
;;; expression in this model at all; see (core packages compilers) for the case
+17
;;; where that becomes fatal.
+18
(define-library (core packages parsing)
+19
(import (sigil core)
+20
(core build-environments)
+21
(sigil env package)
+22
(sigil build external))
+23
(export tree-sitter)
+24
(begin
+25
(define tree-sitter
+26
(package
+27
name: "tree-sitter"
+28
version: "0.24.7"
+29
source: (external-source
+30
location: "https://github.com/tree-sitter/tree-sitter/archive/refs/tags/v0.24.7.tar.gz"
+31
sha256: "7cbc13c974d6abe978cafc9da12d1e79e07e365c42af75e43ec1b5cdc03ed447")
+32
buildenv: core-buildenv
+33
phases: (list
+34
;; PREFIX is needed at build time too: `tree-sitter.pc` is
+35
;; generated by the `all` target with the prefix baked in.
+36
(external-phase kind: 'make args: (list "PREFIX=/out"))
+37
(external-phase kind: 'install args: (list "PREFIX=/out")))))))
src/core/packages/xml.sgladded
@@ -0,0 +1,34 @@
+1
;;; XML and HTML parsing.
+2
;;;
+3
;;; libxml2 is what gives Emacs `libxml-parse-html-region`, and therefore shr
+4
;;; and eww. Built static and deliberately narrow: no Python bindings, no
+5
;;; loadable modules, and no HTTP client, because Emacs uses libxml2 purely as
+6
;;; a parser and its network stack is its own.
+7
(define-library (core packages xml)
+8
(import (sigil core)
+9
(core build-environments)
+10
(sigil env package)
+11
(sigil build external))
+12
(export libxml2)
+13
(begin
+14
(define libxml2
+15
(package
+16
name: "libxml2"
+17
version: "2.13.5"
+18
source: (external-source
+19
location: "https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.5.tar.xz"
+20
sha256: "74fc163217a3964257d3be39af943e08861263c4231f9ef5b496b6f6d4c7b2b6")
+21
buildenv: core-buildenv
+22
phases: (list
+23
(external-phase
+24
kind: 'configure
+25
args: (list "--prefix=/out"
+26
"--disable-shared"
+27
"--enable-static"
+28
"--without-python"
+29
"--without-lzma"
+30
"--without-zlib"
+31
"--without-http"
+32
"--without-modules"))
+33
(external-phase kind: 'make)
+34
(external-phase kind: 'install))))))