diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-01-19 19:19:48 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-19 19:19:48 +0100 |
| commit | bcb093efcda31874d73184a15fc04d427b844c50 (patch) | |
| tree | da3337b827bdfe67d9c3fd8c48d1c3dd6a414bb7 | |
| parent | dfbb6b246da3758911d5625a3b6ec4ecec9a01ab (diff) | |
| parent | c8e6889e08fd3a707134a3089840a01e615c1551 (diff) | |
| download | rust-bcb093efcda31874d73184a15fc04d427b844c50.tar.gz rust-bcb093efcda31874d73184a15fc04d427b844c50.zip | |
Rollup merge of #92800 - ehuss:docs-fallback, r=Mark-Simulacrum
Add manifest docs fallback. This adds a fallback so that the rustup manifest will contain the rust-docs component for all hosts. There is a mapping so that the docs that get downloaded are roughly close to the actual host. There inevitably will be things that don't match. Ideally the standard library docs would be the same for every platform (`cfg(doc)` goes a long way towards this), but there are still lots of minor differences. Closes #69525
| -rw-r--r-- | .github/workflows/ci.yml | 2 | ||||
| -rw-r--r-- | src/bootstrap/dist.rs | 3 | ||||
| -rw-r--r-- | src/ci/github-actions/ci.yml | 1 | ||||
| -rw-r--r-- | src/tools/build-manifest/README.md | 3 | ||||
| -rw-r--r-- | src/tools/build-manifest/src/main.rs | 98 | ||||
| -rw-r--r-- | src/tools/build-manifest/src/versions.rs | 8 |
6 files changed, 69 insertions, 46 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67deb3d9779..fe5dedb6ba4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -320,7 +320,7 @@ jobs: - name: dist-aarch64-apple env: SCRIPT: "./x.py dist --stage 2" - RUST_CONFIGURE_ARGS: "--build=x86_64-apple-darwin --host=aarch64-apple-darwin --target=aarch64-apple-darwin --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc --set llvm.ninja=false" + RUST_CONFIGURE_ARGS: "--build=x86_64-apple-darwin --host=aarch64-apple-darwin --target=aarch64-apple-darwin --enable-full-tools --enable-sanitizers --enable-profiler --disable-docs --set rust.jemalloc --set llvm.ninja=false" RUSTC_RETRY_LINKER_ON_SEGFAULT: 1 USE_XCODE_CLANG: 1 MACOSX_DEPLOYMENT_TARGET: 11.0 diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 7d9b3da48ec..a46a4e63714 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -1483,11 +1483,10 @@ impl Step for Extended { }; prepare("rustc"); prepare("cargo"); - prepare("rust-docs"); prepare("rust-std"); prepare("rust-analysis"); prepare("clippy"); - for tool in &["rust-demangler", "rls", "rust-analyzer", "miri"] { + for tool in &["rust-docs", "rust-demangler", "rls", "rust-analyzer", "miri"] { if built_tools.contains(tool) { prepare(tool); } diff --git a/src/ci/github-actions/ci.yml b/src/ci/github-actions/ci.yml index ac5d5822bfb..a70cdc4b519 100644 --- a/src/ci/github-actions/ci.yml +++ b/src/ci/github-actions/ci.yml @@ -496,6 +496,7 @@ jobs: --enable-full-tools --enable-sanitizers --enable-profiler + --disable-docs --set rust.jemalloc --set llvm.ninja=false RUSTC_RETRY_LINKER_ON_SEGFAULT: 1 diff --git a/src/tools/build-manifest/README.md b/src/tools/build-manifest/README.md index b77c5a907c1..44c96f31d0b 100644 --- a/src/tools/build-manifest/README.md +++ b/src/tools/build-manifest/README.md @@ -20,8 +20,7 @@ Then, you can generate the manifest and all the packages from `path/to/dist` to `path/to/output` with: ``` -$ cargo +nightly run path/to/dist path/to/output 1970-01-01 http://example.com \ - CHANNEL VERSION +$ cargo +nightly run path/to/dist path/to/output 1970-01-01 http://example.com CHANNEL ``` Remember to replace `CHANNEL` with the channel you produced dist artifacts of diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs index c1579ae9ac5..6b56d6bc4ad 100644 --- a/src/tools/build-manifest/src/main.rs +++ b/src/tools/build-manifest/src/main.rs @@ -155,17 +155,19 @@ static TARGETS: &[&str] = &[ "x86_64-unknown-hermit", ]; -static DOCS_TARGETS: &[&str] = &[ - "aarch64-unknown-linux-gnu", - "i686-apple-darwin", - "i686-pc-windows-gnu", - "i686-pc-windows-msvc", - "i686-unknown-linux-gnu", - "x86_64-apple-darwin", - "x86_64-pc-windows-gnu", - "x86_64-pc-windows-msvc", - "x86_64-unknown-linux-gnu", - "x86_64-unknown-linux-musl", +/// This allows the manifest to contain rust-docs for hosts that don't build +/// docs. +/// +/// Tuples of `(host_partial, host_instead)`. If the host does not have the +/// rust-docs component available, then if the host name contains +/// `host_partial`, it will use the docs from `host_instead` instead. +/// +/// The order here matters, more specific entries should be first. +static DOCS_FALLBACK: &[(&str, &str)] = &[ + ("-apple-", "x86_64-apple-darwin"), + ("aarch64", "aarch64-unknown-linux-gnu"), + ("arm-", "aarch64-unknown-linux-gnu"), + ("", "x86_64-unknown-linux-gnu"), ]; static MSI_INSTALLERS: &[&str] = &[ @@ -301,23 +303,27 @@ impl Builder { } fn add_packages_to(&mut self, manifest: &mut Manifest) { - let mut package = |name, targets| self.package(name, &mut manifest.pkg, targets); - package("rustc", HOSTS); - package("rustc-dev", HOSTS); - package("reproducible-artifacts", HOSTS); - package("rustc-docs", HOSTS); - package("cargo", HOSTS); - package("rust-mingw", MINGW); - package("rust-std", TARGETS); - package("rust-docs", DOCS_TARGETS); - package("rust-src", &["*"]); - package("rls-preview", HOSTS); - package("rust-analyzer-preview", HOSTS); - package("clippy-preview", HOSTS); - package("miri-preview", HOSTS); - package("rustfmt-preview", HOSTS); - package("rust-analysis", TARGETS); - package("llvm-tools-preview", TARGETS); + macro_rules! package { + ($name:expr, $targets:expr) => { + self.package($name, &mut manifest.pkg, $targets, &[]) + }; + } + package!("rustc", HOSTS); + package!("rustc-dev", HOSTS); + package!("reproducible-artifacts", HOSTS); + package!("rustc-docs", HOSTS); + package!("cargo", HOSTS); + package!("rust-mingw", MINGW); + package!("rust-std", TARGETS); + self.package("rust-docs", &mut manifest.pkg, HOSTS, DOCS_FALLBACK); + package!("rust-src", &["*"]); + package!("rls-preview", HOSTS); + package!("rust-analyzer-preview", HOSTS); + package!("clippy-preview", HOSTS); + package!("miri-preview", HOSTS); + package!("rustfmt-preview", HOSTS); + package!("rust-analysis", TARGETS); + package!("llvm-tools-preview", TARGETS); } fn add_artifacts_to(&mut self, manifest: &mut Manifest) { @@ -500,7 +506,13 @@ impl Builder { .extend(pkgs.iter().map(|s| (*s).to_owned())); } - fn package(&mut self, pkgname: &str, dst: &mut BTreeMap<String, Package>, targets: &[&str]) { + fn package( + &mut self, + pkgname: &str, + dst: &mut BTreeMap<String, Package>, + targets: &[&str], + fallback: &[(&str, &str)], + ) { let version_info = self .versions .version(&PkgType::from_component(pkgname)) @@ -512,16 +524,32 @@ impl Builder { is_present = false; // Pretend the component is entirely missing. } + macro_rules! tarball_name { + ($target_name:expr) => { + self.versions.tarball_name(&PkgType::from_component(pkgname), $target_name).unwrap() + }; + } + let mut target_from_compressed_tar = |target_name| { + let target = Target::from_compressed_tar(self, &tarball_name!(target_name)); + if target.available { + return target; + } + for (substr, fallback_target) in fallback { + if target_name.contains(substr) { + let t = Target::from_compressed_tar(self, &tarball_name!(fallback_target)); + // Fallbacks must always be available. + assert!(t.available); + return t; + } + } + Target::unavailable() + }; + let targets = targets .iter() .map(|name| { let target = if is_present { - let filename = self - .versions - .tarball_name(&PkgType::from_component(pkgname), name) - .unwrap(); - - Target::from_compressed_tar(self, &filename) + target_from_compressed_tar(name) } else { // If the component is not present for this build add it anyway but mark it as // unavailable -- this way rustup won't allow upgrades without --force diff --git a/src/tools/build-manifest/src/versions.rs b/src/tools/build-manifest/src/versions.rs index 11575139adc..95c2297de26 100644 --- a/src/tools/build-manifest/src/versions.rs +++ b/src/tools/build-manifest/src/versions.rs @@ -169,7 +169,7 @@ impl Versions { } pub(crate) fn archive_name( - &mut self, + &self, package: &PkgType, target: &str, extension: &str, @@ -189,11 +189,7 @@ impl Versions { } } - pub(crate) fn tarball_name( - &mut self, - package: &PkgType, - target: &str, - ) -> Result<String, Error> { + pub(crate) fn tarball_name(&self, package: &PkgType, target: &str) -> Result<String, Error> { self.archive_name(package, target, "tar.gz") } |
