私はMiteと呼ばれる Perl モジュールに取り組んでいます。いわば「コンパイラ」です。Moose のような宣言型 OO 構文を使用して Perl クラスを記述します。Mite は、実行されるたびにクラスをまとめるためのすべての作業を行うのではなく、ビルド時にその作業を行います。アクセサーや継承などの Perl コードを含む追加のファイルを生成します。
この余分なファイルはlib
、残りのコードと共に配置され、プロジェクトと共にリリースされます。その結果、インストール ユーザーは Mite をインストールする必要がなくなり、コードの読み込みが速くなります。
make
開発中、またはが実行されると、mite コンパイラが実行されBuild
ます。そのためmake test
、機能する./Build test
だけです。これは、MakeMakerまたはModule::Buildに特別なシムを使用することによって実現されます。
これは Module::Build では問題なく動作しますが、ExtUtils::MakeMaker は mite ファイルを認識しません。MakeMaker は、実行lib
時に何が入っているかのリストをハード コードしMakefile.PL
ます。その後、ステップは、生成されたファイルを表示される場所pm_to_lib
にコピーできません。blib
make test
この問題を回避するにはどうすればよいですか? (適切な shim をロードした後) プロセスが開発者に対して透明性を保ち、インストール ユーザーに特別な依存関係を必要としないことを願っています。
更新: これはより明確な例です。このようなプロジェクトがあるとしましょう。
Makefile.PL
lib/
Foo.pm
Bar.pm
Foo/
Thing.pm
t/
foo.t
bar.t
あなたが実行perl Makefile.PL
し、次にmake
。このmake
ステップは、.mite.pm
ファイルごとに追加のファイルを生成するように変更されました.pm
。ステップの後、make
私が欲しいのはこれです。
Makefile.PL
Makefile
lib/
Foo.pm
Foo.pm.mite.pm
Bar.pm
Bar.pm.mite.pm
Foo/
Thing.pm
Thing.pm.mite.pm
blib/
lib/
Foo.pm
Foo.pm.mite.pm
Bar.pm
Bar.pm.mite.pm
Foo/
Thing.pm
Thing.pm.mite.pm
t/
foo.t
bar.t
に導入されたすべての新しいファイルは、 の一部として表示される場所にlib
コピーされました。私が代わりに得るのはこれです。blib/lib
make test
Makefile.PL
Makefile
lib/
Foo.pm
Foo.pm.mite.pm
Bar.pm
Bar.pm.mite.pm
Foo/
Thing.pm
Thing.pm.mite.pm
blib/
lib/
Foo.pm
Bar.pm
Foo/
Thing.pm
t/
foo.t
bar.t
これは、の内容のハードコードされたリストを使用してMakefile
が生成されるためです。Makefile.PL
lib
(これは特にばかげています。私は MakeMaker を 10 年間維持しましたが、これを修正できませんでした。)