File tree Expand file tree Collapse file tree
compiler/rustc_codegen_ssa/src/back
ui/linkage-attr/raw-dylib/windows Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -217,12 +217,10 @@ fn create_mingw_dll_import_lib(
217217 // able to control the *exact* spelling of each of the symbols that are being imported:
218218 // hence we don't want `dlltool` adding leading underscores automatically.
219219 let dlltool = find_binutils_dlltool ( sess) ;
220- let temp_prefix = {
221- let mut path = PathBuf :: from ( & output_path) ;
222- path. pop ( ) ;
223- path. push ( lib_name) ;
224- path
225- } ;
220+ // temp_prefix doesn't handle paths with spaces so
221+ // use a relative path and set the current working directory
222+ let cwd = output_path. parent ( ) . unwrap_or ( output_path) ;
223+ let temp_prefix = lib_name;
226224 // dlltool target architecture args from:
227225 // https://github.com/llvm/llvm-project-release-prs/blob/llvmorg-15.0.6/llvm/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp#L69
228226 let ( dlltool_target_arch, dlltool_target_bitness) = match & sess. target . arch {
@@ -246,7 +244,8 @@ fn create_mingw_dll_import_lib(
246244 . arg ( dlltool_target_bitness)
247245 . arg ( "--no-leading-underscore" )
248246 . arg ( "--temp-prefix" )
249- . arg ( temp_prefix) ;
247+ . arg ( temp_prefix)
248+ . current_dir ( cwd) ;
250249
251250 match dlltool_cmd. output ( ) {
252251 Err ( e) => {
Original file line number Diff line number Diff line change 1- echo Called dlltool via script.cmd> actual.txt
1+ echo Called dlltool via script.cmd> %~dp0 \ actual.txt
22dlltool.exe %*
Original file line number Diff line number Diff line change 1+ type BOOL = i32 ;
2+
3+ #[ cfg_attr(
4+ target_arch = "x86" ,
5+ link( name = "bcryptprimitives" , kind = "raw-dylib" , import_name_type = "undecorated" )
6+ ) ]
7+ #[ cfg_attr( not( target_arch = "x86" ) , link( name = "bcryptprimitives" , kind = "raw-dylib" ) ) ]
8+ extern "system" {
9+ fn ProcessPrng ( pbdata : * mut u8 , cbdata : usize ) -> BOOL ;
10+ }
11+
12+ fn main ( ) {
13+ let mut num: u8 = 0 ;
14+ unsafe {
15+ ProcessPrng ( & mut num, 1 ) ;
16+ }
17+ println ! ( "{num}" ) ;
18+ }
Original file line number Diff line number Diff line change 1+ // Ensure that raw-dylib still works if the output directory contains spaces.
2+
3+ //@ only-windows-gnu
4+ //@ ignore-cross-compile
5+ //@ needs-dlltool
6+ // Reason: this test specifically checks the dlltool feature,
7+ // which is only used on windows-gnu.
8+
9+ use run_make_support:: { rfs, rustc} ;
10+
11+ fn main ( ) {
12+ let out_dir = std:: path:: absolute ( "path with spaces" ) . unwrap ( ) ;
13+ rfs:: create_dir_all ( & out_dir) ;
14+ rustc ( ) . crate_type ( "bin" ) . input ( "main.rs" ) . out_dir ( & out_dir) . env ( "TMP" , & out_dir) . run ( ) ;
15+ }
Original file line number Diff line number Diff line change 77//@ normalize-stderr: "[^ ]*/foo.dll_imports.lib" -> "$$LIB_FILE"
88//@ normalize-stderr: "-m [^ ]*" -> "$$TARGET_MACHINE"
99//@ normalize-stderr: "-f [^ ]*" -> "$$ASM_FLAGS"
10- //@ normalize-stderr: "--temp-prefix [^ ]*/foo.dll" -> "$$TEMP_PREFIX"
1110#[ link( name = "foo" , kind = "raw-dylib" ) ]
1211extern "C" {
1312 // `@1` is an invalid name to export, as it usually indicates that something
Original file line number Diff line number Diff line change 1- error: dlltool could not create import library with $DLLTOOL -d $DEF_FILE -D foo.dll -l $LIB_FILE $TARGET_MACHINE $ASM_FLAGS --no-leading-underscore $TEMP_PREFIX :
1+ error: dlltool could not create import library with $DLLTOOL -d $DEF_FILE -D foo.dll -l $LIB_FILE $TARGET_MACHINE $ASM_FLAGS --no-leading-underscore --temp-prefix foo.dll :
22
33 $DLLTOOL: Syntax error in def file $DEF_FILE:1␍
44
You can’t perform that action at this time.
0 commit comments