1
+ pub mod run;
2
+ pub mod rustc;
3
+ pub mod rustdoc;
4
+
1
5
use std:: env;
2
- use std:: path:: { Path , PathBuf } ;
3
- use std:: process:: { Command , Output } ;
6
+ use std:: path:: PathBuf ;
7
+ use std:: process:: Output ;
4
8
5
9
pub use object;
6
10
pub use wasmparser;
7
11
8
- pub fn out_dir ( ) -> PathBuf {
9
- env :: var_os ( "TMPDIR" ) . unwrap ( ) . into ( )
10
- }
12
+ pub use run :: { run , run_fail } ;
13
+ pub use rustc :: { aux_build , rustc , Rustc } ;
14
+ pub use rustdoc :: { bare_rustdoc , rustdoc , Rustdoc } ;
11
15
12
- fn setup_common_build_cmd ( command : & str ) -> Command {
13
- let rustc = env:: var ( command) . unwrap ( ) ;
14
- let mut cmd = Command :: new ( rustc) ;
15
- cmd. arg ( "--out-dir" ) . arg ( out_dir ( ) ) . arg ( "-L" ) . arg ( out_dir ( ) ) ;
16
- cmd
16
+ /// Path of `TMPDIR` (a temporary build directory, not under `/tmp`).
17
+ pub fn tmp_dir ( ) -> PathBuf {
18
+ env:: var_os ( "TMPDIR" ) . unwrap ( ) . into ( )
17
19
}
18
20
19
21
fn handle_failed_output ( cmd : & str , output : Output , caller_line_number : u32 ) -> ! {
@@ -24,170 +26,3 @@ fn handle_failed_output(cmd: &str, output: Output, caller_line_number: u32) -> !
24
26
eprintln ! ( "=== STDERR ===\n {}\n \n " , String :: from_utf8( output. stderr) . unwrap( ) ) ;
25
27
std:: process:: exit ( 1 )
26
28
}
27
-
28
- pub fn rustc ( ) -> RustcInvocationBuilder {
29
- RustcInvocationBuilder :: new ( )
30
- }
31
-
32
- pub fn aux_build ( ) -> AuxBuildInvocationBuilder {
33
- AuxBuildInvocationBuilder :: new ( )
34
- }
35
-
36
- pub fn rustdoc ( ) -> Rustdoc {
37
- Rustdoc :: new ( )
38
- }
39
-
40
- #[ derive( Debug ) ]
41
- pub struct RustcInvocationBuilder {
42
- cmd : Command ,
43
- }
44
-
45
- impl RustcInvocationBuilder {
46
- fn new ( ) -> Self {
47
- let cmd = setup_common_build_cmd ( "RUSTC" ) ;
48
- Self { cmd }
49
- }
50
-
51
- pub fn arg ( & mut self , arg : & str ) -> & mut RustcInvocationBuilder {
52
- self . cmd . arg ( arg) ;
53
- self
54
- }
55
-
56
- pub fn args ( & mut self , args : & [ & str ] ) -> & mut RustcInvocationBuilder {
57
- self . cmd . args ( args) ;
58
- self
59
- }
60
-
61
- #[ track_caller]
62
- pub fn run ( & mut self ) -> Output {
63
- let caller_location = std:: panic:: Location :: caller ( ) ;
64
- let caller_line_number = caller_location. line ( ) ;
65
-
66
- let output = self . cmd . output ( ) . unwrap ( ) ;
67
- if !output. status . success ( ) {
68
- handle_failed_output ( & format ! ( "{:#?}" , self . cmd) , output, caller_line_number) ;
69
- }
70
- output
71
- }
72
- }
73
-
74
- #[ derive( Debug ) ]
75
- pub struct AuxBuildInvocationBuilder {
76
- cmd : Command ,
77
- }
78
-
79
- impl AuxBuildInvocationBuilder {
80
- fn new ( ) -> Self {
81
- let mut cmd = setup_common_build_cmd ( "RUSTC" ) ;
82
- cmd. arg ( "--crate-type=lib" ) ;
83
- Self { cmd }
84
- }
85
-
86
- pub fn arg ( & mut self , arg : & str ) -> & mut AuxBuildInvocationBuilder {
87
- self . cmd . arg ( arg) ;
88
- self
89
- }
90
-
91
- #[ track_caller]
92
- pub fn run ( & mut self ) -> Output {
93
- let caller_location = std:: panic:: Location :: caller ( ) ;
94
- let caller_line_number = caller_location. line ( ) ;
95
-
96
- let output = self . cmd . output ( ) . unwrap ( ) ;
97
- if !output. status . success ( ) {
98
- handle_failed_output ( & format ! ( "{:#?}" , self . cmd) , output, caller_line_number) ;
99
- }
100
- output
101
- }
102
- }
103
-
104
- #[ derive( Debug ) ]
105
- pub struct Rustdoc {
106
- cmd : Command ,
107
- }
108
-
109
- impl Rustdoc {
110
- fn new ( ) -> Self {
111
- let cmd = setup_common_build_cmd ( "RUSTDOC" ) ;
112
- Self { cmd }
113
- }
114
-
115
- pub fn arg ( & mut self , arg : & str ) -> & mut Self {
116
- self . cmd . arg ( arg) ;
117
- self
118
- }
119
-
120
- #[ track_caller]
121
- pub fn run ( & mut self ) -> Output {
122
- let caller_location = std:: panic:: Location :: caller ( ) ;
123
- let caller_line_number = caller_location. line ( ) ;
124
-
125
- let output = self . cmd . output ( ) . unwrap ( ) ;
126
- if !output. status . success ( ) {
127
- handle_failed_output ( & format ! ( "{:#?}" , self . cmd) , output, caller_line_number) ;
128
- }
129
- output
130
- }
131
- }
132
-
133
- fn run_common ( bin_name : & str ) -> ( Command , Output ) {
134
- let target = env:: var ( "TARGET" ) . unwrap ( ) ;
135
-
136
- let bin_name =
137
- if target. contains ( "windows" ) { format ! ( "{}.exe" , bin_name) } else { bin_name. to_owned ( ) } ;
138
-
139
- let mut bin_path = PathBuf :: new ( ) ;
140
- bin_path. push ( env:: var ( "TMPDIR" ) . unwrap ( ) ) ;
141
- bin_path. push ( & bin_name) ;
142
- let ld_lib_path_envvar = env:: var ( "LD_LIB_PATH_ENVVAR" ) . unwrap ( ) ;
143
- let mut cmd = Command :: new ( bin_path) ;
144
- cmd. env ( & ld_lib_path_envvar, {
145
- let mut paths = vec ! [ ] ;
146
- paths. push ( PathBuf :: from ( env:: var ( "TMPDIR" ) . unwrap ( ) ) ) ;
147
- for p in env:: split_paths ( & env:: var ( "TARGET_RPATH_ENV" ) . unwrap ( ) ) {
148
- paths. push ( p. to_path_buf ( ) ) ;
149
- }
150
- for p in env:: split_paths ( & env:: var ( & ld_lib_path_envvar) . unwrap ( ) ) {
151
- paths. push ( p. to_path_buf ( ) ) ;
152
- }
153
- env:: join_paths ( paths. iter ( ) ) . unwrap ( )
154
- } ) ;
155
-
156
- if target. contains ( "windows" ) {
157
- let mut paths = vec ! [ ] ;
158
- for p in env:: split_paths ( & std:: env:: var ( "PATH" ) . unwrap_or ( String :: new ( ) ) ) {
159
- paths. push ( p. to_path_buf ( ) ) ;
160
- }
161
- paths. push ( Path :: new ( & std:: env:: var ( "TARGET_RPATH_DIR" ) . unwrap ( ) ) . to_path_buf ( ) ) ;
162
- cmd. env ( "PATH" , env:: join_paths ( paths. iter ( ) ) . unwrap ( ) ) ;
163
- }
164
-
165
- let output = cmd. output ( ) . unwrap ( ) ;
166
- ( cmd, output)
167
- }
168
-
169
- /// Run a built binary and make sure it succeeds.
170
- #[ track_caller]
171
- pub fn run ( bin_name : & str ) -> Output {
172
- let caller_location = std:: panic:: Location :: caller ( ) ;
173
- let caller_line_number = caller_location. line ( ) ;
174
-
175
- let ( cmd, output) = run_common ( bin_name) ;
176
- if !output. status . success ( ) {
177
- handle_failed_output ( & format ! ( "{:#?}" , cmd) , output, caller_line_number) ;
178
- }
179
- output
180
- }
181
-
182
- /// Run a built binary and make sure it fails.
183
- #[ track_caller]
184
- pub fn run_fail ( bin_name : & str ) -> Output {
185
- let caller_location = std:: panic:: Location :: caller ( ) ;
186
- let caller_line_number = caller_location. line ( ) ;
187
-
188
- let ( cmd, output) = run_common ( bin_name) ;
189
- if output. status . success ( ) {
190
- handle_failed_output ( & format ! ( "{:#?}" , cmd) , output, caller_line_number) ;
191
- }
192
- output
193
- }
0 commit comments