Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 8a711a0

Browse files
committed
bootstrap: convert cargo to use Tarball
1 parent c4aaff6 commit 8a711a0

File tree

2 files changed

+44
-57
lines changed

2 files changed

+44
-57
lines changed

src/bootstrap/dist.rs

Lines changed: 15 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,72 +1015,31 @@ impl Step for Cargo {
10151015
let compiler = self.compiler;
10161016
let target = self.target;
10171017

1018+
let cargo = builder.ensure(tool::Cargo { compiler, target });
10181019
let src = builder.src.join("src/tools/cargo");
10191020
let etc = src.join("src/etc");
1020-
let release_num = builder.release_num("cargo");
1021-
let name = pkgname(builder, "cargo");
1022-
let version = builder.cargo_info.version(builder, &release_num);
1023-
1024-
let tmp = tmpdir(builder);
1025-
let image = tmp.join("cargo-image");
1026-
drop(fs::remove_dir_all(&image));
1027-
builder.create_dir(&image);
10281021

10291022
// Prepare the image directory
1030-
builder.create_dir(&image.join("share/zsh/site-functions"));
1031-
builder.create_dir(&image.join("etc/bash_completion.d"));
1032-
let cargo = builder.ensure(tool::Cargo { compiler, target });
1033-
builder.install(&cargo, &image.join("bin"), 0o755);
1023+
let mut tarball = Tarball::new(builder, "cargo", &target.triple);
1024+
tarball.set_overlay(OverlayKind::Cargo);
1025+
1026+
tarball.add_file(&cargo, "bin", 0o755);
1027+
tarball.add_file(src.join("README.md"), "share/doc/cargo", 0o644);
1028+
tarball.add_file(src.join("LICENSE-MIT"), "share/doc/cargo", 0o644);
1029+
tarball.add_file(src.join("LICENSE-APACHE"), "share/doc/cargo", 0o644);
1030+
tarball.add_file(src.join("LICENSE-THIRD-PARTY"), "share/doc/cargo", 0o644);
1031+
tarball.add_file(etc.join("_cargo"), "share/zsh/site-functions", 0o644);
1032+
tarball.add_renamed_file(etc.join("cargo.bashcomp.sh"), "etc/bash_completion.d", "cargo");
1033+
tarball.add_dir(etc.join("man"), "share/man/man1");
1034+
10341035
for dirent in fs::read_dir(cargo.parent().unwrap()).expect("read_dir") {
10351036
let dirent = dirent.expect("read dir entry");
10361037
if dirent.file_name().to_str().expect("utf8").starts_with("cargo-credential-") {
1037-
builder.install(&dirent.path(), &image.join("libexec"), 0o755);
1038+
tarball.add_file(&dirent.path(), "libexec", 0o755);
10381039
}
10391040
}
1040-
for man in t!(etc.join("man").read_dir()) {
1041-
let man = t!(man);
1042-
builder.install(&man.path(), &image.join("share/man/man1"), 0o644);
1043-
}
1044-
builder.install(&etc.join("_cargo"), &image.join("share/zsh/site-functions"), 0o644);
1045-
builder.copy(&etc.join("cargo.bashcomp.sh"), &image.join("etc/bash_completion.d/cargo"));
1046-
let doc = image.join("share/doc/cargo");
1047-
builder.install(&src.join("README.md"), &doc, 0o644);
1048-
builder.install(&src.join("LICENSE-MIT"), &doc, 0o644);
1049-
builder.install(&src.join("LICENSE-APACHE"), &doc, 0o644);
1050-
builder.install(&src.join("LICENSE-THIRD-PARTY"), &doc, 0o644);
1051-
1052-
// Prepare the overlay
1053-
let overlay = tmp.join("cargo-overlay");
1054-
drop(fs::remove_dir_all(&overlay));
1055-
builder.create_dir(&overlay);
1056-
builder.install(&src.join("README.md"), &overlay, 0o644);
1057-
builder.install(&src.join("LICENSE-MIT"), &overlay, 0o644);
1058-
builder.install(&src.join("LICENSE-APACHE"), &overlay, 0o644);
1059-
builder.install(&src.join("LICENSE-THIRD-PARTY"), &overlay, 0o644);
1060-
builder.create(&overlay.join("version"), &version);
1061-
1062-
// Generate the installer tarball
1063-
let mut cmd = rust_installer(builder);
1064-
cmd.arg("generate")
1065-
.arg("--product-name=Rust")
1066-
.arg("--rel-manifest-dir=rustlib")
1067-
.arg("--success-message=Rust-is-ready-to-roll.")
1068-
.arg("--image-dir")
1069-
.arg(&image)
1070-
.arg("--work-dir")
1071-
.arg(&tmpdir(builder))
1072-
.arg("--output-dir")
1073-
.arg(&distdir(builder))
1074-
.arg("--non-installed-overlay")
1075-
.arg(&overlay)
1076-
.arg(format!("--package-name={}-{}", name, target.triple))
1077-
.arg("--component-name=cargo")
1078-
.arg("--legacy-manifest-dirs=rustlib,cargo");
10791041

1080-
builder.info(&format!("Dist cargo stage{} ({})", compiler.stage, target));
1081-
let _time = timeit(builder);
1082-
builder.run(&mut cmd);
1083-
distdir(builder).join(format!("{}-{}.tar.gz", name, target.triple))
1042+
tarball.generate()
10841043
}
10851044
}
10861045

