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