diff options
| author | Federico Ponzi <isaacisback92@gmail.com> | 2020-07-18 00:01:27 +0200 |
|---|---|---|
| committer | Federico Ponzi <isaacisback92@gmail.com> | 2020-07-18 00:01:27 +0200 |
| commit | 4b6a0278fe2d1c8d74a6bfe5b14c3022ca3b3c46 (patch) | |
| tree | 4f8beb727fc0bea33c7ead7f353eadde41d948a1 | |
| parent | 3014f23ddd437d2ba9947383c4565d09c1eb39f2 (diff) | |
| download | rust-4b6a0278fe2d1c8d74a6bfe5b14c3022ca3b3c46.tar.gz rust-4b6a0278fe2d1c8d74a6bfe5b14c3022ca3b3c46.zip | |
fixes #67108 by using the external crate
| -rw-r--r-- | Cargo.lock | 7 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/Cargo.toml | 1 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/back/rpath.rs | 33 |
3 files changed, 10 insertions, 31 deletions
diff --git a/Cargo.lock b/Cargo.lock index 28ff6b3b1eb..3ee7d079007 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2143,6 +2143,12 @@ dependencies = [ ] [[package]] +name = "pathdiff" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877630b3de15c0b64cc52f659345724fbf6bdad9bd9566699fc53688f3c34a34" + +[[package]] name = "percent-encoding" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3318,6 +3324,7 @@ dependencies = [ "log", "memmap", "num_cpus", + "pathdiff", "rustc_apfloat", "rustc_ast", "rustc_attr", diff --git a/src/librustc_codegen_ssa/Cargo.toml b/src/librustc_codegen_ssa/Cargo.toml index eeb6b4aabcf..e100e0095c9 100644 --- a/src/librustc_codegen_ssa/Cargo.toml +++ b/src/librustc_codegen_ssa/Cargo.toml @@ -18,6 +18,7 @@ log = "0.4.5" libc = "0.2.50" jobserver = "0.1.11" tempfile = "3.1" +pathdiff = "0.2.0" rustc_serialize = { path = "../librustc_serialize" } rustc_ast = { path = "../librustc_ast" } diff --git a/src/librustc_codegen_ssa/back/rpath.rs b/src/librustc_codegen_ssa/back/rpath.rs index c02e4f279b1..e1d649c6ed3 100644 --- a/src/librustc_codegen_ssa/back/rpath.rs +++ b/src/librustc_codegen_ssa/back/rpath.rs @@ -2,6 +2,7 @@ use rustc_data_structures::fx::FxHashSet; use std::env; use std::fs; use std::path::{Path, PathBuf}; +use pathdiff::diff_paths; use rustc_hir::def_id::CrateNum; use rustc_middle::middle::cstore::LibSource; @@ -109,37 +110,7 @@ fn get_rpath_relative_to_output(config: &mut RPathConfig<'_>, lib: &Path) -> Str // In particular, this handles the case on unix where both paths are // absolute but with only the root as the common directory. fn path_relative_from(path: &Path, base: &Path) -> Option<PathBuf> { - use std::path::Component; - - if path.is_absolute() != base.is_absolute() { - path.is_absolute().then(|| PathBuf::from(path)) - } else { - let mut ita = path.components(); - let mut itb = base.components(); - let mut comps: Vec<Component<'_>> = vec![]; - loop { - match (ita.next(), itb.next()) { - (None, None) => break, - (Some(a), None) => { - comps.push(a); - comps.extend(ita.by_ref()); - break; - } - (None, _) => comps.push(Component::ParentDir), - (Some(a), Some(b)) if comps.is_empty() && a == b => (), - (Some(a), Some(b)) if b == Component::CurDir => comps.push(a), - (Some(_), Some(b)) if b == Component::ParentDir => return None, - (Some(a), Some(_)) => { - comps.push(Component::ParentDir); - comps.extend(itb.map(|_| Component::ParentDir)); - comps.push(a); - comps.extend(ita.by_ref()); - break; - } - } - } - Some(comps.iter().map(|c| c.as_os_str()).collect()) - } + diff_paths(path, base) } fn get_install_prefix_rpath(config: &mut RPathConfig<'_>) -> String { |
