Cierra el primer entregable del roadmap. Cambios: - `Source`: ahora admite dos modos mutuamente excluyentes — `git` (repo+commit) o `tarball` (url+sha256). El hash de entrada del artefacto usa el commit en modo git y el sha256 en modo tarball; ambos son identificadores inmutables del contenido fuente. Validación en `Source::kind()` con error claro. - `fetch`: dispatch por modo. Tarball cacheado en `work/tarballs/<sha>.tar`, descarga vía `curl -fL`, verificación sha256 con `sha2`, extracción con `--strip-components` (default 1, GNU-style). - `recipes/grep.toml`: GNU grep 3.12 desde el tarball release de gnu.org (sha256 fijado, sin patches, `--disable-perl-regexp --disable-nls`). - Bootstrap: añade `binutils` al rootfs Alpine — configure de autotools mira ld/ar/ranlib incluso cuando el compilador real es zig cc. - `.gitignore`: `/work/` (artefactos transitorios del build). - `docs/10-roadmap.md`: Fase 0 y Fase 1 marcadas ✅; entregable cerrado. Nota sobre v3.11 vs v3.12: probé primero v3.11 y el binario producido daba "memory exhausted" en cualquier regex (bug conocido de grep+musl static al inicializar DFA). v3.12 corrige y funciona limpio dentro del rootfs Alpine. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
24 lines
949 B
TOML
24 lines
949 B
TOML
# GNU grep — primer paquete real construido por el lab.
|
|
#
|
|
# Usamos el tarball release (no el árbol git) porque:
|
|
# - Trae `configure` ya generado: no necesitamos correr `./bootstrap` ni traer gnulib
|
|
# como submódulo en el fetch (que pediría red dentro del proceso de bootstrap).
|
|
# - Es como Alpine, Debian, etc. consumen grep en su pipeline de empaque.
|
|
# - El sha256 del tarball es identificador inmutable; pinned igual de fuerte que un
|
|
# commit git para reproducibilidad.
|
|
|
|
name = "grep"
|
|
version = "3.12"
|
|
|
|
[source]
|
|
tarball = "https://ftp.gnu.org/gnu/grep/grep-3.12.tar.gz"
|
|
sha256 = "badda546dfc4b9d97e992e2c35f3b5c7f20522ffcbe2f01ba1e9cdcbe7644cdc"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
# Sin PCRE para el primer build — la receta de pcre2 vive en su propia .toml y se
|
|
# añadirá como dep cuando empezemos a construir el grafo.
|
|
flags = ["--disable-perl-regexp", "--disable-nls"]
|