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// }