brew installでコケたので回避してみた話
今回のお題
Error: groonga 4.0.7 did not build
Logs:
/Users/homebrew/Library/Logs/Homebrew/groonga/01.configure
/Users/homebrew/Library/Logs/Homebrew/groonga/01.configure.cc
/Users/homebrew/Library/Logs/Homebrew/groonga/02.make
/Users/homebrew/Library/Logs/Homebrew/groonga/02.make.cc
/Users/homebrew/Library/Logs/Homebrew/groonga/config.log
These open issues may also help:
groonga 4.0.8 (https://github.com/Homebrew/homebrew/pull/34541)
そもそもの発端
mrubyです。
groongaでなぜかruby_eval
やruby_load
が使えない。なんでかなー、brew install mruby
しとかないとダメとかかなーなどとあてずっぽうに調べたり試したりするが変わりない。念のためとFormulaを見てみても、たしかに--with-mruby
をconfigure
に渡している。
あれ? with?
--enable-mruby
だよな。
エラーが起きるようになってしまった
そういうわけで--enable-mruby
を渡すようにして、これでmrubyできるぞーと期待をふくらませていら、コケるようになってしまった。
make中にコケているので02.make
ログを見る。するとこんなエラーが出ていた。
libtool: link: cannot find the library `../vendor/onigmo-source/libonig.la' or unhandled argument `../vendor/onigmo-source/libonig.la'
brew install
に--debug
--debug
を付けておくとbrew install
でコケたら、その時点でもごもごできる。逆にこれがなければ結果によらずソースツリー消えてしまって哀しい。
さて、--debug
付きでbrew install
を実行し、改めて問題が起きることを確認する。--debug
付きだとエラーが起きたところで「どうする?」とたずねられることになる。
libtool: link: cannot find the library `../vendor/onigmo-source/libonig.la' or unhandled argument `../vendor/onigmo-source/libonig.la'
make[3]: *** [libgroonga.la] Error 1
make[2]: *** [install-recursive] Error 1
make[1]: *** [install] Error 2
make: *** [install-recursive] Error 1
/usr/local/Library/Homebrew/debrew.rb:10:in `raise'
BuildError: Failed executing: make install
1. raise
2. ignore
3. backtrace
4. irb
5. shell
Choose an action:
5と回答してシェルを起動して、どういう状態になっているかを見てことにする。
シェル起動時のカレントディレクトリはソースコードツリーのトップである。まずはファイルがほんとうにないことを念のため確認しておく。
bash-3.2$ ls vendor/onigmo-source
たしかにlibonig.la
がない。いや、というか、.o
ファイルも一切ない。なんと。
いったんシェルを終了せて、再度表示される選択肢には1と回答してbrew install
をコケさせておく。そして02.make
ログからonigmo-sourceに関係しそうなところを見ていってみれば——予想通りにちょっとおかしい。
Making install in vendor
Making install in onigmo
make[2]: Nothing to be done for `install'.
Making install in mruby
/Applications/Xcode.app/Contents/Developer/usr/bin/make install-am
CC parse.lo
[...]
vendor/onigmo
以下で何もしようとしていない? なるほど。コケるわけだ。だが、なぜ?
--debug
で回避策を探る
実際にやってみよう。
再び--debug
付きでbrew install
を実行し、エラーが出たところでやはり5と回答する。念のためvendor/onigmo-source
以下にlibonig.la
がないことを確認し、vendor
ディレクトリでmake install
を実行してみる。
bash-3.2$ cd vendor/
bash-3.2$ make install
Making install in onigmo
make[1]: Nothing to be done for `install'.
Making install in mruby
/Applications/Xcode.app/Contents/Developer/usr/bin/make install-am
うん、なるほど。なんでかなーといろいろ試してみているうちに、うっかり手がすべって単にmake
だけ実行してしまった。
bash-3.2$ make
Making all in onigmo
cd ../onigmo-source && /Applications/Xcode.app/Contents/Developer/usr/bin/make all
[...]
make[1]: Nothing to be done for `all-am'.
bash-3.2$ ls onigmo-source/libonig.la
onigmo-source/libonig.la
あら、これならいけるんだ。
brew edit
それじゃあFormulaをいじっちゃおう。といっても発端からしてFormulaをいじっているわけですが。
brew edit groonga
するとGroongaのためのFormulaをエディタで開いてくれる。これに手を加えてセーブする。あとはbrew install
でコケないこと、たしかにruby_eval
、ruby_load
が使えるようになっていることを確認する。
brew edit
した結果はLibrary/Formula以下にある。そして今回の差分。
$ cd $(brew --repository)/Library/Formula
$ git diff
diff --git a/Library/Formula/groonga.rb b/Library/Formula/groonga.rb
index 66a643d..441bddc 100644
--- a/Library/Formula/groonga.rb
+++ b/Library/Formula/groonga.rb
@@ -28,7 +28,7 @@ class Groonga < Formula
--prefix=#{prefix}
--with-zlib
--disable-zeromq
- --with-mruby
+ --enable-mruby
--without-libstemmer
]
@@ -38,6 +38,7 @@ class Groonga < Formula
# ZeroMQ is an optional dependency that will be auto-detected unless we disable it
system "./configure", *args
+ system "make"
system "make install"
end
end
一つめのハンクがwith→enableの修正。二つめのハンクが今回のエラーの、とりあえずの回避策。