tawasuyu

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 1463Shell 152Markdown 90Rust 853028 Definitions

⎇ fee383ff64be0f09a065475ac72a0056f4054e4a recipes/incoming-kde/polkit-qt-1.toml TOML · 84 lines · 4.6 KB History raw

polkit (variante KDE) + polkit-qt-1 0.201.1: Plasma ya puede pedir autorización 520f1d527 · Sergio ·

1# polkit-qt-1 0.201.1 — los bindings Qt de polkit. Último de los cuatro huecos de RUNTIME del triaje
2# de la frontera que tiene sentido cerrar: sin él Plasma no puede PEDIR autorización — montar un
3# disco, cambiar ajustes del sistema, cualquier acción que necesite elevar privilegios.
4#
5# Los dos consumidores están escritos en el corpus y hoy lo esquivan a propósito:
6#   · `kauth` construye con el backend polkit OPCIONAL apagado ⇒ cae al backend "fake" (no bloquea,
7#     pero KAuth::Action no autoriza nada);
8#   · `plasma-workspace` apaga el helper de Región&Idioma con
9#     -DGLIBC_LOCALE_GEN=OFF -DGLIBC_LOCALE_PREGENERATED=ON, que es exactamente lo que evita el
10#     `PolkitQt6-1 REQUIRED`.
11# Esta receta pone la pieza; ENCENDER esos dos es otra decisión, con su propio radio de re-hash
12# (plasma-workspace arrastra medio escritorio). Se deja explícito y sin tocar.
13#
14# ⚠ QUÉ SIGNIFICA "AUTORIZAR" ACÁ. El demonio no es polkitd sino `arje-polkit-compat`, que responde
15# `is_authorized = true` a TODO y deja traza. Estas librerías son la INTERFAZ que el escritorio
16# espera; la política real del fractal está en otro lado (SO_PEERCRED + capability grants). Ver
17# recipes/arje-polkit-compat.toml y recipes/incoming-kde/polkit.toml.
18name    = "polkit-qt-1"
19version = "0.201.1"
20license = "LGPL-2.1-or-later"
21
22[source]
23tarball = "https://download.kde.org/stable/polkit-qt-1/polkit-qt-1-0.201.1.tar.xz"
24# Contrastado contra el .sha256 que publica KDE al lado del tarball.
25sha256  = "95d8e2cae530c546d9437459deb8a1bea38d572f0f9772cc2860dc143637f256"
26
27[build]
28compiler = "zig-cc"
29target   = "x86_64-linux-musl"
30link     = "dynamic"
31flags    = []
32
33[build.phases]
34# No lleva el wrapper `.zwrap` de las recetas KF6/Plasma: este proyecto usa cmake pelado
35# (GNUInstallDirs + CMakePackageConfigHelpers), no KDECompilerSettings, así que nadie inyecta el
36# `-Wl,--fatal-warnings` que zig ld no entiende.
37#
38# -DQT_MAJOR_VERSION=6 es OBLIGATORIO: el default del CMakeLists es "5". Sin él busca Qt5 y falla —
39# o peor, en una máquina con Qt5 construiría los bindings equivocados con nombres distintos
40# (polkit-qt5-1 en vez de polkit-qt6-1) y el fallo aparecería recién en el dependiente.
41# -DCMAKE_INSTALL_LIBDIR=lib para que el `.pc` caiga junto al de polkit, en /usr/lib/pkgconfig.
42configure = '''
43set -e
44cmake -B build -G Ninja -Wno-dev \
45  -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \
46  -DCMAKE_INSTALL_LIBDIR=lib \
47  -DQT_MAJOR_VERSION=6 \
48  -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF
49
50# ── GUARDIÁN CONTRA UNA DEGRADACIÓN SILENCIOSA ─────────────────────────────────────────────────
51# El CMakeLists sondea polkit con `check_function_exists`, que COMPILA Y ENLAZA. Si ese enlace falla
52# por cualquier motivo del sandbox —y no por que la función no exista—, cmake no da error: imprime
53# «You have an older polkit-1 version» y define POLKIT_QT_1_COMPATIBILITY_MODE. El build sella, el
54# artefacto tiene el tamaño esperado y la autorización queda recortada sin que nadie se entere.
55# `HAVE_POLKIT_SYSTEM_BUS_NAME_GET_USER_SYNC` es el único de los tres sondeos que llega al header
56# generado, así que sirve de testigo: polkit 127 tiene esa función, luego un 0 acá significa que el
57# sondeo no pudo enlazar, no que polkit sea viejo.
58grep -q "define HAVE_POLKIT_SYSTEM_BUS_NAME_GET_USER_SYNC 1" build/core/polkitqt1-config.h || {
59  echo "los sondeos check_function_exists NO enlazaron contra polkit ⇒ cmake habría activado" >&2
60  echo "POLKIT_QT_1_COMPATIBILITY_MODE en silencio. Abortando." >&2
61  exit 1
62}
63'''
64compile = "cmake --build build"
65install = '''
66set -e
67DESTDIR=/out cmake --install build
68
69# Verificación por CONTENIDO: las tres librerías (core/gui/agent) con su SONAME, y el `.pc` con el
70# nombre de Qt6 —no el de Qt5— que es el que buscarán kauth y plasma-workspace.
71test -f /out/usr/lib/libpolkit-qt6-core-1.so.1
72test -f /out/usr/lib/libpolkit-qt6-gui-1.so.1
73test -f /out/usr/lib/libpolkit-qt6-agent-1.so.1
74test -s /out/usr/lib/pkgconfig/polkit-qt6-1.pc
75test -s /out/usr/lib/cmake/PolkitQt6-1/PolkitQt6-1Config.cmake
76'''
77
78# `polkit` acá es la variante de ESTA cola (libs-only, sin introspección), no la de incoming-gnome:
79# hammer resuelve hermano→padre y no cruza colas hermanas. glib-shared/pcre2-shared/zlib-shared son
80# las variantes dinámicas de la cola KDE — el glib canónico es sólo `.a` y no entra en un `.so`.
81[deps]
82build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "dbus", "polkit",
83  "glib-shared", "pcre2-shared", "zlib-shared", "libffi",
84  "mesa", "libdrm", "libxkbcommon", "wayland"]