M1 MacでMailCatcher( https://mailcatcher.me/ )をインストールしようとした際にちょっとつまづいたので、解決策を備忘録的に。
環境
- MacBook Pro (2021)
- M1 Max
- macOS Monterey v12.0.1
- ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]
うまくいかなかった時
普通にMailCatcherのサイトにあるように
% gem install mailcatcher
を叩いたら
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
とパーミッションエラーが出たので、「あちゃ、ヤベヤベ……」とsudo
つけて再度gem install mailcatcher
をしたんですが……
ERROR: Error installing mailcatcher:
ERROR: Failed to build gem native extension.
current directory: /Library/Ruby/Gems/2.6.0/gems/thin-1.5.1/ext/thin_parser
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r ./siteconf20211130-18489-1g2wtrg.rb extconf.rb
checking for main() in -lc... yes
creating Makefile
current directory: /Library/Ruby/Gems/2.6.0/gems/thin-1.5.1/ext/thin_parser
make "DESTDIR=" clean
current directory: /Library/Ruby/Gems/2.6.0/gems/thin-1.5.1/ext/thin_parser
make "DESTDIR="
compiling parser.c
parser.rl:142:7: error: implicit declaration of function 'thin_http_parser_has_error' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
if (thin_http_parser_has_error(parser) ) {
^
parser.rl:142:7: note: did you mean 'http_parser_has_error'?
./parser.h:44:5: note: 'http_parser_has_error' declared here
int http_parser_has_error(http_parser *parser);
^
parser.rl:144:14: error: implicit declaration of function 'thin_http_parser_is_finished' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
} else if (thin_http_parser_is_finished(parser) ) {
^
2 errors generated.
make: *** [parser.o] Error 1
make failed, exit code 2
と再度エラー。
ありゃ、以前のIntel Macの時は問題なく出来てたんだけどな……
thinを個別にインストールしてみるも……
エラーメッセージを見るとthin(Webサーバ)のインストールで躓いているようなので
% sudo gem install thin -v '1.5.1'
でインストールを試みるも、やはりエラーが出る。え〜ん( ; ; )
どうもこのinvalid in C99というのが怪しい。
エラーメッセージにimplicit declaration of function 'thin_http_parser_has_error' is invalid in C99
とあるのでこれでググるとこんなページを発見。
ふむふむ、C言語の規格違反エラーによってビルドが止まっているのね。エラーを無視する指定をしてあげれば良いらしい。
% sudo gem install thin -v '1.5.1' -- --with-cflags="-Wno-error=implicit-function-declaration"
これでどうだ!
Successfully installed thin-1.5.1
やっほ〜い♪
最後にもう一度MailCatcherをインストール
これで依存ファイルが入ったはずなので、
% sudo gem install mailcatcher
でインストールすると、無事インストール出来ました。