feat(rust/make): Add GNU Make-compatible build system driver in Rust
Implements a Makefile parser and build engine covering core GNU Make features:
- Variable assignment (recursive =, simple :=, conditional ?=, append +=, shell !=)
- Explicit rules, pattern rules (%.o: %.c), double-colon rules
- Automatic variables ($@, $<, $^, $+, $?, $*, $(@D), $(@F))
- Built-in functions (subst, patsubst, filter, filter-out, sort, wildcard,
shell, foreach, call, eval, if, or, and, dir, notdir, suffix, basename,
addprefix, addsuffix, word, words, firstword, lastword, join, strip,
findstring, realpath, abspath, error, warning, info, origin, flavor, value)
- Conditional directives (ifdef, ifndef, ifeq, ifneq, else, endif)
- Include/sinclude directives with glob support
- Special targets (.PHONY, .SUFFIXES, .DEFAULT, etc.)
- Order-only prerequisites (target: normal | order-only)
- Default implicit rules for C/C++/assembly compilation
- Export/unexport, override, define/endef, undefine, vpath
- Command-line options (-f, -C, -j, -n, -s, -k, -t, -q, -B)
Wires into rust/nixpkgs as the make component replacement.
Signed-off-by: Niclas Overby <niclas@overby.me>
feat(rust/bash): Add Bash-compatible shell written in Rust
Implements a lexer, parser, and interpreter covering core bash features:
- Variable assignment/expansion (simple, parameter, arithmetic)
- Control flow (if/elif/else, for, while, until, case)
- Functions with local variables and recursion
- Pipes and I/O redirections (>, >>, <, 2>&1, here-docs, here-strings)
- Command substitution via fork+pipe (inherits shell state)
- Pattern matching and globbing
- Common builtins (echo, cd, export, source, set, test, read, etc.)
- Shell options (set -euo pipefail, errexit exemptions for conditions)
- ANSI-C quoting, tilde expansion, word splitting
Replaces brush in rust/nixpkgs shell component with rust-bash.
Signed-off-by: Niclas Overby <niclas@overby.me>