diff --git a/src/bootstrap/src/core/build_steps/check.rs b/src/bootstrap/src/core/build_steps/check.rs index 55426bfffc733..9d958f7d10078 100644 --- a/src/bootstrap/src/core/build_steps/check.rs +++ b/src/bootstrap/src/core/build_steps/check.rs @@ -706,7 +706,7 @@ macro_rules! tool_check_step { const IS_HOST: bool = true; fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { - run.path($path) $( .path( $alt_path ) )* + run.selectors(&[$path $(, $alt_path )*]) } fn is_default_step(_builder: &Builder<'_>) -> bool { diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index 7be45c5fa9d40..929869d528958 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -3189,7 +3189,7 @@ impl Step for CrateRustdoc { const IS_HOST: bool = true; fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { - run.path("src/librustdoc").path("src/tools/rustdoc") + run.selectors(&["src/librustdoc", "src/tools/rustdoc"]) } fn is_default_step(_builder: &Builder<'_>) -> bool { diff --git a/src/bootstrap/src/core/build_steps/tool.rs b/src/bootstrap/src/core/build_steps/tool.rs index e6148af617674..ed5c2586a5ed6 100644 --- a/src/bootstrap/src/core/build_steps/tool.rs +++ b/src/bootstrap/src/core/build_steps/tool.rs @@ -689,7 +689,7 @@ impl Step for Rustdoc { const IS_HOST: bool = true; fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { - run.path("src/tools/rustdoc").path("src/librustdoc") + run.selectors(&["src/tools/rustdoc", "src/librustdoc"]) } fn is_default_step(_builder: &Builder<'_>) -> bool { diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_bench.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_bench.snap index 294623f073864..3ae8d3de6b55c 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_bench.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_bench.snap @@ -96,5 +96,4 @@ expression: bench - Set({bench::compiler/rustc_windows_rc}) [Bench] test::CrateRustdoc targets: [x86_64-unknown-linux-gnu] - - Set({bench::src/librustdoc}) - - Set({bench::src/tools/rustdoc}) + - Set({bench::src/librustdoc, bench::src/tools/rustdoc}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_build.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_build.snap index f8c6deccb3bcb..7180c337df99d 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_build.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_build.snap @@ -19,5 +19,4 @@ expression: build - Set({build::library/unwind}) [Build] tool::Rustdoc targets: [x86_64-unknown-linux-gnu] - - Set({build::src/librustdoc}) - - Set({build::src/tools/rustdoc}) + - Set({build::src/librustdoc, build::src/tools/rustdoc}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check.snap index 242a2272b4d16..89ec347d41696 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check.snap @@ -80,8 +80,7 @@ expression: check - Set({check::compiler/rustc_windows_rc}) [Check] check::Rustdoc targets: [x86_64-unknown-linux-gnu] - - Set({check::src/librustdoc}) - - Set({check::src/tools/rustdoc}) + - Set({check::src/librustdoc, check::src/tools/rustdoc}) [Check] check::CraneliftCodegenBackend targets: [x86_64-unknown-linux-gnu] - Set({check::cg_clif}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check_compiletest_include_default_paths.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check_compiletest_include_default_paths.snap index e43d5380a398d..16a88aca0e2d0 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check_compiletest_include_default_paths.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_check_compiletest_include_default_paths.snap @@ -80,8 +80,7 @@ expression: check compiletest --include-default-paths - Set({check::compiler/rustc_windows_rc}) [Check] check::Rustdoc targets: [x86_64-unknown-linux-gnu] - - Set({check::src/librustdoc}) - - Set({check::src/tools/rustdoc}) + - Set({check::src/librustdoc, check::src/tools/rustdoc}) [Check] check::CraneliftCodegenBackend targets: [x86_64-unknown-linux-gnu] - Set({check::cg_clif}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_fix.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_fix.snap index d380cb416acf8..eca161986f696 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_fix.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_fix.snap @@ -80,8 +80,7 @@ expression: fix - Set({fix::compiler/rustc_windows_rc}) [Fix] check::Rustdoc targets: [x86_64-unknown-linux-gnu] - - Set({fix::src/librustdoc}) - - Set({fix::src/tools/rustdoc}) + - Set({fix::src/librustdoc, fix::src/tools/rustdoc}) [Fix] check::CraneliftCodegenBackend targets: [x86_64-unknown-linux-gnu] - Set({fix::cg_clif}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap index ac2f315d39d96..25ff1e64e76b4 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap @@ -146,8 +146,7 @@ expression: test - Set({test::compiler/rustc_windows_rc}) [Test] test::CrateRustdoc targets: [x86_64-unknown-linux-gnu] - - Set({test::src/librustdoc}) - - Set({test::src/tools/rustdoc}) + - Set({test::src/librustdoc, test::src/tools/rustdoc}) [Test] test::CrateRustdocJsonTypes targets: [x86_64-unknown-linux-gnu] - Set({test::src/rustdoc-json-types}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_librustdoc_rustdoc.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_librustdoc_rustdoc.snap index 8dcdce0c17ab6..c8eee72aec42f 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_librustdoc_rustdoc.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_librustdoc_rustdoc.snap @@ -4,8 +4,7 @@ expression: test librustdoc rustdoc --- [Test] test::CrateRustdoc targets: [x86_64-unknown-linux-gnu] - - Set({test::src/librustdoc}) - - Set({test::src/tools/rustdoc}) + - Set({test::src/librustdoc, test::src/tools/rustdoc}) [Test] test::RustdocBook targets: [x86_64-unknown-linux-gnu] - Set({test::src/doc/rustdoc}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap index 09adbb0041ae6..2f1ee9386ed72 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap @@ -145,8 +145,7 @@ expression: test --skip=coverage - Set({test::compiler/rustc_windows_rc}) [Test] test::CrateRustdoc targets: [x86_64-unknown-linux-gnu] - - Set({test::src/librustdoc}) - - Set({test::src/tools/rustdoc}) + - Set({test::src/librustdoc, test::src/tools/rustdoc}) [Test] test::CrateRustdocJsonTypes targets: [x86_64-unknown-linux-gnu] - Set({test::src/rustdoc-json-types}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap index b5fccfcb966bb..8f5e842d28a15 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap @@ -109,8 +109,7 @@ expression: test --skip=tests - Set({test::compiler/rustc_windows_rc}) [Test] test::CrateRustdoc targets: [x86_64-unknown-linux-gnu] - - Set({test::src/librustdoc}) - - Set({test::src/tools/rustdoc}) + - Set({test::src/librustdoc, test::src/tools/rustdoc}) [Test] test::CrateRustdocJsonTypes targets: [x86_64-unknown-linux-gnu] - Set({test::src/rustdoc-json-types}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap index 9ad8914f58e30..6aaa2a9592b0e 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap @@ -89,8 +89,7 @@ expression: test --skip=tests --skip=coverage-map --skip=coverage-run --skip=lib - Set({test::compiler/rustc_windows_rc}) [Test] test::CrateRustdoc targets: [x86_64-unknown-linux-gnu] - - Set({test::src/librustdoc}) - - Set({test::src/tools/rustdoc}) + - Set({test::src/librustdoc, test::src/tools/rustdoc}) [Test] test::CrateRustdocJsonTypes targets: [x86_64-unknown-linux-gnu] - Set({test::src/rustdoc-json-types}) diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs index ae91b20406295..bc402313367fd 100644 --- a/src/bootstrap/src/core/builder/mod.rs +++ b/src/bootstrap/src/core/builder/mod.rs @@ -356,7 +356,7 @@ pub enum PathSet { /// command-line value of `std` will match if `library/std` is in the /// set. /// - /// NOTE: the paths within a set should always be aliases of one another. + /// NOTE: the paths within a set should all select the same unit of work. /// For example, `src/librustdoc` and `src/tools/rustdoc` should be in the same set, /// but `library/core` and `library/std` generally should not, unless there's no way (for that Step) /// to build them separately. @@ -555,10 +555,7 @@ impl<'a> ShouldRun<'a> { self } - /// single, non-aliased path - /// - /// Must be an on-disk path; use `alias` for names that do not correspond to on-disk paths. - pub fn path(mut self, path: &str) -> Self { + fn assert_valid_path(&self, path: &str) { let submodules_paths = self.builder.submodule_paths(); // assert only if `p` isn't submodule @@ -568,12 +565,31 @@ impl<'a> ShouldRun<'a> { "`should_run.path` should correspond to a real on-disk path - use `alias` if there is no relevant path: {path}" ); } + } + + /// A single path + /// + /// Must be an on-disk path; use [`alias`][Self::alias] for names that do not + /// correspond to on-disk paths. + pub fn path(mut self, path: &str) -> Self { + self.assert_valid_path(path); let task = TaskPath { path: path.into(), kind: Some(self.kind) }; self.paths.insert(PathSet::Set(BTreeSet::from_iter([task]))); self } + /// Multiple on-disk paths that should select the same unit of work. + pub fn selectors(mut self, paths: &[&str]) -> Self { + let mut set = BTreeSet::new(); + for path in paths { + self.assert_valid_path(path); + set.insert(TaskPath { path: (*path).into(), kind: Some(self.kind) }); + } + self.paths.insert(PathSet::Set(set)); + self + } + /// Handles individual files (not directories) within a test suite. fn is_suite_path(&self, requested_path: &Path) -> Option<&PathSet> { self.paths.iter().find(|pathset| match pathset { diff --git a/src/bootstrap/src/core/builder/tests.rs b/src/bootstrap/src/core/builder/tests.rs index f34b284dbb9cc..618129e27b8ad 100644 --- a/src/bootstrap/src/core/builder/tests.rs +++ b/src/bootstrap/src/core/builder/tests.rs @@ -2400,6 +2400,29 @@ mod snapshot { steps.assert_contains_fuzzy(StepMetadata::build("rustc", host)); } + #[test] + fn test_exclude_rustdoc_aliases() { + let ctx = TestCtx::new(); + let host = TargetSelection::from_user(&host_target()); + + let get_steps = |args: &[&str]| ctx.config("build").args(args).get_steps(); + + for args in [ + ["--skip", "rustdoc"].as_slice(), + ["--skip", "src/tools/rustdoc"].as_slice(), + ["--skip", "src/librustdoc"].as_slice(), + ] { + let steps = get_steps(args); + + steps.assert_contains_fuzzy(StepMetadata::build("rustc", host)); + steps.assert_no_match(|metadata| { + metadata.name == "rustdoc" + && metadata.kind == Kind::Build + && metadata.target == host + }); + } + } + #[test] fn test_cargo_stage_1() { let ctx = TestCtx::new();