第 7章MASTERDIR

その 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/Makefilexdvi400/Makefile も同様のものになります)。 bsd.port.mk は、 MASTERDIR の定義から FILESDIRSCRIPTDIR 等の 通常のサブディレクトリが xdvi300 以下に存在することを理解します。 RESOLUTION=118 の行が、 xdvi300/MakefileRESOLUTION=300 の行を上書きし、 port は解像度を 118 として作成されます。

FreeBSD ports システムに関する質問は、(英語で) <ports@FreeBSD.org> へ、
この文書の原文に関するお問い合わせは、(英語で) <doc@FreeBSD.org> までお願いします。