ソースコードからインストールする際、一般的には "configure" をして設計図である "Makefile" を作り、それに基づいて "make" をして、インストール可能な形に整形したのち "make install" するということになる。ところが、中には特別な操作をしてやらないと一筋縄ではインストールできないものもあって、Mac OS X においては、Libjpeg などはその代表格である。
"マックの道具箱"としては、コンパイルの雰囲気を知っておくためにちょうど良い例だと思われるので Libjpeg については最初にチョットふれておくことにしたい。
まず、 libjpeg ダウンロード から、"jpegsrc.v6b.tar.gz" をダウンロードしてデスクトップに展開すると、"jpeg-6bフォルダ" ができあがる。さっそくひらいて中身を見てみよう。
さて、上の図をご覧いただきたい。説明に必要なファイルが表示されるようにファイルの順番を変えてあるので、以下の説明はこの図をご覧になりながら読んでいただきたい。まずは、開発元提供のインストールの解説である "install.doc" から。エディタでひらいてみると。。アーっとオ〜ドロく、ターメゴロ〜っと。。。。って、年がバレるか。
Copyright (C) 1991-1998, Thomas G. Lane.
This file is part of the Independent JPEG Group's software.
For conditions of distribution and use, see the accompanying README file.
などと書いてある。あまりにも古すぎだよ! オープンソースだから開発者には深〜く感謝はしているのだが、いやはや。。。
続けてよくよく読んでみると"makeproj.mac"という"makefile"がついている。ソースコードからインストールする際には、 "configure" をして、設計図である "Makefile" を作り、それに基づいて "make" をし、インストール可能な形に整形したのち、"make install"すると書いたのだが、"makefile" が元から用意されている場合には、『整形(make)してから、インストール(make install)する』だけですむ。
実際、 PNG 形式の画像を処理するライブラリ libpng の場合には、"makefile.darwin"という名前の Mac OS X で使える "Makefile" がちゃんと用意されていて、本当に『整形(make)してから、インストール(make install)する』だけですんでしまう。もっとも "Makefile" の記述は多少書き換えてやらなければならないのではあるが。
Libjpeg の場合も同じで "Makefile" をちょっといじればいいんだろう、ラッキー。。。いや、ちょっと待てよ。。。1998年に Mac OSX なんてあったっけ?イヤな予感はこの後見事に的中し現実のモノとなる。おいおい、クラシック環境用やんけ、古すぎだよ!
というわけで、仕方がないので、気を取り直し "ターミナル" を使って、"configure"&"make"&"make install" することにする。たぶん、見事に完了するはずである。Intel Mac だろーが、PPC だろーが、インストール完了!オレもたいしたもんだ、これで "格好のいい Mac の UNIX 使い" の仲間入りじゃぁぁ!
ここまでノーテンキな方はあまりいないと思う。筆者はやった。本当になつかしい。あの頃はまだ若かった。
これがワケの分からんドロ沼への第一歩となる。後でいろいろなモノをインストールする際に、あれがない、これがない、と、プログラムから文句を言われる"ナイブラリ"になるのである。一応インストールできているように思えるから、タチが悪い。
『エラーがでずに "configure"&"make"&"make install" できたからといって、必ずしも正しくインストールされているとは限らない』というのが、今回の教訓。
このような不具合は、"jpeg-6bフォルダ" に含まれている GNU Autotools のバージョンが古く、Mac OS X (server) 用にうまくコンパイルされないことが原因で起こる。要するに先の記事でも説明した、GNU の libtool や autoconf が古くて、"Mac OS X (server) なんか知らない" のである。特に、ダイナミックリンクライブラリ (libjpeg.dylib) を生成できないことが問題となる。
ところで、Mac OS X (server) はもともと GNU Autotools を持っている。当然、Mac OS X (server) に対応している新しいバージョンのものだ。さて、賢明な読者の皆さん、いったい、どうしたらいい?
大きく分けると2つの解決法がある。1つ目は、Mac OSX (server) がもともと持っている GNU の libtool を使ってコンパイルするようにしてやる方法、2つ目は、"jpeg-6bフォルダ" に含まれている古いバージョンの Autotools 関連のファイルを、新しいものに置き換えてしまう方法である。よくよく考えてみれば、どちらも同じことをしているのではあるが、あくまで "jpeg-6b" が古すぎるための便法なので、正しくインストールができさえすれば、どのようにヤッても構わないのだ。
まずは、最初の方法から。Mac OS X (server) がオリジナルで持っている GNU の libtool は /usr/bin/glibtool である。要するに /usr/bin にある "glibtool" が、名前は違うが GNU の libtool のことである。アップルメニューの "移動" から "フォルダへ移動" を選択し /usr/bin を見てみよう。探すのがたいへんであるが見つけることができるだろう。この glibtool は勝手に "jpeg-6bフォルダ" にコピーして持ってきてもよいというシロモノではない。こういう場合には、Mac の伝家の宝刀"エイリアス"を作ることになる。UNIX では"シンボリックリンク"を作る(はる)という。そのためには、いろいろなバリエーションが考えられるのだが、ターミナルで "jpeg-6bフォルダ" に移動したあと
ln -s /usr/bin/glibtool libtool
として "jpeg-6bフォルダ" の中に "glibtool" のエイリアス(シンボリックリンク)を "libtool" という名前で作ってやればよい。その後で "configure" をしていけば、新しい "libtool" を使って "configure" されるようにすることができる。
この1つ目の方法にはいろいろなバリエーションがあって、いろいろ工夫をされてさまざまな方法が紹介されているようだが、上のようにするのが一番簡単である。
次に2つ目の方法である。ここで、話は少しむつかしくなる。一服される方は、ここらで一服。。。
libtool にはバージョンがあって、1.3 は Darwin には非対応だ。1.4 以上のバージョンは Darwin に対応しており、アップルが現在搭載している "libtool" は 1.5 以上のバージョンのものである。バージョンが 1.3 のものは、"ltconfig" というファイルを使う仕様になっているため、見分けるのは簡単である。1.3 ではこれ以外に、"config.sub" および "config.guess" というワンセットのファイルと、基本的な libtool 機能を実装し "libtool本体" を生成するための "ltmain.sh" というファイル、合わせて計4つのファイルが基本的には必要である。1.4以上のバージョンでは "ltconfig" ファイルは "configure" プログラムに含まれるようになるため、"config.sub" および "config.guess" そして "ltmain.sh" の合計3つのファイルがあればよい。
アップルは、GNU Autotools で使ういろいろなプログラムを /usr/share にまとめている。またまた、アップルメニューの"移動"から"フォルダへ移動"を選択し /usr/share を見てみよう。autoconf フォルダ、automake-1.XX フォルダ(10.4 では、 automake-1.6 のはずである)、そして、libtool フォルダ等があるのがおわかりになるだろう。/usr/share/libtool の中身を見てみると、アップルが純正で持っている "config.sub" および "config.guess" のワンセット、そして "ltmain.sh" の3つのファイルがちゃんとはいっている。一方 "jpeg-6bフォルダ" もひらいて中身を見てみると、先の3つのファイルに加え、"ltconfig" というファイルがあるのがわかる。"jpeg-6bフォルダ" に含まれる "libtool" は悲しいことに、Darwin 非対応の1.3 なのである。これではこのまま "configure" しても不完全なのはアタリマエだ。"Mac OSX なんか知らない" のだからどーしようもない。
一般に "configure" で libtool を使って、設計図である "makefile" を生成する場合には、まずインストールするコンピュータと OS のタイプ(ホストタイプ)がなんであるかが判別できなければならない。"configure" ではホストタイプを決定するのに、ホストタイプを推定する "config.guess" と、それを検証して、例えば(powerps-apple-darwin6.0)というような、ホストタイプの標準形に変換する働きをする "config.sub" のワンセットのプログラムを使う。そして、"ltconfig" と "ltmain.sh" のファイルから、そのホストタイプにあわせた "libtool" が生成されて、そのあと "Makefile.in" と "config.h.in" から設計図である "makefile" および "config.h" ができあがるのである。
結論からいうと、"jpeg-6bフォルダ" に含まれる "configure" にホストタイプを認識させるためには、アップルから提供されている "config.sub" および "config.guess" のセットに置き換えてやればよいのだ。なんてったって、アップル純正。Mac OSX 用のソースコードの依存関係を決定するのに必要なコードを含んでいるのはアタリマエのことである。その後で "configure" をしていけば、Darwin 用に "configure" される。ちなみに、アップル純正の "config.sub" および "config.guess" のセットは、いま見た/usr/share/libtool にも入っているし、/usr/share/automake-1.XX (10.4 なら、 automake-1.6 )にも入っている。要は、このセットを "jpeg-6bフォルダ" に含まれる古いセットと入れ替えればいいのだ。コピー&ペーストでもかまわないが、ターミナルから "jpeg-6bフォルダ" に移動したあと
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
または、
cp /usr/share/automake-1.XX/config.sub .
cp /usr/share/automake-1.XX/config.guess .
と打ち込んでコピーしてやればよい。
以上、"Mac OSX (server) なんか知らない" 古い "jpeg-6b" に、無理矢理(北海道では "むりっくり" という)教え込む方法は、だいたいご理解いただけたであろうか?のちほどきちんとインストールの説明をする予定であるが、今回は、実際に UNIX 互換のソースコードをコンパイルしてインストールする際の雰囲気がおわかりいただければよい。インストールされるハードウェアもさまざまであるから、その組み合わせに応じて適切にコンパイルするために、今までにたくさんの開発者が苦労しながらコンパイルするための手順やらプログラムを作り上げてきたのである。Mac OS X はアップルの独自仕様になっている部分も多いため、ストレートにインストールできないものもあるということがおわかりいただければよい。
ここで、ぜひ一冊の書籍を紹介しておきたい。
は、お手元においておかれるといいと思う。

コメントする