記事のページ

Mac OS X 10.5 と libjpeg

usr-file.jpg
 Mac OS X server 10.5 でも、Mac OS X 10.5 でも、デフォルトでは PHP で GD ライブラリが使えない。あいかわらず、"刀の使えない座頭市" 状態である。ただし、アップルの Xcode および、OS に付属している、X11 をインストールしておけば、10.4 の時代と異なり、GD ライブラリが必要とする zlib, libpng, libjpeg 等は、libjpeg 以外は、すでにインストールされている。
Libjpeg2.jpg
 したがって、PHP で GD ライブラリを使うためには、libjpeg だけをインストールしてやればよいことになる。10.4 の時代と異なり、本当にめでたい。というわけで、libjpeg を、インストールしていくことにする。
 ダウンロードしたら、適当なディレクトリに解凍する。中上級者は、適当なディレクトリを作製して、ターミナルから解凍する。この解説は初心者の味方なので、ダブルクリックしてデスクトップに解凍したものとして、話をすすめることにしよう。かくいう筆者も、たいしたことはないのであって、初心者に毛が生えたようなものである。
 デスクトップに、jpeg-6b というフォルダができているはずである。ターミナルを起動して、まず、インストールに必要なディレクトリを作っておく。/usr/local の中にディレクトリを作っていくのであるが、普段は見えない /usr ディレクトリも、上の図のように、メニューの"移動"から、"フォルダへ移動"を選んで、/usr と入力すれば、その中身をみることができる。
sudo mkdir -p /usr/local/include
sudo mkdir -p /usr/local/bin
sudo mkdir -p /usr/local/lib
sudo mkdir -p /usr/local/share/man/man1
と、入力。各行の最後には当然、リターンキーを押す。パスワードの入力も最初だけは必要になるだろう。
 特に、最後の行がミソである。各ソースの説明(マニュアル)を入れておく "man" フォルダは、マックの場合には、"/share/man/" 以下にまとめておくことになっている。実は、後ほどインストールすることになる "ImageMagick" もここに "man" ファイルを入れてくるのである。これをやらなかったからといって、実害があるわけでもないだろうが、いろいろなディレクトリに "man" フォルダがインストールされてしまい、そこらじゅうが "man" だらけ、という状態になってしまう。筆者はやった。あのころは若かった。そして "man" だらけだった。。。
 ところで、先ほどメニューの"移動"から、"フォルダへ移動"を選んで、/usr と入力すれば、その中身をみることができる、と書いたのだが、それを使って /usr/local の中に include やら bin やらのフォルダを GUI を使って作ってしまうのはやめたほうがよい。それは、フォルダのアクセス権(パーミッション)がややこしいことになるからで、このようなフォルダ(ディレクトリ)を作る際には、必ずターミナルを使うようにしよう。

ーーーーーここからの話は余談なので、面倒な方は読みとばしてくださっても構わないーーーーーー
 さて、ソースコードからインストールする際には、 "configure" をして、設計図である "Makefile" を作り、それに基づいて "make" をし、インストール可能な形に整形したのち、"make install"すると書いたのだが、"makefile" が元から用意されている場合には、『整形(make)してから、インストール(make install)する』だけですむ。
 解凍された 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) に対応している新しいバージョンのものだ。さて、賢明な読者の皆さん、いったい、どうしたらいい?

 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フォルダ" に含まれる古いセットにコピーして入れ替えればいいのだ。
 以上、"Mac OSX (server) なんか知らない" 古い "jpeg-6b" に、無理矢理(北海道では "むりっくり" という)教え込む方法は、だいたいご理解いただけたであろうか?今回は、実際に UNIX 互換のソースコードをコンパイルしてインストールする際の雰囲気がおわかりいただければよい。インストールされるハードウェアもさまざまであるから、その組み合わせに応じて適切にコンパイルするために、今までにたくさんの開発者が苦労しながらコンパイルするための手順やらプログラムを作り上げてきたのである。Mac OS X はアップルの独自仕様になっている部分も多いため、ストレートにインストールできないものもあるということがおわかりいただければよい。
ーーーーーここまでの話が余談ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 さて、まずターミナルから "jpeg-6bフォルダ" に移動したあと
cd Desktop/jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
次は、32bit ( PowerPC G4 および intel core solo ) の場合には、
./configure --enable-shared
だけで、64bit ( PowerPC G5 および その他 intel Mac ) の場合には、以下を一行につなげて、
MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -bind_at_load" ./configure --enable-shared
と打ち込んで、リターン。
このようにコンパイルして、ここでターミナルをちょっと一休みする。
 下の図をご覧いただきたい。デスクトップの jpeg-6b フォルダを開き、makefile を探してお使いのテキストエディタで開いてみよう。その20行目、
mandir = $(prefix)/man/man$(manext)
mandir = $(prefix)/share/man/man$(manext)
に書き換えておく。これで、 "man" フォルダは、"/share/man/" 以下に入る。その後、ターミナルの画面から、
make
と、入力して、リターン。
make test
としてテストをして、エラーが表示されなければ、
sudo make install
と入力。もっとも、makefile を書き換えたりするのが面倒なら、make のあと、
sudo make install mandir=/usr/local/share/man/man1
と入力してもいいと思うが、なにごとも経験だ、makefile ぐらい見ておいた方がいいと思う。中上級者についてはこのかぎりではない。
はぁ〜、これで、インストール完了だよ。めでたし、めでたし。。。。

この記事について

この記事は著者が2008年10月25日に書いたものです。

コメントおよびツッコミ大歓迎です。
すべてのコメントに目をとおさせていただいておりますが、そのうちのいくつかを選んで公開しておりますので、ご了承いただけたら幸いです。

この記事は "マックの道具箱" カテゴリ内の記事です。

カテゴリ内の前の記事は
Mac OS X 10.5 と MySQL」です。

カテゴリ内の次の記事は
Mac OS X 10.5 と PHP の GD」です。

最近の記事はメインページで見られます。過去に書かれた記事はアーカイブで見られます。著者自身の撮影した写真は、写真集でご覧になれます。

Made on a Mac