mysql2 rails インストール時のエラー対応と同様にnio4rのインストールエラーで悩まされたので書き記す

rails7⇔rails5を行ったり来たりしていると、、rails5のbundleでnio4r(IO周りのライブラリ）が入らなくなってめちゃくちゃ悩まされたので、記載しておきます

みなさんmysql2のインストールで苦戦すると思うのですが（しませんか？）今回はnio4rがめちゃくちゃ苦戦を強いてきました。。。。。

【結論】

下記記事と一緒で`--with-cflags=-Wno-incompatible-pointer-types`をたすのですが、、それだけだとどうもうまく行かず、

`--with-cppflags=-I/opt/homebrew/opt/openssl@1.1/include --with-ldflags=-L/opt/homebrew/opt/openssl@1.1/lib
`
も入れてインストールしました。(mysql2のときにいれるオプションです）

bundle configは一度は確認画面に入るので、二回実施すると設定が入るみたいです。

```
bundle config --local build.nio4r "--with-cppflags=-I/opt/homebrew/opt/openssl@1.1/include --with-ldflags=-L/opt/homebrew/opt/openssl@1.1/lib --with-cflags=-Wno-incompatible-pointer-types"
```


https://stackoverflow.com/questions/78313570/unable-to-bundle-install-nio4r-on-a-new-mac-m3


【色々試行錯誤】
opensslは2024/11から非推奨になったopenssl1に敢えて落としました。
openssl3でやっても多分うまくいくかと。。（未実験）
xcodeも入れ直したりしましたが、これはおそらく無関係です。
(` xcode-select --install`)


【遭遇したエラーログ】
```
Installing nio4r 2.3.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /private/var/folders/l1/_rfqwsqj04538zdhhdhhz8tc0000gn/T/bundler20241228-21142-umjgmhnio4r-2.3.1/gems/nio4r-2.3.1/ext/nio4r
/Users/shirotabuchi/.rbenv/versions/2.6.9/bin/ruby -I /Users/shirotabuchi/.rbenv/versions/2.6.9/lib/ruby/2.6.0 -r ./siteconf20241228-21142-102l9ow.rb extconf.rb
--with-cppflags\=-I/opt/homebrew/opt/openssl@1.1/include --with-ldflags\=-L/opt/homebrew/opt/openssl@1.1/lib
checking for unistd.h... yes
checking for sys/select.h... yes
checking for port_event_t in poll.h... no
checking for sys/epoll.h... no
checking for sys/event.h... yes
checking for sys/queue.h... yes
checking for port_event_t in port.h... no
checking for sys/resource.h... yes
creating Makefile

current directory: /private/var/folders/l1/_rfqwsqj04538zdhhdhhz8tc0000gn/T/bundler20241228-21142-umjgmhnio4r-2.3.1/gems/nio4r-2.3.1/ext/nio4r
make "DESTDIR=" clean

current directory: /private/var/folders/l1/_rfqwsqj04538zdhhdhhz8tc0000gn/T/bundler20241228-21142-umjgmhnio4r-2.3.1/gems/nio4r-2.3.1/ext/nio4r
make "DESTDIR="
compiling bytebuffer.c
compiling monitor.c
monitor.c:87:24: warning: '(' and '{' tokens introducing statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]
   87 |     if(interests_id == rb_intern("r")) {
      |                        ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:23: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                       ^
monitor.c:87:24: note: '{' token is here
   87 |     if(interests_id == rb_intern("r")) {
      |                        ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:24: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1811:5: note: expanded from macro 'RUBY_CONST_ID_CACHE'
 1811 |     {                                                   \
      |     ^
monitor.c:87:24: warning: '}' and ')' tokens terminating statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]
   87 |     if(interests_id == rb_intern("r")) {
      |                        ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:24: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1816:5: note: expanded from macro 'RUBY_CONST_ID_CACHE'
 1816 |     }
      |     ^
monitor.c:87:24: note: ')' token is here
   87 |     if(interests_id == rb_intern("r")) {
      |                        ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:56: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                                                        ^
monitor.c:89:31: warning: '(' and '{' tokens introducing statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]
   89 |     } else if(interests_id == rb_intern("w")) {
      |                               ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:23: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                       ^
monitor.c:89:31: note: '{' token is here
   89 |     } else if(interests_id == rb_intern("w")) {
      |                               ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:24: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1811:5: note: expanded from macro 'RUBY_CONST_ID_CACHE'
 1811 |     {                                                   \
      |     ^
monitor.c:89:31: warning: '}' and ')' tokens terminating statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]
   89 |     } else if(interests_id == rb_intern("w")) {
      |                               ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:24: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1816:5: note: expanded from macro 'RUBY_CONST_ID_CACHE'
 1816 |     }
      |     ^
monitor.c:89:31: note: ')' token is here
   89 |     } else if(interests_id == rb_intern("w")) {
      |                               ^~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:56: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                                                        ^
monitor.c:91:31: warning: '(' and '{' tokens introducing statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]
   91 |     } else if(interests_id == rb_intern("rw")) {
      |                               ^~~~~~~~~~~~~~~
/Users/shirotabuchi/.rbenv/versions/2.6.9/include/ruby-2.6.0/ruby/ruby.h:1826:23: note: expanded from macro 'rb_intern'
 1826 |         __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
      |                       ^
monitor.c:91:31: note: '{' token is here



```

https://qiita.com/akitika/items/3dbdf7cd2c774d98e0ac