diff --git a/openssl-sys/build/find_normal.rs b/openssl-sys/build/find_normal.rs index 3a09aea3ebce077225de18eb1f6f9baa6f32c5df..4e492e7d16ebbe5182f8be2028861fb834900b9f 100644 --- a/openssl-sys/build/find_normal.rs +++ b/openssl-sys/build/find_normal.rs @@ -21,34 +21,53 @@ pub fn get_openssl(target: &str) -> (PathBuf, PathBuf) { } } -fn find_openssl_dir(target: &str) -> OsString { - let host = env::var("HOST").unwrap(); - - if host == target && target.contains("apple-darwin") { - // Check up default Homebrew installation location first - // for quick resolution if possible. - let homebrew = Path::new("/usr/local/opt/openssl@1.1"); +fn resolve_with_wellknown_homebrew_location(dir: &str) -> Option { + // Check up default aarch 64 Homebrew installation location first + // for quick resolution if possible. + // `pkg-config` on brew doesn't necessarily contain settings for openssl apparently. + let mut version_dir = dir.to_owned(); + version_dir.push_str("@1.1"); + let homebrew = Path::new(&version_dir); + if homebrew.exists() { + return Some(homebrew.to_path_buf()); + } + let homebrew = Path::new(dir); + if homebrew.exists() { + return Some(homebrew.to_path_buf()); + } + // Calling `brew --prefix ` command usually slow and + // takes seconds, and will be used only as a last resort. + let output = execute_command_and_get_output("brew", &["--prefix", "openssl@1.1"]); + if let Some(ref output) = output { + let homebrew = Path::new(&output); if homebrew.exists() { - return homebrew.to_path_buf().into(); + return Some(homebrew.to_path_buf()); } - let homebrew = Path::new("/usr/local/opt/openssl"); + } + + let output = execute_command_and_get_output("brew", &["--prefix", "openssl"]); + if let Some(ref output) = output { + let homebrew = Path::new(&output); if homebrew.exists() { - return homebrew.to_path_buf().into(); + return Some(homebrew.to_path_buf()); } - // Calling `brew --prefix ` command usually slow and - // takes seconds, and will be used only as a last resort. - let output = execute_command_and_get_output("brew", &["--prefix", "openssl@1.1"]); - if let Some(ref output) = output { - let homebrew = Path::new(&output); - if homebrew.exists() { - return homebrew.to_path_buf().into(); + } + + None +} + +fn find_openssl_dir(target: &str) -> OsString { + let host = env::var("HOST").unwrap(); + + if host == target { + if target == "aarch64-apple-darwin" { + if let Some(dir) = resolve_with_wellknown_homebrew_location("/opt/homebrew/opt/openssl") + { + return dir.into(); } - } - let output = execute_command_and_get_output("brew", &["--prefix", "openssl"]); - if let Some(ref output) = output { - let homebrew = Path::new(&output); - if homebrew.exists() { - return homebrew.to_path_buf().into(); + } else if target.contains("apple-darwin") { + if let Some(dir) = resolve_with_wellknown_homebrew_location("/usr/local/opt/openssl") { + return dir.into(); } } }