ExtUtils::MakeMakerでPUREPERL_ONLYに対応する方法

先日のランカスター・コンセンサスで、pure perlなモジュールのみインストールするよう強制したい場合はPUREPERL_ONLY=1という値をPERL_MM_OPTに追加するか、コマンドラインオプションとして渡すべし、という話になったわけですが、ふつうのモジュールを書いている人がいちいち環境変数コマンドラインオプションをチェックするのはいかにも面倒ですよね。

いささか行儀の悪い方法ですが、以下のようにEUMMを(最小限の設定で)newしたあと、内部的に利用されているARGSというハッシュキーを利用すると、(いまのところ未知のオプションということで警告は出るものの) PERL_MM_OPTやコマンドラインオプションの処理が終わった状態のPUREPERL_ONLYの情報がとれるようになります。

use strict;
use warnings;
use ExtUtils::MakeMaker;

my %mm_args = (
    NAME => 'Foo::Bar',
    ...
);

my $eumm = ExtUtils::MakeMaker->new(\%mm_args);
my $pureperl_only = $eumm->{ARGS}{PUREPERL_ONLY};

if ($pureperl_only) {
    # 消したり変更するオプションの内容は適宜変えてください
    delete $mm_args{$_} for (qw/XS XSOPT LIBS INC/);
}

WriteMakefile(%mm_args);