SimpleBoxes

PerlMagick のインストールではまる

Movable TypeSerene Bach などのブログツールで、アップロードしたイメージのサムネイル画像を作成するために利用されるライブラリのひとつに ImageMagick があります。

Mac OS X では標準でインストールされていないため、別途インストールする必要があります。

ImageMagick をインストールして、それを perl で利用できるようにするために、以下のような手順で行いました。

  1. MacPorts のインストール
  2. ImageMagick のインストール
  3. PerlMagick のインストール

MacPorts のインストール

MacPorts は ImageMagick をはじめとした各種 UNIX ツールのインストールをサポートしてくれるツールです。パッケージの依存関係をきっちり押さえてくれますし、アップデートなども簡単に行うことができます。

同様なツールに Fink があります。MacPorts の方が Intel Mac への対応が早かったため、私は MacPorts を使っています。

MacPorst のインストールは簡単です。

  1. MacPorts 公式サイトの「Installing MacPorts」よりアーカイブをダウンロード
  2. ダウンロードしたパッケージファイルを開いてインストール

配布アーカイブは Mac OS X のバージョンによって分かれています。私の場合、Mac OS X 10.4 を利用しているので、Tiger のパッケージをダウンロードしました。

MacPorts は基本的にコマンドラインツールです。使い方などは MacWiki - MacPorts に詳細があります。

MacPorts インストール後は MacPorts のデータベースを最新の状態に更新しておきます。

ターミナル上で以下のようなコマンドを入力します。

$ sudo /opt/local/bin/port -d selfupdate

ここで、「$ 」はコマンドプロンプトです。実際に入力するのは強調された部分になります。これより先にも同様な引用が出てきますが、同じように記述しています。

ImageMagick のインストール

MacPorts のコマンド群は「/opt/local/bin」というパスにインストールされます。

一々、「/opt/local/bin/port」 のように入力するのは面倒なので、PATH を通しておくと楽です。

$ export PATH=/opt/local/bin:$PATH

bash の場合。tcsh, csh など他のシェルを使われている時はパスの通し方が異なります。

ImageMagick のインストールは MacPorts のメインコマンドである port を使います。

$ sudo port install ImageMagick +jpeg2

+jpeg2」というオプションは必須ではありません。ImageMagick で jpeg2000 ファイルを扱えるようにしたい場合は指定しておきます。

ImageMagick は以下の場所にインストールされます。

バイナリ
/opt/local/bin
ライブラリ
/opt/local/lib
ヘッダ
/opt/local/include

PerlMagick のインストール

最後に perl から ImageMagick を利用するためのモジュールをインストールします。

CPAN からアーカイブを取得します。「PerlMagick」で検索すれば、あっさり見つかると思います。

アーカイブからの perl モジュールのインストールは、基本的にはどれも一緒で、

$ tar zxf (MODULE).tar.gz
$ cd (MODULE)
$ perl Makefile.PL
$ make
$ make test
$ sudo make install

のように機械的にコマンドを実行すればいいだけです。(MODULE) の部分は、ダウンロードしたファイルによって変わるので、PerlMagick の場合、

$ tar zxf PerlMagick-6.32.tar.gz
$ cd PerlMagick-6.32
$ perl Makefile.PL
$ make
$ make test
$ sudo make install

しかし、PerlMagick の場合、そのままではインストールできません。「make」と入力した後、ずらっとエラーが表示されてしまいます。

ひとつの要因が MacPorts を利用していることに起因します。MacPorts を利用しているので、インストール場所がデフォルトとは異なるためです。

