316

Just installed El Capitan and can't install gem eventmachine 1.0.7. openssl is at 1.0.2a-1. Tried to use --with-ssl-dir but it seems ignored.

Reported it to their github repo as well.

Any suggestions are really appreciated. Thanks.

$ ls /usr/local/Cellar/openssl/1.0.2a-1/include/openssl/ssl.h
/usr/local/Cellar/openssl/1.0.2a-1/include/openssl/ssl.h

$ gem install eventmachine -v '1.0.7' -- --with-ssl-dir=/usr/local/Cellar/openssl/1.0.2a-1/include
/Users/pain/.rbenv/versions/2.1.2/bin/ruby -r ./siteconf20150612-56154-1hsjz2n.rb extconf.rb --with-ssl-dir=/usr/local/Cellar/openssl/1.0.2a-1/include
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... yes
checking for rb_thread_fd_select()... yes
checking for rb_fdset_t in ruby/intern.h... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_enable_interrupt()... no
checking for rb_time_new()... yes
checking for sys/event.h... yes
checking for sys/queue... yes
checking for clock_gettime()... no
checking for gethrtime()... no
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling binder.cpp
In file included from binder.cpp:20:
./project.h:116:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
         ^
1 error generated.
make: *** [binder.o] Error 1

make failed, exit code 2
firedev
  • 20,898
  • 20
  • 64
  • 94

17 Answers17

582
$ gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include                                                                                                             
Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include'
This could take a while...
Successfully installed eventmachine-1.0.8
1 gem installed

You can also set up bundler like this but I think that is superficial

bundle config build.eventmachine --with-cppflags=-I/usr/local/opt/openssl/include
firedev
  • 20,898
  • 20
  • 64
  • 94
  • 7
    For me, I had to install openssl first before this worked. e.g. `brew install openssl`. – Ryan Walls Oct 26 '15 at 17:52
  • 1
    If you have your gems set to a specific directory in your repo, i.e. `vendor/bundle` then you will want to run the `bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/include`. I had to run the same thing with the gem `puma` so I imagine this is happening for other gems as well. – Colto Oct 28 '15 at 16:11
  • 4
    see answer with: 'bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include' from lloeki. That worked for me. Not this one. – justingordon Nov 05 '15 at 01:29
  • 2
    This worked for me `gem install eventmachine -v 1.0.8 -- --with-cppflags=-I/usr/local/opt/openssl/include` on OSX El Capitan 10.11.5 – Jagdeep Singh Jul 27 '16 at 10:15
  • 6
    for me after install `brew install openssl` I have to do `brew link openssl --force` – Sr. Oshiro Sep 01 '16 at 14:18
  • 1
    `gem install eventmachine -- --with-cppflags=-I$(brew --prefix openssl)/include` – Marius Butuc Jan 12 '17 at 03:54
  • Thanks for this solution! I had the problem with eventmachine 1.2.7 installation and this resolved it. – Sheikh Faisal Miskhat Jan 31 '22 at 07:50
  • `-with-cppflags=-I/usr/local/opt/openssl/include` this save me on Ubuntu 20.4. Before that system always ignore openssl dir options . Thanks bro. – babie Aug 06 '22 at 02:13
  • Works on Windows 10 for me – Jeffrey Kozik Aug 10 '22 at 11:36
  • `gem install eventmachine -v 1.2.7 -- --with-cppflags=-I/opt/homebrew/opt/openssl@1.1/include` works for me on Mac Silicon – smtlaissezfaire Oct 25 '22 at 03:36
  • ^ worked for me too, needed to escape the '@' in bash fyi – ohhh Jul 04 '23 at 14:44
266

When using bundler and homebrew:

$ bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include
$ bundle install
Lloeki
  • 6,573
  • 2
  • 33
  • 32
  • 4
    For me, I had to install openssl first before this worked. e.g. `brew install openssl` – Ryan Walls Oct 26 '15 at 17:51
  • This version worked for me to install eventmachine 1.0.3 on top of ruby 2.1.2 – dtburgess Nov 17 '15 at 13:11
  • Fantastic! This is also the way to go for other gems (e.g. puma) that depend on openssl – morgler Mar 12 '17 at 20:06
  • 1
    I think this answer is better than the approved one, because since it uses `bundle install` to perform the actual gem installation, it guarantees you'll install the exact version specified in your bundle. The accepted answer will install the latest version, unless you include the `-v x.x.x` in the `gem install` command manually. – Ernesto Jun 03 '17 at 02:54
127
brew link --force openssl

Then:

gem install eventmachine

It also fixes:

  • gem install taks
  • bundle install
  • rake and rails tasks

P.S. Probably you'll need to remove and run brew install openssl again

The issue happends because Apple had removed openssl from OSX (in El Captain build)

itsnikolay
  • 17,415
  • 4
  • 65
  • 64
19
gem pristine eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include

pristine removes the old gem and recompiles it.

The cpp flags option allows the compiler to find the openssl headers.

If you prefer to abstract away the cpp flags argument, you can do the following:

PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig"

You can also add the version if you like:

gem pristine eventmachine -v '1.0.4' -- --with-cppflags=-I/usr/local/opt/openssl/include
floer32
  • 2,190
  • 4
  • 29
  • 50
jLuc
  • 376
  • 1
  • 3
  • 7
14

I was trying to install v 1.0.3 and this worked for me.

gem install eventmachine -v '1.0.3' -- --with-cppflags=-I/usr/local/opt/openssl/include

These discussions were very helpful: https://github.com/eventmachine/eventmachine/issues/602

This assumes the machine already has openssl installed via brew.

floer32
  • 2,190
  • 4
  • 29
  • 50
Ana Isabel
  • 931
  • 1
  • 11
  • 21
9

This solved the problem for me:

PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" gem install eventmachine -v "1.0.8"

Source: https://github.com/sj26/mailcatcher/issues/254

Giovanni Benussi
  • 3,102
  • 2
  • 28
  • 30
  • Unecessarily complicated, why not just set the var: export PKG_CONFIG_PATH=$( brew --prefix openssl )/lib/pkgconfig # now you can install any packages, add to .bashrc, or what you use – Gerry Gleason Oct 11 '17 at 15:03
8

If you're installing EventMachine as a dependency of another gem, be sure to specify the correct version when you manually install the gem:

gem install eventmachine -v 1.0.5 -- --with-cppflags=-I$(brew --prefix openssl)/include

Then you can install the gem that you were originally trying to install:

gem install mailcatcher
Andrew
  • 227,796
  • 193
  • 515
  • 708
7

This looks like a more recent issue: https://github.com/eventmachine/eventmachine/issues/936

I solved this problem on macOS 12.3.1 with the following:

M1 Max:

gem install eventmachine -- --with-openssl-dir=/opt/homebrew/Cellar/openssl@1.1/1.1.1n/

Intel:

gem install eventmachine -- --with-openssl-dir=/usr/local/Cellar/openssl@1.1/1.1.1n/
Heath Borders
  • 30,998
  • 16
  • 147
  • 256
5

One alternative is to add a bundler config entry for your whole user profile, like this:

cd ~
bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include

it'll create a .bundle/config file in your home directory, which is then used in all your projects when you run bundle install.

4

This worked for me -

    gem install eventmachine -v '1.0.7' -- --debug --backtrace --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib
    Building native extensions with: '--debug --backtrace --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
    This could take a while...
    Successfully installed eventmachine-1.0.7
    Parsing documentation for eventmachine-1.0.7
    Installing ri documentation for eventmachine-1.0.7
    Done installing documentation for eventmachine after 9 seconds
    1 gem installed

NOTE:- Before I was able to successfully install this gem, I had to do a few things. These might apply to you, so listing them here -

