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