Available Languages: | English | Français | 日本語 (Nihongo) | 中文 (简) (Simplified Chinese) |

Fink パッケージの作成方法

このマニュアルではパッケージ管理システム Fink 用のパッケージ記述 (Package Description) の作成方法を解説します. また Fink ディストリビューションのポリシーとガイドラインも解説します. パッケージ記述の書式もディストリビューションのポリシーも共に発展途上です. "Last changed" (最終更新) 情報とこのページの CVS タグを確認することで,更新されているかがわかります. ここで扱うのはパッケージ管理システム Fink の「0.9.0 以降の開発版」で使われる書式とポリシーの説明です.

Fink 用にパッケージを作成した場合,メーリングリスト fink-devel を購読するとよいでしょう. Fink に貢献する方法を探していて,関連分野のスキルをお持ちなら,是非とも 現在メンテナのいないパッケージ のメンテナンスをお願いいたします.

Contents

1 始めに

1.1 パッケージとは何か?

パッケージとは,基本的単位を構成するソフトウェアのまとまりを指します. 典型的なパッケージには,例えば実行可能プログラム,それが必要とするデータファイル, 国際化のためのメッセージカタログ,そしてドキュメントが含まれます. Fink のパッケージには2種類の形式があります. すなわちパッケージ記述情報と,そのままインストール可能なバイナリパッケージファイルです.

パッケージ記述情報は人でも読めるテキストファイルで, パッケージをビルドするために必要な (つまりバイナリパッケージファイルを作るのに必要な) 全ての情報を含みます. それにはメタデータ (パッケージ名や目的を記した文章) やソースコードの URL の他, パッケージの configure ,コンパイルやバイナリパッケージの生成に必要な命令が書かれています.

バイナリパッケージファイルとは,パッケージを実際に構成する各ファイルのアーカイブを指し, 中には実行可能プログラム,データファイル,メッセージカタログ,ライブラリ,インクルードファイルなどが含まれます. また,そのパッケージに関するメタデータも含まれます. バイナリパッケージは既にそのまま使用できる形式ですので,インストールとは主に中身の展開です. Finkはパッケージ管理システム dpkg の上に構築されたシステムですので, バイナリパッケージには dpkg の形式が使われ,拡張子は .deb です.

1.2 パッケージの区別

パッケージは3つの文字列で区別されます. すなわちパッケージ名,version と revision です. これらのいずれにも英小文字 (a から z),数字 (0 から 9), ダッシュ (-; 註: revision 中には使えません),プラス (+),ドット (.) のみが使えます. この他の字は使えません. 特に,大文字と下線 (_) が使えないことに注意して下さい.

「パッケージ名」にはソフトウェアの名前 (openssh など) をそのまま使います. version は「upstream バージョン」とも呼ばれますが,これには元となるソフトウェアパッケージのバージョンを使います. version には (2.9p1 のように) 数字以外を使っても構いません. Fink も dpkg もそれらを認識してソートできます. revision はカウンタで,最初は 1 で始まり,パッケージ記述情報への変更回数に応じて 1 ずつ増加します. 「upstream バージョン」が変化すると再び 1 に戻ります. revision にダッシュを使ってはいけません. Fink パッケージの正式名称はパッケージ名,version と revision をダッシュでつないだもので, "openssh-2.9p1-2" などという形式になります.

2 パッケージ記述

2.1 ツリーレイアウト

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

今は推奨されない旧式の記法は「RFC 822 ヘッダ折り畳み方法」を手本に作られました. 空白で始まる行を前の行からの続きと認識します. 例:

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

各行頭の空白は必須であることに注意して下さい.

どちらの形式でも,空行と,シャープ (#) で始まる行は無視されます. キー (フィールド名) では大文字と小文字の区別がないので, 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 にて導入)

%lib

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

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

3 パッケージ化ポリシー

3.1 パッケージのライセンス

Fink に含まれるパッケージのライセンスは多岐に渡ります. 大部分は,ソース全体の再配布と,特に実行可能ファイルの配布に何らかの制限を課します. パッケージの中には,ライセンスのために Fink でバイナリ配布を行えないものもあります. そのため,パッケージのメンテナがライセンスを注意深くチェックすることが大変に重要です.

バイナリ・パッケージとして配布される全てのパッケージは,ライセンスのコピーも含んでいなければいけません. ライセンスは doc ディレクトリすなわち %p/share/doc/%n にインストールされます. (InstallScript では,当然ながら %p でなく %i を使う必要があります. フィールド DocFiles ににより細部は自動的に処理されます.) 元のソースに明示的なライセンスが存在しない場合,パッケージの状態を記した短いテキストを代わりとします. 大半のライセンスは,ライセンスが配布物に必ず含まれるよう定めています. Finkのポリシーは「ライセンスを含めるよう明示的に要求されなくとも,常にライセンスを含める」ことです.

バイナリディストリビューションのメンテナンスを自動化するため, 配布されるどのパッケージにもフィールド License がなければいけません. このフィールドはライセンスの性質に関するもので, 当該パッケージをバイナリディストリビューションに含めるかどうかを決定する際に参照されます. このフィールドは実際のライセンス条項が上記のようにバイナリパッケージに含まれているときのみ存在できます.

フィールド License を有効に使用するため,値は以下の既定の選択肢からのみ選べます. 下記の選択肢に当てはまらないパッケージの場合,開発用メーリングリストへ質問を投げかけて下さい.

3.2 GPL と OpenSSL

(2005年4月より施行)

OpenSSL ライセンスが GPL と LPGL ライセンスが明らかに整合性を欠いていることから, openssl にリンクをしている fink パッケージのうち, GPL または LGPL ライセンスを使用しているものは "Restrictive" となります. Fink プロジェクトはこれらのパッケージをバイナリ配布しないことになるが,利用者は自己判断でコンパイルすることができます.

パッケージメンテナは,元のパッケージライセンスを DescPackaging に記述してください.

3.3 基盤システムへの干渉問題

Finkは基盤システムから分離したディレクトリにインストールされるアドオン・ディストリビューションです. パッケージは Fink のディレクトリ外にファイルをインストールしてはしてはいけません.

この決まりを破る他に仕方がないときには例外が設けられます (XFree86 など). この場合,パッケージはインストール前に既存のファイルを調べ,上書きの恐れがある場合はインストールを中止する必要があります. そのようなパッケージは, Fink ディレクトリ外にインストールしたファイルはそのパッケージが取り除かれるときに全て削除されること, あるいはそのようなファイルは残しても問題がないことを保証しなければいけません (すなわち,実行可能ファイルを呼び出す前にそれが存在するかどうか調べるなどする必要があります).

3.4 共有ライブラリ

Fink は共有ライブラリに関して新しいポリシーを定め, 2002 年 2 月から施行しています. 以下では Fink 0.5.0 と共に公布された,共有ライブラリについてのポリシー第 4 版 (及び 64bit ライブラリを扱うために2006年12月の変更) について説明します. 最初に要点をかいつまんで述べ,後から詳細に移ります.

共有ライブラリをビルドするパッケージで, (1) ツリー stable に入っているか,または (2) 新規のパッケージである場合, Fink ポリシーに従って共有ライブラリを扱う必要があります. すなわち以下の約束に従わなければいけません.

このポリシーに反し,パッケージを分割しない場合には,フィールド DescPackaging に理由を記述しなければいけません.

パッケージによっては,主パッケージと -shlib パッケージを作成するだけで済みます. しかしさらに別のパッケージが必要な場合もあります. 新設されたフィールド SplitOff を使うとこの作業の手間が省けます.

3つのパッケージに分ける必要があるとき,それらの命名法は, パッケージの実質的な中身がライブラリなのか (選択肢 1) 実行可能プログラムなのか (選択肢 2) によって変わります. 選択肢 1 では次の構成を使います.

PackageContents
foo-shlibs

共有ライブラリ

foo

ヘッダ

foo-bin

実行可能プログラムなど

選択肢 2 では次の構成を使います.

PackageContents
foo-shlibs

共有ライブラリ

foo-dev

ヘッダ

foo

実行可能プログラムなど

選択肢 2 を選ぶと,既存のパッケージのアップグレードに手間がかかります. アップグレードと同時に, Depends: foo との記述のある全てのパッケージに BuildDepends: foo-dev を加える必要があるのです. 注意すべき点は他にもあります. (中間に別のパッケージを経由して) 間接的に当該パッケージに依存するパッケージのアップグレードを確かに成功させるためには, そのようなパッケージに BuildDepends: foo あるいは BuildDepends: foo-dev を加える必要があるかもしれません. 当該パッケージのメンテナには,他のパッケージに BuildDepends が追加されるのを確認する責任があります.

詳細なポリシー

以下ではさらに詳しく解説します. まず新規にソフトウェアを Fink に移植する際のポリシーを解説し,次に既存 Fink パッケージのアップグレードに移ります. ポリシーが実際に適用された例としては Fink パッケージ libpng, libjpeg や libtiff を参照して下さい.

Darwin にポートされたソフトウェアは可能な限り共有ライブラリをビルドしなければいけません. (パッケージメンテナが,必要に応じて共有ライブラリの他に静的ライブラリもビルドすることは自由です. または,静的ライブラリのみを含むパッケージを登録することも問題ありません.) 共有ライブラリをビルドする場合,ふたつの相互関連する Fink パッケージを作成しなければいけません. それらの名称は例えば foo と foo-shlibs となります. 共有ライブラリは foo-shlibs に,ヘッダは foo に入ります. これら 2 つのパッケージを単一の .info ファイルから作れます. それには後述のフィールド SplitOff を使います. (現実には3つ以上のパッケージに分割する必要がある場合も多いですが, この場合は SplitOff2, SplitOff3 などを使えばだいじょうぶです.)

共有ライブラリを伴うソフトウェアパッケージには, 「メジャーバージョン」 N がなければいけません. 「メジャーバージョン」は,ライブラリの API にパッケージ間で非互換な変更が加えられたときのみ変わることになっています. Fink では,名称は以下の要領で作成されます. すなわち, upstream パッケージ名が bar なら,そのFinkパッケージの名前は barN と barN-shlibs になります. (この規則が厳密に適用されるのは新規に作られるパッケージと「メジャーバージョン」が変わったパッケージのみです.) 例えば既存の Fink パッケージ libpng の「メジャーバージョン」は 2 でしたが,最近, 3 に変わりました. そこで当面は libpng に関わる Fink パッケージは4種類あることになります: libpng, libpng-shlibs, libpng3, libpng3-shlibs です. libpng と libpng3 はどちらか片方しか同時にインストールできませんが, libpng-shlibs と libpng3-shlibs は同時にインストールできます. (これら 4 つのパッケージのビルドに必要な .info ファイルは 2 つだけであることに注意してください.)

共有ライブラリ自身とそれに関わるファイルは,パッケージ barN-shlibs に入ります. また「インクルード」ファイルとその他のファイルはパッケージ barN に入ります. これら 2 つに重複して含まれるファイルがあってはならず,また barN-shlibs に含まれるどのファイルのパス名にも, 何らかの形で「メジャーバージョン」 N が含まれなくてはいけません. 多くの場合,パッケージは,典型的には %i/lib/bar%i/share/bar/ にインストールされるようなファイルを実行時に必要とします. そのときはインストール先パスを %i/lib/bar/N%i/share/bar/N/ に修正しなければいけません.

「メジャーバージョン」が N であるようなパッケージ bar に依存するパッケージは,全て次の依存情報を使うことになります.

Depends: barN-shlibs
BuildDepends: barN

この方式が機能するようになって以降は,他のパッケージが barN 自体に依存するようにしてはいけません. (後方互換性のため,既存のパッケージは barN に依存して構いません.) 以上を他の開発者がわかるように,barN のパッケージ記述の中に次の真偽値フィールドを設けます.

BuildDependsOnly: True

共有ライブラリと実行可能プログラムの両方を含むパッケージの場合,実行可能プログラムが (ビルド時だけでなく) 実行時に必要であれば, それらの実行可能プログラムは barN-bin という名の第 3 のパッケージに分離されます. 他のパッケージが barN-shlibs の他に barN-bin に依存しても構いません.

「メジャーバージョン」が N の共有ライブラリをビルドするとき,その共有ライブラリの "install_name" が %p/lib/bar.N.dylib になることが重要です. (install_name は,ライブラリに対し otool -L,64bit ライブラリの場合は otool64 -L を実行すれば分かります.) 実際のライブラリファイルのインストール先は,

%i/lib/bar.N.x.y.dylib

でなければならず,パッケージ側では次のようにシンボリックリンクを貼らなければいけません.

%i/lib/bar.N.dylib -> %p/lib/bar.N.x.y.dylib
%i/lib/bar.dylib -> %p/lib/bar.N.x.y.dylib

静的ライブラリもビルドする場合,次の場所にインストールされることになります.

%i/lib/bar.a

パッケージが libtool を利用する場合,上記のことはほぼ自動的に処理されますが, どの段階でも処理が適切に行われたか確認する必要があります. また,共有ライブラリの current_version と compatibility_version が適切に定義されているかどうかも確認して下さい. (これらも otool -L または 64bit ライブラリの場合 otool64 -L で表示されます.)

次に,ファイルを以下のように 2 つのパッケージに分類します.

どちらのパッケージにもライセンスに関する何らかの文書が必要ですが,それらを格納するディレクトリは異なることに注意して下さい.

このことはフィールド SplitOff を使えば実際には非常に簡単です. 以下に上の例を実現するためにどのように記述するか (の一部) を示します.

Package: barN
Version: N.x.y
Revision: 1
License: GPL
Depends: barN-shlibs (= %v-%r)
BuildDependsOnly: True
DocFiles: COPYING
SplitOff: <<
  Package: barN-shlibs
  Files: lib/bar.N.x.y.dylib lib/bar.N.dylib lib/bar/N
  DocFiles: COPYING
<<

フィールド SplitOff の処理により,指定されたファイルとディレクトリが, メインパッケージのインストールディレクトリ %I から splitoff パッケージのインストールディレクトリ %i に移動します. (これは命名法とも似ています. すなわち,%N がメインパッケージの「パッケージ名」で,%n が splitoff パッケージの「パッケージ名」でしたね.) 次に DocFiles によりドキュメントファイルが %i/share/doc/barN-shlibs にコピーされます.

barN-shlibs の正確な「バージョン」 (これは "%N-shlibs (= %v-%r)" と略記できます) を親パッケージ barN の依存情報に含めたことに注意して下さい. これにより「バージョン」が確かに適合するようになり, さらにパッケージ barN がパッケージ barN-shlibs の依存情報を自動的に「継承する」ことを保証します.

フィールド BuildDependsOnly:

ライブラリがアップグレードされる場合,移行期に二つのバージョンのヘッダファイルが必要になる時もあるでしょう. 一つのバージョンはコンパイル時に使われ,もう一つは他のコンパイルに使われるような場合です. このため,ヘッダファイルを含むパッケージの作成には注意が必要となります. foo-dev と bar-dev が重複するヘッダを含む場合, foo-dev で,

   Conflicts: bar-dev
   Replaces: bar-dev

と宣言し,同様に bar-dev では foo-dev を Conflicts/Replaces として宣言します.

さらに,両方のパッケージで

   BuildDependsOnly: True 

を宣言します. これにより,foo-dev または bar-dev に依存してパッケージを記述することを防ぐことができます. このような依存性が Conflicts/Replaces 手段を実行することを防ぐためです.

ヘッダファイル付きのパッケージで, BuildDependsOnly を True にするのが適切ではないものもあります. この場合,そのパッケージでは

   BuildDependsOnly: False

と宣言し,その理由を DescPackaging に記述します.

BuildDependsOnly フィールドは,パッケージがヘッダファイルを含み /sw/include にインストールされる場合, パッケージの .info ファイルに記述されていなければなりません.

fink 0.20.5 の時点で, "fink validate" とすることで, ヘッダファイルと,最低一つの dylib を含み, BuildDependsOnly 値で真偽を宣言していない .deb ファイルに警告を出します. (将来のバージョンでは,この機能をヘッダファイルと静的ライブラリに対応するように拡張する可能性もある.)

フィールド Shlibs:

共有ライブラリを適切なパッケージに分類する他にも, Fink ポリシー第 4版では, 共有ライブラリ全てをフィールド Shlibs を使って宣言することが求められています. このフィールドでは,各共有ライブラリに対して 1 行ずつ, 1) ライブラリの -install_name, 2) ライブラリの -compatibility_version, 3) そのライブラリを提供する Fink パッケージを指定するバージョン付き依存性情報 (ただし -compatibility_version が同じでなければならない), そしてライブラリのアーキテクチャ (値は "32", "64", または "32-64", あるいは空欄; 空欄時の既定値は "32" .) を記します. 依存性情報は foo (>= バージョン-版) という形式で示します. ここで バージョン-版 にはこの (-compatibility_version が同じ) ライブラリを利用可能にしてくれる Fink パッケージの最初の「バージョン」を使います. 例えば次の宣言は,

Shlibs: <<
%p/lib/bar.1.dylib 2.1.0 bar1 (>= 1.1-2) 32
<<

-install_name が %p/lib/bar.1.dylib で -compatibility_version が 2.1.0 の (32bit) ライブラリが, Fink パッケージ bar1 の「バージョン」1.1-2 以降でインストールされることを示します. それに加え,この宣言は「この名前がついていて compatibility_version が少なくとも 2.1.0 のライブラリは, Fink パッケージ bar1 の今後のバージョンには必ず含まれている」というメンテナからの保証にも相当します.

