@@ -219,7 +219,7 @@ use crate::schema::{METADATA_HEADER, rustc_version};
219
219
use rustc_data_structures:: fx:: FxHashSet ;
220
220
use rustc_data_structures:: svh:: Svh ;
221
221
use rustc_data_structures:: sync:: MetadataRef ;
222
- use rustc:: middle:: cstore:: MetadataLoader ;
222
+ use rustc:: middle:: cstore:: { CrateSource , MetadataLoader } ;
223
223
use rustc:: session:: { config, Session } ;
224
224
use rustc:: session:: filesearch:: { FileSearch , FileMatches , FileDoesntMatch } ;
225
225
use rustc:: session:: search_paths:: PathKind ;
@@ -274,10 +274,8 @@ crate struct Context<'a> {
274
274
}
275
275
276
276
crate struct CratePaths {
277
- pub ident : String ,
278
- pub dylib : Option < PathBuf > ,
279
- pub rlib : Option < PathBuf > ,
280
- pub rmeta : Option < PathBuf > ,
277
+ pub name : Symbol ,
278
+ pub source : CrateSource ,
281
279
}
282
280
283
281
#[ derive( Copy , Clone , PartialEq ) ]
@@ -297,12 +295,6 @@ impl fmt::Display for CrateFlavor {
297
295
}
298
296
}
299
297
300
- impl CratePaths {
301
- fn paths ( & self ) -> Vec < PathBuf > {
302
- self . dylib . iter ( ) . chain ( self . rlib . iter ( ) ) . chain ( self . rmeta . iter ( ) ) . cloned ( ) . collect ( )
303
- }
304
- }
305
-
306
298
impl < ' a > Context < ' a > {
307
299
crate fn reset ( & mut self ) {
308
300
self . rejected_via_hash . clear ( ) ;
@@ -324,7 +316,7 @@ impl<'a> Context<'a> {
324
316
crate fn report_errs ( self ) -> ! {
325
317
let add = match self . root {
326
318
None => String :: new ( ) ,
327
- Some ( r) => format ! ( " which `{}` depends on" , r. ident ) ,
319
+ Some ( r) => format ! ( " which `{}` depends on" , r. name ) ,
328
320
} ;
329
321
let mut msg = "the following crate versions were found:" . to_string ( ) ;
330
322
let mut err = if !self . rejected_via_hash . is_empty ( ) {
@@ -342,8 +334,8 @@ impl<'a> Context<'a> {
342
334
match self . root {
343
335
None => { }
344
336
Some ( r) => {
345
- for path in r. paths ( ) . iter ( ) {
346
- msg. push_str ( & format ! ( "\n crate `{}`: {}" , r. ident , path. display( ) ) ) ;
337
+ for path in r. source . paths ( ) {
338
+ msg. push_str ( & format ! ( "\n crate `{}`: {}" , r. name , path. display( ) ) ) ;
347
339
}
348
340
}
349
341
}
@@ -535,18 +527,8 @@ impl<'a> Context<'a> {
535
527
// search is being performed for.
536
528
let mut libraries = FxHashMap :: default ( ) ;
537
529
for ( _hash, ( rlibs, rmetas, dylibs) ) in candidates {
538
- let mut slot = None ;
539
- let rlib = self . extract_one ( rlibs, CrateFlavor :: Rlib , & mut slot) ;
540
- let rmeta = self . extract_one ( rmetas, CrateFlavor :: Rmeta , & mut slot) ;
541
- let dylib = self . extract_one ( dylibs, CrateFlavor :: Dylib , & mut slot) ;
542
- if let Some ( ( h, m) ) = slot {
543
- libraries. insert ( h,
544
- Library {
545
- dylib,
546
- rlib,
547
- rmeta,
548
- metadata : m,
549
- } ) ;
530
+ if let Some ( ( svh, lib) ) = self . extract_lib ( rlibs, rmetas, dylibs) {
531
+ libraries. insert ( svh, lib) ;
550
532
}
551
533
}
552
534
@@ -564,7 +546,7 @@ impl<'a> Context<'a> {
564
546
self . crate_name) ;
565
547
let candidates = libraries. iter ( ) . filter_map ( |( _, lib) | {
566
548
let crate_name = & lib. metadata . get_root ( ) . name . as_str ( ) ;
567
- match & ( & lib. dylib , & lib. rlib ) {
549
+ match & ( & lib. source . dylib , & lib. source . rlib ) {
568
550
& ( & Some ( ( ref pd, _) ) , & Some ( ( ref pr, _) ) ) => {
569
551
Some ( format ! ( "\n crate `{}`: {}\n {:>padding$}" ,
570
552
crate_name,
@@ -585,6 +567,21 @@ impl<'a> Context<'a> {
585
567
}
586
568
}
587
569
570
+ fn extract_lib (
571
+ & mut self ,
572
+ rlibs : FxHashMap < PathBuf , PathKind > ,
573
+ rmetas : FxHashMap < PathBuf , PathKind > ,
574
+ dylibs : FxHashMap < PathBuf , PathKind > ,
575
+ ) -> Option < ( Svh , Library ) > {
576
+ let mut slot = None ;
577
+ let source = CrateSource {
578
+ rlib : self . extract_one ( rlibs, CrateFlavor :: Rlib , & mut slot) ,
579
+ rmeta : self . extract_one ( rmetas, CrateFlavor :: Rmeta , & mut slot) ,
580
+ dylib : self . extract_one ( dylibs, CrateFlavor :: Dylib , & mut slot) ,
581
+ } ;
582
+ slot. map ( |( svh, metadata) | ( svh, Library { source, metadata } ) )
583
+ }
584
+
588
585
// Attempts to extract *one* library from the set `m`. If the set has no
589
586
// elements, `None` is returned. If the set has more than one element, then
590
587
// the errors and notes are emitted about the set of libraries.
@@ -829,23 +826,8 @@ impl<'a> Context<'a> {
829
826
}
830
827
} ;
831
828
832
- // Extract the rlib/dylib pair.
833
- let mut slot = None ;
834
- let rlib = self . extract_one ( rlibs, CrateFlavor :: Rlib , & mut slot) ;
835
- let rmeta = self . extract_one ( rmetas, CrateFlavor :: Rmeta , & mut slot) ;
836
- let dylib = self . extract_one ( dylibs, CrateFlavor :: Dylib , & mut slot) ;
837
-
838
- if rlib. is_none ( ) && rmeta. is_none ( ) && dylib. is_none ( ) {
839
- return None ;
840
- }
841
- slot. map ( |( _, metadata) |
842
- Library {
843
- dylib,
844
- rlib,
845
- rmeta,
846
- metadata,
847
- }
848
- )
829
+ // Extract the dylib/rlib/rmeta triple.
830
+ self . extract_lib ( rlibs, rmetas, dylibs) . map ( |( _, lib) | lib)
849
831
}
850
832
}
851
833
0 commit comments