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…

⎇ main recipes/incoming-kde/qtbase.toml TOML · 133 lines · 7.2 KB History raw

licencias: 994 de 1141 (87%) — cerradas las familias Qt, freedesktop, kernel.org y PyPI fe474dab6 · sergio ·

1# qt6-qtbase 6.11.1 — el corazón de Qt6, base de todo KDE. Etapa Escritorio / campaña KDE (ADR 0011).
2# De-Alpinizada del APKBUILD community/qt6-qtbase: se conservan sus 3 parches de musl (LFS64, DNS
3# resolver, symlinks) — el trabajo de portabilidad que un import de nix pierde — y se reescriben las
4# fases desde el wrapper abuild a CMake/Ninja explícito.
5#
6# POLÍTICA DE LA CAPA GUI (ADR 0011): link=DINÁMICO. Qt carga plugins .so en runtime (QPA, formatos,
7# estilos); un Qt estático no abre una ventana. Se abandona el -static del userland CLI (no re-hashea
8# nada sellado). BUILD_SHARED_LIBS=ON (default de Qt) ⇒ libQt6Core.so, etc.
9#
10# MINIMAL PARA EL GATE H-Qt: Wayland-only (xcb OFF ⇒ toda la cadena xcb-util-* fuera del camino
11# crítico), icu OFF (Qt usa su fallback), vulkan OFF (se reactiva para KWin), double-conversion y
12# libb2 BUNDLED (Qt trae 3rdparty ⇒ no necesitan receta), cups/at-spi/libproxy/tslib/DB-no-sqlite OFF.
13# Con esto qtbase compila reusando SOLO deps ya selladas (freetype/fontconfig/harfbuzz/glib/mesa/
14# wayland/openssl/sqlite/pcre2/zlib/libpng/libjpeg-turbo/dbus/libxkbcommon) — CERO recetas nuevas.
15#
16# NOTA compiler: Qt6 es el stress-test C++ más grande del lab. Se intenta zig-cc primero (coherente
17# con el resto); si el C++ a escala lo rompe, caer a gcc-de-gueto (patrón kernel/cmake, ADR 0011).
18# IPO/LTO OFF para el gate: reduce riesgo y tiempo; se puede reactivar tras validar.
19name    = "qt6-qtbase"
20version = "6.11.1"
21license = "LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"
22
23[source]
24tarball = "https://download.qt.io/official_releases/qt/6.11/6.11.1/submodules/qtbase-everywhere-src-6.11.1.tar.xz"
25sha256  = "d9594a31228aa23ad6b531719a29b45f0f3989fe6c136d45767ea179f233c1ac"
26patches = ["0001-qt6-qtbase-lfs64.patch", "0002-qt6-qtbase-dns-resolver.patch", "symlinks.patch"]
27
28[build]
29compiler = "zig-cc"
30target   = "x86_64-linux-musl"
31link     = "dynamic"
32flags    = []
33
34[build.phases]
35configure = '''
36# El sandbox expone cc/c++ como symlinks a zig (despacho por argv[0]). CMake CANONICALIZA el symlink
37# al binario real /opt/zig/zig, perdiendo el basename 'cc' ⇒ al invocar el compilador directo (ASM,
38# custom commands de Qt) corre `/opt/zig/zig -std=… archivo` y zig lee -std como subcomando → falla.
39# Fix (patrón AR-wrapper): scripts reales que fuerzan `zig cc`/`zig c++`; un script no se canonicaliza.
40# Se replica -mcpu=baseline del wrapper del lab (coherencia con las deps ya selladas). Los wrappers
41# van al ÁRBOL DE FUENTE ($PWD/.zwrap, persiste entre fases) — /tmp se vacía entre configure y compile.
42ZW="$PWD/.zwrap"; mkdir -p "$ZW"
43printf '#!/bin/sh\nexec /opt/zig/zig cc -mcpu=baseline "$@"\n'  > "$ZW/cc"
44printf '#!/bin/sh\nexec /opt/zig/zig c++ -mcpu=baseline "$@"\n' > "$ZW/cxx"
45chmod +x "$ZW/cc" "$ZW/cxx"
46# PKG_CONFIG_PATH explícito: la QPA xcb de Qt hace pkg_check_modules(xkbcommon-x11) para crear el target
47# PkgConfig::XKB_COMMON_X11; sin la ruta, no lo halla y target_link_libraries(XcbQpaPrivate) aborta.
48export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig
49cmake -B build -G Ninja -Wno-dev \
50  -DCMAKE_C_COMPILER="$ZW/cc" \
51  -DCMAKE_CXX_COMPILER="$ZW/cxx" \
52  -DCMAKE_ASM_COMPILER="$ZW/cc" \
53  -DCMAKE_BUILD_TYPE=Release \
54  -DCMAKE_INSTALL_PREFIX=/usr \
55  -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \
56  -DINSTALL_BINDIR=lib/qt6/bin \
57  -DINSTALL_PUBLICBINDIR=bin \
58  -DINSTALL_LIBEXECDIR=lib/qt6/libexec \
59  -DINSTALL_ARCHDATADIR=lib/qt6 \
60  -DINSTALL_DATADIR=share/qt6 \
61  -DINSTALL_INCLUDEDIR=include/qt6 \
62  -DINSTALL_MKSPECSDIR=lib/qt6/mkspecs \
63  -DQT_FEATURE_relocatable=OFF \
64  -DQT_FEATURE_reduce_relocations=OFF \
65  -DQT_FEATURE_journald=OFF \
66  -DQT_FEATURE_icu=OFF \
67  -DQT_FEATURE_vulkan=OFF \
68  -DQT_FEATURE_xcb=ON \
69  -DQT_FEATURE_xcb_xlib=ON \
70  -DQT_FEATURE_xlib=ON \
71  -DQT_FEATURE_libproxy=OFF \
72  -DQT_FEATURE_cups=OFF \
73  -DQT_FEATURE_libinput=OFF \
74  -DQT_FEATURE_accessibility=ON \
75  -DQT_FEATURE_system_doubleconversion=OFF \
76  -DQT_FEATURE_libb2=OFF \
77  -DQT_FEATURE_sql=ON \
78  -DQT_FEATURE_sql_sqlite=ON \
79  -DQT_FEATURE_system_sqlite=OFF \
80  -DQT_FEATURE_openssl=ON \
81  -DQT_FEATURE_openssl_linked=ON \
82  -DQT_FEATURE_ssl=ON \
83  -DQT_FEATURE_system_zlib=ON \
84  -DQT_FEATURE_system_libpng=OFF \
85  -DQT_FEATURE_system_libjpeg=OFF \
86  -DQT_FEATURE_system_freetype=OFF \
87  -DQT_FEATURE_system_harfbuzz=OFF \
88  -DQT_FEATURE_system_pcre2=ON \
89  -DQT_FEATURE_fontconfig=OFF \
90  -DQT_FEATURE_glib=OFF \
91  -DQT_FEATURE_opengl=ON \
92  -DQT_FEATURE_egl=ON \
93  -DQT_FEATURE_dbus=ON \
94  -DQT_FEATURE_widgets=ON \
95  -DQT_BUILD_EXAMPLES=OFF \
96  -DQT_BUILD_TESTS=OFF
97'''
98compile = "cmake --build build"
99install = "DESTDIR=/out cmake --install build"
100
101[deps]
102# Sólo deps YA selladas + toolchain. double-conversion/libb2/icu/vulkan/xcb/cups quedan bundled u OFF.
103# dbus AÑADIDO: KF6 entero exige Qt6DBus ⇒ qtbase con dbus=ON linkea libdbus (variante incoming-kde).
104build = [
105  "cmake", "samurai", "python3", "pkgconf", "dbus",
106  "pcre2", "zlib",
107  "wayland", "wayland-protocols", "libxkbcommon", "mesa",
108  "openssl",
109  # Cadena Qt-xcb (QT_FEATURE_xcb=ON): la QPA X11 de Qt. libxkbcommon aquí es la variante enable-x11
110  # (override incoming-kde) que provee libxkbcommon-x11.so + xkbcommon-x11.pc. **CRÍTICO: libXau+libXdmcp**
111  # — el gate `xkbcommon-x11` de Qt usa `pkg_check_modules(IMPORTED_TARGET)` que resuelve TODO el árbol
112  # Requires: xkbcommon-x11→xcb→(xau,xdmcp Requires.private de xcb.pc). Sin xau.pc/xdmcp.pc el target
113  # PkgConfig::XKB_COMMON_X11 NO se crea y XcbQpaPrivate aborta. (Gotcha .pc transitivo, mismo de todo
114  # consumidor de xcb.) PKG_CONFIG_PATH explícito arriba p/ que pkg-config vea /usr/lib+share/pkgconfig.
115  "libxcb", "libXau", "libXdmcp", "libX11", "libXext", "libXrender", "libXi", "libXfixes",
116  "xcb-util", "xcb-util-image", "xcb-util-renderutil", "xcb-util-cursor",
117  "xcb-util-keysyms", "xcb-util-wm", "xorgproto", "xtrans",
118]
119# NOTA gate (ADR 0011, tensión estático↔dinámico): libQt6Core.so LINKEA bien con las deps estáticas
120# del closure (glib/pcre2 son PIC-compatibles; zlib entra como libz.so). Lo que ROMPE el .so son libs
121# selladas como archive estático SIN -fPIC. Apagado para el gate (una ventana Qt no los necesita):
122#  · dbus    → FEATURE_dbus=OFF: recipe dbus canónico falla en granja (meson no ve glib-2.0).
123#  · sql     → FEATURE_sql=OFF: sqlite canónico estático sin -fPIC (+ sin COLUMN_METADATA).
124#  · openssl → FEATURE_openssl/ssl=OFF: libcrypto.a/libssl.a estáticas sin -fPIC (EVP_SKEYMGMT_free).
125#  · glib    → FEATURE_glib=OFF: el glib.a sellado deja símbolos indefinidos bajo -Wl,--no-undefined
126#              (g_hmac_ref/g_strv_builder_ref/…); GTK4 lo linkea sin --no-undefined y no lo expone.
127#              Qt trae su propio event loop ⇒ glib es opcional para una ventana.
128#  · fuentes/imágenes → system_{freetype,harfbuzz,libpng,libjpeg}=OFF + fontconfig=OFF: el link
129#              estático NO arrastra deps transitivas (fontconfig.a → símbolos expat XML_* indefinidos,
130#              el .pc sellado no las declara). En vez de iterar lib-por-lib, se BUNDLEAN en Qt (PIC
131#              internos, cierre completo). zlib/pcre2 SÍ se reusan (entran limpio: libz.so, pcre2.a PIC).
132# DEUDA Capa 0/1: para reusar el stack sellado en KDE, hace falta el closure C shared-PIC y .pc con
133# Requires.private completo (expat, etc.); mientras, el gate bundlea fuentes/imágenes.