recipes/ripgrep: rg Rust-nativo (Etapa C pieza 4)
ripgrep 14.1.1 (tag, commit 4649aa97) como receta Cargo, mismo patrón que uutils/findutils/diffutils. Es su propio workspace ⇒ sin patch [workspace]. Estático musl, zig cc sólo linker; MSRV 1.72 ≤ 1.91.1. ripgrep-no-jemalloc.patch: ripgrep mete jemallocator incondicional en musl64, pero jemalloc-sys compila C (autotools) y embebe rutas de OUT_DIR ⇒ rompería la reproducibilidad bit-a-bit del lab. El patch lo quita (dep Cargo.toml + stanzas Cargo.lock + global_allocator en main.rs) ⇒ build 100% Rust, hermético, con el allocator de musl. PCRE2 ya es opt-in ⇒ regex puro, sin C. Construye+sella+corre: ELF static sin interpreter, `ripgrep 14.1.1 features:-pcre2`, búsqueda recursiva/glob OK. `rg` no es flag-compatible con POSIX grep ⇒ no se symlinkea a grep; convive con el grep interino. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
# BurntSushi/ripgrep 14.1.1 — `rg`, búsqueda recursiva Rust-nativa (la herramienta grep-family
|
||||
# madura del ecosistema Rust).
|
||||
#
|
||||
# Etapa C pieza 4 (userland Rust-nativo): mismo patrón que uutils/findutils/diffutils — adoptar una
|
||||
# reimplementación MADURA (MIT/Unlicense) como receta Cargo. ripgrep YA es su propio workspace Cargo
|
||||
# (root + crates/*), así que NO necesita el patch [workspace] vacío de los crates sueltos. Esquiva el
|
||||
# bug de zig por construcción: codegen rustc/LLVM, `zig cc` sólo como linker.
|
||||
#
|
||||
# `rg` NO es flag-compatible con POSIX grep (otra UX); no lo symlinkeamos a `grep`. Convive con el
|
||||
# busybox/GNU grep interino (igual que el `sh ash` interino) y aporta la búsqueda moderna del sistema.
|
||||
#
|
||||
# Fuente git pinned al tag 14.1.1 (ADR 0006); ripgrep commitea su Cargo.lock ⇒ vendor + `--locked`
|
||||
# bit-reproducible (MSRV 1.72 ≤ 1.91.1 del sandbox, ver memoria cargo-recipe-msrv-ceiling). Estático
|
||||
# musl con zig cc (sin loader del host).
|
||||
|
||||
name = "ripgrep"
|
||||
version = "14.1.1"
|
||||
|
||||
[source]
|
||||
repo = "https://github.com/BurntSushi/ripgrep"
|
||||
commit = "4649aa9700619f94cf9c66876e9549d83420e16c"
|
||||
# ripgrep mete jemallocator INCONDICIONAL en musl64 (perf), pero jemalloc-sys compila C por autotools
|
||||
# y embebe rutas de OUT_DIR ⇒ rompe la reproducibilidad bit-a-bit del lab. El patch lo quita (dep en
|
||||
# Cargo.toml + stanzas en Cargo.lock + el global_allocator en main.rs) ⇒ build 100% Rust, hermético,
|
||||
# con el allocator de musl. PCRE2 ya es opt-in (no default) ⇒ regex puro, sin C.
|
||||
patches = ["ripgrep-no-jemalloc.patch"]
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "static"
|
||||
# `--bin rg`: el workspace tiene libs (grep, grep-*, ignore, …) + el bin `rg` del paquete ripgrep;
|
||||
# `cargo rustc -- <flags>` exige UN solo target.
|
||||
flags = ["--bin", "rg"]
|
||||
|
||||
# Install: un único binario, sin applets ni symlinks (a diferencia de coreutils/findutils multicall).
|
||||
[build.phases]
|
||||
install = "mkdir -p /out/usr/bin && cp target/release/rg /out/usr/bin/rg"
|
||||
Reference in New Issue
Block a user