Building the Gnuplot on Snow Leopard

Snow Leopardと呼ばれているMac OS X 10.6をインストールしました。今回のリリースはLeopardMac OS X 10.5から大きく変更されることはないだろうという予想の元、アップグレードインストールをしようかと考えていたのですが、結局スクラッチからインストールしました。

先日のエントリで記載したように、リリース直後現在では少なくともEmacsCocoa/Carbon版双方共にビルド出来ないようです。

Emacsに関してはMac OS X10.5でビルドしていたバンドルをコピーすることで難を逃れました。バンドル化されたアプリケーションはこのようなOSのメジャーアップグレードの際になかなか堅牢かもしれないな、と思いました。

追記(2009/10/27)

Snow Leopardにて、Cocoa Emacsのビルドが出来るようになったようです


さて、今回のエントリではMac OS X 10.6にてGnuplotをビルドする方法です。Mac OS X 10.5にてGnuplotをビルドした際には何ら苦労した覚えがないのですが、Mac OS X 10.6にてGnuplotをビルドするのには小一時間ほど悩まされましたため、これを記載しておこうと思います。

Gnuplotのビルドを行う前に、まずGNU Readline Libraryをインストールしておきましょう。使用したtarボールは現時点での最新である、readline-6.0.tar.gzです。

> tar zxvf readline-6.0.tar.gz
> cd readline-6.0.tar.gz
> ./configure
> make
> sudo make install

以上でインストール完了です。補説となりますが、Mac OS X 10.6にインストールされているReadline Libraryは、Mac OS X 10.5時代と同様に、GNU Readline Libraryと完全互換ではないようです。そのため、GNU Readline Libraryを別途インストールしない場合、Gnuplotのmake時にリンクエラーで終了します。

> make
                                    :
g++  -g -O2   -o gnuplot alloc.o axis.o breaders.o bitmap.o color.o command.o contour.o datafile.o dynarray.o eval.o fit.o gadgets.o getcolor.o graph3d.o graphics.o help.o hidden3d.o history.o internal.o interpol.o matrix.o misc.o mouse.o parse.o plot.o plot2d.o plot3d.o pm3d.o readline.o save.o scanner.o set.o show.o specfun.o standard.o stdfn.o tables.o term.o time.o unset.o util.o util3d.o variable.o version.o   -lreadline  -lncurses  -lz   
Undefined symbols:
  "_rl_ding", referenced from:
      _alert in mouse.o
  "_history_list", referenced from:
      _write_history_list in history.o
  "_rl_complete_with_tilde_expansion", referenced from:
      _main in plot.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[3]: *** [gnuplot] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2


さて、Gnuplotのビルドを開始しましょう。使用したtarボールは現時点の最新版である、gnuplot-4.2.5.tar.gzです。

GnuplotにてGNU Readline Libraryを有効にするには、configureに--with-readline=gnuを指定します。このオプションによってGNU Readline Libraryを使用することを明示しない場合、予めGNU Readline Libraryをインストールしていたとしても、Mac OS X 10.6にインストールされているReadline Libraryをリンクしようとするため、注意が必要です。

また、デフォルトでGnuplotEmacs Lispのバイトコンパイルを行いますが、Mac OS X 10.6にインストールされているEmacsではバイトコンパイルに失敗してしまうようです。これもconfigureに--without-lisp-filesを指定して抑制します。

> tar zxvf gnuplot-4.2.5.tar.gz
> ./configure --with-readline=gnu --without-lisp-files
> make
> sudo make install


これでインストールは完了...と思いきや、問題が発生しました。X11を起動しているにも関わらず、プロットした結果が表示されません。よく見ると、Gnuplotの起動時に以下のようなメッセージが出力されていました。

Terminal type set to 'unknown'

はて、何故デフォルトの端末がunknownなんだろう、不思議だなと思い、用意されている端末を確認しました(Gnuplotインタラクティブシェルからset terminalとします)。驚くことに、x11端末が見つかりませんでした。

先ほどのconfigureのサマリを再確認するに、確かにX Windowの端末サポートが無効になっていました。

  X Window System terminal: no (requires X libraries)

ああ、Mac OS X 10.6ではX11のヘッダとライブラリが移動してしまったのかと思い、/usr/include/X11と/usr/X11/libを確認してみましたが、存在している様子です。理由は分かりませんが、configureがこれらヘッダとライブラリの位置を特定出来ないようです。そのため、configureにディレクトリ群を明示的に指定しました。

> ./configure \
    --with-readline=gnu \
    --x-include=/usr/include/X11 \
    --x-libraries=/usr/X11/lib \
    --without-lisp-files
                         :
  x11/xlib terminal: yes (with mouse support)
    (with multi-byte fonts)
    (with binary polygon protocol (EXPERIMENTAL))
                         :

どうやら、無事X11のヘッダとライブラリを認識してくれたようです。makeおよびmake installしてから起動してみます。

Terminal type set to 'x11'

プロットの結果も無事X11経由のウィンドウにて表示されるようになりました。

まとめ

  • GnuplotのconfigureはMac OS X 10.6にインストールされているX11のヘッダとライブラリを自動認識しない。そのため、configureに明示的に指定する
  • configureはデフォルトでMac OS X 10.6にインストールされているReadline Libraryをリンクしようとする。そのため、configureにGNU Readline Libraryを使用することを明示的に指定する
  • Mac OS X 10.6にインストールされているEmacsGnuplotに内包されているLispをバイトコンパイル出来ない。そのため、configureにて明示的に抑制する


今回のエントリではMac OS X 10.6、Snow LeopardにてGnuplotをビルドする際の注意点を記載しました。X11が認識されない件はGoogleを検索しても有益な情報に行き当たらず少々焦りましたが、解決法が見つかって良かったです。