Perlの@INCを指定してビルドする

Perlで「use 何とか;」として外部のモジュールを読み込む場合、Perlの特殊変数である配列@INCにあるパスから探してくれます。ここに任意をディレクトリを追加するには、

といった方法があります。でも、mod_perlと通常のcgiで指定方法が違ったり、cronだと環境変数が適用されなかったり、何かとトラブルの原因になりかねません。

自前のモジュールだったらuse libでいいかなとも思うけど、「CPANモジュールのインストール先を指定する」で書いたみたいにCPANモジュールをユーザディレクトリに入れてたりすると、そこの指定をどうするかが問題。

今の環境で使ってるPerlは、「DBICが入らなくて、CentOS5.1でPerlのRPMリビルドした」で書いたようにSRPMからリビルドした物をRPMで入れてます。せっかくRPM再構築してるんだから、そのへんで何とか出来ないものかとジタバタしてみました。

SPECファイルを見ると、

sh Configure -des -Doptimize="$RPM_OPT_FLAGS"
    -Dversion=%{perlver}
    -Dmyhostname=localhost
    -Dperladmin=root@localhost
    -Dcc='%{__cc}'
    -Dcf_by='Red Hat, Inc.'
    -Dinstallprefix=%{_prefix}
    -Dprefix=%{_prefix}
%ifarch %{multilib_64_archs}
    -Dlibpth="/usr/localib64 /lib64 /usr/lib64" \
    -Dprivlib="/usr/lib/perl5/%{version}"
    -Dsitelib="/usr/lib/perl5/site_perl/%{version}"
    -Dvendorlib="/usr/lib/perl5/vendor_perl/%{version}"
    -Darchlib="%{_libdir}/perl5/%{perlver}/%{_arch}-%{_os}%{thread_arch}"
    -Dsitearch="%{_libdir}/perl5/site_perl/%{perlver}/%{_arch}-%{_os}%{thread_arch}"
    -Dvendorarch="%{_libdir}/perl5/vendor_perl/%{perlver}/%{_arch}-%{_os}%{thread_arch}"
%endif
    -Darchname=%{_arch}-%{_os}

こんなブロックが。ここ怪しい。

んで、libpthを増やしてみたり、あれこれやったけど無理。Perlのソースを拾ってきて、Configureを覗いてみると「otherlibdirs」なんてそれっぽくない? ここにコロン区切りでパスを追加していくとよさそう。ググっても何かそれっぽいこと書いてある。

    -Dsitearch="%{_libdir}/perl5/site_perl/%{perlver}/%{_arch}-%{_os}%{thread_arch}"
    -Dvendorarch="%{_libdir}/perl5/vendor_perl/%{perlver}/%{_arch}-%{_os}%{thread_arch}"
    -Dotherlibdirs="/home/hoge/CPAN/lib/perl5:/home/hoge/CPAN/lib64/perl5/site_perl/5.8.8:/var/www/pm"
%endif
    -Darchname=%{_arch}-%{_os}

てな具合に、vendorarchの次の行を追加してrpmbuild。でRPMを再インストールしたら、otherlibdirsに書いたパスが最初から@INCに入ってくれてます。やった。

この@INCのデフォルト値の変更って、結構需要はありそうな気がするんだけど、ググってもなかなか情報が見付からなかった。皆どうしてるんだろ。