diff options
Diffstat (limited to 'community/rust/minimize-rpath.patch')
-rw-r--r-- | community/rust/minimize-rpath.patch | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/community/rust/minimize-rpath.patch b/community/rust/minimize-rpath.patch deleted file mode 100644 index ccc9ccae59..0000000000 --- a/community/rust/minimize-rpath.patch +++ /dev/null @@ -1,100 +0,0 @@ -From: Shiz <hi@shiz.me> -Date: Thu, 20 Aug 2017 01:44:12 +0200 -Subject: [PATCH] Minimize generated RPATH in end products - -By default, RPATH generation adds both the install prefix and the generated -relative path to the install prefix. This is unnecessary, so we add the install -prefix to a list of absolute paths to omit in the relative path generation, -and skip it there. - ---- a/src/librustc_codegen_ssa/back/rpath.rs -+++ b/src/librustc_codegen_ssa/back/rpath.rs -@@ -59,13 +59,14 @@ - debug!(" {:?}", libpath.display()); - } - -+ // The backup rpath is the global library location. -+ // We also omit this path from the relative rpaths. -+ let fallback_rpaths = vec![get_install_prefix_rpath(config)]; -+ - // Use relative paths to the libraries. Binaries can be moved - // as long as they maintain the relative relationship to the - // crates they depend on. -- let rel_rpaths = get_rpaths_relative_to_output(config, libs); -- -- // And a final backup rpath to the global library location. -- let fallback_rpaths = vec![get_install_prefix_rpath(config)]; -+ let rel_rpaths = get_rpaths_relative_to_output(config, libs, &fallback_rpaths); - - fn log_rpaths(desc: &str, rpaths: &[String]) { - debug!("{} rpaths:", desc); -@@ -87,11 +88,13 @@ - } - - fn get_rpaths_relative_to_output(config: &mut RPathConfig<'_>, -- libs: &[PathBuf]) -> Vec<String> { -- libs.iter().map(|a| get_rpath_relative_to_output(config, a)).collect() -+ libs: &[PathBuf], -+ omit: &Vec<String>) -> Vec<String> { -+ libs.iter().filter_map(|a| get_rpath_relative_to_output(config, a, omit)).collect() - } - --fn get_rpath_relative_to_output(config: &mut RPathConfig<'_>, lib: &Path) -> String { -+fn get_rpath_relative_to_output(config: &mut RPathConfig<'_>, lib: &Path, -+ omit: &Vec<String>) -> Option<String> { - // Mac doesn't appear to support $ORIGIN - let prefix = if config.is_like_osx { - "@loader_path" -@@ -105,10 +108,16 @@ - let mut output = cwd.join(&config.out_filename); - output.pop(); // strip filename - let output = fs::canonicalize(&output).unwrap_or(output); -- let relative = path_relative_from(&lib, &output).unwrap_or_else(|| -- panic!("couldn't create relative path from {:?} to {:?}", output, lib)); -- // FIXME (#9639): This needs to handle non-utf8 paths -- format!("{}/{}", prefix, relative.to_str().expect("non-utf8 component in path")) -+ let libpath = lib.to_str().expect("non-utf8 component in path").to_string(); -+ if omit.contains(&libpath) { -+ None -+ } else { -+ let relative = path_relative_from(&lib, &output) -+ .expect(&format!("couldn't create relative path from {:?} to {:?}", output, lib)); -+ // FIXME (#9639): This needs to handle non-utf8 paths -+ Some(format!("{}/{}", prefix, -+ relative.to_str().expect("non-utf8 component in path"))) -+ } - } - - // This routine is adapted from the *old* Path's `path_relative_from` ---- a/src/librustc_codegen_ssa/back/rpath/tests.rs -+++ b/src/librustc_codegen_ssa/back/rpath/tests.rs -@@ -50,6 +50,8 @@ - - #[test] - fn test_rpath_relative() { -+ let omit = Vec::new(); -+ - if cfg!(target_os = "macos") { - let config = &mut RPathConfig { - used_crates: Vec::new(), -@@ -60,7 +62,8 @@ - get_install_prefix_lib_path: &mut || panic!(), - }; - let res = get_rpath_relative_to_output(config, -- Path::new("lib/libstd.so")); -+ Path::new("lib/libstd.so"), -+ &omit); - assert_eq!(res, "@loader_path/../lib"); - } else { - let config = &mut RPathConfig { -@@ -72,7 +75,8 @@ - linker_is_gnu: true, - }; - let res = get_rpath_relative_to_output(config, -- Path::new("lib/libstd.so")); -+ Path::new("lib/libstd.so"), -+ &omit); - assert_eq!(res, "$ORIGIN/../lib"); - } - } - |