日向夏特殊応援部隊

俺様向けメモ

ClearSilverのPerlバインディングのインストール

ClearSilverは超高速なテンプレートエンジンです。
どのくらい速いかと言えば、id:spritlooseさんがベンチマーク(d:id:spiritloose:20060812)を取ってますので、参考にして下さい。

今日そのPerlバインディングをインストールする際にハマったのでメモ。

configure

--prefixオプションが結構曲者です。

# ./configure --prefix=/usr --disable-apache --disable-java --disable-csharp --enable-gettext

のように、

  • apache, java, csharpは除外
  • gettextによる国際化対応は有効

と言う感じでconfigureすると、Makefileのinstallターゲットは、

install: all
        ./mkinstalldirs $(DESTDIR)$(cs_includedir)
        ./mkinstalldirs $(DESTDIR)$(bindir)
        ./mkinstalldirs $(DESTDIR)$(libdir)
        ./mkinstalldirs $(DESTDIR)$(mandir)/man3
        $(INSTALL) -m 644 ClearSilver.h $(DESTDIR)$(cs_includedir)/
        $(INSTALL) -m 644 cs_config.h $(DESTDIR)$(cs_includedir)/
        $(INSTALL) -m 644 man/man3/*.3 $(DESTDIR)$(mandir)/man3/
        @for mdir in $(SUBDIRS); do \
          if test -d $$mdir; then \
            if test -f $$mdir/Makefile.PL -a ! -f $$mdir/Makefile; then \
              cd $$mdir; $(PERL) Makefile.PL PREFIX=$(prefix); cd ..; \
            fi; \
            $(MAKE) -C $$mdir PREFIX=$(prefix) install; \
          fi; \
        done

となります。

良く見てみるとSUBDIRSのループ内でMakefile.PLを叩くんですが、PREFIXをconfigureで指定した値を使います。

ExtUtils::MakeMaker - PREFIX and LIB attributeを見るとPREFIXはそこをベースディレクトリとして、モジュールのインストールを行ってしまいますので、@INCで読める場所に行かない可能性があります。

少なくとも何も --prefix を指定しないと /usr/local がPREFIXになるので、/usr/local/lib/perl5 みたいなディレクトリ下にモジュールがインストールされると言う悲しいオチが待ってます。

prefixを指定するかconfigureの後にMakefileを直接編集するなりしないと駄目っす。

追記:マカ−の場合

Makefile中のPREFIXを消すのが吉だと思います。