aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-05-18 11:22:36 -0700
committerGitHub <[email protected]>2018-05-18 11:22:36 -0700
commit9ba53102f987c1667cfedba540a692c2063259c4 (patch)
tree58aed46ced02eefbd8ddda11b950f2813a764576
parentMerge pull request #919 from sfackler/cleanup (diff)
parentFind path prefix to OpenSSL installed by Homebrew. (diff)
downloadrust-openssl-9ba53102f987c1667cfedba540a692c2063259c4.tar.xz
rust-openssl-9ba53102f987c1667cfedba540a692c2063259c4.zip
Merge pull request #921 from eonil/master
Find path prefix to OpenSSL installed by Homebrew better.
-rw-r--r--README.md14
-rw-r--r--openssl-sys/build.rs34
2 files changed, 41 insertions, 7 deletions
diff --git a/README.md b/README.md
index 33727d0d..16155fbd 100644
--- a/README.md
+++ b/README.md
@@ -48,25 +48,25 @@ make -j$(nproc)
make install
```
-### OSX
+### macOS
-Although OpenSSL 0.9.8 is preinstalled on OSX this library is being phased out
-of OSX and this crate also does not support that version of OpenSSL. To use this
-crate on OSX you'll need to install OpenSSL via some alternate means, typically
+Although OpenSSL 0.9.8 is preinstalled on macOS this library is being phased out
+of macOS and this crate also does not support that version of OpenSSL. To use this
+crate on macOS you'll need to install OpenSSL via some alternate means, typically
Homebrew:
```bash
brew install openssl
```
-Occasionally an update of XCode or MacOS will cause the linker to fail after compilation, to rectify this you may want to try and run:
+Occasionally an update of XCode or macOS will cause the linker to fail after compilation, to rectify this you may want to try and run:
```bash
xcode-select --install
```
-If Homebrew is installed to the default location of `/usr/local`, OpenSSL will be
-automatically detected.
+If you're using latest version of Homebrew which supports `--prefix` command,
+OpenSSL will be automatically detected.
### Windows MSVC
diff --git a/openssl-sys/build.rs b/openssl-sys/build.rs
index 0b8341fa..c5630556 100644
--- a/openssl-sys/build.rs
+++ b/openssl-sys/build.rs
@@ -104,6 +104,8 @@ 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/[email protected]");
if homebrew.exists() {
return homebrew.to_path_buf().into();
@@ -112,6 +114,22 @@ fn find_openssl_dir(target: &str) -> OsString {
if homebrew.exists() {
return homebrew.to_path_buf().into();
}
+ // 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", "[email protected]"]);
+ if let Some(ref output) = output {
+ let homebrew = Path::new(&output);
+ if homebrew.exists() {
+ return homebrew.to_path_buf().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();
+ }
+ }
}
try_pkg_config();
@@ -548,3 +566,19 @@ fn determine_mode(libdir: &Path, libs: &[&str]) -> &'static str {
// practices with security libs", let's link dynamically.
"dylib"
}
+
+
+
+fn execute_command_and_get_output(cmd: &str, args: &[&str]) -> Option<String> {
+ let out = Command::new(cmd).args(args).output();
+ if let Ok(ref r1) = out {
+ if r1.status.success() {
+ let r2 = String::from_utf8(r1.stdout.clone());
+ if let Ok(r3) = r2 {
+ return Some(r3.trim().to_string());
+ }
+ }
+ }
+ return None;
+}
+