|
1 | 1 | //SPDX-FileCopyrightText: 2024 @caro@mi.shellgei.org
|
2 | 2 | //SPDX-License-Identifier: BSD-3-Clause
|
3 | 3 |
|
4 |
| -use std::env; |
| 4 | +use cargo_toml::Manifest; |
| 5 | +use std::{env, path::PathBuf}; |
5 | 6 |
|
6 | 7 | fn main() {
|
7 |
| - // BASH_VERSION, BASH_VERSINFO[4] |
| 8 | + // SUSH_VERSION, SUSH_VERSINFO[4] |
8 | 9 | let profile = env::var("PROFILE").unwrap_or("".to_string());
|
9 | 10 | println!("cargo:rustc-env=CARGO_BUILD_PROFILE={profile}");
|
10 |
| - // HOSTTYPE, MACHTYPE, BASH_VERSINFO[5] |
| 11 | + // HOSTTYPE, MACHTYPE, BASH_VERSINFO[5], SUSH_VERSINFO[5] |
11 | 12 | let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or("unknown".to_string());
|
12 | 13 | println!("cargo:rustc-env=CARGO_CFG_TARGET_ARCH={target_arch}");
|
13 |
| - // MACHTYPE, BASH_VERSINFO[5] |
| 14 | + // MACHTYPE, BASH_VERSINFO[5], SUSH_VERSINFO[5] |
14 | 15 | let target_vendor = env::var("CARGO_CFG_TARGET_VENDOR").unwrap_or("unknown".to_string());
|
15 | 16 | println!("cargo:rustc-env=CARGO_CFG_TARGET_VENDOR={target_vendor}");
|
16 |
| - // OSTYPE, MACHTYPE, BASH_VERSINFO[5] |
| 17 | + // OSTYPE, MACHTYPE, BASH_VERSINFO[5], SUSH_VERSINFO[5] |
17 | 18 | let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or("unknown".to_string());
|
18 | 19 | println!("cargo:rustc-env=CARGO_CFG_TARGET_OS={target_os}");
|
| 20 | + |
| 21 | + // metadata |
| 22 | + let manifest_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("Cargo.toml"); |
| 23 | + let manifest = Manifest::from_path(&manifest_path).expect("failed to parse Cargo.toml"); |
| 24 | + // compat |
| 25 | + let compat = manifest |
| 26 | + .package |
| 27 | + .as_ref() |
| 28 | + .and_then(|p| p.metadata.as_ref()?.get("compat")) |
| 29 | + .and_then(|v| v.as_table()) |
| 30 | + .expect("Missing [package.metadata.compat]"); |
| 31 | + for (k, v) in compat { |
| 32 | + let env_key: String = k |
| 33 | + .chars() |
| 34 | + .map(|c| if c.is_ascii_alphanumeric() { c } else { '_' }) |
| 35 | + .collect::<String>() |
| 36 | + .to_ascii_uppercase(); |
| 37 | + let val = v |
| 38 | + .as_str() |
| 39 | + .unwrap_or_else(|| panic!("Non-string value for key {k} in [package.metadata.compat]")); |
| 40 | + println!("cargo:rustc-env=COMPAT_{env_key}={val}"); |
| 41 | + } |
19 | 42 | }
|
0 commit comments