2014年1月21日火曜日

[OCaml]グラフィックライブラリLablGtkを試してみる(2) - Canvasのサンプルを実行する

Canvasを使いたい。
ということでlablgtkのソースに含まれるexaplesディレクトリを調べてみると、あった!

$ cd lablgtk-2.18.0/examples/canvas
$ ls

canvas-arrowhead.ml  canvas-features.ml  canvas-primitives.ml  flower.png
canvas-curve.ml      canvas-fifteen.ml     canvas-richtext.ml    toroid.png

とりあえず、canvas-curve.mlを試してみる。
$ lablgtk2 canvas-curve.ml
File "canvas-curve.ml", line 21, characters 4-19:
Error: Unbound module GnoCanvas

GnoCanvasというモジュールが必要なようだ。
opamで探してみる。
$ opam search GnoCanvas
[ERROR] No packages found.
'opam search GnoCanvas' failed.

ない...
それでは、canvasだとどうかな?
$ opam search canvas
Available packages for system:
conf-gnomecanvas  --  Virtual package relying on a Gnomecanvas system installation.
vg                --  Declarative 2D vector graphics for OCaml

あった!
conf-gnomecanvas をインストールすれば良さそうだ。

$ opam install conf-gnomecanvas
〜略〜
[ERROR] The compilation of conf-gnomecanvas.2 failed.
Removing conf-gnomecanvas.2.
〜略〜
===== ERROR while installing conf-gnomecanvas.2 =====
# opam-version 1.1.0
# os           linux
# command      pkg-config libgnomecanvas-2.0
〜略〜

とエラーが出た。
メッセージを良く見ると、libgnomecanvas-2.0が必要なのかな?

$ dpkg --list | grep libgnome
ii  libgnome-keyring-common              3.4.1-1                            all          GNOME keyring services library - data files
ii  libgnome-keyring0:i386               3.4.1-1                            i386         GNOME keyring services library

確かにそんなライブラリはインストールしていない。

$ apt-cache search libgnomecanvas2
libgnomecanvas2-common - powerful object-oriented display engine - common files
libgnomecanvas2-dev - powerful object-oriented display engine - development files
libgnomecanvas2-doc - powerful object-oriented display engine - documentation files
libgnomecanvas2-0 - パワフルなオブジェクト指向表示エンジン - ランタイムファイル
libgnomecanvas2-dbg - パワフルなオブジェクト指向ディスプレイエンジン - デバッグシンボル
libgnomecanvasmm-2.6-1c2a - libgnomecanvas2 の C++ 版ラッパー (共有ライブラリ)
libgnomecanvasmm-2.6-dev - libgnomecanvas2 の C++ 版ラッパー (開発用ファイル)
libgnomecanvasmm-2.6-doc - libgnomecanvas2 の C++ 版ラッパー (ドキュメンテーション)

libgnomecanvas2-devをインストールする。
$ sudo apt-get install libgnomecanvas2-dev

再度、conf-gnomecanvasをインストールする。
$ opam install conf-gnomecanvas

今度は成功だ。
試してみる。
$ lablgtk2 canvas-curve.ml
zsh: command not found: lablgtk2

おや?lablgtk2コマンドがなくなった。
もう一回、lablgtkをインストールしよう。
$ opam install lablgtk2

インストール完了後、再度実行だ。
$ lablgtk2 canvas-curve.ml
File "canvas-curve.ml", line 1:
Error: Reference to undefined global `GnoCanvas'

うーむ。GnoCanvasが見えない(のか無いようだ)。
探してみる。

$ cd .opam
$ find ./ -name 'gno*'

./system/lib/lablgtk2/gnomeCanvas.ml
./system/lib/lablgtk2/gnoCanvas.mli
./system/lib/lablgtk2/gnoCanvas.cmx
./system/lib/lablgtk2/gnoDruid.mli
./system/lib/lablgtk2/gnoCanvas.cmi
./system/lib/lablgtk2/gnoCanvas.ml
./system/lib/lablgtk2/gnomeCanvas.cmi
./system/lib/lablgtk2/gnomeCanvas.cmx

ちゃんとファイルはあるなぁ。ライブラリパスの設定がまずいのか?
どう設定するのだろう。

lablgtk2のソースを見てみると、
$ lv `which lablgtk2`
〜略〜
    echo "Usage: lablgtk2 <options> <ocaml options> [script-file]"
    echo "  -thread   use the threaded version of the toplevel"
    echo "  -all      load all extensions"  ←◆これ
    echo "  -noinit   do not initialize gtk"
    echo "  -localdir use libraries in the same directory (before install)"
    echo "  -verbose  show actions executed"

おっと。-all が使えそうだ。

$ lablgtk2 -all canvas-curve.ml

やっと、動いたー!


Awesomeというタイル型のウィンドウマネージャを使っているので、余白が多いのかも。
他のウィンドウマネージャを使えば、相応のウィンドウサイズで表示されるはず。