@@ -83,21 +83,36 @@ fn main() {
83
83
}
84
84
}
85
85
86
- fn find_make ( ) -> OsString {
87
- if let Some ( make) = env:: var_os ( "MAKE" ) {
88
- make
89
- } else {
90
- match Command :: new ( "gmake" ) . status ( ) {
91
- Ok ( gmake) => {
92
- if gmake. success ( ) {
93
- OsStr :: new ( "gmake" ) . to_os_string ( )
86
+ fn find_make ( ) -> Option < OsString > {
87
+ fn check_make ( name : & OsStr ) -> bool {
88
+ let mut cmd = Command :: new ( name) ;
89
+ cmd. arg ( "--version" ) ;
90
+ cmd. status ( ) . map ( |status| status. success ( ) ) . unwrap_or ( false )
91
+ }
92
+
93
+ env:: var_os ( "MAKE" ) . or_else ( || {
94
+ let gmake = OsString :: from ( "gmake" ) ;
95
+ let make = OsString :: from ( "make" ) ;
96
+ if check_make ( & gmake) {
97
+ Some ( gmake)
98
+ } else if check_make ( & make) {
99
+ Some ( make)
100
+ } else {
101
+ #[ cfg( windows) ]
102
+ {
103
+ let mozmake = OsString :: from ( "mozmake" ) ;
104
+ if check_make ( & mozmake) {
105
+ Some ( mozmake)
94
106
} else {
95
- OsStr :: new ( "make" ) . to_os_string ( )
107
+ None
96
108
}
97
109
}
98
- Err ( _) => OsStr :: new ( "make" ) . to_os_string ( ) ,
110
+ #[ cfg( unix) ]
111
+ {
112
+ None
113
+ }
99
114
}
100
- }
115
+ } )
101
116
}
102
117
103
118
#[ cfg( windows) ]
@@ -206,15 +221,18 @@ fn build_jsapi(build_dir: &Path) {
206
221
let new_path = env:: join_paths ( paths) . unwrap ( ) ;
207
222
env:: set_var ( "PATH" , & new_path) ;
208
223
209
- // Install mozmake if not installed
210
- if !mozbuild_dir. join ( "MOZMAKE_LOCK" ) . exists ( ) {
211
- install_mozmake ( & mozbuild_dir) ;
212
- }
224
+ if make. is_none ( ) {
225
+ // Install mozmake if not installed
226
+ if !mozbuild_dir. join ( "MOZMAKE_LOCK" ) . exists ( ) {
227
+ install_mozmake ( & mozbuild_dir) ;
228
+ }
213
229
214
- make = OsString :: from ( "mozmake" ) ;
230
+ make = Some ( OsString :: from ( "mozmake" ) ) ;
231
+ }
215
232
}
216
233
}
217
234
235
+ let make = make. expect ( "Install `make` or `gmake`" ) ;
218
236
let mut cmd = Command :: new ( make) ;
219
237
220
238
let encoding_c_mem_include_dir = env:: var ( "DEP_ENCODING_C_MEM_INCLUDE_DIR" ) . unwrap ( ) ;
0 commit comments