2014/10/09(木) [n年前の日記]
#4 [perl][windows][namazu] Strawberry Perl + Namazu for Windows で動作テスト
ActivePerl 5.16.x では、NKF.pm だか NKF.dll が正常動作しないので Namazu for Windows を動かせなかったけど。Strawberry Perl 5.18.x ならどうなるのか気になったので試してみたり。
Namazu for Windows の動作に必要、かつ、cpan でインストールできるモジュールは、以下の通り、だったような気がする。
.zip や .tar.gz をDLして、C:\MinGW\msys\1.0\home\アカウント名\ 以下でビルド?できたモジュールは、以下の通り。
ExtUtils::FakeConfig は、以下のような感じ。だったと思う。少し記憶が怪しいけど。
Text::Kakasi は、 _2014.10.07の日記 と似たような手順で作業できた。
NKFは、 _nkf Network Kanji Filter プロジェクト日本語トップページ - SourceForge.JP から、nkf-2.1.3.tar.gz をDLして解凍。
あと、Search::Namazu というモジュールも必要らしいけど、これはビルドしてもエラーが出てインストールできなかった。とりあえず、Search::Namazu 無しでどの程度動くのか試してみようかなと。
さて、この状態で、cd C:\namazu\pltests\ をして、perl alltests.pl を実行してみた。
結構「PASS」が出てきて喜んだけど、やっぱり問題が。
エラーは出たものの、これってつまり、Search::Namazu モジュールがインストールできてなくても、ある程度は動く、ということだろうか? それとも、Search::Namazu が無いと、全てのテストをPASSしない、ということなのだろうか?
ところで。
Namazu for Windows の動作に必要、かつ、cpan でインストールできるモジュールは、以下の通り、だったような気がする。
cpan File::MMagic cpan MP3::Info cpan IO::stringy cpan OLE::Storage_Lite
.zip や .tar.gz をDLして、C:\MinGW\msys\1.0\home\アカウント名\ 以下でビルド?できたモジュールは、以下の通り。
- ExtUtils-FakeConfig-0.12.zip
- Text-Kakasi-2.04.tar.gz
- nkf-2.1.3.tar.gz
ExtUtils::FakeConfig は、以下のような感じ。だったと思う。少し記憶が怪しいけど。
wget http://search.cpan.org/CPAN/authors/id/M/MB/MBARBON/ExtUtils-FakeConfig-0.12.zip unzip ExtUtils-FakeConfig-0.12.zip cd ExtUtils-FakeConfig perl Makefile.PL nmake nmake test nmake install
Text::Kakasi は、 _2014.10.07の日記 と似たような手順で作業できた。
wget http://search.cpan.org/CPAN/authors/id/D/DA/DANKOGAI/Text-Kakasi-2.04.tar.gz tar zxvf Text-Kakasi-2.04.tar.gz cd Text-Kakasi-2.04 (Makefile.PLを修正。INC,LIBS,LDDLFLAGSのパス指定を変更) perl Makefile.PL dmake dmake test dmake installだったような気がする。
NKFは、 _nkf Network Kanji Filter プロジェクト日本語トップページ - SourceForge.JP から、nkf-2.1.3.tar.gz をDLして解凍。
cd nkf-2.1.3\NKF.mod perl Makefile.PL dmake dmake test dmake install
あと、Search::Namazu というモジュールも必要らしいけど、これはビルドしてもエラーが出てインストールできなかった。とりあえず、Search::Namazu 無しでどの程度動くのか試してみようかなと。
さて、この状態で、cd C:\namazu\pltests\ をして、perl alltests.pl を実行してみた。
結構「PASS」が出てきて喜んだけど、やっぱり問題が。
PASS: mknmz-18.pl FAIL: idxdiff-1.pl FAIL: idxdiff-3.pl PASS: namazu-1.pl ... ==================== 2 of 43 tests failed ====================惜しい…! 2つほどPASSしてくれなかった。test-log に結果が残ってるので確認してみると…。
*** starting idxdiff-1.pl diff c:/namazu/pltests/idx1/NMZ.p c:/namazu/pltests/idx2/NMZ.p diff c:/namazu/pltests/idx1/NMZ.pi c:/namazu/pltests/idx2/NMZ.pi *** starting idxdiff-3.pl diff c:/namazu/pltests/idx5/NMZ.p c:/namazu/pltests/idx6/NMZ.p diff c:/namazu/pltests/idx5/NMZ.pi c:/namazu/pltests/idx6/NMZ.pi *** ..\bin\namazu.exe --help本来ここで「diff 〜」が表示されなければOK、ということなのだろうか。わからんけど。
エラーは出たものの、これってつまり、Search::Namazu モジュールがインストールできてなくても、ある程度は動く、ということだろうか? それとも、Search::Namazu が無いと、全てのテストをPASSしない、ということなのだろうか?
ところで。
MP3::Info IO::stringy OLE::Storage_Liteをインストールしたら、perl alltests.pl 実行時に、一太郎文書コンバータのオプションダイアログが一々開かずに処理をしてくれたのだけど。どれかのモジュールが、そのあたりをイイ感じに処理してくれているのだろうか?
◎ idxdiff-*.plについて調べる。 :
idxdiff-1.pl と idxdiff-3.pl を開いて眺めてみた。
WinMerge を使って、idx1/ と idx2/、idx5/ と idx6/ を比較してみた。たしかに、NMZ.p、NMZ.pi の内容が違っている。
また、idx*/ は、alltests.pl を実行した時に自動生成される。
こちらとしては、「idx1/NMZ.* と idx2/NMZ.* は違いがないよ。テストにPASSしたよ」という結果が出てくることを期待しているわけだけど。しかし実際には、idx1/NMZ.* と idx2/NMZ.* の中は一部が違ってる。
要するに、「idxdiff-*.pl が失敗ステータスを出してるのだから、idxdiff-*.pl の中で変な動作になってるのだな」と考えるのは早計で、実際は、idx*/NMZ.* を自動生成する時に、予想外の動作になってる可能性が高いわけで。
ちなみに、ActivePerl 5.8.9 に切り替えて同じテストをしてみたところ、以下のような状態だった。
てなわけで、Strawberry Perl を使うと、NMZ.p、NMZ.pi が意図通りに生成されない状態になる模様。
さて、idx1/ だの idx2/ だのを自動生成してるのは、どの .pl なのだろう。grep をかけてみた感じでは、mknmz-1.pl、mknmz-2.pl が自動生成してるらしい。中身をざっと眺めてみたけど…何が何やら。
ActivePerl 5.8.9 の出した test-log と、Strawberry Perl 5.18 の出した test-log を見比べてみた。何か登録されてるモジュール数が違うんじゃないかと思ったけれど、別にそういうわけでもないような。
もちろん、NKFのバージョンなどは違っていて、ActivePerl側は 2.07、StrawberryPerl側は2.13 だけど…。もしかしてそこが原因だったりするのかな。NKF 2.07 と 2.13 は動作が微妙に違っていて、出力される index も違ってくるとか? そこを合わせれば解決する?
試しに、 _nkf Network Kanji Filter プロジェクト日本語トップページ - SourceForge.JP から、nkf207.tar.gz をDLしてきて、C:\MinGW\msys\1.0\home\アカウント名\ 以下でビルドして、その状態でテストしてみた。…やはり idxdiff-*.pl でエラーが出る。idx1/ と idx2/ の中の、NMZ.p、NMZ.pi が一致してない。NKFのバージョンを合わせれば問題解決するわけではなさそうだなと。
- idxdiff-1.pl は、idx1/NMZ.* と idx2/NMZ.* を比較して、違うファイルがあったら 1(= 失敗)を返す。どれも同じファイルなら 0(= 成功)を返す。
- idxdiff-3.pl は、idx5/NMZ.* と idx6/NMZ.* を比較して、違うファイルがあったら 1(= 失敗)を返す。どれも同じファイルなら 0(= 成功)を返す。
WinMerge を使って、idx1/ と idx2/、idx5/ と idx6/ を比較してみた。たしかに、NMZ.p、NMZ.pi の内容が違っている。
また、idx*/ は、alltests.pl を実行した時に自動生成される。
こちらとしては、「idx1/NMZ.* と idx2/NMZ.* は違いがないよ。テストにPASSしたよ」という結果が出てくることを期待しているわけだけど。しかし実際には、idx1/NMZ.* と idx2/NMZ.* の中は一部が違ってる。
要するに、「idxdiff-*.pl が失敗ステータスを出してるのだから、idxdiff-*.pl の中で変な動作になってるのだな」と考えるのは早計で、実際は、idx*/NMZ.* を自動生成する時に、予想外の動作になってる可能性が高いわけで。
ちなみに、ActivePerl 5.8.9 に切り替えて同じテストをしてみたところ、以下のような状態だった。
- idx1/NMZ.p と idx2/NMZ.p は同じ。
- idx1/NMZ.pi と idx2/NMZ.pi は同じ。
- idx5/NMZ.p と idx6/NMZ.p は同じ。
- idx5/NMZ.pi と idx6/NMZ.pi は同じ。
てなわけで、Strawberry Perl を使うと、NMZ.p、NMZ.pi が意図通りに生成されない状態になる模様。
さて、idx1/ だの idx2/ だのを自動生成してるのは、どの .pl なのだろう。grep をかけてみた感じでは、mknmz-1.pl、mknmz-2.pl が自動生成してるらしい。中身をざっと眺めてみたけど…何が何やら。
ActivePerl 5.8.9 の出した test-log と、Strawberry Perl 5.18 の出した test-log を見比べてみた。何か登録されてるモジュール数が違うんじゃないかと思ったけれど、別にそういうわけでもないような。
もちろん、NKFのバージョンなどは違っていて、ActivePerl側は 2.07、StrawberryPerl側は2.13 だけど…。もしかしてそこが原因だったりするのかな。NKF 2.07 と 2.13 は動作が微妙に違っていて、出力される index も違ってくるとか? そこを合わせれば解決する?
試しに、 _nkf Network Kanji Filter プロジェクト日本語トップページ - SourceForge.JP から、nkf207.tar.gz をDLしてきて、C:\MinGW\msys\1.0\home\アカウント名\ 以下でビルドして、その状態でテストしてみた。…やはり idxdiff-*.pl でエラーが出る。idx1/ と idx2/ の中の、NMZ.p、NMZ.pi が一致してない。NKFのバージョンを合わせれば問題解決するわけではなさそうだなと。
◎ Strawberry Perl のバージョンを変えてみる。 :
そういや、Strawberry perl 5.18 で動作確認してるけど、現在の推奨バージョンは 5.20 なんだよな…。そちらもインストールしてみようか。
と思ったら。strawberry-perl-5.20.1.1-32bit.msi を実行したところ、「古い版が入ってるからインストールできねえよ」と怒られた。今の Strawberry Perl って、異なるバージョンをインストールできないのか…。5.8.9 と 5.18 は共存ができたのに…。
仕方ないので、Strawberry Perl 5.18 をアンインストールしてから、5.20 をインストール。
5.18 の時と同じようにモジュールをインストールしていったけど、Text::Kakasi の時に大量の警告が。
cd C:\namazu\pltests\ して、perl alltests.pl を実行。…警告が出てくる。
仕方ないので、set LANG=ja_JP.SJIS を、set LANG=Japanese_Japan.932 に変えてみたり。これって、後で何か問題が起きそうだよなあ…。既存の .pl が、ja_JP.SJIS があることを前提にして書かれてたりしそうだし。
とりあえず、結果は…。
意味も分からず SET LANG=ja_JP.EUC-JP にしてみたけど結果は同じ。
Strawberry Perl のバージョンを上げたら動作が変わってしまったということは、過去の版を使えばテストが通ったりするのだろうか?
Strawberry Perl 5.16.3.1 をインストールして試してみた。
Strawberry Perl 5.8.9.5 をインストールして試してみた。しかし、こちらはそもそも Text::Kakasi がビルドできない。
Namazu for Windows + ActivePerl じゃなくて、Namazu for Windows + Strawberry Perl でも動作するなら…。Namazu for Windows が、仮に Perl の特定バージョンでしか動かない状況だとしても、Strawberry Perl の古い版なら入手可能だからなんとかなるかな、てなことを思って試していたのですけど。ちょっとなんとかなりそうな雰囲気っぽいかもしれず。
でも、Search::Namazu が入らないのがちと気になりますけど。
と思ったら。strawberry-perl-5.20.1.1-32bit.msi を実行したところ、「古い版が入ってるからインストールできねえよ」と怒られた。今の Strawberry Perl って、異なるバージョンをインストールできないのか…。5.8.9 と 5.18 は共存ができたのに…。
仕方ないので、Strawberry Perl 5.18 をアンインストールしてから、5.20 をインストール。
5.18 の時と同じようにモジュールをインストールしていったけど、Text::Kakasi の時に大量の警告が。
Warning: .drectve `-defaultlib:MSVCRT ' unrecognized Warning: corrupt .drectve at end of def fileこれがずらずらと表示される。dmake test は PASS と表示されるのだけど…。とりあえず無視してそのままインストール。
cd C:\namazu\pltests\ して、perl alltests.pl を実行。…警告が出てくる。
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = "ja_JP.SJIS", LANG = "ja_JP.SJIS" are supported and installed on your system. perl: warning: Falling back to the system default locale ("Japanese_Japan.932"). *** starting alltests.pl perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = "ja_JP.SJIS", LANG = "ja_JP.SJIS" are supported and installed on your system. perl: warning: Falling back to the system default locale ("Japanese_Japan.932"). PASS: env.plja_JP.SJIS なんて無いよ、と言われてるのだろうか。Perl 5.20 からそのあたりの定義が変わったのかな…?
仕方ないので、set LANG=ja_JP.SJIS を、set LANG=Japanese_Japan.932 に変えてみたり。これって、後で何か問題が起きそうだよなあ…。既存の .pl が、ja_JP.SJIS があることを前提にして書かれてたりしそうだし。
とりあえず、結果は…。
C:\namazu\pltests>perl alltests.pl *** starting alltests.pl PASS: env.pl PASS: mknmz-1.pl ... PASS: mknmz-18.pl FAIL: idxdiff-1.pl FAIL: idxdiff-3.pl FAIL: namazu-1.pl FAIL: namazu-2.pl FAIL: namazu-3.pl PASS: namazu-4.pl FAIL: namazu-5.pl PASS: namazu-6.pl ... PASS: namazu-12.pl FAIL: namazu-cgi-1.pl FAIL: namazu-cgi-2.pl PASS: namazu-cgi-3.pl ... PASS: namazu-cgi-12.pl ==================== 8 of 40 tests failed ====================ダメだこりゃ。
意味も分からず SET LANG=ja_JP.EUC-JP にしてみたけど結果は同じ。
Strawberry Perl のバージョンを上げたら動作が変わってしまったということは、過去の版を使えばテストが通ったりするのだろうか?
Strawberry Perl 5.16.3.1 をインストールして試してみた。
> perl alltests.pl *** starting alltests.pl PASS: env.pl PASS: mknmz-1.pl ... PASS: mknmz-18.pl PASS: idxdiff-1.pl PASS: idxdiff-3.pl PASS: namazu-1.pl ... PASS: kakasi-3.pl =================== All 43 tests passed ===================おお。通った…。
Strawberry Perl 5.8.9.5 をインストールして試してみた。しかし、こちらはそもそも Text::Kakasi がビルドできない。
Namazu for Windows + ActivePerl じゃなくて、Namazu for Windows + Strawberry Perl でも動作するなら…。Namazu for Windows が、仮に Perl の特定バージョンでしか動かない状況だとしても、Strawberry Perl の古い版なら入手可能だからなんとかなるかな、てなことを思って試していたのですけど。ちょっとなんとかなりそうな雰囲気っぽいかもしれず。
でも、Search::Namazu が入らないのがちと気になりますけど。
この記事へのツッコミ
[ ツッコミを読む(4) | ツッコむ ]
以上です。
日本語なら ja_JP.SJIS しか選択肢はありません。
記憶が不確かですが、OLE::Stoage_Lite をインストールと別フィルタを使って処理するので、一太郎文書コンバータは使われず、ダイアログは出なくなります。