built
provides a crate with information from the time it was built.
built
is used as a build-time dependency to collect various information
about the build environment, serialize it into Rust-code and compile
it into the final crate. The information collected by built
include:
Cargo.toml
cfg!
, like target_os
and target_arch
.Travis CI
and AppVeyor
.```rust pub mod builtinfo { include!(concat!(env!("OUTDIR"), "/built.rs")); }
info!("This is version {}{}, built for {} by {}.", builtinfo::PKGVERSION, builtinfo::GITVERSION.maporelse(|| "".toowned(), |v| format!(" (git {})", v)), builtinfo::TARGET, builtinfo::RUSTCVERSION); trace!("I was built with profile \"{}\", features \"{}\" on {} using {}", builtinfo::PROFILE, builtinfo::FEATURESSTR, builtinfo::BUILTTIMEUTC, builtinfo::DEPENDENCIESSTR); ```
``` This is version 0.1.0 (git 62eb1e2), built for x86_64-apple-darwin by rustc 1.16.0-nightly (bf6d7b665 2017-01-15).
I was built with profile "debug", features "DEFAULT, ERRPRINTLN" on Thu, 16 Feb 2017 19:00:08 GMT using androidglue 0.2.1, ansi_term 0.9.0, bitflags 0.3.3, bitflags 0.4.0, bitflags 0.6.0, bitflags 0.7.0, block 0.1.6, built 0.1.0, byteorder 0.5.3, bytes 0.3.0, cfg-if 0.1.0, cgl 0.1.5, cgmath 0.7.0, ... ```
```rust extern crate built; extern crate time; extern crate semver;
pub mod builtinfo { include!(concat!(env!("OUTDIR"), "/built.rs")); }
if (builtinfo::PKGVERSIONPRE != "" || builtinfo::GITVERSION.issome()) && (built::util::strptime(builtinfo::BUILTTIMEUTC) - time::now()).numdays() > 180 { println!("You are running a development version that is really old. Update soon!"); }
if builtinfo::CIPLATFORM.is_some() { panic!("Muahahaha, there will be no commit for you, Peter Pan!"); }
let deps = builtinfo::DEPENDENCIES; if built::util::parseversions(&deps) .any(|(name, ver)| name == "DeleteAllMyFiles" && ver < semver::Version::parse("1.1.4").unwrap()) { warn!("DeleteAllMyFiles < 1.1.4 is known to sometimes not really delete all your files. Beware!"); } ```