nDiki : PPM::Make

PPM::Make

PPM::MakeActivePerlPerl Package Manager (PPM) でインストール管理を行うことのできる PPM パッケージを作成するための Perl モジュールである。

make_ppm コマンドで PPM パッケージを作成する事ができる。

 perl Makefile.PL
 nmake
 nmake test
 make_ppm

PPM::Make のバージョンによる情報

PPM::Make 0.52 以降では

を要求する。ActivePerl 5.6.1.638 では Getopt::Long 2.25 が標準バンドルなので置き換える必要がある。

ライセンス

It is distributed under the same terms as Perl itself.

関連情報

スポンサード リンク

2004年7月20日 (火)

PARActivePerl 5.6.1 build 638 に

昨日 Linux 上で実験してみた PARWindows にも入れてみる。 PDLを使っている関係で ActivePerl は 5.6.1。

インストール

ppm install で入るパッケージは古いので、最新のものを入れておく。 ちょっと手間。

ワンライナーを pp できるところまで動作確認。

モジュール + スクリプトを実行可能形式に

ExtUtils::Makemakerを使ってパッケージ化している開発中のモジュール(スクリプトあり、XS あり)を実行可能形式化してみる。

 perl Makefile.PL
 nmake
 nmake test
 cd blib
 set PERL5LIB=lib;arch (pp の -I オプションが効かなかったので)
 pp -o foo.exe -a lib -a arch -M ... -c  script/foo

Log::Log4perl::Appender::Screen、Jcode::Unicode::NoXS、Unicode::StringGD については依存関係を自動検出できなかったので、それぞれ -M で指定。

できた。動いた。素晴しい。 PDLGD を使っていたのでちょっと不安だったのだがうまく動いて感激。 これでCD-ROMとか USB メモリに入れておいて一発実行とかできる。

スポンサード リンク
[ 7月20日全て ]

2004年8月23日 (月)

[ Perl ] PPM::Make 0.71 の dependency パッケージ誤認

Term::ProgressBar を PREREQ_PM にしているパッケージを make_ppm すると、ppd に Term-ProgressBar ではなく Term-ProgressBar-2.06 が DEPENDENCY として出力される。

CPAN にある最新パッケージが Term-ProgressBar-2.06-r1 と、ちょっと変則的なバージョン番号がついているので誤認しているようだ。 PPM::Make::Util::version あたりでヒューリスティックにパッケージ名バージョン番号を分離しているっぽい。

とりあえず出力されたPPDを手で直すか。

[ 8月23日全て ]

2004年8月30日 (月)

PPM::Make 0.74 で dependency 生成改善

PPM::Make 0.74 が出た。CPAN::DistnameInfo を使うようになり、Term::ProgressBarパッケージ名も誤認識しないようになった。

[ 8月30日全て ]

2004年10月14日 (木)

PPM::MakeMETA.yml

PPM::Makemake_ppm で ppd ファイルを作成すると自動的に DEPENDENCY 要素を生成してくれる。 今作っているパッケージ、 WindowsActivePerl 下で動かす時には追加の依存モジュールが(Win32::*)あるので、Makefile.PL の中で $^O を見て PREREQ_PM に追加を行っている。

で気がつくとこれが ppd に反映されていない。

ソースを見たところ META.yml があってこれから情報が取得できている時は、Makefile を見にいかないようになっている。 META.yml が無いか、必要な情報が取れていない場合は、Makefile をスキャンして PREREQ_PM などを取得している (Makefile.PL ベースの場合)。

ここでパッケージの作成(make dist)を Linux 上で行っている関係で META.yml には Windows 環境特有の requires が入らないため、結果 ppd に DEPENDENCY が足りない事になる。

ということでこれからはとりあえず安直に、 make_ppm の直前に META.yml を削除することにしよう。

[ 10月14日全て ]

2005年2月23日 (水)

ActivePerlMing

ActivePerlMing を使えるようにしておきたい。

Visual Studio

Ming 0.3 beta1 のソースパッケージには Visual Studio 6.0 用のプロジェクトファイルが含まれている。 Cygwin の Bison と flex があればライブラリをビルドできるようだ。 横着して Linux 側で bison と flex で生成したファイルをコピーして(それから unistd.h をインクルードしている部分を消して)、ビルドしてみたところ一応 lib ファイルは作成成功。

しかし ActivePerl 用にPerl モジュールの make は失敗。

MinGW + nmakeActivePerl のモジュールをビルドできるらしい

調べたところ ExtUtils::FakeConfig を使うと Visual Studio が無くても MinGW + nmake でモジュールをビルドできるらしい(全てではないと思うが)。

ということで MingMinGWビルドした後、そのまま ActivePerl 用モジュールの作成まで持ち込むことにしてみる。

MinGW + MSYS + GnuWin32開発環境を構築

コンパイルに必要な環境を MinGW で、configure に必要な環境を MSYS で用意する。

bison は GnuWin32

Mingビルドに必要な Bison は MinGWMSYSインストーラに含まれていない。 bison-1.875.0-2003.02.10-1.exe というのが別途あるがうまく動かない。

ソースパッケージ(bison-2.0.tar.gz、bison-1.875.tar.gz)からはビルドできず。 MinGW/MSYSのプロジェクトにある bison-1.875-2003.02.10-1-src.tar.gz はビルドできるものの make check が通らない。

