@@ -11,7 +11,6 @@ use std::str;
1111use  crate :: llvm:: archive_ro:: { ArchiveRO ,  Child } ; 
1212use  crate :: llvm:: { self ,  ArchiveKind ,  LLVMMachineType ,  LLVMRustCOFFShortExport } ; 
1313use  rustc_codegen_ssa:: back:: archive:: ArchiveBuilder ; 
14- use  rustc_data_structures:: temp_dir:: MaybeTempDir ; 
1514use  rustc_session:: cstore:: { DllCallingConvention ,  DllImport } ; 
1615use  rustc_session:: Session ; 
1716
@@ -96,19 +95,23 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
9695        } 
9796    } 
9897
99-     fn  inject_dll_import_lib ( 
100-         & mut  self , 
98+     fn  sess ( & self )  -> & Session  { 
99+         self . sess 
100+     } 
101+ 
102+     fn  create_dll_import_lib ( 
103+         sess :  & Session , 
101104        lib_name :  & str , 
102105        dll_imports :  & [ DllImport ] , 
103-         tmpdir :  & MaybeTempDir , 
104-     )  { 
106+         tmpdir :  & Path , 
107+     )  ->  PathBuf   { 
105108        let  output_path = { 
106-             let  mut  output_path:  PathBuf  = tmpdir. as_ref ( ) . to_path_buf ( ) ; 
109+             let  mut  output_path:  PathBuf  = tmpdir. to_path_buf ( ) ; 
107110            output_path. push ( format ! ( "{}_imports" ,  lib_name) ) ; 
108111            output_path. with_extension ( "lib" ) 
109112        } ; 
110113
111-         let  target = & self . sess . target ; 
114+         let  target = & sess. target ; 
112115        let  mingw_gnu_toolchain = target. vendor  == "pc" 
113116            && target. os  == "windows" 
114117            && target. env  == "gnu" 
@@ -117,7 +120,7 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
117120        let  import_name_and_ordinal_vector:  Vec < ( String ,  Option < u16 > ) >  = dll_imports
118121            . iter ( ) 
119122            . map ( |import :  & DllImport | { 
120-                 if  self . sess . target . arch  == "x86"  { 
123+                 if  sess. target . arch  == "x86"  { 
121124                    ( 
122125                        LlvmArchiveBuilder :: i686_decorated_name ( import,  mingw_gnu_toolchain) , 
123126                        import. ordinal , 
@@ -134,8 +137,7 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
134137            // that loaded but crashed with an AV upon calling one of the imported 
135138            // functions.  Therefore, use binutils to create the import library instead, 
136139            // by writing a .DEF file to the temp dir and calling binutils's dlltool. 
137-             let  def_file_path =
138-                 tmpdir. as_ref ( ) . join ( format ! ( "{}_imports" ,  lib_name) ) . with_extension ( "def" ) ; 
140+             let  def_file_path = tmpdir. join ( format ! ( "{}_imports" ,  lib_name) ) . with_extension ( "def" ) ; 
139141
140142            let  def_file_content = format ! ( 
141143                "EXPORTS\n {}" , 
@@ -154,11 +156,11 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
154156            match  std:: fs:: write ( & def_file_path,  def_file_content)  { 
155157                Ok ( _)  => { } 
156158                Err ( e)  => { 
157-                     self . sess . fatal ( & format ! ( "Error writing .DEF file: {}" ,  e) ) ; 
159+                     sess. fatal ( & format ! ( "Error writing .DEF file: {}" ,  e) ) ; 
158160                } 
159161            } ; 
160162
161-             let  dlltool = find_binutils_dlltool ( self . sess ) ; 
163+             let  dlltool = find_binutils_dlltool ( sess) ; 
162164            let  result = std:: process:: Command :: new ( dlltool) 
163165                . args ( [ 
164166                    "-d" , 
@@ -172,9 +174,9 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
172174
173175            match  result { 
174176                Err ( e)  => { 
175-                     self . sess . fatal ( & format ! ( "Error calling dlltool: {}" ,  e) ) ; 
177+                     sess. fatal ( & format ! ( "Error calling dlltool: {}" ,  e) ) ; 
176178                } 
177-                 Ok ( output)  if  !output. status . success ( )  => self . sess . fatal ( & format ! ( 
179+                 Ok ( output)  if  !output. status . success ( )  => sess. fatal ( & format ! ( 
178180                    "Dlltool could not create import library: {}\n {}" , 
179181                    String :: from_utf8_lossy( & output. stdout) , 
180182                    String :: from_utf8_lossy( & output. stderr) 
@@ -220,27 +222,21 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
220222                    output_path_z. as_ptr ( ) , 
221223                    ffi_exports. as_ptr ( ) , 
222224                    ffi_exports. len ( ) , 
223-                     llvm_machine_type ( & self . sess . target . arch )  as  u16 , 
224-                     !self . sess . target . is_like_msvc , 
225+                     llvm_machine_type ( & sess. target . arch )  as  u16 , 
226+                     !sess. target . is_like_msvc , 
225227                ) 
226228            } ; 
227229
228230            if  result == crate :: llvm:: LLVMRustResult :: Failure  { 
229-                 self . sess . fatal ( & format ! ( 
231+                 sess. fatal ( & format ! ( 
230232                    "Error creating import library for {}: {}" , 
231233                    lib_name, 
232234                    llvm:: last_error( ) . unwrap_or( "unknown LLVM error" . to_string( ) ) 
233235                ) ) ; 
234236            } 
235237        } ; 
236238
237-         self . add_archive ( & output_path,  |_| false ) . unwrap_or_else ( |e| { 
238-             self . sess . fatal ( & format ! ( 
239-                 "failed to add native library {}: {}" , 
240-                 output_path. display( ) , 
241-                 e
242-             ) ) ; 
243-         } ) ; 
239+         output_path
244240    } 
245241} 
246242
0 commit comments