ライブラリの名称には %p を使用するよう注意して下さい. これによって, Fink ユーザはインストールディレクトリに関係なく,正しい -install_name を検索できます.

パッケージが更新されたとき, 普通は次の「バージョン」または「版」のパッケージ記述にフィールド Shlibs をコピーするだけで構いません. 例外は -compatibility_version が増加したときです. その場合,依存性情報の中の「バージョン-版」は新しい「バージョン」または「版」に従って更新されなければいけません. (新しい「バージョン」または「版」とは, 新しい compatibility_version のライブラリを提供する最初の「バージョン」または「版」のことです.)

メジャーバージョン番号が変わるとき:

「メジャーバージョン」が N から M に変化したときは, 2 つの新しいパッケージ barM と barM-shlibs を作ることになります. パッケージ barM-shlibs と barN-shlibs に重複するファイルがあってはいけません. これは,多くのユーザにとって両方を同時にインストールする必要があるからです. パッケージ barM には以下の依存性情報を指定しなければいけません.

Conflicts: barN
Replaces: barN

同様に barN の方も次の依存性情報を含むように改訂しなければいけません.

Conflicts: barM
Replaces: barM

これにより,問題の共有ライブラリの片方のバージョンに依存する他の様々なパッケージがビルドされるときに barN と barM が入れ替わり入ってくるのを目にするでしょうが, barN-shlibs と barM-shlibs はいつまでもインストールしたままでいられます.

既存の Fink パッケージをアップグレードする方法:

共有または静的ライブラリをインストールする既存のFinkパッケージについては, アップグレードの最良の方法は,問題のパッケージ foo の新しい「バージョン」を作り, 上のポリシーを満たす新しいパッケージ foo-shlibs を付属させることです. 共有ライブラリ (または foo-shlibs に含まれる任意のファイル) が以前からインストールされていたら, それらの新パッケージで次のように指定します.

Replaces: foo (<< 同等な.旧式パッケージの.バージョン)

これはアップグレードをユーザに意識させないためです. ("Conflicts: foo" ではアップグレードが阻害されるので,使用しないで下さい.)

アップグレード後,"Depends: foo" となっているパッケージは普通に機能し続けます. しかし,そのようなFinkパッケージのメンテナ全てに連絡し, できる限り早くそれらのパッケージで "Depends: foo-shlibs, BuildDepends: foo" とするよう要請しなければいけません. メンテナ全員がその措置を終えるまで, 新しい「メジャーバージョン」の共有ライブラリを提供する新パッケージ fooM と fooM-shlibs を作ることはできません.

既存のパッケージで, install_name の名称や,共有ライブラリの名称やシンボリックリンクの名称を正しく使っていない場合, 注意してケースバイケースで対処することになります. パッケージを新ポリシーに従ってアップグレードする方法を決定することが困難であれば,メーリングリスト fink-devel で議論して下さい.

実行可能プログラムとライブラリの両方を含むパッケージ:

upstream パッケージが実行可能プログラムとライブラリの両方を含む場合, Fink パッケージを作成する際にいくつかの注意が必要です. 唯一の実行可能プログラムが (恐らくビルド時のみに使われ,普段は使われない) foo-config のようなものという場合もあります. その場合,実行可能プログラムはヘッダファイルと共にパッケージ foo に入れて構いません.

そうでない場合,実行可能プログラムは実行時に他の Fink パッケージから必要とされることになりますが, それらは foo-bin などの名前の個別の Fink パッケージに split off しなければいけません. パッケージ foo-bin はパッケージ foo-shlibs に依存しなければいけません. 他パッケージのメンテナは,次のようにすることで

Depends: foo-bin
BuildDepends: foo

明示せずに foo-shlibs を処理します.

しかしこの場合,アップグレードは問題を起こします. ユーザは foo-bin をインストールするよう指示されないからです. この問題の回避のため,パッケージ foo に依存している全てのパッケージのメンテナがパッケージを上記のように改訂するまで, foo で次のようにして構いません.

Depends: foo-shlibs (= 正確な.バージョン), foo-bin

こうすると, foo に依存する他のパッケージのメンテナが改訂を済ませるまで, ユーザのシステムでは大抵 foo-bin のインストールが要求されます.

3.5 Perl モジュール

2003 年 5 月以来, Fink には Perl モジュールに対する新しいポリシーがあります. これは 2004 年 4 月に見直されました.

伝統的に,perl モジュールの Fink パッケージには -pm が後置され, ディレクティブ Type: perl を使ってビルドされていました. このディレクティブは Perl モジュールのファイルを /sw/lib/perl5 及び/または /sw/lib/perl5/darwin に格納していました. 現在のポリシーでは,それらのディレクトリには,コンパイルに使われる Perl のバージョンに依存しない (また,このバージョン非依存性を欠いた Perl モジュールに依存しない) Perl モジュールのみを格納します.

バージョンに依存する Perl モジュールはいわゆる XS モジュールであり, しばしば純粋な Perl コードの他に C コードからコンパイルされたファイルを含みます. このことを区別する方法はいくつもありますが,例えば拡張子 .bundle を持つファイルがあるかどうか調べる方法があります.

Perl のバージョンに依存する Perl モジュールは該当バージョンの付いた Perl の実行可能プログラム (perl5.6.0 など) を使ってビルドされなければいけません. また,モジュールの含むファイルは,標準の Perl のディレクトリ内の,バージョンの付いたサブディレクトリ (/sw/lib/perl5/5.6.0/sw/lib/perl5/5.6.0/darwin など) に格納しなければいけません. 命名規約により,バージョン 5.6.0 に依存する Perl モジュールに -pm560 を後置します. 格納場所と命名方法に関する同様の規約が他のバージョンの Perl に対しても有効で, perl 5.6.1 (10.2 ツリー), perl 5.8.0 (10.3 ツリー), perl 5.8.1, perl 5.8.4 または perl 5.8.6 でもそのように対応されます.

ディレクティブ Type: perl 5.6.0 は自動的にバージョンの付いた Perl の実行可能ファイルを使い, できたファイルを適切なサブディレクトリに格納します. (このディレクティブは Fink 0.13.0 で導入されました.)

-pm の付くパッケージも作成できます. これは本質的には「バンドル」パッケージで, -pm560 などの付く同等なパッケージなどをロードします. 2004 年 4 月より,この方式は順次廃止されていきます (bootstrap に必要な storable-pm は例外です).

fink 0.20.2 の時点で, system-perl バーチャルパッケージは, システムに 5.8.0 以降の Perl がある場合,自動的に Perl モジュールを提供します. system-perl-5.8.1-1 の場合, attribute-handlers-pm581, cgi-pm581, digest-md5-pm581, file-spec-pm581,  file-temp-pm581, filter-simple-pm581, filter-util-pm581, getopt-long-pm581,  i18n-langtags-pm581, libnet-pm581, locale-maketext-pm581, memoize-pm581,  mime-base64-pm581, scalar-list-utils-pm581, test-harness-pm581,  test-simple-pm581, time-hires-pm581. です. (この一覧は 0.20.1 から若干変更されています. パッケージメンテナは正しい一覧を使用しているか必ず確認してください.)

Fink 0.13.0 から利用可能になったコマンド fink validate を .deb ファイルに適用すると, その Fink パッケージが XS モジュールで,バージョンの付かないディレクトリにインストールされるかチェックし,そうなら警告を発します.

ユーザーは,同時に複数のバージョンの perl をインストールしておくことができます. このため, perl バージョン番号の指定されたモジュールは,複数のバージョンが共存できるようにインストールされなければなりません. manpage やバイナリ,その他のスクリプトなど,これらのパッケージでのファイル名の重複を避けるよう, 注意を払わねばなりません. -pmXYZ で終わるパッケージのどのファイルも,XYZ 値のことなる他のパッケージと同じパスを使用してはいけません. Replaces を用いることで,同名のファイルがあっても異なる perl バージョンの perl モジュールは,以前は許可されていましたが,今後は許可されません. manpage に関する解決として,2005年3月より,それぞれの perl-X.Y.Z に %p/lib/perl5/X.Y.Z/man という MANPATH を定義しました. このため,-man や -doc といった SplitOff を作って対処する必要はなくなりました. 例えば, uri-pm581 と uri-586 のコンフリクトの場合,どちらにもある URI.3pm という manpage は,それぞれ %p/lib/perl5/5.8.1/man/man3/URI.3pm%p/lib/perl5/5.8.6/man/man3/URI.3pm にインストールされます. ただし,Type: perl X.Y.Z によるスクリプトは変更されていないので, InstallScript にてどこに mapnage をインストールするのかを記述する必要があります. もし複雑なスクリプトを記述していないのであれば,既存のものを用い,ファイルを移動させるだけで済みます.

%{default_script}
mv %i/share/man %i/lib/perl5/5.8.1

これにより,全ての manpage が移動します. もし manpage のうち一つのセクションを以上させたい場合 (例えばセクション3とモジュールの manpage を移し,セクション1のスクリプト manpage は移さない),同様に:

%{default_script}
mkdir -p %i/lib/perl5/5.8.1/man
mv %i/share/man/man3 %i/lib/perl5/5.8.1/man

デモ用やユーティリティ的なスクリプトなどが %p/bin にある場合は,いくつかの解決方法があります. 一つ目の例は,これらのファイル (およびその manpage や 関連ファイル) を %N-bin という Splitoff とします. ConflictsReplaces のフィールドを用いることで,perl バージョンの異なる,同じファイルを含んでいる複数のパッケージが,相互に排他的になります. 利用者は,異なる perl バージョンのモジュールを複数インストールしておき,スクリプトに関しては一つの perl バージョンのものだけを選択することになります. 例えば,Tk.pm は ptksh と共に来ますが,tk-pm* パッケージは以下のように作られます:

Info2: <<
Package: tk-pm%type_pkg[perl]
Type: perl (5.8.1 5.8.4 5.8.6)
InstallScript: <<
  %{default_script}
  mkdir -p %i/lib/perl5/%type_raw[perl]/man
  mv %i/share/man/man3 %i/lib/perl5/%type_raw[perl]/man
<<
SplitOff: <<
  Package: %N-bin
  Depends: %N
  Conflicts: %{Ni}5.8.1, %{Ni}5.8.4, %{Ni}5.8.6
  Replaces: %{Ni}5.8.1, %{Ni}5.8.4, %{Ni}5.8.6
  Files: bin share/man/man1
<<
<<

この他の方法としては,スクリプトの名称と,関連する manpage を,perl バージョン番号を示すように変更することがあります. これでコンフリクトを回避できるので,相互排他的な %N-bin の Splitoff を作る必要はありません:

Info2: <<
Package: tk-pm%type_pkg[perl]
Type: perl (5.8.1 5.8.4 5.8.6)
InstallScript: <<
  %{default_script}
  mkdir -p %i/lib/perl5/%type_raw[perl]/man
  mv %i/share/man/man3 %i/lib/perl5/%type_raw[perl]/man
  mv %i/bin/ptksh %i/bin/ptksh%type_raw[perl]
  mv %i/share/man/man1/ptksh.1 %i/share/man/man1/ptksh%type_raw[perl].1
<<
<<

利用者は,どのバージョンの perl 用の ptksh も持っておくことができます. update-alternatives を使用すると,利用者は一般的な (perl バージョンのない) 名前でもアクセスすることができ,便利です.

2005年3月の時点で,fink パッケージの perl 自体 (Apple が提供する perl バージョン以外の perlXYZ や perlXYZ-core) としては,manpage とモジュールの位置が変わりました. このため,上位バージョンのコア perl モジュールを提供するパッケージは,perlXYZ や perlXYZ-core パッケージを Replaces フィールドに記述しないでください.

3.6 Emacs ポリシー

