fix(fcitx5): libuuid no es PIC, y acá se arregla el consumidor — el radio lo decide
Con `libuv` ya PIC, el enlace de `libFcitx5Utils.so` avanzó hasta el siguiente archivo no-PIC:
ld.lld: relocation R_X86_64_32 … recompile with -fPIC
>>> libuuid_la-randutils.o … in archive /usr/lib/libuuid.a
Con `libuv` la cura fue la librería porque tenía **radio 1 y ninguna imagen**. Acá no se paga:
`util-linux` tiene **radio 79** y afecta a `escritorio-kde`, y re-sellarlo tira a deuda lo que
cuelga de él. Es exactamente el precedente de `libpng` del 2026-08-21, donde el usuario decidió no
PIC-ificar el canónico porque «es estático por diseño; eso es arquitectura del corpus». ⇒ Se arregla
el CONSUMIDOR: `-DENABLE_LIBUUID=Off`.
Y el fallback no es un parche: `uuid_p.h:103` usa `generateUUIDFallback("/proc/sys/kernel/random/uuid")`
— el UUID lo genera el KERNEL. El aviso de upstream sobre un «dummy self increment id» es para el
camino NO-Linux, que acá no se toma. Apagarlo desactiva además el frontend de ibus, que no usamos.
⚠ **Y LO QUE MEDÍ DE PASO ES MÁS IMPORTANTE QUE ESTE ARREGLO, porque puede ser una pared.** Barrí
las 31 deps de fcitx5 buscando `.a` sin PIC: **17 las traen** — `glib`, `cairo`, `pango`,
`harfbuzz`, `fontconfig`, `freetype`, `libpng`, `dbus`, `util-linux`, `libxml2`, `json-c`,
`fribidi`, `pixman`, `gettext-tiny`, `wayland`, `libxkbcommon`, `pkgconf`. **Este corpus está
construido estático-primero y sin PIC**, y fcitx5 quiere un núcleo COMPARTIDO (sus addons lo
dlopenean). Si el enlace sigue pidiendo archivos de esa lista, el coste de PIC-ificar es:
dbus 127 · util-linux 79 · glib 62 · libpng 51 · freetype 42 · fontconfig 40 · cairo 19
…y toca las CINCO imágenes de escritorio
Eso no es una receta: es una decisión de arquitectura del corpus, y sería del usuario. Lo que mi
barrido dice es el riesgo POTENCIAL, no que los 17 entren de verdad en el `.so` — hasta ahora sólo
aparecieron dos (libuv y libuuid), y el `.so` se llama «Utils». Se relanza para que el hecho decida:
si pasa, la pared no existía para este caso; si aparece un tercero con radio grande, hay que
plantear la decisión en vez de seguir apagando perillas.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +18 −1
- recipes/fcitx5.toml +18 −1
diff --git a/recipes/fcitx5.toml b/recipes/fcitx5.toml
index ae475d16..54420ab9 100644
--- a/recipes/fcitx5.toml
+++ b/recipes/fcitx5.toml
@@ -37,6 +37,23 @@
# lo dice). Los addons de prueba son un frontend falso para el test suite
# ENABLE_DOC=Off doxygen no está en el corpus
# BUILD_SPELL_DICT=Off construye `en_dict.fscd` para el corrector inglés — depende de enchant
+# ENABLE_LIBUUID=Off ⚠ ÉSTA ES UNA DECISIÓN DE ARQUITECTURA DEL CORPUS, no una perilla más.
+# `libuuid.a` (de util-linux) no es PIC, así que `libFcitx5Utils.so` no
+# puede enlazarlo:
+# ld.lld: relocation R_X86_64_32 … recompile with -fPIC
+# >>> libuuid_la-randutils.o … in archive /usr/lib/libuuid.a
+# Arreglar la librería —como se hizo con `libuv`, radio 1— acá NO se paga:
+# `util-linux` tiene **radio 79 y afecta a `escritorio-kde`**, y re-sellarlo
+# tira a deuda lo que cuelga de él. Es el precedente de `libpng` del
+# 2026-08-21, donde el usuario decidió no PIC-ificar el canónico porque «es
+# estático por diseño; eso es arquitectura del corpus». ⇒ se arregla el
+# CONSUMIDOR.
+# Y el fallback es bueno en Linux, no un parche: `uuid_p.h:103` usa
+# `generateUUIDFallback("/proc/sys/kernel/random/uuid")`, o sea el UUID lo
+# genera el KERNEL. (El aviso del comentario de upstream sobre un «dummy
+# self increment» es para el camino NO-Linux, que acá no se toma.)
+# Apagarlo también desactiva el frontend de ibus, que no usamos: el camino
+# de esta distro es el de Wayland.
#
# ⚠ `link = "dynamic"` **y no es opcional**: fcitx5 es un daemon cuyos métodos de entrada son
# addons que carga con `dlopen` en tiempo de ejecución (`libexec/` + `lib/fcitx5/`). Un binario
@@ -93,7 +110,7 @@ cmake -B build -G Ninja -Wno-dev \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
-DENABLE_X11=Off -DENABLE_ENCHANT=Off -DUSE_SYSTEMD=Off \
-DENABLE_TEST=Off -DENABLE_TESTING_ADDONS=Off -DENABLE_DOC=Off \
- -DBUILD_SPELL_DICT=Off
+ -DBUILD_SPELL_DICT=Off -DENABLE_LIBUUID=Off
'''
compile = "cmake --build build"
# El guardián de presencia, por la regla 3: lo que tiene que quedar es el DAEMON y su directorio de