about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorPietro Albini <pietro@pietroalbini.org>2020-11-26 22:42:52 +0100
committerPietro Albini <pietro@pietroalbini.org>2020-12-23 19:35:22 +0100
commit0a2e1c5a2c85ff27f2677aa7db1c2deacf34242d (patch)
tree28440ff550e9bd506bd12ccdf869e26383c55137 /src/bootstrap
parent82d9eaa54d3a60edc2dd664355e390ec9aa36fa5 (diff)
downloadrust-0a2e1c5a2c85ff27f2677aa7db1c2deacf34242d.tar.gz
rust-0a2e1c5a2c85ff27f2677aa7db1c2deacf34242d.zip
bootstrap: convert rustc to use Tarball
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/dist.rs60
-rw-r--r--src/bootstrap/tarball.rs3
2 files changed, 11 insertions, 52 deletions
diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs
index cee8c411fa1..db792886c16 100644
--- a/src/bootstrap/dist.rs
+++ b/src/bootstrap/dist.rs
@@ -341,30 +341,13 @@ impl Step for Rustc {
         let compiler = self.compiler;
         let host = self.compiler.host;
 
-        let name = pkgname(builder, "rustc");
-        let image = tmpdir(builder).join(format!("{}-{}-image", name, host.triple));
-        let _ = fs::remove_dir_all(&image);
-        let overlay = tmpdir(builder).join(format!("{}-{}-overlay", name, host.triple));
-        let _ = fs::remove_dir_all(&overlay);
+        builder.info(&format!("Dist rustc stage{} ({})", compiler.stage, host.triple));
+        let _time = timeit(builder);
 
-        // Prepare the rustc "image", what will actually end up getting installed
-        prepare_image(builder, compiler, &image);
+        let tarball = Tarball::new(builder, "rustc", &host.triple);
 
-        // Prepare the overlay which is part of the tarball but won't actually be
-        // installed
-        let cp = |file: &str| {
-            builder.install(&builder.src.join(file), &overlay, 0o644);
-        };
-        cp("COPYRIGHT");
-        cp("LICENSE-APACHE");
-        cp("LICENSE-MIT");
-        cp("README.md");
-        // tiny morsel of metadata is used by rust-packaging
-        let version = builder.rust_version();
-        builder.create(&overlay.join("version"), &version);
-        if let Some(sha) = builder.rust_sha() {
-            builder.create(&overlay.join("git-commit-hash"), &sha);
-        }
+        // Prepare the rustc "image", what will actually end up getting installed
+        prepare_image(builder, compiler, tarball.image_dir());
 
         // On MinGW we've got a few runtime DLL dependencies that we need to
         // include. The first argument to this script is where to put these DLLs
@@ -377,38 +360,11 @@ impl Step for Rustc {
         // install will *also* include the rust-mingw package, which also needs
         // licenses, so to be safe we just include it here in all MinGW packages.
         if host.contains("pc-windows-gnu") {
-            make_win_dist(&image, &tmpdir(builder), host, builder);
-
-            let dst = image.join("share/doc");
-            t!(fs::create_dir_all(&dst));
-            builder.cp_r(&builder.src.join("src/etc/third-party"), &dst);
+            make_win_dist(tarball.image_dir(), &tmpdir(builder), host, builder);
+            tarball.add_dir(builder.src.join("src/etc/third-party"), "share/doc");
         }
 
-        // Finally, wrap everything up in a nice tarball!
-        let mut cmd = rust_installer(builder);
-        cmd.arg("generate")
-            .arg("--product-name=Rust")
-            .arg("--rel-manifest-dir=rustlib")
-            .arg("--success-message=Rust-is-ready-to-roll.")
-            .arg("--image-dir")
-            .arg(&image)
-            .arg("--work-dir")
-            .arg(&tmpdir(builder))
-            .arg("--output-dir")
-            .arg(&distdir(builder))
-            .arg("--non-installed-overlay")
-            .arg(&overlay)
-            .arg(format!("--package-name={}-{}", name, host.triple))
-            .arg("--component-name=rustc")
-            .arg("--legacy-manifest-dirs=rustlib,cargo");
-
-        builder.info(&format!("Dist rustc stage{} ({})", compiler.stage, host.triple));
-        let _time = timeit(builder);
-        builder.run(&mut cmd);
-        builder.remove_dir(&image);
-        builder.remove_dir(&overlay);
-
-        return distdir(builder).join(format!("{}-{}.tar.gz", name, host.triple));
+        return tarball.generate();
 
         fn prepare_image(builder: &Builder<'_>, compiler: Compiler, image: &Path) {
             let host = compiler.host;
diff --git a/src/bootstrap/tarball.rs b/src/bootstrap/tarball.rs
index 50d58d00a66..294b69c85f4 100644
--- a/src/bootstrap/tarball.rs
+++ b/src/bootstrap/tarball.rs
@@ -107,6 +107,9 @@ impl<'a> Tarball<'a> {
     pub(crate) fn generate(self) -> PathBuf {
         t!(std::fs::create_dir_all(&self.overlay_dir));
         self.builder.create(&self.overlay_dir.join("version"), &self.builder.rust_version());
+        if let Some(sha) = self.builder.rust_sha() {
+            self.builder.create(&self.overlay_dir.join("git-commit-hash"), &sha);
+        }
         for file in self.overlay.included_files() {
             self.builder.install(&self.builder.src.join(file), &self.overlay_dir, 0o644);
         }