use std::env;
use std::ffi::OsString;
macro_rules! decl_var_os {
($($(#[$meta:meta])* $env:ident)*) => {
$(paste::paste! {
$(#[$meta])*
pub fn [<$env:lower _os>]() -> Option<OsString> {
env::var_os(stringify!($env))
}
})*
};
}
decl_var_os! {
CARGO
CARGO_MANIFEST_DIR
CARGO_MANIFEST_PATH
CARGO_MANIFEST_LINKS
CARGO_MAKEFLAGS
OUT_DIR
TARGET
HOST
NUM_JOBS
OPT_LEVEL
DEBUG
PROFILE
RUSTC
RUSTDOC
RUSTC_WRAPPER
RUSTC_WORKSPACE_WRAPPER
RUSTC_LINKER
CARGO_ENCODED_RUSTFLAGS
CARGO_CFG_FEATURE
CARGO_CFG_UNIX
CARGO_CFG_WINDOWS
CARGO_CFG_TARGET_FAMILY
CARGO_CFG_TARGET_OS
CARGO_CFG_TARGET_ARCH
CARGO_CFG_TARGET_VENDOR
CARGO_CFG_TARGET_ENV
CARGO_CFG_TARGET_ABI
CARGO_CFG_TARGET_POINTER_WIDTH
CARGO_CFG_TARGET_ENDIAN
CARGO_CFG_TARGET_FEATURE
CARGO_PKG_VERSION
CARGO_PKG_VERSION_MAJOR
CARGO_PKG_VERSION_MINOR
CARGO_PKG_VERSION_PATCH
CARGO_PKG_VERSION_PRE
CARGO_PKG_AUTHORS
CARGO_PKG_NAME
CARGO_PKG_DESCRIPTION
CARGO_PKG_HOMEPAGE
CARGO_PKG_REPOSITORY
CARGO_PKG_LICENSE
CARGO_PKG_LICENSE_FILE
CARGO_PKG_RUST_VERSION
CARGO_PKG_README
}
pub fn cargo_feature(name: &str) -> bool {
env::var_os(format!(
"CARGO_FEATURE_{}",
name.to_uppercase().replace('-', "_")
))
.is_some()
}
pub fn cargo_features() -> Vec<String> {
env::vars_os()
.filter_map(|(var, _)| {
var.into_string()
.ok()?
.strip_prefix("CARGO_FEATURE_")
.map(ToOwned::to_owned)
})
.collect()
}
pub fn cargo_cfg_os(cfg: &str) -> Option<OsString> {
env::var_os(format!(
"CARGO_CFG_{}",
cfg.to_uppercase().replace('-', "_")
))
}
pub fn cargo_cfgs_os() -> Vec<(String, OsString)> {
env::vars_os()
.filter_map(|(var, value)| {
var.into_string()
.ok()?
.strip_prefix("CARGO_CFG_")
.map(|k| (k.to_owned(), value))
})
.collect()
}
pub fn cargo_dep_os(name: &str, key: &str) -> Option<OsString> {
env::var_os(format!(
"DEP_{}_{}",
name.to_uppercase().replace('-', "_"),
key.to_uppercase().replace('-', "_")
))
}
pub fn cargo_deps_os() -> Vec<(String, String, OsString)> {
env::vars_os()
.filter_map(|(var, value)| {
var.into_string()
.ok()?
.strip_prefix("DEP_")
.and_then(|s| s.split_once('_'))
.map(|(d, k)| (d.to_owned(), k.to_owned(), value))
})
.collect()
}