autotools 0.2.7

A build dependency to build native libraries that use configure&make-style build systems
Documentation
# autotools/configure&make support for build.rs

[![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![dependency status](https://deps.rs/repo/github/lu-zero/autotools-rs/status.svg)](https://deps.rs/repo/github/lu-zero/autotools-rs)
[![crates.io](https://img.shields.io/crates/v/autotools.svg?style=flat)](https://crates.io/crates/autotools)
[![docs.rs](https://docs.rs/autotools/badge.svg)](https://docs.rs/autotools)
[![Actions Status](https://github.com/lu-zero/autotools-rs/workflows/autotools-rs-compact/badge.svg)](https://github.com/lu-zero/autotools-rs/actions)


A build dependency to compile a native library that uses [autotools][1] or
a compatible `configure` script + `make`.

It is based on [cmake-rs](https://github.com/alexcrichton/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][cve-xz].

It is advised to review `configure.ac` and always regenerate `configure` using [`reconf`][reconf].

[cve-xz]: https://nvd.nist.gov/vuln/detail/CVE-2024-3094
[reconf]: https://docs.rs/autotools/latest/autotools/struct.Config.html#method.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](https://emscripten.org/docs/compiling/Building-Projects.html#integrating-with-a-build-system).

### 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](https://github.com/KyleMayes/install-llvm-action),
make sure to set [`env: true`](https://github.com/KyleMayes/install-llvm-action#env).

### 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](https://github.com/rust-lang/cc-rs#external-configuration-via-environment-variables) to select the correct compiler if
the heuristics fail (e.g. `musl-gcc` might not exist while `x86_64-linux-musl-gcc` does).



``` toml
# Cargo.toml
[build-dependencies]
autotools = "0.2"
```

``` rust
// 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");
```

``` rust
// 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();
```

[1]: https://www.gnu.org/software/autoconf/autoconf.html