Files
hammer/recipes/incoming-kde/qtbase.toml
T
sergioandClaude Opus 5 fe474dab63 licencias: 994 de 1141 (87%) — cerradas las familias Qt, freedesktop, kernel.org y PyPI
Tercera tanda curada, agrupada por la URL DE FUENTE de cada receta (que es la evidencia que
el nombre no da): los once módulos Qt sin prefijo, freedesktop (dbus, libinput, libevdev,
libdisplay-info, poppler, pulseaudio, upower, NetworkManager, ModemManager, polkit),
kernel.org (los tres kernels, linux-headers, git, iproute2, libuuid) y PyPI.

Los kernels llevan `GPL-2.0-only WITH Linux-syscall-note` explícita. No es adorno: sin esa
excepción, todo binario de espacio de usuario que hace un syscall sería obra derivada del
kernel. Es exactamente el tipo de dato que un campo de licencia existe para no perder.

Quedan 147 sin declarar: 69 de GitHub donde la propia API dice NOASSERTION (hay que abrir
el fuente), 20 de tawasuyu —que son nuestras o del otro agente, así que la licencia la
decide el usuario, no yo— y el resto repartido en GNOME, gitlab.freedesktop y sueltos.
Más 71 con SPDX ambiguo pendientes de desambiguar (`licencias.sh --revisar`).

Hashes verificados otra vez sobre 20 recetas tocadas: 20 idénticos, 0 cambiados.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 13:29:31 -04:00

134 lines
7.2 KiB
TOML

