mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 02:03:53 +00:00
Auto merge of #38798 - jsgf:fix-rpath, r=nikomatsakis
rustc: use -Xlinker when specifying an rpath with ',' in it The `-Wl` option splits its parameters on commas, so if rustc specifies `-Wl,-rpath,<path>` when `<path>` contains commas, the path gets split up and the linker gets a partial path and spurious extra parameters. Gcc/clang support the more verbose `-Xlinker` option to pass options to the linker directly, so use it for comma-containing paths. Fixes issue #38795.
This commit is contained in:
commit
47c8d9fdcf
@ -51,7 +51,13 @@ pub fn get_rpath_flags(config: &mut RPathConfig) -> Vec<String> {
|
|||||||
fn rpaths_to_flags(rpaths: &[String]) -> Vec<String> {
|
fn rpaths_to_flags(rpaths: &[String]) -> Vec<String> {
|
||||||
let mut ret = Vec::new();
|
let mut ret = Vec::new();
|
||||||
for rpath in rpaths {
|
for rpath in rpaths {
|
||||||
ret.push(format!("-Wl,-rpath,{}", &(*rpath)));
|
if rpath.contains(',') {
|
||||||
|
ret.push("-Wl,-rpath".into());
|
||||||
|
ret.push("-Xlinker".into());
|
||||||
|
ret.push(rpath.clone());
|
||||||
|
} else {
|
||||||
|
ret.push(format!("-Wl,-rpath,{}", &(*rpath)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -258,4 +264,19 @@ mod tests {
|
|||||||
assert_eq!(res, "$ORIGIN/../lib");
|
assert_eq!(res, "$ORIGIN/../lib");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_xlinker() {
|
||||||
|
let args = rpaths_to_flags(&[
|
||||||
|
"a/normal/path".to_string(),
|
||||||
|
"a,comma,path".to_string()
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert_eq!(args, vec![
|
||||||
|
"-Wl,-rpath,a/normal/path".to_string(),
|
||||||
|
"-Wl,-rpath".to_string(),
|
||||||
|
"-Xlinker".to_string(),
|
||||||
|
"a,comma,path".to_string()
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user