@@ -7,6 +7,7 @@ use std::string::String;
77// need to know all the possible cfgs that this script will set. If you need to set another cfg 
88// make sure to add it to this list as well. 
99const  ALLOWED_CFGS :  & ' static  [ & ' static  str ]  = & [ 
10+     "emscripten_new_stat_abi" , 
1011    "freebsd10" , 
1112    "freebsd11" , 
1213    "freebsd12" , 
@@ -69,6 +70,18 @@ fn main() {
6970        Some ( _)  | None  => set_cfg ( "freebsd11" ) , 
7071    } 
7172
73+     match  emcc_version ( )  { 
74+         Some ( ( major,  minor,  patch) ) 
75+             if  ( major > 3 ) 
76+                 || ( major == 3  && minor > 1 ) 
77+                 || ( major == 3  && minor == 1  && patch >= 42 )  =>
78+         { 
79+             set_cfg ( "emscripten_new_stat_abi" ) 
80+         } 
81+         // Non-Emscripten or version < 3.1.42. 
82+         Some ( _)  | None  => ( ) , 
83+     } 
84+ 
7285    // On CI: deny all warnings 
7386    if  libc_ci { 
7487        set_cfg ( "libc_deny_warnings" ) ; 
@@ -238,6 +251,33 @@ fn which_freebsd() -> Option<i32> {
238251    } 
239252} 
240253
254+ fn  emcc_version ( )  -> Option < ( u32 ,  u32 ,  u32 ) >  { 
255+     let  output = std:: process:: Command :: new ( "emcc" ) 
256+         . arg ( "-dumpversion" ) 
257+         . output ( ) 
258+         . ok ( ) ; 
259+     if  output. is_none ( )  { 
260+         return  None ; 
261+     } 
262+     let  output = output. unwrap ( ) ; 
263+     if  !output. status . success ( )  { 
264+         return  None ; 
265+     } 
266+ 
267+     let  stdout = String :: from_utf8 ( output. stdout ) . ok ( ) ; 
268+     if  stdout. is_none ( )  { 
269+         return  None ; 
270+     } 
271+     let  version = stdout. unwrap ( ) ; 
272+     let  mut  pieces = version. trim ( ) . split ( '.' ) ; 
273+ 
274+     let  major = pieces. next ( ) ?. parse ( ) . unwrap ( ) ; 
275+     let  minor = pieces. next ( ) ?. parse ( ) . unwrap ( ) ; 
276+     let  patch = pieces. next ( ) ?. parse ( ) . unwrap ( ) ; 
277+ 
278+     Some ( ( major,  minor,  patch) ) 
279+ } 
280+ 
241281fn  set_cfg ( cfg :  & str )  { 
242282    if  !ALLOWED_CFGS . contains ( & cfg)  { 
243283        panic ! ( "trying to set cfg {}, but it is not in ALLOWED_CFGS" ,  cfg) ; 
0 commit comments