今年はメインで使っていたノートPCを気が触れてUbuntuにしたら快適かなぁとか思ってうっかりOSをクリーンインストールしたせいでn回(n>10)以上もOSをクリーンインストールすることになりました。
なんだかその都度OCaml環境を再構築していたので、段々手順を覚えてきたしそろそろ快適なOCaml環境を構築する方法みたいなものをまとめて他の人のフィードバックを頂きたいなぁとも思い、記事にまとめてみます。
主に僕が知り合いにここみてねという言う用と、フィードバックを貰いたいための記事です。
より良い方法をご存じの方がいらっしゃったらぜひ教えてくださいませ。
OSXへOCamlの開発環境をOPAMで構築し直した - tmaeda 日記(2012-10-28)
を参考にしていますが、4.01.0になりより楽な方法で構築できるようになってますので書き起こしておきます。
扱うのはEmacsを使う前提での、
- tuareg-mode Emacsでのファジーなocaml用メジャーモード
- OPAM パッケージ管理ソフト
- ocamlspot ソースコードで使っている関数やモジュールの定義元を参照するためのソースコード読解補助ツール
- spotinstall ocamlspotの補助ツール
- core 拡張標準ライブラリ
- utop より便利なREPL
のインストール・使い方・設定までです。
紆余曲折あってDebian7.3で環境構築します。
多分Debian系OSならば参考になるかも。
OCamlのインストール
まずはともあれOCamlのインストールを行いましょう。OPAMを使えば好きなバージョンを簡単に入れることができますが、OPAMをインストールするにもまずはOCamlがインストールされていることが必要です。
apt-get なりソースからビルドするなりお好きにどうぞ。
詳細は省きますが、4.01.0をインストールするのが後述するocamlspotとの連携のためおすすめです。
Tuareg-mode
何はともあれメジャーモード。色々ダウンロードする方法ありますが、簡単なのはapt-getで入れることでしょうか。
Emacs24はELPAを使って、M-x list-packageからダウンロードできます。
ちょっと標準のレポジトリに入っていたのか覚えてませんが、melpaかmarmaladeにはあったと思います。何のことかわからない人は、
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
と書いておくと幸せになれると思います。
OPAMのインストール
http:// opam.ocaml.org/doc/Quick_Install.html
を参考に各ディストリビューションごとにOPAMをインストールします。
Debianの場合はtestingのレポジトリを追加しておけば、apt-getでインストールできるようですね。Ubuntuの時と比べて楽ちんでした。まぁ1行端末で実行するだけなのですが。
レポジトリを追加についてはhttp://www.debian.or.jp/using/mirror.htmlを読んでください。
まぁ/etc/apt/sources.list に1行加えるだけです。jessieを僕は追加してました。
それが終われば、
su
apt-get install opam -y
でインストールできるはずです。
インストールできたら、opam initしましょう。
nomaddo@debian-note:~$ time opam init
default Downloading https://opam.ocaml.org/urls.txt
default Downloading https://opam.ocaml.org/index.tar.gz
Updating ~/.opam/repo/compiler-index ...
Updating ~/.opam/compilers/ ...
Updating ~/.opam/repo/package-index ...
Updating ~/.opam/packages/ ...
Creating a cache of metadata in ~/.opam/state.cache ...
In normal operation, OPAM only alters files within ~/.opam.
During this initialisation, you can allow OPAM to add information to two
other files for best results. You can also make these additions manually
if you wish.
If you agree, OPAM will modify:
- ~/.bashrc (or a file you specify) to set the right environment
variables and to load the auto-completion scripts for your shell (bash)
on startup. Specifically, it checks for and appends the following line:
. ~/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true
- ~/.ocamlinit to ensure that non-system installations of `ocamlfind`
(i.e. those installed by OPAM) will work correctly when running the
OCaml toplevel. It does this by adding $OCAML_TOPLEVEL_PATH to the list
of include directories.
If you choose to not configure your system now, you can either configure
OPAM manually (instructions will be displayed) or launch the automatic setup
later by running:
`opam config setup -a`.
Do you want OPAM to modify ~/.bashrc and ~/.ocamlinit?
(default is 'no', use 'f' to name a file other than ~/.bashrc)
[N/y/f] y
User configuration:
Generating ~/.ocamlinit.
Updating ~/.bashrc.
Global configuration:
Updating ~/.opam/opam-init/init.sh
auto-completion : [true]
opam-switch-eval: [true]
Updating ~/.opam/opam-init/init.zsh
auto-completion : [true]
opam-switch-eval: [true]
Updating ~/.opam/opam-init/init.csh
auto-completion : [true]
opam-switch-eval: [true]
読む限りbashの補完がきくようになる設定と、.ocamlinitが作られるという話ですかね。
OPAMの使い方はhttp://opam.ocaml.org/doc/Basic_Usage.html
などをみてください。基本的には、switch, install, list, removeくらい使えればいいと思います。
環境変数の設定の設定
次に、主にocamlspotを活用するために環境変数の設定をします。
これは意外に重要です。
export OCAMLPARAM="_,bin-annot=1"
export OPAMKEEPBUILDDIR=1
上のオプションは4.01.0以上で有効です。
.profileなり.bashrcなりに書いておきましょう。
詳細はocamlspotの配布サイト https://bitbucket.org/camlspotter/ocamlspot
に書いてあるとおりなのですが一応説明します。
OCAMLPARAMはocamlcやocamloptにデフォルトでオプションを付与するための変数です。これを設定しておくといちいちocamlc -bin-annotと書かなくてもオプションがついている扱いになります。
なお-bin-annotオプションをつけているとソースファイルをコンパイルする際cmtファイルが生成されます。これには型付き構文木の情報が含まれており、ocamlspotはこれを見てその下のソースの式の型や呼び出している関数や定数の参照元をたどることができます。
OPAMKEEPBUILDDIRは空でなければ、OPAMでインストールしたファイルのソースコードを残すオプションです。
OPAM上でOCamlのインストール
OPAMはOCamlの書くバージョンを独立してインストールし、それを切り替えることができます。
注意点としては、OPAMはソースベースのパッケージ管理システムなので問題が発生したら自分でログを読んで解決する必要があります。
例えばOPAMでインストールしたOCamlでgraphicsやlabltkが利用できないとか。
./configureのログを読んでみてください。tk.hやtcl.hがないと言われてないでしょうか。
(一回なんでだろーと僕もなりましてログ嫁と言われました。そうですよね…。)
nomaddo@debian-note:~$ opam switch 4.01.0
(中略)
# To complete the configuration of OPAM, you need to run:
eval `opam config env`
real5m41.465s
user4m32.937s
sys0m22.649s
nomaddo@debian-note:~$ eval `opam config env`
最後のevalは必ずしてください。evalするまでがインストールです。
ocamlspotのインストール
@camloebaさん開発の非常に便利なソースリーデイングの補助ツールであるocamlspotをインストールします。
これのインストールは経験上難しいことはないはずです。
nomaddo@debian-note:~$ time opam install ocamlspot
The following actions will be performed:
- install ocamlspot.4.01.0.2.2.0
1 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
=-=-= Installing ocamlspot.4.01.0.2.2.0 =-=-=
default Downloading https://opam.ocaml.org/archives/ocamlspot.4.01.0.2.2.0+opam.tar.gz
Downloading https://opam.ocaml.org/archives/ocamlspot.4.01.0.2.2.0+opam.tar.gz
Building ocamlspot.4.01.0.2.2.0:
make all opt install BINDIR=/home/ryohei/.opam/4.01.0/bin PREFIX=/home/ryohei/.opam/4.01.0
Installing ocamlspot.4.01.0.2.2.0.
real0m12.153s
user0m8.545s
sys0m1.092s
これが終わったらついでにEmacsの設定も書き足しておきましょう。
基本的にはhttps://bitbucket.org/camlspotter/ocamlspot
に書いてあるとおり移せばいいと思います。
僕は色々な環境でEmacsを使うので自分のDropboxのファイルに
~/.opam/4.01.0/lib/ocamlspot/ocamlspot.el
をコピーして、上の設定文を書き足しましょう。
また、
(setq ocamlspot-command "WHERE-YOU-HAVE-INSTALLED-THE-BINARIES/ocamlspot")
の部分には自分がインストールしたディレクトリのocamlspt.optを書いておくと良いかと思います。
で、どんなことが出来るのか触れておきます。画像をのように、
ソースコードを読んでいて、定義を確認したくなる時があると思いますが、
標準の設定では、C-c C-t('ocamlspot-type)でカーソルが指している先の型を表示させることが出来、C-c C-; で定義しているmlファイルを参照、C-c C-; でmliファイルを参照できます。
何度も言っていますがそのためには参照先にcmtファイルが存在して、同時にml,mliファイルが必要です。そのためにml,mliファイルを削除しない設定を前にしました。
spotinstallのインストール
ocamlspotの補助ツールであるspotinstallをインストールします。
上で述べたように、ml,mliファイルが有る場所にcmtファイルも存在する必要があるのですが、手でいちいちコピーするのは面倒なのでこのツールを使いましょう。
詳細はhttps://bitbucket.org/camlspotter/spotinstall にあります。
一応上で述べたOPAMのつまりどころであるソースベースのパッケージ管理システムであることを説明できる例である気がします。
これ多分まっさらのOSにインストールしようとするとエラーが出るんじゃないでしょかね。
nomaddo@debian-note:~$ opam install ocamlspot
The following actions will be performed:
- install ocamlspot.4.01.0.2.2.0
1 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
=-=-= Installing ocamlspot.4.01.0.2.2.0 =-=-=
default Downloading https://opam.ocaml.org/archives/ocamlspot.4.01.0.2.2.0+opam.tar.gz
Downloading https://opam.ocaml.org/archives/ocamlspot.4.01.0.2.2.0+opam.tar.gz
Building ocamlspot.4.01.0.2.2.0:
make all opt install BINDIR=/home/nomaddo/.opam/4.01.0/bin PREFIX=/home/nomaddo/.opam/4.01.0
Installing ocamlspot.4.01.0.2.2.0.
nomaddo@debian-note:~$ opam install spotinstall
The following actions will be performed:
- install ocamlfind.1.4.0 [required by spotinstall]
- install conf-libpcre.1 [required by spotinstall]
- install omake.0.9.8.6-0.rc1 [required by spotinstall]
- install pcre-ocaml.7.0.4 [required by spotinstall]
- install spotlib.2.1.2 [required by spotinstall]
- install orakuda.1.1.0 [required by spotinstall]
- install spotinstall.1.1.1
7 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
Do you want to continue ? [Y/n] y
=-=-= Installing conf-libpcre.1 =-=-=
Building conf-libpcre.1:
pkg-config libpcre
[ERROR] The compilation of conf-libpcre.1 failed.
Removing conf-libpcre.1.
=-=-= Installing ocamlfind.1.4.0 =-=-=
default Downloading https://opam.ocaml.org/archives/ocamlfind.1.4.0+opam.tar.gz
Downloading https://opam.ocaml.org/archives/ocamlfind.1.4.0+opam.tar.gz
Building ocamlfind.1.4.0:
./configure -bindir /home/nomaddo/.opam/4.01.0/bin -sitelib /home/nomaddo/.opam/4.01.0/lib -mandir /home/nomaddo/.opam/4.01.0/man -config /home/nomaddo/.opam/4.01.0/lib/findlib.conf
make all
make opt
make install
Installing ocamlfind.1.4.0.
=-=-= Installing omake.0.9.8.6-0.rc1 =-=-=
default Downloading https://opam.ocaml.org/archives/omake.0.9.8.6-0.rc1+opam.tar.gz
Downloading https://opam.ocaml.org/archives/omake.0.9.8.6-0.rc1+opam.tar.gz
Applying opam.patch.
Applying fam.patch.
Applying readline.patch.
Building omake.0.9.8.6-0.rc1:
make bootstrap PREFIX=/home/nomaddo/.opam/4.01.0
make all PREFIX=/home/nomaddo/.opam/4.01.0
make install PREFIX=/home/nomaddo/.opam/4.01.0
Installing omake.0.9.8.6-0.rc1.
=-=-= Installing spotlib.2.1.2 =-=-=
default Downloading https://opam.ocaml.org/archives/spotlib.2.1.2+opam.tar.gz
Downloading https://opam.ocaml.org/archives/spotlib.2.1.2+opam.tar.gz
Building spotlib.2.1.2:
ocaml setup.ml -configure --prefix /home/nomaddo/.opam/4.01.0
ocaml setup.ml -build
ocaml setup.ml -install
[ERROR] The compilation of spotlib.2.1.2 failed.
Removing spotlib.2.1.2.
ocaml setup.ml -uninstall
[ERROR] Due to some errors while processing { conf-libpcre.1, spotlib.2.1.2 }, the following actions will NOT proceed:
- install pcre-ocaml.7.0.4
- install orakuda.1.1.0
- install spotinstall.1.1.1
===== ERROR while installing conf-libpcre.1 =====
# opam-version 1.1.0
# os linux
# command pkg-config libpcre
# path /home/nomaddo/.opam/4.01.0/build/conf-libpcre.1
# compiler 4.01.0
# exit-code 1
# env-file /home/nomaddo/.opam/4.01.0/build/conf-libpcre.1/conf-libpcre-22002-dd682e.env
# stdout-file /home/nomaddo/.opam/4.01.0/build/conf-libpcre.1/conf-libpcre-22002-dd682e.out
# stderr-file /home/nomaddo/.opam/4.01.0/build/conf-libpcre.1/conf-libpcre-22002-dd682e.err
===== ERROR while installing spotlib.2.1.2 =====
# opam-version 1.1.0
# os linux
# command ocaml setup.ml -build
# path /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2
# compiler 4.01.0
# exit-code 1
# env-file /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2/spotlib-25099-0a5907.env
# stdout-file /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2/spotlib-25099-0a5907.out
# stderr-file /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2/spotlib-25099-0a5907.err
### stdout ###
# ...[truncated]
# --- Checking for ocamlfind... (found /home/nomaddo/.opam/4.01.0/bin/ocamlfind)
# --- Checking for ocamlc.opt... (found /home/nomaddo/.opam/4.01.0/bin/ocamlc.opt)
# --- Checking for ocamlopt.opt... (found /home/nomaddo/.opam/4.01.0/bin/ocamlopt.opt)
# --- Checking whether ocamlc understands the "z" warnings... (yes)
# --- Checking if ocamldep understands -modules... (yes)
# *** omake: finished reading OMakefiles (0.11 sec)
# - build lib gen_phantom.cmi
# + ocamlfind ocamlc -for-pack Spotlib -package unix,str -w A-4-9 -warn-error A-4-9 -annot -w Ae -g -I . -c gen_phantom.ml
# *** omake: 52/246 targets are up to date
# *** omake: failed (0.89 sec, 10/10 scans, 14/18 rules, 41/177 digests)
### stderr ###
# ...[truncated]
# *** omake: targets were not rebuilt because of errors:
# lib/gen_phantom.cmi
# depends on: lib/gen_phantom.ml
# lib/gen_phantom.cmo
# depends on: lib/gen_phantom.ml
# lib/gen_phantom.cmx
# depends on: lib/gen_phantom.ml
# lib/gen_phantom.o
# depends on: lib/gen_phantom.ml
# E: Failure("Command 'yes no | omake --install; PREFIX=/home/nomaddo/.opam/4.01.0 omake' terminated with error code 2")
The former state can be restored with opam switch import -f "/home/nomaddo/.opam/4.01.0/backup/state-20131126081534.export"
'opam install spotinstall' failed.
OPAMでインストールできる範囲であれば依存関係を解決してくれるようですが、その外のことに関してはOPAMは触れません。なので自力で解決してみます。
=-=-= Installing conf-libpcre.1 =-=-=
Building conf-libpcre.1:
pkg-config libpcre
[ERROR] The compilation of conf-libpcre.1 failed.
Removing conf-libpcre.1.
最初のエラーはこれですね。pkg-config libpcreが失敗するみたい。
これ単純にライブラリが入ってないだけですね。
rootになって、
apt-get install libpcre3-dev -y
で解決です。また実行してみます。
nomaddo@debian-note:~$ opam install spotinstall
The following actions will be performed:
- install spotlib.2.1.2 [required by spotinstall]
- install conf-libpcre.1 [required by spotinstall]
- install pcre-ocaml.7.0.4 [required by spotinstall]
- install orakuda.1.1.0 [required by spotinstall]
- install spotinstall.1.1.1
5 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
Do you want to continue ? [Y/n] y
=-=-= Installing conf-libpcre.1 =-=-=
Building conf-libpcre.1:
pkg-config libpcre
Installing conf-libpcre.1.
=-=-= Installing spotlib.2.1.2 =-=-=
Building spotlib.2.1.2:
ocaml setup.ml -configure --prefix /home/nomaddo/.opam/4.01.0
ocaml setup.ml -build
ocaml setup.ml -install
[ERROR] The compilation of spotlib.2.1.2 failed.
Removing spotlib.2.1.2.
ocaml setup.ml -uninstall
=-=-= Installing pcre-ocaml.7.0.4 =-=-=
default Downloading https://opam.ocaml.org/archives/pcre-ocaml.7.0.4+opam.tar.gz
Downloading https://opam.ocaml.org/archives/pcre-ocaml.7.0.4+opam.tar.gz
Building pcre-ocaml.7.0.4:
make
make install
Installing pcre-ocaml.7.0.4.
[ERROR] Due to some errors while processing spotlib.2.1.2, the following actions will NOT proceed:
- install orakuda.1.1.0
- install spotinstall.1.1.1
===== ERROR while installing spotlib.2.1.2 =====
# opam-version 1.1.0
# os linux
# command ocaml setup.ml -build
# path /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2
# compiler 4.01.0
# exit-code 1
# env-file /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2/spotlib-27644-58c514.env
# stdout-file /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2/spotlib-27644-58c514.out
# stderr-file /home/nomaddo/.opam/4.01.0/build/spotlib.2.1.2/spotlib-27644-58c514.err
### stdout ###
# ...[truncated]
# --- Checking for ocamlfind... (found /home/nomaddo/.opam/4.01.0/bin/ocamlfind)
# --- Checking for ocamlc.opt... (found /home/nomaddo/.opam/4.01.0/bin/ocamlc.opt)
# --- Checking for ocamlopt.opt... (found /home/nomaddo/.opam/4.01.0/bin/ocamlopt.opt)
# --- Checking whether ocamlc understands the "z" warnings... (yes)
# --- Checking if ocamldep understands -modules... (yes)
# *** omake: finished reading OMakefiles (0.08 sec)
# - build lib gen_phantom.cmi
# + ocamlfind ocamlc -for-pack Spotlib -package unix,str -w A-4-9 -warn-error A-4-9 -annot -w Ae -g -I . -c gen_phantom.ml
# *** omake: 52/246 targets are up to date
# *** omake: failed (0.79 sec, 10/10 scans, 14/18 rules, 41/175 digests)
### stderr ###
# ...[truncated]
# *** omake: targets were not rebuilt because of errors:
# lib/gen_phantom.cmi
# depends on: lib/gen_phantom.ml
# lib/gen_phantom.cmo
# depends on: lib/gen_phantom.ml
# lib/gen_phantom.cmx
# depends on: lib/gen_phantom.ml
# lib/gen_phantom.o
# depends on: lib/gen_phantom.ml
# E: Failure("Command 'yes no | omake --install; PREFIX=/home/nomaddo/.opam/4.01.0 omake' terminated with error code 2")
The former state can be restored with opam switch import -f "/home/nomaddo/.opam/4.01.0/backup/state-20131126082347.export"
'opam install spotinstall' failed.
次はspotlibのエラーですね。
spotlib単体でインストールしてみましょうか。
nomaddo@debian-note:~$ opam install spotlib
The following actions will be performed:
- install type_conv.109.53.02 [required by spotlib]
- install ounit.2.0.0 [required by spotlib]
- install pa_ounit.109.53.02 [required by spotlib]
- install spotlib.2.3.0
4 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
Do you want to continue ? [Y/n] y
=-=-= Installing ounit.2.0.0 =-=-=
default Downloading https://opam.ocaml.org/archives/ounit.2.0.0+opam.tar.gz
Downloading https://opam.ocaml.org/archives/ounit.2.0.0+opam.tar.gz
Building ounit.2.0.0:
make build
make install
Installing ounit.2.0.0.
=-=-= Installing type_conv.109.53.02 =-=-=
default Downloading https://opam.ocaml.org/archives/type_conv.109.53.02+opam.tar.gz
Downloading https://opam.ocaml.org/archives/type_conv.109.53.02+opam.tar.gz
Building type_conv.109.53.02:
make
make install
Installing type_conv.109.53.02.
=-=-= Installing pa_ounit.109.53.02 =-=-=
default Downloading https://opam.ocaml.org/archives/pa_ounit.109.53.02+opam.tar.gz
Downloading https://opam.ocaml.org/archives/pa_ounit.109.53.02+opam.tar.gz
Building pa_ounit.109.53.02:
make
make install
Installing pa_ounit.109.53.02.
=-=-= Installing spotlib.2.3.0 =-=-=
default Downloading https://opam.ocaml.org/archives/spotlib.2.3.0+opam.tar.gz
Downloading https://opam.ocaml.org/archives/spotlib.2.3.0+opam.tar.gz
Building spotlib.2.3.0:
ocaml setup.ml -configure --prefix /home/nomaddo/.opam/4.01.0
ocaml setup.ml -build
ocaml setup.ml -install
Installing spotlib.2.3.0.
なんかインストールできました。インストールしようとしている対象の依存関係は解決しようとしてくれるけど、その対象の依存先の依存先はチェックしてくれないみたいですね。
またopam install spotinstallします。
nomaddo@debian-note:~$ opam install spotinstall
The following actions will be performed:
- install orakuda.1.1.0 [required by spotinstall]
- install spotinstall.1.1.1
2 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
Do you want to continue ? [Y/n] y
=-=-= Installing orakuda.1.1.0 =-=-=
default Downloading https://opam.ocaml.org/archives/orakuda.1.1.0+opam.tar.gz
Downloading https://opam.ocaml.org/archives/orakuda.1.1.0+opam.tar.gz
Building orakuda.1.1.0:
ocaml setup.ml -configure --prefix /home/nomaddo/.opam/4.01.0
ocaml setup.ml -build
ocaml setup.ml -install
Installing orakuda.1.1.0.
=-=-= Installing spotinstall.1.1.1 =-=-=
default Downloading https://opam.ocaml.org/archives/spotinstall.1.1.1+opam.tar.gz
Downloading https://opam.ocaml.org/archives/spotinstall.1.1.1+opam.tar.gz
Building spotinstall.1.1.1:
ocaml setup.ml -configure --prefix /home/nomaddo/.opam/4.01.0
ocaml setup.ml -build
ocaml setup.ml -install
Installing spotinstall.1.1.1.
というわけでインストールできました。意外と大変ですね。
spotinstallはOPAMを通してインストールしたライブラリの、オブジェクトファイルがある場所に上で述べたcmtファイルなど必要なファイルをコピーするためのツールです。
(オブジェクトファイルの場所にcmtファイルがないとspotが探せないのです)
使い方は簡単で、~/.opam/xxx/build/ にいるときにspotinstallを実行するだけです。
自動的にこのツールがcmtファイルの場所やら措くべき場所やらを探してくれます。
Core のインストール
Janestreeが開発した拡張標準ライブラリであるcoreをインストールします。
これはコマンドを叩くだけです。ちょっと時間かかりますが。
nomaddo@debian-note:~/.opam/4.01.0/build$ time opam install core
The following actions will be performed:
- install bin_prot.109.53.02 [required by core]
- install sexplib.109.55.02 [required by core]
- install pa_bench.109.55.02 [required by core]
- install comparelib.109.27.02 [required by core]
- install fieldslib.109.20.02 [required by core]
- install variantslib.109.15.02 [required by core]
- install herelib.109.35.02 [required by core]
- install pipebang.109.28.02 [required by core]
- install res.4.0.4 [required by core]
- install typerep.109.55.02 [required by core]
- install custom_printf.109.27.02 [required by core]
- install core_kernel.109.55.02 [required by core]
- install pa_test.109.53.02 [required by core]
- install core.109.55.02
14 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
Do you want to continue ? [Y/n] y
(中略)
real 8m13.326s
user 6m9.695s
sys 1m9.048s
ひと通り使うライブラリも揃ったので、~/.opam/4.01.0/build/
でspotinstallを実行してみましょう。長いので省略しますが、基本的には何やってるかはログを読めばわかるはずです。多分。
cmtファイルがコピーされた旨表示されるはずです。
また、同時に標準ライブラリにジャンプできるようにOCaml4.01.0をソースからビルドして、cmtファイルを/.opam/4.01.0/lib/ocamlのファイルにコピーしておくことをおすすめしますー。
utopのインストール
より便利なOCamlの対話環境であるutopをインストールしましょう。
これもラクラクなはずです。
nomaddo@debian-note:~/.opam/4.01.0/build$ time opam install utop
The following actions will be performed:
- install camomile.0.8.5 [required by utop]
- install react.0.9.4 [required by utop]
- install zed.1.2 [required by utop]
- install lwt.2.4.4 [required by utop]
- install lambda-term.1.5 [required by utop]
- install utop.1.10
6 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove
Do you want to continue ? [Y/n] y
(中略)
real2m16.779s
user1m32.462s
sys0m16.433s
で、これをEmacsから利用するために
./build/utop.1.10/src/top/utop.el をEmacsからautoloadする必要があります。
(無ければfindか何かで探してみてください)
僕はもう面倒なので自分のelispファイルにコピーして、
(autoload `utop "utop" "Toplevel for OCaml" t)
これで終わりです。EmacsからM-x utopで呼び出せるようになります。
一応言及しておくと、utopは通常のM-x shellからは使えません。
どんな風になるか画像を貼っておきます。
素晴らしいことに、関数や定数の補完がきくんですね。
それもOPAMからダウンロードした追加ライブラリに対してもです。
utopを使えば新しいライブラリを試しててみるのも楽になるのかなぁと思います。
やや呼び出しが遅いのが難点ですけどね。
あ、utopは端末エミュレータから呼び出すとよりグラフィカルに表示されて楽しいです。
.ocamlinitの設定
別のマシーンを使ってる時は勝手に設定されたのですが、便利だろう設定を.ocamlinitに書いておくことが出来ます。これはREPLを呼び出すときに最初に読み込まれるファイルです。オススメは
#use "topfind"
と書いておくことです。これにより最初にtopfindが呼び出され 、ライブラリをロードするのが楽になります。
最初にこんな風に表示されます。
これにより、#require packageで簡単にライブラリのロードが出来ます。
#load "file_dir&name" と直接名前をしてしなくていいわけですね。またいっぺんに色々なファイルを呼び出してくれるようになります。
Coreを常用する人は上の設定に、#require "core"などと書いておくと便利かもしれません。
パッケージの名前を調べる時は#list と打ち込んでください。
端末でopam listでも確認できます。
おわり
これで終わりです。一応何もわからない人にセットアップ方法を説明するために書いたので馬鹿丁寧に説明文を書きました。
使い方を教えて頂いた@camloebaさん有難う御座いましたー。
いっぱい質問させていただきました。
TyperexやOMakeも便利そうなのですが、使えてないので紹介は控えました。
参考: