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