gioser

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…

TOML 1373Shell 116Rust 74Markdown 641915 Sutichaykuna

⎇ 26c153c149c81663140768bfda7dafb19c010e4f recipes/swayimg.toml TOML · 90 siq'ikuna · 6.4 KB Ñawpa willay ch'uya

apps: swayimg sube a 5.5, que es lo que justificaba escribir luajit e2bcd96fe · Sergio ·

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