A build dependency to compile a native library that uses autotools or
a compatible configure script + make.
It is based on cmake-rs and the API tries to be as similar as possible to it.
The generated configure script that is often bundled in release tarballs tends to be fairly big, convoluted and at least once has been a vector for
delivering malicious code (CVE-2024-3094.
It is advised to review configure.ac and always regenerate configure using reconf.
For Emscripten targets like "wasm32-unknown-emscripten", configure and
make invocations are passed as arguments to emconfigure and emmake
respectively as described in the Emscripten docs.
Make sure to set the env to CC=clang-{version} and that the compiler is in the PATH. If you are using install-llvm-action,
make sure to set env: true.
Keep in mind that we rely on cc-rs heuristics to select the C and C++ compilers. Some may be missing on your system, please make sure to set
the enviroment variables to select the correct compiler if
the heuristics fail (e.g. musl-gcc might not exist while x86_64-linux-musl-gcc does).
# Cargo.toml
[build-dependencies]
autotools = "0.2"// build.rs
use autotools;
// Build the project in the path `foo` and installs it in `$OUT_DIR`
let dst = autotools::build("foo");
// Simply link the library without using pkg-config
println!("cargo:rustc-link-search=native={}", dst.display());
println!("cargo:rustc-link-lib=static=foo");// build.rs
use autotools::Config;
let dst = Config::new("foo")
.reconf("-ivf")
.enable("feature", None)
.with("dep", None)
.disable("otherfeature", None)
.without("otherdep", None)
.cflag("-Wall")
.build();