Fink

パッケージ作成 - 2. パッケージ記述

2.1 ツリーレイアウト

パッケージ記述はディレクトリ /sw/fink/dists 下のディレクトリ finkinfo から読み込まれます. 「ツリー」の設定はファイル /sw/etc/fink.conf にあり,これでどのディレクトリを読むかを指定します. パッケージ記述ファイルの名前は,Fink パッケージの正式名称に拡張子 ".info" を付けたものです. Fink 0.13.0 以降では,パッケージのアップデートの手間を省くための, 「パッケージ名」に拡張子 ".info" を付けただけの簡略形式が便利です. fink 0.26.0 の時点で,ファイル名を特定するにはいくつかの方法があります: 推奨されるのは,他の必要なパッケージファイルと整合性のとれる最も短いものです. ファイル名の形式は: variant のないパッケージ名,オプションとして architecture,オプションとして distribution,オプションとして version または version-revision を ハイフンでつなぎ,".info" で終えます. "architecture" と "distribution" は,対応するフィールドが定義され,値を一つだけ持つ場合に限ります.

パッケージ記述ツリーはいくつかの階層のディレクトリにまとめられています. 最上段から順の説明:

2.2 ファイル形式

パッケージ記述ファイルはキーと値の組 (別名「フィールド」) の単純なリストです. 次のように,各行はキーで始まり,コロン (:) 以降が値になります:

Key: Value

複数行に渡らざるを得ないフィールドには 2 通りの記法があります.

1 つ目はシェルスクリプトで言う "here-document" 風の形式で,こちらの方が望ましいです. この方式では,第1行は,キー,コロンの次に値として << が続くものになります. その後の行が全て実質的な値となり,行頭に << を置いた行が値の終端区切りです. 例:

InstallScript: <<
mkdir -p %i/share/man
make install prefix=%i mandir=%i/share/man
mkdir -p %i/share/doc/%n
install -m 644 COPYING %i/share/doc/%n
<<

この形式ではインデントを付けて構いません. その方が読みやすくなるでしょう.

here-document 形式はネストできます. これはフィールド SplitOffSplitOffN でよく使われます. これらのフィールドは他の (複数行の) フィールドを含むことができ, here-document 形式を使えば含まれる方のフィールドにも複数行の値が使えます. 内側でも同じ区切り << が使われます.

SplitOff: <<
    Package: %N-shlibs
    InstallScript: <<
        ln -s %p/lib/libfoo.2.dylib %i/lib/libfoo.%v.dylib
    <<
<<

