aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick <paddi@cryne.me>2024-07-19 23:28:40 +0200
committerGitHub <noreply@github.com>2024-07-19 16:28:40 -0500
commit4ee0b784ea26156445711e605055b7406591621e (patch)
tree6f66b7adba2a5f2c3f90f5192ae0508cc6a6f18e
parent3d717b63e529938b5ca1bd842dc57e2332820ad0 (diff)
downloadazalea-drasl-4ee0b784ea26156445711e605055b7406591621e.tar.xz
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
-rw-r--r--azalea/build.rs22
1 files 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.");
+ }
+ }
}
}