# boost 1.86.0 — HEADERS-ONLY. kactivitymanagerd usa Boost.Container (header-only) ⇒ sólo necesita # Boost_INCLUDE_DIR. No compilamos las libs de boost (b2): copiamos el árbol `boost/` a /usr/include. name = "boost" version = "1.86.0" # licencia: LICENSE_1_0.txt en la raíz del tarball pineado: Boost Software License 1.0 license = "BSL-1.0" [source] tarball = "https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.bz2" sha256 = "1bed88e40401b2cb7a1f76d4bab499e352fa4d0c5f31c0dbae64e24d34d7513b" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" [build.phases] # ⚠ **NO SE USA `bootstrap.sh`, Y EL MOTIVO ESTÁ EN SU LÍNEA 229.** Dos intentos fallaron adivinando # cómo pasarle el compilador, y la respuesta estaba en leer el guion: # # CXX= CXXFLAGS= "$my_dir/tools/build/src/engine/build.sh" ${TOOLSET} # # bootstrap **LIMPIA `CXX` y `CXXFLAGS`** antes de llamar al motor, así que exportarlas no sirve; y # no acepta `--cxx` (sus opciones son `--with-toolset`, `--with-libraries`, `--prefix`… — leídas de # su propio `--help`, no supuestas). El que sí acepta `--cxx` es el guion del MOTOR (`build.sh:272`), # y bootstrap no le reenvía argumentos extra. ⇒ se llama al motor directamente, que es lo que # bootstrap envuelve. # # ⚠ Y el toolset de la BIBLIOTECA no es `cxx`: `cxx` existe sólo para compilar el motor b2 # (`build.sh:416`). Para la biblioteca, b2 trae `clang.jam`/`clang-linux.jam`, y **zig c++ ES # clang** — así que `using clang : : ` es un MAPEO, no una invención. Mi primer intento # escribió `using gcc` apuntando al mismo envoltorio, que era inventarle un toolset. configure = ''' set -e printf '#!/bin/sh\nexec /opt/zig/zig c++ -mcpu=baseline "$@"\n' > .zcxx; chmod +x .zcxx printf '#!/bin/sh\nexec /opt/zig/zig ar "$@"\n' > .zar; chmod +x .zar printf '#!/bin/sh\nexec /opt/zig/zig ranlib "$@"\n' > .zranlib; chmod +x .zranlib ./tools/build/src/engine/build.sh --cxx="$PWD/.zcxx" cxx [ -x ./tools/build/src/engine/b2 ] || { echo "boost: el motor b2 no se construyó" >&2; exit 1; } # El `using clang` lleva también archivador e indexador: sin ellos b2 invoca `ar`/`ranlib` del PATH, # que en este lab no son los de la cadena. printf 'using clang : : %s/.zcxx : %s/.zar %s/.zranlib ;\n' "$PWD" "$PWD" "$PWD" > project-config.jam ''' compile = ''' set -e ./tools/build/src/engine/b2 -j"$(nproc)" toolset=clang --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] # `zlib` por el filtro gzip de iostreams, que es el único que se deja encendido. build = ["zlib"]