@@ -61,7 +61,8 @@ pub fn parse_config(args: Vec<String>) -> Config {
6161 . optopt ( "" , "jsondoclint-path" , "path to jsondoclint to use for doc tests" , "PATH" )
6262 . optopt ( "" , "run-clang-based-tests-with" , "path to Clang executable" , "PATH" )
6363 . optopt ( "" , "llvm-filecheck" , "path to LLVM's FileCheck binary" , "DIR" )
64- . reqopt ( "" , "src-base" , "directory to scan for test files" , "PATH" )
64+ . reqopt ( "" , "src-root" , "directory containing sources" , "PATH" )
65+ . reqopt ( "" , "src-test-suite-root" , "directory containing test suite sources" , "PATH" )
6566 . reqopt ( "" , "build-base" , "directory to deposit test outputs" , "PATH" )
6667 . reqopt ( "" , "sysroot-base" , "directory containing the compiler sysroot" , "PATH" )
6768 . reqopt ( "" , "stage" , "stage number under test" , "N" )
@@ -243,7 +244,6 @@ pub fn parse_config(args: Vec<String>) -> Config {
243244 || header:: extract_llvm_version_from_binary ( & matches. opt_str ( "llvm-filecheck" ) ?) ,
244245 ) ;
245246
246- let src_base = opt_path ( matches, "src-base" ) ;
247247 let run_ignored = matches. opt_present ( "ignored" ) ;
248248 let with_rustc_debug_assertions = matches. opt_present ( "with-rustc-debug-assertions" ) ;
249249 let with_std_debug_assertions = matches. opt_present ( "with-std-debug-assertions" ) ;
@@ -300,6 +300,10 @@ pub fn parse_config(args: Vec<String>) -> Config {
300300 None => panic ! ( "`--stage` is required" ) ,
301301 } ;
302302
303+ let src_root = opt_path ( matches, "src-root" ) ;
304+ let src_test_suite_root = opt_path ( matches, "src-test-suite-root" ) ;
305+ assert ! ( src_test_suite_root. starts_with( & src_root) ) ;
306+
303307 Config {
304308 bless : matches. opt_present ( "bless" ) ,
305309 compile_lib_path : make_absolute ( opt_path ( matches, "compile-lib-path" ) ) ,
@@ -314,7 +318,10 @@ pub fn parse_config(args: Vec<String>) -> Config {
314318 run_clang_based_tests_with : matches. opt_str ( "run-clang-based-tests-with" ) ,
315319 llvm_filecheck : matches. opt_str ( "llvm-filecheck" ) . map ( PathBuf :: from) ,
316320 llvm_bin_dir : matches. opt_str ( "llvm-bin-dir" ) . map ( PathBuf :: from) ,
317- src_base,
321+
322+ src_root,
323+ src_test_suite_root,
324+
318325 build_base : opt_path ( matches, "build-base" ) ,
319326 sysroot_base : opt_path ( matches, "sysroot-base" ) ,
320327
@@ -422,7 +429,10 @@ pub fn log_config(config: &Config) {
422429 logv ( c, format ! ( "rustc_path: {:?}" , config. rustc_path. display( ) ) ) ;
423430 logv ( c, format ! ( "cargo_path: {:?}" , config. cargo_path) ) ;
424431 logv ( c, format ! ( "rustdoc_path: {:?}" , config. rustdoc_path) ) ;
425- logv ( c, format ! ( "src_base: {:?}" , config. src_base. display( ) ) ) ;
432+
433+ logv ( c, format ! ( "src_root: {}" , config. src_root. display( ) ) ) ;
434+ logv ( c, format ! ( "src_test_suite_root: {}" , config. src_test_suite_root. display( ) ) ) ;
435+
426436 logv ( c, format ! ( "build_base: {:?}" , config. build_base. display( ) ) ) ;
427437 logv ( c, format ! ( "stage: {}" , config. stage) ) ;
428438 logv ( c, format ! ( "stage_id: {}" , config. stage_id) ) ;
@@ -620,20 +630,29 @@ struct TestCollector {
620630/// regardless of whether any filters/tests were specified on the command-line,
621631/// because filtering is handled later by libtest.
622632pub fn collect_and_make_tests ( config : Arc < Config > ) -> Vec < test:: TestDescAndFn > {
623- debug ! ( "making tests from {:? }" , config. src_base . display( ) ) ;
633+ debug ! ( "making tests from {}" , config. src_test_suite_root . display( ) ) ;
624634 let common_inputs_stamp = common_inputs_stamp ( & config) ;
625- let modified_tests = modified_tests ( & config, & config. src_base ) . unwrap_or_else ( |err| {
626- panic ! ( "modified_tests got error from dir: {}, error: {}" , config. src_base. display( ) , err)
627- } ) ;
635+ let modified_tests =
636+ modified_tests ( & config, & config. src_test_suite_root ) . unwrap_or_else ( |err| {
637+ panic ! (
638+ "modified_tests got error from dir: {}, error: {}" ,
639+ config. src_test_suite_root. display( ) ,
640+ err
641+ )
642+ } ) ;
628643 let cache = HeadersCache :: load ( & config) ;
629644
630645 let cx = TestCollectorCx { config, cache, common_inputs_stamp, modified_tests } ;
631646 let mut collector =
632647 TestCollector { tests : vec ! [ ] , found_path_stems : HashSet :: new ( ) , poisoned : false } ;
633648
634- collect_tests_from_dir ( & cx, & mut collector, & cx. config . src_base , Path :: new ( "" ) ) . unwrap_or_else (
635- |reason| panic ! ( "Could not read tests from {}: {reason}" , cx. config. src_base. display( ) ) ,
636- ) ;
649+ collect_tests_from_dir ( & cx, & mut collector, & cx. config . src_test_suite_root , Path :: new ( "" ) )
650+ . unwrap_or_else ( |reason| {
651+ panic ! (
652+ "Could not read tests from {}: {reason}" ,
653+ cx. config. src_test_suite_root. display( )
654+ )
655+ } ) ;
637656
638657 let TestCollector { tests, found_path_stems, poisoned } = collector;
639658
@@ -655,7 +674,7 @@ pub fn collect_and_make_tests(config: Arc<Config>) -> Vec<test::TestDescAndFn> {
655674/// common to some subset of tests, and are hopefully unlikely to be modified
656675/// while working on other tests.)
657676fn common_inputs_stamp ( config : & Config ) -> Stamp {
658- let rust_src_dir = config. find_rust_src_root ( ) . expect ( "Could not find Rust source root" ) ;
677+ let src_root = & config. src_root ;
659678
660679 let mut stamp = Stamp :: from_path ( & config. rustc_path ) ;
661680
@@ -670,17 +689,17 @@ fn common_inputs_stamp(config: &Config) -> Stamp {
670689 "src/etc/lldb_providers.py" ,
671690 ] ;
672691 for file in & pretty_printer_files {
673- let path = rust_src_dir . join ( file) ;
692+ let path = src_root . join ( file) ;
674693 stamp. add_path ( & path) ;
675694 }
676695
677- stamp. add_dir ( & rust_src_dir . join ( "src/ etc/ natvis" ) ) ;
696+ stamp. add_dir ( & src_root . join ( "src" ) . join ( " etc" ) . join ( " natvis") ) ;
678697
679698 stamp. add_dir ( & config. run_lib_path ) ;
680699
681700 if let Some ( ref rustdoc_path) = config. rustdoc_path {
682701 stamp. add_path ( & rustdoc_path) ;
683- stamp. add_path ( & rust_src_dir . join ( "src/etc/htmldocck.py" ) ) ;
702+ stamp. add_path ( & src_root . join ( "src/etc/htmldocck.py" ) ) ;
684703 }
685704
686705 // Re-run coverage tests if the `coverage-dump` tool was modified,
@@ -689,10 +708,10 @@ fn common_inputs_stamp(config: &Config) -> Stamp {
689708 stamp. add_path ( coverage_dump_path)
690709 }
691710
692- stamp. add_dir ( & rust_src_dir . join ( "src/tools/run-make-support" ) ) ;
711+ stamp. add_dir ( & src_root . join ( "src/tools/run-make-support" ) ) ;
693712
694713 // Compiletest itself.
695- stamp. add_dir ( & rust_src_dir . join ( "src/tools/compiletest/ " ) ) ;
714+ stamp. add_dir ( & src_root . join ( "src/tools/compiletest" ) ) ;
696715
697716 stamp
698717}
@@ -933,10 +952,7 @@ fn files_related_to_test(
933952 }
934953
935954 // `minicore.rs` test auxiliary: we need to make sure tests get rerun if this changes.
936- //
937- // FIXME(jieyouxu): untangle these paths, we should provide both a path to root `tests/` or
938- // `tests/auxiliary/` and the test suite in question. `src_base` is also a terrible name.
939- related. push ( config. src_base . parent ( ) . unwrap ( ) . join ( "auxiliary" ) . join ( "minicore.rs" ) ) ;
955+ related. push ( config. src_root . join ( "tests" ) . join ( "auxiliary" ) . join ( "minicore.rs" ) ) ;
940956
941957 related
942958}
@@ -1026,10 +1042,8 @@ fn make_test_name(
10261042 testpaths : & TestPaths ,
10271043 revision : Option < & str > ,
10281044) -> test:: TestName {
1029- // Print the name of the file, relative to the repository root.
1030- // `src_base` looks like `/path/to/rust/tests/ui`
1031- let root_directory = config. src_base . parent ( ) . unwrap ( ) . parent ( ) . unwrap ( ) ;
1032- let path = testpaths. file . strip_prefix ( root_directory) . unwrap ( ) ;
1045+ // Print the name of the file, relative to the sources root.
1046+ let path = testpaths. file . strip_prefix ( & config. src_root ) . unwrap ( ) ;
10331047 let debugger = match config. debugger {
10341048 Some ( d) => format ! ( "-{}" , d) ,
10351049 None => String :: new ( ) ,
0 commit comments