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…
fix(boost): no se usa `bootstrap.sh`, y el motivo está en su línea 229
1# boost 1.86.0 — HEADERS-ONLY. kactivitymanagerd usa Boost.Container (header-only) ⇒ sólo necesita
2# Boost_INCLUDE_DIR. No compilamos las libs de boost (b2): copiamos el árbol `boost/` a /usr/include.
3name = "boost"
4version = "1.86.0"
5# licencia: LICENSE_1_0.txt en la raíz del tarball pineado: Boost Software License 1.0
6license = "BSL-1.0"
7
8[source]
9tarball = "https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.bz2"
10sha256 = "1bed88e40401b2cb7a1f76d4bab499e352fa4d0c5f31c0dbae64e24d34d7513b"
11
12[build]
13compiler = "zig-cc"
14target = "x86_64-linux-musl"
15link = "dynamic"
16
17[build.phases]
18# ⚠ **NO SE USA `bootstrap.sh`, Y EL MOTIVO ESTÁ EN SU LÍNEA 229.** Dos intentos fallaron adivinando
19# cómo pasarle el compilador, y la respuesta estaba en leer el guion:
20#
21# CXX= CXXFLAGS= "$my_dir/tools/build/src/engine/build.sh" ${TOOLSET}
22#
23# bootstrap **LIMPIA `CXX` y `CXXFLAGS`** antes de llamar al motor, así que exportarlas no sirve; y
24# no acepta `--cxx` (sus opciones son `--with-toolset`, `--with-libraries`, `--prefix`… — leídas de
25# su propio `--help`, no supuestas). El que sí acepta `--cxx` es el guion del MOTOR (`build.sh:272`),
26# y bootstrap no le reenvía argumentos extra. ⇒ se llama al motor directamente, que es lo que
27# bootstrap envuelve.
28#
29# ⚠ Y el toolset de la BIBLIOTECA no es `cxx`: `cxx` existe sólo para compilar el motor b2
30# (`build.sh:416`). Para la biblioteca, b2 trae `clang.jam`/`clang-linux.jam`, y **zig c++ ES
31# clang** — así que `using clang : : <envoltorio>` es un MAPEO, no una invención. Mi primer intento
32# escribió `using gcc` apuntando al mismo envoltorio, que era inventarle un toolset.
33configure = '''
34set -e
35printf '#!/bin/sh\nexec /opt/zig/zig c++ -mcpu=baseline "$@"\n' > .zcxx; chmod +x .zcxx
36printf '#!/bin/sh\nexec /opt/zig/zig ar "$@"\n' > .zar; chmod +x .zar
37printf '#!/bin/sh\nexec /opt/zig/zig ranlib "$@"\n' > .zranlib; chmod +x .zranlib
38./tools/build/src/engine/build.sh --cxx="$PWD/.zcxx" cxx
39[ -x ./tools/build/src/engine/b2 ] || { echo "boost: el motor b2 no se construyó" >&2; exit 1; }
40# El `using clang` lleva también archivador e indexador: sin ellos b2 invoca `ar`/`ranlib` del PATH,
41# que en este lab no son los de la cadena.
42printf 'using clang : : %s/.zcxx : <archiver>%s/.zar <ranlib>%s/.zranlib ;\n' "$PWD" "$PWD" "$PWD" > project-config.jam
43'''
44compile = '''
45set -e
46./tools/build/src/engine/b2 -j"$(nproc)" toolset=clang --with-iostreams \
47 link=static runtime-link=static -sNO_BZIP2=1 -sNO_LZMA=1 -sNO_ZSTD=1 --prefix=/usr stage
48'''
49install = '''
50set -e
51mkdir -p /out/usr/include /out/usr/lib
52cp -r boost /out/usr/include/
53# La `.a` de iostreams es la razón de esta receta, así que el guardián es duro.
54n=0
55for f in stage/lib/libboost_iostreams*.a; do
56 [ -f "$f" ] || continue
57 cp "$f" /out/usr/lib/; n=$((n+1))
58done
59if [ "$n" -eq 0 ]; then
60 echo "boost: b2 no produjo libboost_iostreams*.a — esta receta existe para eso, NO sello" >&2
61 ls -R stage 2>/dev/null | head -20 >&2
62 exit 1
63fi
64echo "boost: cabeceras + $n lib(s) de iostreams"
65'''
66
67[deps]
68# `zlib` por el filtro gzip de iostreams, que es el único que se deja encendido.
69build = ["zlib"]