続・玩式草子 ―戯れせんとや生まれけん―

第3回 Plamoメンテナのすゝめ(上)

この記事を読むのに必要な時間:およそ 4.5 分

もう少し詳しい使い方

make_PlamoBuild.pyは,前節のようにソースコードディレクトリの指定だけでビルドスクリプトを作成できるものの,オプション指定で動作を調整することもできます。以下に指定可能なオプションを紹介します。

インストール先の変更-pオプション)

make_PlamoBuild.pyで作成したPlamoBuildスクリプトは,デフォルトでは"/usr"以下にファイルをインストールします。このインストール先を変更したい場合,"-p"オプションを指定します。

たとえば,fluxbox-1.3.7を"/usr/local/"以下にインストールしたい場合,以下のようにmake_PlamoBuild.pyを実行します。

$ make_PlamoBuild.py -p /usr/local fluxbox-1.3.7

"-p"オプションは,configureを使う場合は"--prefix",cmakeを使う場合は"CMAKE_INSTALL_PREFIX"に反映されます。

python/perlのスクリプトをパッケージ化する際,このオプションは機能しません。これはバグなので,近日中に修正する予定です。

ビルド方法の手動指定-mオプション)

前節で紹介したように,make_PlamoBuild.pyは,ソースコードを調べて,そこにあるファイルからビルド方法を自動判断してPlamoBuildスクリプトを作成します。対応しているビルド方法は,GNU Autotools("configure"⁠⁠,cmake("CMakeLists.txt"⁠⁠,Python("setup.py"⁠⁠,Perl("Makefile.PL")の4種で,それぞれ()内に示したファイルがソースコードに含まれていた場合に選択されます。

ソースコード中にこれらのファイルが見つからなかった場合は,⁠適切なビルド方法が見つからなかった」旨のメッセージを出し,GNU Autotools用,すなわちconfigureを使う設定でPlamoBuildスクリプトを作ります。この場合,そのままでは動かないので,ビルドスクリプトを手動で調整する必要があります。

一方,最近では,複数のビルド方法を用意したソフトウェアもあります。たとえば,あるソフトウェアはconfigureとCMakeLists.txtの双方を用意しており,GNU Autotoolsでもcmakeでもビルドできるようでした。どちらでもいいのか,と思ってcmake方式でビルドしてみたら,前のバージョンと違って共有ライブラリが作成されません。あれれ,と思って調べてみると,Autotoolsからcmakeへの移行中のようで,CMakeLists.txtはまだ不完全な状態でした。

このような問題を回避するため,ビルド方法を指定する"-m"オプションを用意しました。"-m"オプションに指定可能なキーワードは"config","cmake","perl","python"で,このオプションを指定するとソースコード中のファイルの有無をチェックせず,それぞれのビルド方法に応じたPlamoBuildスクリプトを作成します。

ソースコードのコピー-sオプション)

最近のビルドシステムでは,ソースコードの汚染を避けるため,ビルド用ディレクトリとソースコードディレクトリを分離することが推奨され,PlamoBuildスクリプトでも両者は独立したディレクトリにしています。

しかしながら,古めのソフトウェアの中にはソースコードのあるディレクトリでビルドすることを前提にした作りになっているものもあり,両者を別にすると「必要なファイルが見つからない」旨のエラーになることがあります。

そのようなソフトウェア用に用意したのがソースコードのコピーを意味する"-s"オプションで,このオプションを指定して作ったビルドスクリプトは,ソースコードをビルド用ディレクトリにコピーしてから作業を開始します。

以上,make_PlamoBuild.pyのオプション機能を紹介しました。

その他,使う際の注意点をもう2つほどあげておきます。

パッケージの名前解決

make_PlamoBuild.pyは,ソースコードを収めたディレクトリ名が"<ソフトウェア名>-<バージョン番号>"になっていることを前提に,ビルドスクリプトや作成するパッケージの名前,バージョン番号を設定します。

今回取りあげた"fluxbox-1.3.7"のように,最近ではたいていのソフトウェアがこの命名ルールに従っているものの,ソースコードを"LVM2.2.02.99"ディレクトリに展開するLVM2(Logical Volume Manager)や"tcl8.6.8"に展開するスクリプト言語Tclなど,このルールに従っていないソフトウェアも散在します。そのようなソフトウェアは,ソフトウェア名やバージョンが正しく設定できないので,手動で修正する必要があります。

パッチファイルの扱い

make_PlamoBuild.pyには,作業用ディレクトリに置かれた".patch"や".diff"という拡張子を持ったファイルをソースコードに対するパッチファイルと認識し,ビルドスクリプトに取り込む機能があります。取り込んだパッチファイルは,ビルド作業の前に"patch -p1 < パッチファイル"の形で適用されます。

パッチファイルは複数用意することも可能なものの,ワイルドカードで認識された順に適用されるので,適用順を管理するには,ファイル名を調整するか,patchfiles行を編集する必要があります。


今回は,話の都合上,make_PlamoBuild.pyに焦点を絞ったため,PlamoBuildスクリプトや作成されるパッケージとの関係がわかりづらかったかも知れません。そのあたりの詳細は,次回以降のPlamoBuildスクリプトの解説の中で,改めて触れる予定ですのでご期待ください。

従来,PlamoBuildスクリプトをどう書くかは,パッケージを作るメンテナの裁量に任せていたため,ずいぶん凝った作りのコードもありました。しかしながら,あまり凝ったコードは初心者にわかりにくいし,パッケージのメンテナが変わった際にも不便なので,Plamo-7.0では全てのパッケージをmake_PlamoBuild.pyで作成した,100行程度のシンプルなスタイルに統一しています。これらビルドスクリプトは各パッケージの一部として/usr/share/doc/以下にインストールされていますのでぜひチェックしてみてください。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html