macOS CatalinaでのHomebrewとSBCL

先日macOS Catalinaがリリースされたので早速macOS MojaveからアプデしてみたところSBCLが動作しなくなった問題が起きたのでその解決策を簡単にメモとして残しておく。

問題

macOSをアプデしてからターミナルで sbcl と叩いてみたところ以下のようなデバッグメッセージを吐いてSBCLが立ち上がらない。

f:id:komi1230:20191009210507p:plain
SBCL起動失敗

ちなみにCLISPはちゃんと動いてる模様。

対策1

まずやったことはコマンドラインツールのアプデ。

macOSがアプデされてもコマンドラインツールはまた別途で自分でやらなきゃいけないらしい(OSのアプデと同時に一緒にやってくれよとか思ってしまう)

$ xcode-select --install
$ softwareupdate --install --all

ちなみにxcode-selectsoftwareupdateなどのコマンドは/usr/bin//usr/sbin/にパスが通ってないと動かないので注意。

ちなみにこれらはやってみたけどSBCLは動かなかった。

対策2

Homebrewで配布しているバイナリはmacOS Mojaveでコンパイルされたもので、どうやらそれがCatalinaでは動作しないようなのでリポジトリを丸ごと持ってきて手元でビルドしてみることに。

www.sbcl.org

ここからソースコードをダウンロードしてくるかGitHubから持ってくる。

github.com

あらかじめHomebrewで入ってるSBCLは動かないので抜いておく。

$ brew uninstall sbcl

そうしてこの中のディレクトリに入ってビルドしてみる。

ちなみにビルドの仕方はINSTALLに書いてある。

$ cd [リポジトリへのパス]
$ sh make.sh

さて、これで大丈夫かと思いきやビルドには古いSBCLのバイナリが必要だという...

Homebrewで配布しているバイナリは動かないのでさあ困った。

対策3

詰んだかなぁと萎えてたらRoswellの作者の佐野さんから助け舟がきた。

そういやRoswell上でSBCL動いてたなってことで、とりあえずRoswellでの動作を確認。

$ brew install roswell
$ ros run

ここでSBCLがちゃんと動くことが確認できた。佐野さんマジ神。感謝。

じゃあRoswellのSBCLのバイナリをローカル環境にインストールすればいいや、と。

~/.roswellに入って色々探してるとビルドのためのスクリプトを発見。

$ cd ~/.roswell/src/sbcl-1.5.7-x86-64-darwin/
$ sh install.sh

これで/usr/local/bin/SBCLが入った。

動作を確認してみる。

f:id:komi1230:20191009212641p:plain
SBCLが動いてる様子

ちゃんと動いてるのでどうやらオッケーらしい。

まとめ

一応これでSBCLが今後とも使えるようになったので大丈夫なんだけれども、未だに残る問題というか謎としてMojaveからCatalinaにOSが変わったおかげでなんかしらの変更があり一部のバイナリについては後方互換性がなくなっているということ。

ちなみにPythonやnode、Julia、Rust(rustc, cargo)、ClojureなどはCatalinaになっても問題はなさそう。

もしかして今回はSBCLだけの問題なのかもしれないけど、macOSのアプデでなんかしらが変わっているらしい。

うーん、謎。

とりあえず動いてるので当面の間は問題なさそうだけど、問題が起きたらそのときまた別途でトラブルシューティングすればいいかな。

それではお疲れ様でした。