Hatena::ブログ(Diary)

Islands in the byte stream

2010-11-01

perl Makefile.PL | cpanm # for devel requires

Makefile.PL自身のためのモジュールをどう管理するかが結構面倒なわけです。M::IのプラグインでいえばModule::Install::AuthorRequiresがあるのですが、これは単にインストールされていないモジュールを報告するだけで、結局インストールは手作業で行わなければならない。

これについては過去に考えたこともあります。

Install developper's prerequisites with cpanm - Islands in the byte stream

しかし上記の方法では結局二度手間なので気に入らないんですよね。

そこで今日思いついたのが以下の方法。Makefile.PLに記述します。これなら一ファイルですみますし、モジュール名の入力は一度だけですから管理の手間もかかりません。しかも、一度Makefile.PLを実行してエラーになったら`perl Makefile.PL | cpanm`とすると自動でインストールまでしてくれるという親切設計!

どうでしょう、この方法。

# Makefile.PL
use strict;
BEGIN {
    my @devmods = qw(
        inc::Module::Install
        Module::Install::ReadmeFromPod
        Module::Install::ReadmeMarkdownFromPod
        Module::Install::TestTarget
        Module::Install::AuthorRequires
        Module::Install::Repository
    );
    my @not_available;
    foreach my $mod(@devmods) {
        eval qq{require $mod} or push @not_available, $mod;
    }
    if(@not_available) {
        print qq{# The following modules are not available.\n};
        print qq{# `perl $0 | cpanm` will install them:\n};
        print $_, "\n" for @not_available;
     }
}
use inc::Module::Install;
# ...
トラックバック - http://d.hatena.ne.jp/gfx/20101101/1288608299