Fink プロジェクトでは Emacs について Debian プロジェクトのポリシーに従うことに決定しましたが,小さな違いもあります. (Debian プロジェクトのポリシーについては http://www.debian.org/doc/packaging-manuals/debian-emacs-policy を参照) Fink ポリシーとの違いは 2 点です. まず,このポリシーは Fink では現在のところパッケージ emacs20 と emacs21 にのみ適用され,パッケージ xemacs には適用されません. (この点は将来変わるかも知れません.) 次に Debian のポリシーと異なり, Fink パッケージはどれもファイルを直接 /sw/share/emacs/site-lisp にインストールして構いません.

4 ファイルシステムのレイアウト

以下はファイルシステムのレイアウトのガイドラインで, Fink のパッケージングポリシーの一部です.

4.1 ファイルシステム構造標準 (Filesystem Hierarchy Standard)

Fink は ファイルシステム構造標準 (Filesystem Hierarchy Standard, 略して FHS ) の精神に従います. しかし従えるのは飽くまでも精神のみです. それは FHS が / 以下と / 以下の階層を管理できるシステムベンダ向けに作られたからです. Fink はインストールディレクトリ (別名「プリフィクス」) 以下のみを管理するアドオン・ディストリビューションです. 以降の例ではデフォルトの「プリフィクス」 /sw を使います.

4.2 ディレクトリ

ファイルは以下のサブディレクトリに保存します:

FieldValue
/sw/bin

一般的な実行可能プログラム用. サブディレクトリはなし.

/sw/sbin

管理者のみが使うことを意図した実行可能プログラム用. バックグラウンドで動くデーモンもここに入る. サブディレクトリはなし.

/sw/include

C と C++ のヘッダファイル用. 必要に応じてサブディレクトリを作成してよい. 標準の C ヘッダファイルと混同しそうなヘッダファイルをインストールする場合は必ずサブディレクトリに入れること.

/sw/lib

アーキテクチャ依存のデータファイルやライブラリ用. 静的および共有ライブラリは,避ける理由が特にない限り /sw/lib 直下に置きます. ユーザが直接起動することのない実行可能プログラム (普通なら libexec 下に置かれるはずのもの) もここに置きます.

パッケージは,固有のデータやロード可能モジュールを保存するサブディレクトリを自由に作成できます. 必ず互換性を考慮したディレクトリ名を使って下さい. 賢明な方法は,そのサブディレクトリの名前にパッケージの「メジャーバージョン」を含めたり, 「メジャーバージョン」をディレクトリ名にしたさらに深い階層を作ることです (/sw/lib/perl5/sw/lib/apache/1.3 など). ディレクトリにホストの種類を使うときには注意が必要です. powerpc-apple-darwin1.3.3 は,互換性の観点から問題があります. powerpc-apple-darwin1.3 または単に powerpc-apple-darwin とします.

/sw/lib/ppc64 /sw/lib/x86_64

このディレクトリは 64-bit ライブラリ用で, powerpc アーチテクチャーでは /sw/lib/ppc64 が, i386 アーチテクチャーでは /sw/lib/x86_64 が用いられます. 'fat' としてビルドされたライブラリは, /sw/lib に保存されます.

/sw/share

アーキテクチャに依存しないデータファイル用で, /sw/lib と同じルールが当てはまります. よく使われるサブディレクトリについては後述します.

/sw/share/man

man ページ用. この中は man のセクションに従って分類されます. /sw/bin/sw/sbin の中の全てのプログラムには, 対応した man ページがここになければいけません.

/sw/share/info

Texinfo ソースから生成される Info 形式のドキュメント用. 索引ファイル dir のメンテナンスは Debian 版 install-info (パッケージ dpkg の一部) が自動的に行う. パッケージ記述のフィールド InfoDocs を使って, パッケージスクリプト PostInst 及び PreRm で使うための適切なコードを自動生成する. Fink は,それぞれのパッケージが勝手に dir ファイルを作成しないことを保証する. サブディレクトリはなし.

/sw/share/doc

man でも Info でもないドキュメント用. README, LICENSE, COPYING はここに保存する. 全てのパッケージは,ここに各「パッケージ名」に対応したサブディレクトリを作らなければいけない. 名前には (「パッケージ名」そのものの一部でない限り) 「バージョン」を含めてはいけない. 単に %n を使うとよいでしょう.

/sw/share/locale

国際化で使うメッセージカタログ用.

/sw/var

ディレクトリ var には変化するデータを保存する. (スプールディレクトリ,ロックファイル,状態のデータベース,ゲームのハイスコアやログファイルなど)

/sw/etc

設定ファイル用. 複数のファイルを使用するパッケージは,ここにサブディレクトリを作らなければいけない. 区別のため,そのサブディレクトリにはパッケージまたはその中のプログラムの名前を付けなければいけない.

/sw/src

ソースコードを保存,ビルドするディレクトリ. パッケージはここに何もインストールしてはいけない.

/sw/Applications

このディレクトリには,コマンドラインから実行するのではなく,ダブルクリックで実行する OS X 型のアプリケーションを保存する.

/sw/Library/Frameworks

このディレクトリには,OS X 型のアプリケーションが使用する,OS X 型のフレームワークを保存する.

4.3 避けるべきこと

/sw 下には,上述のもの以外ディレクトリを作ってはいけません. 特に以下のディレクトリを作らないこと: /sw/man, /sw/info, /sw/doc, /sw/libexec, /sw/lib/locale

5 コンパイラ

Fink は,Apple Developer Connection によってアップルコンピュータから提供される gcc コンパイラを使用しています. バージョンはいくつかあり, Mac OS X システムでも通常は複数のバージョンが存在します.

より詳しい解説がメーリングリスト中にあります.

5.1 コンパイラバージョン

GCC の発展に伴い,fink は "ディストリビューション" をつくって 変化に対応してきました.

各 Fink ディストリビューションには,ソースからコンパイルするユーザー全員がもっていると想定されている 既定の gcc と g++ コンパイラがあります. パッケージ中で直接 "gcc" や "g++" を使用すると,この既定値が使われます. これと違う値を使用する必要がある場合,(例えば,ディストリビューションの移行中に) パッケージ .info ファイルは Apple 提供の特定バージョンのバイナリを指定しなければなりません. どのように指定するかは,ソフトウェアのビルドシステムによりますが,多くの場合 SetCCSetCXX のフィールドを使用します. 例えば,g++コンパイラのバージョンを 3.3 にするには,SetCXX: g++-3.3 とします. 正しいコンパイラが使われているか,ビルド時の出力を確認してください.

10.1 ディストリビューションは,コンパイラに 2.95 の使用を前提とします. 10.2 ディストリビューションは,コンパイラに 3.1 の使用を前提とします. 10.2-gcc と 10.3 ディストリビューションは,コンパイラに 3.3 の使用を前提とします. 10.4-transitional ディストリビューションは複雑で,これは g++-3.3 と gcc-4.0 を使用しています. 10.4 ディストリビューションでは,gcc-4.0 と g++-4.0 を使用するようになる予定です.

正しい g++ コンパイラが使用されるよう新手法が 10.4-transitional ディストリビューションから採用されました. コンパイル時に,/sw/var/lib/fink/path-prefix-g++-XXX (XXX はバージョン番号) ディレクトリが PATH に追加されます. このディレクトリには正しい g++ が使われるようなシェルスクリプトが入っています.

5.2 g++ ABI

OS X の歴史の中で,g++ ABI は3度変わってきました: ABI は バージョン 2.95, 3.1, 3.3, 4.0 で異なります. ABI の相違は互換性がなく,C++ コードを用いたライブラリにリンクする場合は,同じ ABI でコンパイルしなければなりません.

Fink では,g++ ABI は GCC フィールドで扱っています. g++ あるいは c++ コンパイラを呼び出すパッケージは,GCC フィールドを定義しなければなりません (逆に,呼び出さないパッケージには定義してはいけません). ABI が更新された場合,パッケージ依存性に GCC フィールドも確認しなければいけません. 依存するパッケージ全てがアップグレードされて,始めてそのパッケージもアップグレードすることができます. ユーザーがパッケージをビルドするより前に正しく更新された依存性を持つためには,依存パッケージのバージョンを変える必要があります.

ある範囲内でのみ依存されているパッケージは,アップグレードの準備ができない場合, ディストリビューション変更時に旧バージョンの ABI を使用することもできます. アップグレードされる場合は,範囲内の全てのパッケージを同時に正しいバージョンにアップグレードする必要があります. このため,ほとんどのパッケージにとって,アップグレードはディストリビューションの変更時にするのがよいでしょう.

Fink は GCC フィールドを使って,ユーザーが正しいコンパイラを使うよう確認します. GCC フィールドがパッケージによって定義されている場合,fink は gcc_select コマンドが正しい値に設定されているかを確認します. (10.2 と 10.3 での正しい値は 3.3 で, 10.4 での正しい値は 4.0 です. OS X 10.2 以前には gcc_select はありません.)

6 リファレンスマニュアル

6.1 ビルドプロセス

各フィールドの意味を理解するには, Fink のビルドプロセスに関する知識がある程度必要です. このプロセスは 5 段階になっていて,それぞれ解凍段階,パッチ段階,コンパイル段階,インストール段階,ビルド段階 と呼ばれます. 下記の例では /sw にパッケージ gimp-1.2.1-1 をインストールするものとします.

解凍段階では,ディレクトリ /sw/src/fink.build/gimp-1.2.1-1 が作成されてソースの tar ボールがそこに解凍されます. 大抵,解凍によりソースを含むディレクトリ gimp-1.2.1 が作られます. これ以降のステップはすべてこの中 (すなわち /sw/src/fink.build/gimp-1.2.1-1/gimp-1.2.1) で行われます. 詳細はフィールド SourceDirectory, NoSourceDirectory や SourceNExtractDir (Nは数字) で変更できます.

パッチ段階では Darwin でビルドするためのパッチがソースに当てられます. フィールド UpdateConfigGuess, UpdateLibtool, Patch や PatchScript で指定されたアクションを,この順で実行します.

コンパイル段階ではソースの configure とコンパイルが行われます. 普通はスクリプト configure を適切な引数で起動し,コマンド make を実行することになります. 詳細はフィールド CompileScript を参照して下さい. ビルドに対しテストスイートが有効な場合 (fink 0.25 の新しい機能で,現在メンテナモードでビルド中に適用される), CompileScript の直後に TestScript が実行される.

インストール段階では,パッケージは仮ディレクトリ /sw/src/fink.build/root-gimp-1.2.1-1 (%d と同じ) にインストールされます ("root-" が付いていることに注意). ディレクトリ /sw にインストールされる予定のファイルは全て, /sw/src/fink.build/root-gimp-1.2.1-1/sw (%i すなわち %d%p に同じ) にインストールされます. 詳細はフィールド InstallScript を参照して下さい.

(Fink 0.9.9 で導入: フィールド SplitOff を用いると,単一のパッケージ記述から複数のパッケージを生成できます. インストール段階の最後のあたりでパッケージそれぞれに対して個別のインストールディレクトリが作られ, ファイルが適当なディレクトリに振り分けられます.)

ビルド段階では,仮ディレクトリからバイナリパッケージ (.deb ファイル) が作られます. この段階を直接制御することはできません. 代わりに,パッケージ記述からの様々な情報を使って dpkg 用の control ファイルが作成できます.

6.2 フィールド

フィールドを分類して解説します. 以下の一覧は完全ではありません. :-)

初期データ関連

FieldValue
Package

「パッケージ名」. 値には英小文字,数字及び ドット (.), プラス (+), ハイフン (-) を使うことができます. 下線 (_) と英大文字は使えません. 必須フィールド.

このフィールドで行われるパーセント展開は %N, %{Ni}, %type_raw[] と %type_pkg[] のみです.

Fink のパッケージングポリシーでは, どのパッケージも常に同じオプションを有効にしてコンパイルされるようにします. あるパッケージに複数の変種を設ける場合は (フィールド Type の説明を参照), 変種を区別する情報をフィールド Package に含めなければいけません (パーセント展開 %type_pkg[] の説明を参照). これにより,各変種に固有の (どのオプションが有効かが分かる) 「パッケージ名」が与えられます. フィールド Package 内でパーセント展開 %type_pkg[] および %type_raw[] を使うことは最近導入されたばかりで, 古い Fink とは非互換であるため,注意が必要です. そのため,そのようなパッケージ記述はフィールド InfoN (ただし N>=2) 内に埋め込むようにします.

Version

upstream のバージョン. 値にはフィールド Package と同じ制限がある. 必須フィールド.

プログラムによっては被標準的なバージョン番号の付け方をしていて,ソートや当フィールドで認められていない字を使っている場合があります. このような状況では,上流のバージョンを適切にソートされるものに変えます. バージョン文字列のソートのされ方がわからない場合,dpkg コマンドをシェルで入力します.例えば,

 
 dpkg --compare-versions 1.2.1 lt 1.3 && echo "true"

これは "1.2.1" の方が "1.3" より小さいため "true" を出力します. 詳細は dpkg man ページを参照.

Revision

Fink パッケージとしてのリビジョン. upstream のバージョンが同じパッケージのパッケージ記述を書き換えたら,ここを 1 ずつ増やします. 最初は 1 で始まます. 必須フィールド.

Fink のポリシーでは,パッケージのバイナリ (コンパイル済み) 形式 (.deb ファイル)が変わるいかなる場合でも,Revision をあげなければなりません. 例えば,Depends や他のパッケージ一覧フィールド, Splitoff パッケージの追加・削除・名称変更, Splitoff パッケージ間でのファイルの移動など. パッケージのツリーを統合 (例えば 10.2 から 10.3) する場合,新しい方のツリーでは Revision を 10 (など,大きな数字) あげて古い方のツリーでのパッケージの更新に対応できるようにします.  

Architecture

パッケージ (および Splitoff) が対応している CPU アーキテクチャー一覧を,コンマ区切りで記述します. 現在のところ,powerpci386 が値として使用できます. このフィールドがあり,値が条件処理後にブランクでなく,ローカルマシンのアーキテクチャーが一覧にない場合,パッケージ記述は無視されます. このフィールドがない場合,あるいは値がブランクであるような場合は,全てのアーキテクチャーに対応していると見なされます. (0.24.11 CVS バージョン以降 の fink に導入)

