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 815Rust 56Shell 37Markdown 291229 Definiciones

⎇ fe474dab636d4f43ea912ac0144e76bb83ba3717 recipes/incoming-gnome/lua.toml TOML · 96 líneas · 4.5 KB Historia crudo

licencias: 994 de 1141 (87%) — cerradas las familias Qt, freedesktop, kernel.org y PyPI fe474dab6 · sergio ·

1# lua 5.4.8 — el intérprete y **la librería compartida**, que es lo que hace falta acá.
2#
3# POR QUÉ ENTRA: `wireplumber` —el gestor de sesión de PipeWire, sin el cual PipeWire acepta clientes
4# pero no enumera ni enruta dispositivos— tiene su política escrita EN LUA y embebe un intérprete
5# (`lib/wplua`). Su `subprojects/lua.wrap` DESCARGA Lua 5.5 de lua.org, cosa imposible en el sandbox
6# hermético (`--wrap-mode=nodownload`), así que va con `-Dsystem-lua=true` y el sistema tiene que
7# tener Lua. Su meson acepta 5.5, 5.4 o 5.3 (meson.build:91-95); se elige **5.4**, la serie estable
8# larga que usan las distros, en vez de la 5.5 del wrap.
9#
10# ══ LO QUE ESTA RECETA TIENE QUE INVENTAR, porque upstream no lo da ═════════════════════════════
11# El Makefile de Lua sólo produce `liblua.a` y los binarios. **No hay regla de `.so` ni fichero
12# pkg-config**: los agrega cada distro. Acá se agregan las dos cosas, y a mano, porque no hay dónde
13# copiarlas de:
14#
15#  1. `-fPIC` en `MYCFLAGS`. Sin esto la `.a` no es reubicable y `libwplua` —que es un objeto
16#     compartido— no linkea: es la regla del corpus sobre `.a` no-PIC dentro de un `.so`
17#     («relocation R_X86_64_32 … recompile with -fPIC»), la misma que obligó a las variantes
18#     `-shared` de zlib, sqlite, libxml2, libuuid y dbus.
19#  2. La `.so` se enlaza a mano desde la `.a` con `--whole-archive`, porque una librería estática sólo
20#     aporta los objetos que alguien referencia y acá hay que llevárselos TODOS. SONAME
21#     `liblua-5.4.so.0`, que es el que graba quien enlace.
22#  3. El `.pc` se escribe acá. El nombre importa: wireplumber prueba `lua-5.4`, `lua5.4` y `lua54` en
23#     ese orden, así que el fichero se llama `lua5.4.pc` y ADEMÁS se deja `lua-5.4.pc` y `lua.pc` como
24#     enlaces — es más barato satisfacer las tres convenciones que adivinar cuál buscará el próximo
25#     consumidor.
26#
27# `-DLUA_USE_LINUX` es lo que activa `dlopen` y el resto de POSIX; sin él Lua se compila en modo ANSI
28# genérico y `require` de módulos C no funciona. **SIN readline a propósito**: sólo lo usa el REPL
29# interactivo, y el ncurses del catálogo es static-only y arrastra `-static` al link (el mismo
30# problema que hizo saltar `pw-top` en la receta de pipewire).
31#
32# `SYSLIBS` pierde el `-Wl,-E` de upstream: exportar todos los símbolos del EJECUTABLE sirve para que
33# módulos C cargados por `require` vean la API de Lua, y acá el que exporta es la `.so`.
34name    = "lua"
35version = "5.4.8"
36license = "MIT"
37
38[source]
39tarball = "https://www.lua.org/ftp/lua-5.4.8.tar.gz"
40sha256  = "4f18ddae154e793e46eeab727c59ef1c0c0c2b744e7b94219710d76f530629ae"
41
42[build]
43compiler = "zig-cc"
44target   = "x86_64-linux-musl"
45link     = "dynamic"
46
47[build.phases]
48configure = "true"
49compile   = '''
50set -e
51# 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
52# del entorno.
53make -C src all CC="hammer-zig-cc -std=gnu99" \
54  SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-ldl" MYCFLAGS="-fPIC"
55# La .so que upstream no construye. --whole-archive porque de una estática el linker sólo se lleva lo
56# referenciado, y acá hay que llevárselo todo.
57hammer-zig-cc -shared -o src/liblua-5.4.so.0.0.0 \
58  -Wl,-soname,liblua-5.4.so.0 \
59  -Wl,--whole-archive src/liblua.a -Wl,--no-whole-archive -lm
60'''
61install = '''
62set -e
63mkdir -p /out/usr/bin /out/usr/lib/pkgconfig /out/usr/include /out/usr/share/man/man1
64install -m755 src/lua  /out/usr/bin/lua5.4
65install -m755 src/luac /out/usr/bin/luac5.4
66ln -s lua5.4  /out/usr/bin/lua
67ln -s luac5.4 /out/usr/bin/luac
68install -m644 src/lua.h src/luaconf.h src/lualib.h src/lauxlib.h src/lua.hpp /out/usr/include/
69install -m644 src/liblua.a /out/usr/lib/liblua-5.4.a
70install -m755 src/liblua-5.4.so.0.0.0 /out/usr/lib/
71ln -s liblua-5.4.so.0.0.0 /out/usr/lib/liblua-5.4.so.0
72ln -s liblua-5.4.so.0     /out/usr/lib/liblua-5.4.so
73ln -s liblua-5.4.so       /out/usr/lib/liblua.so
74cat > /out/usr/lib/pkgconfig/lua5.4.pc <<'PC'
75prefix=/usr
76exec_prefix=${prefix}
77libdir=${exec_prefix}/lib
78includedir=${prefix}/include
79INTERPRETER=${exec_prefix}/bin/lua5.4
80COMPILER=${exec_prefix}/bin/luac5.4
81
82Name: Lua
83Description: Lua language engine
84Version: 5.4.8
85Requires:
86Libs: -L${libdir} -llua-5.4 -lm
87Cflags: -I${includedir}
88PC
89# Las tres convenciones de nombre que se usan por ahí; wireplumber prueba lua-5.4, lua5.4 y lua54.
90ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua-5.4.pc
91ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua54.pc
92ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua.pc
93'''
94
95[deps]
96build = ["make", "pkgconf"]