A GNU-free, clean-room Rust reimplementation of the GNU Autotools suite — m4, autoconf, and
automake (with aclocal, autoreconf, autoheader, and friends) — verified against the real GNU
tools as an oracle, never derived from GPL source.
Most people know this set of tools collectively as "autotools." This crate is the single front door to the Rust reimplementation: it re-exports the core library of each tool, and points at the standalone repositories where each one lives and releases.
The GNU Autotools are the most widely deployed build system in the C/C++ world, but they are a stack of
Perl, shell, and GPL M4. autotools-rs is a from-scratch Rust reimplementation whose every behaviour is
settled by an oracle court — the Rust output is diffed byte-for-byte / behaviour-for-behaviour
against the genuine GNU tool across a large corpus of real projects, and only faithful results are
accepted. The result is a fast, dependency-light, permissively-licensed toolchain that aims to build the
same configure/Makefile.in the GNU tools would.
| Tool | Reimplements | Crate | Repository |
|---|---|---|---|
| m4 | GNU M4 macro processor | m4-rs-core |
infinityabundance/m4-rs |
autoconf (+ autoheader, autom4te, autoreconf, autoscan, autoupdate, ifnames) |
GNU Autoconf | autoconf-rs-core |
infinityabundance/autoconf-rs |
automake (+ aclocal) |
GNU Automake | automake-rs-core |
infinityabundance/automake-rs |
[dependencies]
autotools-rs = "0.1"use autotools_rs::{m4, autoconf, automake};
// One dependency reaches the whole suite:
let _engine = autoconf::M4Engine::new();cargo install autotools-rsinstalls the full bundle: autoconf, autoheader, aclocal, automake, autoreconf, m4 —
one command pulls the whole GNU-free toolchain from crates.io and drops the binaries in ~/.cargo/bin.
Each is a thin wrapper over the corresponding published CLI crate's library entrypoint.
autotools-rs is a thin facade by design — it contains no logic. Each tool is developed, tested, and
released in its own repository against its own oracle-court corpus; the umbrella only bundles them under
the name people actually search for. Version dependencies are deliberately loose (^0.1) so the umbrella
does not need a release for every sub-crate patch.
Licensed under either of MIT or Apache-2.0 at your option — the same clean-room permissive terms as the sub-crates.