What does it take install puma gem on my OS X Yosemite (10.10.1) system? I've exhausted a bunch of avenues (I have XCode tools, I have OpenSSL), but it still fails while trying to build the native extensions.
On my OS X system, when I do:
$ gem install puma
I get:
Building native extensions. This could take a while...
ERROR: Error installing puma:
ERROR: Failed to build gem native extension.
/Users/home/sandbox/usr/bin/ruby extconf.rb
checking for SSL_CTX_new() in -lssl... no
checking for SSL_CTX_new() in -lssleay32... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/home/sandbox/usr/bin/ruby
--with-puma_http11-dir
--without-puma_http11-dir
--with-puma_http11-include
--without-puma_http11-include=${puma_http11-dir}/include
--with-puma_http11-lib
--without-puma_http11-lib=${puma_http11-dir}/lib
--with-ssllib
--without-ssllib
--with-ssleay32lib
--without-ssleay32lib
extconf failed, exit code 1
Gem files will remain installed in /Users/home/sandbox/usr/lib/ruby/gems/2.1.0/gems/puma-2.10.2 for inspection.
Results logged to /Users/home/sandbox/usr/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-14/2.1.0/puma-2.10.2/gem_make.out
I suspect that gem install
is unable to locate the SSL headers and/or libraries. Here's what I've got on my system (note that ~/sandbox/usr is my "sandbox" directory, containing all executables, libraries, headers, etc for my Ruby on Rails development). Notice that "ssl.h" does define SSL_CTX_new():
$ which openssl
~/sandbox/usr/bin/openssl
$ openssl version
OpenSSL 1.0.1j 15 Oct 2014
$ openssl version -d
OPENSSLDIR: "/Users/home/sandbox/usr/ssl"
$ find ~/sandbox/usr -name "*libssl*" -print
~/sandbox/usr/lib/libssl.a
$ find ~/sandbox/usr -name "*.h" -exec grep SSL_CTX_new {} /dev/null \;
~/sandbox/usr/include/openssl/ssl.h:SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
Also, here's how ruby was compiled. $INSTALL_DIR is ~/home/sandbox:
./configure --prefix=$(INSTALL_DIR) --enable-shared --disable-install-doc --with-opt-dir=$(INSTALL_DIR) --with-openssl-dir=$(INSTALL_DIR)/bin; where INSTALL_DIR is ~/sandbox/usr.
Am I simply missing some configuration flags for the build process? I've tried a bunch of flags more or less at random:
$ gem install puma -- --with-openssl-dir=/Users/home/sandbox/usr/ssl
$ gem install puma -- --with-ssllib=/Users/home/sandbox/usr/lib/libssl.a
$ gem install puma -- --with-ssl=/Users/home/sandbox/usr/bin/openssl
$ gem install puma -- --with-ssl=/Users/home/sandbox/usr/bin
$ gem install puma -- --with-opt-dir=/Users/home/sandbox/usr
but got the same error in each case. Can someone clue me in to what I'm missing?
The mkmf.log file with the error looks like this (line breaks added for readability):
"clang -o conftest
-I/Users/home/sandbox/usr/include/ruby-2.1.0/x86_64-darwin14.0
-I/Users/home/sandbox/usr/include/ruby-2.1.0/ruby/backward
-I/Users/home/sandbox/usr/include/ruby-2.1.0
-I.
-I/Users/home/sandbox/usr/include
-D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT
-O3 -fno-fast-math -ggdb3 -Wall -Wextra
-Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers
-Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement
-Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wextra-tokens
-fno-common -pipe conftest.c
-L.
-L/Users/home/sandbox/usr/lib
-L/Users/home/sandbox/usr/lib
-L. -fstack-protector
-L/Users/home/sandbox/usr/lib
-lruby.2.1.0 -lssl -lpthread -ldl -lobjc "
conftest.c:13:57: error: use of undeclared identifier 'SSL_CTX_new'
int t(void) { void ((*volatile p)()); p = (void ((*)()))SSL_CTX_new; return 0; }
As I grovel through my sandbox directory tree, the only header file that defines SSL_CTX_new is ~/sandbox/include/openssl/ssl.h
. It appears that that file isn't being included, and I'm currently at a loss as to why.
For people who are having issues with puma and openssl, particularly with Mac OS 10.11 (El Capitan), adding some flags will save you hours and hours of heartache:
gem install puma -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib
https://gist.github.com/edvinasbartkus/0e99ea8305a20737f562
Turns out this was a bug in puma versions 2.9.2+ and has been fixed in version 2.11.0. For details, see https://github.com/puma/puma/issues/627 and https://github.com/puma/puma/pull/628.
(Note to unix users: if you're still having trouble, make sure you've have libssl-dev installed first.)
I had a similar issue on OSx El Capitan. Here's what has helped me:
brew install openssl
brew link --force openssl
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With