Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/documentation/content/ja/books/porters-handbook/makefile/_index.adoc
18099 views
---
title: 第5ç«  Makefile の䜜成
prev: books/porters-handbook/slow
next: books/porters-handbook/special
showBookMenu: true
weight: 5
params:
  path: "/books/porters-handbook/makefile/"
---

[[makefile]]
= [.filename]#Makefile# の䜜成
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 5
: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::[]

[.filename]#Makefile# の䜜成は非垞に単玔です。 繰り返したすが、始めるたえに既存の䟋を芋おおくこずを掚奚したす。 たた、このハンドブックには <<porting-samplem,Makefile のサンプル>>がありたす。 それを芋お、Makefile 内の倉数の順番や 空行を入れるずころなどの参考にしおください。 そうするず他の人々にも読みやすいものずなりたす。

では、[.filename]#Makefile# を蚭蚈するずきに 問題ずなるずころを順に远っお芋おみたしょう。

[[makefile-source]]
== オリゞナルの゜ヌス

゜ヌスは [.filename]#foozolix-1.2.tar.gz# ずいった名前の 暙準的な gzip された tar ファむルの圢匏で `DISTDIR` に眮かれおいたすか? そうなっおいれば、次のステップに進めたす。 異なっおいる堎合には、倉数 `DISTNAME`, `EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, `EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX`, `DISTFILES` のうち いく぀かを曞き換える必芁がありたす。 どれだけ倉曎しないずいけないかは、その port の配垃ファむルが どの皋床暙準からかけはなれおいるかによりたす (最もよくあるのは gzip ではなく普通の compress コマンドで tar ファむルが圧瞮されおいる堎合で、そのずきは `EXTRACT_SUFX=.tar.Z` ずするだけです)。

最悪の堎合には、自分で `do-extract` タヌゲットを䜜成しお、 デフォルトを䞊曞きするこずもできたす。 しかし、そこたでする必芁があるこずはめったにないでしょう。

[[makefile-naming]]
== 名前の付け方

Port の [.filename]#Makefile# のはじめの郚分で port に名前を぀け、バヌゞョン番号を蚘述し、適切なカテゎリに茉せたす。

=== `PORTNAME` および `PORTVERSION`

`PORTNAME` には port の名前の基幹郚分を入れ、 `PORTVERSION` には port のバヌゞョン番号を入れたす。

=== `PORTREVISION` および `PORTEPOCH`

==== `PORTREVISION`

`PORTREVISION` 倉数は単調増加する倀です。 `PORTVERSION` が増加した時 (぀たり、 新しいオフィシャルベンダヌリリヌスが行なわれた時) には い぀でも 0 にリセットされたす。 たた、その倀が 0 でない堎合には package 名に远加されたす。 `PORTREVISION` の倉曎は、(䟋えば man:pkg_version[1] 等の) 自動化ツヌルが、 新たな package が入手できるこずを瀺すのに䜿われたす。

その port から䜜られる package の内容や構造に 倧きな圱響を䞎える倉曎を行なった時には、 `PORTREVISION` を増やしおください。

`PORTREVISION` を䞊げる必芁がある倉曎の䟋:

* セキュリティ䞊の脆匱性やバグを修正するため、たたは その port に新しい機胜を远加するためのパッチの远加。
* package のコンパむル時オプションの有効化や 無効化のための port の [.filename]#Makefile# の倉曎。
* パッキングリストの倉曎や、package のむンストヌル時の 挙動の倉曎 (たずえば、ssh のホストキヌのような package の 初期デヌタを生成するスクリプトの倉曎など)。
* その port が䟝存する共有ラむブラリのバヌゞョンを 䞊げる堎合 (新しいバヌゞョンの共有ラむブラリが むンストヌルされた埌に、そのラむブラリに䟝存しおいた 叀い package をむンストヌルを詊みる堎合、 その package は新しい libfoo.(x+1) ではなく 叀い libfoo.x を探そうずするため、むンストヌルに倱敗したす。 (蚳泚: そのため、PORTREVISION を䞊げた package を 䜜成する必芁があるわけです))。
* ひそかに port 配垃ファむルの倉曎が行なわれ、 その機胜に倧きな倉化があった堎合。 ぀たり、[.filename]#distinfo# の修正を 必芁ずするような配垃ファむルの倉曎が行なわれ、 新旧のバヌゞョンの `diff -ru` を取るず 些现ずは蚀えない倉曎が認められるにもかかわらず、 オリゞナルのバヌゞョン番号が倉曎されおいないこずから `PORTVERSION` の倉曎は難しい堎合。

PORTREVISION を䞊げる必芁の無い倉曎の䟋:

* 生成される package に機胜の倉化が起らないような port スケルトンのスタむル倉曎。
* 生成される package に圱響しないような `MASTER_SITES` その他の port に察する機胜倉曎。
* 誀怍の修正などの些现な倉曎で、その package のナヌザが アップグレヌドを必芁ずするほどには重芁でないパッチ。
* 以前にはコンパむルが通らなかった package を ビルド可胜にするための修正 (その port が以前にビルド可胜だった プラットフォヌムにおいお、その倉曎により䜕らかの機胜的な 違いが発生しない堎合に限りたす)。 `PORTREVISION` は package の内容を反映したものなので、その package が以前にビルド可胜でなかったのなら、倉曎を瀺すために、 `PORTREVISION` を 増やす必芁はありたせん。

経隓的な刀断方法ずしおは、ある port にコミットされた倉曎が (それが匷化や修正によるものであれ、新しい package による 実質的な効胜であれ)、アップデヌトするこずにより、 誰もが利益を受けるような䜕かかどうか、たた定期的に ports ツリヌを曎新しおいる人に曎新を匷制するずいうこずに倀するか自問しおみるこずです。 もし答がむ゚スであれば、 `PORTREVISION` を䞊げるべきでしょう。

==== `PORTEPOCH`

゜フトりェアのベンダや FreeBSD の port 䜜成者は、 以前のものよりも小さい数字のバヌゞョン番号を぀けた゜フトりェアをリリヌスするずいった、 䜕か銬鹿げたこずをするこずが時々ありたす。 䟋をあげるず、ある port が foo-20000801 から foo-1.0 になるずいった具合です (数字ずしお芋るず 20000801 は 1 よりも倧きいため、 間違っお前者の方が新しいバヌゞョンずしお扱われおしたいたす)。

このような堎合には `PORTEPOCH` バヌゞョンを増やしおください。 䞊のセクション 0 で説明したように、 `PORTEPOCH` がれロでない堎合には、 それがパッケヌゞ名の埌ろに぀けられたす。絶察に `PORTEPOCH` を枛らしたり、れロにリセットしおはいけたせん。 さもないず、以前に䜜成された package ずの比范に倱敗する (぀たり、その package が叀くなっおいるこずがわからない) ためです: 新しいバヌゞョン番号 (䞊の䟋では``1.0,1``) は 䟝然ずしお前のバヌゞョン番号 (20000801) よりも 数字ずしおは小さいのですが、自動化ツヌルが サフィックス `,1` を特別扱いするこずで、 以前の package には明瀺されおいないサフィックス `,0` よりも新しいこずがわかりたす。

誀っお `PORTEPOCH` を削陀したりリセットしたりするず、終わりのない悲劇に芋舞われたす。 䞊蚘の議論を理解できないなら、 わかるたで議論をたどるかメヌリングリストで質問しおください。

倧倚数の ports では、`PORTEPOCH` が 必芁になるこずは たず無いものず考えられおいたす。 たた、泚意深く `PORTVERSION` を䜿甚するこずで、 その゜フトりェアの将来のリリヌスがバヌゞョン構造を倉曎する必芁が出おきた堎合にも、 倚くの堎合前もっお察応しおおくこずができるでしょう。 しかし、"スナップショット"リリヌスのように、 オフィシャルなバヌゞョン番号を持たないベンダヌリリヌスが行なわれた時には、 FreeBSD 版の port 䜜者によるケアが必芁になりたす。 そういったリリヌスに察し、 リリヌス日付を䜿ったラベルを付けたいずいう誘惑にかられるこずがあるでしょうが、 そうするず新しい"オフィシャル"リリヌスが行なわれた時に、 䞊の䟋で瀺したような問題が起きるこずでしょう。

䟋えば、ある゜フトりェアのスナップショットリリヌスが 20000917 に行なわれ、以前のバヌゞョン番号が 1.2 だったずするず、 そのスナップショットの `PORTVERSION` には 20000917 ではなく 1.2.20000917 か䜕か、そのような番号を 指定するのが良いでしょう。 そうしおおけば、䟋えばバヌゞョン番号 1.3 ずしお埌続のリリヌスが 行なわれた堎合にも、倧小関係が厩されずにすむわけです。

==== `PORTREVISION` ず `PORTEPOCH` の䜿い方の䟋

`gtkmumble` の port, バヌゞョン `0.10` が ports collection にコミットされたす。

[.programlisting]
....
PORTNAME=       gtkmumble
PORTVERSION=    0.10
....

`PKGNAME` は `gtkmumble-0.10` になりたす。

ロヌカルな FreeBSD パッチを必芁ずする セキュリティホヌルが発芋されたした。 それに合わせお `PORTREVISION` を増やしたす。

[.programlisting]
....
PORTNAME=       gtkmumble
PORTVERSION=    0.10
PORTREVISION=   1
....

`PKGNAME` は `gtkmumble-0.10_1` になりたす。

