minilla を使って cocoa な xs module を書く

環境を作るにはまず、

minil new -p XS Cocoa-Hoge

をしたのち

builder/MyBuilder.pm で build するようにします

package builder::MyBuilder;

use strict;
use warnings;
use parent qw(Module::Build);
use File::Copy;

sub new {
    my ($self, %args) = @_;
    $self->SUPER::new(
        %args,
        extra_compiler_flags => ['-Wall'],
        extra_linker_flags => ['-framework', 'Foundation'],
    );
}

sub compile_c {
    my ($self, $file, %args) = @_;

    (my $m_file = $file) =~ s/\.c$/.m/;
    move($file, $m_file) or die $!;

    $self->SUPER::compile_c($m_file, %args);
}

1;

builder っていう名前の件は Perlの話題を日本語で – Lingr 辺りを見るといいようですね。
compile_c の件は Mac-ExtAudioFile/Build.PL at master · typester/Mac-ExtAudioFile · GitHub を見るといいですね。

次に minil.toml に builder::MyBuilder で build するよう指定します

[build]
build_class = "builder::MyBuilder"
[no_index]
directory = ['t', 'xt', 'inc', 'share', 'eg', 'examples', 'author', 'builder']

みたいな感じに builder は index されないように指定するといいようですね。

こういう感じで git に commit したら

minil build

で Build.PL とかを生成されると良い感じに置き換わってるようです。

後は Cocoa/Hoge.xs に objective-c とか書いていって minil build とか test とかすればいい感じです。
cocoa な xs な書き方は Hacking Mac OSX Cocoa API from Perl とか typester (Daisuke Murase) · GitHub の cocoa namespace なやつを見るといいですね。

色々教えてくれた、 typester 先生、 songmu 先生ありがとうございました。
これで minilla で cocoa な module が書けて捗りそうですね。