# 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 ` 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", ]