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