13 releases
Uses old Rust 2015
0.2.7 | Apr 8, 2024 |
---|---|
0.2.6 | Feb 20, 2023 |
0.2.5 | Feb 27, 2022 |
0.2.4 | Dec 13, 2021 |
0.1.2 | Mar 11, 2018 |
#17 in Build Utils
181,689 downloads per month
Used in 228 crates
(39 directly)
33KB
484 lines
autotools/configure&make support for build.rs
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.
Autotools concern
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
.
Cross compiling
Emscripten
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.
Custom LLVM on macOS
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
.
Other compilers
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();
Dependencies
~230–325KB