about summary refs log tree commit diff
diff options
context:
space:
mode:
authorScott Mabin <scott@mabez.dev>2024-02-24 21:19:10 +0000
committerScott Mabin <scott@mabez.dev>2024-02-24 21:19:10 +0000
commit9f1d4aa4b9e4a1572c1210b3bd7c7490778b6112 (patch)
tree1a9afaa5570f44b86dd18da8409ad8a35269dae3
parent4a8d0f7f565b6df45da5522dd7366a4df3460cd7 (diff)
downloadrust-9f1d4aa4b9e4a1572c1210b3bd7c7490778b6112.tar.gz
rust-9f1d4aa4b9e4a1572c1210b3bd7c7490778b6112.zip
prioritise rustup sysroots over system ones
`get_path_for_executable` will now first check `$CARGO_HOME` before falling back to searching `$PATH`.

rustup is the recommended way to manage rust toolchains, therefore should be picked before the
system toolchain.
-rw-r--r--crates/toolchain/src/lib.rs14
1 files changed, 7 insertions, 7 deletions
diff --git a/crates/toolchain/src/lib.rs b/crates/toolchain/src/lib.rs
index ae71b6700c0..793138588a3 100644
--- a/crates/toolchain/src/lib.rs
+++ b/crates/toolchain/src/lib.rs
@@ -63,21 +63,17 @@ fn get_path_for_executable(executable_name: &'static str) -> PathBuf {
     // The current implementation checks three places for an executable to use:
     // 1) Appropriate environment variable (erroring if this is set but not a usable executable)
     //      example: for cargo, this checks $CARGO environment variable; for rustc, $RUSTC; etc
-    // 2) `<executable_name>`
-    //      example: for cargo, this tries just `cargo`, which will succeed if `cargo` is on the $PATH
-    // 3) `$CARGO_HOME/bin/<executable_name>`
+    // 2) `$CARGO_HOME/bin/<executable_name>`
     //      where $CARGO_HOME defaults to ~/.cargo (see https://doc.rust-lang.org/cargo/guide/cargo-home.html)
     //      example: for cargo, this tries $CARGO_HOME/bin/cargo, or ~/.cargo/bin/cargo if $CARGO_HOME is unset.
     //      It seems that this is a reasonable place to try for cargo, rustc, and rustup
+    // 3) `<executable_name>`
+    //      example: for cargo, this tries just `cargo`, which will succeed if `cargo` is on the $PATH
     let env_var = executable_name.to_ascii_uppercase();
     if let Some(path) = env::var_os(env_var) {
         return path.into();
     }
 
-    if lookup_in_path(executable_name) {
-        return executable_name.into();
-    }
-
     if let Some(mut path) = get_cargo_home() {
         path.push("bin");
         path.push(executable_name);
@@ -86,6 +82,10 @@ fn get_path_for_executable(executable_name: &'static str) -> PathBuf {
         }
     }
 
+    if lookup_in_path(executable_name) {
+        return executable_name.into();
+    }
+
     executable_name.into()
 }