MinGWに加えてGit for Windows、Strawberry Perl、DevKit付きのRubyInstallerと、MinGWがいっぱい入ってる。こういう環境だとStrawberry PerlのセットアップでPATH
環境変数にld.exe
とかがあるフォルダーへのパスを追加される(または追加する必要がある)のがコンフリクトの原因になってとても厄介。どうせもうcpanm
しか使わないので、そのラッパー書いてRubyInstallerのDevKitとRubyGemの挙動に似たような感じにごまかすことにしたメモ。
RubyInstallerのDevKitとRubyGemはうまく出来ていて、DevKitをインストールするとRubyGemでインストール系のコマンドを使う時にだけPATH
にDevKitのフォルダーを追加してくれるようになっている(んだと思う)。優先してPATH
に追加されるので、かなりコンフリクトに強い。というかMinGWは使うときにだけPATH
に追加するのが王道だと思うので、こっちの方が素直な利用法な気がする。
@echo off
echo Temporary enhancing PATH to include build tools...
cmd /c set PATH=C:\strawberry\c\bin;%PATH% && C:\strawberry\perl\bin\cpanm.bat %*
これをcpanmw.bat
などとしてパスの通った所に置いておくだけ。Windowsのパス管理の仕様上、cpanm.bat
としてそれを使わせようとするのは茨の道なので止めておいた方が良い。
C:\> cpanmw JSON::XS
全ての引数をそのまま渡すのでcpanm
コマンドと使い方は同じ。
このままだと例えばLWP::UserAgentでhttpsにアクセスする場合とかにDLLがなくて怒られるので、dmake.exe
やld.exe
とかがあるフォルダーにあるDLLファイルをperl.exe
があるフォルダーにコピーするという荒業でごまかしている。他にも不具合ありそうだけど、特定のモジュールがうまく動かないかcpanm
でのユーザー領域へのモジュールのインストールが失敗するくらいだと思うので、あまり環境がぶっ壊れる感じにはならないんじゃないかと思う。