From 4ee0b784ea26156445711e605055b7406591621e Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 19 Jul 2024 23:28:40 +0200 Subject: Determine rust channel by parsing rustc output if env vars do not exist (#163) * Determine rust channel by parsing rustc output The RUSTUP_TOOLCHAIN environment variable might not always be present. This is the case for e.g. NixOS where rust is routinely not installed via rustup, thus not setting this env var, causing build failures. Instead, build.rs will now run `rustc -V` and check if the output contains the word "nightly". * Check env vars first, fall back to rustc in $PATH * Try to check RUSTUP_TOOLCHAIN first --- azalea/build.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/azalea/build.rs b/azalea/build.rs index f97dce65..25fff0e5 100644 --- a/azalea/build.rs +++ b/azalea/build.rs @@ -1,8 +1,24 @@ use std::env; +use std::process::Command; fn main() { - let rust_toolchain = env::var("RUSTUP_TOOLCHAIN").unwrap(); - if rust_toolchain.starts_with("stable") { - panic!("Azalea currently requires nightly Rust. You can use `rustup override set nightly` to set the toolchain for this directory."); + match env::var("RUSTUP_TOOLCHAIN") { + Ok(rust_toolchain) if !rust_toolchain.starts_with("nightly") => { // stable & beta + panic!("Azalea currently requires nightly Rust. You can use `rustup override set nightly` to set the toolchain for this directory."); + } + Ok(_) => return, // nightly + Err(_) => { // probably not installed via rustup, run rustc and parse its output + let rustc_command = env::var("RUSTC") + .or_else(|_| env::var("CARGO_BUILD_RUSTC")) + .unwrap_or(String::from("rustc")); + let rustc_version_output = Command::new(rustc_command).arg("-V").output().unwrap(); + if !rustc_version_output.status.success() + || !String::from_utf8(rustc_version_output.stdout) + .unwrap() + .contains("nightly") + { + panic!("Azalea currently requires nightly Rust. It seems that you did not install Rust via rustup. Please check the documentation for your installation method, to find out how to use nightly Rust."); + } + } } } -- cgit v1.2.3