rust: various build script fixes

This commit is contained in:
puck 2025-02-12 13:12:04 +00:00
parent e42315e67a
commit 8c129e33db
12 changed files with 307 additions and 165 deletions

View file

@ -0,0 +1,70 @@
use std::{
collections::HashMap,
env::{var, var_os},
fs::{File, create_dir},
io::{Read, Write},
os::unix::process::CommandExt,
process::Command,
};
fn parse(data: &str) -> HashMap<String, String> {
let mut out = HashMap::new();
let mut parse_one = |key: &str, value: String, fallback| match key {
"metadata" => {
let (left, right) = value
.split_once('=')
.expect("missing '=' for cargo::metadata");
out.insert(left.to_string(), right.to_string());
}
_ if fallback => {
out.insert(key.to_string(), value);
}
_ => {}
};
for line in data.lines() {
if let Some(data) = line.strip_prefix("cargo::") {
let (key, value) = data.split_once('=').expect("missing '=' on cargo:: line");
parse_one(key, value.to_string(), false);
} else if let Some(data) = line.strip_prefix("cargo:") {
let (key, value) = data.split_once('=').expect("missing '=' on cargo: line");
parse_one(key, value.to_string(), true);
}
}
out
}
fn main() {
create_dir(var_os("OUT_DIR").unwrap()).unwrap();
let mut f = File::create(var_os("out").unwrap()).unwrap();
writeln!(&mut f, "zilch: OUT_DIR={:?}", var("OUT_DIR").unwrap()).unwrap();
let mut cmd = Command::new(var_os("script").unwrap());
cmd.stdout(f).current_dir(var_os("cwd").unwrap());
if let Ok(inherit) = var("_zilch_links") {
if !inherit.is_empty() {
for v in inherit.split('!') {
let (path, name) = v.split_once(':').unwrap();
let mut file = File::open(path).unwrap();
let mut data = String::new();
file.read_to_string(&mut data).unwrap();
let data = parse(&data);
for (k, v) in data {
let mut name = format!("DEP_{}_{}", name, k);
name.make_ascii_uppercase();
cmd.env(name.replace('-', "_"), v);
}
}
}
}
panic!("failed to exec: {:?}", cmd.exec())
}