OpenSSLがみつからない
GithubのREADMEに従って
git clone git@github.com:ruby/ruby.git
して
./configure make make check
すると、次のような警告メッセージがでました。
*** Following extensions are not compiled: openssl: Could not be configured. It will not be installed. /Users/shigerunakajima/ruby/ext/openssl/extconf.rb:97: OpenSSL library could not be found. You might want to use --with-openssl-dir=<dir> option to specify the prefix where OpenSSL is installed. Check ext/openssl/mkmf.log for more details. *** Fix the problems, then remove these directories and try again if you want.
OpenSSLが見つからないみたいです。
brew info openssl
すると
For compilers to find openssl@1.1 you may need to set: set -gx LDFLAGS "-L/usr/local/opt/openssl@1.1/lib" set -gx CPPFLAGS "-I/usr/local/opt/openssl@1.1/include"
と表示されたので、この設定をして
./configure make clean make
しました。 該当の警告メッセージは消えました。
テスト失敗
make check
すると、今度は次のテストが失敗しました。
1) Socket.getnameinfo using IPv6 using a 3 element Array as the first argument using NI_NUMERICHOST as the flag returns an Array containing the numeric hostname and service name FAILED Expected ["::ffff:127.0.0.1", "ftp"] == ["::1", "ftp"] to be truthy but was false /Users/shigerunakajima/ruby/spec/ruby/library/socket/socket/getnameinfo_spec.rb:111:in `block (6 levels) in <top (required)>' /Users/shigerunakajima/ruby/spec/ruby/library/socket/socket/getnameinfo_spec.rb:65:in `<top (required)>'
該当のテストコードは https://github.com/ruby/ruby/blob/master/spec/ruby/library/socket/socket/getnameinfo_spec.rb#L109-L113 です。
describe 'using NI_NUMERICHOST as the flag' do it 'returns an Array containing the numeric hostname and service name' do Socket.getnameinfo(@addr, Socket::NI_NUMERICHOST).should == [ip_address, 'ftp'] end end
ソースコード追っかけて要約すると、このテストコードは
Socket.getnameinfo([Socket::AF_INET6, 21, 'localhost'], Socket::NI_NUMERICHOST)
が [":1", "ftp"]
を返すことを期待しています。
irbを使ってためしてみます。
irb(main):012:0> Socket.getnameinfo([Socket::AF_INET6, 21, 'localhost'], Socket::NI_NUMERICHOST) => ["::ffff:127.0.0.1", "ftp"]
なるほど["::ffff:127.0.0.1", "ftp"]
が返ってきています。
それでテストが失敗しているようです。
ネットワークを変えると
ネットワークをLANからスマートフォンのテザリングに変更して試してみます。
irb(main):003:0> Socket.getnameinfo([Socket::AF_INET6, 21, 'localhost'], Socket: :NI_NUMERICHOST) => ["::1", "ftp"]
ネットワーク環境依存しているみたいです。