@@ -3,34 +3,28 @@ use std::env;
3
3
use std:: os:: unix:: process:: CommandExt ;
4
4
use std:: process:: Command ;
5
5
6
+ include ! ( "../build_system/shared_utils.rs" ) ;
7
+
6
8
fn main ( ) {
7
9
let current_exe = env:: current_exe ( ) . unwrap ( ) ;
8
10
let mut sysroot = current_exe. parent ( ) . unwrap ( ) ;
9
11
if sysroot. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) == "bin" {
10
12
sysroot = sysroot. parent ( ) . unwrap ( ) ;
11
13
}
12
14
13
- let mut rustflags = String :: new ( ) ;
14
- rustflags. push_str ( " -Cpanic=abort -Zpanic-abort-tests -Zcodegen-backend=" ) ;
15
+ let mut rustflags = vec ! [ "-Cpanic=abort" . to_owned( ) , "-Zpanic-abort-tests" . to_owned( ) ] ;
15
16
if let Some ( name) = option_env ! ( "BUILTIN_BACKEND" ) {
16
- rustflags. push_str ( name) ;
17
+ rustflags. push ( format ! ( "-Zcodegen-backend={ name}" ) ) ;
17
18
} else {
18
- rustflags. push_str (
19
- sysroot
20
- . join ( if cfg ! ( windows) { "bin" } else { "lib" } )
21
- . join (
22
- env:: consts:: DLL_PREFIX . to_string ( )
23
- + "rustc_codegen_cranelift"
24
- + env:: consts:: DLL_SUFFIX ,
25
- )
26
- . to_str ( )
27
- . unwrap ( ) ,
19
+ let dylib = sysroot. join ( if cfg ! ( windows) { "bin" } else { "lib" } ) . join (
20
+ env:: consts:: DLL_PREFIX . to_string ( )
21
+ + "rustc_codegen_cranelift"
22
+ + env:: consts:: DLL_SUFFIX ,
28
23
) ;
24
+ rustflags. push ( format ! ( "-Zcodegen-backend={}" , dylib. to_str( ) . unwrap( ) ) ) ;
29
25
}
30
- rustflags. push_str ( " --sysroot " ) ;
31
- rustflags. push_str ( sysroot. to_str ( ) . unwrap ( ) ) ;
32
- env:: set_var ( "RUSTFLAGS" , env:: var ( "RUSTFLAGS" ) . unwrap_or ( String :: new ( ) ) + & rustflags) ;
33
- env:: set_var ( "RUSTDOCFLAGS" , env:: var ( "RUSTDOCFLAGS" ) . unwrap_or ( String :: new ( ) ) + & rustflags) ;
26
+ rustflags. push ( "--sysroot" . to_owned ( ) ) ;
27
+ rustflags. push ( sysroot. to_str ( ) . unwrap ( ) . to_owned ( ) ) ;
34
28
35
29
let cargo = if let Some ( cargo) = option_env ! ( "CARGO" ) {
36
30
cargo
@@ -49,10 +43,7 @@ fn main() {
49
43
50
44
let args: Vec < _ > = match args. get ( 0 ) . map ( |arg| & * * arg) {
51
45
Some ( "jit" ) => {
52
- env:: set_var (
53
- "RUSTFLAGS" ,
54
- env:: var ( "RUSTFLAGS" ) . unwrap_or ( String :: new ( ) ) + " -Cprefer-dynamic" ,
55
- ) ;
46
+ rustflags. push ( "-Cprefer-dynamic" . to_owned ( ) ) ;
56
47
args. remove ( 0 ) ;
57
48
IntoIterator :: into_iter ( [ "rustc" . to_string ( ) ] )
58
49
. chain ( args)
@@ -64,10 +55,7 @@ fn main() {
64
55
. collect ( )
65
56
}
66
57
Some ( "lazy-jit" ) => {
67
- env:: set_var (
68
- "RUSTFLAGS" ,
69
- env:: var ( "RUSTFLAGS" ) . unwrap_or ( String :: new ( ) ) + " -Cprefer-dynamic" ,
70
- ) ;
58
+ rustflags. push ( "-Cprefer-dynamic" . to_owned ( ) ) ;
71
59
args. remove ( 0 ) ;
72
60
IntoIterator :: into_iter ( [ "rustc" . to_string ( ) ] )
73
61
. chain ( args)
@@ -81,11 +69,28 @@ fn main() {
81
69
_ => args,
82
70
} ;
83
71
72
+ let mut cmd = Command :: new ( cargo) ;
73
+ cmd. args ( args) ;
74
+ rustflags_to_cmd_env (
75
+ & mut cmd,
76
+ "RUSTFLAGS" ,
77
+ & rustflags_from_env ( "RUSTFLAGS" )
78
+ . into_iter ( )
79
+ . chain ( rustflags. iter ( ) . map ( |flag| flag. clone ( ) ) )
80
+ . collect :: < Vec < _ > > ( ) ,
81
+ ) ;
82
+ rustflags_to_cmd_env (
83
+ & mut cmd,
84
+ "RUSTDOCFLAGS" ,
85
+ & rustflags_from_env ( "RUSTDOCFLAGS" )
86
+ . into_iter ( )
87
+ . chain ( rustflags. iter ( ) . map ( |flag| flag. clone ( ) ) )
88
+ . collect :: < Vec < _ > > ( ) ,
89
+ ) ;
90
+
84
91
#[ cfg( unix) ]
85
- panic ! ( "Failed to spawn cargo: {}" , Command :: new ( cargo ) . args ( args ) . exec( ) ) ;
92
+ panic ! ( "Failed to spawn cargo: {}" , cmd . exec( ) ) ;
86
93
87
94
#[ cfg( not( unix) ) ]
88
- std:: process:: exit (
89
- Command :: new ( cargo) . args ( args) . spawn ( ) . unwrap ( ) . wait ( ) . unwrap ( ) . code ( ) . unwrap_or ( 1 ) ,
90
- ) ;
95
+ std:: process:: exit ( cmd. spawn ( ) . unwrap ( ) . wait ( ) . unwrap ( ) . code ( ) . unwrap_or ( 1 ) ) ;
91
96
}
0 commit comments