FreeBSD port 作成者のためのハンドブック
Prev | Chapter 4 `Makefile` の作成 | Next

# 4.4 配布ファイル

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

## 4.4.1 `DISTNAME`

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

> Note: `PKGNAMEPREFIX` や `PKGNAMESUFFIX` は `DISTNAME` に影響を与えません。 また、元のソースアーカイブが `${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}` という 名前ではないのに、`WRKSRC` を `work/`${PORTNAME}-${PORTVERSION}`` と設定している場合、おそらく `DISTNAME` はそのままにしておく必要があることに注意してください -- `DISTNAME` と `WRKSRC` の両方を (そして おそらく `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_BZIP2` と `USE_ZIP` 変数を設定すると、`EXTRACT_SUFX` は必要に応じて自動的に `.bz2` または `.zip` に設定されます。 どちらも設定されていなければ、`EXTRACT_SUFX` は `.tar.gz` に設定されます。

`EXTRACT_SUFX` と `DISTFILES` を両方設定する必要はありません。

## 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 ファイルの名前と場所を `DISTFILES` と `MASTER_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.gz` と `source2.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` には影響しません。

Prev | Home | Next
カテゴリ分類 | Up | `MAINTAINER`

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