ruby,openssl

rubyとopenssl 1.1の組み合わせでビルドエラー

MacOSX 10.8.5
ruby 2.2.9

$ curl --version
curl 7.59.0 (x86_64-apple-darwin12.6.0) libcurl/7.59.0 OpenSSL/1.1.0h zlib/1.2.11
Release-Date: 2018-03-14
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy 

$ openssl version
OpenSSL 1.1.0h  27 Mar 2018

参考にした。
MacにRubyをソースからインストールする - Qiita

1.ruby 2.2.9 configure

export LDFLAGS='-L/usr/local/openssl/lib':$LDFLAGS
export LDFLAGS='-L/usr/local/readline/lib':$LDFLAGS

export CPPFLAGS='-I/usr/local/openssl/include':$CPPFLAGS
export CPPFLAGS='-I/usr/local/readline/include':$CPPFLAGS
./configure --with-openssl-dir=/usr/local/openssl -with-readline-dir=/usr/local/readline

2.make でビルドエラー

makeすると、
openssl_missing.h
などでエラーが多数。

compiling openssl_missing.c
In file included from openssl_missing.c:21:
./openssl_missing.h:78:31: error: too many arguments provided to function-like macro invocation
EVP_MD_CTX *EVP_MD_CTX_create(void);
                              ^
/usr/local/openssl/include/openssl/evp.h:500:10: note: macro 'EVP_MD_CTX_create' defined here
# define EVP_MD_CTX_create()     EVP_MD_CTX_new()
         ^
In file included from openssl_missing.c:21:
./openssl_missing.h:82:22: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
void EVP_MD_CTX_init(EVP_MD_CTX *ctx);
     ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
/usr/local/openssl/include/openssl/evp.h:501:52: note: expanded from macro 'EVP_MD_CTX_init'
# define EVP_MD_CTX_init(ctx)    EVP_MD_CTX_reset((ctx))
                                                   ^
In file included from openssl_missing.c:21:
./openssl_missing.h:82:6: error: conflicting types for 'EVP_MD_CTX_reset'
void EVP_MD_CTX_init(EVP_MD_CTX *ctx);
     ^
/usr/local/openssl/include/openssl/evp.h:501:34: note: expanded from macro 'EVP_MD_CTX_init'
# define EVP_MD_CTX_init(ctx)    EVP_MD_CTX_reset((ctx))
                                 ^
/usr/local/openssl/include/openssl/evp.h:498:5: note: previous declaration is here
int EVP_MD_CTX_reset(EVP_MD_CTX *ctx);
    ^
In file included from openssl_missing.c:21:
./openssl_missing.h:90:25: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
     ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
/usr/local/openssl/include/openssl/evp.h:502:51: note: expanded from macro 'EVP_MD_CTX_destroy'
# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx))
                                                  ^
In file included from openssl_missing.c:21:
./openssl_missing.h:90:6: error: conflicting types for 'EVP_MD_CTX_free'
void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
     ^
/usr/local/openssl/include/openssl/evp.h:502:34: note: expanded from macro 'EVP_MD_CTX_destroy'
# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx))
                                 ^
/usr/local/openssl/include/openssl/evp.h:499:6: note: previous declaration is here
void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
     ^
openssl_missing.c:39:19: error: too many arguments provided to function-like macro invocation
EVP_MD_CTX_create(void)
                  ^
/usr/local/openssl/include/openssl/evp.h:500:10: note: macro 'EVP_MD_CTX_create' defined here
# define EVP_MD_CTX_create()     EVP_MD_CTX_new()
         ^
openssl_missing.c:39:18: error: expected ';' after top level declarator
EVP_MD_CTX_create(void)
                 ^
                 ;
2 warnings and 5 errors generated.
make[2]: *** [openssl_missing.o] Error 1
make[1]: *** [ext/openssl/all] Error 2
make[1]: *** Waiting for unfinished jobs....
installing default nkf libraries
compiling objspace_dump.c
linking shared-object objspace.bundle
linking shared-object date_core.bundle
linking shared-object nkf.bundle
make: *** [build-ext] Error 2

3. 対策方法

rubyのビルドエラーは解決した。

ruby 2.5あるいは2.4を入れる。
opensslの1.0.2oを入れる。

ruby とopensslでインストール出来る組み合わせと出来ない組み合わせがあるらしい。

opensslの1.1を一旦削除。
openssl 1.0.2oをインストール。
ruby 2.5をインストール。ビルドエラーなし。

opensslのインストール先は /usr/local/opensslであることに注意。
(本環境はHomebrewを使ってない。)

これで解決した。

以上。