Files
SergioandClaude Opus 5 e2bcd96feb apps: swayimg sube a 5.5, que es lo que justificaba escribir luajit
Entró como 4.7 —la última sin Lua— sólo porque no había receta de luajit. Con luajit
sellada, sube a la actual. Lo que se gana: el motor de configuración pasó a ser Lua
(src/luaengine.cpp), y con él los perfiles de teclas y el .lua de ejemplo. Formatos:
suma qoi, ttf y xbm a los de 4.7.

Dos cambios de forma que sacan dos deps: `compositor` ya no pide json-c (la
integración con sway se rehizo sin JSON) y la man page viene PRE-GENERADA en
extra/swayimg.1 en vez de armarse con scdoc. -Ddoc=false porque ese target regenera
markdown con dos scripts de Python y lo que instala son .md, no páginas de manual.

Corregido de paso el comentario de las opciones apagadas: son DOS por cola, no una.
`svg` pide librsvg-2.0 (sólo en incoming-gnome) y `exif` pide exiv2 (sólo en
incoming-kde). Las dos existen en el disco y ninguna es alcanzable desde el corpus.
Por eso este visor no muestra metadatos EXIF, y queda escrito dónde está el hueco.

Evidencia de que la cadena cierra, no sólo de que sella: `swayimg -e` ejecuta Lua
dentro del visor y reporta «Lua 5.1 · jit=true · LuaJIT 2.1.1787165859» — que es
exactamente el relver de nuestra receta de luajit, o sea que el intérprete que corre
es el que construimos. Un script con error de sintaxis se reporta como error de Lua.
NEEDED sigue siendo sólo libc.so.

Los cinco grafos quedan en N/N con cero deuda.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XB2iEmxeLZgzqNfhWChrLo
2026-09-03 11:37:02 +00:00

91 lines
6.4 KiB
TOML

