Module::Install::CPANfileと同じ事をModule::Buildでもやりたい

Build.PL

use Module::Build;
use Module::CPANfile;

my $file = Module::CPANfile->load("cpanfile");
my $prereq = $file->prereq_specs;

my $build = Module::Build->new(
    license              => 'perl',
    dynamic_config       => 0,
    configure_requires   => $prereq->{configure}->{requires},
    build_requires       => {
        $prereq->{build} ? %{$prereq->{build}->{requires}} : (),
        $prereq->{test} ? %{$prereq->{test}->{requires}} : (),
    },
    requires             => $prereq->{runtime}->{requires},
    no_index    => { 'directory' => [ 'inc' ] },
    name        => 'Foo-Bar',
    module_name => 'Foo::Bar',

    test_files => (-d '.git' || $ENV{RELEASE_TESTING}) ? 't/ xt/' : 't/',
    recursive_test_files => 1,

    create_readme  => 1,
    create_license => 1,
);
$build->create_build_script();

cpanfile

requires 'LWP::UserAgent' => '6.02';
requires 'HTTP::Message'  => '6.04'; 

on 'test' => sub {
   requires 'Test::More'     => '0.98';
};

on 'configure' => sub {
   requires 'Module::Build'     => '0.38';
   requires 'Module::CPANfile' => '0.9010';
};

Build.PLがModule::CPANfileに依存するようになるのだが、META.{yml,json}のconfigure_requires(CPAN Meta Spec 2では {prereqs}->{configure})にModule::CPANfileが追加されるので事前に導入されてなくても自動で依存解決され、モジュールのインストールができるはず。ただし、cpanm 1.6002以上じゃないとCPAN Meta Spec 2の{prereqs}->{configure}に対応していないので注意です

追記

Module::Buildは0.3800からCPAN Meta Spec 2 でMETA.jsonを書き出すようになってます。ただしMETA.ymlは今まで通りのMeta Spec 1.4になっています。

YAMLがSpec 1.xで、JSONがSpec 2なのは後方互換性のためのようです。Spec 2ではJSONが優先フォーマットなので新しいツールはMETA.jsonを使い、古いツールはMETA.ymlしかみません。

cpanmの 1.5_11 で META.jsonを読み込む変更が入った際に Spec 2の prereqsではなくconfigure_requiresを参照していた問題がありましたが、1.6002 で修正されたので今は安心して使えます

このブログ記事について

このページは、Masahiro Naganoが2013年2月28日 11:15に書いたブログ記事です。

ひとつ前のブログ記事は「derivedがプラグインアーキテクチャになってGrowthForecastに直接POSTできるようになったので、Javaのヒープのモニタリングをしてみた」です。

次のブログ記事は「Module::Build::Pluggale::CAPNfile - Module::Build meets cpanfile」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja