1414
1515pub use crate_id:: CrateId ;
1616pub use target:: { OutputType , Main , Lib , Test , Bench , Target , Build , Install } ;
17- pub use version:: { Version , NoVersion , split_version_general, try_parsing_version} ;
17+ pub use version:: { Version , ExactRevision , NoVersion , split_version, split_version_general,
18+ try_parsing_version} ;
1819pub use rustc:: metadata:: filesearch:: rust_path;
1920use rustc:: metadata:: filesearch:: libdir;
2021use rustc:: driver:: driver:: host_triple;
@@ -213,8 +214,9 @@ pub fn library_in_workspace(path: &Path, short_name: &str, where: Target,
213214}
214215
215216// rustc doesn't use target-specific subdirectories
216- pub fn system_library ( sysroot : & Path , lib_name : & str ) -> Option < Path > {
217- library_in ( lib_name, & NoVersion , & sysroot. join ( libdir ( ) ) )
217+ pub fn system_library ( sysroot : & Path , crate_id : & str ) -> Option < Path > {
218+ let ( lib_name, version) = split_crate_id ( crate_id) ;
219+ library_in ( lib_name, & version, & sysroot. join ( libdir ( ) ) )
218220}
219221
220222fn library_in ( short_name : & str , version : & Version , dir_to_search : & Path ) -> Option < Path > {
@@ -268,6 +270,7 @@ fn library_in(short_name: &str, version: &Version, dir_to_search: &Path) -> Opti
268270 }
269271 None => break
270272 }
273+
271274 }
272275 _ => { f_name = f_name. slice ( 0 , i) ; }
273276 }
@@ -293,6 +296,22 @@ fn library_in(short_name: &str, version: &Version, dir_to_search: &Path) -> Opti
293296 abs_path
294297}
295298
299+ fn split_crate_id < ' a > ( crate_id : & ' a str ) -> ( & ' a str , Version ) {
300+ match split_version ( crate_id) {
301+ Some ( ( name, vers) ) =>
302+ match vers {
303+ ExactRevision ( ref v) => match v. find ( '-' ) {
304+ Some ( pos) => ( name, ExactRevision ( v. slice ( 0 , pos) . to_owned ( ) ) ) ,
305+ None => ( name, ExactRevision ( v. to_owned ( ) ) )
306+ } ,
307+ _ => ( name, vers)
308+ } ,
309+ None => ( crate_id, NoVersion )
310+ }
311+ }
312+
313+
314+
296315/// Returns the executable that would be installed for <crateid>
297316/// in <workspace>
298317/// As a side effect, creates the bin-dir if it doesn't exist
0 commit comments