OCamlのパッケージマネージャOPAMを試してみた
この記事は完全に古くなっています。他をあたってください。
OCamlのライブラリインストールは毎回本当に苦行なので期待が高まる。
基本、
https://github.com/OCamlPro/opam
ここにあるとおりにやればいい。
が、微妙に書いてない事とかあったのでメモ。
インストール
$ git clone git://github.com/OCamlPro/opam.git $ cd opam $ ./configure --prefix=$HOME/local # 適当な場所に $ make $ make install $ opam init $ eval `opam config -env`
注意: OCamlのバージョンが3.12.0以上である必要がある(多分)
3.11.2だと出たエラー
Fatal error: unknown C primitive `unix_setgroups'
あと、
opam init failed. Run.process_error(_,1,_,_,1)
とか出たら、mkdir -p ~/.opam/repo/defaut && touch ~/.opam/repo/default/urls.txt すると動くかもしれない。
opam switch
$ opam switch -list $ opam switch -install 4.00.0 $ opam switch -install 3.12.1 $ opam switch 4.00.0 $ eval `opam config -env`
注意(?): opam switch system; ocaml すると,
Fatal error: cannot load shared library dllunix Reason: /home/kfujima/local2/lib/ocaml/stublibs/dllunix.so: undefined symbol: caml_debugger_fork_mode
とか言って死ぬ。原因不明
opam install
ライブラリのインストール
$ opam list $ opam install batteries
urls.txt does not exist. って言われたら、touch ~/.opam/repo/default/urls.txt すると動くかもしれない。
試しにbatteriesを使ってみる。
open Batteries_uni let () = (1--999) |> Enum.filter (fun i -> i mod 3 = 0 || i mod 5 = 0) |> Enum.reduce (+) |> Int.print stdout
$ ocamlfind ocamlc -package batteries -linkpkg test.ml
...だと動かなかったので(多分自分だけ? ocamlfind listの表示が古かったりしておかしい -> 追記: 別のマシンでは上のコマンドで動いた。)
$ ocamlc -I .opam/4.00.0/lib/batteries/ -I .opam/4.00.0/lib/camomile/ nums.cma bigarray.cma unix.cma str.cma camomile.cma batteries_uni.cma test.ml
とりあえずこれで動いたのでインストールできてるのは間違いない。
まとめ
rvm+rubygems的なゆるふわさが実現されてる気がする。