From 31fe5eb937f7c4fa3770e6d3e834f6f0d7365f75 Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 14 Jul 2026 08:44:40 -0400 Subject: [PATCH] =?UTF-8?q?kde/Plasma:=20gwenview=2025.04.3=20(7ma=20app,?= =?UTF-8?q?=20visor=20im=C3=A1genes)=20+=20phonon/exiv2=20+=20shared=20ima?= =?UTF-8?q?ge=20libs=20+=20fix=20zlib=20versionado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gwenview sella (1d2bb09d). NEEDED verificado: libexiv2.so.28 + libjpeg.so.62 + libpng16.so.16 + liblcms2.so.2 + libphonon4qt6.so.4. Deps nuevas: phonon 4.12.0 (f0cdba38, multimedia REQUIRED, recorte Qt6-mín) + exiv2 0.28.5 (3eebcce9, EXIF REQUIRED vía FindLibExiv2 de ECM, minimal sólo-zlib + fix -Wno-error=date-time). kImageAnnotator degradado a OPTIONAL. Más deuda Capa 0 (static→shared/PIC): libjpeg-turbo-shared (2c0dca7f, libjpeg.so.8) + libpng-shared (bf8f7724, libpng16.so.16) — el .a canónico no enlaza en gwenviewlib.so. FIX SOBERANÍA zlib versionado: zlib-shared re-hecho con -Wl,--version-script,zlib.map ⇒ ahora exporta compressBound@@ZLIB_1.2.0 e inflateReset2@@ZLIB_1.2.3.4. Qt6 (libQt6Core/Gui) NEEDED esos @tags; el libz.so previo (--whole-archive sin mapa) sólo daba nombres pelados → ld.lld fallaba con --no-allow-shlib-undefined y Qt caía en runtime a la libz de Alpine (fuga). El .so versionado satisface consumidores versionados y no-versionados. Apps: konsole+dolphin+kate+kcalc+ark+filelight+gwenview. Co-Authored-By: Claude Opus 4.8 --- recipes/incoming-kde/exiv2.toml | 46 +++++++++++++++ recipes/incoming-kde/gwenview.toml | 57 +++++++++++++++++++ .../incoming-kde/libjpeg-turbo-shared.toml | 24 ++++++++ recipes/incoming-kde/libpng-shared.toml | 23 ++++++++ recipes/incoming-kde/phonon.toml | 48 ++++++++++++++++ recipes/incoming-kde/zlib-shared.toml | 15 +++-- 6 files changed, 207 insertions(+), 6 deletions(-) create mode 100644 recipes/incoming-kde/exiv2.toml create mode 100644 recipes/incoming-kde/gwenview.toml create mode 100644 recipes/incoming-kde/libjpeg-turbo-shared.toml create mode 100644 recipes/incoming-kde/libpng-shared.toml create mode 100644 recipes/incoming-kde/phonon.toml diff --git a/recipes/incoming-kde/exiv2.toml b/recipes/incoming-kde/exiv2.toml new file mode 100644 index 00000000..9ed90425 --- /dev/null +++ b/recipes/incoming-kde/exiv2.toml @@ -0,0 +1,46 @@ +# exiv2 0.28.5 — lectura/escritura de metadatos de imagen EXIF/IPTC (libexiv2.so). Campaña KDE (ADR 0011): +# gwenview lo exige TYPE REQUIRED (soporte de metadatos de imagen). +# +# CMake + wrapper zig. Minimal: sólo PNG(zlib). XMP(expat+brotli), BMFF/Brotli, inih y NLS OFF ⇒ única dep +# runtime = libz.so (zlib-shared). Sin CLI ni samples. +name = "exiv2" +version = "0.28.5" + +[source] +tarball = "https://github.com/Exiv2/exiv2/archive/refs/tags/v0.28.5.tar.gz" +sha256 = "e1671f744e379a87ba0c984617406fdf8c0ad0c594e5122f525b2fb7c28d394d" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +configure = ''' +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_CXX_FLAGS="-Wno-error=date-time" \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \ + -DBUILD_SHARED_LIBS=ON -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_XMP=OFF -DEXIV2_ENABLE_BMFF=OFF -DEXIV2_ENABLE_BROTLI=OFF \ + -DEXIV2_ENABLE_INIH=OFF -DEXIV2_ENABLE_NLS=OFF -DEXIV2_ENABLE_WEBREADY=OFF \ + -DEXIV2_BUILD_SAMPLES=OFF -DEXIV2_BUILD_EXIV2_COMMAND=OFF -DEXIV2_BUILD_UNIT_TESTS=OFF +''' +compile = "cmake --build build" +install = "DESTDIR=/out cmake --install build" + +[deps] +build = ["cmake", "samurai", "python3", "pkgconf", "zlib-shared"] diff --git a/recipes/incoming-kde/gwenview.toml b/recipes/incoming-kde/gwenview.toml new file mode 100644 index 00000000..249a3cba --- /dev/null +++ b/recipes/incoming-kde/gwenview.toml @@ -0,0 +1,57 @@ +# gwenview 25.04.3 — el visor de imágenes de KDE. 7ma APP del escritorio. +# Patrón KF6 app (dynamic, wrapper zig, ECM). Deps nuevas: phonon (sonido slideshow, REQUIRED) + exiv2 +# (metadatos EXIF, REQUIRED; localizado por el FindLibExiv2.cmake de ECM). Imagen: libjpeg-turbo-shared + +# libpng-shared (variantes .so/PIC; el .a canónico no enlaza en gwenviewlib.so) + lcms2 (color, REQUIRED). +# kImageAnnotator (anotación, ksnip) se degrada a OPTIONAL (el código guarda con KIMAGEANNOTATOR_FOUND). +name = "gwenview" +version = "25.04.3" + +[source] +tarball = "https://download.kde.org/stable/release-service/25.04.3/src/gwenview-25.04.3.tar.xz" +sha256 = "59bf9fc4a4be87260781ccb5872212484b697caa53fa0ee7e128bdb08eaf5e87" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +configure = ''' +rm -rf po doc +sed -i '/add_subdirectory(doc)/d' CMakeLists.txt +sed -i '/kdoctools_install/d' CMakeLists.txt +# kImageAnnotator-Qt6: REQUIRED → OPTIONAL (no lo tenemos; anotación deshabilitada). +sed -i '/kImageAnnotator-Qt6 PROPERTIES/ s/TYPE REQUIRED/TYPE OPTIONAL/' CMakeLists.txt +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 = "DESTDIR=/out cmake --install build" + +[deps] +build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "qtsvg", "qtwayland", "dbus", + "extra-cmake-modules", "qttools", "gettext-tiny", "mesa", "libdrm", "libxkbcommon", "wayland", + "wayland-protocols", "plasma-wayland-protocols", "qtdeclarative", + "phonon", "exiv2", "libjpeg-turbo-shared", "libpng-shared", "zlib-shared", "lcms2", + "kio", "kitemmodels", "ki18n", "kparts", "kwindowsystem", "kiconthemes", "knotifications", + "kguiaddons", "kwidgetsaddons", "kcrash", + "kcoreaddons", "kservice", "kbookmarks", "kjobwidgets", "kcompletion", "kcodecs", "kcolorscheme", + "kconfig", "kconfigwidgets", "kxmlgui", "kitemviews", "solid", "sonnet", "karchive", "attica", + "kglobalaccel", "kauth", "icu4c", "ktextwidgets", "kirigami", + "libX11", "xorgproto", "libXau", "libXdmcp", "libXext", "libXrender", "libXfixes", "libXi", + "libxcb", "xcb-util", "xcb-util-keysyms", "xcb-util-wm", "xcb-util-image", "xcb-util-renderutil"] diff --git a/recipes/incoming-kde/libjpeg-turbo-shared.toml b/recipes/incoming-kde/libjpeg-turbo-shared.toml new file mode 100644 index 00000000..44f74cee --- /dev/null +++ b/recipes/incoming-kde/libjpeg-turbo-shared.toml @@ -0,0 +1,24 @@ +# libjpeg-turbo-shared 3.1.3 — variante DINÁMICA (libjpeg.so.8 + libturbojpeg.so.0, PIC) para el +# escritorio KDE. El canónico (recipes/incoming-kde/libjpeg-turbo.toml) es ENABLE_SHARED=0 (sólo .a sin +# PIC) ⇒ no enlaza dentro de un .so ('R_X86_64_32S ... recompile with -fPIC', jpeg_nbits_table). Como +# zlib-shared/bzip2-shared. Nombre distinto para no colisionar con el canónico. gwenview lo linkea. +name = "libjpeg-turbo-shared" +version = "3.1.3" + +[source] +tarball = "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.1.3/libjpeg-turbo-3.1.3.tar.gz" +sha256 = "075920b826834ac4ddf97661cc73491047855859affd671d52079c6867c1c6c0" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +configure = "cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release -DENABLE_SHARED=1 -DENABLE_STATIC=0 -DWITH_SIMD=0" +compile = "cmake --build build" +install = "DESTDIR=/out cmake --install build" + +[deps] +build = ["cmake", "samurai"] diff --git a/recipes/incoming-kde/libpng-shared.toml b/recipes/incoming-kde/libpng-shared.toml new file mode 100644 index 00000000..cb9c9ad0 --- /dev/null +++ b/recipes/incoming-kde/libpng-shared.toml @@ -0,0 +1,23 @@ +# libpng-shared 1.6.58 — variante DINÁMICA (libpng16.so.16, PIC) para el escritorio KDE. El canónico +# (recipes/libpng.toml) es --disable-shared (sólo libpng16.a sin PIC) ⇒ no enlaza dentro de un .so. Como +# zlib-shared/xz-shared: autotools --enable-shared, zig-cc, contra zlib-shared (libz.so). gwenview linkea. +name = "libpng-shared" +version = "1.6.58" + +[source] +tarball = "https://downloads.sourceforge.net/libpng/libpng-1.6.58.tar.gz" +sha256 = "8c9b05b675ca7301a458df2c2e46f26e1d41ff36b8863f8c33530bc58c2e6225" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static CPPFLAGS=-I/usr/include LDFLAGS=-L/usr/lib' +compile = 'make -j"$(nproc)"' +install = "make DESTDIR=/out install && find /out -name '*.la' -delete" + +[deps] +build = ["zlib-shared", "pkgconf"] diff --git a/recipes/incoming-kde/phonon.toml b/recipes/incoming-kde/phonon.toml new file mode 100644 index 00000000..4eb6666f --- /dev/null +++ b/recipes/incoming-kde/phonon.toml @@ -0,0 +1,48 @@ +# phonon 4.12.0 — framework multimedia de KDE (libphonon4qt6.so). Abstracción sobre backends de audio/ +# video (vlc/gstreamer, RUNTIME). Campaña KDE (ADR 0011): gwenview lo exige REQUIRED (sonido de slideshow). +# +# CMake + wrapper zig. Se recorta a la lib Qt6 mínima: sin designer-plugin (Qt6Designer), sin experimental +# (Qt6Core5Compat), sin Qt5, sin settings-GUI. Sólo Core/Gui/Widgets. Sin backend: silencioso pero enlaza. +name = "phonon" +version = "4.12.0" + +[source] +tarball = "https://download.kde.org/stable/phonon/4.12.0/phonon-4.12.0.tar.xz" +sha256 = "3287ffe0fbcc2d4aa1363f9e15747302d0b080090fe76e5f211d809ecb43f39a" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +configure = ''' +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 \ + -DPHONON_BUILD_QT5=OFF -DPHONON_BUILD_QT6=ON \ + -DPHONON_BUILD_EXPERIMENTAL=OFF -DPHONON_BUILD_DESIGNER_PLUGIN=OFF \ + -DPHONON_BUILD_DEMOS=OFF -DPHONON_BUILD_SETTINGS=OFF -DPHONON_BUILD_DOC=OFF +''' +compile = "cmake --build build" +install = "DESTDIR=/out cmake --install build" + +[deps] +build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "extra-cmake-modules", "qttools", + "qt5compat", "gettext-tiny", "mesa", "libdrm", "libxkbcommon", "wayland", + "libX11", "xorgproto", "libXau", "libXdmcp", "libXext", "libXrender", "libXfixes", "libXi", + "libxcb", "xcb-util", "xcb-util-keysyms", "xcb-util-wm", "xcb-util-image", "xcb-util-renderutil"] diff --git a/recipes/incoming-kde/zlib-shared.toml b/recipes/incoming-kde/zlib-shared.toml index 45106ccb..35b0de5c 100644 --- a/recipes/incoming-kde/zlib-shared.toml +++ b/recipes/incoming-kde/zlib-shared.toml @@ -6,8 +6,14 @@ # soberanía, deuda static↔dinámico de Capa 0). Esta variante sella el `libz.so.1` soberano: los `.so` de # KDE ya tienen NEEDED libz.so.1 (mismo soname), así que basta hidratar este artefacto — sin rebuild de KDE. # -# Build shared: el configure a mano de zlib genera libz.so.1.3.1 + symlinks libz.so.1/libz.so por defecto -# (sin --static). -fPIC/-O2/-fno-sanitize=undefined igual que la canónica (evita el runtime UBSan de zig). +# Build shared: el configure de zlib aborta bajo zig cc ("compiler error reporting too harsh"), así que se +# fabrica el libz.so.1 a mano del libz.a PIC con --whole-archive. CLAVE (fix soberanía): se pasa el +# --version-script=zlib.map del propio tarball ⇒ el .so exporta los símbolos VERSIONADOS (ZLIB_1.2.0 +# compressBound, ZLIB_1.2.3.4 inflateReset2, …). Qt6 (libQt6Core/Gui) fue enlazado contra un zlib +# versionado y NEEDED esos @tags; sin el mapa, un libz.so con nombres pelados no resolvía +# inflateReset2@ZLIB_1.2.3.4 al enlazar gwenview (--no-allow-shlib-undefined) y Qt caía en runtime a la +# libz.so.1 de Alpine (fuga). El .so versionado satisface consumidores versionados Y no-versionados. +# -fPIC/-O2/-fno-sanitize=undefined igual que la canónica (evita el runtime UBSan de zig). name = "zlib-shared" version = "1.3.1" @@ -21,10 +27,7 @@ compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" -# zlib configure a-mano no construye el .so con el CC multi-palabra de zig ⇒ fabricamos libz.so.1 del -# libz.a PIC con --whole-archive (truco documentado de Capa 0). El soname libz.so.1 es el que NEEDED todo -# el stack KDE. Symlinks libz.so.1→.1.3.1 y libz.so→.1 para el loader y el linker. [build.phases] configure = "CFLAGS='-fPIC -O2 -fno-sanitize=undefined' ./configure --prefix=/usr --static" -compile = "make -j\"$(nproc)\" && ${CC:-zig cc} -shared -Wl,-soname,libz.so.1 -Wl,--whole-archive libz.a -Wl,--no-whole-archive -o libz.so.1.3.1" +compile = "make -j\"$(nproc)\" && ${CC:-zig cc} -shared -Wl,-soname,libz.so.1 -Wl,--version-script,zlib.map -Wl,--whole-archive libz.a -Wl,--no-whole-archive -o libz.so.1.3.1" install = "make install DESTDIR=/out && install -Dm755 libz.so.1.3.1 /out/usr/lib/libz.so.1.3.1 && ln -sf libz.so.1.3.1 /out/usr/lib/libz.so.1 && ln -sf libz.so.1 /out/usr/lib/libz.so"