Skip to content

Commit

Permalink
feat(buildrs): add linux sysinfo
Browse files Browse the repository at this point in the history
  • Loading branch information
spmadden committed Oct 26, 2024
1 parent bf43c95 commit 1c8e352
Showing 1 changed file with 81 additions and 8 deletions.
89 changes: 81 additions & 8 deletions libraries/build-rs/src/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,11 @@ pub static RUSTC_ENV_VARIABLES: [&str; 10] = [
"DEBUG",
];

pub static BUILD_HOST_VARIABLES: [&str; 6] = [
pub static BUILD_HOST_VARIABLES: [&str; 7] = [
"RUSTC_VERSION",
"CARGO_VERSION",
"BUILD_HOST_HOSTNAME",
"BUILD_HOST_KERNELVER",
"BUILD_HOST_OSNAME",
"BUILD_HOST_OSVER",
"BUILD_TIME",
Expand All @@ -60,17 +61,20 @@ static COMMANDS: &[(&str, &[&str])] = &[
("RUSTC_VERSION", &["rustc", "--version"]),
("CARGO_VERSION", &["cargo", "--version"]),
];

fn run_command(cmd: &[&str]) -> Result<String, Error> {
let output = std::process::Command::new(cmd[0])
.args(&cmd[1..])
.output()?;
let res = String::from_utf8_lossy(&output.stdout);
let res = res.trim();
Ok(res.to_string())
}
pub fn load_buildhost_variables(env: &mut BuildEnvironment) -> Result<(), Error> {
for (var, cmd) in COMMANDS {
let output = std::process::Command::new(cmd[0])
.args(&cmd[1..])
.output()?;
let res = String::from_utf8_lossy(&output.stdout);
let res = res.trim();
let res = run_command(cmd)?;
env.variables.insert(
var.to_string(),
BuildVariable::new_str(var, res, VariableSource::BuildHost),
BuildVariable::new_str(var, &res, VariableSource::BuildHost),
);
}

Expand All @@ -80,10 +84,14 @@ pub fn load_buildhost_variables(env: &mut BuildEnvironment) -> Result<(), Error>
BuildVariable::new_str("BUILD_TIME", &build_time, VariableSource::BuildHost),
);

#[cfg(target_os = "windows")]
load_windows_sysinfo(env)?;
#[cfg(target_os = "linux")]
load_linux_sysinfo(env)?;

Ok(())
}
#[cfg(target_os = "windows")]
pub fn load_windows_sysinfo(env: &mut BuildEnvironment) -> Result<(), Error> {
static SYSINFO_VARS: &[(&str, &str)] = &[
("BUILD_HOST_HOSTNAME", "Host Name"),
Expand Down Expand Up @@ -120,3 +128,68 @@ pub fn load_windows_sysinfo(env: &mut BuildEnvironment) -> Result<(), Error> {

Ok(())
}
#[cfg(target_os = "linux")]
pub fn load_linux_sysinfo(env: &mut BuildEnvironment) -> Result<(), Error> {
let kernel_ver = run_command(&["uname", "-r"])?;
env.variables.insert(
"BUILD_HOST_KERNELVER".to_string(),
BuildVariable::new_str(
"BUILD_HOST_HOSTNAME",
&kernel_ver,
VariableSource::BuildHost,
),
);
let hostname = run_command(&["uname", "-n"])?;
env.variables.insert(
"BUILD_HOST_HOSTNAME".to_string(),
BuildVariable::new_str("BUILD_HOST_HOSTNAME", &hostname, VariableSource::BuildHost),
);
let mut found_prettyname = false;
let reader = BufReader::new(
std::fs::OpenOptions::new()
.read(true)
.open("/etc/os-release")?,
);
for line in reader.lines() {
let line = line?;
let Some((key, val)) = line.split_once('=') else {
continue;
};
let val = val.replace('"', "");
let key = key.trim();
let mut name = None;
let mut version = None;
match key {
"PRETTY_NAME" => {
found_prettyname = true;
let var =
BuildVariable::new_str("BUILD_HOST_OSNAME", &val, VariableSource::BuildHost);
env.variables.insert("BUILD_HOST_OSNAME".to_string(), var);
}
"NAME" => {
name = Some(val.to_string());
}
"VERSION" => {
version = Some(val.to_string());
}
_ => continue,
}
if let Some(version) = version {
let var =
BuildVariable::new_str("BUILD_HOST_OSVER", &version, VariableSource::BuildHost);
env.variables.insert("BUILD_HOST_OSVER".to_string(), var);
if !found_prettyname {
if let Some(name) = name {
let osname = format!("{name} {version}");
let var = BuildVariable::new_str(
"BUILD_HOST_OSNAME",
&osname,
VariableSource::BuildHost,
);
env.variables.insert("BUILD_HOST_OSNAME".to_string(), var);
}
}
}
}
Ok(())
}

0 comments on commit 1c8e352

Please # to comment.