@@ -57,7 +57,7 @@ macro_rules! book {
57
57
src: builder. src. join( $path) ,
58
58
parent: Some ( self ) ,
59
59
languages: $lang. into( ) ,
60
- rustdoc_compiler : None ,
60
+ build_compiler : None ,
61
61
} )
62
62
}
63
63
}
@@ -105,7 +105,7 @@ impl Step for UnstableBook {
105
105
src : builder. md_doc_out ( self . target ) . join ( "unstable-book" ) ,
106
106
parent : Some ( self ) ,
107
107
languages : vec ! [ ] ,
108
- rustdoc_compiler : None ,
108
+ build_compiler : None ,
109
109
} )
110
110
}
111
111
}
@@ -117,7 +117,8 @@ struct RustbookSrc<P: Step> {
117
117
src : PathBuf ,
118
118
parent : Option < P > ,
119
119
languages : Vec < & ' static str > ,
120
- rustdoc_compiler : Option < Compiler > ,
120
+ /// Compiler whose rustdoc should be used to document things using `mdbook-spec`.
121
+ build_compiler : Option < Compiler > ,
121
122
}
122
123
123
124
impl < P : Step > Step for RustbookSrc < P > {
@@ -150,7 +151,7 @@ impl<P: Step> Step for RustbookSrc<P> {
150
151
151
152
let mut rustbook_cmd = builder. tool_cmd ( Tool :: Rustbook ) ;
152
153
153
- if let Some ( compiler) = self . rustdoc_compiler {
154
+ if let Some ( compiler) = self . build_compiler {
154
155
let mut rustdoc = builder. rustdoc_for_compiler ( compiler) ;
155
156
rustdoc. pop ( ) ;
156
157
let old_path = env:: var_os ( "PATH" ) . unwrap_or_default ( ) ;
@@ -193,11 +194,21 @@ impl<P: Step> Step for RustbookSrc<P> {
193
194
builder. maybe_open_in_browser :: < P > ( index)
194
195
}
195
196
}
197
+
198
+ fn metadata ( & self ) -> Option < StepMetadata > {
199
+ let mut metadata = StepMetadata :: doc ( & format ! ( "{} (book)" , self . name) , self . target ) ;
200
+ if let Some ( compiler) = self . build_compiler {
201
+ metadata = metadata. built_by ( compiler) ;
202
+ }
203
+
204
+ Some ( metadata)
205
+ }
196
206
}
197
207
198
208
#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
199
209
pub struct TheBook {
200
- compiler : Compiler ,
210
+ /// Compiler whose rustdoc will be used to generated documentation.
211
+ build_compiler : Compiler ,
201
212
target : TargetSelection ,
202
213
}
203
214
@@ -212,7 +223,7 @@ impl Step for TheBook {
212
223
213
224
fn make_run ( run : RunConfig < ' _ > ) {
214
225
run. builder . ensure ( TheBook {
215
- compiler : run. builder . compiler ( run. builder . top_stage , run. builder . config . host_target ) ,
226
+ build_compiler : prepare_doc_compiler ( run. builder , run. target , run. builder . top_stage ) ,
216
227
target : run. target ,
217
228
} ) ;
218
229
}
@@ -229,7 +240,7 @@ impl Step for TheBook {
229
240
fn run ( self , builder : & Builder < ' _ > ) {
230
241
builder. require_submodule ( "src/doc/book" , None ) ;
231
242
232
- let compiler = self . compiler ;
243
+ let compiler = self . build_compiler ;
233
244
let target = self . target ;
234
245
235
246
let absolute_path = builder. src . join ( "src/doc/book" ) ;
@@ -242,7 +253,7 @@ impl Step for TheBook {
242
253
src : absolute_path. clone ( ) ,
243
254
parent : Some ( self ) ,
244
255
languages : vec ! [ ] ,
245
- rustdoc_compiler : None ,
256
+ build_compiler : None ,
246
257
} ) ;
247
258
248
259
// building older edition redirects
@@ -255,7 +266,7 @@ impl Step for TheBook {
255
266
// treat the other editions as not having a parent.
256
267
parent : Option :: < Self > :: None ,
257
268
languages : vec ! [ ] ,
258
- rustdoc_compiler : None ,
269
+ build_compiler : None ,
259
270
} ) ;
260
271
}
261
272
@@ -1271,15 +1282,18 @@ impl Step for RustcBook {
1271
1282
src : out_base,
1272
1283
parent : Some ( self ) ,
1273
1284
languages : vec ! [ ] ,
1274
- rustdoc_compiler : None ,
1285
+ build_compiler : None ,
1275
1286
} ) ;
1276
1287
}
1277
1288
}
1278
1289
1290
+ /// Documents the reference.
1291
+ /// It is always done using a stage 1+ compiler, because it references in-tree compiler/stdlib
1292
+ /// concepts.
1279
1293
#[ derive( Ord , PartialOrd , Debug , Clone , Hash , PartialEq , Eq ) ]
1280
1294
pub struct Reference {
1281
- pub compiler : Compiler ,
1282
- pub target : TargetSelection ,
1295
+ build_compiler : Compiler ,
1296
+ target : TargetSelection ,
1283
1297
}
1284
1298
1285
1299
impl Step for Reference {
@@ -1292,8 +1306,19 @@ impl Step for Reference {
1292
1306
}
1293
1307
1294
1308
fn make_run ( run : RunConfig < ' _ > ) {
1309
+ // Bump the stage to 2, because the reference requires an in-tree compiler.
1310
+ // At the same time, since this step is enabled by default, we don't want `x doc` to fail
1311
+ // in stage 1.
1312
+ // FIXME: create a shared method on builder for auto-bumping, and print some warning when
1313
+ // it happens.
1314
+ let stage = if run. builder . config . is_explicit_stage ( ) || run. builder . top_stage >= 2 {
1315
+ run. builder . top_stage
1316
+ } else {
1317
+ 2
1318
+ } ;
1319
+
1295
1320
run. builder . ensure ( Reference {
1296
- compiler : run . builder . compiler ( run. builder . top_stage , run. builder . config . host_target ) ,
1321
+ build_compiler : prepare_doc_compiler ( run. builder , run. target , stage ) ,
1297
1322
target : run. target ,
1298
1323
} ) ;
1299
1324
}
@@ -1304,14 +1329,14 @@ impl Step for Reference {
1304
1329
1305
1330
// This is needed for generating links to the standard library using
1306
1331
// the mdbook-spec plugin.
1307
- builder. std ( self . compiler , builder. config . host_target ) ;
1332
+ builder. std ( self . build_compiler , builder. config . host_target ) ;
1308
1333
1309
1334
// Run rustbook/mdbook to generate the HTML pages.
1310
1335
builder. ensure ( RustbookSrc {
1311
1336
target : self . target ,
1312
1337
name : "reference" . to_owned ( ) ,
1313
1338
src : builder. src . join ( "src/doc/reference" ) ,
1314
- rustdoc_compiler : Some ( self . compiler ) ,
1339
+ build_compiler : Some ( self . build_compiler ) ,
1315
1340
parent : Some ( self ) ,
1316
1341
languages : vec ! [ ] ,
1317
1342
} ) ;
0 commit comments