about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorMatthew Dawson <matthew@mjdsystems.ca>2017-07-07 23:00:38 -0400
committerMatthew Dawson <matthew@mjdsystems.ca>2017-07-07 23:07:01 -0400
commitce3abc5801f94292be9bc5fbe00b52f1ccb28672 (patch)
treec1c09989bd4826dc715566c2b84a89e104cdecd5 /src/bootstrap
parent9b85e1cfa5aa2aaa4b5df4359a023ad793983ffc (diff)
downloadrust-ce3abc5801f94292be9bc5fbe00b52f1ccb28672.tar.gz
rust-ce3abc5801f94292be9bc5fbe00b52f1ccb28672.zip
Fix stage 2 builds with a custom libdir.
When copying libstd for the stage 2 compiler, the builder ignores the
configured libdir/libdir_relative configuration parameters.  This causes
the compiler to fail to find libstd, which cause any tools built with the
stage 2 compiler to fail.

To fix this, make the copy steps of rustbuild aware of the libdir_relative
parameter when the stage >= 2.  Also update the dist target to be aware of
the new location of libstd.
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/dist.rs5
-rw-r--r--src/bootstrap/lib.rs10
2 files changed, 11 insertions, 4 deletions
diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs
index 637bdbe9984..8fae1dd99d8 100644
--- a/src/bootstrap/dist.rs
+++ b/src/bootstrap/dist.rs
@@ -405,8 +405,9 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) {
 
     let dst = image.join("lib/rustlib").join(target);
     t!(fs::create_dir_all(&dst));
-    let src = build.sysroot(compiler).join("lib/rustlib");
-    cp_r(&src.join(target), &dst);
+    let mut src = build.sysroot_libdir(compiler, target);
+    src.pop(); // Remove the trailing /lib folder from the sysroot_libdir
+    cp_r(&src, &dst);
 
     let mut cmd = rust_installer(build);
     cmd.arg("generate")
diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs
index 5a3785b1ed6..032231582ef 100644
--- a/src/bootstrap/lib.rs
+++ b/src/bootstrap/lib.rs
@@ -645,8 +645,14 @@ impl Build {
     /// Returns the libdir where the standard library and other artifacts are
     /// found for a compiler's sysroot.
     fn sysroot_libdir(&self, compiler: &Compiler, target: &str) -> PathBuf {
-        self.sysroot(compiler).join("lib").join("rustlib")
-            .join(target).join("lib")
+        if compiler.stage >= 2 {
+            if let Some(ref libdir_relative) = self.config.libdir_relative {
+                return self.sysroot(compiler).join(libdir_relative)
+                    .join("rustlib").join(target).join("lib")
+            }
+        }
+       self.sysroot(compiler).join("lib").join("rustlib")
+           .join(target).join("lib")
     }
 
     /// Returns the root directory for all output generated in a particular