Module::Install 0.99

前回以降さらにいくつかのチケットを修正したModule::Install 0.98/0.99が出ています。0.99といってもまだ大物が手つかずで残っているので、すべての機能を安心して使えるようになるまでにはしばらくかかりそうですが、前回ここでお知らせした0.95からこの方、わりと大きな変更が入っているにもかかわらず当事者以外には説明してこなかったので、いくつかの点についてのみ簡単に書いておきます。

Module::Install::APIとModule::Install::FAQ

時間がとれたらそのうち日本語にもしておきますが、とりあえず英語でAPIドキュメントとFAQを書いておきました。すでに修正が追いついていない部分もありますが、疑問があったらとりあえずこのふたつをご確認くださいませ。ここに書いていないコマンド、あるいはオープンにしていないコマンドは、壊れている、古い、内部向け、その他、さまざまな理由で非推奨のものです。

ExtUtils::MakeMakerのPODも読んで

Module::InstallはEUMMのラッパにすぎません。凝ったことをしたかったらまずはEUMMのPODに目を通しておいてください。Module::InstallのPODにEUMMの世界でもめったに使われないディープな機能の説明まで求められても困ります。

auto_include/auto_bundleその他は使わないで

どちらも基本的にこわれています。いまの実装でも正しく動かすための回避策がないわけではないですが、多くの人が無自覚に使っているauto_includeについては特に問題が多いので、消しておくことをおすすめします。

subversionリポジトリにincを入れるときは要注意

いろんなポリシーがあるので一概にだめとはいいませんが、incディレクトリはperl Makefile.PLしたときに動的に再生成されるので、subversionで複数人開発、複数人リリースみたいなプロジェクトではinc配下に入れない方が無難。authorモードでリリースしていないがために起こる問題というのも出てきているので、もう少し強い対策を考えた方がいいのかも、とは思っています。

Makefile.PLにおかしな記述があった場合

従来は、関数プロトタイプを利用してかっこを省略した場合の記述ミスについてはコンパイルエラーとして捕捉できていたものの、かっこがついている関数については記述ミスがあっても捕捉できず、おかしな挙動の原因になっていたのですが、0.96で実行時エラーになるようにしました。最終的には「このエクステンションが入ってないんでね?」みたいなのを出せればいいんだろうなと思うのですが、その辺どうするかは未定。

.PLファイルは特殊なファイル

EUMM以来の伝統にしたがって、Makefile.PL/Build.PLをのぞく*.PL(拡張子大文字)のファイルは動的ファイル生成用の特殊なファイルとみなされるようにしました。ほとんどの人には関係ないと思いますが、ディストリビューションのトップディレクトリに拡張子PLのファイルを置くときは要注意です。

xtディレクトリの扱いについて

QAハッカソンなどでxtディレクトリについての扱いが話し合われたのを受けて、Module::Installコアでも0.93以降xtディレクトリをサポートするようになったのですが、この機能を追加したときに十分な話し合いが持たれなかったらしく既存の::ExtraTestsや::AuthorTestsなどとの相性がよくなかったので、0.96でとりあえず既存のモジュールが困らない形に変更しています。ただ、この問題については関係者間でもう少しまともなAPIを用意したいね、という話になっているので、将来的には再度変更が入る可能性が高いです。

サブディレクトリのMakefile.PL対応

暫定的な対応を行い、EUMM経由でサブディレクトリ配下のビルドもできるようになったのですが、現状サブディレクトリのMakefile.PLにModule::Installを使うと挙動がおかしくなる場合があります(EUMMなら大丈夫)。この件はbundleまわりとも密接にからんでいるのですが、やりすぎるとCPANインストーラの再実装に近い作業になるので、ほかのCPANを利用するコマンド群のことも考えながら、どこまで対応するか検討中。

その他、META.ymlに任意のメタデータを追加できるようにしたとか、antivirusの類が有効になっているとMakefile作成時にこけることがあった問題を修正したとかありますが、その辺はChangesとRTのチケットをご確認くださいませ。