Makefile.PLで決める設定値をテストに渡す
はじめに
d:id:ZIGOROu:20061130:1164840144 の続きです。
komamiya氏の物をもう少し小綺麗に書き直してみました。
komamiya氏ありがトン。
testセクションに指定した環境変数を渡すMYモジュール
package MY; use strict; use warnings; our @INCLUDE_ENV = (); sub test { my ( $self, %attrs ) = @_; my $env = join( " " => map { sprintf( "%s=\"%s\"" => $_, $ENV{$_} ) } grep { exists $ENV{$_} } @INCLUDE_ENV ); my $section = $self->SUPER::test(%attrs); $section =~ s|(PERL_DL_NONLAZY=1)|$1 $env|g if ($env); return $section; } 1;
@MY::INCLUDE_ENVに渡したい環境変数だけ指定してあげれば、
それらの環境変数がセットされていればmake test時のパラメータとしてセットします。
t/lib/MY.pmとかやって、Makefile.PL中では、
use lib qw(t/lib); use inc::Module::Install; use MY; @MY::INCLUDE_ENV = qw/FOO BAR/; name('Dummy-Module'); author('Toru Yamaguchi <zigorou@cpan.org>'); version_from('lib/Dummy/Module.pm'); abstract('dummy'); license('perl'); auto_include; auto_install; $ENV{FOO} = prompt("Input FOO value: ", "foo"); $ENV{BAR} = prompt("Input BAR value: ", "bar"); WriteAll;
みたいな記述でOKだと思います。
こんな風にして指定したt/lib/MY.pmはMANIFEST.SKIPで予め除外しておくと、
make manifestから一覧から消えるのと、t以下の"モジュール"は、
make install時にインストールされないので、一時的なモジュールならばt以下に置くのが吉。
test_dynamic :: pure_all PERL_DL_NONLAZY=1 FOO="foo" BAR="bar" $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), ' inc', '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES) testdb_dynamic :: pure_all PERL_DL_NONLAZY=1 FOO="foo" BAR="bar" $(FULLPERLRUN) $(TESTDB_SW) "-Iinc" "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST _FILE)
こんな風にMakefileが書き出されます。