@@ -137,17 +137,18 @@ pub fn generate_wrapper(callbacks: CompilerCallbacks) -> std::io::Result<Compile
137137 generate_class_wrapper_for_package ( & callbacks. classes . iter ( ) . collect ( ) ) ;
138138 content. push_str ( & class_wrapper) ;
139139
140- let source_dir = path. parent ( ) . expect ( "input path has no parent" ) ;
140+ // use temp_dir instead.
141+ let temp_dir = std:: env:: temp_dir ( ) ;
141142
142143 // create metacall_class file
143144 // println!("create: {:?}", source_dir.join("metacall_class.rs"));
144- let mut class_file = File :: create ( source_dir . join ( "metacall_class.rs" ) ) ?;
145+ let mut class_file = File :: create ( temp_dir . join ( "metacall_class.rs" ) ) ?;
145146 let bytes = include_bytes ! ( "class.rs" ) ;
146147 class_file. write_all ( bytes) ?;
147148 // println!("open: {:?}", source_dir.join("metacall_wrapped_package.rs"));
148149 let mut wrapper_file = std:: fs:: OpenOptions :: new ( )
149150 . append ( true )
150- . open ( source_dir . join ( "metacall_wrapped_package.rs" ) ) ?;
151+ . open ( temp_dir . join ( "metacall_wrapped_package.rs" ) ) ?;
151152 // include class module
152153 wrapper_file. write_all ( b"mod metacall_class;\n use metacall_class::*;\n " ) ?;
153154 wrapper_file. write_all ( content. as_bytes ( ) ) ?;
@@ -172,29 +173,30 @@ pub fn generate_wrapper(callbacks: CompilerCallbacks) -> std::io::Result<Compile
172173
173174 match callbacks. source . input . 0 {
174175 Input :: File ( input_path) => {
176+ let temp_dir = std:: env:: temp_dir ( ) ;
175177 // generate wrappers to a file source_wrapper.rs
176- let mut source_path = input_path. clone ( ) ;
177- let source_file = source_path
178+ let source_file = input_path
178179 . file_name ( )
179180 . expect ( "not a file" )
180181 . to_str ( )
181182 . expect ( "Unable to cast OsStr to str" )
182183 . to_owned ( ) ;
183- let _ = source_path. pop ( ) ;
184184
185185 // create metacall_class file
186- let mut class_file = File :: create ( source_path . join ( "metacall_class.rs" ) ) ?;
186+ let mut class_file = File :: create ( temp_dir . join ( "metacall_class.rs" ) ) ?;
187187 let bytes = include_bytes ! ( "class.rs" ) ;
188188 class_file. write_all ( bytes) ?;
189189
190- source_path . push ( "wrapped_" . to_owned ( ) + & source_file ) ;
191- let mut wrapper_file = File :: create ( & source_path ) ?;
190+ let mut wrapper_file =
191+ File :: create ( & temp_dir . join ( "wrapped_" . to_owned ( ) + & source_file ) ) ?;
192192 // include class module
193193 wrapper_file. write_all ( b"mod metacall_class;\n use metacall_class::*;\n " ) ?;
194194 wrapper_file. write_all ( content. as_bytes ( ) ) ?;
195- let dst = format ! ( "include!({:?});" , callbacks. source. input_path. clone ( ) ) ;
195+ let dst = format ! ( "include!({:?});" , callbacks. source. input_path) ;
196196 wrapper_file. write_all ( dst. as_bytes ( ) ) ?;
197- let mut source = Source :: new ( Source :: File { path : source_path } ) ;
197+ let mut source = Source :: new ( Source :: File {
198+ path : temp_dir. join ( "wrapped_" . to_owned ( ) + & source_file) ,
199+ } ) ;
198200 source. output = callbacks. source . output ;
199201 // construct new callback
200202 Ok ( CompilerCallbacks {
0 commit comments