@@ -9,6 +9,7 @@ use std::{env, fs, iter};
9
9
10
10
use clap_complete:: shells;
11
11
12
+ use crate :: core:: build_steps:: compile:: run_cargo;
12
13
use crate :: core:: build_steps:: doc:: DocumentationFormat ;
13
14
use crate :: core:: build_steps:: synthetic_targets:: MirOptPanicAbortSyntheticTarget ;
14
15
use crate :: core:: build_steps:: tool:: { self , SourceType , Tool } ;
@@ -2171,6 +2172,8 @@ struct BookTest {
2171
2172
path : PathBuf ,
2172
2173
name : & ' static str ,
2173
2174
is_ext_doc : bool ,
2175
+ dependencies : Vec < PathBuf > ,
2176
+ cli_args : Vec < String > ,
2174
2177
}
2175
2178
2176
2179
impl Step for BookTest {
@@ -2223,6 +2226,27 @@ impl BookTest {
2223
2226
// Books often have feature-gated example text.
2224
2227
rustbook_cmd. env ( "RUSTC_BOOTSTRAP" , "1" ) ;
2225
2228
rustbook_cmd. env ( "PATH" , new_path) . arg ( "test" ) . arg ( path) ;
2229
+
2230
+ if !self . dependencies . is_empty ( ) {
2231
+ for dep in self . dependencies {
2232
+ // TODO: get a Cargo etc.
2233
+ let output_paths = run_cargo (
2234
+ builder,
2235
+ cargo,
2236
+ tail_args,
2237
+ stamp,
2238
+ additional_target_deps,
2239
+ is_check,
2240
+ rlib_only_metadata,
2241
+ ) ;
2242
+ todo ! ( "run cargo build {dep}" ) ;
2243
+ }
2244
+ }
2245
+
2246
+ if !self . cli_args . is_empty ( ) {
2247
+ rustbook_cmd. args ( self . cli_args ) ;
2248
+ }
2249
+
2226
2250
builder. add_rust_test_threads ( & mut rustbook_cmd) ;
2227
2251
let _guard = builder. msg (
2228
2252
Kind :: Test ,
@@ -2281,6 +2305,7 @@ macro_rules! test_book {
2281
2305
$name: ident, $path: expr, $book_name: expr,
2282
2306
default =$default: expr
2283
2307
$( , submodules = $submodules: expr) ?
2308
+ $( , dependencies=$dependencies: expr) ?
2284
2309
;
2285
2310
) +) => {
2286
2311
$(
@@ -2310,11 +2335,33 @@ macro_rules! test_book {
2310
2335
builder. require_submodule( submodule, None ) ;
2311
2336
}
2312
2337
) *
2338
+
2339
+ let dependencies = vec![ ] ;
2340
+ let cli_args = vec![ ] ;
2341
+ $(
2342
+ let mut dependencies = dependencies;
2343
+ let mut cli_args = cli_args;
2344
+ for dep in $dependencies {
2345
+ dependencies. push( dep. to_string( ) ) ;
2346
+ }
2347
+
2348
+ if !dependencies. is_empty( ) {
2349
+ cli_args. push( String :: from( "--library-path" ) ) ;
2350
+ let lib_paths = dependencies
2351
+ . iter( )
2352
+ . map( |dep| format!( "{dep}/target/debug/deps" ) )
2353
+ . collect:: <Vec <String >>( ) ;
2354
+ cli_args. extend( lib_paths) ;
2355
+ }
2356
+ ) ?
2357
+
2313
2358
builder. ensure( BookTest {
2314
2359
compiler: self . compiler,
2315
2360
path: PathBuf :: from( $path) ,
2316
2361
name: $book_name,
2317
2362
is_ext_doc: !$default,
2363
+ dependencies,
2364
+ cli_args,
2318
2365
} ) ;
2319
2366
}
2320
2367
}
@@ -2329,7 +2376,7 @@ test_book!(
2329
2376
RustcBook , "src/doc/rustc" , "rustc" , default =true ;
2330
2377
RustByExample , "src/doc/rust-by-example" , "rust-by-example" , default =false , submodules=[ "src/doc/rust-by-example" ] ;
2331
2378
EmbeddedBook , "src/doc/embedded-book" , "embedded-book" , default =false , submodules=[ "src/doc/embedded-book" ] ;
2332
- TheBook , "src/doc/book" , "book" , default =false , submodules=[ "src/doc/book" ] ;
2379
+ TheBook , "src/doc/book" , "book" , default =false , submodules=[ "src/doc/book" ] , dependencies= [ "src/doc/book/packages/trpl" ] ;
2333
2380
UnstableBook , "src/doc/unstable-book" , "unstable-book" , default =true ;
2334
2381
EditionGuide , "src/doc/edition-guide" , "edition-guide" , default =false , submodules=[ "src/doc/edition-guide" ] ;
2335
2382
) ;
0 commit comments