4.4 配布ファイル

Makefile の第二の部分では、 その port をビルドするためにダウンロードしなければならないファイルと、 それをどこからダウンロードできるか説明しています。

4.4.1 DISTNAME

DISTNAME は製作者が決めたソフトウェアの名前です。 デフォルトでは DISTNAME${PORTNAME}-${PORTVERSION} になりますが、 必要に応じて書き換えることができます。 DISTNAME は二つの場所でしか使われません。 一つ目は配布ファイルリスト (DISTFILES) のデフォルト ${DISTNAME}${EXTRACT_SUFX} で、二つ目は配布ファイルが展開されるサブディレクトリ WRKSRC のデフォルト work/${DISTNAME} です。

Note: PKGNAMEPREFIXPKGNAMESUFFIXDISTNAME に影響を与えません。 また、元のソースアーカイブが ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX} という 名前ではないのに、WRKSRCwork/${PORTNAME}-${PORTVERSION} と設定している場合、おそらく DISTNAME はそのままにしておく必要があることに注意してください -- DISTNAMEWRKSRC の両方を (そして おそらく EXTRACT_SUFX も) セットするよりは、DISTFILES を定義する方が楽でしょう。

4.4.2 MASTER_SITES

元になる配布ファイルを指し示す、FTP/HTTP の URL のファイル名を除いた部分を MASTER_SITES に設定します。 最後にスラッシュ (/) をつけることをお忘れなく!

このシステム上に配布ファイルが見つからなかった場合、 make マクロは FETCH を使ってこの変数に指定されたサイトから配布ファイルを取得しようとします。

このリストには、 できれば異なる大陸に存在する複数のサイトを入れておくことが推奨されています。 これにより、広域ネットワークのトラブルに対する耐性を高めることができます。 さらに私たちは、自動的に最も近いマスタサイトを判断して、 そこから取ってくるメカニズムの導入を計画しています。

元になる tar ファイルが X-contrib や GNU, Perl CPAN 等の有名なアーカイブサイトに置かれている場合には、 MASTER_SITE_* を使ってこれらのサイトを簡潔に (例えば MASTER_SITE_XCONTRIB とか、 MASTER_SITE_PERL_CPAN のように) 指定することができます。 MASTER_SITES を これらの変数の一つにセットし、 サイト内でのパスを MASTER_SITE_SUBDIR に指定するだけです。 以下に例を示します。

MASTER_SITES=         ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR=   applications

これらの変数は /usr/ports/Mk/bsd.sites.mk で定義されています。 いつでも新しいアーカイブサイトが追加されますので、 port を提出する前に このファイルの最新版を チェックするように心掛けてください。

ユーザは /etc/make.conf 中で MASTER_SITE_* 変数を上書きすることもできます。 そうすることで、これらの有名なアーカイブそのものではなく、 好みのミラーサイトを使用することができます。

4.4.3 EXTRACT_SUFX

配布ファイルが 1 つで、 圧縮方式を示すのに普通と異なる接尾辞を使っていたら、 EXTRACT_SUFX を設定してください。

例えば、配布ファイルがより一般的な foo.tar.gz ではなく、 foo.tgz となっていたら、 次のように書きます。

DISTNAME=      foo
EXTRACT_SUFX=  .tgz

USE_BZIP2USE_ZIP 変数を設定すると、EXTRACT_SUFX は必要に応じて自動的に .bz2 または .zip に設定されます。 どちらも設定されていなければ、EXTRACT_SUFX.tar.gz に設定されます。

EXTRACT_SUFXDISTFILES を両方設定する必要はありません。

4.4.4 DISTFILES

時々、ダウンロードするファイルの名称が port の名称とまったく似ていないことがあります。たとえば、 source.tar.gz などと名づけられていることもあるでしょう。 ほかに、ソースコードがいくつかのアーカイブに分かれていて、 そのすべてをダウンロードしなければならないならないこともあります。

この場合、DISTFILES に、ダウンロードしなければならないファイルすべてのリストを、 スペースで区切って設定してください。

DISTFILES=     source1.tar.gz source2.tar.gz

明示的に設定されていない場合、 DISTFILES${DISTNAME}${EXTRACT_SUFX} に設定されます。

4.4.5 EXTRACT_ONLY

DISTFILES の一部だけを展開すべき (例えば、一方がソースコードで、もう一方は圧縮されていない文書という) 場合、展開しなければならないファイル名を EXTRACT_ONLY に設定してください。

DISTFILES=     source.tar.gz manual.html
EXTRACT_ONLY=  source.tar.gz

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

