YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

OCaml Batteries includedを使っていろいろ楽をしようとしたらビルドではまった

はじめに

フーテミッターフ(こんにちは)、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