From d81bd2517ae63651cd0e20a153a1e379e4bd83cc Mon Sep 17 00:00:00 2001 From: Xiliang Chen Date: Thu, 25 Mar 2021 13:34:13 +1300 Subject: [PATCH] add build-script-utils from Substrate (#422) --- Cargo.dev.toml | 1 + build-script-utils/Cargo.toml | 14 ++++++++ build-script-utils/README.md | 3 ++ build-script-utils/src/lib.rs | 5 +++ build-script-utils/src/version.rs | 55 +++++++++++++++++++++++++++++++ 5 files changed, 78 insertions(+) create mode 100644 build-script-utils/Cargo.toml create mode 100644 build-script-utils/README.md create mode 100644 build-script-utils/src/lib.rs create mode 100644 build-script-utils/src/version.rs diff --git a/Cargo.dev.toml b/Cargo.dev.toml index bb6b15656..62df286d2 100644 --- a/Cargo.dev.toml +++ b/Cargo.dev.toml @@ -17,6 +17,7 @@ members = [ "xtokens", "xcm-support", "unknown-tokens", + "build-script-utils", ] resolver = "2" diff --git a/build-script-utils/Cargo.toml b/build-script-utils/Cargo.toml new file mode 100644 index 000000000..c5d311634 --- /dev/null +++ b/build-script-utils/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "orml-build-script-utils" +description = "Crate with utility functions for `build.rs` scripts." +repository = "https://github.com/open-web3-stack/open-runtime-module-library/tree/master/build-script-utils" +license = "Apache-2.0" +version = "0.4.1-dev" +authors = ["Parity Technologies ", "Laminar Developers "] +edition = "2018" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +platforms = "1.1" diff --git a/build-script-utils/README.md b/build-script-utils/README.md new file mode 100644 index 000000000..1c184f673 --- /dev/null +++ b/build-script-utils/README.md @@ -0,0 +1,3 @@ +Crate with utility functions for `build.rs` scripts. + +License: Apache-2.0 \ No newline at end of file diff --git a/build-script-utils/src/lib.rs b/build-script-utils/src/lib.rs new file mode 100644 index 000000000..6d3177d51 --- /dev/null +++ b/build-script-utils/src/lib.rs @@ -0,0 +1,5 @@ +//! Crate with utility functions for `build.rs` scripts. + +mod version; + +pub use version::*; diff --git a/build-script-utils/src/version.rs b/build-script-utils/src/version.rs new file mode 100644 index 000000000..599f0d617 --- /dev/null +++ b/build-script-utils/src/version.rs @@ -0,0 +1,55 @@ +use platforms::*; +use std::process::Command; + +/// Generate the `cargo:` key output +pub fn generate_cargo_keys() { + println!( + "cargo:rustc-env=SUBSTRATE_CLI_IMPL_VERSION={}", + get_version(get_commit()) + ) +} + +fn get_platform() -> String { + let env_dash = if TARGET_ENV.is_some() { "-" } else { "" }; + + format!( + "{}-{}{}{}", + TARGET_ARCH.as_str(), + TARGET_OS.as_str(), + env_dash, + TARGET_ENV.map(|x| x.as_str()).unwrap_or(""), + ) +} + +fn get_version(impl_commit: String) -> String { + let commit_dash = if impl_commit.is_empty() { "" } else { "-" }; + + format!( + "{}{}{}-{}", + std::env::var("CARGO_PKG_VERSION").unwrap_or_default(), + commit_dash, + impl_commit, + get_platform(), + ) +} + +fn get_commit() -> String { + let commit = std::env::var("GIT_COMMIT").unwrap_or_default(); + if !commit.is_empty() { + return commit; + } + + let output = Command::new("git").args(&["rev-parse", "--short", "HEAD"]).output(); + + match output { + Ok(o) if o.status.success() => String::from_utf8_lossy(&o.stdout).trim().into(), + Ok(o) => { + println!("cargo:warning=Git command failed with status: {}", o.status); + "unknown".into() + } + Err(err) => { + println!("cargo:warning=Failed to execute git command: {}", err); + "unknown".into() + } + } +}