gcc-4.0 以前のコンパイラを使うパッケージ (およびこれに依存するパッケージ) の場合に powerpc と宣言するのが, 現在のところの主な使用方法です.

このフィールドでは,値一覧にある値とパーセント展開を,通常の条件文法で使うことができます (詳細については,Depends フィールドを参照). これによって,特定の変種を特定のアーキテクチャーに制限することができます. 例えば:

  Package: foo-pm%type_pkg[perl]
  Type: perl (5.8.1 5.8.4 5.8.6)
  Architecture: (%type_pkg[perl] = 581) powerpc

によって,foo-pm581 という変種は powerpc となり,他の変種には値無しになります. ただし,アーキテクチャーの値が無いことは,そのアーキテクチャー用のパッケージではない,ということではありません.

Epoch

Fink 0.12.0 で導入: パッケージの「エポック」を指定します (指定されていない場合は 0 と見なされる). 詳細は Debian Policy Manual を参照. Fink と,元となっている Debian ツールは,name-version-revision をパッケージのユニークな識別子としています. epoch のみが異なるような複数のパッケージを作ってはいけません.

Description

パッケージの短い説明.(それが何であるか) 一覧表示に使われる1行紹介文なので,簡潔かつ分かり易く. (半角) 45文字以下が望ましい. 60文字を超えないこと. このフィールドは,「パッケージ名」と必ず一緒に表示されるので,「パッケージ名」を繰りかえす必要はありません. 必須フィールド.

Type

値が bundle の場合: バンドルパッケージは関連するパッケージをひとまとめにするために使われます. 各パッケージには,依存関係はありえますが,ソースコードにも,インストールされるファイルにも関連はありません. フィールド Source, PatchScript, CompileScript, InstallScript とそれらの関連フィールドは, バンドルパッケージでは無視されます.

値が nosource の場合: これは bundle と非常に似ています. これはソースの tar ボールが存在しないことを示します. よって何も取り寄せられず,解凍段階では空ディレクトリが作られます. しかしパッチ,コンパイル,インストールの各段階は通常通り実行されます. このようにして全てのソースコードをパッチと共に配布したり, または InstallScript を使ってディレクトリを作るだけのことができます. Fink 0.18.0 以降では Source: none と設定しても同じ挙動が実現できます. これにより,フィールド Type を他の目的に使えます (Type: perl など).

値が perl の場合 (Fink 0.9.5 以降): コンパイル及びインストール段階のスクリプトのデフォルト値が変わります. Fink 0.13.0 からは,この値の変種として perl $version が使えます. ここで "$version" は perl の特定のバージョンで,3つの数をピリオドで区切ったもの (perl 5.6.0 など).

CVS 版の Fink 0.19.2 以降では, 「プログラミング言語」または「プログラミング言語-バージョン」という記法は一般化され, メンテナの定義した任意のタイプとそれに関連するサブタイプが指定できるようになり, あるパッケージに複数のタイプを指定できるようになりました. タイプとサブタイプにはそれぞれ空白以外からなる任意の文字列が使えます. (しかし括弧,大括弧,カンマ,パーセント記号を使ってはいけません.) ここではパーセント展開は行われません. また,タイプの値は小文字に変換されます(が,サブタイプは変換されません). 複数のタイプを指定するにはカンマ区切りのリストを使います (各タイプに空白区切りのサブタイプリストが伴うことができます).

これに加えて「変種」という概念があります. 単一のパッケージ記述が,有効なコンパイルオプションだけが違う複数のパッケージを生成するとき, これらのパッケージは「変種」になります. このプロセスの鍵はサブタイプリストの利用です. 単一の文字列ではなく,文字列の空白区切りリストを括弧で括ったものを使います. Fink はリスト内のサブタイプ毎にパッケージ記述をコピーし,各コピー内ではリストを単一のサブタイプに置き換えます. 例:

Type: perl (5.6.0 5.8.1)

これは 2 つのパッケージ記述を生成します. 片方は Type: perl 5.6.0 と,もう片方は Type: perl 5.8.1 と同等になります. 特殊なサブタイプリスト "(boolean)" が意味するのは,(サブでない) タイプ自身とドット '.' から成るリストです. つまり以下の 2 つは同一です.

Type: -x11 (boolean)
Type: -x11 (-x11 .)

サブタイプリストの展開とそれに伴うパッケージ変種の作成は,再帰的に行われます. またサブタイプリストを持つタイプが複数ある場合は,あり得る組み合わせが全て生成されます.

Type: -ssl (boolean), perl (5.6.0 5.8.1)

Type 以外のフィールドから特定の変種のサブタイプを得るには,疑似ハッシュ %type_raw[] および %type_pkg[] を使います. 以下にパッケージ記述の例の一部を示します.

Info2: <<
Package: foo-pm%type_pkg[perl]
Type: perl (5.6.0 5.8.1)
Depends: perl%type_pkg[perl]-core
 <<
Info2: <<
Package: bar%type_pkg[-x11]
Type: -x11 (boolean)
Depends: (%type_raw[-x11] = -x11) x11
CompileScript:  <<
  #!/bin/bash -ev
  if [ "%type_raw[-x11]" == "-x11" ]; then
    ./configure %c --with-x11
  else
    ./configure %c --without-x11
  fi
  make
<<
<<

fink 0.26.0 より, Type: -64bit によって新しいパーセント展開 %lib を制御することができます. また,LDFLAGS の既定値も変更になりました. こちらも新しい式 %type_num[] と用いることで,ライブラリの 32-bit バージョンと 64-bit バージョンを一つの .info ファイルから作ることが可能になりました. 以下はサンプルコードです:

Info2: <<
Package: foo%type_pkg[-64bit]
Type: -64bit (boolean)
Depends: (%type_raw[-64bit] = -64bit) 64bit-cpu
ConfigureParams: --libdir='${prefix}/%lib'
SplitOff: <<
 Package: %N-shlibs
 Files: %lib/libfoo.*.dylib
 Shlibs: <<
    %p/%lib/libfoo.1.dylib 1.0.0 %n (>= 1.0-1) %type_num[-64bit]
  <<
<<
<<
License

パッケージ配布の際にパッケージの従うライセンスの性質を表す. 値は パッケージのライセンス で示した選択肢から選ばなければいけない. それに加え,パッケージが実際にパッケージング・ポリシーに従うとき, すなわちライセンスのコピーがパッケージの doc ディレクトリにインストールされるときでなければ このフィールドを指定してはいけない.

Maintainer

パッケージに責任を負っている人物の名前とメールアドレス. 必須フィールド. 値は以下の形式で,名前とメールアドレスはそれぞれ一つだけとする.

名前 名字 <アカウント@ドメイン.example.com>

訳注: 名前はローマ字表記です. 順序は,特に指定はありませんが, YAMADA Taro などとするのが一般的です.

InfoN

このフィールドにより Fink はパッケージ記述の構文の非互換な変更に対処できます. 任意のバージョンの Fink には扱える "N" (整数) の最大値が設定されています. それより大きいNを持つフィールド InfoN はいずれも無視されます. だからこの機構の利用は必要最低限に止めなければいけません. そうでないと,古いバージョンの Fink のユーザが必然性なしに仲間外れにされます. この機構を使うには,パッケージ記述全体をフィールド InfoN の値に埋め込んでください. 複数行に渡る値の記述方法については,前述の「ファイル形式」を参照してください. 以下は,各 InfoN レベルに於いて追加された機能と,最初にサポートされた fink のバージョンです.

  • Info2 (fink>=0.20.0): .info ファイル中のメインの Package フィールドでのパーセント展開の使用. SplitOff (および SplitOffN) での %type_* パーセント展開の使用.
  • Info3 (fink>=0.25.0): .info ファイル中でインデントを正しく扱うことができる. RFC-822 複数業のサポートは終了. pkglist フィールドにコメントが可能.
  • Info4 (fink>=0.26.2): %V 展開を追加, ConfigureParams フィールド内で %lib の使用が可能.

依存性関連

FieldValue
Depends

そのパッケージがビルドできるようになる前にインストールされていなければいけないパッケージのリスト. このフィールドではパーセント展開が行われる (「依存性関連」の他のフィールドでも同様: BuildDepends, Provides, Conflicts, Replaces, Recommends, Suggests および Enhances) 普通,値は「パッケージ名」の単なるカンマ区切りリストだが, 現在の Fink は (dpkgと同じ形式の) 「代替パッケージ節」と「バージョン節」に対応している. それらを全て盛りこんだ例:

Depends: daemonic (>= 20010902-1), emacs | xemacs

