|  | 
| 1 | 1 | extern crate cc; | 
| 2 | 2 | 
 | 
| 3 | 3 | use std::env; | 
| 4 |  | -use std::ffi::OsStr; | 
|  | 4 | +use std::ffi::{OsStr, OsString}; | 
| 5 | 5 | use std::fs; | 
| 6 | 6 | use std::path::{Path, PathBuf}; | 
| 7 | 7 | use std::process::Command; | 
| @@ -330,19 +330,13 @@ impl Build { | 
| 330 | 330 |                 // On some platforms (like emscripten on windows), the ar to use may not be a | 
| 331 | 331 |                 // single binary, but instead a multi-argument command like `cmd /c emar.bar`. | 
| 332 | 332 |                 // We can't convey that through `AR` alone, and so also need to set ARFLAGS. | 
| 333 |  | -                configure.env( | 
| 334 |  | -                    "ARFLAGS", | 
| 335 |  | -                    ar.get_args().collect::<Vec<_>>().join(OsStr::new(" ")), | 
| 336 |  | -                ); | 
|  | 333 | +                configure.env("ARFLAGS", join_args(ar.get_args())); | 
| 337 | 334 |             } | 
| 338 | 335 |             let ranlib = cc.get_ranlib(); | 
| 339 | 336 |             configure.env("RANLIB", ranlib.get_program()); | 
| 340 | 337 |             if ranlib.get_args().count() == 0 { | 
| 341 | 338 |                 // Same thing as for AR -- we may need to set RANLIBFLAGS | 
| 342 |  | -                configure.env( | 
| 343 |  | -                    "RANLIBFLAGS", | 
| 344 |  | -                    ranlib.get_args().collect::<Vec<_>>().join(OsStr::new(" ")), | 
| 345 |  | -                ); | 
|  | 339 | +                configure.env("RANLIBFLAGS", join_args(ranlib.get_args())); | 
| 346 | 340 |             } | 
| 347 | 341 | 
 | 
| 348 | 342 |             // Make sure we pass extra flags like `-ffunction-sections` and | 
| @@ -566,6 +560,17 @@ fn apply_patches_musl(target: &str, inner: &Path) { | 
| 566 | 560 |     fs::write(path, buf).unwrap(); | 
| 567 | 561 | } | 
| 568 | 562 | 
 | 
|  | 563 | +fn join_args<'a>(args: impl Iterator<Item = &'a OsStr>) -> OsString { | 
|  | 564 | +    let mut output = OsString::new(); | 
|  | 565 | +    for arg in args { | 
|  | 566 | +        if output.is_empty() { | 
|  | 567 | +            output.push(" "); | 
|  | 568 | +        } | 
|  | 569 | +        output.push(arg); | 
|  | 570 | +    } | 
|  | 571 | +    output | 
|  | 572 | +} | 
|  | 573 | + | 
| 569 | 574 | fn sanitize_sh(path: &Path) -> String { | 
| 570 | 575 |     if !cfg!(windows) { | 
| 571 | 576 |         return path.to_str().unwrap().to_string(); | 
|  | 
0 commit comments