El OSC de mpv es `player/lua/osc.lua`: sin Lua el reproductor anda y responde al teclado pero NO DIBUJA NADA de interfaz. La `lua` del corpus no sirve — `meson.build:701` acepta 5.1, 5.2 o LuaJIT y el `lua.pc` genérico va acotado a `>=5.1.0, <5.3.0`; la nuestra es 5.4.8 y entró para wireplumber. CÓMO CONVIVEN LAS DOS SIN PISARSE, que es lo que hace legítimo tener dos Lua: esta receta instala **sólo la librería**. Sin `/usr/bin/lua`, sin `luac` y sin `lua.pc` genérico — que son exactamente los tres ficheros que colisionarían si una imagen hidratara las dos. Las `.so` no colisionan porque el SONAME lleva la versión, y los headers van a `/usr/include/lua5.2/` porque los de 5.2 y 5.4 se llaman igual y dicen cosas distintas. La diferencia con 5.4 que muerde: en 5.2.4 `luaconf.h:43-49` hace que `LUA_USE_LINUX` implique `LUA_USE_READLINE` (en 5.4 eso vive en el target `linux-readline` del Makefile). Se esquiva construyendo el target `a` —sólo `liblua.a`— en vez de `all`: `LUA_USE_READLINE` lo consume nada más que `lua.c`, el binario del REPL, que acá no se compila. Sale gratis y de paso es lo que hace que no haya `/usr/bin/lua` que colisione. `-Dlua=lua5.2` y no `auto`: auto recorre ocho nombres de `.pc` y se lleva el primero que encuentre en el sandbox ⇒ el artefacto dependería de qué otra cosa quedó montada en el lab. EVIDENCIA, del mpv re-sellado (b3:d9072a10): List of enabled features: … libass libplacebo **lua5.2** … wayland [cplayer] Set property: user-data/osc/visibility="auto" -> 1 [cplayer] Done loading scripts. o sea que el script del OSC no sólo compiló: se carga y corre. alsa-lib: se corrige el comentario, que decía que las pipewire iban con `-Dpipewire-alsa=disabled`. Ya no. Y queda escrito el gotcha que costó encontrarlo: el `alsa.conf` que instala carga `/var/lib/alsa/conf.d`, `/usr/etc/alsa/conf.d` y `/etc/alsa/conf.d`, NO `/usr/share/alsa/alsa.conf.d`, que es donde meson deja la config del plugin.
91 lines
4.9 KiB
TOML
91 lines
4.9 KiB
TOML
# Lua 5.2.4 — el intérprete EMBEBIDO que necesita el OSC de mpv. No es el `lua` del corpus.
|
|
#
|
|
# ══ POR QUÉ DOS LUA Y NO UNA ═══════════════════════════════════════════════════════════════════
|
|
# El corpus ya tiene `lua` 5.4.8, que entró para wireplumber (su política está escrita en Lua). mpv
|
|
# NO la puede usar: `meson.build:701` enumera las versiones aceptadas y son 5.1, 5.2 y LuaJIT — el
|
|
# `lua.pc` genérico va acotado a `>=5.1.0, <5.3.0`. No es una preferencia de upstream que se pueda
|
|
# forzar con una perilla: mpv 0.41 no compila contra la API de 5.3+.
|
|
#
|
|
# Sin Lua, mpv reproduce y responde al teclado pero NO DIBUJA NADA de interfaz: el OSC —la barra de
|
|
# búsqueda, el overlay de estadísticas, la consola— es `player/lua/osc.lua`. Es la diferencia entre
|
|
# "el video se ve" y "hay un reproductor".
|
|
#
|
|
# ══ CÓMO CONVIVEN SIN PISARSE, que es lo que hace legítimo tener las dos ═══════════════════════
|
|
# Esta receta instala **sólo la librería**: sin `/usr/bin/lua`, sin `luac`, y sin un `lua.pc`
|
|
# genérico. Los tres son exactamente los ficheros que colisionarían con la 5.4 si una imagen
|
|
# hidratara las dos (mismas rutas, gana quien proyecte último — el cuadro de las dos glib). Las
|
|
# `.so` no colisionan porque el SONAME lleva la versión: `liblua-5.2.so.0` vs `liblua-5.4.so.0`.
|
|
# Los `.pc` que sí publica son los tres nombres versionados que mpv prueba: `lua5.2`, `lua-5.2`,
|
|
# `lua52`. Nadie que pida "lua" a secas se lleva ésta por error.
|
|
#
|
|
# ══ LO QUE HAY QUE INVENTAR, igual que en la receta de 5.4 ═════════════════════════════════════
|
|
# 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 a mano: `-fPIC` en MYCFLAGS (sin eso la `.a`
|
|
# no es reubicable), la `.so` enlazada con `--whole-archive` (de una estática el linker sólo se
|
|
# lleva lo referenciado y acá hay que llevárselo todo), y el `.pc` escrito a mano.
|
|
#
|
|
# ⚠ LA DIFERENCIA CON 5.4 QUE MUERDE: en 5.2.4 el `luaconf.h:43-49` hace que `LUA_USE_LINUX`
|
|
# implique **`LUA_USE_READLINE`** — en 5.4 eso se movió al target `linux-readline` del Makefile, así
|
|
# que la receta de 5.4 puede definir LUA_USE_LINUX sin arrastrar readline y ésta no. Se esquiva
|
|
# construyendo el target `a` (sólo `liblua.a`) en vez de `all`: `LUA_USE_READLINE` lo consume
|
|
# únicamente `lua.c`, el binario del REPL, que acá no se compila. Sale gratis y de paso es lo que
|
|
# hace que no haya `/usr/bin/lua` que colisione. El ncurses del catálogo es static-only y arrastra
|
|
# `-static` al link, así que traer readline habría sido el mismo muro que ya saltó `pw-top`.
|
|
name = "lua5.2"
|
|
version = "5.2.4"
|
|
license = "MIT"
|
|
|
|
[source]
|
|
tarball = "https://www.lua.org/ftp/lua-5.2.4.tar.gz"
|
|
sha256 = "b9e2e4aad6789b3b63a056d442f7b39f0ecfca3ae0f1fc0ae4e9614401b69f4b"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
|
|
[build.phases]
|
|
configure = "true"
|
|
compile = '''
|
|
set -e
|
|
# CC explícito: el Makefile de Lua lo fija a `gcc -std=gnu99` y ganaría sobre el del entorno.
|
|
# Target `a` y no `all`: sólo la librería (ver la nota de readline en la cabecera).
|
|
make -C src a CC="hammer-zig-cc -std=gnu99" \
|
|
SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-ldl" MYCFLAGS="-fPIC"
|
|
hammer-zig-cc -shared -o src/liblua-5.2.so.0.0.0 \
|
|
-Wl,-soname,liblua-5.2.so.0 \
|
|
-Wl,--whole-archive src/liblua.a -Wl,--no-whole-archive -lm
|
|
'''
|
|
install = '''
|
|
set -e
|
|
mkdir -p /out/usr/lib/pkgconfig /out/usr/include/lua5.2
|
|
# Headers en un subdirectorio propio: los de 5.2 y los de 5.4 tienen los MISMOS nombres y contenido
|
|
# distinto. En /usr/include pelado se pisarían y el próximo que compile contra "lua" se llevaría los
|
|
# que hidrató último. El `.pc` apunta acá, así que quien use pkg-config no se entera.
|
|
install -m644 src/lua.h src/luaconf.h src/lualib.h src/lauxlib.h src/lua.hpp /out/usr/include/lua5.2/
|
|
install -m644 src/liblua.a /out/usr/lib/liblua-5.2.a
|
|
install -m755 src/liblua-5.2.so.0.0.0 /out/usr/lib/
|
|
ln -s liblua-5.2.so.0.0.0 /out/usr/lib/liblua-5.2.so.0
|
|
ln -s liblua-5.2.so.0 /out/usr/lib/liblua-5.2.so
|
|
cat > /out/usr/lib/pkgconfig/lua5.2.pc <<'PC'
|
|
prefix=/usr
|
|
exec_prefix=${prefix}
|
|
libdir=${exec_prefix}/lib
|
|
includedir=${prefix}/include/lua5.2
|
|
|
|
Name: Lua
|
|
Description: Lua language engine (5.2, embebida — sin intérprete)
|
|
Version: 5.2.4
|
|
Requires:
|
|
Libs: -L${libdir} -llua-5.2 -lm
|
|
Cflags: -I${includedir}
|
|
PC
|
|
# Los tres nombres versionados que prueba mpv (meson.build:701). NINGÚN `lua.pc` genérico: ése es
|
|
# de la 5.4 y confundirlos es justamente lo que esta receta evita.
|
|
ln -s lua5.2.pc /out/usr/lib/pkgconfig/lua-5.2.pc
|
|
ln -s lua5.2.pc /out/usr/lib/pkgconfig/lua52.pc
|
|
'''
|
|
|
|
[deps]
|
|
build = ["make", "pkgconf"]
|