# 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" license = "Unlicense OR MIT" [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 -- ` 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"