end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

mod_perlをinstallするperlは、-Dusethreads でスレッドサポートを有効に

perl5.10+apache2.2.13にmod_perl2.0.4をstatic installしようとしたところ、make時に次のようなerrorが表示されました。

$ make
cd "src/modules/perl" && make
make[1]: Entering directory `/home/endo/tmp/mod_perl-2.0.4/src/modules/perl'
<略>
In file included
  from /home/endo/tmp/mod_perl-2.0.4/../httpd-2.2.13/include/ap_config.h:25,
  from /home/endo/tmp/mod_perl-2.0.4/../httpd-2.2.13/include/httpd.h:43,
  from modperl_apache_includes.h:27,
  from mod_perl.h:20,
  from mod_perl.c:17:
/home/endo/tmp/mod_perl-2.0.4/../httpd-2.2.13/srclib/apr/include/apr.h:285: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'apr_off_t'
<略>

「以前は、このようなerrorはなかったのに...」と思いながら、ググって見ると、httpd-2.2.13/srclib/apr/include/apr.h の書き換えで、makeが通ったというエントリを見つけました。

http://d.hatena.ne.jp/sodex/20070412/1176334254 における httpd-2.2.13/srclib/apr/include/apr.h の書き換え例

old) typedef    off64_t           apr_off_t;
new) typedef  __off64_t           apr_off_t;

こういう書き換えは行いたくありませんし、何より以前(多分1年程前)は書き換えを行っていないので、以前、mod_perlをinstallしたperlと、今回失敗したperlのversionを調べてみると、以前はスレッドサポート有効にしているではありませんか。

## 以前(mod_perl make成功)
$ /usr/local/bin/perl -v
This is perl, v5.10.0 built for i686-linux-thread-multi

## 今回(mod_perl make失敗)
$ /usr/local/perl5.10/bin/perl -v
This is perl, v5.10.0 built for i686-linux

なので、perlのConfigureを-Dusethreads付でinstallし、改めてmod_perlをmakeしたところ、今度は成功しました。

## perlのConfigure
$ ./Configure -Dprefix=/usr/local/perl5.10 -Dusethreads -de

## mod_perl+apacheのconfigure
$ /usr/local/perl5.10/bin/perl Makefile.PL \
    MP_USE_STATIC=1 \
    MP_AP_PREFIX=../httpd-2.2.13 \
    MP_AP_CONFIGURE="--prefix=/home/endo/local/apache22 \
                     --with-mpm=prefork"

mpm=preforkの場合、perlのスレッドサポートは不要だと思っていましたが、ドキュメントをきちんと読んでなかったのかも...

http://perl.apache.org/docs/2.0/user/install/install.html#Prerequisites