Table of Contents
PLIST ファイルは、パッケージの
“packing list” (梱包明細) です。すなわち、
パッケージを構成するファイルの一覧 (インストール先である
${PREFIX} ディレクトリーからの相対位置)
と、それに加えて、いくつかの追加情報
(完全な一覧は pkg_create(1) マニュアルページを参照) が載っています。
この章では、PLISTファイル
(複数の場合もあります、以下を参照してください)を扱う場合に注意が必要な、
いくつかの特別な問題について述べます。
make print-PLISTコマンドを使って、パッケージの展開後に新しくできた全ファ イルにマッチするPLISTを出力することができます。このターゲットに関するさ らなる情報は、 Section 17.17, “他の役に立つターゲット”をご覧ください。
*-dirs パッケージをSection 13.8, “複数のパッケージでディレクトリーを共有する”で説明したように
使った場合、make print-PLIST で、
実際の @dirrm 行のかわりに
@comment が出力されることにお気づきかもしれません。
ここでディレクトリーやファイルを指定して、
実際に近い結果を出力させることもできます。
これはパッケージの更新の際に非常に
役立ちます。
PRINT_PLIST_AWK 変数を、
print-PLIST の出力をフィルターする
AWK のパターンと動作の一式に設定します。
AWK スクリプト塊を好きなように
追加することができますが、
適切にクォートするよう注意してください。
たとえば、PLIST の結果から libdata/foo
ディレクトリー内のファイルをすべて消すには、
以下のようにします。
PRINT_PLIST_AWK+= /^libdata\/foo/ { next; }
また、特定の (共有) ディレクトリーを参照している
@dirrm 行を @comment
に変換するには、以下のようにします。
PRINT_PLIST_AWK+= /^@dirrm share\/specific/ { print "@comment " $$0; next; }
パッケージがシステムにインストールされる際に、 PLIST 内のいくつもの変数が自動的に置換されます。 置換される変数には、以下のようなものがあります。
${MACHINE_ARCH}, ${MACHINE_GNU_ARCH}emacs、およびperlのようないくつかのパッケージは、それらが構築されたアー
キテクチャーに関する情報を、インストールするファイルのパス名に埋め込みま
す。このようなケースに対応するため、実際に使われる前に、PLISTに前処理が
おこなわれます。そして、シンボル
“${MACHINE_ARCH}”は、uname -pの出
力でおきかえられます。
${MACHINE_GNU_ARCH}がPLISTのどこかにうめこまれてい
る場合も同様の事がおこなわれます。これは、GNU autoconfで作成された
configureスクリプトを持つパッケージで使われます。
“$ARCH”シンボルはuname
-mの出力によって置きかえられていま
した。しかし、もはやサポートされていませんし、削除されています。
${OPSYS}, ${LOWER_OPSYS}, ${OS_VERSION}いくつかのパッケージでは、OS名とバージョンをいくつかのパス名に埋め込みま
す。このような場合、PLISTで以下の各変数を使用してください。
${OPSYS} - “uname -s”の出力
${LOWER_OPSYS} - 共通名の小文字表記(例: “solaris”)
${OS_VERSION} - “uname -r”
デフォルトで置換される値の全一覧は、
bsd.pkg.mk を参照してください (あわせて、
PLIST_SUBST を調べてください)。
上述以外の変数を置換したい場合は、
MESSAGE_SUBST (Section 11.5, “オプションのファイル”参照) と同様に、
以下のようにして、変数とその展開方法を定義することができます。
PLIST_SUBST+= SOMEVAR="somevalue"
こうすると、PLIST
内のすべての “${SOMEVAR}”
が “somevalue” で置き換えられます。
PLIST_VARS 変数を使うと、
条件に応じて PLIST
の項目を追加することができます。
のように値を追加して、
これに対応する PLIST_VARS+=fooPLIST.foo 変数を
yes に設定します。
このように設定すると、PLIST にある
“${PLIST.foo}” が
“""” に置換されるようになります
(設定していない場合は
“"@comment "” に置換されます)。
たとえば、Makefile では以下のようにします。
PLIST_VARS+= foo
.if condition
PLIST.foo= yes
.else
こうしたうえで、PLIST では以下のようにします。
@comment $NetBSD$
bin/bar
man/man1/bar.1
${PLIST.foo}bin/foo
${PLIST.foo}man/man1/foo.1
${PLIST.foo}share/bar/foo.data
${PLIST.foo}@dirrm share/bar
もし、(bsd.own.mkに)MANZが設定されていれば、マニュアルページは圧縮形式で
インストールされます。そうでなければ展開された形式でインストールされます。
PLISTファイルでこれをサポートするために、MANZと MANCOMPRESSEDの設定の有
無に従い、“.gz”サフィックスがマニュアルページに自動的に追加、削除され
ます。このPLISTファイルに対する変更は、PLIST自身にたいしてでなく、それが
コピーされる時におこなわれます。
ひとつ以上のファイルを、バイナリーパッケージを構築するためにPLISTのソース
として使用する時は、それらのファイル名を変数PLIST_SRCに設定してください。こ
れらのファイルは、後でcat(1)によって連結されます。連結の順番は重要です。
PLIST_SRC は、標準では ${PKGDIR}/PLIST になります。
パッケージのなかには、インストールするファイルの組合せを、対象のオペレー ティングシステムによって変えるものがあります。このような差異は、以下のファ イルを使って自動的に処理することができます。
PLIST.common
PLIST.${OPSYS}
PLIST.${MACHINE_ARCH}
PLIST.${OPSYS}-${MACHINE_ARCH}
PLIST.common_end
“共有ディレクトリー”とは、複数の (かつ関連のない) パッケージがファイルをインストールするディレクトリーのことです。 以前は、共有ディレクトリーは、条件に応じた削除のために PLIST に特殊な細工をするか、 集権的な処理用パッケージを用意する必要があったので、 問題を起こすことがありました。
現在の pkgsrc では、話は単純になっています。 各パッケージは、必要に応じて、ディレクトリーを作成してファイルをインストールします。 pkg_delete は、パッケージのアンインストール後、 空のディレクトリーが残っていればすべて削除します。
パッケージの動作のために空のディレクトリーが必要な場合は、 インストール時に通常と同じようにディレクトリーを作成するようにし、 さらに PLIST に以下のような項目を追加します。
@pkgdir path/to/empty/directory