at master 2.0 kB view raw
1diff --git a/src/main.rs b/src/main.rs 2index 3cb6896..7f070e0 100644 3--- a/src/main.rs 4+++ b/src/main.rs 5@@ -275,7 +275,9 @@ fn install_single_toolchain( 6 7 // install 8 if maybe_dry_client.is_some() { 9- rename(&toolchain.dest, toolchain_path)?; 10+ rename(&toolchain.dest, toolchain_path.clone())?; 11+ nix_patchelf(toolchain_path) 12+ .expect("failed to patch toolchain for NixOS"); 13 eprintln!( 14 "toolchain `{}` is successfully installed!", 15 toolchain.dest.display() 16@@ -291,6 +293,45 @@ fn install_single_toolchain( 17 Ok(()) 18 } 19 20+fn nix_patchelf(mut toolchain_path: PathBuf) -> Result<(), Error> { 21+ toolchain_path.push("bin"); 22+ 23+ for entry in toolchain_path.read_dir()? { 24+ let entry = entry?; 25+ if !entry.file_type()?.is_file() { 26+ continue; 27+ } 28+ 29+ eprintln!("info: you seem to be running NixOS. Attempting to patch {}", 30+ entry.path().to_str().unwrap()); 31+ let _ = ::std::process::Command::new("@patchelf@/bin/patchelf") 32+ .arg("--set-interpreter") 33+ .arg("@dynamicLinker@") 34+ .arg(entry.path()) 35+ .output(); 36+ } 37+ 38+ toolchain_path.pop(); 39+ toolchain_path.push("lib"); 40+ 41+ for entry in toolchain_path.read_dir()? { 42+ let entry = entry?; 43+ if !entry.file_type()?.is_file() { 44+ continue; 45+ } 46+ 47+ eprintln!("info: you seem to be running NixOS. Attempting to patch {}", 48+ entry.path().to_str().unwrap()); 49+ let _ = ::std::process::Command::new("@patchelf@/bin/patchelf") 50+ .arg("--set-rpath") 51+ .arg("@libPath@") 52+ .arg(entry.path()) 53+ .output(); 54+ } 55+ 56+ Ok(()) 57+} 58+ 59 fn fetch_master_commit(client: &Client, github_token: Option<&str>) -> Result<String, Error> { 60 eprintln!("fetching master commit hash... "); 61 fetch_master_commit_via_git()