gioser

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…

TOML 1534Shell 199Rust 109Markdown 993713 Definiciones

kde/H-Qt: receta qtbase de-Alpinizada (gate campaña KDE) + cola incoming-kde al worker

qt6-qtbase 6.11.1 desde Alpine community: conserva sus 3 parches de musl (LFS64/
DNS-resolver/symlinks), reescribe abuild→CMake/Ninja explícito. link=DINÁMICO
(política capa GUI, ADR 0011). Minimal para el gate: Wayland-only (xcb OFF),
icu/vulkan/cups/libproxy/libinput/accessibility OFF, double-conversion+libb2
bundled ⇒ compila reusando SOLO deps ya selladas, cero recetas nuevas.
sha256 pinneado (sha512 cotejado con Alpine). farm-worker-loop añade
recipes/incoming-kde a QUEUES.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

071be00396fd14350d3c5b22857a2fe808e04d30 · por sergio · (hace 3 meses) · padre 5447c175f · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

5 archivos · +262 −1

diff --git a/recipes/incoming-kde/0001-qt6-qtbase-lfs64.patch b/recipes/incoming-kde/0001-qt6-qtbase-lfs64.patch
new file mode 100644
index 00000000..d57e0801
--- /dev/null
+++ b/recipes/incoming-kde/0001-qt6-qtbase-lfs64.patch
@@ -0,0 +1,54 @@
+the *64 apis are useless as musl is always 64-bit for them.
+even on glibc, passing -D_FILE_OFFSET_BITS=64 defines 64-bit variants for non-64 names.
+this legacy api is removed in musl-1.2.4 unless -D_LARGEFILE64_SOURCE,
+omit it from here to fix downstream use without having to pass defines.
+--
+diff --git a/mkspecs/common/posix/qplatformdefs.h b/mkspecs/common/posix/qplatformdefs.h
+index ffae2ac3..665ae46f 100644
+--- a/mkspecs/common/posix/qplatformdefs.h
++++ b/mkspecs/common/posix/qplatformdefs.h
+@@ -14,28 +14,28 @@
+ 
+ #if defined(QT_USE_XOPEN_LFS_EXTENSIONS) && defined(QT_LARGEFILE_SUPPORT)
+ 
+-#define QT_STATBUF              struct stat64
+-#define QT_FPOS_T               fpos64_t
+-#define QT_OFF_T                off64_t
++#define QT_STATBUF              struct stat
++#define QT_FPOS_T               fpos_t
++#define QT_OFF_T                off_t
+ 
+-#define QT_STAT                 ::stat64
+-#define QT_LSTAT                ::lstat64
+-#define QT_TRUNCATE             ::truncate64
++#define QT_STAT                 ::stat
++#define QT_LSTAT                ::lstat
++#define QT_TRUNCATE             ::truncate
+ 
+ // File I/O
+-#define QT_OPEN                 ::open64
+-#define QT_LSEEK                ::lseek64
+-#define QT_FSTAT                ::fstat64
+-#define QT_FTRUNCATE            ::ftruncate64
++#define QT_OPEN                 ::open
++#define QT_LSEEK                ::lseek
++#define QT_FSTAT                ::fstat
++#define QT_FTRUNCATE            ::ftruncate
+ 
+ // Standard C89
+-#define QT_FOPEN                ::fopen64
+-#define QT_FSEEK                ::fseeko64
+-#define QT_FTELL                ::ftello64
+-#define QT_FGETPOS              ::fgetpos64
+-#define QT_FSETPOS              ::fsetpos64
++#define QT_FOPEN                ::fopen
++#define QT_FSEEK                ::fseeko
++#define QT_FTELL                ::ftello
++#define QT_FGETPOS              ::fgetpos
++#define QT_FSETPOS              ::fsetpos
+ 
+-#define QT_MMAP                 ::mmap64
++#define QT_MMAP                 ::mmap
+ 
+ #else // !defined(QT_USE_XOPEN_LFS_EXTENSIONS) || !defined(QT_LARGEFILE_SUPPORT)
+ 
diff --git a/recipes/incoming-kde/0002-qt6-qtbase-dns-resolver.patch b/recipes/incoming-kde/0002-qt6-qtbase-dns-resolver.patch
new file mode 100644
index 00000000..23dcb193
--- /dev/null
+++ b/recipes/incoming-kde/0002-qt6-qtbase-dns-resolver.patch
@@ -0,0 +1,99 @@
+diff --git a/cmake/FindWrapResolv.cmake b/cmake/FindWrapResolv.cmake
+index 159df9b60d8..7d6b3fa50f7 100644
+--- a/cmake/FindWrapResolv.cmake
++++ b/cmake/FindWrapResolv.cmake
+@@ -40,9 +40,8 @@ check_cxx_source_compiles("
+ 
+ int main(int, char **argv)
+ {
+-    res_state statep = {};
+-    int n = res_nmkquery(statep, 0, argv[1], 0, 0, NULL, 0, NULL, NULL, 0);
+-    n = res_nsend(statep, NULL, 0, NULL, 0);
++    int n = res_mkquery(0, argv[1], 0, 0, NULL, 0, NULL, NULL, 0);
++    n = res_send(NULL, 0, NULL, 0);
+     n = dn_expand(NULL, NULL, NULL, NULL, 0);
+     return n;
+ }
+diff --git a/src/network/kernel/qdnslookup_unix.cpp b/src/network/kernel/qdnslookup_unix.cpp
+index 4262ad58d50..47524f954af 100644
+--- a/src/network/kernel/qdnslookup_unix.cpp
++++ b/src/network/kernel/qdnslookup_unix.cpp
+@@ -25,6 +25,10 @@ QT_REQUIRE_CONFIG(libresolv);
+ 
+ #include <array>
+ 
++#if !defined(__GLIBC__)
++#  include "resolv_compat.h"
++#endif
++
+ #ifndef T_OPT
+ // the older arpa/nameser_compat.h wasn't updated between 1999 and 2016 in glibc
+ #  define T_OPT     ns_t_opt
+@@ -133,7 +137,7 @@ static int
+ prepareQueryBuffer(res_state state, QueryBuffer &buffer, const char *label, ns_rcode type)
+ {
+     // Create header and our query
+-    int queryLength = res_nmkquery(state, QUERY, label, C_IN, type, nullptr, 0, nullptr,
++    int queryLength = res_mkquery(QUERY, label, C_IN, type, nullptr, 0, nullptr,
+                                    buffer.data(), buffer.size());
+     Q_ASSERT(queryLength < int(buffer.size()));
+     if (Q_UNLIKELY(queryLength < 0))
+@@ -170,7 +174,7 @@ static int sendStandardDns(QDnsLookupReply *reply, res_state state, QSpan<unsign
+ 
+     auto attemptToSend = [&]() {
+         std::memset(buffer.data(), 0, HFIXEDSZ);        // the header is enough
+-        int responseLength = res_nsend(state, qbuffer.data(), qbuffer.size(), buffer.data(), buffer.size());
++        int responseLength = res_send(qbuffer.data(), qbuffer.size(), buffer.data(), buffer.size());
+         if (responseLength >= 0)
+             return responseLength;  // success
+ 
+diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp
+index 3b0e2d333aa..8eeb3cc2c0d 100644
+--- a/src/network/kernel/qhostinfo_unix.cpp
++++ b/src/network/kernel/qhostinfo_unix.cpp
+@@ -18,6 +18,10 @@
+ #  include <resolv.h>
+ #endif
+ 
++#if !defined(__GLIBC__)
++#  include "resolv_compat.h"
++#endif
++
+ #ifndef _PATH_RESCONF
+ #  define _PATH_RESCONF "/etc/resolv.conf"
+ #endif
+diff --git a/src/network/kernel/resolv_compat.h b/src/network/kernel/resolv_compat.h
+new file mode 100644
+index 0000000..4f0e852
+--- /dev/null
++++ b/src/network/kernel/resolv_compat.h
+@@ -0,0 +1,29 @@
++#if !defined(__GLIBC__)
++/***************************************************************************
++ * resolv_compat.h
++ *
++ * Mimick GLIBC's res_ninit() and res_nclose() for musl libc
++ * Note: res_init() is actually deprecated according to
++ * http://docs.oracle.com/cd/E36784_01/html/E36875/res-nclose-3resolv.html
++ **************************************************************************/
++#include <string.h>
++
++static inline int res_ninit(res_state statp)
++{
++	int rc = res_init();
++	if (statp != &_res) {
++		memcpy(statp, &_res, sizeof(*statp));
++	}
++	return rc;
++}
++
++static inline int res_nclose(res_state statp)
++{
++	if (!statp)
++		return -1;
++	if (statp != &_res) {
++		memset(statp, 0, sizeof(*statp));
++	}
++	return 0;
++}
++#endif
diff --git a/recipes/incoming-kde/qtbase.toml b/recipes/incoming-kde/qtbase.toml
new file mode 100644
index 00000000..9b78ac97
--- /dev/null
+++ b/recipes/incoming-kde/qtbase.toml
@@ -0,0 +1,95 @@
+# 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"
+
+[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 = '''
+cmake -B build -G Ninja -Wno-dev \
+  -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=OFF \
+  -DQT_FEATURE_libproxy=OFF \
+  -DQT_FEATURE_cups=OFF \
+  -DQT_FEATURE_libinput=OFF \
+  -DQT_FEATURE_accessibility=OFF \
+  -DQT_FEATURE_system_doubleconversion=OFF \
+  -DQT_FEATURE_libb2=OFF \
+  -DQT_FEATURE_system_sqlite=ON \
+  -DQT_FEATURE_sql_mysql=OFF \
+  -DQT_FEATURE_sql_psql=OFF \
+  -DQT_FEATURE_sql_odbc=OFF \
+  -DQT_FEATURE_openssl_linked=ON \
+  -DQT_FEATURE_system_zlib=ON \
+  -DQT_FEATURE_system_libpng=ON \
+  -DQT_FEATURE_system_libjpeg=ON \
+  -DQT_FEATURE_system_freetype=ON \
+  -DQT_FEATURE_system_harfbuzz=ON \
+  -DQT_FEATURE_system_pcre2=ON \
+  -DQT_FEATURE_fontconfig=ON \
+  -DQT_FEATURE_glib=ON \
+  -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
+# symlinks a las dev-tools (moc/uic/rcc…) en /usr/bin, como el package() de Alpine
+if [ -f build/user_facing_tool_links.txt ]; then
+  mkdir -p /out/usr/bin
+  while read -r target name; do ln -sf "$target" "/out/$name"; done < build/user_facing_tool_links.txt
+fi
+'''
+
+[deps]
+# Sólo deps YA selladas + toolchain. double-conversion/libb2/icu/vulkan/xcb/cups quedan bundled u OFF.
+build = [
+  "cmake", "samurai", "perl", "python3", "pkgconf",
+  "glib", "freetype", "fontconfig", "harfbuzz", "libpng", "libjpeg-turbo",
+  "pcre2", "zlib", "openssl", "sqlite",
+  "wayland", "wayland-protocols", "libxkbcommon", "mesa", "dbus",
+]
diff --git a/recipes/incoming-kde/symlinks.patch b/recipes/incoming-kde/symlinks.patch
new file mode 100644
index 00000000..6246f230
--- /dev/null
+++ b/recipes/incoming-kde/symlinks.patch
@@ -0,0 +1,13 @@
+Fix broken symlink path
+
+--- a/cmake/QtPostProcessHelpers.cmake
++++ b/cmake/QtPostProcessHelpers.cmake
+@@ -883,7 +883,7 @@
+             endif()
+         endif()
+         qt_path_join(tool_target_path "${CMAKE_INSTALL_PREFIX}" "${INSTALL_BINDIR}" "${filename}")
+-        qt_path_join(tool_link_path "${INSTALL_PUBLICBINDIR}" "${linkname}${PROJECT_VERSION_MAJOR}")
++        qt_path_join(tool_link_path "${CMAKE_INSTALL_PREFIX}" "${INSTALL_PUBLICBINDIR}" "${linkname}${PROJECT_VERSION_MAJOR}")
+         _qt_internal_relative_path(tool_target_path BASE_DIRECTORY ${tool_link_base_dir})
+         list(APPEND lines "${tool_target_path} ${tool_link_path}")
+     endforeach()
diff --git a/scripts/farm/farm-worker-loop.sh b/scripts/farm/farm-worker-loop.sh
index 0bf6bf83..32abbf8d 100755
--- a/scripts/farm/farm-worker-loop.sh
+++ b/scripts/farm/farm-worker-loop.sh
@@ -72,7 +72,7 @@ DISK_HIGH="${DISK_HIGH:-82}"
 # `rm -rf work/farm` al inicio ⇒ construirlas EN SERIE (una por vuelta) es seguro, sin colisión.
 # incoming-clib: libs C (toolkit/foundational) que el worker SELLA pero el cron de cosecha-go IGNORA
 # (son build-deps, se usan vía catálogo; no tienen binario que el gate Go pueda smoke-testear).
-QUEUES="${QUEUES:-recipes/incoming recipes/incoming-go recipes/incoming-clib}"
+QUEUES="${QUEUES:-recipes/incoming recipes/incoming-go recipes/incoming-clib recipes/incoming-kde}"
 echo "$(date -u +%FT%TZ) worker-loop arrancado: JOBS=$JOBS IDLE_SLEEP=$IDLE_SLEEP QUEUES='$QUEUES'"
 while :; do
   total=0