5

私は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にコピーできません。blibmake 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/libmake 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.PLlib

(これは特にばかげています。私は MakeMaker を 10 年間維持しましたが、これを修正できませんでした。)

4

1 に答える 1