u-rust-pr48362-libdir-relative
authorRust Maintainers <pkg-rust-maintainers@lists.alioth.debian.org>
Sun, 8 Jul 2018 19:39:35 +0000 (20:39 +0100)
committerMoritz Mühlenhoff <jmm@debian.org>
Sun, 8 Jul 2018 19:39:35 +0000 (20:39 +0100)
Gbp-Pq: Name u-rust-pr48362-libdir-relative.patch

src/bootstrap/builder.rs
src/bootstrap/compile.rs
src/bootstrap/config.rs

index a660b5cf852aa991af8d51139da1dfa5cac6da99..082651de3c471d70c71a9caca17b37b29a096883 100644 (file)
@@ -357,10 +357,11 @@ impl<'a> Builder<'a> {
 
             fn run(self, builder: &Builder) -> Interned<PathBuf> {
                 let compiler = self.compiler;
-                let lib = if compiler.stage >= 1 && builder.build.config.libdir.is_some() {
-                    builder.build.config.libdir.clone().unwrap()
+                let config = &builder.build.config;
+                let lib = if compiler.stage >= 1 && config.libdir_relative().is_some() {
+                    builder.build.config.libdir_relative().unwrap()
                 } else {
-                    PathBuf::from("lib")
+                    Path::new("lib")
                 };
                 let sysroot = builder.sysroot(self.compiler).join(lib)
                     .join("rustlib").join(self.target).join("lib");
index c6adfc7ffae47598b6c930e14dee3f5e842418c1..6ccfce54b92e74cd5380a060fe72a1d3d8da203a 100644 (file)
@@ -513,8 +513,7 @@ pub fn rustc_cargo(build: &Build,
          .env("CFG_VERSION", build.rust_version())
          .env("CFG_PREFIX", build.config.prefix.clone().unwrap_or_default());
 
-    let libdir_relative =
-        build.config.libdir.clone().unwrap_or(PathBuf::from("lib"));
+    let libdir_relative = build.config.libdir_relative().unwrap_or(Path::new("lib"));
     cargo.env("CFG_LIBDIR_RELATIVE", libdir_relative);
 
     // If we're not building a compiler with debugging information then remove
index 72e75fddc1942cbbfcc3bd399d110c5f910845a6..b138e1a58e26bf7346d3e6747b0fbe686a574105 100644 (file)
@@ -17,7 +17,7 @@ use std::collections::HashMap;
 use std::env;
 use std::fs::File;
 use std::io::prelude::*;
-use std::path::PathBuf;
+use std::path::{Path, PathBuf};
 use std::process;
 use std::cmp;
 
@@ -542,6 +542,17 @@ impl Config {
         config
     }
 
+    /// Try to find the relative path of `libdir`.
+    pub fn libdir_relative(&self) -> Option<&Path> {
+        let libdir = self.libdir.as_ref()?;
+        if libdir.is_relative() {
+            Some(libdir)
+        } else {
+            // Try to make it relative to the prefix.
+            libdir.strip_prefix(self.prefix.as_ref()?).ok()
+        }
+    }
+
     pub fn verbose(&self) -> bool {
         self.verbose > 0
     }