From 128321517334ecad8db308ce4a8172ccdca054a9 Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 28 Jul 2026 19:51:14 -0400 Subject: [PATCH] gnome onda 3: libsoup SELLADO (b3:79d6bf81) + sqlite-shared MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Segunda pieza de la cadena eds. Leer el meson.build real (y no el mapa de memoria) corrigió dos cosas del presupuesto: libxml2 → libsoup 3.x NO la usa (era de la era 2.x, SoupXMLRPC). Se ahorra una variante -shared que estaba presupuestada. sqlite3 → DURA, no opcional: meson.build:123-136 termina en dependency() sin `required:false`. Y el libsqlite3.a canónico NO es PIC, así que no entra en un .so — mismo muro R_X86_64_32 que frenó a mutter contra freetype. De ahí sqlite-shared (b3:7aba78e7), hermana de zlib-shared/cairo-shared, sin tocar la canónica. El apagado que más compra es -Dtls_check=false: el meson ASSERTEA que exista glib-networking para TLS, y eso arrastraba gnutls o openssl+p11-kit. Apagar el CHECK no apaga el TLS — GIO resuelve el backend por módulo en runtime, así que el día que haya receta de glib-networking basta hidratarla, sin recompilar. Verificado: Soup-3.0.typelib producido (la isla dinámica lo exige) y el NEEDED cierra en artefactos sellados + libc.so, sin fuga al sysroot Alpine. Co-Authored-By: Claude Opus 5 (1M context) --- recipes/incoming-gnome/libsoup.toml | 48 +++++++++++++++++++++++ recipes/incoming-gnome/sqlite-shared.toml | 32 +++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 recipes/incoming-gnome/libsoup.toml create mode 100644 recipes/incoming-gnome/sqlite-shared.toml diff --git a/recipes/incoming-gnome/libsoup.toml b/recipes/incoming-gnome/libsoup.toml new file mode 100644 index 00000000..812f826f --- /dev/null +++ b/recipes/incoming-gnome/libsoup.toml @@ -0,0 +1,48 @@ +# libsoup 3.6.6 — cliente HTTP sobre GLib. Entra al frente GNOME como dep dura de +# evolution-data-server: libedataserver enlaza soup-3.0 (ESoupSession) y los backends de calendario +# CalDAV/WebDAV son HTTP. O sea que llega por la cima: gnome-shell → eds → libsoup. +# +# LISTA CONTRA EL meson.build REAL (3.6.6), no de memoria. Corrige el mapa que traía la campaña: +# libxml2 → NO la usa. libsoup 2.x la necesitaba para SoupXMLRPC; en libsoup 3.x no aparece ni +# una vez en meson.build. Se ahorra una variante -shared que ya estaba presupuestada. +# sqlite3 → DURA (:123-136). El fallback termina en `dependency('sqlite3')` sin `required:false`, +# así que no hay perilla. Es el HSTS enforcer, que persiste en disco. +# libnghttp2, libpsl, zlib, glib → duras. Las cuatro ya selladas en esta cola. +# +# Cada apagado, y lo que compra: +# -Dtls_check=false → meson.build:~200 corre un test que ASSERTEA `libsoup requires +# glib-networking for TLS support`. glib-networking no está en el corpus y +# arrastraría gnutls o openssl+p11-kit. Apagar el CHECK no apaga el TLS: GIO +# resuelve el backend por módulo en runtime, así que el día que exista una +# receta de glib-networking basta hidratarla y libsoup habla HTTPS sin +# recompilar. Lo que se pierde HOY es HTTPS en runtime, no la API. +# -Dbrotli=disabled → brotli está en el corpus pero SÓLO estático y no-PIC (mismo caso que +# sqlite), o sea que habilitarlo costaba otra variante -shared. Es sólo +# Content-Encoding: br; el calendario de eds no lo necesita. +# -Dgssapi=disabled -Dntlm=disabled → autenticación Kerberos/NTLM corporativa; krb5 no existe acá. +# -Dsysprof=disabled -Dtests=false -Ddocs=disabled -Dvapi=disabled -Dpkcs11_tests=disabled +# → sysprof, gnutls y las suites de test (que quieren apache/httpd) fuera. +# -Dintrospection=enabled → NO es opcional acá: gnome-shell es JavaScript y eds expone typelibs +# que arrastran Soup-3.0. Es la isla dinámica: sin .so no hay typelib. +# +# ISLA DINÁMICA: shared, con sqlite-shared/zlib-shared en vez de las canónicas estáticas — sus .a no +# son PIC y no entran en un .so (es el muro que frenó a mutter contra freetype). +name = "libsoup" +version = "3.6.6" + +[source] +tarball = "https://download.gnome.org/sources/libsoup/3.6/libsoup-3.6.6.tar.xz" +sha256 = "51ed0ae06f9d5a40f401ff459e2e5f652f9a510b7730e1359ee66d14d4872740" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" + +[build.phases] +configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddefault_library=shared -Dtls_check=false -Dbrotli=disabled -Dgssapi=disabled -Dntlm=disabled -Dsysprof=disabled -Dtests=false -Ddocs=disabled -Ddoc_tests=false -Dinstalled_tests=false -Dpkcs11_tests=disabled -Dautobahn=disabled -Dintrospection=enabled -Dvapi=disabled -Dc_args=-Wno-error=date-time" +compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output" +install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild" + +[deps] +build = ["meson", "samurai", "python3", "pkgconf", "py3-setuptools", "gi-foreign-girs", "gobject-introspection", "glib", "glib-introspected", "libpsl", "nghttp2", "sqlite-shared", "zlib-shared", "icu4c", "libffi", "pcre2"] diff --git a/recipes/incoming-gnome/sqlite-shared.toml b/recipes/incoming-gnome/sqlite-shared.toml new file mode 100644 index 00000000..ccf86836 --- /dev/null +++ b/recipes/incoming-gnome/sqlite-shared.toml @@ -0,0 +1,32 @@ +# sqlite-shared 3.46.1 — variante DINÁMICA de sqlite para la isla dinámica de GNOME. +# +# Por qué existe: el sqlite canónico (recipes/sqlite.toml) es `--disable-shared --enable-static` y su +# libsqlite3.a NO es PIC (verificado: trae reubicaciones R_X86_64_32). libsoup 3.6 lo pide DURO +# (meson.build:123-136 cae a `dependency('sqlite3')` sin `required:false`) y libsoup es un .so ⇒ +# meter el .a no-PIC adentro corta con el mismo `relocation R_X86_64_32 ... recompile with -fPIC` +# que frenó a mutter contra freetype. Mismo patrón y misma solución que zlib-shared/cairo-shared: +# una variante hermana, sin tocar la canónica (su radio son cientos de sellados). +# +# El único cambio real frente a la canónica es --enable-shared --disable-static y sacar el +# `-all-static -no-pie` de LDFLAGS, que es justo lo que impide producir un .so. Misma versión y mismo +# tarball a propósito: el sqlite3.pc que consume libsoup declara la misma versión que el resto del +# corpus, así que no se abre un skew de versiones entre el mundo estático y el dinámico. +name = "sqlite-shared" +version = "3.46.1" + +[source] +tarball = "https://sqlite.org/2024/sqlite-autoconf-3460100.tar.gz" +sha256 = "67d3fe6d268e6eaddcae3727fce58fcc8e9c53869bdd07a0c61e38ddf2965071" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" + +[build.phases] +configure = "./configure --prefix=/usr --enable-shared --disable-static" +compile = 'make -j"$(nproc)"' +install = "make install DESTDIR=/out" + +[deps] +build = ["make", "pkgconf"]