そこで Makefile.PL を修正する必要があります。PerlMagick 6.32 の場合、修正箇所は 46 行目から 65 行目にかけてです。

   # Header search specfication and preprocessor flags
   'INC'  => '-I../ -I.. -I/opt/local/include -I/opt/local/include/freetype2 -I/usr/X11R6/include -I/usr/X11R6/include/X11 -I/opt/local/include/libxml2',

   # C compiler flags (e.g. -O -g)
   'CCFLAGS'     => "-L/opt/local/lib $Config{'ccflags'} -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -O3 -g -Wall -pthread",

   # C pre-processor flags (e.g. -I & -D options)
   # 'CPPFLAGS'    => "$Config{'cppflags'} -I/usr/include/librsvg-2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/include/graphviz -I/usr/include/freetype2 -I/usr/include/libxml2",

   # Linker flags for building an executable
   'LDFLAGS'    =>  "-L/usr/lib -L/opt/local/lib $Config{'ldflags'}",

   # Linker flags for building a dynamically loadable module
   'LDDLFLAGS'  => "-L/usr/lib -L/opt/local/lib $Config{'lddlflags'}",

   # Install PerlMagick binary into ImageMagick bin directory
   'INSTALLBIN'  => '/opt/local/bin',

   # Library specification
   'LIBS'  => ['-L/opt/local/lib  -lMagick -L/usr/X11R6/lib -L/usr/lib -ltiff -ljpeg -lpng -ldpstk -ldps -lXext -lXt -lSM -lICE -lX11 -lbz2 -lxml2 -lpthread -lm -lpthread'],

これで makefile が、Intel Mac 向けに生成されます。

以前はこの修正だけで正しくインストールできたのですが、ImageMagick 6.3.8 と PerlMagick 6.32 というバージョンの組み合わせではうまくいきません。

2008.02.07 時点で、MacPorts でインストールされる ImageMagick のバージョンは 6.3.8 になります。一方 CPAN から取得できる PerlMagick の最新バージョンは 6.3.2 です。

[2007.02.08 追記] ふうこさんからのコメント通り、ImageMagick 公式サイトからダウンロードできる「Source」の方に最新の PerlMagick が添付されていました。それに対応した Magick.xs がきちんと添付されているので、そちらを使うのが最も確実です。MacPorts を利用してインストールした場合、PerlMagick はついてきませんので、バイナリではなくソースの方を別途ダウンロードする必要があります。

PerlMagick 6.3.2 に添付されている Magick.xs で利用されている定数・メンバー名が ImageMagick 6.3.8 と一部互換性がありません。

[2007.02.08 追記] ImageMagick 公式サイトからダウンロードできるソースには対応した PerlMagick が添付されていて、PerlMagick 6.3.8 となっています。

例えば、

Magick.xs:203: error: ‘MagickCompositeOptions’ undeclared (first use in this function)
Magick.xs:203: error: (Each undeclared identifier is reported only once
Magick.xs:203: error: for each function it appears in.)

のようなエラーが表示されて、正しくインストールできません。これは列挙型 MagickOption の列挙定数の名称が一部変更されているために生じるエラーです。

ざっくり調べたところ、PerlMagick 6.3.2 vs ImageMagick 6.3.8 では以下のような差異があります。

  • MagickCompositeOptionsMagickComposeOptions
  • MagickCompressionOptionsMagickCompressOptions
  • MagickImageOptionsMagickTypeOptions
  • MagickLayersOptionsMagickLayerOptions

また、構造体 _Image に存在していた origin というメンバは tile_offset という名称に変わっています。

image->origin

のように ->origin となっている箇所を

image->tile_offset

と変更します。

ここまでの一連の作業を行うことで、make が通るようになり、インストールが可能になります。

$ perl Makefile.PL
$ make
$ make test
$ sudo make install

最後にきちんとインストールされているかどうか確認しておきます。

$ perl -MImage::Magick -e 'print $Image::Magick::VERSION . "\n"'

最後に私が作業した分のパッチファイル PerlMagick-6.32.osx_tiger.patch.gz を置いておきます。これは以下の環境で動作します。

  • Intel Mac
  • Mac OS X 10.4
  • MacPorts 利用
  • ImageMagick 6.3.8
  • PerlMagick 6.32

スポンサーリンク

<< MacBook セットアップ (2008.02 バージョン) :: localizer.js - JavaScript で多言語対応を考える >>