EXTRACT_ONLY=

4.4.6 PATCHFILES

その port が配布ファイルの他に FTP や HTTP で手に入る追加パッチを必要とする場合には、 PATCHFILES にはそのパッチのファイル名を、 PATCH_SITES にはそのファイルが置かれているディレクトリの URL をセットしてください。(書き方は MASTER_SITES と同じです。)

そのパッチに記録されているファイル名に余計なパス名がついていて、 ソースツリーのトップディレクトリ (つまり WKRSRC) からの相対パスになっていない場合には、 それに応じた PATCH_DIST_STRIP を指定してください。 たとえば、パッチ内のすべてのファイル名の先頭に、余計な foozolix-1.0/ がついている場合には、 PATCH_DIST_STRIP=-p1 としてください。

これらのパッチは圧縮されていても大丈夫です。 ファイル名が .gz.Z で終わる場合には、自動的に展開されるようになっています。

もしパッチが、ドキュメント等その他のファイルと一緒に gzip された tar ファイルで配布されている場合には、単に PATCHFILES を使うだけではうまくいきません。 このような場合には、このパッチの tar ファイルの名前と場所を DISTFILESMASTER_SITES に追加しておきます。 それから、EXTRA_PATCHES 変数にそれらのパッチを指定すれば、 bsd.port.mk が 自動的にパッチを適用してくれます。 特に注意が必要なのは、パッチファイルを PATCHDIR ディレクトリにコピーしてはならないことです -- (訳注: port が CD-ROM 上に置かれている等の場合には、) そのディレクトリには書き込みができないかもしれません。

Note: それが普通の gzip か compress された tar ファイルであれば、 通常のソースファイルと一緒にパッチ適用時までに展開されていますので、 明示的に展開する必要はありません。 もしパッチを DISTFILES に追加した場合には、パッチを含むファイルが展開される際に、 そのディレクトリにある何かを上書きしないように注意してください。 さらに、コピーされたパッチファイルを削除するコマンドを pre-clean ターゲットに追加することを忘れないでください。

4.4.7 異なるサイトからの複数の配布ファイル

アプリケーションによっては、 いくつもの異なるサイトからダウンロードする複数の配布ファイルからなっているものがあります。 たとえば、Ghostscript は、中核部のプログラムと、 ユーザのプリンタに応じて使われる多数のドライバファイルからなっています。 このドライバファイルの一部は中核部と共に供給されますが、 多くはさまざまなサイトからダウンロードしなければなりません。

これに対応するため、DISTFILES の各項目の後ろには、コロンと``タグ名称'' をつけられるようになっています。MASTER_SITES に設定されているそれぞれのサイトの末尾にも、コロンと、 そのサイトからダウンロードすべきファイルを示すためのタグを加えます。

たとえば、ソースコードが source1.tar.gzsource2.tar.gz に分けられていて、 2 つの別のサイトからダウンロードしなければならないアプリケーションを考えてみましょう。 その port の Makefile には、次のような行があるでしょう。

MASTER_SITES= ftp://ftp.example1.com/:source1 \
              ftp://ftp.example2.com/:source2
DISTFILES=    source1.tar.gz:source1 \
              source2.tar.gz:source2

複数の配布ファイルに同じタグがついていてもかまいません。 先ほどの例に続いて、3 番目の配布ファイル source3.tar.gz があって、 ftp.example2.com からダウンロードすべきだとしましょう。 Makefile は次のようになります。

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

4.4.8 DIST_SUBDIR

/usr/ports/distfiles ディレクトリ内をあまり散らかさないようにしてください。 たくさんのファイルを取ってくる port や、他の port と名前の衝突が起きる恐れのあるファイル (Makefile など) がある場合には、 DIST_SUBDIR に port の名前 (${PORTNAME}${PKGNAMEPREFIX}${PORTNAME} を使うといいでしょう) を入れてください。すると DISTDIR がデフォルトの /usr/ports/distfiles から /usr/ports/distfiles/DIST_SUBDIR に変更され、 取ってきたファイルはすべてそのサブディレクトリの中に置かれるようになります。

また、 ファイルを取ってくるときにバックアップサイトとして使われる ftp.FreeBSD.org のディレクトリ名にもこの変数の値が使われます (Makefile の中で DISTDIR を明示的に指定した場合、 ローカルのファイルを置くところは変わりますが、 このサイトのディレクトリ名は変わりません。 必ず DIST_SUBDIR を使うようにしてください)。

Note: この変数は Makefile 中で明示的に指定された MASTER_SITES には影響しません。

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