namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: New filtering process implemented.
knok@xxxxxxxxxxxxx (NOKUBI Takatsugu) wrote:
> branch knok-filter-1において、新しいフィルタ処理を実装してみました。
>現状では、gzipのみの対応ですが、実装時の参考にはなると思います。
その調子で新しいフィルタを作っていってくださいませ。 :)
> gzip.plには、Compress::Zlibを用いる方法と、gzipをpipeで呼び出す方法
>が実装されていますが、今のところ環境を判別して動的にどちらかを選択する
>ようにはなっていません。コメントアウト部分を適時選択してください ^^;
ちょっと考えてみましたが、 configure 時に Compress::Zlip の
有無を判別して filter_file(), filter_xs() を切り替えるのはけっ
こう面倒そうです。
というのは、 use 文は compile 時に必ずそのモジュールを要求す
るため、
sub filter_xs (\$) {
my ($contref) = @_;
use Compress::Zlib;
と、サブルーチンの内側に入れても必ず、 Compress::Zlib を必要
とするからです。mknmz.pl で NKF, Text::Kakasi, Text::ChaSen1
モジュールをそれぞれ require 文で呼び出しているのはそのため
です。
もしどうしても use を使うなら gzip.pl.in は
filter_@GZIP_MODE@
:
@NO_ZLIB_MODULE@use Compress::Zlib;
としておき、 gzip コマンドを使うなら
GZIP_MODE='file'
NO_USE_ZLIB_MODE='#'
Compress::Zlibモジュールを使うなら、
GZIP_MODE='xs'
NO_USE_ZLIB_MODE=''
のように、 configure 時に置き換えるしかないでしょう。 use を
あきらめて require にするなら (できますよね?)
GZIP_MODE='file'
だけで OKです。それから、
my $fh = util::fopen_or_die("|gzip -cd > $tmpfile");
は configure.in で
AC_PATH_PROG(GZIP, gzip, no)
if test "$GZIP" = "no"; then
AC_MSG_WARN(gzip not found)
fi
GZIP_PATH=$GZIP
AC_SUBST(GZIP_PATH)
を定義して、
my $fh = util::fopen_or_die("|@GZIP@ -cd > $tmpfile");
とすべきでしょうね。 (コマンド名のパスを置き換える)
-- Satoru Takabayashi