sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
tinysparql: el artefacto sellaba en VERDE sin los enlaces del nombre viejo
1# tinysparql 3.9.2 — el motor SPARQL que antes se llamaba Tracker. Es dep DURA de nautilus:
2# `meson.build:129` pide `dependency('tracker-sparql-3.0')` a secas, sin `required: false`.
3#
4# ── EL NOMBRE CAMBIÓ Y EL `.pc` NO: verificado en la fuente, no supuesto ────────────────────────
5# El proyecto se renombró Tracker → TinySPARQL, y la duda razonable es si nautilus 48 (que sigue
6# pidiendo `tracker-sparql-3.0`) encuentra a un paquete que se llama distinto. Lo encuentra, porque
7# esta versión publica LOS DOS nombres desde el mismo `pkgconfig.generate`:
8#
9# src/libtinysparql/meson.build:146 name: 'tinysparql-3.0',
10# src/libtinysparql/meson.build:155 name: 'tracker-sparql-3.0',
11#
12# ── QUÉ COMPRA, y qué NO — para no vender búsqueda que no hay ───────────────────────────────────
13# Esto es la LIBRERÍA y el almacén: la base de datos SPARQL sobre sqlite y la API con la que
14# nautilus consulta. **No es el indexador.** Quien recorre el disco y puebla el índice es
15# `localsearch` (el ex `tracker-miners`), que NO está en el catálogo y que esta tanda no trae.
16#
17# ⇒ Con esto, nautilus construye y su búsqueda cae en `NautilusSearchEngineSimple`, que enumera
18# directorios a mano: encuentra por NOMBRE y sólo donde mira, sin contenido y sin índice. Es una
19# búsqueda de verdad, más lenta y más ciega. La alternativa era declarar `localsearch` ahora y
20# arrastrar gexiv2 + gstreamer + poppler detrás de una app que todavía no existía. Queda escrito
21# acá para que «falta el indexador» sea una frase que alguien pueda leer, y no un misterio de por
22# qué buscar dentro de un PDF no devuelve nada.
23#
24# ── LAS PERILLAS, con lo que cada una evita ─────────────────────────────────────────────────────
25# -Dintrospection=disabled (default `enabled`) → g-i; el consumidor de hoy (nautilus) es C.
26# -Dvapi=disabled (default `enabled`) → `valac`, que NO existe en el catálogo. Sin esta
27# línea el configure aborta: es la que de verdad bloquea, no un ahorro.
28# -Dman=false (default `true`) → `a2x`/asciidoc (`meson.build:81`).
29# -Ddocs=false (default `true`) → gi-docgen.
30# -Dtests=false (default `true`) → el módulo Python `gi` en el sandbox (:86).
31# -Dstemmer=disabled → `libstemmer`: lematización al indexar. No está en el catálogo, y sin
32# indexador propio todavía no tiene a quién servir.
33# -Davahi=disabled → descubrimiento de endpoints SPARQL en la red local. Es la misma
34# `avahi` que gvfs apaga en esta tanda; el día que entre, son dos líneas.
35# -Dbash_completion=false -Dsystemd_user_services=false → ficheros que esta distro no consume
36# (no hay systemd; ver ADR 0007).
37# -Dunicode_support=icu → EXPLÍCITO y no `auto`. `meson.build:240` elige icu si la encuentra y
38# si no cae a `libunistring`; con `auto`, el artefacto dependería de qué
39# haya en el sysroot. `icu4c` ya está sellada y trae 18 `.so`.
40#
41# ⚠ `sqlite-shared` y no `sqlite`: `libsqlite3.a` de la canónica NO es PIC (5952 reubicaciones
42# `R_X86_64_32` fuera de `.debug`, medido) y esto produce `libtinysparql-3.0.so`. Mismo caso que
43# libarchive en `gnome-autoar`.
44#
45# ⚠ EL SEGUNDO `sed` (`-type f,l`) ARREGLA UN ARTEFACTO QUE SELLABA INCOMPLETO EN VERDE ──────────
46# `src/libtinysparql/symlink-libtracker-sparql.sh` crea los enlaces de compatibilidad con el nombre
47# viejo (`libtracker-sparql-3.0.so*` → `libtinysparql-3.0.so*`), para quien enlace
48# `-ltracker-sparql-3.0` sin pasar por pkg-config. Su `find … -type f,l` es sintaxis de GNU find
49# 4.5.12+, y el `find` del sandbox es el de busybox. Medido en la primera corrida:
50#
51# find: invalid argument 'f,l' to '-type' ← y la receta selló con rc=0 igual
52#
53# El script no comprueba el `find`, así que el bucle no itera, no hay enlaces, y **nada falla**:
54# `ls usr/lib` daba `libtinysparql-3.0.so{,.0,.0.902.0}` y ni un `libtracker-sparql`. Es la forma
55# exacta que el repo ya tiene nombrada —un ausente falla ruidoso, un incompleto llega al final
56# diciendo que todo fue bien— y por eso se arregla acá en vez de anotarse.
57# `\( -type f -o -type l \)` es POSIX y lo entienden los dos `find`.
58# ⚠ Esto NO lo destapó nautilus: nautilus enlaza `-ltinysparql-3.0` porque `tracker-sparql-3.0.pc`
59# trae `Requires: tinysparql-3.0` y `Libs: -lm -ldl`. O sea que el hueco habría viajado entero y sin
60# síntoma hasta el primer consumidor del nombre viejo.
61#
62# ⚠ EL `sed` DEL `ar`: es la mina conocida de `gettext-tiny`, no una manía. Su `msgfmt` revienta con
63# SIGILL ante un mensaje de SEIS formas plurales y deja un `.mo` de 0 bytes
64# ([[gettext-tiny-msgfmt-plural-arabe]]). Medido en ESTE tarball: `po/ar.po` trae **7** `msgstr[5]`.
65# Cuesta la traducción al árabe de esta pieza; el arreglo de verdad es autorar el gettext de GNU, que
66# es una campaña (108 recetas lo declaran) y no se hace de paso.
67name = "tinysparql"
68version = "3.9.2"
69license = "GPL-2.0-or-later AND LGPL-2.1-or-later"
70
71[source]
72tarball = "https://download.gnome.org/sources/tinysparql/3.9/tinysparql-3.9.2.tar.xz"
73sha256 = "14ce039024135e181022bcce4b1aad2e00377dd9c7d812b98391ccfc756dad8e"
74
75[build]
76compiler = "zig-cc"
77target = "x86_64-linux-musl"
78link = "dynamic"
79
80[build.phases]
81configure = "sed -i '/^ar$/d' po/LINGUAS && sed -i 's/-type f,l/\\\\( -type f -o -type l \\\\)/' src/libtinysparql/symlink-libtracker-sparql.sh && PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddefault_library=shared -Dintrospection=disabled -Dvapi=disabled -Dman=false -Ddocs=false -Dtests=false -Dstemmer=disabled -Davahi=disabled -Dbash_completion=false -Dsystemd_user_services=false -Dunicode_support=icu -Dc_args=-Wno-error=date-time"
82compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
83install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
84
85[deps]
86# `libsoup` es OBLIGATORIA acá, no opcional: `meson.build:63` la pide con `required: true` (sirve el
87# endpoint SPARQL sobre HTTP). Va con su cierre — libpsl, nghttp2, sqlite-shared, icu4c, zlib-shared.
88# `dbus` entra por el `.pc`: tinysparql lee de él dónde van los servicios de sesión.
89build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "json-glib", "libxml2-shared", "sqlite-shared", "icu4c", "dbus", "libsoup", "libpsl", "nghttp2", "zlib-shared", "libffi", "pcre2"]