cargo-post 0.1.3

A `cargo` wrapper that executes a post build script after a successful build.
cargo-post-0.1.3 is not a library.

cargo-post

A cargo wrapper that executes a post build script after a successful build.

Installation

cargo install cargo-post

Usage

Execute cargo CMD [ARGS] and run post_build.rs afterwards:

cargo post CMD [ARGS]

The post_build.rs is only run if CMD is a build command like build or xbuild.

Examples:

Build the crate and run post_build.rs afterwards:

cargo post build

Build the crate in release mode and run post_build.rs afterwards:

cargo post build --release

Builds the crate using cargo-xbuild:

cargo post xbuild

Check the crate without executing post_build:

cargo post check

The build script is not executed because cargo check is not a build command. The same behavior occurs for cargo post doc or cargo post update.

Post-Build Script Format

Post-build scripts are similar to cargo build scripts, but they get a different set of environment variables:

  • CRATE_BUILD_COMMAND: The full cargo command that was used for building without post
    • Example: When the crate is compiled using cargo post build --release, the environment variable has the value cargo build --release.
  • CRATE_MANIFEST_DIR: The directory where the Cargo.toml of the crates lives.
  • CRATE_MANIFEST_PATH: The path to the Cargo.toml of the crates.
  • CRATE_PROFILE: debug or release, depending on whether --release was passed in the build command.
  • CRATE_TARGET: The full content of what was passed as --target or the empty string if no --target was passed.
  • CRATE_TARGET_TRIPLE: The target triple of the passed --target or the empty string if no --target was passed.
    • Example: With cargo post xbuild --target /some/path/to/your/target-x86_64.json this environment variable has the value target-x86_64.
  • CRATE_TARGET_DIR: The path to the target directory of your crate.
  • CRATE_OUT_DIR: The path to the directory where cargo puts the compiled binaries. This path is constructed by appending CRATE_TARGET_TRIPLE and CRATE_PROFILE to CRATE_TARGET_DIR.

Dependencies

Dependencies for post build scripts can be specified in a [package.metadata.cargo-post.dependencies] table in your Cargo.toml.

Example

use std::env;

fn main() {
    println!("Hello from post build script!");
    for (key, value) in env::vars() {
        if key.starts_with("CRATE_") {
            println!("{}: {}", key, value);
        }
    }
}

License

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.