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