Skip to content

Commit abe1183

Browse files
committed
Auto merge of #41843 - cuviper:oxidized-installer, r=alexcrichton
Update to the Rusty rust-installer This updates the rust-installer submodule to the new version written in Rust (rust-lang/rust-installer#62), now moved to `src/tools/rust-installer` and invoked in `dist.rs` as a cargo-based tool command. All of the former shell-script invocations now invoke the tool, otherwise keeping the same arguments as before. As a small bonus, `rustc-src` now also uses the same tarball generator, so it gains a smaller `.tar.xz` too. Fixes #41569. r? @alexcrichton
2 parents 75b0568 + 1e709fc commit abe1183

File tree

8 files changed

+256
-74
lines changed

8 files changed

+256
-74
lines changed

.gitmodules

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
path = src/jemalloc
1414
url = https://github.com/rust-lang/jemalloc.git
1515
[submodule "src/rust-installer"]
16-
path = src/rust-installer
16+
path = src/tools/rust-installer
1717
url = https://github.com/rust-lang/rust-installer.git
1818
[submodule "src/liblibc"]
1919
path = src/liblibc

src/Cargo.lock

+162-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ members = [
1313
"tools/build-manifest",
1414
"tools/remote-test-client",
1515
"tools/remote-test-server",
16+
"tools/rust-installer",
1617
]
1718

1819
# These projects have their own Cargo.lock

src/bootstrap/dist.rs

+69-68
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@ use std::process::{Command, Stdio};
2626

2727
use build_helper::output;
2828

29-
#[cfg(not(target_os = "solaris"))]
30-
const SH_CMD: &'static str = "sh";
31-
// On Solaris, sh is the historical bourne shell, not a POSIX shell, or bash.
32-
#[cfg(target_os = "solaris")]
33-
const SH_CMD: &'static str = "bash";
34-
3529
use {Build, Compiler, Mode};
3630
use channel;
3731
use util::{cp_r, libdir, is_dylib, cp_filtered, copy, exe};
@@ -55,6 +49,10 @@ pub fn tmpdir(build: &Build) -> PathBuf {
5549
build.out.join("tmp/dist")
5650
}
5751

52+
fn rust_installer(build: &Build) -> Command {
53+
build.tool_cmd(&Compiler::new(0, &build.config.build), "rust-installer")
54+
}
55+
5856
/// Builds the `rust-docs` installer component.
5957
///
6058
/// Slurps up documentation from the `stage`'s `host`.
@@ -74,14 +72,14 @@ pub fn docs(build: &Build, stage: u32, host: &str) {
7472
let src = build.out.join(host).join("doc");
7573
cp_r(&src, &dst);
7674

77-
let mut cmd = Command::new(SH_CMD);
78-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
75+
let mut cmd = rust_installer(build);
76+
cmd.arg("generate")
7977
.arg("--product-name=Rust-Documentation")
8078
.arg("--rel-manifest-dir=rustlib")
8179
.arg("--success-message=Rust-documentation-is-installed.")
82-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
83-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
84-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
80+
.arg("--image-dir").arg(&image)
81+
.arg("--work-dir").arg(&tmpdir(build))
82+
.arg("--output-dir").arg(&distdir(build))
8583
.arg(format!("--package-name={}-{}", name, host))
8684
.arg("--component-name=rust-docs")
8785
.arg("--legacy-manifest-dirs=rustlib,cargo")
@@ -124,14 +122,14 @@ pub fn mingw(build: &Build, host: &str) {
124122
.arg(host);
125123
build.run(&mut cmd);
126124

127-
let mut cmd = Command::new(SH_CMD);
128-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
125+
let mut cmd = rust_installer(build);
126+
cmd.arg("generate")
129127
.arg("--product-name=Rust-MinGW")
130128
.arg("--rel-manifest-dir=rustlib")
131129
.arg("--success-message=Rust-MinGW-is-installed.")
132-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
133-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
134-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
130+
.arg("--image-dir").arg(&image)
131+
.arg("--work-dir").arg(&tmpdir(build))
132+
.arg("--output-dir").arg(&distdir(build))
135133
.arg(format!("--package-name={}-{}", name, host))
136134
.arg("--component-name=rust-mingw")
137135
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -190,15 +188,15 @@ pub fn rustc(build: &Build, stage: u32, host: &str) {
190188
}
191189

192190
// Finally, wrap everything up in a nice tarball!
193-
let mut cmd = Command::new(SH_CMD);
194-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
191+
let mut cmd = rust_installer(build);
192+
cmd.arg("generate")
195193
.arg("--product-name=Rust")
196194
.arg("--rel-manifest-dir=rustlib")
197195
.arg("--success-message=Rust-is-ready-to-roll.")
198-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
199-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
200-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
201-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)))
196+
.arg("--image-dir").arg(&image)
197+
.arg("--work-dir").arg(&tmpdir(build))
198+
.arg("--output-dir").arg(&distdir(build))
199+
.arg("--non-installed-overlay").arg(&overlay)
202200
.arg(format!("--package-name={}-{}", name, host))
203201
.arg("--component-name=rustc")
204202
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -300,14 +298,14 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) {
300298
let src = build.sysroot(compiler).join("lib/rustlib");
301299
cp_r(&src.join(target), &dst);
302300

303-
let mut cmd = Command::new(SH_CMD);
304-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
301+
let mut cmd = rust_installer(build);
302+
cmd.arg("generate")
305303
.arg("--product-name=Rust")
306304
.arg("--rel-manifest-dir=rustlib")
307305
.arg("--success-message=std-is-standing-at-the-ready.")
308-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
309-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
310-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
306+
.arg("--image-dir").arg(&image)
307+
.arg("--work-dir").arg(&tmpdir(build))
308+
.arg("--output-dir").arg(&distdir(build))
311309
.arg(format!("--package-name={}-{}", name, target))
312310
.arg(format!("--component-name=rust-std-{}", target))
313311
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -356,14 +354,14 @@ pub fn analysis(build: &Build, compiler: &Compiler, target: &str) {
356354
println!("image_src: {:?}, dst: {:?}", image_src, dst);
357355
cp_r(&image_src, &dst);
358356

359-
let mut cmd = Command::new(SH_CMD);
360-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
357+
let mut cmd = rust_installer(build);
358+
cmd.arg("generate")
361359
.arg("--product-name=Rust")
362360
.arg("--rel-manifest-dir=rustlib")
363361
.arg("--success-message=save-analysis-saved.")
364-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
365-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
366-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
362+
.arg("--image-dir").arg(&image)
363+
.arg("--work-dir").arg(&tmpdir(build))
364+
.arg("--output-dir").arg(&distdir(build))
367365
.arg(format!("--package-name={}-{}", name, target))
368366
.arg(format!("--component-name=rust-analysis-{}", target))
369367
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -471,13 +469,17 @@ pub fn rust_src(build: &Build) {
471469
write_file(&plain_dst_src.join("version"), build.rust_version().as_bytes());
472470

473471
// Create plain source tarball
474-
let tarball = rust_src_location(build);
472+
let mut tarball = rust_src_location(build);
473+
tarball.set_extension(""); // strip .gz
474+
tarball.set_extension(""); // strip .tar
475475
if let Some(dir) = tarball.parent() {
476476
t!(fs::create_dir_all(dir));
477477
}
478-
let mut cmd = Command::new("tar");
479-
cmd.arg("-czf").arg(sanitize_sh(&tarball))
480-
.arg(&plain_name)
478+
let mut cmd = rust_installer(build);
479+
cmd.arg("tarball")
480+
.arg("--input").arg(&plain_name)
481+
.arg("--output").arg(&tarball)
482+
.arg("--work-dir=.")
481483
.current_dir(tmpdir(build));
482484
build.run(&mut cmd);
483485

@@ -521,14 +523,14 @@ pub fn rust_src(build: &Build) {
521523
}
522524

523525
// Create source tarball in rust-installer format
524-
let mut cmd = Command::new(SH_CMD);
525-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
526+
let mut cmd = rust_installer(build);
527+
cmd.arg("generate")
526528
.arg("--product-name=Rust")
527529
.arg("--rel-manifest-dir=rustlib")
528530
.arg("--success-message=Awesome-Source.")
529-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
530-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
531-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
531+
.arg("--image-dir").arg(&image)
532+
.arg("--work-dir").arg(&tmpdir(build))
533+
.arg("--output-dir").arg(&distdir(build))
532534
.arg(format!("--package-name={}", name))
533535
.arg("--component-name=rust-src")
534536
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -622,15 +624,15 @@ pub fn cargo(build: &Build, stage: u32, target: &str) {
622624
t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes()));
623625

624626
// Generate the installer tarball
625-
let mut cmd = Command::new("sh");
626-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
627+
let mut cmd = rust_installer(build);
628+
cmd.arg("generate")
627629
.arg("--product-name=Rust")
628630
.arg("--rel-manifest-dir=rustlib")
629631
.arg("--success-message=Rust-is-ready-to-roll.")
630-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
631-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
632-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
633-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)))
632+
.arg("--image-dir").arg(&image)
633+
.arg("--work-dir").arg(&tmpdir(build))
634+
.arg("--output-dir").arg(&distdir(build))
635+
.arg("--non-installed-overlay").arg(&overlay)
634636
.arg(format!("--package-name={}-{}", name, target))
635637
.arg("--component-name=cargo")
636638
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -671,15 +673,15 @@ pub fn rls(build: &Build, stage: u32, target: &str) {
671673
t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes()));
672674

