b3:b8f3baf0, selló a la primera. Arranca desde cosmic-start ("wireplumber OK (pid
192) — hay gestor de sesión"), se conecta al grafo (dos clientes en wpctl status) y
wpctl pasa a mostrar una sección Video que antes no existía.
Y el Start de ScreenCast SIGUE sin Response a los 60s. Mismo resultado exacto.
LA HIPÓTESIS QUEDA MATADA POR MEDICIÓN. "Falta el gestor de sesión que mueva el nodo
de Paused a Streaming" era mía y era razonable; no era cierta. Queda escrita junto a
su refutación porque una hipótesis descartada CON EVIDENCIA vale más que una lista de
sospechosos: acota el próximo paso a lo que queda, que es el backend mismo.
El dato nuevo, que es por dónde seguir: con wireplumber corriendo, `wpctl status`
lista `Video → Streams` VACÍO durante el handshake. O sea que el nodo
`cosmic-screencast` que SÍ existe en `pw-cli ls Node` no llega a wireplumber como
stream gestionado. Próximo movimiento: RUST_LOG=trace sobre screencast_thread, no
otra dep.
── por qué receta propia y no la de GNOME ──────────────────────────────────────
La de incoming-gnome funciona pero NEEDea libglib/libgobject/libpipewire de la ISLA
DINÁMICA de GNOME: traerla metería una segunda glib y una segunda pipewire en la
imagen. De 19 deps, 14 dan hash idéntico; las que divergen divergen a propósito —
sobre todo `pipewire`, que acá apunta a la de COSMIC (338d1d8c), la que el escritorio
realmente ARRANCA. Un gestor de sesión contra otra pipewire que la que corre no
gestiona nada.
El cambio de fondo es glib → glib-shared. COSMIC usa la glib ESTÁTICA del corpus, que
le alcanza al portal porque es un ejecutable. Acá no: wireplumber produce un .so y 17
módulos, y libglib-2.0.a tiene 44.275 reubicaciones R_X86_64_32/32S ⇒ no es PIC. La
regla del frente GNOME (readelf -r ANTES de gastar el build) ahorró uno.
Y la salida no fue una campaña nueva sino una MEDICIÓN: incoming-kde/glib-shared
copiada a esta cola resuelve al MISMO hash (0584ce1f) y ya estaba sellada ⇒ cero
rebuild. Idem pcre2-shared, lua y libelogind. Las dos glib coexisten sin pisarse (.a
y .so son ficheros distintos) y el portal conserva sus 3 NEEDED.
escritorio-cosmic: 84 → 89 recetas, 0 faltantes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
96 lines
4.5 KiB
TOML
96 lines
4.5 KiB
TOML
# lua 5.4.8 — el intérprete y **la librería compartida**, que es lo que hace falta acá.
|
|
#
|
|
# POR QUÉ ENTRA: `wireplumber` —el gestor de sesión de PipeWire, sin el cual PipeWire acepta clientes
|
|
# pero no enumera ni enruta dispositivos— tiene su política escrita EN LUA y embebe un intérprete
|
|
# (`lib/wplua`). Su `subprojects/lua.wrap` DESCARGA Lua 5.5 de lua.org, cosa imposible en el sandbox
|
|
# hermético (`--wrap-mode=nodownload`), así que va con `-Dsystem-lua=true` y el sistema tiene que
|
|
# tener Lua. Su meson acepta 5.5, 5.4 o 5.3 (meson.build:91-95); se elige **5.4**, la serie estable
|
|
# larga que usan las distros, en vez de la 5.5 del wrap.
|
|
#
|
|
# ══ LO QUE ESTA RECETA TIENE QUE INVENTAR, porque upstream no lo da ═════════════════════════════
|
|
# El Makefile de Lua sólo produce `liblua.a` y los binarios. **No hay regla de `.so` ni fichero
|
|
# pkg-config**: los agrega cada distro. Acá se agregan las dos cosas, y a mano, porque no hay dónde
|
|
# copiarlas de:
|
|
#
|
|
# 1. `-fPIC` en `MYCFLAGS`. Sin esto la `.a` no es reubicable y `libwplua` —que es un objeto
|
|
# compartido— no linkea: es la regla del corpus sobre `.a` no-PIC dentro de un `.so`
|
|
# («relocation R_X86_64_32 … recompile with -fPIC»), la misma que obligó a las variantes
|
|
# `-shared` de zlib, sqlite, libxml2, libuuid y dbus.
|
|
# 2. La `.so` se enlaza a mano desde la `.a` con `--whole-archive`, porque una librería estática sólo
|
|
# aporta los objetos que alguien referencia y acá hay que llevárselos TODOS. SONAME
|
|
# `liblua-5.4.so.0`, que es el que graba quien enlace.
|
|
# 3. El `.pc` se escribe acá. El nombre importa: wireplumber prueba `lua-5.4`, `lua5.4` y `lua54` en
|
|
# ese orden, así que el fichero se llama `lua5.4.pc` y ADEMÁS se deja `lua-5.4.pc` y `lua.pc` como
|
|
# enlaces — es más barato satisfacer las tres convenciones que adivinar cuál buscará el próximo
|
|
# consumidor.
|
|
#
|
|
# `-DLUA_USE_LINUX` es lo que activa `dlopen` y el resto de POSIX; sin él Lua se compila en modo ANSI
|
|
# genérico y `require` de módulos C no funciona. **SIN readline a propósito**: sólo lo usa el REPL
|
|
# interactivo, y el ncurses del catálogo es static-only y arrastra `-static` al link (el mismo
|
|
# problema que hizo saltar `pw-top` en la receta de pipewire).
|
|
#
|
|
# `SYSLIBS` pierde el `-Wl,-E` de upstream: exportar todos los símbolos del EJECUTABLE sirve para que
|
|
# módulos C cargados por `require` vean la API de Lua, y acá el que exporta es la `.so`.
|
|
name = "lua"
|
|
version = "5.4.8"
|
|
|
|
[source]
|
|
tarball = "https://www.lua.org/ftp/lua-5.4.8.tar.gz"
|
|
sha256 = "4f18ddae154e793e46eeab727c59ef1c0c0c2b744e7b94219710d76f530629ae"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
|
|
[build.phases]
|
|
configure = "true"
|
|
compile = '''
|
|
set -e
|
|
# CC se pasa explícito: el Makefile de Lua lo fija a `gcc -std=gnu99` en la línea 9 y ganaría sobre el
|
|
# del entorno.
|
|
make -C src all CC="hammer-zig-cc -std=gnu99" \
|
|
SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-ldl" MYCFLAGS="-fPIC"
|
|
# La .so que upstream no construye. --whole-archive porque de una estática el linker sólo se lleva lo
|
|
# referenciado, y acá hay que llevárselo todo.
|
|
hammer-zig-cc -shared -o src/liblua-5.4.so.0.0.0 \
|
|
-Wl,-soname,liblua-5.4.so.0 \
|
|
-Wl,--whole-archive src/liblua.a -Wl,--no-whole-archive -lm
|
|
'''
|
|
install = '''
|
|
set -e
|
|
mkdir -p /out/usr/bin /out/usr/lib/pkgconfig /out/usr/include /out/usr/share/man/man1
|
|
install -m755 src/lua /out/usr/bin/lua5.4
|
|
install -m755 src/luac /out/usr/bin/luac5.4
|
|
ln -s lua5.4 /out/usr/bin/lua
|
|
ln -s luac5.4 /out/usr/bin/luac
|
|
install -m644 src/lua.h src/luaconf.h src/lualib.h src/lauxlib.h src/lua.hpp /out/usr/include/
|
|
install -m644 src/liblua.a /out/usr/lib/liblua-5.4.a
|
|
install -m755 src/liblua-5.4.so.0.0.0 /out/usr/lib/
|
|
ln -s liblua-5.4.so.0.0.0 /out/usr/lib/liblua-5.4.so.0
|
|
ln -s liblua-5.4.so.0 /out/usr/lib/liblua-5.4.so
|
|
ln -s liblua-5.4.so /out/usr/lib/liblua.so
|
|
cat > /out/usr/lib/pkgconfig/lua5.4.pc <<'PC'
|
|
prefix=/usr
|
|
exec_prefix=${prefix}
|
|
libdir=${exec_prefix}/lib
|
|
includedir=${prefix}/include
|
|
INTERPRETER=${exec_prefix}/bin/lua5.4
|
|
COMPILER=${exec_prefix}/bin/luac5.4
|
|
|
|
Name: Lua
|
|
Description: Lua language engine
|
|
Version: 5.4.8
|
|
Requires:
|
|
Libs: -L${libdir} -llua-5.4 -lm
|
|
Cflags: -I${includedir}
|
|
PC
|
|
# Las tres convenciones de nombre que se usan por ahí; wireplumber prueba lua-5.4, lua5.4 y lua54.
|
|
ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua-5.4.pc
|
|
ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua54.pc
|
|
ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua.pc
|
|
'''
|
|
|
|
[deps]
|
|
build = ["make", "pkgconf"]
|