1+ pub mod run;
2+ pub mod rustc;
3+ pub mod rustdoc;
4+
15use std:: env;
2- use std:: path:: { Path , PathBuf } ;
3- use std:: process:: { Command , Output } ;
6+ use std:: path:: PathBuf ;
7+ use std:: process:: Output ;
48
59pub use object;
610pub use wasmparser;
711
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 } ;
1115
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 ( )
1719}
1820
1921fn 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) -> !
2426 eprintln ! ( "=== STDERR ===\n {}\n \n " , String :: from_utf8( output. stderr) . unwrap( ) ) ;
2527 std:: process:: exit ( 1 )
2628}
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