673675
// Generate the installer tarball
674-
let mut cmd = Command::new("sh");
675-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
676+
let mut cmd = rust_installer(build);
677+
cmd.arg("generate")
676678
.arg("--product-name=Rust")
677679
.arg("--rel-manifest-dir=rustlib")
678680
.arg("--success-message=RLS-ready-to-serve.")
679-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
680-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
681-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
682-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)))
681+
.arg("--image-dir").arg(&image)
682+
.arg("--work-dir").arg(&tmpdir(build))
683+
.arg("--output-dir").arg(&distdir(build))
684+
.arg("--non-installed-overlay").arg(&overlay)
683685
.arg(format!("--package-name={}-{}", name, target))
684686
.arg("--component-name=rls")
685687
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -730,29 +732,28 @@ pub fn extended(build: &Build, stage: u32, target: &str) {
730732
// upgrades rustc was upgraded before rust-std. To avoid rustc clobbering
731733
// the std files during uninstall. To do this ensure that rustc comes
732734
// before rust-std in the list below.
733-
let mut input_tarballs = format!("{},{},{},{},{},{}",
734-
sanitize_sh(&rustc_installer),
735-
sanitize_sh(&cargo_installer),
736-
sanitize_sh(&rls_installer),
737-
sanitize_sh(&analysis_installer),
738-
sanitize_sh(&docs_installer),
739-
sanitize_sh(&std_installer));
735+
let mut tarballs = vec![rustc_installer, cargo_installer, rls_installer,
736+
analysis_installer, docs_installer, std_installer];
740737
if target.contains("pc-windows-gnu") {
741-
input_tarballs.push_str(",");
742-
input_tarballs.push_str(&sanitize_sh(&mingw_installer));
738+
tarballs.push(mingw_installer);
739+
}
740+
let mut input_tarballs = tarballs[0].as_os_str().to_owned();
741+
for tarball in &tarballs[1..] {
742+
input_tarballs.push(",");
743+
input_tarballs.push(tarball);
743744
}
744745

745-
let mut cmd = Command::new(SH_CMD);
746-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/combine-installers.sh")))
746+
let mut cmd = rust_installer(build);
747+
cmd.arg("combine")
747748
.arg("--product-name=Rust")
748749
.arg("--rel-manifest-dir=rustlib")
749750
.arg("--success-message=Rust-is-ready-to-roll.")
750-
.arg(format!("--work-dir={}", sanitize_sh(&work)))
751-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
751+
.arg("--work-dir").arg(&work)
752+
.arg("--output-dir").arg(&distdir(build))
752753
.arg(format!("--package-name={}-{}", pkgname(build, "rust"), target))
753754
.arg("--legacy-manifest-dirs=rustlib,cargo")
754-
.arg(format!("--input-tarballs={}", input_tarballs))
755-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)));
755+
.arg("--input-tarballs").arg(input_tarballs)
756+
.arg("--non-installed-overlay").arg(&overlay);
756757
build.run(&mut cmd);
757758

