@@ -22,6 +22,7 @@ use util::{exe, add_lib_path};
2222use compile;
2323use native;
2424use channel:: GitInfo ;
25+ use channel;
2526use cache:: Interned ;
2627use toolstate:: ToolState ;
2728
@@ -240,6 +241,7 @@ pub fn prepare_tool_cargo(
240241
241242 cargo. env ( "CFG_RELEASE_CHANNEL" , & builder. config . channel ) ;
242243 cargo. env ( "CFG_VERSION" , builder. rust_version ( ) ) ;
244+ cargo. env ( "CFG_RELEASE_NUM" , channel:: CFG_RELEASE_NUM ) ;
243245
244246 let info = GitInfo :: new ( & builder. config , & dir) ;
245247 if let Some ( sha) = info. sha ( ) {
@@ -258,8 +260,13 @@ pub fn prepare_tool_cargo(
258260}
259261
260262macro_rules! tool {
261- ( $( $name: ident, $path: expr, $tool_name: expr, $mode: expr
262- $( , llvm_tools = $llvm: expr) * $( , is_external_tool = $external: expr) * ; ) +) => {
263+ ( $(
264+ $name: ident, $path: expr, $tool_name: expr, $mode: expr
265+ $( , llvm_tools = $llvm: expr) *
266+ $( , is_external_tool = $external: expr) *
267+ $( , cargo_test_root = $cargo_test_root: expr) *
268+ ;
269+ ) +) => {
263270 #[ derive( Copy , PartialEq , Eq , Clone ) ]
264271 pub enum Tool {
265272 $(
@@ -281,6 +288,15 @@ macro_rules! tool {
281288 $( Tool :: $name => false $( || $llvm) * , ) +
282289 }
283290 }
291+
292+ /// Whether this tool requires may run Cargo for test crates,
293+ /// which currently needs setting the environment variable
294+ /// `__CARGO_TEST_ROOT` to separate it from the workspace.
295+ pub fn needs_cargo_test_root( & self ) -> bool {
296+ match self {
297+ $( Tool :: $name => false $( || $cargo_test_root) * , ) +
298+ }
299+ }
284300 }
285301
286302 impl <' a> Builder <' a> {
@@ -356,8 +372,9 @@ tool!(
356372 UnstableBookGen , "src/tools/unstable-book-gen" , "unstable-book-gen" , Mode :: ToolBootstrap ;
357373 Tidy , "src/tools/tidy" , "tidy" , Mode :: ToolBootstrap ;
358374 Linkchecker , "src/tools/linkchecker" , "linkchecker" , Mode :: ToolBootstrap ;
359- CargoTest , "src/tools/cargotest" , "cargotest" , Mode :: ToolBootstrap ;
360- Compiletest , "src/tools/compiletest" , "compiletest" , Mode :: ToolBootstrap , llvm_tools = true ;
375+ CargoTest , "src/tools/cargotest" , "cargotest" , Mode :: ToolBootstrap , cargo_test_root = true ;
376+ Compiletest , "src/tools/compiletest" , "compiletest" , Mode :: ToolBootstrap ,
377+ llvm_tools = true , cargo_test_root = true ;
361378 BuildManifest , "src/tools/build-manifest" , "build-manifest" , Mode :: ToolBootstrap ;
362379 RemoteTestClient , "src/tools/remote-test-client" , "remote-test-client" , Mode :: ToolBootstrap ;
363380 RustInstaller , "src/tools/rust-installer" , "fabricate" , Mode :: ToolBootstrap ,
@@ -676,6 +693,11 @@ impl<'a> Builder<'a> {
676693 }
677694 }
678695
696+ // Set `__CARGO_TEST_ROOT` to the build directory if needed.
697+ if tool. needs_cargo_test_root ( ) {
698+ cmd. env ( "__CARGO_TEST_ROOT" , & self . config . out ) ;
699+ }
700+
679701 add_lib_path ( lib_paths, cmd) ;
680702 }
681703
0 commit comments