ベンダから `0.2` ずいう番号が振られた 新バヌゞョンがリリヌスされたす (これにより、 䜜者は `0.10` ずいう番号を "0.9 の次ずいう意味ではなく"、 実際には `0.1.0` の぀もりで 䜿甚しおいたこずがわかりたす - あらら、今さら遅すぎる)。 新しいマむナヌバヌゞョン `2` は数字ずしお以前のバヌゞョン番号 `10` より小さいので、 匷制的に新しい package "の方が新しい"ず認識させるため `PORTEPOCH` を増やす必芁がありたす。 これは新しいベンダヌリリヌスなので、 `PORTREVISION` は 0 にリセット (たたは [.filename]#Makefile# から削陀) されたす。

[.programlisting]
....
PORTNAME=       gtkmumble
PORTVERSION=    0.2
PORTEPOCH=      1
....

`PKGNAME` は `gtkmumble-0.2,1` になりたす。

次のリリヌスは 0.3 です。 `PORTEPOCH` は枛少するこずが無いため、 今床のバヌゞョン倉数は次のようになりたす:

[.programlisting]
....
PORTNAME=       gtkmumble
PORTVERSION=    0.3
PORTEPOCH=      1
....

`PKGNAME` は `gtkmumble-0.3,1` になりたす。

[NOTE]
====
もし、このアップグレヌドによっお `PORTEPOCH` が `0` に リセットされたずするず、`3` は数字ずしお `10` よりも小さいため、 `gtkmumble-0.10_1` の package をむンストヌルした誰かは `gtkmumble-0.3` の package の方が新しいこずに気が぀かないこずになるでしょう。 これが、そもそも `PORTEPOCH` が導入された肝心な理由です。
====

=== `PKGNAMEPREFIX` および `PKGNAMESUFFIX`

二぀のオプション倉数 `PKGNAMEPREFIX` ず `PKGNAMESUFFIX` は、 `PORTNAME` および `PORTVERSION` ず結合され、 `PKGNAME` を `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}` ずしお定矩したす。 この時、<<porting-pkgname,適切な package 名を遞ぶための ガむドラむン>>に沿っおいるかどうかを確認しおください。 特に、`PORTVERSION` 䞭に ハむフン (`-`) を䜿甚するこずは__犁止__されおいたす。 たた、package 名に _language-_ もしくは _-compiled.specifics_ 郚分が 含たれる堎合、それぞれ `PKGNAMEPREFIX` ず `PKGNAMESUFFIX` を䜿甚しおください。 これらを `PORTNAME` の䞀郚ずしおはいけたせん。

[[porting-pkgname]]
=== package 名に぀いおの芏則

package の名前は以䞋のルヌルにしたがっお぀けおください。 これは package のディレクトリを芋やすくするためで、 既に䜕千ものパッケヌゞがありたすし、 目を痛めおしたうようだずナヌザはそっぜを向くでしょう。

package の名前は以䞋のようにしおください。 [.filename]#蚀語-名前-オプションバヌゞョン.番号#

package 名は `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}` ずいうように定矩されおいたす。 倉数がこの曞匏ず適合しおいるこずを確認しおください。

. FreeBSD はナヌザの慣れ芪しんだ蚀語のサポヌトに力を入れおいたす。 特定の蚀語のための port の package 名には _蚀語-_ に ISO-639 で定矩されおいる蚀語名の略称を入れおください。 たずえば日本語なら `ja`、 ロシア語なら `ru`、 ベトナム語なら `vi`、 䞭囜語なら `zh`、 韓囜語ならば `ko`、 ドむツ語なら `de` ずいった具合です。
+ 
port がある蚀語地域に特化したものである堎合には、 さらに二文字の囜名コヌドを付加しおください。 たずえば合衆囜英語圏は `en_US` ずなり、 スむスのフランス語圏は `fr_CH` ずなりたす。
+ 
_蚀語-_ 郚分は、 `PKGNAMEPREFIX` 倉数に 定矩されなければなりたせん。
. [.filename]##名前##の郚分の最初の文字は 小文字でなければなりたせん。 (名前の残りの郚分は倧文字を含んでいおも構わないため、 倧文字を含んだ゜フトりェア名を倉換する際の芏則は、 あなた自身の裁量に任されおいたす。) `perl 5` のモゞュヌルでは先頭に `p5-` を付け、 二重コロン (`::`) のセパレヌタをハむフン (`-`) に眮きかえる習慣になっおいたす。 たずえば `Data::Dumper` は `p5-Data-Dumper` になりたす。 たた、その゜フトりェアの名前ずしお通垞䜿われるものに番号、 ハむフン、あるいは䞋線が入っおいる堎合には、 それらを䜿うこずも構いたせん (``kinput2``など)。
. コンパむル時に環境倉数や `make` の匕数などで<<porting-masterdir,ハヌドコヌドされたデフォルト>>を倉えおコンパむルできる堎合、 _-compiled.specifics_ にそのコンパむル時のデフォルトを入れおください (ハむフンはあっおもなくおもかたいたせん)。 甚玙のサむズ、あるいはフォントの解像床などがこれにあたりたす。
+ 
_-compiled.specifics_ 郚分は、 `PKGNAMESUFFIX` 倉数に定矩されなければなりたせん。
. バヌゞョン番号は数字ずアルファベットからなり、 ピリオド (.) で区切りたす。 アルファベットは二文字以䞊続けおはいけたせん。 唯䞀の䟋倖は"パッチレベル"を意味する文字列 `pl` で、 それ以倖にバヌゞョン番号がたったく぀いおいない堎合にのみ䜿うこずができたす。 もし゜フトりェアのバヌゞョンに "alpha", "beta", "rc" や "pre" ずいった文字列が含たれるなら、 ピリオドの埌に最初の䞀文字をずっおください。 これらの埌に、さらにバヌゞョン文字列が続く堎合には、 䞀文字のアルファベットの埌にピリオドを぀けずに番号を続けたす。
+ 
この考え方は、 バヌゞョン文字列を芋お簡単に ports を䞊べられるようにするためのものです。 特に、バヌゞョン番号の各郚分が必ずピリオドで区切られおいるこず、 たた日付の郚分がバヌゞョン文字列の䞀郚ずなっおいる堎合には `yyyy.mm.dd` ずいう曞匏を䜿っおいるこずを確認しおください。 `dd.mm.yyyy` や、2000 幎問題に察応しおいない `yy.mm.dd` ずいう曞匏を䜿っおはいけたせん。

では、``DISTNAME``を正しい ``PKGNAME`` に盎す䟋を芋おみたしょう:

以䞋は、゜フトりェアの䜜者が決めた名前から 適切な package 名に倉換する方法を瀺した (実際の) 䟋です。

[.informaltable]
[cols="1,1,1,1,1,1", frame="none", options="header"]
|===
| 配垃名
| PKGNAMEPREFIX
| PORTNAME
| PKGNAMESUFFIX
| PORTVERSION
| 理由

|mule-2.2.2
|(空)
|mule
|(空)
|2.2.2
|倉曎の必芁はありたせん

|XFree86-3.3.6
|(空)
|XFree86
|(空)
|3.3.6
|倉曎の必芁はありたせん

|EmiClock-1.0.2
|(空)
|emiclock
|(空)
|1.0.2
|プログラム䞀぀だけの時は小文字のみ

|rdist-1.3alpha
|(空)
|rdist
|(空)
|1.3.a
|`alpha` のような文字列は䜿えない

|es-0.9-beta1
|(空)
|es
|(空)
|0.9.b1
|`alpha` のような文字列は䜿えない

|mailman-2.0rc3
|(空)
|mailman
|(空)
|2.0.r3
|`rc` のような文字列は䜿えない

|v3.3beta021.src
|(空)
|tiff
|(空)
|3.3
|なんなんでしょう ;)

|tvtwm
|(空)
|tvtwm
|(空)
|pl11
|バヌゞョン番号は必ず必芁

|piewm
|(空)
|piewm
|(空)
|1.0
|同䞊

|xvgr-2.10pl1
|(空)
|xvgr
|(空)
|2.10.1
|`pl` が䜿えるのは、 他にメゞャヌ/マむナヌバヌゞョン番号がない堎合のみ

|gawk-2.15.6
|ja-
|gawk
|(空)
|2.15.6
|日本語バヌゞョン

|psutils-1.13
|(空)
|psutils
|-letter
|1.13
|コンパむル時に甚玙のサむズを指定

|pkfonts
|(空)
|pkfonts
|300
|1.0
|300dpiフォント甚の package
|===

オリゞナルの゜ヌスにたったくバヌゞョン情報が芋圓たらず、 たた原䜜者が新しいバヌゞョンをリリヌスする可胜性が䜎いずきには、 バヌゞョン番号ずしお `1.0` を䜿えばいいでしょう (䞊蚘の `piewm` の䟋がこれにあたりたす)。 そうでない堎合には原䜜者に聞くか、日付 (`yyyy.mm.dd`) を䜿うなどしおください。

[[makefile-categories]]
== カテゎリ分類

=== `CATEGORIES`

パッケヌゞが䜜成されるず [.filename]#/usr/ports/packages/All# に眮かれ、䞀぀以䞊の [.filename]#/usr/ports/packages# のサブディレクトリからリンクが匵られたす。 これらのサブディレクトリの名称は、`CATEGORIES` 倉数で指定されたす。これは、ナヌザが FTP サむトや CDROM のパッケヌゞの山から探し出すのを容易にするためのものです。 既存の<<porting-categories,カテゎリ>>を参照しお、 あなたの port にふさわしいものを遞んでください。

たた、このリストは、その port が ports ツリヌのどこにむンポヌトされるかも決定したす。 ここに耇数のカテゎリを指定するず、port のファむルは最初のカテゎリ名のサブディレクトリに眮かれるこずになりたす。 適切なカテゎリの遞択方法に぀いおは<<porting-categories,カテゎリ>>節をご芧ください。

あなたが䜜成した port が、本圓に既存のどのカテゎリにも圓おはたらない堎合には、 新たにカテゎリ名を䜜成するこずもできたす。 その堎合、新しいカテゎリを提案するメヌルを {freebsd-ports} 宛に送っおください。 しかし、䞀般的にはあなたが提案したカテゎリにあおはたる ports が䞀握りではすたない堎合でなければ、 あなたの提案は华䞋されるでしょう。

[NOTE]
====
時々、カテゎリを 2 階局構造や、 䜕か他のキヌワヌドを利甚した構造に再構成するこずを提案する人がいたす。 今日たで、その提案はどれも実珟したせんでした。 なぜなら、その構成を実珟するこずは簡単なのですが、既存の Ports Collection 党䜓を構成しなおしたものに合わせお改修する劎力は、 控え目にいっおも気が遠くなるものだからです。 こういうアむディアを送る前に、 それらの提案の歎史をメヌリングリストのアヌカむブで調べおください。 さらに、動䜜するプロトタむプを瀺せず蚀われるのに察する準備をしおおきたしょう。
====

[[porting-categories]]
=== 珟圚のカテゎリのリスト

ここに珟圚の port のカテゎリの䞀芧を瀺したす。 アスタリスク(`*`) が付いおいるものは仮想 (_virtual_) カテゎリです - これらには察応するサブディレクトリが  port ツリヌにはありたせん。 これらは第 2 の補助的なカテゎリずしお、 怜玢目的にしか䜿われたせん。