# swayimg 4.7 — visor de imágenes Wayland-nativo, para las CUATRO imágenes.
#
# ══ POR QUÉ ESTA Y NO `imv`, QUE ERA LA QUE DECÍA EL PLAN ══════════════════════════════════════
# `docs/plan-apps-usuario-final.md` proponía `imv` como paso 4 —«7 faltantes, todos cargadores de
# formato opcionales, sin muros»—. Al ir a escribirla, la medición dijo otra cosa:
#
# imv/src/canvas.c hace `#include <GL/gl.h>` y dibuja con `glBegin`/`glOrtho`/`GL_TRIANGLE_FAN`,
# o sea OpenGL de FUNCIÓN FIJA (perfil de compatibilidad). Su meson pide `dependency('gl')` y,
# si falta, `dependency('opengl')` SIN `required:false` ⇒ configure muere.
#
# Y esta distro **no tiene ningún proveedor de OpenGL de escritorio**. Medido en los artefactos, no
# supuesto: las TRES variantes de mesa (`mesa`, `mesa-swrast`, `mesa-llvmpipe`) van
# `-Dglx=disabled -Dglvnd=false` ⇒ publican `libEGL.so.1` y `libGLESv2.so.2` y **ni `libGL.so*` ni
# `gl.pc` ni `opengl.pc`**; no hay receta `libglvnd` en ninguna cola. La trampa fina es que mesa SÍ
# instala `/usr/include/GL/gl.h` ⇒ una app así compila y muere recién al LIGAR.
# El muro está anotado en el plan; darlo vuelta es cambiar mesa (radio 139) + autorar libglvnd, o
# sea una decisión de distro, no un ticket de visor de imágenes.
#
# swayimg cubre exactamente el mismo caso de uso **sin GL**: rasteriza a un buffer y lo entrega por
# `wl_shm`. Encaja con la distro en vez de pelearse con ella, y de yapa trae backend **DRM**, que
# muestra imágenes en una TTY pelada sin compositor.
#
# ══ 5.5, DESPUÉS DE ESCRIBIR `luajit` ══════════════════════════════════════════════════════════
# Entró primero como 4.7 —la última sin Lua— porque desde la 5.0 `dependency('luajit')` es
# OBLIGATORIA y no había receta; la `lua5.2` del OSC de mpv no sirve, es otra ABI (LuaJIT es Lua 5.1
# + FFI + JIT). Se escribió `luajit` el mismo día y esto subió a 5.5. Lo que se gana: el motor de
# configuración pasó a ser Lua (`src/luaengine.cpp`), y con él los perfiles de teclas y el `.lua` de
# ejemplo que se instala con `-Dluameta=true`.
# Dos cambios de forma respecto de la 4.7: `compositor` ya NO pide `json-c` (la integración con sway
# se rehizo sin JSON), y la man page viene PRE-GENERADA en `extra/swayimg.1` en vez de armarse con
# scdoc ⇒ las dos deps se fueron de `[deps]`. `-Ddoc=false` porque ese target regenera markdown con
# dos scripts de Python y lo que instala son `.md`, no páginas de manual.
#
# ══ `-Dversion=5.5` NO ES COSMÉTICO ════════════════════════════════════════════════════════════
# Su default es la cadena `0.0.0`, y meson.build:19-31 la interpreta como «averiguala vos»: corre
# `git describe --tags --long --always --dirty` sobre el árbol. O sea que **la versión estampada
# DENTRO del binario dependería del estado del checkout** (si hay `.git`, si trajo los tags, si
# quedó sucio) y dos builds del mismo commit podrían dar bytes distintos. Misma familia que el
# `-Dbuild-date` de mpv: la perilla que se busca en toda app nueva.
#
# ══ OPCIONES TODAS EXPLÍCITAS ══════════════════════════════════════════════════════════════════
# Las doce de formato nacen `auto`, o sea que miran el sandbox y se prenden con lo que encuentren:
# el artefacto pasaría a depender de qué otra cosa quedó montada en el lab. Se enumeran una por una.
# ENCENDIDAS (la dep ya está en el corpus): jpeg, png, tiff, webp, gif, y `compositor` (json-c, es
# la integración por IPC con sway).
# APAGADAS por falta de receta: exr, heif, avif, jp2, jxl, sixel, raw, bash.
# APAGADAS POR COLA — y son dos, no una: `svg` pide `librsvg-2.0`, que vive sólo en
# `incoming-gnome`, y `exif` pide `exiv2`, que vive sólo en `incoming-kde`. Las dos EXISTEN en el
# disco y ninguna es alcanzable desde el corpus: una receta resuelve sibling-first y después el
# catálogo padre, nunca una cola hermana. Es el mismo hueco que dejó mudo a wf-recorder, y es la
# razón por la que este visor no muestra metadatos EXIF.
#
# `-Dprefer_static=true` como mpv: fontconfig, freetype, libpng, libjpeg, libtiff, libwebp, expat y
# json-c son `.a` en el corpus, y sin esta perilla meson resuelve los `.pc` sin `Libs.private` y el
# link muere con símbolos de expat «en libfontconfig.a», culpando a fontconfig. `link=dynamic`
# porque wayland, libxkbcommon, libdrm y zstd sí publican `.so`.
#
# Fuente por commit git (ADR 0006): `v5.5` es un tag LIVIANO ⇒ éste es su commit.
name = "swayimg"
version = "5.5"
license = "MIT"
[source]
repo = "https://github.com/artemsen/swayimg.git"
commit = "682fecf358c0a2da1f98422b6a013dc822c74c5b"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
flags = []
[build.phases]
configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Dprefer_static=true -Dversion=5.5 -Dwayland=enabled -Ddrm=enabled -Dcompositor=enabled -Djp2=disabled -Djpeg=enabled -Dpng=enabled -Dtiff=enabled -Dwebp=enabled -Dgif=enabled -Dexr=disabled -Dheif=disabled -Davif=disabled -Djxl=disabled -Dsvg=disabled -Dsixel=disabled -Draw=disabled -Dexif=disabled -Dbash=disabled -Dzsh=disabled -Ddesktop=true -Dman=true -Dlicense=true -Ddoc=false -Dluameta=true -Dtests=disabled"
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
# `.pc Requires` → `[deps].build`, el patrón del corpus: fontconfig pide expat, freetype2 pide zlib
# y libpng, wayland-client pide libffi, libtiff-4 pide zlib+xz+zstd+libjpeg, libwebpdemux pide
# libsharpyuv (viene en el mismo artefacto). `wayland` aporta además el `wayland-scanner` nativo que
# teje los NUEVE protocolos.
[deps]
build = [
"meson", "samurai", "python3", "pkgconf", "linux-headers",
"luajit",
"wayland", "wayland-protocols", "libxkbcommon", "libdrm",
"fontconfig", "freetype", "expat",
"libjpeg-turbo", "libpng", "libtiff", "libwebp", "giflib",
"zlib", "zlib-shared", "xz", "zstd", "libffi",
]