1.) got off the corporate-VPN OR you might have to turn ON proxy settings

2.) PKG_CONFIG_PATH was set to -

echo $PKG_CONFIG_PATH
/usr/local/opt/openssl/lib/pkgconfig

3.) had to add the following to $PATH in bash_profile (in my case ~/.zshrc)

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.) Also note, that contrary to some answers I got in this SO post, and also this thread on github-eventmachine, I was not able to install eventmachine

gem install eventmachine -v '1.0.7' -- --debug --backtrace --with-cppflags=-I/usr/local/include --with-ldflags=-L/usr/local/lib
Fetching: eventmachine-1.0.7.gem (100%)
Building native extensions with: '--debug --backtrace --with-cppflags=-I/usr/local/include --with-ldflags=-L/usr/local/lib'
This could take a while...
ERROR:  Error installing eventmachine:
    ERROR: Failed to build gem native extension.

It seems /usr/local/opt/openssl/include is the right location and not /usr/local/include when specifying the openssl location.

ARK
  • 3,734
  • 3
  • 26
  • 29
  • 1
    This miraculously worked for me, after trying most of the other suggestions, I just had to edit the version from `1.0.7` to `1.2.7`. – Joshua Muheim Nov 10 '22 at 07:22
  • 1
    This also worked for me (Ruby 3.0.0, MacOS 12.6) after unsuccessfully trying lots of other suggestions on this page. Thanks! – GMA Feb 12 '23 at 19:59
4

I met the same eventmachine issue and the answers above didn't work for me, finally reinstall ruby with given openssl version works:

rvm reinstall 3.1.2 --with-openssl-dir=/usr/local/opt/openssl@3
Zernel
  • 1,487
  • 2
  • 15
  • 27
3

Using Ventura 13.2.1 and Ruby 3.1.2, only this worked for me:

gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl@1.1/include
sidney
  • 1,241
  • 15
  • 32
2

This installed it for me:

gem install eventmachine -- --with-openssl-dir=/usr/local/opt/openssl@1.1

I got it from the eventmachine Github repo. Evidently OpenSSL tools were moved / removed from MacOS at some point.

In my case, I wanted to install something else (mailcatcher) with a dependency on eventmachine. I did this by replacing eventmachine with mailcatcher in the above command.

John Skiles Skinner
  • 1,611
  • 1
  • 8
  • 21
1

For Jekyll and Fish:

gem install jekyll -- --with-cppflags=-I(brew --prefix openssl)/include
Dorian
  • 7,749
  • 4
  • 38
  • 57
  • Worked for me, except I had to change `-I(` to `-I$(` - that is, I had to add the `$`. So my full command was `gem install jekyll -- --with-cppflags=-I$(brew --prefix openssl)/include` – GMA Aug 16 '22 at 15:21
1

As of 2022, the way to install eventmachine, assuming brew install openssl has already installed successfully, is: gem install eventmachine -- --with-cppflags=-I/opt/homebrew/opt/openssl/include

Notice that the include directory has moved.

Preston Lee
  • 584
  • 1
  • 4
  • 10
1

The solution that worked for me was:

I had similar eventmachine issues on MAC M1 installing Jekyll. While this is inspired by Stackoverflow running brew link --force openssl did NOT solve my issues.

I could solve these Openssl issues as follows:

Run brew --prefix openssl to check the openSSL path. If OpenSSL is not installed, install it first.

Run bundle config build.eventmachine --with-openssl-dir=$(brew --prefix openssl).

Run bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include.

Run bundle

Can't install Jekyll - "fatal error: 'openssl/ssl.h' file not found"

QASLBR
  • 11
  • 2
0

With openssl@3 with Homebrew it worked by running this command:

gem install eventmachine -- --with-openssl-dir=/usr/local/opt/openssl@3/bin/openssl

NOTE the /bin/openssl at the end which made the difference for me.

crodev
  • 1,323
  • 6
  • 22
  • 39