1616// under the License.
1717
1818use crate :: config:: OS :: { LINUX , MACOS , WINDOWS } ;
19- use crate :: REQUEST_TIMEOUT_SEC ;
2019use crate :: TTL_BROWSERS_SEC ;
2120use crate :: TTL_DRIVERS_SEC ;
2221
23- use std:: env:: consts:: { ARCH , OS } ;
22+ use crate :: {
23+ format_one_arg, run_shell_command, ENV_PROCESSOR_ARCHITECTURE , REQUEST_TIMEOUT_SEC ,
24+ UNAME_COMMAND ,
25+ } ;
26+ use std:: env;
27+ use std:: env:: consts:: { OS } ;
28+
29+ pub const ARM64_ARCH : & str = "arm64" ;
2430
2531pub struct ManagerConfig {
2632 pub browser_version : String ,
@@ -36,11 +42,27 @@ pub struct ManagerConfig {
3642
3743impl ManagerConfig {
3844 pub fn default ( ) -> ManagerConfig {
45+ let self_os = OS ;
46+ let self_arch = if WINDOWS . is ( self_os) {
47+ env:: var ( ENV_PROCESSOR_ARCHITECTURE ) . unwrap_or_default ( )
48+ } else {
49+ let uname_a = format_one_arg ( UNAME_COMMAND , "a" ) ;
50+ if run_shell_command ( self_os, uname_a)
51+ . unwrap_or_default ( )
52+ . to_ascii_lowercase ( )
53+ . contains ( ARM64_ARCH )
54+ {
55+ ARM64_ARCH . to_string ( )
56+ } else {
57+ let uname_m = format_one_arg ( UNAME_COMMAND , "m" ) ;
58+ run_shell_command ( self_os, uname_m) . unwrap_or_default ( )
59+ }
60+ } ;
3961 ManagerConfig {
4062 browser_version : "" . to_string ( ) ,
4163 driver_version : "" . to_string ( ) ,
42- os : OS . to_string ( ) ,
43- arch : ARCH . to_string ( ) ,
64+ os : self_os . to_string ( ) ,
65+ arch : self_arch ,
4466 browser_path : "" . to_string ( ) ,
4567 proxy : "" . to_string ( ) ,
4668 timeout : REQUEST_TIMEOUT_SEC ,
@@ -107,15 +129,16 @@ pub enum ARCH {
107129}
108130
109131impl ARCH {
110- pub fn to_str ( & self ) -> & str {
132+ pub fn to_str_vector ( & self ) -> Vec < & str > {
111133 match self {
112- ARCH :: X32 => "x86" ,
113- ARCH :: X64 => "x86_64" ,
114- ARCH :: ARM64 => "aarch64" ,
134+ ARCH :: X32 => vec ! [ "x86" , "i386" ] ,
135+ ARCH :: X64 => vec ! [ "x86_64" , "x64" , "i686" , "amd64" , "ia64" ] ,
136+ ARCH :: ARM64 => vec ! [ ARM64_ARCH , "aarch64" , "arm" ] ,
115137 }
116138 }
117139
118140 pub fn is ( & self , arch : & str ) -> bool {
119- self . to_str ( ) . eq_ignore_ascii_case ( arch)
141+ self . to_str_vector ( )
142+ . contains ( & arch. to_ascii_lowercase ( ) . as_str ( ) )
120143 }
121144}
0 commit comments