diff options
author | Steven Fackler <sfackler@gmail.com> | 2021-02-10 19:35:29 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-10 19:35:29 -0500 |
commit | 71b6e3f81f9cf0d1772d00577873cc21ee8f86bf (patch) | |
tree | 18fe68e51dc32bf5421c0cb635c0550ab053479a | |
parent | 838e1b111bbb7336c6cb9658ff0faee266709630 (diff) | |
parent | d7bd9becb73744c4e696395cbd904ee0711228aa (diff) | |
download | rust-openssl-71b6e3f81f9cf0d1772d00577873cc21ee8f86bf.zip |
Merge pull request #1413 from davidbailey00/improve-openssl-dir-detection
Add support for MacPorts + fix scanning other directories on arm64
-rw-r--r-- | openssl-sys/build/find_normal.rs | 59 | ||||
-rw-r--r-- | openssl/src/lib.rs | 8 |
2 files changed, 31 insertions, 36 deletions
diff --git a/openssl-sys/build/find_normal.rs b/openssl-sys/build/find_normal.rs index 3e314e15..5e3726c4 100644 --- a/openssl-sys/build/find_normal.rs +++ b/openssl-sys/build/find_normal.rs @@ -25,16 +25,11 @@ fn resolve_with_wellknown_homebrew_location(dir: &str) -> Option<PathBuf> { // 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); + let homebrew = Path::new(dir).join("opt/openssl@1.1"); if homebrew.exists() { - return Some(homebrew.to_path_buf()); - } - let homebrew = Path::new(dir); - if homebrew.exists() { - return Some(homebrew.to_path_buf()); + return Some(homebrew); } + // Calling `brew --prefix <package>` 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"]); @@ -45,42 +40,36 @@ fn resolve_with_wellknown_homebrew_location(dir: &str) -> Option<PathBuf> { } } - 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 Some(homebrew.to_path_buf()); - } - } - None } -fn resolve_with_wellknown_pkgsrc_location() -> Option<PathBuf> { - let pkgsrc = Path::new("/opt/pkg"); - let pkgsrc_include_openssl = pkgsrc.join("include/openssl"); - if pkgsrc_include_openssl.exists() { - return Some(pkgsrc.to_path_buf()); +fn resolve_with_wellknown_location(dir: &str) -> Option<PathBuf> { + let root_dir = Path::new(dir); + let include_openssl = root_dir.join("include/openssl"); + if include_openssl.exists() { + Some(root_dir.to_path_buf()) + } else { + None } - - 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(); - } - } else if target.contains("apple-darwin") { - if let Some(dir) = resolve_with_wellknown_homebrew_location("/usr/local/opt/openssl") { - return dir.into(); - } else if let Some(dir) = resolve_with_wellknown_pkgsrc_location() { - return dir.into(); - } + if host == target && target.ends_with("-apple-darwin") { + let homebrew_dir = match target { + "aarch64-apple-darwin" => "/opt/homebrew", + _ => "/usr/local", + }; + + if let Some(dir) = resolve_with_wellknown_homebrew_location(homebrew_dir) { + return dir.into(); + } else if let Some(dir) = resolve_with_wellknown_location("/opt/pkg") { + // pkgsrc + return dir.into(); + } else if let Some(dir) = resolve_with_wellknown_location("/opt/local") { + // MacPorts + return dir.into(); } } diff --git a/openssl/src/lib.rs b/openssl/src/lib.rs index f908f3ab..b08bad6b 100644 --- a/openssl/src/lib.rs +++ b/openssl/src/lib.rs @@ -28,9 +28,15 @@ //! Additionally, it will use `pkg-config` on Unix-like systems to find the system installation. //! //! ```not_rust -//! # macOS +//! # macOS (Homebrew) //! $ brew install openssl@1.1 //! +//! # macOS (MacPorts) +//! $ sudo port install openssl +//! +//! # macOS (pkgsrc) +//! $ sudo pkgin install openssl +//! //! # Arch Linux //! $ sudo pacman -S pkg-config openssl //! |