なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

めげずにPPMで頑張る

#注意 この記事はMinGW + msys 環境でのレポートです。普通はActivePerlでPPMダウンロードしとけばTkやWxは簡単にダウンロードできます。


どうやらperlCPANだけ使ってインストールするのは環境によっては難しい場合があるようだ。そこで使われる代替手段がPPMらしい。
cpanの設定がミスってなければ以下のコマンドで簡単にPPMモジュールはインストールできるだろう。

$ cpan install PPM

そしてコンソールからppmと打って、PPMの対話形式コンソールに移行すれば成功。

>PPM 

ただちょっと自分がインストールしたPPMは古かったようで、リポジトリの追加の仕方が若干違う。参考サイト

# 新バージョン
PPM> rep add DevelopHelp http://ppd.develop-help.com/ppd/
# 旧バージョン
PPM> set repository DevelopHelp http://ppd.develop-help.com/ppd/

TkモジュールのPPMを保持しているサイトはbribesというところらしいので以下のようにやってみる

PPM> set repository bribes http://www.bribes.org/perl/ppm/
PPM> set save
PPM> install Tk
Install package 'Tk?' (y/N): y
Installing package 'Tk'...
Error installing package 'Tk': Read a PPD for 'Tk', but it is not intended for this build of Perl (msys-64int-5.8)

ダメですかそうですか。。。
ならばWxはどうじゃろう。ちょうどwxWidgets発祥の地であるイギリスにPPMを用意してある所があった
wxPerl PPM Binaries

PPM> set repository wxPerl http://www.wxperl.co.uk/repository
PPM> set save
PPM> install Wx
Installing package 'Wx'...
Element 'IMPLEMENTATION' cannot contain a child element 'REQUIRE' at /usr/lib/perl5/site_perl/5.8/PPM.pm line 1677.
Can't locate object method "rvalidate" via package "PPM::XML::PPD::REQUIRE" at /usr/lib/perl5/site_perl/5.8/PPM/XML/ValidatingElement.pm line 38.


ん〜?このエラーはなんなんだろう。しかし少し近づいた感じはする。けどもやっぱしmsys + mingwPerlをやるのは限界があるなあ。
とくにこの表示が出たときはmsysではどうにもできない。

fatal error: netinet/in.h: No such file or directory

参考サイト
msysは完全なwin32perlを再現するつもりはないそうだ。だからwin32の部分に依存したパッケージとかはインストールできない。Cygwinなら出来る場合もある。
そしてperlWindowsで使う際はたいていActivePerlを使うようで、ActivePerlからMinGWをインストールする(!)。つまり本当はActivePerlからdmake, MinGW等をインストールしてwxPerlに進むべきだということだ。
追記:ActivePerlにはGUIPPM管理アプリケーションが付属するので、それを使えばかなり楽にwxPerlやTkをインストールすることができる。

別にwxPerlが使えないから何か問題というわけではないんだけど(…C++で書けばいいのですよトゥットゥルー)

追記 1 2012/01/23:WindowsPerlを使う場合はStrawberry Perlがいいです。ラリー・ウォールもそう言ってます。具体的にはCPANがかなり使いやすくなります。

追記2 なんでmsysでwxPerlができないのか?
それはCPANで配布されるwxPerlが内部でPOSIX向けのヘッダファイルを見ており、msysはPOSIX完全互換でないためビルドできないからである。msys + MinGWというのは最小限度のPOSIX互換層&Windowsネイティブ実行ファイルを作るための環境である。ActivePerlはその辺を調整しているはず。