Bosion

Gather build information for verbose versions flags.

Quick start

In your Cargo.toml:

toml [build-dependencies] bosion = "1.0.1"

In your build.rs:

rust ,no_run fn main() { bosion::gather(); }

In your src/main.rs:

```rust ,ignore include!(env!("BOSION_PATH"));

fn main() { // default output, like rustc -Vv println!("{}", Bosion::long_version());

// with additional fields
println!("{}", Bosion::long_version_with(&[
    ("custom data", "value"),
    ("LLVM version", "15.0.6"),
]));

// enabled features like +feature +an-other
println!("{}", Bosion::CRATE_FEATURE_STRING);

// the raw data
println!("{}", Bosion::GIT_COMMIT_HASH);
println!("{}", Bosion::GIT_COMMIT_SHORTHASH);
println!("{}", Bosion::GIT_COMMIT_DATE);
println!("{}", Bosion::GIT_COMMIT_DATETIME);
println!("{}", Bosion::CRATE_VERSION);
println!("{:?}", Bosion::CRATE_FEATURES);
println!("{}", Bosion::BUILD_DATE);
println!("{}", Bosion::BUILD_DATETIME);

} ```

Advanced usage

Generating a struct with public visibility:

rust ,no_run // build.rs bosion::gather_pub();

Customising the output file and struct names:

rust ,no_run // build.rs bosion::gather_to("buildinfo.rs", "Build", /* public? */ false);

Outputting build-time environment variables instead of source:

```rust ,ignore // build.rs bosion::gathertoenv();

// src/main.rs fn main() { println!("{}", env!("BOSIONGITCOMMITHASH")); println!("{}", env!("BOSIONGITCOMMITSHORTHASH")); println!("{}", env!("BOSIONGITCOMMITDATE")); println!("{}", env!("BOSIONGITCOMMITDATETIME")); println!("{}", env!("BOSIONBUILDDATE")); println!("{}", env!("BOSIONBUILDDATETIME")); println!("{}", env!("BOSIONCRATEVERSION")); println!("{}", env!("BOSIONCRATEFEATURES")); // comma-separated } ```

Custom env prefix:

rust ,no_run // build.rs bosion::gather_to_env_with_prefix("MYAPP_");

Features

Why not...?

Bosion also requires no dependencies outside of build.rs, and was specifically made for crates installed in a variety of ways, like with cargo install, from pre-built binary, from source with git, or from source without git (like a tarball), on a variety of platforms. Its default output with clap is almost exactly like rustc -Vv.

Examples

The examples directory contains a practical and runnable clap-based example, as well as several other crates which are actually used for integration testing.

Here is the output for the Watchexec CLI:

plain watchexec 1.21.1 (5026793 2023-03-05) commit-hash: 5026793a12ff895edf2dafb92111e7bd1767650e commit-date: 2023-03-05 build-date: 2023-03-05 release: 1.21.1 features:

For comparison, here's rustc -Vv:

plain rustc 1.67.1 (d5a82bbd2 2023-02-07) binary: rustc commit-hash: d5a82bbd26e1ad8b7401f6a718a9c57c96905483 commit-date: 2023-02-07 host: x86_64-unknown-linux-gnu release: 1.67.1 LLVM version: 15.0.6