c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

WindowsとPerlとCPANモジュール

上でも書いた通り、客先にPerl環境を構築する為にXAMPPのPerlAdd-onを利用する事を思いついた。

要はActivePerlなのだが、インストールが要らない、所定のPath*1にコピーして設置すれば良い。

やったー、これでばっちりじゃーんとおもってうきうきしながらPerl -MCPANとかやっていたのだが、モジュールインストールの壁にぶち当たる。
ActivePerlなので、PPMをつかえばいいじゃんかとおもったが、今回使っているJSON::XSはPPMには残念ながら無かった。
別のJSONライブラリで書き換える事も考えたのだが、将来的にこの手法(XAMPPのPerlを使う)を使ってみるにはWindowsで実際にCPANが使えるかどうかはかなり重要なポイントだろう。
調べてみたら案外簡単だったので、メモ。


まず、Windowsには通常makeがないのでnmakeをDLしてきて入れる。
http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe
exeを実行するとnmake本体が出てくるので、nmake.exeをPathの通ったディレクトリにコピーする。
(c:\Windows等、ちゃんと行儀良くPath指定したほうが勿論良いけれど)


これでPurePerlなモジュールはInstallできる、素晴らしい。
しかし、ここでさらに問題にぶち当たる。JSON::XSはPurePerlなモジュールではなかったのだ(Cライブラリで書かれている)。


ビルドにCコンパイラが必要だ、しかしこのPCに入っているのはCygwinコンパイラだけ。これはCygwinのDLLが必要になるので却下。
フリーのコンパイラは色々ある、それこそMicrosoftからからBorland(あれ?今インプライズだっけ?もどったよね)、GNUなど。
まあ今回は各地で紹介されていたMinGW(要はgcc)を使ってみる事にした(Minimal Gnu Windowsらしい)。
http://www.mingw.org/
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=240780&release_id=529741


で、これをいれて挑戦すると…あれ?また失敗しちゃったよ?input file エラー?なんだそれ?

一瞬謎に思ったけれど、俺の環境の場合はPathが通っているCygwin環境とバッティングしていたのだった(Cygwinファイルシステム空間と違うからねー)
set PATH=c:\path\to\mingw\bin;%PATH%
みたいな事をやってMinGWのPathが前に来るようにしてみたら無事にMingwgccが動くようになり、きちんDLLも作成され、無事にMake installできたのだった。


で、実際にモジュールがインストールできれば(ライブラリができれば)コンパイラやnmakeはいらないので、ポイして良しですね。お客の環境には入れないでOKです。


環境をお客の所にもっていくには200MbyteくらいのXamppディレクトリを丸ごとコピーして、ポンと置けば動作、お手軽。
コピーだけだとPerlバイナリにPathは通らないけど、そんなの実際にお客が触るバッチファイルをきちんと書き込めばその辺りも問題無しだし。
(バッチを書くときには c:\xampp\toではなく、 \xampp\fileと書くようにすれば、cドライブへの縛りも無し、相対パスでもいいけどね)


うーん完璧です、これでPerlのモジュールを自由につかったスクリプトを納品する事が出来ます、素晴らしすぎる。

  • -

そういえば、Xamppのインストーラはインストール後にバッチ実行するだけでインストールパスをXampp以外に変更できてたなあ、
そのうちそこらへん追ってみようかな、Xamppってディレクトリ名もちょっとカッコワルイし。

*1:どのドライブでもよいが、ルートにXamppディレクトリを置く