@@ -9,6 +9,7 @@ use rustc::hir::lowering::lower_crate;
99use rustc:: hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
1010use rustc:: lint;
1111use rustc:: middle:: { self , reachable, resolve_lifetime, stability} ;
12+ use rustc:: middle:: cstore:: CrateStore ;
1213use rustc:: middle:: privacy:: AccessLevels ;
1314use rustc:: ty:: { self , AllArenas , Resolutions , TyCtxt , GlobalCtxt } ;
1415use rustc:: ty:: steal:: Steal ;
@@ -657,7 +658,8 @@ fn escape_dep_filename(filename: &FileName) -> String {
657658 filename. to_string ( ) . replace ( " " , "\\ " )
658659}
659660
660- fn write_out_deps ( sess : & Session , outputs : & OutputFilenames , out_filenames : & [ PathBuf ] ) {
661+ fn write_out_deps ( compiler : & Compiler , outputs : & OutputFilenames , out_filenames : & [ PathBuf ] ) {
662+ let sess = & compiler. sess ;
661663 // Write out dependency rules to the dep-info file if requested
662664 if !sess. opts . output_types . contains_key ( & OutputType :: DepInfo ) {
663665 return ;
@@ -667,13 +669,28 @@ fn write_out_deps(sess: &Session, outputs: &OutputFilenames, out_filenames: &[Pa
667669 let result = ( || -> io:: Result < ( ) > {
668670 // Build a list of files used to compile the output and
669671 // write Makefile-compatible dependency rules
670- let files: Vec < String > = sess. source_map ( )
672+ let mut files: Vec < String > = sess. source_map ( )
671673 . files ( )
672674 . iter ( )
673675 . filter ( |fmap| fmap. is_real_file ( ) )
674676 . filter ( |fmap| !fmap. is_imported ( ) )
675677 . map ( |fmap| escape_dep_filename ( & fmap. name ) )
676678 . collect ( ) ;
679+
680+ for cnum in compiler. cstore . crates_untracked ( ) {
681+ let metadata = compiler. cstore . crate_data_as_rc_any ( cnum) ;
682+ let metadata = metadata. downcast_ref :: < cstore:: CrateMetadata > ( ) . unwrap ( ) ;
683+ if let Some ( ( path, _) ) = & metadata. source . dylib {
684+ files. push ( escape_dep_filename ( & FileName :: Real ( path. clone ( ) ) ) ) ;
685+ }
686+ if let Some ( ( path, _) ) = & metadata. source . rlib {
687+ files. push ( escape_dep_filename ( & FileName :: Real ( path. clone ( ) ) ) ) ;
688+ }
689+ if let Some ( ( path, _) ) = & metadata. source . rmeta {
690+ files. push ( escape_dep_filename ( & FileName :: Real ( path. clone ( ) ) ) ) ;
691+ }
692+ }
693+
677694 let mut file = fs:: File :: create ( & deps_filename) ?;
678695 for path in out_filenames {
679696 writeln ! ( file, "{}: {}\n " , path. display( ) , files. join( " " ) ) ?;
@@ -742,7 +759,7 @@ pub fn prepare_outputs(
742759 }
743760 }
744761
745- write_out_deps ( sess , & outputs, & output_paths) ;
762+ write_out_deps ( compiler , & outputs, & output_paths) ;
746763
747764 let only_dep_info = sess. opts . output_types . contains_key ( & OutputType :: DepInfo )
748765 && sess. opts . output_types . len ( ) == 1 ;
0 commit comments