この形式では,空行と,シャープ (#) で始まる行は無視されます. キー (フィールド名) では大文字と小文字の区別がないので, InstallScriptinstallscriptINSTALLSCRIPT とも書けますが, 最初の InstallScript という方式が読み易いのでこれを使いましょう. 真偽値を取るフィールドでは "true", "yes", "on", "1" (大文字,小文字の区別なし) のいずれも「真」となり,それ以外は全て「偽」になります.

2.3 パーセント展開

簡便のため, Fink はいくつかのフィールドで以下の文字列展開をサポートします. 曖昧さをさけるため,波括弧を使ってどの文字までがパーセント展開を受けるのかを明示できます. 例えば %{n}%n と同義です.

%n

name.「パッケージ名」.

%N

Name.親パッケージの「パッケージ名」. (SplitOff 内部以外では %n と同じ)

%e

epoch.パッケージの「エポック」.

%v

version.「バージョン」.

%V

パッケージの完全な Version で, Epoch がある場合にはこれも自動的に追加されます. InfoN レベルが 4 以上の場合のみパーセント展開されるので,注意してください.

%r

revision.パッケージの「リビジョン」.

%f

full package name.%n-%v-%r と等価. エポックは %f に含まれない.

%p, %P

prefix.Fink のインストール場所.例: /sw. 全てのユーザーが /sw に Fink をインストールしているわけではない. %p で正しいパスを取得する.

%d

destination.パッケージ化するツリーのビルド先. 例:/sw/src/fink.build/root-gimp-1.2.1-1 この一時ディレクトリはパッケージをコンパイルする際のインストール段階でルートディレクトリの役を果たす. root-%f%p/src の中にあることを当てにしてはいけない. ユーザが設定ファイル /sw/etc/fink.conf でフィールド Buildpath を指定すればこの場所は変わってしまう.

%D

Destination. 親パッケージのビルド先 (SplitOff 内部以外では %d と同じ).

%i

完全な install-phase prefix.インストール段階での一時インストールディレクトリの完全名. %d%p と等価.

%I

Install prefix. 親パッケージのインストール段階での一時インストールディレクトリの完全名. %D%Pと等価 (SplitOff 内部以外では %i と同じ).

%a

patches. パッチを検索するディレクトリパス.

%b

build. ビルドディレクトリ.例: /sw/src/fink.build/gimp-1.2.1-1/gimp-1.2.1 %f%p/src の中にあることを当てにしてはいけない. ユーザが設定ファイル /sw/etc/fink.conf でフィールド Buildpath を指定すればこの場所は変わってしまう. 最も内側のディレクトリ名は, Source ファイル名か, (もしあれば) SourceDirectory フィールドの値となります. ただし, NoSourceDirectorytrue であれば使用されません.

注記: %b は使わざるを得ないときだけ使用して下さい. ビルドディレクトリはスクリプトが実行されるときのカレントディレクトリです. コマンドでは相対パス名を使わなければいけません.

%c

configure に渡すパラメータ: --prefix=%p の他,フィールド ConfigureParams で指定したもの全て. (Type: perl を持つパッケージについては,挙動が異なる; この場合,%c 中の --prefix=%p の代わりに,perl パッケージをビルドする既定フラグが用いられる.)

%m

machine architecture. マシンアーキテクチャーを示す記号で,uname -p の出力. 現在のところ, PPC マシンでは 'powerpc' , x86 マシンでは 'i386' という値になる (0.12.1 CVS版以降の Fink で導入).

%%

パーセント記号そのもの (これ以降にどの文字が続いても展開されない). 展開は厳密に左から右に行われるので, %%n はパッケージ名とは一切関係なく,単なる文字列 %n を表すことになる. (fink-0.18.0 で導入)

%type_raw[タイプ], %type_pkg[タイプ], %type_num[タイプ]

指定された タイプ のサブタイプを返す疑似ハッシュ. 詳細は後述のフィールド Type の解説を参照. _raw 形式はサブタイプの文字列をそのまま返すが, _pkg 形式はドット (.) を 全て取り除いた文字列を返す. (Fink のパッケージ命名規約の「プログラミング言語-バージョン」方式に使う.他にもうまい使い方があるかも). (0.19.2 CVS 版以降の Fink で利用可能) _num 式 は fink-0.26.0 より導入. Type から数字以外を全て除く.

%{ni}, %{Ni}

"name invariant". %n や %N と似ているが, %type_pkg[] と %type_raw[] に当たる部分は全て空白に変わる. (0.19.2 CVS 版以降の Fink で利用可能) %n や %N を使った際の混乱を避けるためには %{ni} や %{Ni} を使うこと.

%{default_script}

PatchScript, CompileScript および InstallScript フィールドでのみ有効で, デフォルトの値. 値は Type に依存するが,常に存在する(または空欄). SplitOff (または SplitOffN) 中の InstallScript で使われる場合, SplitOff パッケージの InstallScript デフォルトが空欄であっても, この展開はのデフォルトになる.

%{PatchFile}

PatchFile フィールドで示されたファイルのフルパス. (fink-0.24.12 にて導入)

%{PatchFileN}

PatchFileN フィールドで示されたファイルのフルパス. (fink-0.30.0 にて導入)

%lib

Type: -64bit が -64bitと定義されている場合, powerpc マシン上では lib/ppc64 と展開され, intel マシン上では lib/x86_64 と展開される (64-bit ライブラリの正しい保存場所). それ以外は, lib と展開される. (fink-0.26.0 で導入)

InfoN レベルが 4 以上でないと, ConfigureParams フィールド内での使用はできませんので,注意してください.

次: 3. パッケージ化ポリシー