devela/build/environment.rs
1// devela::build::utils
2//
3//! Build script environment variables.
4//
5// https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts
6
7pub(crate) fn main() -> Result<(), std::io::Error> {
8 // This environment variable will be set if the package being built is primary.
9 let cargo_primary_package = option_env!("CARGO_PRIMARY_PACKAGE");
10 if cargo_primary_package.is_some() {
11 println!("cargo:rustc-cfg=cargo_primary_package");
12 }
13 // https://doc.rust-lang.org/reference/conditional-compilation.html#target_os
14 // let target_os = std::env::var("CARGO_CFG_TARGET_OS");
15 // match target_os.as_ref().map(|x| &**x) {
16 // // Ok(tos) => println!("cargo:rustc-cfg={tos}"),
17 // // Ok(tos) => println!("cargo:rustc-cfg={}", tos),
18 // Ok(tos) => println!("cargo:rustc-cfg=linuxX"),
19 // Err(_)=> {},
20 // }
21 // if let Ok(tos) = target_os.as_ref().map(|x| &**x) {
22 // println!("cargo:rustc-cfg={tos}");
23 // }
24
25 #[cfg(feature = "__dbg")]
26 {
27 use super::utils::{println, println_heading, println_var, println_var_encoded};
28
29 // https://doc.rust-lang.org/cargo/reference/environment-variables.html
30 println_heading("Environment variables:");
31
32 if let Some(v) = cargo_primary_package {
33 println(&format!["· CARGO_PRIMARY_PACKAGE={v}"]);
34 } else {
35 println("x CARGO_PRIMARY_PACKAGE");
36 }
37
38 println_var("CARGO_MANIFEST_DIR");
39 println_var("CARGO_MANIFEST_PATH");
40 println_var("OUT_DIR");
41
42 println_var("HOST");
43 println_var("TARGET");
44 // match target_os.as_ref().map(|x| &**x) {
45 // // Ok(tos) => println!("cargo:warning=target os {tos:?}"),
46 // Ok(tos) => println(&format!["· CARGO_CFG_TARGET_OS={tos}"]),
47 // Err(err) => println(&format!["x CARGO_CFG_TARGET_OS ({err:?})"]),
48 // }
49 println_var("PROFILE");
50 println_var("NUM_JOBS");
51
52 println_var("RUSTC");
53 // println_var("RUSTC_WRAPPER");
54 // println_var("RUSTC_LINKER");
55 // println_var("RUSTDOC");
56 // println_var("CARGO");
57 // println_var("CARGO_MAKEFLAGS");
58 // println_var("CARGO_ENCODED_RUSTFLAGS");
59
60 // for (key, value) in std::env::vars() {
61 // super::utils::println(&format![">> {key}: {value}"]);
62 // }
63
64 println_var_encoded("CARGO_ENCODED_RUSTFLAGS", "RUSTFLAGS");
65 println_var("RUSTDOCFLAGS");
66 }
67
68 Ok(())
69}
70
71// WIP
72// pub fn run_cargo_tree_with_features() {
73// let features = ENABLED_FEATURES.get().expect("ENABLED_FEATURES not initialized");
74//
75// if features.is_empty() {
76// println!("No features enabled. Running cargo tree without features...");
77// Command::new("cargo")
78// .args(["tree", "--format", "PACKAGE:{p} FEATURES:{f}"])
79// .status()
80// .expect("Failed to execute cargo tree");
81// return;
82// }
83//
84// let feature_list: String = features
85// .iter()
86// .map(|s| s.as_str()) // Convert StaticStr<24> to &str
87// .collect::<Vec<_>>() // Collect into Vec<&str>
88// .join(","); // Join as comma-separated list
89//
90// println!("Running cargo tree with features: {}", feature_list);
91//
92// Command::new("cargo")
93// .args(["tree", "--format", "PACKAGE:{p} FEATURES:{f}", "--features", &feature_list])
94// .status()
95// .expect("Failed to execute cargo tree");
96// }