nDiki : Module::Build

Module::Build

2005年4月20日 (水)

SConsGNU Autotools のかわりになるか

NSIS のサイトによるとビルドに「SCons」を使うようしたらしい。

  • クロスプラットフォーム
  • AutoconfAutomake と同様の機能を統合
  • LaTeX もビルトインサポート

と興味深いツールになっているようだ。

現在プロジェクトLaTeXベースのドキュメント生成には GNU Make を使っているのだが、UNIXWindows の両方でビルドできるようにするには ComSpec 環境変数の有無で使用するコマンドを切り換えたり等いろいろ面倒なので、代替ツールとして使えないかなと。

基本的な機能は Make に対する改良がなされているようであるし、コピー等ファイル操作も SCons 自体がもっているのでクロスプラットフォームでビルドできるようにするのも楽そうだ。

一方 Autoconf 系の機能については、インストール済みのライブラリの検出や実装レベルのチェック等を実装しているようである。 make check や make dist、make install 等にあたるターゲットに関する機能(あるいは規約)のようなものは無い。これは非常に残念。 結局自分が Ant を使わなくなったのも GNU Autotools にあるこれらの機能に欠けているからであるし。

実は私がPerl が好きな理由の一つとして、これらサポートが充実しているという点がある。Perl では ExtUtils::MakeMaker (あるいは Module::Build)があり、ビルドからテスト、ソースパッケージのパッケージングまでフレームワークが整っている。

SConsPython ベースで、Makefile にあたるファイルも Python スクリプトである。 SCons が影響を受けた Cons は Perl ベースであったのだが、既に2001年5月ごろから開発が止まってしまっている。残念。

ということで Make の代替には使えそうであるが、GNU Autotools と同じようなことをするにはいろいろ手をかけないといけないといった印象。

[ 4月20日全て ]

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日全て ]

2006年4月29日 (土)

最新の Module::InstallPerl 5.005_03 ステ?

ゴールデンウィークに突入。 9連休を利用して、一気に WiKicker コーディングを企んでいる。

さっそくちょこちょこ修正してパッケージングし、www.naney.org へインストール。 …… Perl Makefile.PL でコケる。

どうも use inc::Module::Install; でエラーを起してしまっているようだ。 Makefile.PL は変更していないので、そうすると Module::Install の問題っぽい。

tarball をパッケージングするホスト側の Module::Install を 0.57 まで落としたところ、Perl 5.005_03 でも通るようになった。

Module::Install is a package for writing installers for CPAN (or CPAN-like) distributions that are clean, simple, minimalist, act in a strictly correct manner with both the ExtUtils::MakeMaker and Module::Build build systems, and will run on any Perl installation version 5.004 or newer. (Module::Install 0.61 より)

とあるように古い Perl もサポートにも気を払っているのが気にいって ExtUtils::MakeMaker から移行しただけにちょっと残念。

今後また 5.005_03 でも動くようになるのか、それとも捨てられるのか要チェック。

[ 4月29日全て ]

2007年8月16日 (木)

Module::BuildZIP ファイルを作る

Module::Build 0.26 には ExtUtils::MakeMaker のように zipdist ターゲットがないので ACTION を追加してみた。

 use Module::Build
 my $class Module::Build->subclass(
   class => 'Packager',
   code  => q {
     sub ACTION_zipdist {
       my ($self) = @_;
       my $dist_dir = $self->dist_dir;
       $self->depends_on('distdir');
       print "Creating $dist_dir.zip\n";
       system("zip -r $dist_dir.zip $dist_dir") == 0 or die $?;
       $self->delete_filetree($dist_dir);
     }
   });

これで ./Build zipdist できるようになる。

[ 8月16日全て ]

2013年2月13日 (水)

今日のさえずり: 新しいメンバが「幸せです」と言っていたので私も幸せです

rimage:/nDiki/Flickr/8468461907.jpg

2013年02月13日

  • 07:47 バレンタインチョコ! http://t.co/fjXRXgqF
  • 07:58 RT @maru_kei: ビープでPCM再生とかね。 RT @Naney: 16色表示機種で VRAM 高速切り替えで多色表示化するビューアーってあったよねーて話したけど伝わらなかった。
  • 08:13 @maru_kei 大学の FMR(だったかな?)で鳴らしてました。
  • 08:16 twitcle plus 1.0.1 で素早く改善要望対応・不具合修正してきて素晴しい。命がけの絶対時刻表示とかクライアント名表示とか。今後次第では永久保存 .apk になるかも。個人的には API 残数見られると嬉しいです。
  • 09:49 着席。 (@ 株式会社ミクシィ (mixi, Inc.)) http://t.co/MLvJm4vq
  • 12:21 git fsck してる。
  • 12:23 でも QGit が"ASSERT in Cache::load, corrupted SHA after ..." といって止まるので泣ける。
  • 12:26 QGit が止まっているように見えたのはモーダルダイアログが裏に回っているだけだった。
  • 12:40 開発環境で投稿した不健全投稿に対して若い女子から「イイネ!」されてて恥ずかしい。違うんです。テストなんです。
  • 14:57 “Sleeping Time @Naneyhttp://t.co/dSXaoq5J
  • 18:16 新しいメンバが「幸せです」と言っていたので私も幸せです。
  • 18:21 今日 TPP と言った気がしますが TAP の言い間違いです。
  • 18:42 「今は Module::Build を使っておけば良いんじゃないかと思っています」 / “おそらくはそれさえも平凡な日々: CPANモジュールのパッケージングの歴史” http://t.co/2rY45dYT
  • 18:42 “[D] Flickr画像に自動的にExif情報を付加するブログパーツ FlickrEx - Drift Diary XV” http://t.co/GtEnllaB
  • 19:05 今からロイヤルティの勉強する。
  • 20:55 RT @matsutakegohan1: 今日は社内でカスタマーロイヤリティの勉強会を行っております。よりお客様に近いサービスを目指します! http://t.co/7JeVMsZi
  • 22:42Twitter API v1.1とNet::Twitter::Lite - $shibayu36->blog;” http://t.co/dGytnATL
  • 23:49 @as_tone おいしい蕎麦屋さんプリーズ。
  • 23:54 親がくれるチョコを義理チョコと呼ぶのはまだ小僧。
  • 24:19 晩御飯食べ終わったので毎日の習慣通り冷蔵庫からチョコレート出して食べた。
[ 2月13日全て ]

About

Naney Naneymx

Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Process Time: 0.024181s / load averages: 0.66, 0.38, 0.30