Tercera tanda curada, agrupada por la URL DE FUENTE de cada receta (que es la evidencia que el nombre no da): los once módulos Qt sin prefijo, freedesktop (dbus, libinput, libevdev, libdisplay-info, poppler, pulseaudio, upower, NetworkManager, ModemManager, polkit), kernel.org (los tres kernels, linux-headers, git, iproute2, libuuid) y PyPI. Los kernels llevan `GPL-2.0-only WITH Linux-syscall-note` explícita. No es adorno: sin esa excepción, todo binario de espacio de usuario que hace un syscall sería obra derivada del kernel. Es exactamente el tipo de dato que un campo de licencia existe para no perder. Quedan 147 sin declarar: 69 de GitHub donde la propia API dice NOASSERTION (hay que abrir el fuente), 20 de tawasuyu —que son nuestras o del otro agente, así que la licencia la decide el usuario, no yo— y el resto repartido en GNOME, gitlab.freedesktop y sueltos. Más 71 con SPDX ambiguo pendientes de desambiguar (`licencias.sh --revisar`). Hashes verificados otra vez sobre 20 recetas tocadas: 20 idénticos, 0 cambiados. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
97 lines
4.5 KiB
TOML
97 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"
|
|
license = "MIT"
|
|
|
|
[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"]
|