Skip to content

Latest commit

 

History

History
75 lines (55 loc) · 2.93 KB

README.md

File metadata and controls

75 lines (55 loc) · 2.93 KB

autotools/configure&make support for build.rs

LICENSE dependency status crates.io docs.rs Actions Status

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();