fix(libuv): `--with-pic` — sin él ninguna biblioteca compartida puede enlazarlo
Lo destapó `fcitx5` al enlazar su biblioteca núcleo:
[161/296] Linking CXX shared library bin/libFcitx5Utils.so.5.1.14
ld.lld: error: relocation R_X86_64_32 cannot be used against local symbol; recompile with -fPIC
>>> defined in /usr/lib/libuv.a(libuv_la-proctitle.o)
Un ejecutable puede enlazar un `.a` no-PIC; un `.so` no. Y ese `.so` no es opcional: es el núcleo de
fcitx5, contra el que enlazan todos sus addons — así que la salida de «dejar de construir el `.so`»
no aplica.
⚠ **Acá se arregla la LIBRERÍA y no el consumidor, al revés que en `gdk-pixbuf`/`libpng`, y la
diferencia es el radio — medido antes de tocar, que es la regla de yupana.** El 2026-08-21 el usuario
decidió NO cambiar `libpng` por una variante PIC: tiene dependientes en cuatro colas y es estático
por arquitectura, así que allá se desactivó el único `.so` que estorbaba (`-Dgif=disabled`). `libuv`
es el caso opuesto: **radio 1 y ninguna imagen declarada**, y ese único dependiente es el propio
fcitx5, que todavía no ha sellado. Re-sellarlo no arrastra nada.
Y hacerlo deja la `.a` usable para cualquier consumidor futuro: sin esto, el siguiente que quiera
enlazar libuv desde un `.so` paga el mismo viaje de diagnóstico. La lección que el repo ya tenía
escrita —«contar los targets `Linking` antes de tocar nada: si el no-PIC sólo estorba a UN `.so` y
ese `.so` no se quiere, el arreglo es dejar de construirlo»— se aplicó: hay UN solo target de
biblioteca compartida en todo el build de fcitx5, y es el que hace falta.
`--with-pic` es la forma de libtool y la convención de este repo (17 recetas la usan).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
1 qillqakuna · +17 −1
- recipes/libuv.toml +17 −1
diff --git a/recipes/libuv.toml b/recipes/libuv.toml
index ff01cb35..c859ba78 100644
--- a/recipes/libuv.toml
+++ b/recipes/libuv.toml
@@ -15,7 +15,23 @@ link = "static"
flags = []
[build.phases]
-configure = './autogen.sh && ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static'
+# ⚠ `--with-pic` (2026-10-19): sin él el `libuv.a` no es PIC y **ninguna biblioteca compartida puede
+# enlazarlo**. Lo destapó `fcitx5` al enlazar su `libFcitx5Utils.so`:
+# ld.lld: error: relocation R_X86_64_32 cannot be used against local symbol; recompile with -fPIC
+# >>> defined in /usr/lib/libuv.a(libuv_la-proctitle.o)
+# Un ejecutable sí puede enlazar un `.a` no-PIC; un `.so` no. Y el `.so` de fcitx5 no es opcional:
+# es su núcleo, contra el que enlazan todos los addons.
+#
+# ⇒ Acá se arregla la LIBRERÍA y no el consumidor, al revés que en `gdk-pixbuf`/`libpng` (2026-08-21,
+# decisión del usuario), **y la diferencia es el radio, medido antes de tocar**: `libpng` tiene
+# dependientes en cuatro colas y es estático por arquitectura, así que allá se desactivó el único
+# `.so` que estorbaba. `libuv` tiene **radio 1 y NINGUNA imagen declarada** — el único dependiente
+# es el propio fcitx5 —, así que re-sellarlo no arrastra nada y deja la `.a` usable para cualquier
+# consumidor futuro. Sin esto, el siguiente que quiera enlazar libuv desde un `.so` paga el mismo
+# viaje.
+#
+# `--with-pic` es la forma de libtool y la convención de este repo (17 recetas la usan).
+configure = './autogen.sh && ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --with-pic'
compile = 'make'
install = 'make DESTDIR=/out install'