# qt6-qtbase 6.11.1 — el corazón de Qt6, base de todo KDE. Etapa Escritorio / campaña KDE (ADR 0011).
# De-Alpinizada del APKBUILD community/qt6-qtbase: se conservan sus 3 parches de musl (LFS64, DNS
# resolver, symlinks) — el trabajo de portabilidad que un import de nix pierde — y se reescriben las
# fases desde el wrapper abuild a CMake/Ninja explícito.
#
# POLÍTICA DE LA CAPA GUI (ADR 0011): link=DINÁMICO. Qt carga plugins .so en runtime (QPA, formatos,
# estilos); un Qt estático no abre una ventana. Se abandona el -static del userland CLI (no re-hashea
# nada sellado). BUILD_SHARED_LIBS=ON (default de Qt) ⇒ libQt6Core.so, etc.
#
# MINIMAL PARA EL GATE H-Qt: Wayland-only (xcb OFF ⇒ toda la cadena xcb-util-* fuera del camino
# crítico), icu OFF (Qt usa su fallback), vulkan OFF (se reactiva para KWin), double-conversion y
# libb2 BUNDLED (Qt trae 3rdparty ⇒ no necesitan receta), cups/at-spi/libproxy/tslib/DB-no-sqlite OFF.
# Con esto qtbase compila reusando SOLO deps ya selladas (freetype/fontconfig/harfbuzz/glib/mesa/
# wayland/openssl/sqlite/pcre2/zlib/libpng/libjpeg-turbo/dbus/libxkbcommon) — CERO recetas nuevas.
#
# NOTA compiler: Qt6 es el stress-test C++ más grande del lab. Se intenta zig-cc primero (coherente
# con el resto); si el C++ a escala lo rompe, caer a gcc-de-gueto (patrón kernel/cmake, ADR 0011).
# IPO/LTO OFF para el gate: reduce riesgo y tiempo; se puede reactivar tras validar.
name = "qt6-qtbase"
version = "6.11.1"
license = "LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"
[source]
tarball = "https://download.qt.io/official_releases/qt/6.11/6.11.1/submodules/qtbase-everywhere-src-6.11.1.tar.xz"
sha256 = "d9594a31228aa23ad6b531719a29b45f0f3989fe6c136d45767ea179f233c1ac"
patches = ["0001-qt6-qtbase-lfs64.patch", "0002-qt6-qtbase-dns-resolver.patch", "symlinks.patch"]
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
flags = []
[build.phases]
configure = '''
# El sandbox expone cc/c++ como symlinks a zig (despacho por argv[0]). CMake CANONICALIZA el symlink
# al binario real /opt/zig/zig, perdiendo el basename 'cc' ⇒ al invocar el compilador directo (ASM,
# custom commands de Qt) corre `/opt/zig/zig -std=… archivo` y zig lee -std como subcomando → falla.
# Fix (patrón AR-wrapper): scripts reales que fuerzan `zig cc`/`zig c++`; un script no se canonicaliza.
# Se replica -mcpu=baseline del wrapper del lab (coherencia con las deps ya selladas). Los wrappers
# van al ÁRBOL DE FUENTE ($PWD/.zwrap, persiste entre fases) — /tmp se vacía entre configure y compile.
ZW="$PWD/.zwrap"; mkdir -p "$ZW"
printf '#!/bin/sh\nexec /opt/zig/zig cc -mcpu=baseline "$@"\n' > "$ZW/cc"
printf '#!/bin/sh\nexec /opt/zig/zig c++ -mcpu=baseline "$@"\n' > "$ZW/cxx"
chmod +x "$ZW/cc" "$ZW/cxx"
# PKG_CONFIG_PATH explícito: la QPA xcb de Qt hace pkg_check_modules(xkbcommon-x11) para crear el target
# PkgConfig::XKB_COMMON_X11; sin la ruta, no lo halla y target_link_libraries(XcbQpaPrivate) aborta.
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig
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_INTERPROCEDURAL_OPTIMIZATION=OFF \
-DINSTALL_BINDIR=lib/qt6/bin \
-DINSTALL_PUBLICBINDIR=bin \
-DINSTALL_LIBEXECDIR=lib/qt6/libexec \
-DINSTALL_ARCHDATADIR=lib/qt6 \
-DINSTALL_DATADIR=share/qt6 \
-DINSTALL_INCLUDEDIR=include/qt6 \
-DINSTALL_MKSPECSDIR=lib/qt6/mkspecs \
-DQT_FEATURE_relocatable=OFF \
-DQT_FEATURE_reduce_relocations=OFF \
-DQT_FEATURE_journald=OFF \
-DQT_FEATURE_icu=OFF \
-DQT_FEATURE_vulkan=OFF \
-DQT_FEATURE_xcb=ON \
-DQT_FEATURE_xcb_xlib=ON \
-DQT_FEATURE_xlib=ON \
-DQT_FEATURE_libproxy=OFF \
-DQT_FEATURE_cups=OFF \
-DQT_FEATURE_libinput=OFF \
-DQT_FEATURE_accessibility=ON \
-DQT_FEATURE_system_doubleconversion=OFF \
-DQT_FEATURE_libb2=OFF \
-DQT_FEATURE_sql=ON \
-DQT_FEATURE_sql_sqlite=ON \
-DQT_FEATURE_system_sqlite=OFF \
-DQT_FEATURE_openssl=ON \
-DQT_FEATURE_openssl_linked=ON \
-DQT_FEATURE_ssl=ON \
-DQT_FEATURE_system_zlib=ON \
-DQT_FEATURE_system_libpng=OFF \
-DQT_FEATURE_system_libjpeg=OFF \
-DQT_FEATURE_system_freetype=OFF \
-DQT_FEATURE_system_harfbuzz=OFF \
-DQT_FEATURE_system_pcre2=ON \
-DQT_FEATURE_fontconfig=OFF \
-DQT_FEATURE_glib=OFF \
-DQT_FEATURE_opengl=ON \
-DQT_FEATURE_egl=ON \
-DQT_FEATURE_dbus=ON \
-DQT_FEATURE_widgets=ON \
-DQT_BUILD_EXAMPLES=OFF \
-DQT_BUILD_TESTS=OFF
'''
compile = "cmake --build build"
install = "DESTDIR=/out cmake --install build"
[deps]
# Sólo deps YA selladas + toolchain. double-conversion/libb2/icu/vulkan/xcb/cups quedan bundled u OFF.
# dbus AÑADIDO: KF6 entero exige Qt6DBus ⇒ qtbase con dbus=ON linkea libdbus (variante incoming-kde).
build = [
"cmake", "samurai", "python3", "pkgconf", "dbus",
"pcre2", "zlib",
"wayland", "wayland-protocols", "libxkbcommon", "mesa",
"openssl",
# Cadena Qt-xcb (QT_FEATURE_xcb=ON): la QPA X11 de Qt. libxkbcommon aquí es la variante enable-x11
# (override incoming-kde) que provee libxkbcommon-x11.so + xkbcommon-x11.pc. **CRÍTICO: libXau+libXdmcp**
# — el gate `xkbcommon-x11` de Qt usa `pkg_check_modules(IMPORTED_TARGET)` que resuelve TODO el árbol
# Requires: xkbcommon-x11→xcb→(xau,xdmcp Requires.private de xcb.pc). Sin xau.pc/xdmcp.pc el target
# PkgConfig::XKB_COMMON_X11 NO se crea y XcbQpaPrivate aborta. (Gotcha .pc transitivo, mismo de todo
# consumidor de xcb.) PKG_CONFIG_PATH explícito arriba p/ que pkg-config vea /usr/lib+share/pkgconfig.
"libxcb", "libXau", "libXdmcp", "libX11", "libXext", "libXrender", "libXi", "libXfixes",
"xcb-util", "xcb-util-image", "xcb-util-renderutil", "xcb-util-cursor",
"xcb-util-keysyms", "xcb-util-wm", "xorgproto", "xtrans",
]
# NOTA gate (ADR 0011, tensión estático↔dinámico): libQt6Core.so LINKEA bien con las deps estáticas
# del closure (glib/pcre2 son PIC-compatibles; zlib entra como libz.so). Lo que ROMPE el .so son libs
# selladas como archive estático SIN -fPIC. Apagado para el gate (una ventana Qt no los necesita):
# · dbus → FEATURE_dbus=OFF: recipe dbus canónico falla en granja (meson no ve glib-2.0).
# · sql → FEATURE_sql=OFF: sqlite canónico estático sin -fPIC (+ sin COLUMN_METADATA).
# · openssl → FEATURE_openssl/ssl=OFF: libcrypto.a/libssl.a estáticas sin -fPIC (EVP_SKEYMGMT_free).
# · glib → FEATURE_glib=OFF: el glib.a sellado deja símbolos indefinidos bajo -Wl,--no-undefined
# (g_hmac_ref/g_strv_builder_ref/…); GTK4 lo linkea sin --no-undefined y no lo expone.
# Qt trae su propio event loop ⇒ glib es opcional para una ventana.
# · fuentes/imágenes → system_{freetype,harfbuzz,libpng,libjpeg}=OFF + fontconfig=OFF: el link
# estático NO arrastra deps transitivas (fontconfig.a → símbolos expat XML_* indefinidos,
# el .pc sellado no las declara). En vez de iterar lib-por-lib, se BUNDLEAN en Qt (PIC
# internos, cierre completo). zlib/pcre2 SÍ se reusan (entran limpio: libz.so, pcre2.a PIC).
# DEUDA Capa 0/1: para reusar el stack sellado en KDE, hace falta el closure C shared-PIC y .pc con
# Requires.private completo (expat, etc.); mientras, el gate bundlea fuentes/imágenes.