cpanm で DBD::mysql をインストールする

cpanm で DBI をインストールした際に、特に気になるエラーがなかったのに、DBI 経由で mysql に接続をすると、エラーが出た。
調べてみると、DBD::mysql が見つからないとエラーが出る。

% perl -MDBD::mysql -le 1
Can't locate DBD/mysql.pm in @INC (@INC contains: /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.2/lib/5.12.2/darwin-2level /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.2/lib/5.12.2 /Users/littlebuddha/perl5/perlbrew/perls/p
erl-5.12.2/lib/site_perl/5.12.2/darwin-2level /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2 .).
BEGIN failed--compilation aborted.

やっぱりやってしまう

半分だめだろうと思いつつも、cpanm で DBD::mysql のインストールを試みる。

% cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.018.tar.gz ... OK
Configuring DBD-mysql-4.018 ... N/A
! Configure failed for DBD-mysql-4.018. See /Users/littlebuddha/.cpanm/build.log for details.

が、やはり失敗した。

mysql_config が見つからないのが原因

cpanm 経由でインストールをするときに、mysql_config が見つからないのが原因になる。
普通は、

% which mysql_config             
/usr/local/bin/mysql_config

を使うが、MySQLMacPorts でインストールをしているので、mysql_config ではなく mysql_config5 という名前になっている。

% which mysql_config5
/opt/local/bin/mysql_config5

直接 Makefile.pm を編集する

まずは DBD::mysql のソースが展開されているディレクトリに移動する。

% cd ~/.cpanm/latest-build/DBD-mysql-4.018/

そうしたら、オプションを付けて実行する。

% perl Makefile.PL --mysql_config=/opt/local/bin/mysql_config5
Checking if your kit is complete...
Looks good
Using DBI 1.615 (for perl 5.012001 on darwin-2level) installed in /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/darwin-2level/auto/DBI/
Writing Makefile for DBD::mysql

と、Makefile の生成が成功したようだ。

% less Makefile
# --- MakeMaker constants section:
AR_STATIC_ARGS = cr
DIRFILESEP = /
DFSEP = $(DIRFILESEP)
NAME = DBD::mysql
NAME_SYM = DBD_mysql
VERSION = 4.018
VERSION_MACRO = VERSION
VERSION_SYM = 4_018
DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
XS_VERSION = 4.018
XS_VERSION_MACRO = XS_VERSION
XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
INST_ARCHLIB = blib/arch
INST_SCRIPT = blib/script
INST_BIN = blib/bin
INST_LIB = blib/lib
INST_MAN1DIR = blib/man1
INST_MAN3DIR = blib/man3
MAN1EXT = 1
MAN3EXT = 3
INSTALLDIRS = site
DESTDIR = 
PREFIX = $(SITEPREFIX)
PERLPREFIX = /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1
SITEPREFIX = /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1

ここまできたら、再インストールをしてみる

% make && make test
% make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/darwin-2level/auto/DBD/mysql/mysql.bs
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/darwin-2level/auto/DBD/mysql/mysql.bundle
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/darwin-2level/Bundle/DBD/mysql.pm
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/darwin-2level/DBD/mysql.pm
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/darwin-2level/DBD/mysql/GetInfo.pm
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/darwin-2level/DBD/mysql/INSTALL.pod
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/man/man3/Bundle::DBD::mysql.3
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/man/man3/DBD::mysql.3
Installing /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/man/man3/DBD::mysql::INSTALL.3
Appending installation info to /Users/littlebuddha/perl5/perlbrew/perls/perl-5.12.1/lib/5.12.1/darwin-2level/perllocal.pod

最後に確認

% perl -MDBD::mysql -le 1
%

エラーが表示されないので、正常にインストールされた。