gioser

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…

TOML 815Rust 56Shell 37Markdown 291229 Definitions

boost: compilar `iostreams` — la única lib de boost que el corpus necesita

Esta receta era headers-only **a propósito** y lo fue un año: `kactivitymanagerd` usa
Boost.Container, que es header-only, así que copiaba el árbol `boost/` a `/usr/include` y no
invocaba `b2` para nada.

⚠ Lo que lo cambia: **`libime`, el motor de pinyin, enlaza `Boost::iostreams`** —
`src/libime/core/CMakeLists.txt:88`, como dep PRIVATE de `IMECore`— y eso no es header-only:
`find_package(Boost COMPONENTS iostreams)` busca la biblioteca compilada y falla sin ella. Sin
libime no hay chino, que es el eslabón que falta de la cadena (fuentes 19-oct → marco fcitx5 →
coreano → japonés → chino).

Se compila **sólo iostreams** y no las ~30 libs de boost, a propósito: cada una que entre es
superficie que alguien mantendrá, y el resto del corpus no pide ninguna. El día que algo necesite
`boost_filesystem` se añade con su motivo.

`-sNO_BZIP2=1 -sNO_LZMA=1 -sNO_ZSTD=1`: los filtros de compresión de iostreams son opcionales y cada
uno arrastra una dep. Se deja **zlib**, que está en el corpus, y se apagan los otros tres — si
libime necesitara alguno, el enlace lo diría nombrando el símbolo, que es mejor que declarar tres
deps por si acaso.

La instalación de cabeceras NO cambia (sigue el `cp -r boost /usr/include`) porque `b2 install`
reorganiza el árbol y `kactivitymanagerd` ya funciona contra el layout actual. Radio medido antes de
tocar: **1** — `kactivitymanagerd`, imagen `escritorio-kde`.

Se construye ANTES de escribir `libime`: `b2` es un sistema de build que este corpus no ha usado
nunca, y si no cooperase con el envoltorio de zig conviene saberlo antes de escribir dos recetas
encima. El guardián del `install` es duro por lo mismo — si `b2` no produce la `.a`, esta receta no
tiene razón de existir y no debe sellar como si nada.

Lo que esto NO incluye, medido abriendo los CMakeLists en vez de leer los makedepends de Alpine (la
lección del japonés): `fcitx5-chinese-addons` con `ENABLE_GUI=Off` **no necesita Qt ni
qtwebengine**, `ENABLE_CLOUDPINYIN=Off` quita libcurl —y además manda las pulsaciones a un servidor,
que no es lo que esta distro quiere— y `ENABLE_OPENCC=Off` quita opencc a costa de la conversión
tradicional↔simplificado. De las «6 recetas» que presupuesté ayer quedan **libime y sus datos**.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

1d890c5599e300bd6d7ffb3cb70c0b25ab159492 · by Sergio · (2 d ago) · parent 352252653 · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +34 −4

diff --git a/recipes/incoming-kde/boost.toml b/recipes/incoming-kde/boost.toml
index 44c09f96..d94b47f2 100644
--- a/recipes/incoming-kde/boost.toml
+++ b/recipes/incoming-kde/boost.toml
@@ -15,9 +15,39 @@ target   = "x86_64-linux-musl"
 link     = "dynamic"
 
 [build.phases]
-configure = "true"
-compile   = "true"
-install   = "mkdir -p /out/usr/include && cp -r boost /out/usr/include/"
+# `bootstrap.sh` compila `b2` (el motor de build de boost) con el compilador del sandbox. Se le pasa
+# el toolset explícito porque sin eso busca `g++`, que en este lab no existe.
+configure = '''
+set -e
+printf '#!/bin/sh\nexec /opt/zig/zig c++ -mcpu=baseline "$@"\n' > .zcxx; chmod +x .zcxx
+CXX="$PWD/.zcxx" ./bootstrap.sh --with-toolset=cc --with-libraries=iostreams --prefix=/usr
+# `project-config.jam` lo escribe bootstrap con el compilador que detectó; se reescribe la línea del
+# toolset para que b2 use el envoltorio de zig y no lo que haya encontrado en el PATH.
+printf 'using gcc : : %s/.zcxx ;\n' "$PWD" > project-config.jam
+'''
+compile = '''
+set -e
+./b2 -j"$(nproc)" --with-iostreams link=static runtime-link=static \
+  -sNO_BZIP2=1 -sNO_LZMA=1 -sNO_ZSTD=1 --prefix=/usr stage
+'''
+install = '''
+set -e
+mkdir -p /out/usr/include /out/usr/lib
+cp -r boost /out/usr/include/
+# La `.a` de iostreams es la razón de esta receta, así que el guardián es duro.
+n=0
+for f in stage/lib/libboost_iostreams*.a; do
+  [ -f "$f" ] || continue
+  cp "$f" /out/usr/lib/; n=$((n+1))
+done
+if [ "$n" -eq 0 ]; then
+  echo "boost: b2 no produjo libboost_iostreams*.a — esta receta existe para eso, NO sello" >&2
+  ls -R stage 2>/dev/null | head -20 >&2
+  exit 1
+fi
+echo "boost: cabeceras + $n lib(s) de iostreams"
+'''
 
 [deps]
-build = []
+# `zlib` por el filtro gzip de iostreams, que es el único que se deja encendido.
+build = ["zlib"]