はじめに
フーテミッターフ(こんにちは)、Python界の100万回生きたねこです。最近はありがたいもので色々なライブラリがLinuxでもMac OS Xでもビルド出来るようになっていますね。でもたまーにハマってなかなか動かないってことがあると思うんですが、今回OCaml Batteries includedのビルドではまったんでメモ。
準備
OCaml batteries includedの取得先は下記。それぞれプロジェクト本家とGitHubのレポジトリ。
依存ライブラリはREADME.mdに書いてあります。
自分の手元の環境では
- findlib 1.2.6
- Camomile 0.8.1
- OUnit 1.1.0
- make 3.81
ビルド
環境変数の設定
Mac OS Xだと共有ライブラリを作成するときにエラーがでるので、共有ライブラリを作成しないオプションを設定する。
% export BATTERIES_NATIVE_SHLIB=false
Makefileの修正
テストしないっていうならこれでいいんだけど、ちゃんとテストで確認したい場合に使っているshellによってはMakefileを修正しないといけない。*1自分の環境は次のとおり。
% echo $SHELL /opt/local/bin/zsh % /opt/local/bin/zsh --version zsh 4.3.11 (i386-apple-darwin10.6.0)
どういうエラーが出たかというと、echoが-nオプションを受け付けず、結果出力がおかしくなるという問題。こんな感じ。
... - Failed to build all of these: - Building libs/estring/-n.cmo - Building libs/estring/-n.cmo: ...
なのでビルトインコマンドの方ではなく/bin/echoを使う。(バグ登録はしたので最新版は対応しているが、1.3.0のtarballでは修正の必要あり。)
#put all the testing modules in a library qtest/test_mods.mllib: $(TESTABLE) - echo -n "Quickcheck Tests \c" > $@ + /bin/echo -n "Quickcheck Tests \c" > $@ echo $(patsubst src/%.ml,%_t, $(TESTABLE)) >> $@
あるいは-nオプションを使わないでもいい。(2011.03.03時点での最新はこのような修正になっている)
#put all the testing modules in a library qtest/test_mods.mllib: $(TESTABLE) - echo -n "Quickcheck Tests \c" > $@ + /bin/echo "Quickcheck Tests \c" > $@ echo $(patsubst src/%.ml,%_t, $(TESTABLE)) >> $@
ビルド
1.3.0のtarballではビルド時のtestコマンドが make test qtest となっていてレポジトリ最新版と異なるので注意。
% make all cp -f src/batCamomile-0.8.1.ml src/batCamomile.ml test ! -e src/batteries_config.ml || rm src/batteries_config.ml ocamlbuild syntax.otarget byte.otarget src/batteries_help.cmo META native.otarget Finished, 1 target (0 cached) in 00:00:00. Finished, 478 targets (0 cached) in 00:00:43. % make test test # 自分は最新版を使っている ... Ran: 85 tests in: 1.02 seconds. OK make: Nothing to be done for `test'. % make install ... Installed /opt/ocaml/3.11.2/lib/site-lib/batteries/batteries_uni.cma Installed /opt/ocaml/3.11.2/lib/site-lib/batteries/batteries.cma Installed /opt/ocaml/3.11.2/lib/site-lib/batteries/META
無事インストール完了。
参考
*1:masterブランチでda60182339ae368f4480のコミット時に対応済み。2011.03.03