その port の変数 (たとえば解像度とか紙のサイズなど) を 変えたりした、少しだけ違うバージョンを作成する必要があるときには、 ユーザが分りやすいように package ごとに別々のサブディレクトリを作成し、 できるだけ port 間でファイルを共有するようにしてください。 ほとんどの場合、うまく変数を使えば、一つを除くすべてのディレクトリには とても短い
Makefile
を置くだけで済みます。 その短い
Makefile
では、
MASTERDIR
を使って、 残りのファイルがあるディレクトリを指定できます。 また、
PKGNAMESUFFIX
の 一部に変数に使って、package が別々の名前を持つようにしてください。
具体的な例を示すのが一番わかりやすいでしょう。 これは
japanese/xdvi300/Makefile
の一部です。
PORTNAME= xdvi
PORTVERSION= 17
PKGNAMEPREFIX= ja-
PKGNAMESUFFIX= ${RESOLUTION}
:
# default
RESOLUTION?= 300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
@${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
@${FALSE}
.endif
japanese/xdvi300
には
Makefile
の他に通常のパッチや、 package ファイル等が置かれています。 このディレクトリで
make
を実行すると、 デフォルトの解像度 (300) を使って、 普通に port のビルドを行ないます。
他の解像度に関していうと、
xdvi118/Makefile
に 必要なのは_これだけ_です:
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include "${MASTERDIR}/Makefile"
(
xdvi240/Makefile
や
xdvi400/Makefile
も同様のものになります)。
bsd.port.mk
は、
MASTERDIR
の定義から
FILESDIR
や
SCRIPTDIR
等の 通常のサブディレクトリが
xdvi300
以下に存在することを理解します。
RESOLUTION=118
の行が、
xdvi300/Makefile
の
RESOLUTION=300
の行を上書きし、 port は解像度を 118 として作成されます。