--- title: 第7章 MASTERDIR prev: books/porters-handbook/special next: books/porters-handbook/shared showBookMenu: true weight: 7 params: path: "/books/porters-handbook/porting-masterdir/" --- [[porting-masterdir]] = `MASTERDIR` :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 7 :partnums: :source-highlighter: rouge :experimental: :images-path: books/porters-handbook/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] その port の変数 (たとえば解像度とか紙のサイズなど) を 変えたりした、少しだけ違うバージョンを作成する必要があるときには、 ユーザが分りやすいように package ごとに別々のサブディレクトリを作成し、 できるだけ port 間でファイルを共有するようにしてください。 ほとんどの場合、うまく変数を使えば、一つを除くすべてのディレクトリには とても短い [.filename]#Makefile# を置くだけで済みます。 その短い [.filename]#Makefile# では、 `MASTERDIR` を使って、 残りのファイルがあるディレクトリを指定できます。 また、<> の 一部に変数に使って、package が別々の名前を持つようにしてください。 具体的な例を示すのが一番わかりやすいでしょう。 これは [.filename]#japanese/xdvi300/Makefile# の一部です。 [.programlisting] .... 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 .... package:japanese/xdvi300[] には [.filename]#Makefile# の他に通常のパッチや、 package ファイル等が置かれています。 このディレクトリで `make` を実行すると、 デフォルトの解像度 (300) を使って、 普通に port のビルドを行ないます。 他の解像度に関していうと、 [.filename]#xdvi118/Makefile# に 必要なのは_これだけ_です: [.programlisting] .... RESOLUTION= 118 MASTERDIR= ${.CURDIR}/../xdvi300 .include "${MASTERDIR}/Makefile" .... ([.filename]#xdvi240/Makefile# や [.filename]#xdvi400/Makefile# も同様のものになります)。 [.filename]#bsd.port.mk# は、 `MASTERDIR` の定義から `FILESDIR` や `SCRIPTDIR` 等の 通常のサブディレクトリが [.filename]#xdvi300# 以下に存在することを理解します。 `RESOLUTION=118` の行が、 [.filename]#xdvi300/Makefile# の `RESOLUTION=300` の行を上書きし、 port は解像度を 118 として作成されます。