本当の意味で「省略可能」な依存性を表現する方法がないことに注意. あるパッケージが別のパッケージがあってもなくても動作するとき, もう片方のパッケージが (存在するときであっても) 確かに使われていないか確かめるか, またはフィールド Depends に加えるかのどちらかを行うこと. ユーザにどちらの使い方をも提供したいときは,2 つの別々のパッケージ (例えば wget と wget-ssl) を作る.

0.18.2 CVS版以降の Fink では,条件付き依存性を記述できる. それを指定するには「パッケージ名」の前に (string1 op string2) を付ける. パーセント記法が普通に展開され,その後オペレータ op によって2つの文字列が比較される. op には以下のものが使える: <<, <=, =, !=, >>, >=. その直後に「パッケージ名」の記されたパッケージには,比較が真を返したときのみ依存性があると判断される.

この機能は,複数の似通ったパッケージを管理する際に手間を省くためにも使える. 例えば elinks と elinks-ssl は次のように列挙できるが,

Depends: (%n = elinks-ssl) openssl097-shlibs, expat-shlibs

これは elinks の方で

Depends: expat-shlibs

とし, elinks-ssl の方で

Depends: openssl097-shlibs, expat-shlibs

とすることと同じである.

この他の文法として, (string) 指定をすることもできる. string が null でない場合, "true" を返す.

Package: nethack%type_pkg[-x11]
Type: -x11 (boolean)
Depends: (%type_pkg[-x11]) x11

これにより,nethack-x11 は x11 パッケージに依存するが, nethack は依存しない.

Depends/BuildDepends を,複数のメジャーバージョンを持つ共有ライブラリパッケージに使用する場合,下記のようにしてはいけない:  

  Package: foo
  Depends: id3lib3.7-shlibs | id3lib4-shlibs
  BuildDepends: id3lib3.7-dev | id3lib4-dev

どちらのライブラリとも動作するパッケージであっても,どちらか一つ (適切に動作する高い方のバージョンが望ましい) のパッケージを選び,パッケージ内で統一する.

共有ライブラリポリシーで説明したように, -dev パッケージがインストールされるのは一つだけである. 各パッケージは -shlibs パッケージに関連づけられた異なるファイル名へ同じ名前のシンボリックリンクを作成することがある. しかし,パッケージ foo をコンパイルする際には実際の (-shlibs パッケージ内の) ファイル名の方が foo バイナリにハードコードされる. パッケージは,コンパイル時にインストールされた -dev に合った -shlibs パッケージを必要とする. このため, Depends でどちらも満たすようにはできないのである.

以前は,必須でないパッケージは暗黙のうちに必須パッケージに依存していたが, 現在はそうなっていない.

BuildDepends

Fink 0.9.0 で導入: ビルド時のみに適用される依存性のリスト. ビルド時には必要だが,実行時には使われないツール (flexなど) を示すのに使う. 書式は Depends と同じ. ビルドされる際にテストスイートが有効であれば, TestDepends がこのリストに追加される.

Provides

そのパッケージが「提供」すると考えられる「パッケージ名」のカンマ区切りのリスト. パッケージ pine で Provides: mailer となっている場合, pine がインストールされると mailer についての全ての依存性は解決したものとされる. 普通,そのようなパッケージは pine のフィールド Conflicts や Replaces にも入れるとよい.

Provides 項目には,バージョン番号に関連した情報はない. 親パッケージから取得することも,Provides フィールド自体にはバージョン番号を特定するような仕組みなどもない. バージョンを指定する依存性があっても,Provides を持つパッケージによって満たすことはできない. 結果として,同一の代理パッケージを提供する変種が多数あるのは危険である. これによってバージョンを指定した依存性ができなくなるためである. 例えば, foo-gnome と foo-nogome が "Provides: foo" を提供する場合,"Depends: foo (> 1.1)" は動作しない.

Conflicts

そのパッケージと同時にインストールしてはいけない「パッケージ名」のカンマ区切りの一覧. バーチャルパッケージでは,そのパッケージが提供する「パッケージ名」をここに指定することができ,適切に扱われます. このフィールドはフィールド Depends のようにバージョン付きの依存性情報にも対応していますが, 代替パッケージには対応していません (意味をなさない). あるパッケージがそれ自身のパッケージ記述の Conflicts に入っていると, (暗黙のうちに) そこから取り除かれます. (Fink のバージョン 0.18.2 CVS 以降で導入)

注記: Fink 自身はこのフィールドを無視します. これは dpkg に渡され,そこで適切に扱われます. 要するに,このフィールドが影響するのはビルド時でなく実行時です.

BuildConflicts

当該パッケージがコンパイル中にインストールされてはいけないパッケージの一覧. これは, ./configure やコンパイラが,望ましくないライブラリヘッダを見たり, 壊れることが分かっているツール (例えば,特定のバージョンの sed にあるバグ) のバージョンを使用することを避けるために使います. ビルド時にテストスイートが有効な場合, TestConflicts フィールド内のパッケージはこのリストに追加されます.

Replaces

Conflicts と共に使われる. そのパッケ−ジが,衝突するパッケ−ジの機能の代わりになるだけでなく,共通するファイルを持つときに使われる. このフィールドがないと,dpkg はパッケージのインストール時にエラーを出すかも知れない. それはいくつかのファイルが依然として元あった方のパッケージに属しているからだ. それら 2 つのパッケージが純粋な意味で互いに代替物であり,どちらか好きな方を選べるようなときはこれを使うとよい. あるパッケージがそれ自身のパッケージ記述の Conflicts に入っていると, (暗黙のうちに) そこから取り除かれる. (Fink のバージョン 0.18.2 CVS 以降で導入)

注記: Fink自身はこのフィールドを無視する. しかしこれは dpkg に渡され,そこで適切に扱われる. 要するにこのフィールドが影響するのはビルド時でなく実行時だ.

Recommends, Suggests, Enhances

これらのフィールドはパッケージ同士の付加的な関係情報を指定する. 書式は他の依存情報フィールドと同じ. これら 3 つの情報は dpkg や apt-get によるインストール過程そのものには影響しないが, dselect や他のフロントエンドが,微妙な選択を行うユーザの判断を助けるのに使われる.

Pre-Depends

フィールド Depends の特別なもので,意味の上で厳密さが必要になる. このフィールドを使うのは,開発者用メーリングリストで議論を行い,確かに使う必要があるとの同意が得られた場合に限る.

Essential

必須パッケージを表す真偽値フィールド. 必須パッケージでないパッケージは必須パッケージに暗黙のうちに依存して構わない. dpkg は,このフィールドの指示に優先する特別なフラグを使わない限り,必須パッケージをシステムから取り除くことを拒む. 以前は,必須でないパッケージは暗黙のうちに必須パッケージに依存していたが,現在はそうではない.

BuildDependsOnly

Fink 0.9.9 で導入: 真偽値フィールド. 他パッケージはこのパッケージを BuildDepend に入れてもよいが, Depend に入れてはいけないことを示します. 通常の真偽値とは異なり,BuildDependsOnly は3つの状態があります. 未定義 (何も指定しない) の場合と明示的に False を指定するのとは異なります. 詳細は共有ライブラリポリシーを参照してください.

fink 0.20.5 より,このフィールドが設定されているか,設定されている場合その値が, パッケージがビルドされる際には .deb ファイルに記録されます. このため, BuildDependsOnly の値を変更したり,追加・削除時には Rivision 番号をあげる必要があります.

解凍段階関連:

FieldValue
CustomMirror

ミラーサイトのリスト. 各ミラーサイトは <場所>: <url> という書式に従って 1 行ずつ記述する. 場所 には大陸コード (例えば nam) や国コード (例えば nam-us) など (何でもよい) を使う. ミラーサイトはここに記述した順に試される. 例:

CustomMirror: <<
nam-US: ftp://ftp.fooquux.com/pub/bar
asi-JP: ftp://ftp.qiixbar.jp/pub/mirror/bar
eur-DE: ftp://ftp.barfoo.de/bar
Primary: ftp://ftp.barbarorg/pub/
<<

大陸及び国のコードは  /sw/lib/fink/mirror/_keys にある. これは, fink および fink-mirrors パッケージの一部である.

Source

ソースの tar ボールの URL . HTTP または FTP でなければいけないが,Fink はそれを単に wget に渡すだけなので,実際には問題にならない. このフィールドは,ミラーサイトを示す特別な記法に対応している. すなわち mirror:<ミラー名称>:<相対パス> だ. こうすると Fink に ミラー名称 として設定された URL を探し, その後ろに 相対パス を付け加え,それを実際の URL として使う. Fink の認識する ミラー名称 の一覧は /sw/lib/fink/mirror/_list (パッケージ fink または fink-mirrors の一部) に記される. または ミラー名称custom と書くことで, Fink にフィールド CustomMirror を使わせることもできる. URL が wget に渡される前に,パーセント記法の展開が行われる. %n は %type_ 系で示される変種データ全てを含む文字列に展開されることに注意. ここでは %{ni} を (場合によっては特定の %type_ の展開値と共に) 使うとよい.

