Blog

Perl5 用の Rake っぽいのできたよー

http://frepan.org/~tokuhirom/Daiku-0.01/

Rake みたいなの、Perl にも欲しいね、って5年ぐらい前からおもってたけどいいのができたって噂をきかないので自分でかいた。

    #! perl
    use Daiku;
    use autodie ':all';

    task 'all' => 'foo';
    file 'foo' => 'foo.o' => sub {
        system "gcc -c foo foo.o";
    };
    rule '.o' => '.c' => sub {
        system "gcc -c foo.o foo.c";
    };

    build shift @ARGV || 'all';

こういうかんじでつかえる。簡単でしょ。


以下設計のメモ。

基本的には Rake とインターフェイスをあわせめでつくってる。巨人の肩に云々。

DSL を DSL としてゴリゴリ実装すると、わけわかんないことになるんで、OO でコアのエンジン部分を実装してから DSL を実装してる。その方がのちのちメンテしやすくなることが経験によりあきらかになっている。

最初はゴリゴリかいてたんだけど、Mouse つかった方が楽っぽかったんで Mouse つかった。依存がいやとかいわれたら Mou*s*se つかいますので!

Rake は Rakefile っていうファイルを rake コマンドで実行するけど、あれは make(1) の幻影にとらわれすぎで、モジュールとして提供されていれば十分だとかんじた。


類似品に TinyMake というものがあることを今みつけた。しかしこれ 2005 年以後メンテされてないっぽいし、今自分にもっとも必要な mtime をみるという機能がかけているっぽいので、まあいいや。
というか mtime みないとビルドに時間かかってしょうがないよね。
http://search.cpan.org/dist/TinyMake/