トップ(最新)

nDiki : Module::Build

Module::Build

スポンサード リンク

Related term

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

スポンサード リンク

Related web page

nDiki: Module::Build でソースパッケージング (2005-08-24)
■■ <strong>Module::Build</strong> でソースパッケージング @ ExtUtils::MakeMaker 私が Perl が好きな理由の一つに、標準でExtUtils::MakeMakerという Makefile ジェネレータがついているところである。これを使って Makefile.PL を書くと perl Makefile.PL make manifest make make test make dist で &lt;pacakge&gt;-&lt;versionno&gt;.tar.gz というソースパッケージを作ることができ、 tar zxvf &lt;pacakge&gt;-&lt;versionno&gt;.tar.gz cd &lt;pacakge&gt;-&lt;version
http://www.naney.org/diki/d/2005-08-24-Module-Build.html

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

torrent(56) 提案書(47) perl(45) windows(37) linux(31) 使い方(27) 書き方(25) debian(22) x31(22) usb(22) cvs(20) subversion(20) インストール(18) ドラマ(18) c#(17) mp980(17) svn(17) 修理(17) 手帳(16) ssh(15) 評判(15) アジェンダ(15) java(15) デロンギ(14) ガントチャート(13) 感想(13) n-01a(13) centos(13) tc-1(13) 充電式カイロ(13) ノート(12) ダイソー(12) thinkpad(12) rcs(12) f-01a(12) ヤマダ電機(12) ganttproject(12) 無印(11) ppm(11) レビュー(11) カイロ(11) 壁紙(11) 静電気(10) 動画(10) バッグインバッグ(10) ヨドバシカメラ(10) サンプル(10) アジェンダとは(10) wiki(10) ミノルタ(10) グッズ(10) 作り方(10) tortoisesvn(10) firefox(9) so905ics(9) memcached(9) 画像(9) gmail(9) ハクキンカイロ(9) 口コミ(9) a6(9) sh-01a(9) 冷蔵庫(9) ほぼ日手帳(9) mp3(8) emacs(8) 日本語(8) openssh(8) xampp(8) カメラ(8) nikon(8) 設定(8) 写真(8) 値段(7) flash(7) 方眼(7) web(7) docomo(7) カバー(7) リポジトリ(7)

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

Process Time: 1.268892s / load averages: 0.20, 0.28, 0.32
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)