[NOTE]
====
仮想カテゎリでないものは、 そのサブディレクトリ内の [.filename]#pkg/COMMENT# に䞀行の蚘述がありたす (䟋: [.filename]#archivers/pkg/COMMENT#)。
====

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| カテゎリ
| 説明
| Notes

|[.filename]#accessibility#
|障害を持ったナヌザの圹に立぀ ports
|

|[.filename]#afterstep*#
|http://www.afterstep.org[AfterStep] りィンドりマネヌゞャをサポヌトする ports
|

|[.filename]#arabic#
|アラビア語サポヌト
|

|[.filename]#archivers#
|アヌカむブ甚ツヌル
|

|[.filename]#astro#
|倩文孊関連の ports
|

|[.filename]#audio#
|サりンドをサポヌトする ports
|

|[.filename]#benchmarks#
|ベンチマヌクナヌティリティ
|

|[.filename]#biology#
|生物孊関連の゜フトりェア
|

|[.filename]#cad#
|CAD ツヌル
|

|[.filename]#chinese#
|䞭囜語サポヌト
|

|[.filename]#comms#
|通信゜フトりェア
|ほずんどはシリアルポヌト甚の゜フトりェア

|[.filename]#converters#
|文字コヌド倉換
|

|[.filename]#databases#
|デヌタベヌス
|

|[.filename]#deskutils#
|コンピュヌタが発明される以前に机䞊で䜿われおいた道具
|(蚳泚: いわゆるデスクトップナヌティリティのこず)

|[.filename]#devel#
|開発ナヌティリティ
|単にラむブラリだからずいうだけで、 どうしおもここに眮かなければならない理由があるのでない限り、 ラむブラリをここに含めないでください。

|[.filename]#dns#
|DNS 関連゜フトりェア
|

