MacPorts, OpenSSL, and Rust
It is one of those days again:
error: failed to run custom build command for `openssl-sys v0.9.58`
...
Could not find directory of OpenSSL installation, and this `-sys` crate cannot
proceed without this knowledge. If OpenSSL is installed and this crate had
trouble finding it, you can set the `OPENSSL_DIR` environment variable for the
compilation process.
I want to compile crates including OpenSSL, but the OpenSSL dir is not found. I remember that I fixed this problem once, and for saving me some minutes the next time I write down how to do that now.
Most straight-forward solutions include setting the OPENSSL_DIR variable into some cellar. Ok, that’s for Homebrew folks; but I go with MacPorts which installs its packages somewhere else.
First, make sure openssl is installed:
$ sudo port install openssl
$ port installed | grep openssl
openssl @1.1.1h_0 (active)
Then you can inspect where ports put the files (there’s quite a lot documentation, so opening it in less makes exploring easier):
$ port contents openssl | less
You’ll see header files in /opt/local/include/openssl/
and runtime libraries in /opt/local/lib/
. Fortunately, the documentation of the openssl-crate explains which variables we can set to find these paths. This is what we need in the environment:
export OPENSSL_INCLUDE_DIR=/opt/local/include
export OPENSSL_LIB_DIR=/opt/local/lib
Note that the include dir does not contain the openssl
-suffix!
With these environment variables set, cargo build
builds everything like a charm.