Fink 0.18.0 以降では Source: none は特殊な意味を持ち,取り寄せるべきソースは存在しないことを表す. 詳細についてはフィールド Type の説明を参照. gnu という値は mirror:gnu:%n/%n-%v.tar.gz の, gnome という値は mirror:gnome:stable/sources/%n/%n-%v.tar.gz の省略形. デフォルト値は %n-%v.tar.gz (すなわちマニュアル・ダウンロード) になっている. 暗示的に Source を指定するのは廃止予定である (明示的に簡単なファイル名指定/手動ダウンロードするのは可).

テストスイートを実行するためだけに必要なソースは,TestSource および InfoTest 内の関連フィールドを使ってください.

SourceN

パッケージが複数の tar ボールから形成されている場合,それらはこの (省略可能) フィールドで指定する. N は 2 から始まる数. つまり最初の tar ボール (ある意味「メイン」になるもの) をフィールド Source に, 2 番目の tar ボールをフィールド Source2 に,という風になる. 値の書式は Source と共通だが, gnugnome という省略形は展開されない (結局,意味をなさない). バージョン 0.19.2 以降の CVS 版 Fink では, 2 以上の任意の (つまり,必ずしも連続しない) 整数を N に使える. しかし,重複はやはり許されない.

SourceDirectory

tar ボールが単一のディレクトリに展開されはするが, そのディレクトリ名が tar ボールのファイル名から拡張子を除いたものと異なる場合には,これを設定しなければいけない. つまり,普通なら "foo-1.0.tar.gz" という tar ボールは "foo-1.0" というディレクトリを生成する. しかし生成されるディレクトリ名がそれと異なる場合,そのディレクトリ名をこのフィールドで指定する. パーセント展開が行われる.

NoSourceDirectory

真偽値フィールド. tar ボールが単一のディレクトリに展開されないときにこのフィールドを設定する. つまり,普通なら "foo-1.0.tar.gz" という tar ボールは "foo-1.0" というディレクトリを生成する. しかし tar ボールを展開したときにファイルがカレントディレクトリに撒き散らされる場合は, このフィールドを "true" に設定する.

SourceNExtractDir

普通,補助的な tar ボールは「メイン」の tar ボールと同じディレクトリで展開される. それを特定のサブディレクトリ内で展開して欲しいときは,このフィールドでサブディレクトリ名を指定する. ご想像の通り, Source2ExtractDirSource2 で指定した tar ボールに対応する. 用例についてはパッケージ ghostscript, vim や tetex を参照.

SourceRename

このフィールドを使うと,ビルド時にソースの tarball をリネームできる. これが便利なのは,例えば,ソースのバージョンがサーバのディレクトリ名には示されているが, tar ボールそのものはどのバージョンでも同じ名前のときだ. (例えば http://www.foobar.org/coolapp/1.2.3/source.tar.gz というとき) このことで起きる問題を回避するためには次のようにすればよい.

SourceRename: %n-%v.tar.gz

この例では,ご想像の通り, tar ボールは /sw/src/coolapp-1.2.3.tar.gz として格納されることになる.

SourceNRename

これはフィールド SourceRename と同じだが, SourceN で指定された N 番目の tar ボールのリネームに使う. 用例についてはパッケージ context や hyperref を参照.

Source-MD5

Fink 0.10.0 で導入: このフィールドではソースファイルの MD5 チェックサムを指定します. Fink はこの情報によりおかしなソースファイル, すなわち Fink パッケージの作成者が指定したものではない tar ボールを見分けられます. この問題の原因には,以下のようなものがあります: tar ボールのダウンロードに失敗した,upstreamのメンテナが知らないうちに tar ボールを更新した,トロイの木馬などの攻撃,など.

このフィールドの典型的な用例は次の通り.

Source-MD5: 4499443fa1d604243467afe64522abac

チェックサムの算出にはツール md5sum を使います. tar ボール /sw/src/apache_1.3.23.tar.gz のチェックサムが知りたいときには, 次のコマンドを実行します (出力も一緒に示した).

fingolfin% md5sum /sw/src/apache_1.3.23.tar.gz
4499443fa1d604243467afe64522abac  /sw/src/apache_1.3.23.tar.gz

左に表示された値がここで必要なものです.

SourceN-MD5

Fink 0.10.0 で導入: フィールド Source-MD5 と同様ですが, フィールド SourceN に対応する N 番目の tar ボールの MD5 チェックサムを指定します.

TarFilesRename

Fink 0.10.0 で導入: このフィールドは tar 形式を使うソースファイルにのみ適用されます.

このフィールドを使うと,任意のソース tar ボールの中のファイルを, tar ボールの展開中にリネームできます. ファイルシステム HFS+ がケースインセンシティブである (大文字と小文字を区別しない) ことを回避するために非常に便利でしょう. 普通の Mac OS X システムでは,ファイル installINSTALL は衝突してしまいます. このフィールドを使うと, tar ボールをわざわざ再パッケージしなくとも (以前はこのような場合に行われていた), こういった問題を回避することができます.

このフィールドでは,単に,リネームされるファイルのリストを指定します. ワイルドカードも使うことができます. デフォルトでは,指定されたファイルは,いずれも元の名前に _tmp を後置したファイル名にリネームされます. デフォルト値に優先する指定をするには, フィールド FilesDocFiles と同様の書式を使います. すなわち 元のファイル名,コロン (:),新ファイル名,という順です. 例:

TarFilesRename: foo bar.* qux:quux
Tar2FilesRename: direcory/INSTALL:directory/INSTALL.txt
TarNFilesRename

Fink 0.10.0 で導入: フィールド TarFilesRename と同様ですが, フィールド SourceN に対応する N 番目の tar ボールに対して機能します.

パッチ段階関連:

FieldValue
UpdateConfigGuess

真偽値フィールド. "true" にすると,ビルド用ディレクトリ内のファイル config.guess と config.sub が Darwin に対応したバージョンに置き換えられます. その動作は,パッチ段階の,PatchScript が実行される前に行われます. これが必要だと分かっているとき, すなわち configure スクリプトが "unknown host" というメッセージで失敗するときのみ使うこと.

UpdateConfigGuessInDirs

0.9.0 CVS バージョン以降で導入: サブディレクトリのリストを指定します. これは UpdateConfigGuess と同じことを行いますが, ソースツリー中の複数のディレクトリに古い config.guess が入っているパッケージで便利でしょう. 以前はコピーや移動を行うよう PatchScript に手動で指定する必要がありましたが, この新フィールドを使えばディレクトリを単に列挙するだけでよくなりました. ビルド用ディレクトリ自身のファイルの更新には . とします.

UpdateLibtool

真偽値フィールド. "true" にすると,ビルド用ディレクトリ内のファイル ltconfig と ltmain.sh が Darwin に対応したバージョンに置き換えられます. その動作は,パッチ段階の, PatchScript が実行される前に行われます. これが必要だと分かっているときのみ使うこと. libtool 関連のスクリプトをバージョンの合わないものに取り換えると壊れるパッケージもあrimasu . 詳細についてはlibtool のページを参照.

UpdateLibtoolInDirs

0.9.0 CVS バージョン以降で導入: サブディレクトリのリストを指定します. これは UpdateLibtool と同じことを行いますが, ソースツリー中の複数のディレクトリに古い libtool 1.3.x 系列のスクリプトが入っているパッケージで便利でしょう. 以前はコピーや移動を行うよう PatchScript に手動で指定する必要がありましたが, この新フィールドを使えばディレクトリを単に列挙するだけでよくなりました. ビルド用ディレクトリ自身のファイルの更新には . とします.

UpdatePoMakefile

真偽値フィールド. "true" にすると,サブディレクトリ po 内のファイル Makefile.in.in が,パッチの当たったものと取り換えられます. その動作は,パッチ段階の, PatchScript が実行される前に行われます.

パッチの当たった Makefile.in.in は DESTDIR の指定を優先し,メッセージカタログを, /sw/lib/locale ではなく,確実に /sw/share/locale に格納します. このフィールドを利用する前に,入れ換えによってパッケージを破壊していないこと,また入れ換えが本当に必要かどうかを確認すること. diff を実行すれば,パッケージ付属のものと Fink 向けのもの (/sw/lib/fink/update 内にある) との違いが分かります.

Patch

patch -p1 <パッチファイル として適用されるパッチのファイル名. ここにはファイル名のみを指定します. 適切なパス (.infoのあるディレクトリ) は自動的に前置されます. このフィールドではパーセント展開が行われるので,典