opamを導入してみた・・・ら大変だった

OCamlにおけるパッケージマネージャのスタンダードとなりつつあるopamを、そろそろ導入してみようかと思いましたので、導入してみました。
が、どうにも上手くいかなかったので、誰かが困っているといけないので、とりあえずの回避方法をメモっておきます。

いや、forkしてpull requestすればいいじゃんと、言われればそれまでですが、どうも問題がダウンロード先にあるようなものだったので・・・。

opamのインストール

opamはGithubで公開されています。どっちかというとbrewみたいなもんでしょうか。ソースベースというのもそれっぽいですし。
https://github.com/OCamlPro/opam

さて、実際にはすでにインストールのためのスクリプトが用意されているので、それを実行すればいいです。

wget https://raw.github.com/OCamlPro/opam/master/shell/install.sh && sh ./install.sh

Quick installと書かれているとおり、git cloneからconfigure、makeまで全部やってくれます。

・・・が、ここで私は落ちました。なんでかを調べてみると、以下の外部パッケージがtarで解凍できないためでした。

  • cudf
  • dose

どっちもINRIAforceというところから落としてきていましたが、実際にブラウザでリンクを踏んでみると、バイナリ文字列が画面いっぱいに・・・。text/htmlで要求して、text/htmlで返ってきてました。どうもサーバー側の設定ミス?っぽいです。
なのでこれはどうしようもない、ということで、Makefileをちょっと書き換えて、必要なものをcloneしてくることにしました。

Makefileの差分はこんなところです。

% git diff
diff --git a/src_ext/Makefile b/src_ext/Makefile
index 29a9dc6..4c0e0ba 100644
--- a/src_ext/Makefile
+++ b/src_ext/Makefile
@@ -7,13 +7,7 @@ depends.ocp: depends.ocp.boot

 clone: cudf.stamp extlib.stamp ocaml-re.stamp ocamlgraph.stamp dose.stamp cmdli
ner.stamp

-cudf-0.6.3.tar.gz:
-       $(FETCH) -k https://gforge.inria.fr/frs/download.php/31543/cudf-0.6.3.ta
r.gz
-
-cudf.stamp: cudf-0.6.3.tar.gz
-       tar xfz cudf-0.6.3.tar.gz
-       rm -rf cudf
-       mv cudf-0.6.3 cudf
+cudf.stamp:
+       git clone git://scm.gforge.inria.fr/cudf/cudf.git
        @touch $@

 extlib-1.5.3.tar.gz:
@@ -33,13 +27,7 @@ dose3-git:
          git clone --depth 1 git://scm.gforge.inria.fr/dose/dose.git dose; \\
        fi

-dose3-3.1.2.tar.gz:
-       $(FETCH) https://gforge.inria.fr/frs/download.php/31595/dose3-3.1.2.tar.
gz
-
-dose.stamp: dose3-3.1.2.tar.gz
-       tar xfz dose3-3.1.2.tar.gz
-       rm -rf dose
-       mv dose3-3.1.2 dose
+dose.stamp:
+       git clone git://scm.gforge.inria.fr/dose/dose.git
        @touch $@

 cmdliner-0.9.2.tbz:

後は、opamディレクトリに戻ってmakeするだけです。上手くいけばOKです。

cd ../
make
sudo make install

後は、色々なところで紹介されているようにやっていけば大丈夫・・・だと思います。絶賛開発中なので、毎日のように色々と修正が入っているようです。私もこれからopamを使っていこうかと思います。まずはMacにもこれを導入するところからですが。