]> git.lizzy.rs Git - rust.git/commitdiff
rustc: Remove absolute rpaths
authorAlex Crichton <alex@alexcrichton.com>
Mon, 7 Apr 2014 22:40:58 +0000 (15:40 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Thu, 10 Apr 2014 22:22:00 +0000 (15:22 -0700)
Concerns have been raised about using absolute rpaths in #11746, and this is the
first step towards not relying on rpaths at all. The only current use case for
an absolute rpath is when a non-installed rust builds an executable that then
moves from is built location. The relative rpath back to libstd and absolute
rpath to the installation directory still remain (CFG_PREFIX).

Closes #11746
Rebasing of #12754

mk/main.mk
src/librustc/back/rpath.rs

index fa19a4b380ec6bdf4fa05443fa09e332aff233d1..f2bcdbd4bd539fd1aae0ba2cea7033fdeaaa032f 100644 (file)
@@ -358,7 +358,6 @@ CFGFLAG$(1)_T_$(2)_H_$(3) = stage1
 endif
 endif
 
-ifdef CFG_DISABLE_RPATH
 ifeq ($$(OSTYPE_$(3)),apple-darwin)
   RPATH_VAR$(1)_T_$(2)_H_$(3) := \
       DYLD_LIBRARY_PATH="$$$$DYLD_LIBRARY_PATH:$$(CURDIR)/$$(HLIB$(1)_H_$(3))"
@@ -366,9 +365,6 @@ else
   RPATH_VAR$(1)_T_$(2)_H_$(3) := \
       LD_LIBRARY_PATH="$$$$LD_LIBRARY_PATH:$$(CURDIR)/$$(HLIB$(1)_H_$(3))"
 endif
-else
-    RPATH_VAR$(1)_T_$(2)_H_$(3) :=
-endif
 
 STAGE$(1)_T_$(2)_H_$(3) :=                                             \
        $$(Q)$$(RPATH_VAR$(1)_T_$(2)_H_$(3))                            \
index c47f9893cd2efc0aab5d12325419f9f137e5987e..73ccc8871caeadc6a45cda27676745f5a6181384 100644 (file)
@@ -87,10 +87,6 @@ fn get_rpaths(os: abi::Os,
     // crates they depend on.
     let rel_rpaths = get_rpaths_relative_to_output(os, output, libs);
 
-    // Make backup absolute paths to the libraries. Binaries can
-    // be moved as long as the crates they link against don't move.
-    let abs_rpaths = get_absolute_rpaths(libs);
-
     // And a final backup rpath to the global library location.
     let fallback_rpaths = vec!(get_install_prefix_rpath(sysroot, target_triple));
 
@@ -102,11 +98,9 @@ fn log_rpaths(desc: &str, rpaths: &[~str]) {
     }
 
     log_rpaths("relative", rel_rpaths.as_slice());
-    log_rpaths("absolute", abs_rpaths.as_slice());
     log_rpaths("fallback", fallback_rpaths.as_slice());
 
     let mut rpaths = rel_rpaths;
-    rpaths.push_all(abs_rpaths.as_slice());
     rpaths.push_all(fallback_rpaths.as_slice());
 
     // Remove duplicates
@@ -146,17 +140,6 @@ pub fn get_rpath_relative_to_output(os: abi::Os,
     prefix+"/"+relative.as_str().expect("non-utf8 component in path")
 }
 
-fn get_absolute_rpaths(libs: &[Path]) -> Vec<~str> {
-    libs.iter().map(|a| get_absolute_rpath(a)).collect()
-}
-
-pub fn get_absolute_rpath(lib: &Path) -> ~str {
-    let mut p = os::make_absolute(lib);
-    p.pop();
-    // FIXME (#9639): This needs to handle non-utf8 paths
-    p.as_str().expect("non-utf8 component in rpath").to_owned()
-}
-
 pub fn get_install_prefix_rpath(sysroot: &Path, target_triple: &str) -> ~str {
     let install_prefix = env!("CFG_PREFIX");
 
@@ -183,7 +166,7 @@ pub fn minimize_rpaths(rpaths: &[~str]) -> Vec<~str> {
 mod test {
     use std::os;
 
-    use back::rpath::{get_absolute_rpath, get_install_prefix_rpath};
+    use back::rpath::get_install_prefix_rpath;
     use back::rpath::{minimize_rpaths, rpaths_to_flags, get_rpath_relative_to_output};
     use syntax::abi;
     use metadata::filesearch;
@@ -258,15 +241,4 @@ fn test_rpath_relative() {
                                                &Path::new("lib/libstd.so"));
         assert_eq!(res.as_slice(), "@loader_path/../lib");
     }
-
-    #[test]
-    fn test_get_absolute_rpath() {
-        let res = get_absolute_rpath(&Path::new("lib/libstd.so"));
-        let lib = os::make_absolute(&Path::new("lib"));
-        debug!("test_get_absolute_rpath: {} vs. {}",
-               res.to_str(), lib.display());
-
-        // FIXME (#9639): This needs to handle non-utf8 paths
-        assert_eq!(res.as_slice(), lib.as_str().expect("non-utf8 component in path"));
-    }
 }