758759
let mut license = String::new();

src/bootstrap/step.rs

+21
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,10 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules {
574574
.dep(|s| s.name("maybe-clean-tools"))
575575
.dep(|s| s.name("libstd-tool"))
576576
.run(move |s| compile::tool(build, s.stage, s.target, "remote-test-client"));
577+
rules.build("tool-rust-installer", "src/tools/rust-installer")
578+
.dep(|s| s.name("maybe-clean-tools"))
579+
.dep(|s| s.name("libstd-tool"))
580+
.run(move |s| compile::tool(build, s.stage, s.target, "rust-installer"));
577581
rules.build("tool-cargo", "src/tools/cargo")
578582
.host(true)
579583
.default(build.config.extended)
@@ -704,6 +708,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules {
704708
.host(true)
705709
.only_host_build(true)
706710
.default(true)
711+
.dep(move |s| tool_rust_installer(build, s))
707712
.run(move |s| dist::rustc(build, s.stage, s.target));
708713
rules.dist("dist-std", "src/libstd")
709714
.dep(move |s| {
@@ -718,10 +723,12 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules {
718723
})
719724
.default(true)
720725
.only_host_build(true)
726+
.dep(move |s| tool_rust_installer(build, s))
721727
.run(move |s| dist::std(build, &s.compiler(), s.target));
722728
rules.dist("dist-mingw", "path/to/nowhere")
723729
.default(true)
724730
.only_host_build(true)
731+
.dep(move |s| tool_rust_installer(build, s))
725732
.run(move |s| {
726733
if s.target.contains("pc-windows-gnu") {
727734
dist::mingw(build, s.target)
@@ -732,21 +739,25 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules {
732739
.host(true)
733740
.only_build(true)
734741
.only_host_build(true)
742+
.dep(move |s| tool_rust_installer(build, s))
735743
.run(move |_| dist::rust_src(build));
736744
rules.dist("dist-docs", "src/doc")
737745
.default(true)
738746
.only_host_build(true)
739747
.dep(|s| s.name("default:doc"))
748+
.dep(move |s| tool_rust_installer(build, s))
740749
.run(move |s| dist::docs(build, s.stage, s.target));
741750
rules.dist("dist-analysis", "analysis")
742751
.default(build.config.extended)
743752
.dep(|s| s.name("dist-std"))
744753
.only_host_build(true)
754+
.dep(move |s| tool_rust_installer(build, s))
745755
.run(move |s| dist::analysis(build, &s.compiler(), s.target));
746756
rules.dist("dist-rls", "rls")
747757
.host(true)
748758
.only_host_build(true)
749759
.dep(|s| s.name("tool-rls"))
760+
.dep(move |s| tool_rust_installer(build, s))
750761
.run(move |s| dist::rls(build, s.stage, s.target));
751762
rules.dist("install", "path/to/nowhere")
752763
.dep(|s| s.name("default:dist"))
@@ -755,6 +766,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules {
755766
.host(true)
756767
.only_host_build(true)
757768
.dep(|s| s.name("tool-cargo"))
769+
.dep(move |s| tool_rust_installer(build, s))
758770
.run(move |s| dist::cargo(build, s.stage, s.target));
759771
rules.dist("dist-extended", "extended")
760772
.default(build.config.extended)
@@ -767,6 +779,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules {
767779
.dep(|d| d.name("dist-cargo"))
768780
.dep(|d| d.name("dist-rls"))
769781
.dep(|d| d.name("dist-analysis"))
782+
.dep(move |s| tool_rust_installer(build, s))
770783
.run(move |s| dist::extended(build, s.stage, s.target));
771784

772785
rules.dist("dist-sign", "hash-and-sign")
@@ -778,6 +791,14 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules {
778791

779792
rules.verify();
780793
return rules;
794+
795+
/// Helper to depend on a stage0 build-only rust-installer tool.
796+
fn tool_rust_installer<'a>(build: &'a Build, step: &Step<'a>) -> Step<'a> {
797+
step.name("tool-rust-installer")
798+
.host(&build.config.build)
799+
.target(&build.config.build)
800+
.stage(0)
801+
}
781802
}
782803

783804
#[derive(PartialEq, Eq, Hash, Clone, Debug)]

src/rust-installer

-1
This file was deleted.

src/tools/rust-installer

Submodule rust-installer added at 6a2c5d1

src/tools/tidy/src/main.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ fn filter_dirs(path: &Path) -> bool {
8181
"src/libbacktrace",
8282
"src/compiler-rt",
8383
"src/rustllvm",
84-
"src/rust-installer",
8584
"src/liblibc",
8685
"src/vendor",
8786
"src/rt/hoedown",
8887
"src/tools/cargo",
8988
"src/tools/rls",
89+
"src/tools/rust-installer",
9090
];
9191
skip.iter().any(|p| path.ends_with(p))
9292
}

0 commit comments

Comments
 (0)