トップ(最新)

nDiki

2005年8月24日 (水)

Module::Buildソースパッケージング このエントリーを含むはてなブックマーク

@ ExtUtils::MakeMaker

私が Perl が好きな理由の一つに、標準でExtUtils::MakeMakerという Makefile ジェネレータがついているところである。これを使って Makefile.PL を書くと

 perl Makefile.PL
 make manifest
 make
 make test
 make dist

で <pacakge>-<versionno>.tar.gz というソースパッケージを作ることができ、

 tar zxvf <pacakge>-<versionno>.tar.gz
 cd <pacakge>-<versionno>
 perl Makefile.PL
 make
 make test
 make install

という手順でインストールする事ができるようになる。 パッケージの作り方が確立されているので、容易に新しいパッケージを開発しはじめられる。

逆に Java でプログラムを書くのが億劫なのは、このあたりの準備が面倒だからである。 Ant を使っても結局ここら辺自分でやらなければならないし。

@ ちょっとしたアーカイブの作成

ちょっとしたパッケージを作りたいと思うことは良くある。 例えばいくつかのデータファイルと、READMEファイルなんかをひとまとめにしてアーカイブにするとか。

本当にちょっとしたであれば、手動でアーカイブすれば良いのだが、

  • アーカイブしたいファイル群がバージョン管理下にあって、CVS ディレクトリや .svn ディレクトリがある (除外してアーカイブする必要がある)
  • 同じディレクトリにある、作業用のファイルはアーカイブしたくない (除外してアーカイブする必要がある)
  • アーカイブする前に、チェック用のリグレッションテスト一式を走らせたい (リグレッションテストをかけられるようにする)
  • UNIX でも Windows でもアーカイブ化できるようにしたい。

あたりを考慮しなければならない時は面倒くさくなってくる。

自動化としては

あたりがぱっと思い浮かぶ。 しかし、最初の2つは毎回同じようなものを書くのが面倒だし保守もしにくい。 GNU Autotools はちょっとごっつすぎだし、Windows での環境構築も面倒。

@ ExtUtils::MakeMaker の欠点

ということで最初は ExtUtils::MakeMaker を使うという線で考えてみた。 もともと Perl モジュール用で汎用用途にはちょっと邪魔な振舞いもあるが、使えないことはないと思う。 しかし make (GNU Make あるいは nmake など) に依存しているという欠点がある。

@ Module::Build

ということで ExtUtils::MakeMaker の代替である Module::Build ベースで汎用用途に使えないか検討してみた。こちらは pure Perl で make を必要としない。

Module::BuildPerl モジュールビルドにあわせた振舞いがあるものの、ちょっとカスタマイズすれば使えそうだ。 で、いろいろいじった結果、次のような感じにすると使いやすそうだ。

 use Module::Build;
 my $class = Module::Build
   ->subclass(class => 'NonmoduleBuilder',
              code => q{
                        # Don't make blib
                        sub ACTION_code {};
                        # Don't make blib
                        sub ACTION_docs {};
                        # Don't make META.yml
                        sub ACTION_distmeta {
                          # no warning on ACTION_distdir
                          $_[0]->{metafile} = 'MANIFEST';
                        };
                        # Don't add MEATA.yml to MANIFEST
                        sub ACTION_manifest {
                          $_[0]->{metafile} = 'MANIFEST',
                          $_[0]->SUPER::ACTION_manifest(@_);
                        };
                       });

 # Set your archive name and version.
 $class->new(dist_name => 'mypackage',
             dist_version => '1.0.2',
             )->create_build_script;

カスタマイズした部分は以下(Module::Build 0.26 で動作確認)。

  • Perl モジュールビルドに特有の blib ディレクトリを作らないようにする。
  • META.yml を生成しないようにし、アーカイブに含まれないようにする。

上記のようなファイルを Build.PL という名前で作っておけば

 perl Build.PL
 ./Build manifest
 ./Build
 ./Build test
 ./Build dist

等として、アーカイブ作成が容易にできるようになる。

しばらくこの方法でいろいろ試してみることにしてみよう。

スポンサード リンク


[ 8月24日全て ]

Related term

■よく検索されるキーワード

torrent(142) expressions(72) 書き方(46) 竹内まりや(46) perl(42) 提案書(38) linux(38) windows(36) アジェンダ(34) x31(32) cvs(28) wiki(27) usb(26) ドラマ(22) 使い方(20) svn(20) アジェンダとは(20) centos(20) ganttproject(20) 設定(19) java(19) インストール(18) 秋葉原(18) debian(18) thinkpad(18) サンプル(18) 動画(17) ノート(15) 手帳(13) a6(13) truecrypt(13) tc-1(13) tortoisesvn(13) 無印(12) ssh(12) rcs(12) subversion(12) 冷蔵庫(12) nikon(12) allinanchor:*.torrent(12) firefox(11) ガントチャート(11) 画像(11) 日本語(11) 生年月日(11) apache(11) メール(11) ダイソー(10) 無料(10) 壁紙(10) リフィル(10) ubuntu(10) 作り方(10) dropbox(10) c#(9) xp(9) oracle(9) xampp(9) terastation(8) 方眼(8) マイク(8) ヨドバシカメラ(8) テンプレート(8) ほぼ日(8) cwrsync(8) google(8) ming(8) 評判(8) 影舞(8) madwifi(8) アカウント(8) window(8) usbメモリ(8) gantt(8) project(7) 三条まゆみ(7) hdd(7) 変換(7) カバー(7) 交換(7)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.36586s / load averages: 0.98, 1.07, 1.21
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)