とうことで GnuWin32 の bison-1.875-4.exe (インストーラ形式)をインストール。 c:/usr/local/GnuWin32インストールした後、MSYS の /etc/fstab で /GnuWin32 にマウントし、/GnuWin32/bin に PATH を通しておく。

flexソースパッケージから

flex-2.5.4a.tar.gz を展開して

 ./configure; make; make check; make install

インストール時ハードリンクが作れなくてエラーがでているようだが無視。

zlib (Ming で必要)

MSYS 上でビルドしてインストール。zlib-1.2.2.tar.gz を展開して

 ./configure; make; make check; make install

LibUnGif for Windows (Ming で必要)

MSYS 上でビルドしてインストール。 libungif-4.1.0b1-src.zip を展開して

 rm config.cache;
 config.h内の-DHAVE_VARARGS_Hをコメントアウト。
 ./configure; make; make install

make check はエラーが出るが無視。

libpng (Ming で必要)

MSYS 上でビルドしてインストール。libpng-1.2.8-config.tar.gz を展開して

 CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure
 make; make check; make install

いよいよ Ming

MSYS 上でビルド。ming-0.3beta1.tar.gz を展開して

 CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make static

ActivePerl 用モジュール作成

ExtUtils::FakeConfigPPM::MakeMingSWF PPM パッケージを作成する。 (MSYSシェルではなく)コマンド プロンプトを開いて、Mingソースパッケージの中の perl_ext に移動。 MSYSMinGWnmake にPATHを通しておく。

それから Makefile.PL の実行で -lz を発見できないので、libz.a を Makefile.PL と同じディレクトリにコピーしてしまう(-L/usr/local/lib を指定しても効かなかったので)。 libpng.a、libungif.a も同じくコピーしておく。

Makefile を作成。Makefile.PL では -lz しか指定していないが、libpng と libungif も必要なのでコマンドラインオプションで指定する。ExtUtils::FakeConfig の Config_m を使用して MinGW を使用するようにする。

 perl -MConfig_m Makefile.PL LIBS="-lpng -lungif -lz"

ここで生成される Makefile の中で libperl58.a を指定している部分があるが、ActivePerl では perl58.lib になるので、エディタで書き換え。 後はいつも通り

 nmake
 nmake test
 make_ppm

PPM パッケージ作成完了。

簡単なPerlプログラムでSWFファイルが作れる事を確認。 やった。

[ 2月23日全て ]

2006年7月3日 (月)

自前 PPM リポジトリの管理

Windows Perl アプリケーション用に PPM リポジトリを久しぶりに整理。

自分が使用する PPM パッケージは以下の理由から、以前より基本的に自前でビルド/保存し PPM リポジトリをローカルに作成するようにしている。

  1. 後でオフラインインストールできるようにする。
  2. 「公開リポジトリが無くなった」あるいは「公開リポジトリに欲しいパッケージが無くなった」時に困らないようにする。
  3. 動作確認された組み合わせでの PPM パッケージセットを作成・保持できるようにする。
  4. ライセンス的にクリアなものだけを含むリポジトリを用意する。 (芋蔓式インストールで、ライセンス的にクリアでないパッケージが入ってしまうのを防ぐ)。

手元では以下のように管理

 PPM
  |-- <category>
  |   `-- 8xx
  |       |-- <projects A> [ 公開 / export ]
  |       |   |-- module1.ppd -> (A)
  |       |   |-- module1.tar.gz -> (B)
  |       |   `-- ...
  |       `-- ...
  `-- pool
      |-- module1-x.yy
      |   |-- module1.x.yy.tar.gz
      |   |-- some documents...
      |   `-- build817
      |       |-- module1.ppd (A)
      |       `-- module1.tar.gz (B)
      `-- ...
pool
  • pool ディレクトリに「[モジュール]-[バージョン]」ディレクトリを作成する。同じバージョンでも、異なるバージョンは両方とも別々にキープしておく。
  • その下にソース tarball を置く。
  • ライセンス情報ファイルなども置く (touch Perl-License 等空のファイルを作成しておく)
  • PPM パッケージPPM::Make で作成し、その時に使用した ActivePerlビルド番号別にサブディレクトリを作って .tar.gz と .ppd を置く。
リポジトリ
  • ActivePerlビルド番号別にリポジトリを作成する。基本的には 6xx 系、8xx 系それぞれの中ではバイナリ互換性がある (PAR などは、ビルド番号に1対1でしか互換性がない)。
  • 必要に応じてカテゴリ別サブディレクトリを用意 (アクセス制限の都合などにより)
  • 必要に応じてプロジェクト毎にサブディレクトリを用意 (プロジェクト毎にパッケージセットを作るため)
  • リポジトリディレクトリからは pool 内の .ppd、.tar.gz へシンボリックリンクを張る。欲しいモジュールのバージョン、ビルド番号を選んでリンクする。
公開
  • SambaApache などで、PPM ディレクトリ全部あるいは特定のリポジトリ部分を公開する。
  • 必要なら export して別サーバに置く。rsync や cp の -L オプションでシンボリックリンクを実ファイルに置き換えてアーカイブを作成する。
[ 7月3日全て ]

About Me

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

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

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

follow us in feedly

月別インデックス
Process Time: 0.057682s / load averages: 0.36, 0.36, 0.52
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker