gtk4: no construir NINGÚN objetivo compartido — la .so era el muro PIC
`gtk/meson.build` declara dos hermanos con llamadas explícitas —`static_library('gtk')`
y `shared_library('gtk-4')`— y por ser explícita, `-Ddefault_library=static`
NO la suprime: no hay flag. Esa .so era el único objetivo compartido que se
enlazaba, arrastraba CINCO archives sin PIC (libtiff, libfreetype,
libfontconfig, libjpeg, libpng16) y moría con 13930 `relocation … recompile
with -fPIC`. Un ejecutable puede enlazar una .a no-PIC; una .so no.
Se apagan con `build_by_default: false` + `install: false` vía dos seds
acotados por rango (tocan 1 de 10 y 1 de 3 `install: true` respectivamente).
⚠ `build_by_default: false` NO BASTA SOLO: ninja construye igual lo que algo
NECESITA. El primer intento falló exactamente así — `shared_module('printbackend-file')`
depende de `libgtk_dep` y el fuente avisa «The 'file' print backend cannot be
disabled» (está fuera de los `if` de cpdb/cups), así que devolvía la .so al
grafo y re-aparecían los 13930 errores. Por eso se apagan LOS DOS.
En todo el árbol hay 5 objetivos compartidos: libgtk-4.so, printbackend-{cpdb,
cups,file} y media-gstreamer; las flags ya quitaban tres, estos seds los otros dos.
No se borra la declaración de libgtk: `pkg_config.generate(libgtk)` la necesita
para emitir el .pc con `-lgtk-4`, que es el nombre del archive GORDO que fabrica
la fase install. Nada la enlaza: los usuarios de `libgtk_dep` son demos, tests,
testsuite, examples y los backends de impresión/media, todos desactivados.
Verificado: sella, 0 errores PIC, 0 .so enlazadas, targets 997→993. Artefacto
con gtk4.pc `Libs: -lgtk-4`, libgtk-4.a de 808 objetos y `gtk_window_new` como
símbolo T definido. Las colas wlr/gnome tienen sus PROPIAS recetas de gtk4.
This commit is contained in:
+34
-2
@@ -17,9 +17,41 @@ link = "static"
|
||||
|
||||
[build.phases]
|
||||
# GTK4 construye libgtk.a (static_library 'gtk') Y libgtk-4.so; las tools linkean la .so con libgtk_dep,
|
||||
# imposible en el lab static-musl. Parche: que las tools usen libgtk_static_dep (la .a). El sed es seguro:
|
||||
# imposible en el lab static-musl. Parche 1: que las tools usen libgtk_static_dep (la .a). El sed es seguro:
|
||||
# "libgtk_dep" NO es substring de "libgtk_static_dep" ⇒ no toca las que ya usan el estático.
|
||||
configure = "sed -i 's/libgtk_dep/libgtk_static_dep/g' tools/meson.build && PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload --prefer-static -Ddefault_library=static -Dwayland-backend=true -Dx11-backend=false -Dbroadway-backend=false -Dwin32-backend=false -Dmacos-backend=false -Dvulkan=disabled -Dintrospection=disabled -Dbuild-demos=false -Dbuild-testsuite=false -Dbuild-tests=false -Dbuild-examples=false -Dmedia-gstreamer=disabled -Dprint-cups=disabled -Dprint-cpdb=disabled -Dcloudproviders=disabled -Dsysprof=disabled -Dtracker=disabled -Dcolord=disabled -Df16c=disabled -Ddocumentation=false -Dman-pages=false -Dc_args=-Wno-error=date-time"
|
||||
#
|
||||
# ── Parche 2 (2026-08-27): NO construir `libgtk-4.so` en absoluto ────────────────────────────────
|
||||
# `gtk/meson.build` declara DOS objetivos hermanos con llamadas explícitas: `static_library('gtk')` y
|
||||
# `shared_library('gtk-4')`. Por ser explícita, `-Ddefault_library=static` NO la suprime — no hay
|
||||
# flag que valga. Y esa .so era el ÚNICO objetivo compartido de los 10 que enlaza la receta (los otros
|
||||
# 9 son ejecutables), así que arrastraba CINCO archivos .a sin PIC —libtiff, libfreetype, libfontconfig,
|
||||
# libjpeg, libpng16— y moría con 13930 `relocation … recompile with -fPIC`. Un ejecutable sí puede
|
||||
# enlazar una .a no-PIC; una .so no.
|
||||
#
|
||||
# Se apaga con `build_by_default: false` + `install: false` en ESE bloque (sed acotado por rango, que
|
||||
# toca 1 de los 10 `install: true` del fichero). No se borra la declaración: `pkg_config.generate(libgtk)`
|
||||
# la sigue necesitando para emitir el `.pc` con `-lgtk-4`, que es el nombre que la fase install fabrica
|
||||
# como archive GORDO. Nada la enlaza: los usuarios de `libgtk_dep` son demos/tests/testsuite/examples y
|
||||
# los backends de impresión y media, TODOS desactivados por las flags de abajo… SALVO UNO.
|
||||
#
|
||||
# ⚠ `build_by_default: false` NO BASTA POR SÍ SOLO, y el primer intento falló por esto: ninja
|
||||
# construye igual un objetivo si algo DEPENDE de él. `modules/printbackends/meson.build` declara
|
||||
# `shared_module('printbackend-file')` con `dependencies: libgtk_dep` —y el propio fuente avisa
|
||||
# «The 'file' print backend cannot be disabled»: no hay opción de meson que lo quite, está fuera de
|
||||
# los `if` de cpdb/cups—. Ese módulo arrastraba `libgtk-4.so` de vuelta al grafo y la .so volvía a
|
||||
# enlazarse en [995/997] con los mismos 13930 errores PIC. Por eso se apaga TAMBIÉN.
|
||||
# En todo el árbol hay 5 objetivos compartidos: `libgtk-4.so`, printbackend-{cpdb,cups,file} y
|
||||
# media-gstreamer. cpdb/cups/media ya los quitan las flags; los otros dos, estos dos seds.
|
||||
#
|
||||
# ⚠ El artefacto deja de traer `libgtk-4.so`. Es lo coherente con `link = "static"` y con la fase
|
||||
# install, que ya fabricaba `libgtk-4.a` como el producto real; la .so se construía e instalaba sin
|
||||
# que nadie la usara. Las colas wlr/gnome tienen sus PROPIAS recetas de gtk4 y no se ven afectadas.
|
||||
configure = '''
|
||||
sed -i 's/libgtk_dep/libgtk_static_dep/g' tools/meson.build
|
||||
sed -i "/^libgtk = shared_library('gtk-4',/,/^)/ s/^ install: true,$/ install: false,\n build_by_default: false,/" gtk/meson.build
|
||||
sed -i "/^shared_module('printbackend-file',/,/^)/ s/^ install: true,$/ install: false,\n build_by_default: false,/" modules/printbackends/meson.build
|
||||
PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload --prefer-static -Ddefault_library=static -Dwayland-backend=true -Dx11-backend=false -Dbroadway-backend=false -Dwin32-backend=false -Dmacos-backend=false -Dvulkan=disabled -Dintrospection=disabled -Dbuild-demos=false -Dbuild-testsuite=false -Dbuild-tests=false -Dbuild-examples=false -Dmedia-gstreamer=disabled -Dprint-cups=disabled -Dprint-cpdb=disabled -Dcloudproviders=disabled -Dsysprof=disabled -Dtracker=disabled -Dcolord=disabled -Df16c=disabled -Ddocumentation=false -Dman-pages=false -Dc_args=-Wno-error=date-time
|
||||
'''
|
||||
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
|
||||
# meson instala solo libgtk-4.so y genera convenience-libs THIN (gtk/gdk/gsk por separado, referencian
|
||||
# los .o por ruta → inútiles fuera del build dir). Fusiono los tres en UN archive GORDO libgtk-4.a (embebe
|
||||
|
||||
Reference in New Issue
Block a user