src/bootstrap/tarball.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::builder::Builder;
88
pub(crate) enum OverlayKind {
99
Rust,
1010
LLVM,
11+
Cargo,
1112
}
1213

1314
impl OverlayKind {
@@ -17,6 +18,22 @@ impl OverlayKind {
1718
OverlayKind::LLVM => {
1819
&["src/llvm-project/llvm/LICENSE.TXT", "src/llvm-project/llvm/README.txt"]
1920
}
21+
OverlayKind::Cargo => &[
22+
"src/tools/cargo/README.md",
23+
"src/tools/cargo/LICENSE-MIT",
24+
"src/tools/cargo/LICENSE-APACHE",
25+
"src/tools/cargo/LICENSE-THIRD-PARTY",
26+
],
27+
}
28+
}
29+
30+
fn version(&self, builder: &Builder<'_>) -> String {
31+
match self {
32+
OverlayKind::Rust => builder.rust_version(),
33+
OverlayKind::LLVM => builder.rust_version(),
34+
OverlayKind::Cargo => {
35+
builder.cargo_info.version(builder, &builder.release_num("cargo"))
36+
}
2037
}
2138
}
2239
}
@@ -103,6 +120,17 @@ impl<'a> Tarball<'a> {
103120
self.builder.install(src.as_ref(), &destdir, perms);
104121
}
105122

123+
pub(crate) fn add_renamed_file(
124+
&self,
125+
src: impl AsRef<Path>,
126+
destdir: impl AsRef<Path>,
127+
new_name: &str,
128+
) {
129+
let destdir = self.image_dir.join(destdir.as_ref());
130+
t!(std::fs::create_dir_all(&destdir));
131+
self.builder.copy(src.as_ref(), &destdir.join(new_name));
132+
}
133+
106134
pub(crate) fn add_dir(&self, src: impl AsRef<Path>, dest: impl AsRef<Path>) {
107135
let dest = self.image_dir.join(dest.as_ref());
108136

@@ -112,7 +140,7 @@ impl<'a> Tarball<'a> {
112140

113141
pub(crate) fn generate(self) -> PathBuf {
114142
t!(std::fs::create_dir_all(&self.overlay_dir));
115-
self.builder.create(&self.overlay_dir.join("version"), &self.builder.rust_version());
143+
self.builder.create(&self.overlay_dir.join("version"), &self.overlay.version(self.builder));
116144
if let Some(sha) = self.builder.rust_sha() {
117145
self.builder.create(&self.overlay_dir.join("git-commit-hash"), &sha);
118146
}

0 commit comments

Comments
 (0)