fixes #67108 by using the external crate

This commit is contained in:
Federico Ponzi 2020-07-18 00:01:27 +02:00
parent 3014f23ddd
commit 4b6a0278fe
No known key found for this signature in database
GPG key ID: CFA9CCFE5363D0C6
3 changed files with 10 additions and 31 deletions

View file

@ -2142,6 +2142,12 @@ dependencies = [
"winapi 0.3.8",
]
[[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"
@ -3318,6 +3324,7 @@ dependencies = [
"log",
"memmap",
"num_cpus",
"pathdiff",
"rustc_apfloat",
"rustc_ast",
"rustc_attr",

View file

@ -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" }

View file

@ -2,6 +2,7 @@
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 {