@@ -267,7 +267,7 @@ impl RustwideBuilder {
267
267
. build ( & self . toolchain , & krate, sandbox)
268
268
. run ( |build| {
269
269
let mut files_list = None ;
270
- let mut has_docs = false ;
270
+ let ( mut has_docs, mut in_target ) = ( false , false ) ;
271
271
let mut successful_targets = Vec :: new ( ) ;
272
272
273
273
// Do an initial build and then copy the sources in the database
@@ -281,54 +281,43 @@ impl RustwideBuilder {
281
281
build. host_source_dir ( ) ,
282
282
) ?) ;
283
283
284
- has_docs = res
285
- . cargo_metadata
286
- . root ( )
287
- . library_name ( )
288
- . map ( |name| {
289
- build
290
- . host_target_dir ( )
291
- . join ( & res. target )
292
- . join ( "doc" )
293
- . join ( name)
294
- . is_dir ( )
295
- } )
296
- . unwrap_or ( false ) ;
284
+ if let Some ( name) = res
285
+ . cargo_metadata
286
+ . root ( )
287
+ . library_name ( ) {
288
+ let host_target = build. host_target_dir ( ) ;
289
+ if host_target. join ( & res. target )
290
+ . join ( "doc" )
291
+ . join ( & name)
292
+ . is_dir ( ) {
293
+ has_docs = true ;
294
+ in_target = true ;
295
+ // hack for proc-macro documentation:
296
+ // it really should be in target/$target/doc,
297
+ // but rustdoc has a bug and puts it in target/doc
298
+ } else if host_target. join ( "doc" ) . join ( name) . is_dir ( ) {
299
+ has_docs = true ;
300
+ }
301
+ }
297
302
}
298
303
299
304
if has_docs {
300
305
debug ! ( "adding documentation for the default target to the database" ) ;
301
306
self . copy_docs (
302
307
& build. host_target_dir ( ) ,
303
308
local_storage. path ( ) ,
304
- & res. target ,
309
+ if in_target { & res. target } else { "" } ,
305
310
true ,
306
311
) ?;
312
+ successful_targets. push ( DEFAULT_TARGET . to_string ( ) ) ;
307
313
308
- // Then build the documentation for all the targets
309
- for target in TARGETS {
310
- debug ! ( "building package {} {} for {}" , name, version, target) ;
311
- let target_res = self . execute_build ( Some ( target) , & build, & limits) ?;
312
- if target_res. successful {
313
- // Cargo is not giving any error and not generating documentation of some crates
314
- // when we use a target compile options. Check documentation exists before
315
- // adding target to successfully_targets.
316
- if build. host_target_dir ( ) . join ( target) . join ( "doc" ) . is_dir ( ) {
317
- debug ! (
318
- "adding documentation for target {} to the database" ,
319
- target
320
- ) ;
321
- self . copy_docs (
322
- & build. host_target_dir ( ) ,
323
- local_storage. path ( ) ,
324
- target,
325
- false ,
326
- ) ?;
327
- successful_targets. push ( target. to_string ( ) ) ;
328
- }
314
+ if in_target {
315
+ // Then build the documentation for all the targets
316
+ for target in TARGETS {
317
+ debug ! ( "building package {} {} for {}" , name, version, target) ;
318
+ self . build_target ( target, & build, & limits, & local_storage. path ( ) , & mut successful_targets) ?;
329
319
}
330
320
}
331
-
332
321
self . upload_docs ( & conn, name, version, local_storage. path ( ) ) ?;
333
322
}
334
323
@@ -362,6 +351,30 @@ impl RustwideBuilder {
362
351
Ok ( res. successful )
363
352
}
364
353
354
+ fn build_target ( & self , target : & str , build : & Build , limits : & Limits ,
355
+ local_storage : & Path , successful_targets : & mut Vec < String > ) -> Result < ( ) > {
356
+ let target_res = self . execute_build ( Some ( target) , build, limits) ?;
357
+ if target_res. successful {
358
+ // Cargo is not giving any error and not generating documentation of some crates
359
+ // when we use a target compile options. Check documentation exists before
360
+ // adding target to successfully_targets.
361
+ if build. host_target_dir ( ) . join ( target) . join ( "doc" ) . is_dir ( ) {
362
+ debug ! (
363
+ "adding documentation for target {} to the database" ,
364
+ target,
365
+ ) ;
366
+ self . copy_docs (
367
+ & build. host_target_dir ( ) ,
368
+ local_storage,
369
+ target,
370
+ false ,
371
+ ) ?;
372
+ successful_targets. push ( target. to_string ( ) ) ;
373
+ }
374
+ }
375
+ Ok ( ( ) )
376
+ }
377
+
365
378
fn execute_build (
366
379
& self ,
367
380
target : Option < & str > ,
0 commit comments