From: Zephaniah Ong Date: Thu, 9 Feb 2023 08:01:29 +0000 (+0800) Subject: port over symlink_file function from Build to Config and create symlink for legacy... X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=41c6c5d4996728b5a635319ef9b077a3d0ccc480;p=rust.git port over symlink_file function from Build to Config and create symlink for legacy rustfmt path --- diff --git a/src/bootstrap/download.rs b/src/bootstrap/download.rs index bd67978a766..5c863015adb 100644 --- a/src/bootstrap/download.rs +++ b/src/bootstrap/download.rs @@ -2,7 +2,7 @@ env, ffi::{OsStr, OsString}, fs::{self, File}, - io::{BufRead, BufReader, ErrorKind}, + io::{self, BufRead, BufReader, ErrorKind}, path::{Path, PathBuf}, process::{Command, Stdio}, }; @@ -26,6 +26,14 @@ pub fn is_verbose(&self) -> bool { self.verbose > 0 } + pub fn symlink_file, Q: AsRef>(&self, src: P, link: Q) -> io::Result<()> { + #[cfg(unix)] + use std::os::unix::fs::symlink as symlink_file; + #[cfg(windows)] + use std::os::windows::fs::symlink_file; + if !self.dry_run() { symlink_file(src.as_ref(), link.as_ref()) } else { Ok(()) } + } + pub(crate) fn create(&self, path: &Path, s: &str) { if self.dry_run() { return; @@ -331,6 +339,12 @@ pub(crate) fn maybe_download_rustfmt(&self) -> Option { let bin_root = self.out.join(host.triple).join("rustfmt"); let rustfmt_path = bin_root.join("bin").join(exe("rustfmt", host)); let rustfmt_stamp = bin_root.join(".rustfmt-stamp"); + + let legacy_rustfmt = self.initial_rustc.with_file_name(exe("rustfmt", host)); + if !legacy_rustfmt.exists() { + t!(self.symlink_file(&rustfmt_path, &legacy_rustfmt)); + } + if rustfmt_path.exists() && !program_out_of_date(&rustfmt_stamp, &channel) { return Some(rustfmt_path); } diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index f4abdf1cc57..f753720b353 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -20,7 +20,6 @@ use std::collections::{HashMap, HashSet}; use std::env; use std::fs::{self, File}; -use std::io; use std::io::ErrorKind; use std::path::{Path, PathBuf}; use std::process::{Command, Stdio}; @@ -1407,7 +1406,7 @@ fn copy_internal(&self, src: &Path, dst: &Path, dereference_symlinks: bool) { src = t!(fs::canonicalize(src)); } else { let link = t!(fs::read_link(src)); - t!(self.symlink_file(link, dst)); + t!(self.config.symlink_file(link, dst)); return; } } @@ -1525,14 +1524,6 @@ fn read_dir(&self, dir: &Path) -> impl Iterator { iter.map(|e| t!(e)).collect::>().into_iter() } - fn symlink_file, Q: AsRef>(&self, src: P, link: Q) -> io::Result<()> { - #[cfg(unix)] - use std::os::unix::fs::symlink as symlink_file; - #[cfg(windows)] - use std::os::windows::fs::symlink_file; - if !self.config.dry_run() { symlink_file(src.as_ref(), link.as_ref()) } else { Ok(()) } - } - /// Returns if config.ninja is enabled, and checks for ninja existence, /// exiting with a nicer error message if not. fn ninja(&self) -> bool { diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index 3acc2d4b5c4..07d339c067c 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -516,7 +516,7 @@ fn run(self, builder: &Builder<'_>) -> LlvmResult { let lib_llvm = out_dir.join("build").join("lib").join(lib_name); if !lib_llvm.exists() { - t!(builder.symlink_file("libLLVM.dylib", &lib_llvm)); + t!(builder.build.config.symlink_file("libLLVM.dylib", &lib_llvm)); } }