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