Module::Starter(::PBP)を試したが、残念な結果に終わったので、次に手を出すことにした。
Module::Setupです。
参考
YappoLogs: Module::Setup - pmsetupをモジュール化した


StrawberryPerlをインストールしているので、cpanからさっくりとインストールを試してみます。

1
C:\> cpan -i Module::Setup

依存モジュールのModule::Collectのテストでこけました。
が、とりあえず強制的に入れました。

1
C:\> cpan -f Module::Collect

この後、もう一度試しましたが、結局テストでこけたので、またも強制インストール。

1
C:\> cpan -f Module::Setup

本来はあまりよくないでしょうが、Windowsという環境下でもあるので、ある程度は気にしません。
C:\strawberry\perl\binにmodule-setup.batができていましたので、おそらく問題ないでしょう。
無事(?)インストールできたということで、開発者のブログの解説を見ながら簡単に使ってみます。
まずは、Module::Setupならではのflavor機能を使ってみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
C:\home\nqou> module-setup --init
Creating *****\.module-setup\flavors\default\template\Makefile.PL
Creating *****\.module-setup\flavors\default\template\t\00_compile.t
Creating *****\.module-setup\flavors\default\template\xt\01_podspell.t
Creating *****\.module-setup\flavors\default\template\xt\02_perlcritic.t
Creating *****\.module-setup\flavors\default\template\xt\03_pod.t
Creating *****\.module-setup\flavors\default\template\xt\perlcriticrc
Creating *****\.module-setup\flavors\default\template\Changes
Creating *****\.module-setup\flavors\default\template\lib\____var-module_path-var____.pm
Creating *****\.module-setup\flavors\default\template\MANIFEST.SKIP
Creating *****\.module-setup\flavors\default\template\README
Creating *****\.module-setup\flavors\default\template\.shipit
Creating directory *****\.module-setup\flavors\default\additional
Dump config *****\.module-setup\flavors\default\additional\config.yaml
Creating directory *****\.module-setup\flavors\default\plugins
Creating directory *****\.module-setup\flavors\default\template
Do you use SVN? [yN] [n] y
You chose version control system: SVN
Do you use SVK? [yN] [n]
Do you use Git? [yN] [n]
Your name: [Default Name]
Your email: [default {at} example.com]
Dump config *****\.module-setup\flavors\default\config.yaml

module-setupのオプションに「–init」をつけることでホームディレクトリ(ここでは消しましたが、C:\Documents and Settings\ユーザー名)に.module-setupというフォルダができ、その中のflavorsフォルダの中にflavor名で展開されます。
途中、名前と電子メールとバージョン管理に関するいくつかの設定を訊かれます。
名前や電子メールは作成するモジュールの雛形に書き込まれます。
バージョン管理は、今のところsvnだけは使って(というか、使おうとして)いるので、svnだけyにしました。
flavorができたところで、これに基づいてモジュールのスケルトンを作っていきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
C:\home\nqou> module-setup My::Module
[1]: default
[2]: dmake
[3]: xs
Select flavor: [1] 1
You chose flavor: default
Subversion friendly? [Yn] [y]
Creating directory My-Module\trunk
Creating directory My-Module\tags
Creating directory My-Module\branches
Creating directory My-Module\trunk
Creating My-Module\trunk\.shipit
Creating My-Module\trunk\Changes
Creating My-Module\trunk\Makefile.PL
Creating My-Module\trunk\MANIFEST.SKIP
Creating My-Module\trunk\README
Creating My-Module\trunk\lib\My\Module.pm
Creating My-Module\trunk\t\00_compile.t
Creating My-Module\trunk\xt\01_podspell.t
Creating My-Module\trunk\xt\02_perlcritic.t
Creating My-Module\trunk\xt\03_pod.t
Creating My-Module\trunk\xt\perlcriticrc
Check Makefile.PL? [Yn] [y] n

flavorがいくつかある場合は、どのflavorを使うか選択画面が出ます。
svnを使う設定にしていると、subversionと相性がいいようにディレクトリを作ってくれます。
最後に、Makefile.PLをチェックするか聞いてきますが、defaultだと、makeコマンドが「make」になってしまうので、チェックはスキップします。
このあたりはプラグインでどうにかなります。
makeコマンドをStrawberryPerl仕様の「dmake.exe」に変更するためにpluginを作成しました。
そうやって作ったflavorが(既に出てきましたが)「dmake」です。
.module-setup\flavors\dmake\plugins\Test\Dmake.pm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Module::Setup::Plugin::Test::Dmake;
use strict;
use warnings;
use base 'Module::Setup::Plugin';
sub register {
my($self, ) = @_;
$self->add_trigger( check_skeleton_directory => \&check_skeleton_directory );
}
sub check_skeleton_directory {
my $self = shift;
return unless $self->dialog("Check Makefile.PL? [Yn] ", 'y') =~ /[Yy]/;
!$self->system('perl', 'Makefile.PL') or die $?;
!$self->system('dmake', 'test') or die $?;
!$self->system('dmake', 'manifest') or die $?;
!$self->system('dmake', 'distclean') or die $?;
}
1;

pluginを作ったら、configも変更する必要があります。
.module-setup\flavors\dmake\config.yaml

1
2
3
4
5
6
7
8
9
---
author: Default Name
email: 'default {at} example.com'
plugins:
- Config::Basic
- Template
- Test::Dmake
- Additional
- VC::SVN

まあ、スケルトンはこんな感じでうまくいきました。
問題は中身ですが、それはこれから…。
ちなみに、「xs」のflavorは以下のページの物を使いました。
作るわけではありませんが、flavorの使い方に慣れるためにやってみました。
参考
XSモジュール用のModule::Setupのflavorを作った - Clouder::Blogger