sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
licencias: 936 de 1141 (82%) — detección por evidencia, con sus dos imprecisiones declaradas
1# x11-compose-data — la base de secuencias Compose de X11, y NADA de X11.
2#
3# QUÉ ES: los ficheros `/usr/share/X11/locale/…` que definen las teclas muertas y las combinaciones
4# de `Multi_key` (`<Compose> a '` → `á`). Son **datos**, no código: 5192 líneas de reglas para
5# `en_US.UTF-8`. Viven en el tarball de libX11 porque históricamente X11 fue quien las mantuvo, no
6# porque necesiten X11 para existir.
7#
8# POR QUÉ LAS NECESITA UNA DISTRO SIN X11, y es una tensión real que conviene dejar escrita: **ibus
9# las compila DENTRO de libibus**. Su `gen-internal-compose-table` (src/gencomposetable.c:70) lee un
10# fichero `Compose` en tiempo de build y lo convierte en `compose/sequences-<endian>-endian`, que
11# entra como GResource en `ibusresources.c`. Ese paso NO es opcional en su Makefile.am:310 — no hay
12# `--disable-` que lo evite. Sin datos, el build de ibus muere con
13# `Failed to open file "/X11/locale/en/Compose"`.
14#
15# O sea: el escritorio es Wayland-only por decisión, pero la tabla de teclas muertas del mundo Unix
16# sigue publicándose dentro de libX11. Empaquetar esos datos NO reintroduce X11: no hay una sola
17# línea de código, ni un `.so`, ni una dependencia. Es el mismo criterio que `iso-codes`.
18#
19# CÓMO SE GENERAN: los ficheros del tarball son `.pre` y hay que pasarlos por el preprocesador de C.
20# La receta REPRODUCE la regla de upstream (`cpprules.in`) tal cual, en vez de improvisar:
21# · `cpp -undef -traditional -DWCHAR32=1` — `RAWCPP $(RAWCPPFLAGS) $(CPP_FILES_FLAGS)`.
22# · el `CPP_SED_MAGIC`, copiado literal. Traduce `XCOMM` a `#` con sed y no con `-DXCOMM=XCOMM`
23# —el comentario de upstream explica que ese truco no funciona en todos los preprocesadores—,
24# borra las marcas de línea de cpp, sustituye `X11_LOCALEDATADIR` por la ruta real y colapsa los
25# `@@` finales en barras invertidas.
26# Verificado: la salida son 5192 líneas con 2337 secuencias de teclas muertas, sintaxis intacta.
27#
28# SÓLO en_US.UTF-8. Es la que ibus busca (`sys_langs[] = { "en_US.UTF-8", "en_US", "en" }`) y la que
29# todas las demás locales incluyen por `include "%L"`. Traer las ~180 locales sería traer el árbol
30# de i18n de X11 entero para que nadie lo lea.
31#
32# `locale.dir` no es decorativo: el configure de ibus decide `X11_LOCALEDATADIR` comprobando que
33# EXISTA (configure.ac:394). Sin él cae a un `$(datadir)` sin expandir y el define queda en
34# `"/X11/locale"`, que es exactamente el error de arriba.
35name = "x11-compose-data"
36version = "1.8.13"
37license = "MIT"
38
39[source]
40tarball = "https://gitlab.freedesktop.org/xorg/lib/libx11/-/archive/libX11-1.8.13/libx11-libX11-1.8.13.tar.gz"
41sha256 = "d210291f5cd974e5029cce4bde0fc1b8bfc0ce88b8530ea6ba4b1fcf141506ab"
42
43[build]
44compiler = "zig-cc"
45target = "x86_64-linux-musl"
46link = "dynamic"
47
48[build.phases]
49configure = "true"
50compile = "true"
51install = '''
52set -e
53LOCALEDIR=/usr/share/X11/locale
54mkdir -p "/out$LOCALEDIR/en_US.UTF-8"
55# La regla de upstream, literal (cpprules.in): cpp crudo + el CPP_SED_MAGIC.
56gen() {
57 cpp -undef -traditional -DWCHAR32=1 < "$1" | LC_CTYPE=C sed \
58 -e '/^\# *[0-9][0-9]* *.*$/d' \
59 -e '/^\#line *[0-9][0-9]* *.*$/d' \
60 -e '/^[ ]*XCOMM$/s/XCOMM/\#/' \
61 -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/\#/' \
62 -e '/^[ ]*XHASH/s/XHASH/\#/' \
63 -e "s,X11_LOCALEDATADIR,$LOCALEDIR,g" \
64 -e '/\@\@$/s/\@\@$/\\/' \
65 -e '/^$/d' > "$2"
66}
67gen nls/en_US.UTF-8/Compose.pre "/out$LOCALEDIR/en_US.UTF-8/Compose"
68gen nls/en_US.UTF-8/XLC_LOCALE.pre "/out$LOCALEDIR/en_US.UTF-8/XLC_LOCALE"
69gen nls/locale.dir.pre "/out$LOCALEDIR/locale.dir"
70gen nls/compose.dir.pre "/out$LOCALEDIR/compose.dir"
71gen nls/locale.alias.pre "/out$LOCALEDIR/locale.alias"
72cp nls/en_US.UTF-8/XI18N_OBJS "/out$LOCALEDIR/en_US.UTF-8/XI18N_OBJS"
73wc -l "/out$LOCALEDIR/en_US.UTF-8/Compose"
74'''
75
76[deps]
77build = ["make", "pkgconf"]