Salió de 'yupana frontera' en cuanto nix volvió a correr: kcoreaddons la pide y no había receta.
Es un hueco de RUNTIME, no de build — KDE sella 1037/1037 sin ella, y por eso NINGUNA métrica de
deuda la veía. Sin la base MIME el escritorio no resuelve asociaciones, iconos por tipo ni
'abrir con', y GIO cae a adivinar por extensión.
Va al CORPUS, no a incoming-kde: la necesitan las cuatro imágenes de escritorio, y una receta
resuelve sibling-first y después el catálogo padre, nunca una cola hermana.
Dos cosas que se comprobaron ANTES de construir, no después de que fallaran:
· El tarball de GitLab no trae el submódulo 'xdgmime' — .gitmodules lo declara y el directorio
llega vacío. Leyendo meson.build:26-47 se ve que sólo lo usa la suite de tests y con
required:false, así que con build-tests=false lo único que pasa es un warning.
· 'i18n.merge_file' corre SIEMPRE, no lo gobierna build-translations: no traduce UI, arma el
fichero de datos desde el .in. De ahí el msgfmt, que gettext-tiny sí provee.
'--prefer-static' desde el principio, que es la lección de json-glib de hace un rato: el binario
sale ESTÁTICO con 0 NEEDED y corre en el host.
Y el artefacto trae la mime.cache ya compilada (update-mimedb=true, que upstream trae en false):
sin ella el paquete son datos crudos y alguien tendría que acordarse de correr
update-mime-database al armar cada imagen.
Verificado:
prueba del consumidor update-mime-database genera 157.560 bytes de cache y 26 media-types
binario estático, 0 NEEDED, corre fuera del sandbox
repro REPRODUCE bit a bit (la caché se genera en el build: era candidata)
mirror el tarball subido al Storage Box (ADR 0013)
frontera huecos 4 → 3
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
55 lines
3.5 KiB
TOML
55 lines
3.5 KiB
TOML
# shared-mime-info 2.4 — la base de datos MIME de freedesktop: qué tipo tiene un fichero y con qué
|
|
# se abre. Sin ella el escritorio no resuelve asociaciones, iconos por tipo ni «abrir con», y GIO cae
|
|
# a adivinar por extensión.
|
|
#
|
|
# POR QUÉ AHORA. Salió de `yupana frontera` (2026-09-08) como HUECO real: `kcoreaddons` la pide y no
|
|
# había receta. Es un hueco de RUNTIME, no de build — KDE sella 1037/1037 sin ella, y por eso no la
|
|
# veía ninguna métrica de deuda. Va al CORPUS y no a `incoming-kde` porque la necesitan las cuatro
|
|
# imágenes de escritorio, y una receta resuelve sibling-first y después el catálogo PADRE, nunca una
|
|
# cola hermana (mismo criterio que `xkeyboard-config`).
|
|
#
|
|
# ⚠ EL TARBALL DE GITLAB NO TRAE EL SUBMÓDULO `xdgmime`, y está bien. `.gitmodules` lo declara y el
|
|
# directorio llega VACÍO, pero `meson.build` lo busca con `required: false` y sólo para la suite de
|
|
# tests (`print-mime-data`, `test-mime-data`, `test-mime`). Con `build-tests=false` no se echa en
|
|
# falta: lo único que hace es imprimir un warning. Comprobado leyendo meson.build:26-47 antes de
|
|
# construir, no después de que fallara.
|
|
#
|
|
# `build-translations=false` por la misma razón que json-glib: las traducciones piden un `msgfmt`
|
|
# completo y el corpus sólo tiene gettext-tiny.
|
|
name = "shared-mime-info"
|
|
version = "2.4"
|
|
license = "GPL-2.0-or-later"
|
|
|
|
[source]
|
|
# Archive de GitLab pineado por sha256, como ca-certificates/cairo/libdrm. El pin ES la guarda: si
|
|
# GitLab regenera el tarball con otros bytes, el fetch falla RUIDOSAMENTE en vez de construir otra
|
|
# cosa. El blob va al mirror (ADR 0013) para que un upstream caído no deje la receta irreconstruible.
|
|
tarball = "https://gitlab.freedesktop.org/xdg/shared-mime-info/-/archive/2.4/shared-mime-info-2.4.tar.bz2"
|
|
sha256 = "32dc32ae39ff1c1bf8434dd3b36770b48538a1772bc0298509d034f057005992"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
|
|
[build.phases]
|
|
# `--prefer-static` NO es redundante con link=static: gobierna con qué se enlazan los EJECUTABLES
|
|
# (acá `update-mime-database`), que es justo lo que se le escapaba a json-glib — declaraba estático
|
|
# y salía dinámico contra `libc.so`, o sea un binario que no corre fuera del sandbox.
|
|
# `update-mimedb=true` (upstream lo trae en false) para que el ARTEFACTO traiga la `mime.cache` ya
|
|
# compilada. Sin ella el paquete son datos crudos: GIO y KDE leen `mime.cache`, no el XML, y alguien
|
|
# tendría que acordarse de correr `update-mime-database` al armar cada imagen. Medido: la caché son
|
|
# ~157 KB y 26 directorios de media-type generados desde el XML que instala esta misma receta.
|
|
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload --prefer-static -Dbuild-tests=false -Dbuild-translations=false -Dupdate-mimedb=true"
|
|
compile = "ninja -C output"
|
|
install = "DESTDIR=/out meson install -C output --no-rebuild"
|
|
|
|
[deps]
|
|
# `libffi`/`pcre2`/`zlib` son la clausura de pkg-config que declara el `.pc` de glib en
|
|
# `Requires.private` — sin ellas el link estático muere buscando símbolos de glib.
|
|
# `gettext-tiny` por su `msgfmt`: `data/meson.build` usa `i18n.merge_file` para generar
|
|
# `freedesktop.org.xml` desde el `.in`, y eso NO lo gobierna `build-translations` — corre siempre,
|
|
# porque no traduce cadenas de UI sino que arma el fichero de datos. Sin msgfmt el configure muere
|
|
# con «Program 'msgfmt' not found» aunque las traducciones estén apagadas.
|
|
build = ["meson", "samurai", "python3", "pkgconf", "libxml2", "glib", "libffi", "pcre2", "zlib", "gettext-tiny"]
|