Decisión del usuario: «tawasuyu está en MIT». Es la misma licencia que hammer (LICENSE en la raíz + Cargo.toml), así que todo lo nuestro queda coherente bajo un solo término. Las 20 recetas con fuente en git.tawasuyu.net: arje-* (el init y sus compat), mirada-* (el compositor, el greeter y mirada-ctl), netup, agora-cli, cosmos-cli, dominium-cli, tinkuy-sim, llimphi-counter y libelogind. ⚠ ANOTADO EN LA TABLA porque es una trampa que casi pisé: `libelogind` NO es el elogind de upstream (que sería LGPL-2.1+). Por el nombre lo parece; su cabecera dice que es una reimplementación PROPIA de la C-ABI sd-login dentro de arje-compat. Declararla LGPL «porque se llama así» habría sido exactamente el error que este fichero prohíbe — el tercero del mismo tipo hoy, después de `knighttime` (parecía Go y es KDE) y de la familia `kube*` (parecen KDE y son Go). El nombre nunca es evidencia; la fuente sí. Hashes verificados sobre las 20: idénticos. Quedan 124 sin declarar, ya todas de terceros. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
71 lines
4.2 KiB
TOML
71 lines
4.2 KiB
TOML
# libelogind — la C-ABI `sd-login` que le faltaba a la distro, implementada en arje-compat.
|
|
#
|
|
# QUÉ RESUELVE: mutter (y polkit, gcr, at-spi2-core) exigen un proveedor de logind por pkg-config —
|
|
# `libsystemd` o `libelogind`— para llamar la API C sd-login. Esa API NO es un cliente D-Bus: lee
|
|
# `/run/systemd/{sessions,users,seats}`. Los otros tres tienen perilla para esquivarla y se
|
|
# construyeron por su camino degradado; **mutter no tiene**, porque `-Dudev=false` exige
|
|
# `-Dlogind=false` (mutter/meson.build:257) y sin udev+logind no hay backend nativo KMS: no hay
|
|
# compositor de verdad, sólo anidado.
|
|
#
|
|
# POR QUÉ NO ES elogind NI UN STUB: `arje-logind-compat` ya escribe ese estado en /run/systemd (ver
|
|
# `arje_compat::login_state`). Lo único que faltaba era una librería que lo LEYERA y lo ofreciera en
|
|
# C. `arje-sdlogin-compat` hace exactamente eso — no inventa datos ni levanta un daemon paralelo.
|
|
# Empaquetar elogind sería traer un logind entero a competirle al que arje ya tiene.
|
|
#
|
|
# Corrige de paso lo que afirma el comentario de recipes/arje-logind-compat.toml («no hace falta la
|
|
# C-ABI sd-login… los escritorios consultan login1 en RUNTIME por D-Bus»): es cierto para los
|
|
# clientes D-Bus y FALSO para mutter, que la enlaza.
|
|
#
|
|
# HUB-ONLY, como toda receta de fuente tawasuyu: la gitea escucha en :2345 y el worker efímero es
|
|
# secretless ⇒ recibe Connection refused en :22. Se muele en el hub.
|
|
name = "libelogind"
|
|
version = "0.0.1"
|
|
license = "MIT"
|
|
|
|
[source]
|
|
# El `commit` es el identificador inmutable; la URL es sólo locator y NO entra al ArtifactHash.
|
|
# Rama `selfhost/arje-zero-attest-lockfile`, igual que arje-logind-compat, porque es la única que
|
|
# versiona el `Cargo.lock` de la raíz: sin él, el vendoreo `--locked` del fetch no es reproducible
|
|
# (el monorepo lo gitignora en main).
|
|
repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
|
|
commit = "749edfe41766e098d3eb18561c6a396610c5cd8e"
|
|
# El monorepo COMMITEA su propio `vendor/` (`[patch.crates-io] smithay = { path = "vendor/smithay" }`,
|
|
# la copia parcheada que mirada necesita para el tearing) y el `cargo vendor` de hammer escribe ahí
|
|
# por defecto, pisándolo: el build muere con `failed to read /src/vendor/smithay/.cargo-checksum.json`
|
|
# al resolver la dep git de taffy. Se vendorea a un subdir aparte, igual que arje-logind-compat.
|
|
# Apareció recién ahora porque el `vendor/` entró a esta rama con el merge de main, no antes.
|
|
# Ver [[hammer-cargo-vendor-clobbers-project-vendor]].
|
|
cargo_vendor_dir = ".hammer-cargo-vendor"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
# dynamic, no static: el producto ES una librería compartida (cdylib). Con `link = "static"` el lab
|
|
# exporta -static y no hay .so que valga.
|
|
link = "dynamic"
|
|
flags = ["-p", "arje-sdlogin-compat"]
|
|
|
|
[build.phases]
|
|
# Sólo se sobrescribe `install`: el `compile` por defecto del lab (cargo build --release, offline y
|
|
# vendoreado) es el correcto. El default de Cargo copia EJECUTABLES a /usr/bin, y acá no hay ninguno:
|
|
# hay una .so, una cabecera y un .pc.
|
|
#
|
|
# El SONAME (libelogind.so.0) lo fija el build.rs del crate, no esta receta, para que un `cargo build`
|
|
# a mano también produzca algo enlazable. Por eso el fichero se instala directamente con ese nombre y
|
|
# el `libelogind.so` es el symlink de desarrollo que busca el linker.
|
|
#
|
|
# La cabecera va a /usr/include/elogind/systemd/ y el .pc trae `-I${includedir}/elogind`: así el
|
|
# `#include <systemd/sd-login.h>` de mutter resuelve sin que mutter sepa que somos nosotros. Es el
|
|
# mismo arreglo de elogind upstream.
|
|
install = '''
|
|
set -e
|
|
mkdir -p /out/usr/lib/pkgconfig /out/usr/include/elogind/systemd
|
|
cp target/release/libelogind.so /out/usr/lib/libelogind.so.0
|
|
ln -s libelogind.so.0 /out/usr/lib/libelogind.so
|
|
cp 03_ukupacha/arje/arje-sdlogin-compat/include/systemd/sd-login.h /out/usr/include/elogind/systemd/
|
|
# sd-daemon.h va aparte porque en systemd también son dos cabeceras y quien la usa la pide por su
|
|
# nombre: gdm hace `#include <systemd/sd-daemon.h>` en common/gdm-log.c para `sd_booted()`.
|
|
cp 03_ukupacha/arje/arje-sdlogin-compat/include/systemd/sd-daemon.h /out/usr/include/elogind/systemd/
|
|
cp 03_ukupacha/arje/arje-sdlogin-compat/pkgconfig/libelogind.pc /out/usr/lib/pkgconfig/
|
|
'''
|