bootstrap: convert cargo to use Tarball
This commit is contained in:
parent
c4aaff65f0
commit
8a711a00a7
@ -1015,72 +1015,31 @@ fn run(self, builder: &Builder<'_>) -> PathBuf {
|
|||||||
let compiler = self.compiler;
|
let compiler = self.compiler;
|
||||||
let target = self.target;
|
let target = self.target;
|
||||||
|
|
||||||
|
let cargo = builder.ensure(tool::Cargo { compiler, target });
|
||||||
let src = builder.src.join("src/tools/cargo");
|
let src = builder.src.join("src/tools/cargo");
|
||||||
let etc = src.join("src/etc");
|
let etc = src.join("src/etc");
|
||||||
let release_num = builder.release_num("cargo");
|
|
||||||
let name = pkgname(builder, "cargo");
|
|
||||||
let version = builder.cargo_info.version(builder, &release_num);
|
|
||||||
|
|
||||||
let tmp = tmpdir(builder);
|
|
||||||
let image = tmp.join("cargo-image");
|
|
||||||
drop(fs::remove_dir_all(&image));
|
|
||||||
builder.create_dir(&image);
|
|
||||||
|
|
||||||
// Prepare the image directory
|
// Prepare the image directory
|
||||||
builder.create_dir(&image.join("share/zsh/site-functions"));
|
let mut tarball = Tarball::new(builder, "cargo", &target.triple);
|
||||||
builder.create_dir(&image.join("etc/bash_completion.d"));
|
tarball.set_overlay(OverlayKind::Cargo);
|
||||||
let cargo = builder.ensure(tool::Cargo { compiler, target });
|
|
||||||
builder.install(&cargo, &image.join("bin"), 0o755);
|
tarball.add_file(&cargo, "bin", 0o755);
|
||||||
|
tarball.add_file(src.join("README.md"), "share/doc/cargo", 0o644);
|
||||||
|
tarball.add_file(src.join("LICENSE-MIT"), "share/doc/cargo", 0o644);
|
||||||
|
tarball.add_file(src.join("LICENSE-APACHE"), "share/doc/cargo", 0o644);
|
||||||
|
tarball.add_file(src.join("LICENSE-THIRD-PARTY"), "share/doc/cargo", 0o644);
|
||||||
|
tarball.add_file(etc.join("_cargo"), "share/zsh/site-functions", 0o644);
|
||||||
|
tarball.add_renamed_file(etc.join("cargo.bashcomp.sh"), "etc/bash_completion.d", "cargo");
|
||||||
|
tarball.add_dir(etc.join("man"), "share/man/man1");
|
||||||
|
|
||||||
for dirent in fs::read_dir(cargo.parent().unwrap()).expect("read_dir") {
|
for dirent in fs::read_dir(cargo.parent().unwrap()).expect("read_dir") {
|
||||||
let dirent = dirent.expect("read dir entry");
|
let dirent = dirent.expect("read dir entry");
|
||||||
if dirent.file_name().to_str().expect("utf8").starts_with("cargo-credential-") {
|
if dirent.file_name().to_str().expect("utf8").starts_with("cargo-credential-") {
|
||||||
builder.install(&dirent.path(), &image.join("libexec"), 0o755);
|
tarball.add_file(&dirent.path(), "libexec", 0o755);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for man in t!(etc.join("man").read_dir()) {
|
|
||||||
let man = t!(man);
|
|
||||||
builder.install(&man.path(), &image.join("share/man/man1"), 0o644);
|
|
||||||
}
|
|
||||||
builder.install(&etc.join("_cargo"), &image.join("share/zsh/site-functions"), 0o644);
|
|
||||||
builder.copy(&etc.join("cargo.bashcomp.sh"), &image.join("etc/bash_completion.d/cargo"));
|
|
||||||
let doc = image.join("share/doc/cargo");
|
|
||||||
builder.install(&src.join("README.md"), &doc, 0o644);
|
|
||||||
builder.install(&src.join("LICENSE-MIT"), &doc, 0o644);
|
|
||||||
builder.install(&src.join("LICENSE-APACHE"), &doc, 0o644);
|
|
||||||
builder.install(&src.join("LICENSE-THIRD-PARTY"), &doc, 0o644);
|
|
||||||
|
|
||||||
// Prepare the overlay
|
tarball.generate()
|
||||||
let overlay = tmp.join("cargo-overlay");
|
|
||||||
drop(fs::remove_dir_all(&overlay));
|
|
||||||
builder.create_dir(&overlay);
|
|
||||||
builder.install(&src.join("README.md"), &overlay, 0o644);
|
|
||||||
builder.install(&src.join("LICENSE-MIT"), &overlay, 0o644);
|
|
||||||
builder.install(&src.join("LICENSE-APACHE"), &overlay, 0o644);
|
|
||||||
builder.install(&src.join("LICENSE-THIRD-PARTY"), &overlay, 0o644);
|
|
||||||
builder.create(&overlay.join("version"), &version);
|
|
||||||
|
|
||||||
// Generate the installer 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, target.triple))
|
|
||||||
.arg("--component-name=cargo")
|
|
||||||
.arg("--legacy-manifest-dirs=rustlib,cargo");
|
|
||||||
|
|
||||||
builder.info(&format!("Dist cargo stage{} ({})", compiler.stage, target));
|
|
||||||
let _time = timeit(builder);
|
|
||||||
builder.run(&mut cmd);
|
|
||||||
distdir(builder).join(format!("{}-{}.tar.gz", name, target.triple))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
pub(crate) enum OverlayKind {
|
pub(crate) enum OverlayKind {
|
||||||
Rust,
|
Rust,
|
||||||
LLVM,
|
LLVM,
|
||||||
|
Cargo,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl OverlayKind {
|
impl OverlayKind {
|
||||||
@ -17,6 +18,22 @@ fn included_files(&self) -> &[&str] {
|
|||||||
OverlayKind::LLVM => {
|
OverlayKind::LLVM => {
|
||||||
&["src/llvm-project/llvm/LICENSE.TXT", "src/llvm-project/llvm/README.txt"]
|
&["src/llvm-project/llvm/LICENSE.TXT", "src/llvm-project/llvm/README.txt"]
|
||||||
}
|
}
|
||||||
|
OverlayKind::Cargo => &[
|
||||||
|
"src/tools/cargo/README.md",
|
||||||
|
"src/tools/cargo/LICENSE-MIT",
|
||||||
|
"src/tools/cargo/LICENSE-APACHE",
|
||||||
|
"src/tools/cargo/LICENSE-THIRD-PARTY",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn version(&self, builder: &Builder<'_>) -> String {
|
||||||
|
match self {
|
||||||
|
OverlayKind::Rust => builder.rust_version(),
|
||||||
|
OverlayKind::LLVM => builder.rust_version(),
|
||||||
|
OverlayKind::Cargo => {
|
||||||
|
builder.cargo_info.version(builder, &builder.release_num("cargo"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,6 +120,17 @@ pub(crate) fn add_file(&self, src: impl AsRef<Path>, destdir: impl AsRef<Path>,
|
|||||||
self.builder.install(src.as_ref(), &destdir, perms);
|
self.builder.install(src.as_ref(), &destdir, perms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn add_renamed_file(
|
||||||
|
&self,
|
||||||
|
src: impl AsRef<Path>,
|
||||||
|
destdir: impl AsRef<Path>,
|
||||||
|
new_name: &str,
|
||||||
|
) {
|
||||||
|
let destdir = self.image_dir.join(destdir.as_ref());
|
||||||
|
t!(std::fs::create_dir_all(&destdir));
|
||||||
|
self.builder.copy(src.as_ref(), &destdir.join(new_name));
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn add_dir(&self, src: impl AsRef<Path>, dest: impl AsRef<Path>) {
|
pub(crate) fn add_dir(&self, src: impl AsRef<Path>, dest: impl AsRef<Path>) {
|
||||||
let dest = self.image_dir.join(dest.as_ref());
|
let dest = self.image_dir.join(dest.as_ref());
|
||||||
|
|
||||||
@ -112,7 +140,7 @@ pub(crate) fn add_dir(&self, src: impl AsRef<Path>, dest: impl AsRef<Path>) {
|
|||||||
|
|
||||||
pub(crate) fn generate(self) -> PathBuf {
|
pub(crate) fn generate(self) -> PathBuf {
|
||||||
t!(std::fs::create_dir_all(&self.overlay_dir));
|
t!(std::fs::create_dir_all(&self.overlay_dir));
|
||||||
self.builder.create(&self.overlay_dir.join("version"), &self.builder.rust_version());
|
self.builder.create(&self.overlay_dir.join("version"), &self.overlay.version(self.builder));
|
||||||
if let Some(sha) = self.builder.rust_sha() {
|
if let Some(sha) = self.builder.rust_sha() {
|
||||||
self.builder.create(&self.overlay_dir.join("git-commit-hash"), &sha);
|
self.builder.create(&self.overlay_dir.join("git-commit-hash"), &sha);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user