diff --git a/docs/state/build-state-kde.json b/docs/state/build-state-kde.json index 96b151f8..74314f74 100644 --- a/docs/state/build-state-kde.json +++ b/docs/state/build-state-kde.json @@ -1,15 +1,15 @@ { "schema": "hammer-build-state/1", "totals": { - "recipes": 1048, - "nodes": 1055, - "sealed": 1048, + "recipes": 1050, + "nodes": 1057, + "sealed": 1050, "ajeno": 2, "wanted": 5 }, "by_class": { "ajeno": 2, - "c": 403, + "c": 405, "go": 362, "gui": 44, "kernel": 6, @@ -24,7 +24,7 @@ "wanted": 5 }, "incoming-kde": { - "sealed": 196, + "sealed": 198, "ajeno": 1 } }, @@ -40,9 +40,9 @@ "sealed": 76 }, "escritorio-kde": { - "raices": 96, - "clausura": 357, - "sealed": 356, + "raices": 98, + "clausura": 362, + "sealed": 361, "ajeno": 1 }, "escritorio-mirada": { @@ -902,7 +902,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 31 + "dependientes_total": 32 }, "atuin": { "iname": "atuin", @@ -933,7 +933,7 @@ "cls": "c", "queue": "corpus", "foreign": false, - "hash": "b3:fab2fbfb188d4656a821fb85e0f8628aab5608760d22b9a4e0dcd65fe7f010fb", + "hash": "b3:8f6d09c2d6e99a2180301b05b1d405d85ec33a4420a4a4997dd472cde33ef165", "state": "sealed", "blocked_by": [], "unblocks": 0, @@ -2829,7 +2829,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 154 + "dependientes_total": 155 }, "cmctl": { "iname": "cmctl", @@ -3419,7 +3419,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 117 + "dependientes_total": 118 }, "dbus-shared": { "iname": "dbus-shared", @@ -4554,7 +4554,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 108 + "dependientes_total": 109 }, "eza": { "iname": "eza", @@ -5460,9 +5460,10 @@ "unblocks": 0, "perfiles": [ "escritorio-cosmic", - "escritorio-gnome" + "escritorio-gnome", + "escritorio-kde" ], - "dependientes_total": 2 + "dependientes_total": 3 }, "fx": { "iname": "fx", @@ -5615,9 +5616,10 @@ "perfiles": [ "escritorio-cosmic", "escritorio-gnome", + "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 9 + "dependientes_total": 10 }, "gdk-pixbuf-shared": { "iname": "gdk-pixbuf-shared", @@ -5705,7 +5707,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 108 + "dependientes_total": 109 }, "gh": { "iname": "gh", @@ -6243,7 +6245,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 35 + "dependientes_total": 36 }, "glib-shared": { "iname": "glib-shared", @@ -8287,7 +8289,7 @@ "escritorio-gnome", "escritorio-kde" ], - "dependientes_total": 28 + "dependientes_total": 29 }, "igrep": { "iname": "igrep", @@ -8717,9 +8719,10 @@ "perfiles": [ "escritorio-cosmic", "escritorio-gnome", + "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 2 + "dependientes_total": 3 }, "jsonnet-bundler": { "iname": "jsonnet-bundler", @@ -8994,7 +8997,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 45 + "dependientes_total": 46 }, "katana": { "iname": "katana", @@ -9145,7 +9148,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 26 + "dependientes_total": 27 }, "kbd": { "iname": "kbd", @@ -9228,7 +9231,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 38 + "dependientes_total": 39 }, "kbs2": { "iname": "kbs2", @@ -9489,7 +9492,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 50 + "dependientes_total": 51 }, "kcolorscheme": { "iname": "kcolorscheme", @@ -9526,7 +9529,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 47 + "dependientes_total": 48 }, "kcompletion": { "iname": "kcompletion", @@ -9562,7 +9565,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 42 + "dependientes_total": 43 }, "kconfig": { "iname": "kconfig", @@ -9594,7 +9597,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 64 + "dependientes_total": 65 }, "kconfigwidgets": { "iname": "kconfigwidgets", @@ -9634,7 +9637,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 42 + "dependientes_total": 43 }, "kcoreaddons": { "iname": "kcoreaddons", @@ -9667,7 +9670,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 71 + "dependientes_total": 72 }, "kcrash": { "iname": "kcrash", @@ -9699,7 +9702,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 42 + "dependientes_total": 43 }, "kdbusaddons": { "iname": "kdbusaddons", @@ -9730,7 +9733,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 36 + "dependientes_total": 37 }, "kdeclarative": { "iname": "kdeclarative", @@ -10109,7 +10112,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 37 + "dependientes_total": 38 }, "kglobalacceld": { "iname": "kglobalacceld", @@ -10216,7 +10219,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 49 + "dependientes_total": 50 }, "kholidays": { "iname": "kholidays", @@ -10283,7 +10286,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 63 + "dependientes_total": 64 }, "kibi": { "iname": "kibi", @@ -10339,7 +10342,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 41 + "dependientes_total": 42 }, "kidletime": { "iname": "kidletime", @@ -10558,7 +10561,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 37 + "dependientes_total": 38 }, "kirigami": { "iname": "kirigami", @@ -10592,7 +10595,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 36 + "dependientes_total": 37 }, "kirigami-addons": { "iname": "kirigami-addons", @@ -10633,7 +10636,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 7 + "dependientes_total": 8 }, "kitemmodels": { "iname": "kitemmodels", @@ -10665,7 +10668,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 16 + "dependientes_total": 17 }, "kitemviews": { "iname": "kitemviews", @@ -10696,7 +10699,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 41 + "dependientes_total": 42 }, "kiterunner": { "iname": "kiterunner", @@ -10749,7 +10752,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 39 + "dependientes_total": 40 }, "kluctl": { "iname": "kluctl", @@ -11002,7 +11005,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 32 + "dependientes_total": 33 }, "knotifyconfig": { "iname": "knotifyconfig", @@ -11291,7 +11294,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 31 + "dependientes_total": 32 }, "kparts": { "iname": "kparts", @@ -11429,7 +11432,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 1 + "dependientes_total": 2 }, "kplotting": { "iname": "kplotting", @@ -11946,7 +11949,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 41 + "dependientes_total": 42 }, "kstatusnotifieritem": { "iname": "kstatusnotifieritem", @@ -11990,7 +11993,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 8 + "dependientes_total": 9 }, "ksvg": { "iname": "ksvg", @@ -12683,7 +12686,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 7 + "dependientes_total": 8 }, "kwidgetsaddons": { "iname": "kwidgetsaddons", @@ -12715,7 +12718,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 53 + "dependientes_total": 54 }, "kwin": { "iname": "kwin", @@ -12879,7 +12882,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 48 + "dependientes_total": 49 }, "kxmlgui": { "iname": "kxmlgui", @@ -12926,7 +12929,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 38 + "dependientes_total": 39 }, "kyverno": { "iname": "kyverno", @@ -12996,7 +12999,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 5 + "dependientes_total": 6 }, "lazydocker": { "iname": "lazydocker", @@ -13287,7 +13290,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 62 + "dependientes_total": 63 }, "libXau": { "iname": "libXau", @@ -13309,7 +13312,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 69 + "dependientes_total": 70 }, "libXcursor": { "iname": "libXcursor", @@ -13360,7 +13363,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 69 + "dependientes_total": 70 }, "libXext": { "iname": "libXext", @@ -13387,7 +13390,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 48 + "dependientes_total": 49 }, "libXfixes": { "iname": "libXfixes", @@ -13414,7 +13417,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 50 + "dependientes_total": 51 }, "libXfont2": { "iname": "libXfont2", @@ -13469,7 +13472,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 47 + "dependientes_total": 48 }, "libXrender": { "iname": "libXrender", @@ -13496,7 +13499,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 48 + "dependientes_total": 49 }, "libXtst": { "iname": "libXtst", @@ -13770,7 +13773,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 150 + "dependientes_total": 151 }, "libelogind": { "iname": "libelogind", @@ -13816,7 +13819,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 22 + "dependientes_total": 23 }, "libevdev": { "iname": "libevdev", @@ -13881,7 +13884,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 115 + "dependientes_total": 116 }, "libffi-shared": { "iname": "libffi-shared", @@ -14089,7 +14092,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 21 + "dependientes_total": 22 }, "libksba": { "iname": "libksba", @@ -14489,7 +14492,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 31 + "dependientes_total": 32 }, "libpng-pic": { "iname": "libpng-pic", @@ -14534,7 +14537,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 34 + "dependientes_total": 35 }, "libpthread-stubs": { "iname": "libpthread-stubs", @@ -14935,7 +14938,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 69 + "dependientes_total": 70 }, "libxcvt": { "iname": "libxcvt", @@ -14987,7 +14990,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 118 + "dependientes_total": 119 }, "libxkbfile": { "iname": "libxkbfile", @@ -15972,7 +15975,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 147 + "dependientes_total": 148 }, "mesa-llvmpipe": { "iname": "mesa-llvmpipe", @@ -16069,7 +16072,7 @@ "escritorio-sway", "servidor" ], - "dependientes_total": 127 + "dependientes_total": 128 }, "micro": { "iname": "micro", @@ -18019,7 +18022,7 @@ "escritorio-sway", "servidor" ], - "dependientes_total": 87 + "dependientes_total": 88 }, "pcre2-shared": { "iname": "pcre2-shared", @@ -18281,7 +18284,7 @@ "escritorio-kde", "escritorio-sway" ], - "dependientes_total": 14 + "dependientes_total": 15 }, "pixi": { "iname": "pixi", @@ -18351,7 +18354,7 @@ "escritorio-sway", "servidor" ], - "dependientes_total": 400 + "dependientes_total": 402 }, "plasma-activities": { "iname": "plasma-activities", @@ -18859,7 +18862,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 16 + "dependientes_total": 17 }, "plasma-workspace": { "iname": "plasma-workspace", @@ -19919,7 +19922,7 @@ "escritorio-sway", "servidor" ], - "dependientes_total": 318 + "dependientes_total": 320 }, "qcoro": { "iname": "qcoro", @@ -20187,7 +20190,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 9 + "dependientes_total": 10 }, "qtbase": { "iname": "qt6-qtbase", @@ -20234,7 +20237,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 121 + "dependientes_total": 122 }, "qtdeclarative": { "iname": "qt6-qtdeclarative", @@ -20266,7 +20269,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 90 + "dependientes_total": 91 }, "qtkeychain": { "iname": "qtkeychain", @@ -20495,7 +20498,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 33 + "dependientes_total": 34 }, "qttools": { "iname": "qt6-qttools", @@ -20524,7 +20527,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 103 + "dependientes_total": 104 }, "qtwayland": { "iname": "qt6-qtwayland", @@ -20565,7 +20568,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 14 + "dependientes_total": 15 }, "rage": { "iname": "rage", @@ -21156,7 +21159,7 @@ "escritorio-sway", "servidor" ], - "dependientes_total": 270 + "dependientes_total": 272 }, "sassc": { "iname": "sassc", @@ -21691,7 +21694,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 40 + "dependientes_total": 41 }, "sonnet": { "iname": "sonnet", @@ -21723,7 +21726,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 40 + "dependientes_total": 41 }, "sonobuoy": { "iname": "sonobuoy", @@ -24392,7 +24395,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 161 + "dependientes_total": 162 }, "wayland-protocols": { "iname": "wayland-protocols", @@ -24420,7 +24423,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 58 + "dependientes_total": 59 }, "websocketd": { "iname": "websocketd", @@ -24761,7 +24764,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 33 + "dependientes_total": 34 }, "xcb-util-cursor": { "iname": "xcb-util-cursor", @@ -24790,7 +24793,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 7 + "dependientes_total": 8 }, "xcb-util-image": { "iname": "xcb-util-image", @@ -24818,7 +24821,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 32 + "dependientes_total": 33 }, "xcb-util-keysyms": { "iname": "xcb-util-keysyms", @@ -24845,7 +24848,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 33 + "dependientes_total": 34 }, "xcb-util-renderutil": { "iname": "xcb-util-renderutil", @@ -24872,7 +24875,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 32 + "dependientes_total": 33 }, "xcb-util-wm": { "iname": "xcb-util-wm", @@ -24899,7 +24902,131 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 32 + "dependientes_total": 33 + }, + "xdg-desktop-portal": { + "iname": "xdg-desktop-portal", + "version": "1.18.4", + "link": "dynamic", + "compiler": "zig-cc", + "deps": [ + "fuse3", + "gdk-pixbuf", + "glib", + "json-glib", + "libffi", + "libpng", + "meson", + "pcre2", + "pipewire", + "pkgconf", + "python3", + "samurai", + "zlib" + ], + "cls": "c", + "queue": "incoming-kde", + "foreign": false, + "hash": "b3:ecbe13f68eca66e5f20cd15ce37f05054d357b5fafb9dbb1753f4fe6e11572b8", + "state": "sealed", + "blocked_by": [], + "unblocks": 0, + "perfiles": [ + "escritorio-kde" + ], + "dependientes_total": 0 + }, + "xdg-desktop-portal-kde": { + "iname": "xdg-desktop-portal-kde", + "version": "6.7.2", + "link": "dynamic", + "compiler": "zig-cc", + "deps": [ + "attica", + "cmake", + "dbus", + "extra-cmake-modules", + "gettext-tiny", + "icu4c", + "karchive", + "kauth", + "kbookmarks", + "kcodecs", + "kcolorscheme", + "kcompletion", + "kconfig", + "kconfigwidgets", + "kcoreaddons", + "kcrash", + "kdbusaddons", + "kglobalaccel", + "kguiaddons", + "ki18n", + "kiconthemes", + "kio", + "kirigami", + "kirigami-addons", + "kitemmodels", + "kitemviews", + "kjobwidgets", + "knotifications", + "kpackage", + "kpipewire", + "kservice", + "kstatusnotifieritem", + "kwayland", + "kwidgetsaddons", + "kwindowsystem", + "kxmlgui", + "layer-shell-qt", + "libX11", + "libXau", + "libXdmcp", + "libXext", + "libXfixes", + "libXi", + "libXrender", + "libdrm", + "libepoxy", + "libjpeg-turbo-shared", + "libpng-shared", + "libxcb", + "libxkbcommon", + "mesa", + "pkgconf", + "plasma-wayland-protocols", + "python3", + "qt5compat", + "qtbase", + "qtdeclarative", + "qtsvg", + "qttools", + "qtwayland", + "samurai", + "solid", + "sonnet", + "wayland", + "wayland-protocols", + "xcb-util", + "xcb-util-cursor", + "xcb-util-image", + "xcb-util-keysyms", + "xcb-util-renderutil", + "xcb-util-wm", + "xorgproto", + "zlib-shared" + ], + "cls": "c", + "queue": "incoming-kde", + "foreign": false, + "hash": "b3:c2f0412b2623befdc21fcf35a8881707911939cd11f96084c8d8fb2a2382658c", + "state": "sealed", + "blocked_by": [], + "unblocks": 0, + "perfiles": [ + "escritorio-kde" + ], + "dependientes_total": 0 }, "xh": { "iname": "xh", @@ -24991,7 +25118,7 @@ "perfiles": [ "escritorio-kde" ], - "dependientes_total": 77 + "dependientes_total": 78 }, "xorriso": { "iname": "xorriso", @@ -25453,7 +25580,7 @@ "escritorio-sway", "servidor" ], - "dependientes_total": 116 + "dependientes_total": 117 }, "zlib-ng": { "iname": "zlib-ng", @@ -25495,7 +25622,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 87 + "dependientes_total": 88 }, "zola": { "iname": "zola", diff --git a/docs/state/drenaje.json b/docs/state/drenaje.json index 0a9e6503..aedc99b9 100644 --- a/docs/state/drenaje.json +++ b/docs/state/drenaje.json @@ -40,7 +40,7 @@ }, "escritorio-kde": { "grafo": "docs/state/build-state-kde.json", - "nodos": 357, + "nodos": 362, "en_deuda": 0, "ondas": 0, "profundidad": 0, diff --git a/docs/state/targets.toml b/docs/state/targets.toml index 1f75a566..3275bbcb 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -268,6 +268,21 @@ paquetes = [ # shell hace `imports.gi.UPowerGlib`, pero powerdevil habla D-Bus con `org.freedesktop.UPower` y # no toca el typelib. Apagarla evita copiar cuatro recetas más de introspección a esta cola. "upower", + # ── PORTALES: sin esto NO SE COMPARTE PANTALLA (añadido 2026-09-09) ─────────────────────────── + # ⚠ Segundo hueco que dejaba a KDE por debajo de una instalación estándar. Medido recorriendo los + # `.service` de D-Bus de TODO el store: los únicos backends de portal sellados eran los de COSMIC + # y GNOME. Ninguno de KDE — y esta cola no tenía ni el frontend. Consecuencia concreta: la imagen + # trae `obs-studio` con su plugin linux-pipewire, que captura pantalla POR EL PORTAL, así que en + # Plasma no tenía con quién hablar mientras en los otros dos ese frente estaba cerrado. + # Van los DOS porque la cadena es de tres: cliente → org.freedesktop.portal.Desktop [frontend] → + # org.freedesktop.impl.portal.* [backend]. El frontend comparte artefacto con el de COSMIC (hash + # idéntico ⇒ un solo directorio en el store, cero builds). + # ⚠ El backend va SIN el portal de impresión, y no es un recorte por comodidad: no hay ninguna + # receta de cups en el catálogo ⇒ qtbase se construyó sin CUPS ⇒ no existe `qcups_p.h` y + # `src/print.cpp` no compila. Un portal de impresión sin con qué imprimir es código muerto. El + # backend tampoco lo ANUNCIA ya en su `kde.portal` (verificado: 0 apariciones de Print), que es lo + # que evita que el frontend enrute a un portal que no contesta. + "xdg-desktop-portal", "xdg-desktop-portal-kde", ] [perfil.escritorio-gnome] diff --git a/recipes/incoming-kde/xdg-desktop-portal-kde.toml b/recipes/incoming-kde/xdg-desktop-portal-kde.toml new file mode 100644 index 00000000..a14015d8 --- /dev/null +++ b/recipes/incoming-kde/xdg-desktop-portal-kde.toml @@ -0,0 +1,135 @@ +# xdg-desktop-portal-kde 6.7.2 — el BACKEND de portales de Plasma, y el segundo de los dos huecos +# que dejaban a KDE por debajo de una instalación estándar. +# +# ══ QUÉ FALTABA, MEDIDO ════════════════════════════════════════════════════════════════════════ +# El 2026-09-09 se recorrieron los `.service` de D-Bus de TODO el store: los únicos backends de +# portal sellados eran `org.freedesktop.impl.portal.desktop.cosmic` y `.desktop.gnome`. **Ninguno de +# KDE**, y la cola `incoming-kde` no tenía ni siquiera el frontend `xdg-desktop-portal`. +# Consecuencia concreta y no hipotética: la imagen KDE trae `obs-studio` con su plugin +# `linux-pipewire`, que captura pantalla **por el portal** — o sea que en Plasma no tenía con quién +# hablar, mientras que en GNOME y COSMIC ese frente está cerrado. Sin portal tampoco hay diálogo de +# fichero ni compartir pantalla para nada que los use. +# +# ══ LA CADENA ES DE TRES, Y ESTE PAQUETE ES EL TERCERO ═════════════════════════════════════════ +# La cabecera de `xdg-desktop-portal.toml` ya lo explica y vale igual acá: +# cliente → org.freedesktop.portal.Desktop → [frontend] → org.freedesktop.impl.portal.* → [este] +# El frontend registra el nombre que los clientes buscan y enruta; **este paquete es el que +# implementa los diálogos con Qt/KF6 y habla con kwin**. Hacen falta LOS DOS: por eso en la misma +# tanda se copió `xdg-desktop-portal` a esta cola (comparte artefacto con el de COSMIC, hash +# idéntico ⇒ cero builds). +# +# ══ VERSIÓN PEGADA A PLASMA, NO LA ÚLTIMA ══════════════════════════════════════════════════════ +# 6.7.2 es la MISMA que `plasma-workspace`, `kwin` y `kscreenlocker` de esta cola. El backend habla +# interfaces privadas de kwin para el ScreenCast, así que desalinear versiones acá no es una +# preferencia: es pedir que dos mitades del mismo release se entiendan por casualidad. +# +# ══ CERO FRONTERA NUEVA ════════════════════════════════════════════════════════════════════════ +# Su `CMakeLists.txt` pide Qt6 (Core, Concurrent, DBus, PrintSupport, QuickWidgets, Widgets, +# WaylandClient, Quick, QuickControls2, Qml), KF6 (CoreAddons, Config, I18n, GlobalAccel, KIO, +# Kirigami, Notifications, Service, WidgetsAddons, WindowSystem, IconThemes, StatusNotifierItem, +# Crash), KWayland, Wayland, PlasmaWaylandProtocols, WaylandProtocols y xkbcommon. +# **Las 22 ya estaban en el catálogo** (verificado una por una antes de escribir esto): no hay una +# sola receta nueva debajo. +# +# ⚠ `kpipewire` va en [deps] aunque el CMakeLists NO la pida: sus QML (`PipeWireDelegate.qml`, +# `PipeWireLayout.qml`) importan el módulo `org.kde.pipewire` para la PREVISUALIZACIÓN del selector +# de pantalla. Es una dep de RUNTIME que ningún `find_package` delata — el patrón de `libnotify` en +# atuq y de `xkbcomp` en xwayland. Sin ella el backend compila, arranca, y el diálogo de compartir +# pantalla sale sin miniatura. +# +# `KIOFuse` se deja fuera: su propio `set_package_properties` la declara `TYPE RUNTIME` y sirve para +# montar URLs remotas, que esta distro no hace. +name = "xdg-desktop-portal-kde" +version = "6.7.2" +# licencia: CONTADAS las etiquetas SPDX de todos los .cpp/.h/.qml del tarball, no leída una y +# generalizada —que es lo que hice primero y salía mal—: 88 ficheros `LGPL-2.0-or-later`, 23 +# `LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL` (la fórmula de KDE e.V. para +# aceptar futuras LGPL) y 1 `GPL-2.0-or-later`. El binario los enlaza a todos, así que la expresión +# es la CONJUNCIÓN. `LicenseRef-KDE-Accepted-LGPL` no tiene texto canónico en licenses/: el guardián +# avisará y no vetará, que es lo correcto. +license = "LGPL-2.0-or-later AND (LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL) AND GPL-2.0-or-later" + +[source] +tarball = "https://download.kde.org/stable/plasma/6.7.2/xdg-desktop-portal-kde-6.7.2.tar.xz" +sha256 = "d09974dda417dfa519dd64d9cd19061c7c091308aa22a7ad8ad32601584ddad0" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +configure = ''' +rm -rf po + +# ⚠ SE QUITA EL PORTAL DE IMPRESIÓN, y no es un atajo: **la distro no tiene stack de impresión**. +# El build muere en `src/print.cpp:27` con `'QtPrintSupport/private/qcups_p.h' file not found`, y la +# cadena causal está medida entera: +# no hay NINGUNA receta de cups en el catálogo ⇒ qtbase 6.11.1 se construyó sin CUPS ⇒ su +# `QtPrintSupport/private/` existe pero sólo trae qpaintengine_alpha_p.h y qprintengine_pdf_p.h, +# NO qcups_p.h ⇒ el backend de impresión no puede compilar. +# O sea que no falta una cabecera: falta el subsistema, y un portal de impresión sin con qué imprimir +# no es una funcionalidad que se pierde, es código muerto que no enlaza. +# Upstream no expone `option()` para portales —se compilan todos—, así que se corta en tres sitios y +# NO en uno solo: la fuente, la instanciación y la lista de interfaces que el backend ANUNCIA. Dejar +# el anuncio sin la implementación sería peor que no tenerlo: el frontend enrutaría a un portal que +# no responde. Cada `sed` lleva su verificación al lado, que es lo que delata un cambio de upstream. +sed -i '/^ *print\.cpp$/d;/^ *print\.h$/d' src/CMakeLists.txt +grep -q 'print\.cpp' src/CMakeLists.txt && { echo '!! print.cpp sigue en las fuentes'; exit 1; } +sed -i '/#include "print\.h"/d;/m_print(new PrintPortal(this))/d' src/desktopportal.cpp +sed -i '/class PrintPortal;/d;/PrintPortal \*const m_print;/d' src/desktopportal.h +grep -q 'PrintPortal' src/desktopportal.cpp src/desktopportal.h && { echo '!! queda PrintPortal'; exit 1; } +# La lista de `Interfaces=` es una sola línea con `;` — se saca sólo el token de Print. +sed -i 's/org\.freedesktop\.impl\.portal\.Print;//' data/kde.portal +grep -q 'impl\.portal\.Print' data/kde.portal && { echo '!! kde.portal sigue anunciando Print'; exit 1; } + +ZW="$PWD/.zwrap"; mkdir -p "$ZW" +cat > "$ZW/cc" <<'W' +#!/bin/sh +a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done +exec /opt/zig/zig cc -mcpu=baseline $a +W +cat > "$ZW/cxx" <<'W' +#!/bin/sh +a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done +exec /opt/zig/zig c++ -mcpu=baseline $a +W +chmod +x "$ZW/cc" "$ZW/cxx" +cmake -B build -G Ninja -Wno-dev \ + -DCMAKE_C_COMPILER="$ZW/cc" -DCMAKE_CXX_COMPILER="$ZW/cxx" -DCMAKE_ASM_COMPILER="$ZW/cc" \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF -DBUILD_TESTING=OFF +''' +compile = "cmake --build build" +install = ''' +set -e +DESTDIR=/out cmake --install build + +# Guardián: lo que hace que este paquete SIRVA es el `.service` de D-Bus con el nombre de backend. +# Sin él el artefacto sella, el binario está en la imagen y el frontend nunca lo encuentra — el +# mismo «instalado ≠ activo» que ya se pagó con las extensiones de GNOME. +test -s /out/usr/share/dbus-1/services/org.freedesktop.impl.portal.desktop.kde.service +# Y el fichero que le dice al frontend QUÉ interfaces implementa este backend. +test -s /out/usr/share/xdg-desktop-portal/portals/kde.portal +''' + +[deps] +# ⚠ RUNTIME: `kpipewire` la importan sus QML por `org.kde.pipewire` para la previsualización del +# selector de pantalla, y ningún find_package la delata. +runtime = ["kpipewire"] +# La clausura ENTERA (las deps de hammer no son transitivas). Base tomada de `spectacle`, que es el +# otro consumidor de Qt6+KF6+wayland de esta cola, menos lo suyo (tesseract/opencv/zxing) y más lo +# que este CMakeLists pide y aquélla no. +build = ["cmake", "samurai", "python3", "pkgconf", "extra-cmake-modules", "qttools", "gettext-tiny", + "qtbase", "qtsvg", "qtdeclarative", "qtwayland", "qt5compat", "dbus", + "wayland", "wayland-protocols", "plasma-wayland-protocols", "kwayland", "layer-shell-qt", + "kcoreaddons", "kconfig", "ki18n", "kglobalaccel", "kio", "kirigami", "kirigami-addons", + "knotifications", "kservice", "kwidgetsaddons", "kwindowsystem", "kiconthemes", + "kstatusnotifieritem", "kcrash", "kdbusaddons", "kxmlgui", "kguiaddons", "kpackage", + "kcolorscheme", "kcompletion", "kjobwidgets", "kconfigwidgets", "kitemviews", "kcodecs", + "karchive", "kbookmarks", "sonnet", "attica", "icu4c", "solid", "kauth", "kitemmodels", + "mesa", "libdrm", "libxkbcommon", "libepoxy", "libpng-shared", "libjpeg-turbo-shared", + "zlib-shared", "libX11", "xorgproto", "libXau", "libXdmcp", "libXext", "libXrender", "libXfixes", + "libXi", "libxcb", "xcb-util", "xcb-util-keysyms", "xcb-util-wm", "xcb-util-image", + "xcb-util-cursor", "xcb-util-renderutil"] diff --git a/recipes/incoming-kde/xdg-desktop-portal.toml b/recipes/incoming-kde/xdg-desktop-portal.toml new file mode 100644 index 00000000..5f0be616 --- /dev/null +++ b/recipes/incoming-kde/xdg-desktop-portal.toml @@ -0,0 +1,101 @@ +# xdg-desktop-portal 1.18.4 — **EL FRONTEND**, y el eslabón que faltaba de verdad. +# +# ── POR QUÉ ESTE PAQUETE Y NO EL BACKEND ──────────────────────────────────────────────────────── +# `cosmic-screenshot` muere con +# The name org.freedesktop.portal.Desktop was not provided by any .service files +# y la tentación es construir `xdg-desktop-portal-cosmic`. No alcanza: ese declara +# `DBUS_NAME = "org.freedesktop.impl.portal.desktop.cosmic"` (`src/main.rs:27`), o sea que es +# **backend** y NO toma el nombre que los clientes buscan. La cadena es de TRES: +# cliente → org.freedesktop.portal.Desktop → [este paquete] → org.freedesktop.impl.portal.* → backend +# Éste es el que registra el nombre, enruta a los backends y aplica la política de permisos. +# +# ── POR QUÉ 1.18.4 Y NO LA ÚLTIMA (1.22.1) ────────────────────────────────────────────────────── +# Por **gstreamer**. Desde la 1.20, `meson.build` pide +# `dependency('gstreamer-pbutils-1.0')` sin `required:` —para validar sonidos de notificación—, y eso +# arrastra gstreamer + gst-plugins-base, que no están en el corpus y son una torre de C entera para +# una función accesoria. La 1.18.4 no lo pide: sus deps duras son glib/gio/gio-unix, json-glib, +# fuse3, gdk-pixbuf y pipewire, y de ésas **la única que faltaba era fuse3**. +# Es un pin deliberado, no una casualidad de versión: el día que se quiera 1.22 el precio es +# gstreamer, y conviene que esté escrito acá. +# +# ── LO QUE SE APAGA ───────────────────────────────────────────────────────────────────────────── +# `libportal` — sólo lo usa el portal de «background»; es otra librería más y no hace falta. +# `geoclue` — no hay servicio de geolocalización en la imagen. +# `systemd` — el PID1 es arje-zero; sin unidades de usuario. +# `sandboxed-image-validation` — valida miniaturas dentro de un `bwrap`; la imagen no trae bwrap. +# Apagarlo NO apaga la validación, la corre sin sandbox (upstream avisa con un +# `warning()`), que es lo que corresponde en una imagen donde el portal ya corre como +# el mismo usuario que las aplicaciones. +# `docbook-docs`/`pytest` — documentación y tests. +name = "xdg-desktop-portal" +version = "1.18.4" +license = "LGPL-2.1-or-later" + +[source] +tarball = "https://github.com/flatpak/xdg-desktop-portal/releases/download/1.18.4/xdg-desktop-portal-1.18.4.tar.xz" +sha256 = "b858aa1e74e80c862790dbb912906e6eab8b1e4db9339cd759473af62b461e65" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +zig_version = "0.13.0" + +[build.phases] +# ── EL CHOQUE DE gvdb, Y POR QUÉ `--allow-multiple-definition` ACÁ ES CORRECTO Y NO UN PARCHE ─── +# ld.lld: error: duplicate symbol: gvdb_table_get_table +# >>> document-portal/xdg-permission-store.p/gvdb_gvdb-reader.c.o +# >>> .._subprojects_gvdb_gvdb-reader.c.o in archive /usr/lib/libgio-2.0.a +# El portal trae su copia vendorizada de gvdb en `document-portal/gvdb/`, y **glib también la lleva +# adentro** (la usa para GSettings). Con glib DINÁMICA esos símbolos quedan escondidos dentro del +# `.so` y nadie choca; con la ESTÁTICA el `.a` los expone y el enlazador ve dos definiciones. Es el +# mismo fenómeno que hace «cara» a la glib estática. +# +# **Se resuelve RENOMBRANDO los diez símbolos del lector con `-D`**, que es lo que queda cuando se +# descartan los otros dos caminos —y los dos se descartaron por medición, no por gusto: +# +# · `-Wl,--allow-multiple-definition` (o `-z muldefs`): **zig-cc no lo acepta**. Falla con +# `error: unsupported linker arg: --allow-multiple-definition` durante el chequeo de cordura, y +# meson lo reporta como `ERROR: Compiler takana-zig-cc cannot compile programs` — un mensaje que +# manda a buscar el problema en el compilador cuando está en la bandera. (De paso: pasarla por +# `-Dc_link_args=` tampoco sirve, porque las opciones de lista de meson se parten por COMAS y +# `-Wl,--allow-multiple-definition` llega como dos elementos.) +# · Ir a `glib-shared` **no sería cambiar una dep sino abrir una cadena**: json-glib y gdk-pixbuf +# también enlazan glib, y mezclar una glib dinámica con dos estáticas en el mismo proceso es +# justo el problema de las dos glib que la campaña GNOME midió y evitó. Habría que rehacer los +# tres y meter la glib compartida en la imagen. +# +# El renombrado es total y por eso es seguro: el `-D` afecta a la vez a la DEFINICIÓN +# (`gvdb-reader.c`) y a los USOS, porque todos pasan por `gvdb-reader.h`. El binario queda con el par +# lector+constructor de la copia del portal, coherente — que importa porque glib empaqueta +# únicamente el LECTOR (para GSettings) y el CONSTRUCTOR (`gvdb-builder.c`) existe sólo acá. +# +# Va por `CFLAGS` y no por `-Dc_args=` por el mismo problema de las comas. +# +# El `sed` saca aparte `subdir('tests')`, que en 1.18.4 es INCONDICIONAL —no hay opción de meson que +# lo apague— y compila binarios de prueba que no se instalan. +# +# Ojo con el `sed`: **borrar la línea a secas no basta**. En meson `subdir()` comparte el ámbito de +# variables, y `tests/meson.build:276` define `enable_pytest`, que el `summary()` de la raíz lee en +# `meson.build:201` — al sacar el `subdir` la configuración muere con +# `ERROR: Unknown variable "enable_pytest"`. Por eso se SUSTITUYE por la asignación, en vez de +# borrar: el subdirectorio no es sólo trabajo, también es una dependencia de datos. +configure = ''' +rm -rf output +sed -i "s/^subdir('tests')$/enable_pytest = false/" meson.build +GVDB="" +for s in table_free table_get_names table_get_raw_value table_get_table table_get_value \ + table_has_value table_is_valid table_list table_new table_new_from_bytes; do + GVDB="$GVDB -Dgvdb_$s=xdp_gvdb_$s" +done +export CFLAGS="$GVDB" +PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dlibportal=disabled -Dgeoclue=disabled -Dsystemd=disabled -Dsandboxed-image-validation=false -Ddocbook-docs=disabled -Dpytest=disabled -Dinstalled-tests=false +''' +compile = "ninja -C output" +install = "DESTDIR=/out ninja -C output install" + +[deps] +# glib aporta gio/gio-unix **y `gdbus-codegen`**, que el build usa para generar los stubs de las +# ~20 interfaces de portal a partir de los XML de `data/`. libffi/pcre2/zlib son la clausura de +# pkg-config que declara el `.pc` de glib; libpng la que declara el de gdk-pixbuf. +build = ["meson", "samurai", "python3", "pkgconf", "glib", "json-glib", "fuse3", "gdk-pixbuf", "pipewire", "libffi", "pcre2", "zlib", "libpng"]