Snow Leopard で Common Lisp (SBCL編)

Snow Leopard に,MacPortsでまだ対応していない Common Lisp 処理系をインストールする方法についてメモしておきます.

1.0.29版バイナリのインストール

SBCL の公式サイトでは OS X に対応した 1.0.29 版のバイナリが配布されていますので,まずはこれをインストールします.この版は Snow Leopard でも一応動きます.デフォルトのインストール先は /usr/local になりますが,別の場所にしておきます.ここでは配布物の置き場所を /opt/src, インストール先を /opt/sbcl-1.0.29 とし,以下のコマンドを実行しました.必要なら適当に sudo を補ってください.初めてSBCLをインストールするのであれば環境変数 SBCL_HOME の除去は不要です.

mkdir -p /opt/src
cd /opt/src
wget http://prdownloads.sourceforge.net/sbcl/sbcl-1.0.29-x86-darwin-binary-r2.tar.bz2
tar xvjf ../tmp/sbcl-1.0.29-x86-darwin-binary-r2.tar.bz2
cd sbcl-1.0.29-x86-darwin
unset SBCL_HOME
INSTALL_ROOT=/opt/sbcl-1.0.29 sh install.sh

これで1.0.29版が使えるようになるはずです.環境変数 SBCL_HOME を以下のようにセットして実行します.

$ export SBCL_HOME=/opt/sbcl-1.0.29/lib/sbcl
$ /opt/sbcl-1.0.29/bin/sbcl
This is SBCL 1.0.29, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
* 

CVS版のビルドとインストール

1.0.29版でもいいのですが,開発者メーリングリストをみると新しい方が10.6でのバグもなくてよさそうです.そこで次に最新版(CVS版)のソースコードを取得し,これを1.0.29版を使ってビルドします.インストール先は /opt/sbcl-cvs とし,以下のコマンド列でインストールしました.ここでは SBCL_HOME の除去が必要です.

cd /opt/src
cvs -d:pserver:anonymous@sbcl.cvs.sourceforge.net:/cvsroot/sbcl login 
cvs -z3 -d:pserver:anonymous@sbcl.cvs.sourceforge.net:/cvsroot/sbcl co -P sbcl
cd sbcl
export SBCL_HOME=/opt/sbcl-1.0.29/lib/sbcl
sh make.sh /opt/sbcl-1.0.29/bin/sbcl
(cd tests && sh run-tests.sh)
(cd doc/manual && make)
unset SBCL_HOME
INSTALL_ROOT=/opt/sbcl-cvs sh install.sh
sh clean.sh

実は run-tests.sh でいくつか失敗が報告されますが,致命的なものではありません.実際にいくつかのプロジェクトで使っていますが,いまのところ問題はないようです.

以上でインストール終了です.環境変数 SBCL_HOME を /opt/sbcl-cvs/lib/sbcl にセットし,/opt/sbcl-cvs/bin をパスに入れておきます.念のためこれで再度CVS版のソースをビルドしてみましたが,問題なくできました.1.0.29版は不要ですので消去してもかまいません.

(追記) 1.0.33版が出ました

この記事を書いている間に1.0.33版のアナウンスがありました.

基本的には現時点でのCVS版と変りません.まだMac用のバイナリは用意されていないようですが,この記事同様に1.0.29を使ってビルドすることだできます.ソースコードはこちらからダウンロードできます.

この版に対応した MacPorts のPortファイルを作るのも難しくはないでしょう.

(追記) スレッドを使うための準備

書き忘れましたが,OSX-Intel 版のSBCLでスレッドを使うためには,以下のような内容の customize-target-features.lisp というファイルを配布ディレクトリのトップに置いてからビルドします.

(lambda (features)
  (when (and (member :darwin features)
             (or (member :x86 features)
                 (member :x86-64 features)))
    (pushnew :mach-exception-handler features)
    (pushnew :sb-thread features)
    (pushnew :sb-lutex features)
    )
  features)