# ibus 1.5.34 — el bus de métodos de entrada (teclados de chino/japonés/coreano, emoji, Unicode).
# De acá sale el typelib `IBus-1.0`.
#
# POR QUÉ ENTRA, y es el caso más claro de la tanda: gnome-shell lo importa desde JavaScript **sin
# condicional** (`js/misc/dependencies.js`: `import 'gi://IBus?version=1.0'`), aunque el usuario no
# use ningún método de entrada. El panel de teclado del shell habla con ibus siempre. Dep de RUNTIME
# invisible al grafo de build — el mismo patrón que AccountsService, Gdm, Geoclue y GWeather.
#
# LO QUE SE CONSTRUYE ES LA LIBRERÍA Y EL BUS, NO EL ESCRITORIO DE ibus. Casi todos los
# `--disable-*` de abajo apagan piezas que dependen de cosas que esta distro no tiene y que el shell
# no consulta:
#   --disable-gtk2/3/4                los módulos de método de entrada para GTK. GTK3 no está en el
#                                     corpus (decisión de X11-al-tacho) y el de GTK4 no hace falta:
#                                     GTK4 habla `text-input` de Wayland directo con el compositor.
#                                     ⚠ OJO CON EL TEXTO DE AYUDA DE UPSTREAM: dice `--enable-gtk4`
#                                     y `--enable-wayland`, lo que sugiere que están APAGADAS por
#                                     defecto. No lo están: `enable_gtk4=yes` y `enable_wayland=yes`
#                                     son los defaults reales (configure.ac:277 y :299). Sin
#                                     `--disable-gtk4` explícito el configure corta pidiendo gtk4.
#                                     La ayuda miente; el default manda.
#
# ⚠ `--enable-wayland` VA PRENDIDA, y no por gusto. Empezó apagada —el módulo Wayland es para que el
# demonio de ibus hable con un compositor, y el shell implementa `text-input` por su cuenta— pero con
# `--disable-wayland` el build MUERE igual: `tools/main.c` incluye `<wayland-client.h>` y llama
# `wl_display_connect`/`wl_display_disconnect` **sin ningún `#ifdef`** (:1260), mientras que el
# `WAYLAND_LIBS` que resolvería esos símbolos sólo se agrega si la opción está encendida. Es un bug
# de upstream en su propia configuración «sin Wayland». Prenderla es más honesto que parchear el
# `tools/`: esta distro ES Wayland. Arrastra `libxkbcommon`, que su PKG_CHECK pide junto a
# `wayland-client`.
#   --disable-xim                     el servidor XIM. Es X11 puro.
#   --disable-setup                   `ibus-setup`, una GUI en Python+GTK3.
#   --disable-python2 / --disable-python-library / --disable-dbus-python-check
#                                     bindings de Python 2. No hay Python 2 y no va a haber.
#   --disable-dconf --enable-memconf  ibus guarda su configuración en dconf por defecto; dconf no
#                                     está en el corpus (ya lo esquivó gdm por la misma razón).
#                                     `memconf` es el backend EN MEMORIA que trae upstream para
#                                     exactamente este caso: la config no persiste entre sesiones,
#                                     que para un escritorio sin métodos de entrada configurados es
#                                     la diferencia entre nada y nada.
#   --disable-systemd-services        acá PID1 es arje-zero.
#   --disable-appindicator            pide dbusmenu-glib/dbusmenu-gtk3 (bandeja legacy de Ubuntu).
#   --disable-libnotify               sirve para que el DEMONIO avise «se cambió el método de
#                                     entrada» por notificación de escritorio. libnotify no está en
#                                     el corpus, y las notificaciones del escritorio las sirve el
#                                     propio gnome-shell.
#   --disable-engine                  el motor `simple` (mapas de teclado de teclas muertas). Va
#                                     junto con emoji-dict: son datos y lógica de método de entrada,
#                                     no la librería.
#   --disable-emoji-dict              el diccionario de emoji se compila desde los XML de CLDR y
#                                     `/usr/share/unicode/emoji`, datos que no están en el corpus.
#                                     Se pierde el selector de emoji de ibus, no el typelib.
#   --disable-unicode-dict            su hermano: el índice de nombres de caracteres se compila desde
#                                     los ficheros UCD (`NamesList.txt`, `Blocks.txt` de
#                                     `/usr/share/unicode/ucd`). Apagar emoji-dict NO lo apaga —son
#                                     dos opciones distintas, y el configure aborta por la segunda
#                                     después de pasar la primera.
#   --disable-tests --disable-gtk-doc --disable-vala
#
# Las comprobaciones de X11/XFixes y de libevdev/libudev son BLANDAS en el configure.ac
# (:778 y :785 no abortan, sólo definen un condicional), así que no hace falta apagarlas ni
# satisfacerlas: se resuelven en "no" solas.
#
# ══ LA DEP QUE NO SE VE VENIR: `x11-compose-data` ══════════════════════════════════════════════
# ibus COMPILA la tabla de teclas muertas de X11 dentro de libibus. `gen-internal-compose-table`
# (src/gencomposetable.c:70) lee un fichero `Compose` en tiempo de build y lo convierte en un
# GResource que entra en `ibusresources.c`; ese paso es INCONDICIONAL en su Makefile.am:310 y no hay
# `--disable-` que lo evite. Sin datos el build muere con
# `Failed to open file "/X11/locale/en/Compose"`.
#
# Los datos viven en el tarball de libX11 —por historia, no por necesidad técnica— así que hay una
# receta aparte, `x11-compose-data`, que extrae SÓLO los ficheros de locale y no compila una línea
# de X11. Es la tensión de un escritorio Wayland-only con un mundo Unix cuya tabla de composición
# sigue publicándose dentro de X11, y queda escrita ahí.
#
# También pide `iso-codes` (nombres de idioma para el selector de método de entrada), que ya estaba.
#
# ISLA DINÁMICA: el typelib nombra `libibus-1.0.so.5` y gjs la dlopea.
name    = "ibus"
version = "1.5.34"
license = "LGPL-2.1"

[source]
tarball = "https://github.com/ibus/ibus/releases/download/1.5.34/ibus-1.5.34.tar.gz"
sha256  = "12a72210ce5250f8a66df562a75e034e67b2bce74c4df2983dc86d1154894943"

[build]
compiler = "zig-cc"
target   = "x86_64-linux-musl"
link     = "dynamic"

[build.phases]
configure = '''
set -e
PKG_CONFIG_PATH=/usr/lib/pkgconfig ./configure --prefix=/usr \
  --enable-introspection --enable-memconf \
  --disable-gtk2 --disable-gtk3 --disable-gtk4 --enable-wayland \
  --disable-xim --disable-dconf \
  --disable-setup --disable-python2 --disable-python-library \
  --disable-dbus-python-check --disable-systemd-services \
  --disable-appindicator --disable-libnotify --disable-engine \
  --disable-emoji-dict --disable-unicode-dict --disable-tests \
  --disable-gtk-doc --disable-vala --disable-nls
'''
compile = "make"
install = "DESTDIR=/out make install"

[deps]
build = ["make", "pkgconf", "python3", "py3-setuptools", "gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "iso-codes", "x11-compose-data", "wayland", "wayland-protocols", "libxkbcommon", "dbus-shared", "libffi", "pcre2", "zlib-shared", "expat"]