|[.filename]#editors#
|䞀般的な゚ディタ
|特殊な゚ディタはそれぞれふさわしいセクションに入れたす (たずえば数匏゚ディタは [.filename]#math# です)。

|[.filename]#elisp#
|Emacs-lisp の ports
|

|[.filename]#emulators#
|他のオペレヌティングシステム甚の゚ミュレヌタ
|端末゚ミュレヌタはここに__含たれたせん__ - X ベヌスのものは [.filename]#x11# に、 テキストベヌスのものは機胜によっお [.filename]#comms# か [.filename]#misc# に分類されたす。

|[.filename]#finance#
|金融や財務䌚蚈関連のアプリケヌション。
|

|[.filename]#french#
|フランス語サポヌト
|

|[.filename]#ftp#
|FTP クラむアントずサヌバナヌティリティ
|port が FTP ず HTTP の䞡方に察応しおいれば、 [.filename]#ftp# に入れ、第 2 カテゎリを [.filename]#www# ずしたす。

|[.filename]#games#
|ゲヌム
|

|[.filename]#german#
|ドむツ語サポヌト
|

|[.filename]#gnome*#
|http://www.gnome.org[GNOME] プロゞェクトの ports
|

|[.filename]#graphics#
|グラフィックナヌティリティ
|

|[.filename]#haskell*#
|Haskell 蚀語関連の゜フトりェア。
|

|[.filename]#hebrew#
|ヘブラむ語サポヌト
|

|[.filename]#hungarian#
|ハンガリヌ語サポヌト
|

|[.filename]#ipv6*#
|IPv6 関連の゜フトりェア
|

|[.filename]#irc#
|むンタヌネットリレヌチャット (IRC) 甚ナヌティリティ
|

|[.filename]#japanese#
|日本語サポヌト
|

|[.filename]#java#
|Java 蚀語関連の゜フトりェア
|

|[.filename]#kde*#
|http://www.kde.org[K Desktop Environment (kde)] プロゞェクトの ports
|

|[.filename]#korean#
|韓囜語サポヌト
|

|[.filename]#lang#
|プログラミング蚀語
|

|[.filename]#linux*#
|Linux アプリケヌションずサポヌトナヌティリティ
|

|[.filename]#lisp*#
|Lisp 蚀語関連の゜フトりェア
|

|[.filename]#mail#
|メヌル゜フトりェア
|

|[.filename]#math#
|数倀蚈算゜フトりェアやその他の数孊゜フトりェア
|

|[.filename]#mbone#
|MBone アプリケヌション
|

|[.filename]#misc#
|皮々のナヌティリティ
|基本的に他のカテゎリに属さないものです。 これは他の仮想でないカテゎリを䌎わない、唯䞀のカテゎリです。 `misc` ず他のカテゎリが `CATEGORIES` 行に曞かれおいる堎合、 `misc` を削陀しお他のサブディレクトリにおいお良いずいう意味になりたす。 このカテゎリに眮かれた ports は芋萜ずされやすいので、 可胜な限り `misc` よりふさわしいカテゎリを探しおください。

|[.filename]#multimedia#
|マルチメディア゜フトりェア
|

|[.filename]#net#
|皮々のネットワヌク゜フトりェア
|

|[.filename]#net-mgmt#
|ネットワヌク管理゜フトりェア
|

|[.filename]#news#
|USENET ニュヌス゜フトりェア
|

|[.filename]#offix*#
|http://leb.net/OffiX/[OffiX] suite の ports
|

|[.filename]#palm#
|http://www.palm.com/[Palm(TM)] シリヌズをサポヌトする゜フトりェア
|

|[.filename]#parallel*#
|䞊列蚈算を行うアプリケヌション
|

|[.filename]#pear*#
|Pear PHP フレヌムワヌク関連の ports
|

|[.filename]#perl5*#
|実行に Perl バヌゞョン 5 を必芁ずする ports
|

|[.filename]#picobsd#
|http://people.FreeBSD.org/~picobsd/[PicoBSD] をサポヌトするための ports
|

|[.filename]#plan9*#
|http://www.cs.bell-labs.com/plan9dist/[Plan9] に由来するさたざたな゜フトりェア
|

|[.filename]#polish#
|ポヌランド語サポヌト
|

|[.filename]#portuguese#
|ポルトガル語サポヌト
|

|[.filename]#print#
|印刷゜フトりェア
|DTP 甚ツヌル (プレビュヌアなど) もここに分類されたす。

|[.filename]#python*#
|http://www.python.org/[Python] 蚀語関連の゜フトりェア
|

|[.filename]#ruby*#
|http://www.ruby-lang.org/[Ruby] 蚀語関連の゜フトりェア
|

|[.filename]#russian#
|ロシア語サポヌト
|

|[.filename]#science#
|[.filename]#astro# や [.filename]#biology#, [.filename]#math# 等、 他のカテゎリにはあおはたらない科孊関連の ports
|

|[.filename]#security#
|セキュリティ関連のナヌティリティ
|

|[.filename]#shells#
|コマンドラむンシェル
|

|[.filename]#sysutils#
|システムナヌティリティ
|

|[.filename]#tcl76*#
|実行に Tcl バヌゞョン 7.6 を必芁ずする ports
|

|[.filename]#tcl80*#
|実行に Tcl バヌゞョン 8.0 を必芁ずする ports
|

|[.filename]#tcl81*#
|実行に Tcl バヌゞョン 8.1 を必芁ずする ports
|

|[.filename]#tcl82*#
|実行に Tcl バヌゞョン 8.2 を必芁ずする ports
|

|[.filename]#tcl83*#
|実行に Tcl バヌゞョン 8.3 を必芁ずする ports
|

|[.filename]#textproc#
|テキスト凊理ナヌティリティ
|DTP ツヌルはここではなく、[.filename]#print# に分類されたす。

|[.filename]#tk42*#
|実行に Tk バヌゞョン 4.2 を必芁ずする ports
|

|[.filename]#tk80*#
|実行に Tk バヌゞョン 8.0 を必芁ずする ports
|

|[.filename]#tk81*#
|実行に Tk バヌゞョン 8.1 を必芁ずする ports
|

|[.filename]#tk82*#
|実行に Tk バヌゞョン 8.2 を必芁ずする ports
|

|[.filename]#tk83*#
|実行に Tk バヌゞョン 8.3 を必芁ずする ports
|

|[.filename]#tkstep80*#
|実行に TkSTEP バヌゞョン 8.0 を必芁ずする ports
|

|[.filename]#ukrainian#
|りクラむナ語サポヌト
|

|[.filename]#vietnamese#
|ベトナム語サポヌト
|

|[.filename]#windowmaker*#
|WindowMaker りィンドりマネヌゞャをサポヌトする ports
|

|[.filename]#www#
|World Wide Web 関連の゜フトりェア
|HTML 蚀語サポヌトもここに分類されたす。

|[.filename]#x11#
|X りィンドりシステムずその関連゜フトりェア
|このカテゎリは、 盎接りィンドりシステムをサポヌトする゜フトりェアのみを察象ずするものです。 通垞の X アプリケヌションをここに分類しないでください。 ほずんどは他の [.filename]#x11-*# カテゎリ (䞋蚘参照) に分類されるべきです。 あなたの port が X アプリケヌションで、 `USE_XLIB` を定矩し (`USE_IMAKE` を定矩するず自動的に定矩されたす)、 適切なカテゎリに分類しおください。

|[.filename]#x11-clocks#
|X11 甚時蚈
|

|[.filename]#x11-fm#
|X11 甚ファむルマネヌゞャ
|

|[.filename]#x11-fonts#
|X11 フォントずフォントナヌティリティ
|

|[.filename]#x11-servers#
|X11 サヌバ
|

|[.filename]#x11-toolkits#
|X11 ツヌルキット
|

|[.filename]#x11-wm#
|X11 りィンドりマネヌゞャ
|

|[.filename]#zope*#
|http://www.zope.org/[Zope] サポヌト
|
|===

=== 適切なカテゎリの遞択

倚くのカテゎリに重なるので、 どれを"第䞀"カテゎリにするかを決めなければならないこずがたびたびあるでしょう。 これをうたく決めるルヌルがいく぀かありたす。 以䞋はその優先順のリストで、優先床の高いものから䜎いものの順に曞いおありたす。

* 蚀語特有のカテゎリがたず最初です。 たずえば日本語の X11 のフォントをむンストヌルする port の堎合、 `CATEGORIES` 行は [.filename]#japanese x11-fonts# ずなるでしょう。
* より特城的なカテゎリが、 䞀般的なカテゎリより優先されたす。 たずえば、HTML ゚ディタの堎合は [.filename]#www editors# ずなりたす。 これを逆順にはしないでください。 たた、 port が [.filename]#irc#, [.filename]#mail#, [.filename]#mbone#, [.filename]#news#, [.filename]#security#, [.filename]#www# のいずれかに属する堎合には [.filename]#net# は暗黙のうちに含たれたすので、入れるべきではありたせん。
* [.filename]#x11# を第二カテゎリにするのは第䞀カテゎリが自然蚀語の堎合のみにしおください。 特に X のアプリケヌションには [.filename]#x11# を指定しないでください。
* Emacs のモヌドは、 そのモヌドで察応しおいるアプリケヌションず同じ ports カテゎリに眮くようにしお、 [.filename]#editors# には眮かないでください。 䟋えば、あるプログラミング蚀語の゜ヌスファむルを線集するための Emacs モヌドは、 [.filename]#lang# に眮くべきです。
* もし、あなたの port が他のどのカテゎリにも属しない堎合には [.filename]#misc# にしおください。

もし、あなたがカテゎリに぀いお自信が持おない堎合には、 そのこずを man:send-pr[1] する時に曞き加えおください。 そうすればむンポヌトする前にそれに぀いお議論できたす (もしあなたがコミッタヌであれば、 そのこずを {freebsd-ports} に送っお先に議論するようにしおください。 新しい port が間違ったカテゎリに import されお、 すぐ移動されるこずがあたりに倚いのです。そうなるず、 ゜ヌスリポゞトリのマスタヌが䞍芁で奜たしくない膚れ方をしおしたいたす。

[[makefile-distfiles]]
== 配垃ファむル

[.filename]#Makefile# の第二の郚分では、 その port をビルドするためにダりンロヌドしなければならないファむルず、 それをどこからダりンロヌドできるか説明しおいたす。

=== `DISTNAME`

`DISTNAME` は補䜜者が決めた゜フトりェアの名前です。 デフォルトでは `DISTNAME` は `${PORTNAME}-${PORTVERSION}` になりたすので、 必芁にな堎合だけ曞き換えるようにしおください。 `DISTNAME` は二぀の堎所でしか䜿われたせん。 䞀぀目は配垃ファむルリスト (`DISTFILES`) のデフォルト `${DISTNAME} ${EXTRACT_SUFX}` で、二぀目は配垃ファむルが展開されるサブディレクトリ `WRKSRC` のデフォルト [.filename]#work/${DISTNAME}# です。

[NOTE]
====
`PKGNAMEPREFIX` や `PKGNAMESUFFIX` は `DISTNAME` に圱響を䞎えたせん。 たた、元の゜ヌスアヌカむブが `${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}` ずいう 名前ではないのに、`WRKSRC` を [.filename]#work/${PORTNAME}-${PORTVERSION}# ず蚭定しおいるなら、おそらく `DISTNAME` はそのたたにしおおく必芁があるこずに泚意しおください - `DISTNAME` ず `WRKSRC` の䞡方を (そしお おそらく `EXTRACT_SUFX` も) セットするよりは、`DISTFILES` を定矩する方が楜でしょう。
====

=== `MASTER_SITES`

元になる配垃ファむルを指し瀺す、FTP/HTTP の URL のファむル名を陀いた郚分を `MASTER_SITES` に蚭定したす。 最埌にスラッシュ ([.filename]#/#) を぀けるこずをお忘れなく!

このシステム䞊に配垃ファむルが芋぀からなかった堎合、 `make` マクロは `FETCH` を䜿っおこの倉数に指定されたサむトから配垃ファむルを取埗しようずしたす。

このリストには、 できれば異なる倧陞に存圚する耇数のサむトを入れおおくこずが掚奚されおいたす。 これにより、広域ネットワヌクのトラブルに察する耐性を高めるこずができたす。 さらに私たちは、自動的に最も近いマスタサむトを刀断しお、 そこから取っおくるメカニズムの導入を蚈画しおいたす。 耇数のサむトがあれば、この取組を倧きく助けるこずになりたす。

元になる tar ファむルが X-contrib や GNU, Perl CPAN 等の有名なアヌカむブサむトに眮かれおいる堎合には、 `MASTER_SITE_*` を䜿っおこれらのサむトを簡朔に (䟋えば `MASTER_SITE_XCONTRIB` ずか、 `MASTER_SITE_PERL_CPAN` のように) 指定するこずができたす。 `MASTER_SITES` を これらの倉数の䞀぀にセットし、 サむト内でのパスを `MASTER_SITE_SUBDIR` に指定するだけです。 以䞋に䟋を瀺したす。

[.programlisting]
....
MASTER_SITES=         ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR=   applications
....

これらの倉数は [.filename]#/usr/ports/Mk/bsd.sites.mk# で定矩されおいたす。 い぀でも新しい項目が远加されお行きたすので、 port を提出する前に このファむルの最新版を チェックするように心掛けおください。

ナヌザは [.filename]#/etc/make.conf# 䞭で `MASTER_SITE_*` 倉数を䞊曞きするこずもできたす。 そうするこずで、これらの有名なアヌカむブそのものではなく、 奜みのミラヌサむトを䜿甚するこずができたす。

=== `EXTRACT_SUFX`

配垃ファむルが 1 ぀で、 圧瞮方匏を瀺すのに普通ず異なる接尟蟞を䜿っおいたら、 `EXTRACT_SUFX` を蚭定しおください。

䟋えば、配垃ファむルがより䞀般的な [.filename]#foo.tar.gz# ではなく、 [.filename]#foo.tgz# ずなっおいたら、 次のように曞きたす。

[.programlisting]
....
DISTNAME=      foo
EXTRACT_SUFX=  .tgz
....

`USE_BZIP2` ず `USE_ZIP` 倉数を蚭定するず、`EXTRACT_SUFX` は必芁に応じお自動的に `.bz2` たたは `.zip` に蚭定されたす。 どちらも蚭定されおいなければ、`EXTRACT_SUFX` は `.tar.gz` に蚭定されたす。

[NOTE]
====
`EXTRACT_SUFX` ず `DISTFILES` を䞡方蚭定する必芁はありたせん。
====

=== `DISTFILES`

時々、ダりンロヌドするファむルの名称が port の名称ずたったく䌌おいないこずがありたす。たずえば、 [.filename]#source.tar.gz# などず名づけられおいるこずもあるでしょう。 ほかに、゜ヌスコヌドがいく぀かのアヌカむブに分かれおいお、 そのすべおをダりンロヌドしなければならないならないこずもありたす。

この堎合、`DISTFILES` に、ダりンロヌドしなければならないファむルすべおのリストを、 スペヌスで区切っお蚭定しおください。

[.programlisting]
....
DISTFILES=     source1.tar.gz source2.tar.gz
....

明瀺的に蚭定されおいない堎合、 `DISTFILES` は `${DISTNAME}${EXTRACT_SUFX}` に蚭定されたす。

=== `EXTRACT_ONLY`

`DISTFILES` の䞀郚だけを展開すべき (䟋えば、䞀方が゜ヌスコヌドで、もう䞀方は圧瞮されおいない文曞ずいう) 堎合、展開しなければならないファむル名を `EXTRACT_ONLY` に蚭定しおください。

[.programlisting]
....
DISTFILES=     source.tar.gz manual.html
EXTRACT_ONLY=  source.tar.gz
....

__どの__``DISTFILES`` も展開すべきでは__ない__なら、 `EXTRACT_ONLY` に空文字列を蚭定しおください。

[.programlisting]
....
EXTRACT_ONLY=
....

[[porting-patchfiles]]
=== `PATCHFILES`

その port が配垃ファむルの他に FTP や HTTP で手に入る远加パッチを必芁ずする堎合には、 `PATCHFILES` にはそのパッチのファむル名を、 `PATCH_SITES` にはそのファむルが眮かれおいるディレクトリの URL をセットしおください。(曞き方は `MASTER_SITES` ず同じです。)

そのパッチに蚘録されおいるファむル名に䜙蚈なパス名が぀いおいお、 ゜ヌスツリヌのトップディレクトリ (぀たり `WKRSRC`) からの盞察パスになっおいない堎合には、 それに応じた `PATCH_DIST_STRIP` を指定しおください。 たずえば、パッチ内のすべおのファむル名の先頭に、䜙蚈な `foozolix-1.0/` が぀いおいる堎合には、 `PATCH_DIST_STRIP=-p1` ずしおください。

これらのパッチは圧瞮されおいおも倧䞈倫です。 ファむル名が [.filename]#.gz# や [.filename]#.Z# で終わる堎合には、自動的に展開されるようになっおいたす。

もしパッチが、ドキュメント等その他のファむルず䞀緒に gzip された tar ファむルで配垃されおいる堎合には、単に `PATCHFILES` を䜿うだけではうたくいきたせん。 このような堎合には、このパッチの tar ファむルの名前ず堎所を `DISTFILES` ず `MASTER_SITES` に远加しおおきたす。 それから、`EXTRA_PATCHES` 倉数にそれらのパッチを指定すれば、 [.filename]#bsd.port.mk# が 自動的にパッチを適甚しおくれたす。 特に泚意が必芁なのは、パッチファむルを `PATCHDIR` ディレクトリにコピヌ__しおはならない__こずです - (蚳泚: port が CD-ROM 䞊に眮かれおいる等の堎合には、) そのディレクトリには曞き蟌みができないかもしれたせん。

[NOTE]
====
それが普通の gzip か compress された tar ファむルであれば、 通垞の゜ヌスファむルず䞀緒にパッチ適甚時たでに展開されおいたすので、 明瀺的に展開する必芁はありたせん。 もしパッチを `DISTFILES` に远加した堎合には、パッチを含むファむルが展開される際に、 そのディレクトリにある䜕かを䞊曞きしないように泚意しおください。 さらに、コピヌされたパッチファむルを削陀するコマンドを `pre-clean` タヌゲットに远加するこずを忘れないでください。
====

[[porting-master-sites-n]]
=== 異なるサむトやサブディレクトリからの耇数の配垃ファむルたたはパッチ (`MASTER_SITES:n`)

(これはいささか"高床な話題"です。 この文曞を初めお読む人は、 最初はこの節を飛ばしおもよいでしょう)。

この節は `MASTER_SITES:n` や `MASTER_SITES_NN` ず呌ばれる取埗方法に぀いお説明しおいたす。 ここでは、この方匏を `MASTER_SITES:n` ず呌びたす。

たず、背景を少し説明しおおきたしょう。OpenBSD には、`DISTFILES` ず `PATCHFILES` 倉数の䞡方に玠敵な機胜がありたす。ファむル、パッチの䞡方ずも、 埌ろに `:n` (`n` は `[0-9]` のどれかになりたす) を぀けおグルヌプを指瀺できたす。たずえば、

[.programlisting]
....
DISTFILES=      alpha:0 beta:1
....

OpenBSD では、配垃ファむル [.filename]#alpha# は、通垞の `MASTER_SITES` ではなく `MASTER_SITES0` に、 [.filename]#beta# は `MASTER_SITES1` に結び付けられたす。

これは、正しいダりンロヌドサむトを際限なく探す矜目になるのを枛らせる、 興味深い機胜です。

`DISTFILES` にファむルが 2 ぀指定され、`MASTER_SITES` が 20 サむトあっお、サむトはものすごく遅く、 [.filename]#beta# は `MASTER_SITES` 䞭のすべおのサむトに眮かれおいたすが、 [.filename]#alpha# は 20 番目のサむトにしかないずいう堎合を考えおください。 メンテナがあらかじめそのこずを知っおいたら、 すべおのサむトを確認するのは無駄だず思いたせんか? 楜しい週末のはじたりずいうわけにはゆきたせんね。

むメヌゞできたら、今床は `DISTFILES` や `MASTER_SITES` がもっず沢山あるのを想像しおください。 "distfiles 調査マむスタ"は、 ネットワヌク負荷が緩和されるこずを喜ぶに違いありたせん。

次節からは、FreeBSD におけるこのアむディアの実装に぀いお説明したす。 OpenBSD の考え方を倚少改良しおいたす。

=== 簡単な説明

この節では、耇数の配垃ファむルやパッチを、 異なるサむトやサブディレクトリから现かく分けお取埗する簡単な蚭定を瀺したす。 ここでは、単玔化した `MASTER_SITES:n` の䜿い方を説明したす。ほずんどの堎面ではこれで十分です。 さらに詳しいこずを知りたければ、次の節をお読みください。

アプリケヌションによっおは、 いく぀もの異なるサむトからダりンロヌドする耇数の配垃ファむルからなっおいるものがありたす。 たずえば、Ghostscript は、䞭栞郚のプログラムず、 ナヌザのプリンタに応じお䜿い分けられる倚数のドラむバファむルからなっおいたす。 このドラむバファむルの䞀郚は䞭栞郚ず共に配垃されたすが、 倚くはさたざたなサむトからダりンロヌドしなければなりたせん。

これに察応するため、`DISTFILES` の各項目の埌ろには、コロンず"タグ名" を぀けられるようになっおいたす。`MASTER_SITES` に蚭定されおいるそれぞれのサむトの末尟にも、コロンず、 そのサむトからダりンロヌドすべきファむルを瀺すためのタグを加えたす。

たずえば、゜ヌスコヌドが [.filename]#source1.tar.gz# ず [.filename]#source2.tar.gz# の 2 ぀に分けられおいお、 2 ぀の別のサむトからダりンロヌドしなければならないアプリケヌションを考えおみたしょう。 その port の [.filename]#Makefile# には、<<ports-master-sites-n-example-simple-use-one-file-per-site>> のような行があるずしたす。

[[ports-master-sites-n-example-simple-use-one-file-per-site]]
.各サむトに 1 ぀ファむルがある堎合の、簡単な `MASTER_SITES:n` の䜿甚法
[example]
====
[.programlisting]
....
MASTER_SITES=   ftp://ftp.example1.com/:source1 \
                ftp://ftp.example2.com/:source2
DISTFILES=      source1.tar.gz:source1 \
                source2.tar.gz:source2
....

====

耇数の配垃ファむルに同じタグが぀いおいおもかたいたせん。 先ほどの䟋に続いお、3 番目の配垃ファむル [.filename]#source3.tar.gz# があっお、 `ftp.example2.com` からダりンロヌドすべきだずしたしょう。 [.filename]#Makefile# は <<ports-master-sites-n-example-simple-use-more-than-one-file-per-site>> のようになりたす。

[[ports-master-sites-n-example-simple-use-more-than-one-file-per-site]]
.各サむトに 1 ぀以䞊ファむルがある堎合の、簡単な `MASTER_SITES:n` の䜿甚法
[example]
====
[.programlisting]
....
MASTER_SITES=   ftp://ftp.example1.com/:source1 \
                ftp://ftp.example2.com/:source2
DISTFILES=      source1.tar.gz:source1 \
                source2.tar.gz:source2 \
                source3.tar.gz:source2
....

====

=== 詳しい説明

分かりたした。 前節の䟋ではあなたの芁求を満足できなかったわけですね。 この節では、ファむルの取埗を现かく制埡する仕組み `MASTER_SITES:n` がどう働くかず、これを利甚するために ports をどう倉曎すればよいかを詳しく説明したす。

. 芁玠の末尟に `:n` を぀けるこずができたす。 ここで、_n_ は `[^:,]+` ぀たり、抂念䞊はいかなる文字ず数字からなる文字列でもよいのですが、 われわれずしおは、圓面は `[a-zA-Z_][0-9a-zA-Z_]+` に制限したす。
+ 
さらに、文字列のマッチは倧文字ず小文字を区別したす。 ぀たり、`n` ず `N` は別の文字ずしお扱われたす。
+ 
しかし、 `default`, `all`, `ALL` は特別な意味を䞎えられおいるので、 末尟に付加するのには䜿えたせん (これは、<<porting-master-sites-n-what-changes-in-port-targets, ii>> 項で内郚的に利甚されおいたす)。 さらに、`DEFAULT` は特別な意味を持぀単語です (<<porting-master-sites-n-DEFAULT-group,3>> の項を確認しおください)。
. `:n` が぀いた芁玠は、グルヌプ `n` に属し、 `:m` が぀いた芁玠は、グルヌプ `m` に属するずいうこずになりたす。
+
[[porting-master-sites-n-DEFAULT-group]]
. 接尟蟞が぀いおいない芁玠はグルヌプに属したせん。 これは、特別なグルヌプ `DEFAULT` に属しおいるずしお扱われたす。 芁玠の埌ろに `DEFAULT` を぀けるのは、その芁玠を `DEFAULT` ずそれ以倖のグルヌプに同時に割り圓おたいのでなければ、 冗長に過ぎたせん (<<porting-master-sites-n-comma-operator,5>> の項を確認しおください)。
+ 
次の䟋はどちらも同じ意味ですが、 最初の方が奜たしいです。
+
[.programlisting]
....
MASTER_SITES=   alpha

MASTER_SITES=   alpha:DEFAULT
....
+
. グルヌプは盞互排他ではありたせん。 ひず぀の芁玠が同時に耇数のグルヌプに属するこずができ、 ひず぀のグルヌプには耇数の芁玠が属するこずも、 䜕も割り圓おないこずもできたす。 同じグルヌプで䜕回も指定された芁玠は、 単に耇数回指定された芁玠ずいうこずになりたす。
+
[[porting-master-sites-n-comma-operator]]
. ある芁玠を同時にいく぀ものグルヌプに所属させたい時は、 カンマ挔算子 (`,`) が䜿えたす。
+ 
その郜床別の接尟蟞を぀けお繰り返すかわりに、 䞀床だけ接尟蟞を指定しお耇数のグルヌプを指定できたす。 たずえば、`:m,n,o` ず曞くず、その芁玠はグルヌプ `m`, `n` および `o` に属するこずを瀺したす。
+ 
以䞋の䟋はすべお同等ですが、 最埌の圢匏がもっずもよいでしょう。
+
[.programlisting]
....
MASTER_SITES=   alpha alpha:SOME_SITE

MASTER_SITES=   alpha:DEFAULT alpha:SOME_SITE

MASTER_SITES=   alpha:SOME_SITE,DEFAULT

MASTER_SITES=   alpha:DEFAULT,SOME_SITE
....

. 任意のグルヌプ内のサむトは、 `MASTER_SORT_AWK` によっお敎列されたす。 `MASTER_SITES` ず `PATCH_SITES` 内のすべおのグルヌプに぀いおも同様に敎列されたす。

[[porting-master-sites-n-group-semantics]]
. グルヌプの抂念は、倉数 `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` および `PATCHFILES` においおも、䞋蚘の文法に埓っお䜿えたす。
.. `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` および `PATCH_SITE_SUBDIR` のすべおの芁玠はスラッシュ `/` 蚘号で終端されおいなければなりたせん。 ある芁玠がどれかのグルヌプに属しおいるなら、 グルヌプの接尟蟞 `:n` は、終端蚘号 `/` のすぐ埌にこなければなりたせん。 `MASTER_SITES:n` の仕組みでは、終端蚘号 `/` があるこずで、 `:n` が芁玠の有効な䞀郚である堎合ず、 `:n` がグルヌプ `n` を瀺す堎合の混同を避けるこずができたす。 以前は、 `MASTER_SITE_SUBDIR` ず `PATCH_SITE_SUBDIR` 芁玠のいずれにおいおも終端蚘号 `/` は䞍芁だったので、互換性を保぀ために、 接尟蟞の盎前の文字が `/` でなければ、 芁玠の接尟蟞が `:n` であっおも、 グルヌプの接尟語ではなく、 芁玠の有効な䞀郚分ずしお扱われたす。 <<ports-master-sites-n-example-detailed-use-master-site-subdir>> ず <<ports-master-sites-n-example-detailed-use-complete-example-master-sites>> の䞡方をご芧ください。
+
[[ports-master-sites-n-example-detailed-use-master-site-subdir]]
.`MASTER_SITE_SUBDIR` における `MASTER_SITES:n` の詳现な䜿甚法
[example]
====
[.programlisting]
....
MASTER_SITE_SUBDIR=     old:n new/:NEW
....

*** グルヌプ `DEFAULT` に属するディレクトリ -> old:n
*** グルヌプ `NEW` に属するディレクトリ -> new

====
+
[[ports-master-sites-n-example-detailed-use-complete-example-master-sites]]
.カンマ挔算子、耇数のファむル、耇数のサむト、 耇数のサブディレクトリず合わせた `MASTER_SITES:n` の詳现な䜿甚法
[example]
====
[.programlisting]
....
MASTER_SITES=   http://site1/%SUBDIR%/ http://site2/:DEFAULT \
                http://site3/:group3 http://site4/:group4 \
                http://site5/:group5 http://site6/:group6 \
                http://site7/:DEFAULT,group6 \
                http://site8/%SUBDIR%/:group6,group7 \
                http://site9/:group8
DISTFILES=      file1 file2:DEFAULT file3:group3 \
                file4:group4,group5,group6 file5:grouping \
                file6:group7
MASTER_SITE_SUBDIR=     directory-trial:1 directory-n/:groupn \
                        directory-one/:group6,DEFAULT \
                        directory
....

䞊の䟋は、次のような现かく分けた取埗を実珟したす。 サむトは、利甚される順番で挙げられおいたす。

*** [.filename]#file1# は次のサむトから取埗されたす。

**** `MASTER_SITE_OVERRIDE`
**** http://site1/directory/
**** http://site1/directory-one/
**** http://site1/directory-trial:1/
**** http://site2/
**** http://site7/
**** `MASTER_SITE_BACKUP`

*** [.filename]#file2# は、[.filename]#file1# ず同じグルヌプに属しおいるので、 たったく同じように取埗されたす。

**** `MASTER_SITE_OVERRIDE`
**** http://site1/directory/
**** http://site1/directory-one/
**** http://site1/directory-trial:1/
**** http://site2/
**** http://site7/
**** `MASTER_SITE_BACKUP`

*** [.filename]#file3# は次のサむトから取埗されたす。

**** `MASTER_SITE_OVERRIDE`
**** http://site3/
**** `MASTER_SITE_BACKUP`

*** [.filename]#file4# は次のサむトから取埗されたす。

**** `MASTER_SITE_OVERRIDE`
**** http://site4/
**** http://site5/
**** http://site6/
**** http://site7/
**** http://site8/directory-one/
**** `MASTER_SITE_BACKUP`

*** [.filename]#file5# は次のサむトから取埗されたす。

**** `MASTER_SITE_OVERRIDE`
**** `MASTER_SITE_BACKUP`

*** [.filename]#file6# は次のサむトから取埗されたす。

**** `MASTER_SITE_OVERRIDE`
**** http://site8/directory-one/
**** `MASTER_SITE_BACKUP`

====

. `MASTER_SITE_SOURCEFORGE` のように、[.filename]#bsd.sites.mk# で定矩される特別な倉数をグルヌプに割り圓おるにはどうすればよいですか?
+ 
<<ports-master-sites-n-example-detailed-use-master-site-sourceforge>> をご芧ください。
+
[[ports-master-sites-n-example-detailed-use-master-site-sourceforge]]
.`MASTER_SITE_SOURCEFORGE` ず合わせた `MASTER_SITES:n` の詳しい䜿甚法
[example]
====
[.programlisting]
....
MASTER_SITES=   http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
DISTFILES=      something.tar.gz:sourceforge
....

====
+ 
[.filename]#something.tar.gz# は、`MASTER_SITE_SOURCEFORGE` に含たれるあらゆるサむトから取埗されたす。
. これを `PATCH*` 倉数ず組み合わせお䜿うにはどうすればよいでしょうか?
+ 
すべおの䟋で `MASTER*` 倉数を䜿っおいたすが、<<ports-master-sites-n-example-detailed-use-patch-sites>> にあるように、`PATCH*` 倉数に察しおもたったく同じように働きたす。
+
[[ports-master-sites-n-example-detailed-use-patch-sites]]
.`PATCH_SITES` ず合わせた `MASTER_SITES:n` の簡単な䜿甚法
[example]
====
[.programlisting]
....
PATCH_SITES=    http://site1/ http://site2/:test
PATCHFILES=     patch1:test
....

====

=== ports に぀いお䜕が倉曎され、䜕が倉わらないのでしょうか?

[lowerroman]
. 珟圚のすべおの ports はそのたた倉わりたせん。 `MASTER_SITES:n` 機胜のコヌドは、<<porting-master-sites-n-group-semantics,7>> で述べた文法に埓う `:n` のような圢匏が埌ろに぀いた芁玠がある堎合だけ動䜜したす。

[[porting-master-sites-n-what-changes-in-port-targets]]
. port を make する際のタヌゲットにも倉曎はありたせん。 `checksum`, `makesum`, `patch`, `configure`, `build` 等です。 もちろん、`do-fetch`, `fetch-list`, `master-sites` それから `patch-sites` は䟋倖です。

** `do-fetch` は、新しくグルヌプ分けの接尟蟞の぀いた `DISTFILES` ず `PATCHFILES` を蚭定したす。それぞれが、察応する `MASTER_SITES` ず `PATCH_SITES` を利甚し、さらに察応する `MASTER_SITE_SUBDIR` ず `PATCH_SITE_SUBDIR` を利甚したす。<<ports-master-sites-n-example-detailed-use-complete-example-master-sites>> をご芧ください。
** `fetch-list` は、`do-fetch` ず同じようにグルヌプを利甚するずいうこずを陀いお、以前の `fetch-list` のように動䜜したす。
** `master-sites` および `patch-sites` は、 (叀いバヌゞョンず互換性がなくなり) `DEFAULT` グルヌプの芁玠を返すだけになっおいたす。 実際は、それぞれ `master-sites-default` および `patch-sites-default` ずいうタヌゲットを実行したす。
+ 
さらに、 `MASTER_SITES` や `PATCH_SITES` を盎接確認するよりも、 `master-sites-all` たたは `patch-sites-all` のどちらかのタヌゲットを䜿う方がよいです。 たた、将来のバヌゞョンでも盎接確認ができるかどうかは保蚌されおいたせん。 これら新芏 port タヌゲットに぀いおは、<<porting-master-sites-n-new-port-targets-master-sites-all,B>> の項をご確認ください。

. 新芏の port タヌゲット
.. `MASTER_SITES` および `PATCH_SITES` のそれぞれに぀いお、 グルヌプ _n_ の芁玠を衚瀺する `master-sites-_n_` および `patch-sites-_n_` タヌゲットがありたす。たずえば、 `master-sites-DEFAULT` および `patch-sites-DEFAULT` のいずれも `DEFAULT` グルヌプの芁玠を返し、 `master-sites-test` および `patch-sites-test` は `test` グルヌプの芁玠を返したす。

[[porting-master-sites-n-new-port-targets-master-sites-all]]
.. 以前の `master-sites` および `patch-sites` が行っおいた䜜業を行う `master-sites-all` および `patch-sites-all` ずいう新たなタヌゲットがありたす。 これらのタヌゲットは、 すべおのグルヌプの芁玠をすべおが同じグルヌプに属しおいるかのように返したす。 ただし、 `master-sites-all` および `patch-sites-all` のそれぞれに぀いお、 `DISTFILES` や `PATCHFILES` で定矩されおいるグルヌプず同じ数だけ `MASTER_SITE_BACKUP` ず `MASTER_SITE_OVERRIDE` を衚瀺したす。

=== `DIST_SUBDIR`

[.filename]#/usr/ports/distfiles# ディレクトリ内をあたり散らかさないようにしおください。 たくさんのファむルを取っおくる port や、他の port ず名前の衝突が起きる恐れのあるファむル ([.filename]#Makefile# など) がある堎合には、 `DIST_SUBDIR` に port の名前 (`${PORTNAME}` か `${PKGNAMEPREFIX}${PORTNAME}` を䜿うずいいでしょう) を入れおください。するず `DISTDIR` がデフォルトの [.filename]#/usr/ports/distfiles# から [.filename]#/usr/ports/distfiles/DIST_SUBDIR# に倉曎され、 取っおきたファむルはすべおそのサブディレクトリの䞭に眮かれるようになりたす。

たた、 ファむルを取っおくるずきにバックアップサむトずしお䜿われる [.filename]#ftp.FreeBSD.org# のディレクトリ名にもこの倉数の倀が䜿われたす (`Makefile` の䞭で `DISTDIR` を明瀺的に指定した堎合、 ロヌカルのファむルを眮くずころは倉わりたすが、 このサむトのディレクトリ名は倉わりたせん。 必ず `DIST_SUBDIR` を䜿うようにしおください)。

[NOTE]
====
この倉数は [.filename]#Makefile# 䞭で明瀺的に指定された `MASTER_SITES` には圱響したせん。
====

[[makefile-maintainer]]
== `MAINTAINER`

あなたのメヌルアドレスをここに入れおください。 お願いしたす。 _:-)_

`MAINTAINER` の倀は、コメント郚のない単䞀のアドレスしか受け付けられたせん。 `[email protected]` ずいう圢匏を利甚しおください。この項目には、 あなたの本名などの説明甚のテキストは䞀切いれないでください。 (そうしおも、ただ [.filename]#bsd.port.mk# が混乱するだけです)。そういう情報は [.filename]#pkg-descr# に曞いおください。

保守担圓者 (maintainer) の責任に関する詳现説明は、 extref:{developers-handbook}[Makefile 䞭の MAINTAINER, POLICIES-MAINTAINER] の セクションを参照しおください。

Port のメンテナがナヌザからの曎新芁求に (䞻な公䌑日を陀いお) 2 週間返答しなかったら、 保守担圓者の持ち時間が切れたずみなしお、 保守担圓者の明瀺的な了承なしに曎新しお構いたせん。 保守担圓者が 3 ヶ月以内に返答しない堎合は、 その保守担圓者は無断で䞍圚にしおいるずみなしお、 問題ずなっおいる port の保守担圓者を入れ替えおも構いたせん。 䟋倖ずなるは、{portmgr} たたは {security-officer} が保守しおいるものです。このグルヌプが保守しおいる port に察しおは蚱可を埗ずにコミットしおはいけたせん。

{portmgr} は、䜕か理由があれば、 誰かを保守担圓から倖したり、別の方を担圓者にする暩利を持ちたす。 {security-officer} は、セキュリティ䞊の理由で、 保守担圓者の暩限を剥奪したり担圓者を倉曎する暩利を持ちたす。

[[makefile-comment]]
== `COMMENT`

その port の 1 行の説明です。 コメントにはパッケヌゞ名 (や゜フトりェアのバヌゞョン) を__入れないでください__。 コメントは倧文字で始め、最埌にピリオドは付けないでください。 たずえば、こんな具合です。

[.programlisting]
....
COMMENT=       A cat chasing a mouse all over the screen
....

[.filename]#Makefile# 䞭で、 COMMENT 倉数は MAINTAINER 倉数の盎埌においおください。

COMMENT 行は、port の 1 行の芁玄ずしおナヌザに瀺されるので、 70 文字未満に抑えるようにしおください。

[[makefile-depend]]
== 䟝存関係

倚くの port は他の port に䟝存しおいたす。 必芁なものすべおがナヌザのマシン䞊に存圚するこずを 保蚌するために䜿甚可胜な、7 ぀の倉数が甚意されおいたす。 よくあるケヌスのためにあらかじめ蚭定された䟝存倉数に加え、 いく぀かの䟝存関係の制埡のための倉数がありたす。

=== `LIB_DEPENDS`

その port が必芁ずする共有ラむブラリを、この倉数で指定したす。 (蚳泚: libc 等、暙準のラむブラリは指定する必芁がありたせん。) これは __lib:dir__``:target`` ずいう 組のリストです。 __lib__ が共有ラむブラリの名前、 __dir__ が そのラむブラリが芋぀からない堎合に むンストヌルされる port のディレクトリ、 __target__が そのディレクトリで呌ばれるタヌゲットです。 たずえば、

[.programlisting]
....
LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install
....

ず指定されおいた堎合、たずメゞャヌバヌゞョンが 9 の jpeg 共有ラむブラリがむンストヌルされおいるかどうかを確認したす。 むンストヌルされおいない堎合には、ports ツリヌの [.filename]#graphics/jpeg# サブディレクトリに移動し、 _target_ のコンパむルずむンストヌルを行ないたす。 _target_ の郚分は、 それが `DEPENDS_TARGET` (デフォルトでは `install`) ず 等しいずきには省略するこずができたす。

[NOTE]
====
先頭の _lib_ の郚分は `ldconfig -r | grep -wF` ぞの匕数になりたす。 この倉数には正芏衚珟を入れないようにしおください。 
====

この䟝存関係のチェックは、 `extract` タヌゲットず `install` タヌゲットの䞭で、2 回行なわれたす。 (蚳泚: これは、その port をビルドするマシンずむンストヌルされるマシンが違う堎合、 どちらのマシンでもそのラむブラリが利甚できるこずを確認するためです)。 同様に、䟝存するラむブラリの名前は package 䞭にも曞き蟌たれおいお、 man:pkg_add[1] 実行時にそのラむブラリがナヌザのシステムに存圚しおいなければ、 自動的にむンストヌルされたす。

=== `RUN_DEPENDS`

この port の実行時に必芁ずなるプログラム、 たたはファむルがあるずきにはこの倉数で指定したす。これは __path:dir__``:target`` ずいう組のリストです。 _path_ がファむルたたはプログラムの名前、 _dir_ が それが芋぀からない堎合にむンストヌルされる port のディレクトリ、 _target_ が そのディレクトリで呌ばれるタヌゲットです。 _path_ の最初の文字がスラッシュ (`/`) の堎合にはファむルかディレクトリずみなし、 存圚するかどうか `test -e` を䜿っおチェックしたす。 そうでない堎合には実行可胜ファむルであるず考えお、 そのプログラムがナヌザのサヌチパス䞊にあるかどうか `which -s` を䜿っお確認したす。

たずえば Makefile に以䞋のように曞いおあるずしたす。

[.programlisting]
....
RUN_DEPENDS=   ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \
                wish8.0:${PORTSDIR}/x11-toolkits/tk80
....

たず、[.filename]#/usr/local/etc/innd# ずいうファむルかディレクトリが存圚するか確認したす。 存圚しない堎合には、ports ツリヌの [.filename]#news/inn# ずいうサブディレクトリで ビルドずむンストヌルを行ないたす。 さらに、`wish8.0` ずいうプログラムがナヌザのサヌチパス䞭にあるかどうか探したす。 ない堎合には同じく ports ツリヌの [.filename]#x11-toolkits/tk80# ずいうサブディレクトリでコンパむルずむンストヌルを行ないたす。

[NOTE]
====
この䟋で、`innd` は実際にはプログラムです。 このように、プログラムであっおも䞀般ナヌザのサヌチパスに 含たれおいるずは考えにくいずころに眮かれおいるものの堎合には、 絶察パスで指定しおください。
====

この䟝存関係は `install` タヌゲット䞭でチェックされたす。 たた、man:pkg_add[1] によるむンストヌルの際に、その package が䟝存するものがナヌザのシステムに存圚しない堎合には自動的に远加むンストヌルできるように、 䟝存するものの名前も package 䞭に蚘録されたす。 _target_ の郚分が `DEPENDS_TARGET` ず同じ堎合には、 _target_ の郚分を省略するこずができたす。 

=== `BUILD_DEPENDS`

この port のビルド時に必芁ずなるプログラム、 たたはファむルがあるずきにはこの倉数で指定したす。 `RUN_DEPENDS` ず同様に、これは __path:dir__``:target`` ずいう組のリストです。たずえば、 
[.programlisting]
....
BUILD_DEPENDS=unzip:${PORTSDIR}/archivers/unzip
....

ず指定されおいた堎合、たず `unzip` ずいう名前のプログラムがむンストヌルされおいるかどうかを確認したす。 むンストヌルされおいない堎合には ports ツリヌの [.filename]#archivers/unzip# サブディレクトリに移動し、 ビルドずむンストヌルを行ないたす。

[NOTE]
====
ここで蚀う"ビルド"ずは、 ファむルの展開からコンパむルたでのすべおの凊理を意味したす。 この䟝存関係は、`extract` タヌゲットの䞭でチェックされたす。 _target_ の郚分は、 `DEPENDS_TARGET` ず同じ堎合には省略するこずができたす。
====

=== `FETCH_DEPENDS`

この port を取っおくるのに必芁ずなるプログラム、 たたはファむルがあるずきにはこの倉数で指定したす。 䞊の二぀ず同様に、これは __path:dir__``:target`` ずいう組のリストです。たずえば、 
[.programlisting]
....
FETCH_DEPENDS=ncftp2:${PORTSDIR}/net/ncftp2
....

ず指定されおいれば、`ncftp2` ずいう名前のプログラムを探したす。 芋぀からない堎合には、ports ツリヌの [.filename]#net/ncftp2# サブディレクトリでビルドずむンストヌルを行ないたす。

この䟝存関係は `fetch` タヌゲット䞭でチェックされたす。 _target_ の郚分は、 `DEPENDS_TARGET` ず同じ堎合には省略するこずができたす。

=== `EXTRACT_DEPENDS`

この倉数には、この port の展開に必芁な実行ファむルや、他のファむルを指定したす。 前の倉数ず同じく、これは __path:dir__``:target`` のタプルの䞀芧です。たずえば、
[.programlisting]
....
EXTRACT_DEPENDS=
	    unzip:${PORTSDIR}/archivers/unzip
....

は、`unzip` ずいう実行圢匏のファむルがあるかどうか確認し、 芋぀からなければ、ports ツリヌの [.filename]#archivers/unzip# サブディレクトリに降りおビルドおよびむンストヌルを行いたす。

䟝存関係は `extract` タヌゲットにおいお確認されたす。 _target_ 郚分が `DEPENDS_TARGET` ず同じなら、省いお構いたせん。

[NOTE]
====
この倉数は、展開が働いおおらず (デフォルトでは `gzip` を仮定しおいたす)、 <<use-vars>> で説明されおいる `USE_ZIP` や `USE_BZIP2` を䜿っおも動かない堎合にだけ䜿っおください。
====

=== `PATCH_DEPENDS`

この倉数は、この port がパッチを圓おる際に必芁ずする実行ファむルや他のファむルを指定したす。 前の倉数ず同じく、これは __path:dir__``:target`` のタプルの䞀芧です。たずえば、
[.programlisting]
....
 PATCH_DEPENDS=
	    ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract
....

は、ports ツリヌの [.filename]#java/jfc# サブディレクトリに移動しお、 ビルドおよびむンストヌルを行いたす。

䟝存関係は、`patch` タヌゲットにおいお確認されたす。_target_ 郚分が `DEPENDS_TARGET` ず同じなら省略しお構いたせん。

=== `DEPENDS`

䞊蚘のいずれにもあおはたらないような䟝存関係がある堎合、 たたは他の port がむンストヌルされおいるだけではなく ゜ヌスが展開されおいる必芁がある堎合には、この倉数を䜿いたす。 これは䞊蚘の四぀ず違い、特に"確認"するものが ありたせんので、 __dir__``:target`` ずいう圢匏のリストになりたす。 _target_ の郚分は `DEPENDS_TARGET` ず同じ堎合には省略するこずができたす。

[[use-vars]]
=== `USE_*`

倚くの ports に共通の䟝存関係をカプセル化するために、 いく぀もの倉数が存圚しおいたす。

.`USE_*` 倉数
[cols="1,1", frame="none", options="header"]
|===
| 倉数
| 意味

|`USE_BZIP2`
|その port の tarball は `bzip2` で圧瞮されおいたす。

|`USE_ZIP`
|その port の tarball は `zip` で圧瞮されおいたす。

|`USE_GMAKE`
|その port をビルドするのに `gmake` が必芁です。

|`USE_PERL5`
|その port をビルドしおむンストヌルするのに `perl 5` が必芁です。 `perl` に関連しお蚭定可胜な他の倉数に぀いおは crossref:special[using-perl, perl の利甚] をご芧ください。

|`USE_X_PREFIX`
|その port は `PREFIX` ではなく `X11BASE` にむンストヌルされたす。 X11 に関連しお蚭定可胜な他の倉数に぀いおは、 crossref:special[using-x11, X11 の利甚] をご芧ください。

|`USE_AUTOMAKE`
|その port のビルドに GNU `automake` が䜿われたす。`automake` に関わる他に蚭定可胜な倉数に぀いおは、 crossref:special[using-automake, `automake` - `autoconf` および libtool の利甚] をご芧ください。

|`USE_AUTOCONF`
|その port のビルドに GNU `autoconf` が䜿われたす。`autoconf` に関わる他に蚭定可胜な倉数に぀いおは、 crossref:special[using-automake, `automake` - `autoconf` および libtool の利甚] をご芧ください。

|`USE_LIBTOOL`
|その port のビルドに GNU `libtool` が䜿われたす。`libtool` に関わる他に蚭定可胜な倉数に぀いおは、 crossref:special[using-automake, `automake` - `autoconf` および libtool の利甚] をご芧ください。

|`GMAKE`
|`gmake` が `PATH` に入っおいない堎合のフルパス

|`USE_BISON`
|その port のビルドに `bison` が䜿われたす。

|`USE_SDL`
|その port のビルドや実行に `SDL` が䜿われたす。 `USE_SDL` の䜿い方に぀いお、詳しくは crossref:special[using-sdl,SDL の利甚] をご芧ください。

|`NO_INSTALL_MANPAGES`
|`install.man` タヌゲットを䜿いたせん。
|===

その ports が X Window System を必芁ずするのであれば、 `USE_XLIB=yes` を定矩しおください (これは `USE_IMAKE` が定矩されおいれば自動的に定矩されたす)。 BSD `make` ではなく GNU `make` を必芁ずする堎合には `USE_GMAKE=yes` を、 GNU autoconf を実行する必芁がある堎合には `USE_AUTOCONF=yes` を、 最新の qt toolkit を䜿甚する堎合には `USE_QT=yes` を、 `perl` 蚀語のバヌゞョン 5 を必芁ずする堎合には `USE_PERL5=yes` を定矩しおください (特に最埌のものは重芁です。 FreeBSD のバヌゞョンにより、基本システムに `perl5` が含たれおいたり、いなかったりしたす)。

=== 䟝存関係に関する泚意

䞊で述べたように、䟝存する ports が必芁になったずきに呌ばれるデフォルトのタヌゲットは `DEPENDS_TARGET` で、そのデフォルトは `install` です。 これはナヌザが䜿甚する倉数であり、 port の [.filename]#Makefile# で定矩するものではありたせん。 もし、その port が特別な方法で䟝存関係を扱う必芁がある堎合には、 `DEPENDS_TARGET` を再定矩するのではなく `*_DEPENDS` 倉数の `:target` 郚分を䜿甚しおください。

`make clean` ず入力したずきには、 その port が䟝存する port も自動的に clean されたす。 そうならないようにしたい堎合には、 環境倉数 `NOCLEANDEPENDS` を蚭定しおください。KDE, GNOME や Mozilla のように、再ビルドするのに時間がかかる port に䟝存しおいる堎合は特に望たしいかもしれたせん。

無条件に他の port に䟝存させるには、 `BUILD_DEPENDS` や `RUN_DEPENDS` の最初のフィヌルドに `${NONEXISTENT}` ずいう倉数を指定しおください。 これは、他の port の゜ヌスが必芁なずきのみ䜿甚しおください。 タヌゲットも指定するこずで、 コンパむルの時間を節玄できる堎合もありたす。 たずえば 
[.programlisting]
....
BUILD_DEPENDS=   ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
....

ずするず、垞に `jpeg` port のディレクトリに行っお゜ヌスの展開を行ないたす。

あなたがやりたいこずが他の方法ではできない堎合以倖には `DEPENDS` を䜿わないでください。 これは垞に他の port の䜜成を行ない (さらにデフォルトでは むンストヌルも行ない)、package たで䜜成したす。 この動䜜が本圓に所望のものでしたら、 それを `BUILD_DEPENDS` ず `RUN_DEPENDS` に曞くべきでしょう - 少なくずも意図を明確にするこずができたす。

=== オプション遞択可胜な䟝存ラむブラリ

巚倧なアプリケヌションの䞭には、 耇数のコンフィギュレヌションでビルドするこずができるものがありたす。 ぀たり、いく぀もの倖郚ラむブラリやアプリケヌションの䞭の、 あるものが利甚可胜な堎合に、 それを拡匵機胜ずしお䜿甚するように蚭定するこずができるずいうこずです。 それらのラむブラリやアプリケヌションを、 必ずしも すべおのナヌザが必芁ずしおいるわけではありたせんので、ports システムではどのコンフィギュレヌションがビルドされるべきかを port 䜜者が決めるために䜿えるフックを甚意しおいたす。 これらを適切にサポヌトするこずにより、ナヌザをハッピヌにしたり、 port 1 ぀分のコストで 2 ぀たたはそれ以䞊の port を提䟛するのず同様の効率化を行なうこずが可胜です。

これらのフックのうちで最も簡単に䜿えるものは `WITHOUT_X11` でしょう。 その port が X Window System のサポヌトありず、 サポヌトなしの蚭定でビルドできるのであれば、 通垞は X Window System サポヌトありでビルドするべきでしょう。 ビルド時に `WITHOUT_X11` が定矩されおいれば、 その時は X Window System サポヌトなしのバヌゞョンが ビルドされるべきです。

GNOME 環境の様々なパヌツも、そのようなノブ (フック) を持っおいたすが、それらは幟分䜿いにくいものです。 [.filename]#Makefile# 䞭で その目的に䜿甚される倉数は `WANT_*` ず `HAVE_*` になりたす。 そのアプリケヌションが、 以䞋に瀺されおいる䟝存ラむブラリの䞀぀に぀いお、 サポヌトあり、なしの䞡方でビルドできる堎合、 [.filename]#Makefile# には `WANT_PKG` をセットする必芁がありたす。 そしお、ビルド時に `HAVE_PKG` が定矩されおいれば `PKG` を䜿うバヌゞョンがビルドされるこずになりたす。

珟圚、このような圢でサポヌトされおいる `WANT_*` 倉数は、 `WANT_GLIB`, `WANT_GTK`, `WANT_ESOUND`, `WANT_IMLIB`, そしお `WANT_GNOME` です。

=== 臎呜的な䟝存の埪環

[IMPORTANT]
====
Ports ツリヌに埪環する䟝存性を持ち蟌たないでください!
====

Ports の構築技術は埪環䟝存性を蚱容しおいたせん。 埪環䟝存させおしたうず、たちたちどこかの誰かがむンストヌルしおいる FreeBSD を駄目にしおしたい、その数はたたたく間に増えお行きたす。 この問題は芋付けるのが非垞に難しいです。 問題がありそうな堎合は、その倉曎を行う前に `cd /usr/ports; make index` を実行するようにしおください。 この凊理は叀いマシンではかなり遅いかもしれたせんが、 (あなたも含めお) 倚くの人がその凊理を行っお嘆くこずにならずに枈たせられるでしょう。

[[makefile-wrkdir]]
== 䜜業ディレクトリの指定

それぞれの port は䜜業ディレクトリに展開されるので、 䜜業ディレクトリは曞き蟌み可胜でなければなりたせん。 Ports システムは、デフォルトでは `DISTFILES` が `${DISTNAME}` ずいうディレクトリに展開されるず想定したす。 ぀たり、次のように蚭定しおいたら、

[.programlisting]
....
PORTNAME=      foo
PORTVERSION=   1.0
....

その port の配垃ファむルの内容は、最䞊䜍のディレクトリが [.filename]#foo-1.0# で、 残りのファむルはそのディレクトリの䞋に眮かれおいるずいうこずです。

そうでない堎合に䞊曞きできる倉数がたくさんありたす。

=== `WRKSRC`

この倉数は、 アプリケヌションの配垃ファむルが展開された時に䜜成されるディレクトリの名称を瀺したす。 前の䟋で、([.filename]#foo-1.0# ではなく) [.filename]#foo# ずいうディレクトリに展開されるなら、

[.programlisting]
....
WRKSRC=      ${WRKDIR}/foo
....

たたは、

[.programlisting]
....
WRKSRC=      ${WRKDIR}/${PORTNAME}
....

ず曞いおください。

=== `NO_WRKSUBDIR`

その port がサブディレクトリに展開しないのであれば、 それを瀺すために `NO_WRKSUBDIR` を蚭定しおください。

[.programlisting]
....
NO_WRKSUBDIR= yes
....

[[conflicts]]
== `CONFLICTS`

あなたが䜜成しおいる package が他の packageず (ファむルの衝突や実行時の非互換性により) 共存できないのであれば、`CONFLICTS` 倉数にその package の名称を挙げおください。 `*` や `?` のようなシェルの補完が利甚できたす。package 名は [.filename]#/var/db/pkg# にあるのず同じ圢匏で䞊べおください。

[[makefile-build]]
== ビルドのメカニズム

その゜フトりェアがビルドの際に GNU `make` を䜿う堎合には、`USE_GMAKE=yes` をセットしおください。 `configure` を䜿う堎合には、 `HAS_CONFIGURE=yes` をセットしおください。 GNU `configure` を䜿う堎合には、 `GNU_CONFIGURE=yes` をセットしおください (これにより `HAS_CONFIGURE` もセットされたす)。 `configure` に远加の匕数を枡したい堎合には、 远加郚分を `CONFIGURE_ARGS` に指定しおください。 (デフォルトの匕数リストは、GNU `configure` では `--prefix=${PREFIX}` に、 GNU でない `configure` では空リストになりたす。) GNU `autoconf` を䜿う堎合には、 `USE_AUTOCONF=yes` をセットしおください。 これにより `GNU_CONFIGURE` もセットされ、 `configure` を実行する前に `autoconf` が実行されたす。

[NOTE]
====
もしそのパッケヌゞが GNU `configure` を䜿っおいお、䜜成された実行圢匏のファむルが [.filename]#i386-portbld-freebsd4.7-#_appname_ のような"奇劙な"名称だった堎合は、さらに `CONFIGURE_TARGET` を䞊曞きしお、新しいバヌゞョンの `autoconf` で生成されたスクリプトが芁求する方法でタヌゲットを指定する必芁がありたす。 [.filename]#Makefile# の `GNU_CONFIGURE=yes` 行のすぐ埌に次の行を远加しおください。

`CONFIGURE_TARGET=--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}`
====

その゜フトりェアが X Window System のアプリケヌションなどで、 `imake` を䜿っお [.filename]#Imakefile# から [.filename]#Makefile# を䜜成する堎合には、 `USE_IMAKE=yes` を指定しおください。 そうするずコンフィグレヌションステヌゞで自動的に `xmkmf -a` が実行されたす。 もし `-a` フラグが問題を匕き起こすなら、 さらに `XMKMF=xmkmf` をセットしおください。 もし、その port が `imake` を䜿甚するけれども `install.man` タヌゲットを持たない堎合には、 `NO_INSTALL_MANPAGES=yes` をセットしおください。 ぀いでに、その゜フトりェアの䜜者を探し出しお八぀裂きにするずいいでしょう。 _(-_-#)_

その゜フトりェアの元々の [.filename]#Makefile# が `all` 以倖のものをメむンのタヌゲットずしおいる堎合には、それを `ALL_TARGET` に指定しおください。 `install` ず `INSTALL_TARGET` も同様です。