4.10. 依存関係

多くの port は他の port に依存しています. 必要なものすべてがユーザのマシン上に存在することを 保証するために使用可能な, 5 つの変数が用意されています. よくあるケースのためにあらかじめ設定された依存変数に加え, いくつかの依存関係の制御のための変数があります.

4.10.1. LIB_DEPENDS

その port が必要とする共有ライブラリを, この変数で指定します. (訳注: libc 等, 標準のライブラリは指定する必要がありません.) これは lib:dir[:target] という 組のリストです. lib が共有ライブラリの名前, dir が そのライブラリが見つからない場合に インストールされる port のディレクトリ, targetが そのディレクトリで呼ばれるターゲットです. たとえば,

LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install
と指定されていた場合, まずメジャーバージョンが 9 の jpeg 共有 ライブラリがインストールされているかどうかを確認します. インストールされていない場合には, ports ツリーの graphics/jpeg サブディレクトリに移動し, target のコンパイルとインストールを 行ないます. target の部分は, それが DEPENDS_TARGET (デフォルトでは install) と 等しいときには省略することができます.

Note: 先頭の lib の部分は ldconfig -r | grep -wF への 引数になります. この変数には正規表現を入れないようにしてください.

この依存関係のチェックは, extract ターゲットと install ターゲットの中で, 2 回行なわれます. (訳注: これは, その port をビルドするマシンと インストールされるマシンが違う場合, どちらのマシンでも そのライブラリが利用できることを確認するためです.) 同様に, 依存するライブラリの名前は package 中にも書き込まれていて, pkg_add 実行時に そのライブラリが ユーザのシステムに存在していなければ, 自動的にインストールされます.

4.10.2. RUN_DEPENDS

この port の実行時に必要となるプログラム, またはファイルがあるときにはこの変数で指定します. これは path:dir[:target] という 組のリストです. path がファイルまたはプログラムの名前, dir が それが見つからない場合に インストールされる port のディレクトリ, target が そのディレクトリで呼ばれる ターゲットです. path の最初の文字が スラッシュ (/) の場合には ファイルかディレクトリとみなし, 存在するかどうか test -e を使ってチェックします. そうでない場合には実行可能ファイルであると考えて, そのプログラムがユーザのサーチパス上にあるかどうか which -s を使って確認します.

たとえば Makefile に以下のように書いてあるとします.

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

まず, /usr/local/etc/innd という ファイルかディレクトリが存在するか確認します. 存在しない場合には, ports ツリーの news/inn というサブディレクトリで ビルドとインストールを行ないます. さらに, wish8.0 というプログラムが ユーザのサーチパス中にあるかどうか探します. ない場合には同じく ports ツリーの x11-toolkits/tk80 というサブディレクトリで コンパイルとインストールを行ないます.

Note: この例で, innd は実際にはプログラムです. このように, プログラムであっても一般ユーザのサーチパスに 含まれているとは考えにくいところに置かれているものの場合には, 絶対パスで指定してください.

この依存関係は install ターゲット中で チェックされます. また, pkg_add によるインストールの際に, その package が依存するものがユーザのシステムに存在しない場合には 自動的に追加インストールできるように, 依存するものの名前も package 中に記録されます. target の部分が DEPENDS_TARGET と同じ場合には, target の部分を省略することができます.

4.10.3. BUILD_DEPENDS

この port のビルド時に必要となるプログラム, またはファイルがあるときにはこの変数で指定します. RUN_DEPENDS と同様に, これは path:dir[:target] という 組のリストです. たとえば,

BUILD_DEPENDS=unzip:${PORTSDIR}/archivers/unzip
と指定されていた場合, まず unzip という名前の プログラムがインストールされているかどうかを確認します. インストールされていない場合には ports ツリーの archivers/unzip サブディレクトリに移動し, ビルドとインストールを行ないます.

Note: ここで言う``ビルド''とは, ファイルの展開から コンパイルまでのすべての処理を意味します. この依存関係は, extract ターゲットの中で チェックされます. target の部分は, DEPENDS_TARGET と同じ場合には 省略することができます.

4.10.4. FETCH_DEPENDS

この port を取ってくるのに必要となるプログラム, またはファイルがあるときにはこの変数で指定します. 上の二つと同様に, これは path:dir[:target] という 組のリストです. たとえば,

FETCH_DEPENDS=ncftp2:${PORTSDIR}/net/ncftp2
と指定されていれば, ncftp2 という名前の プログラムを探します. 見つからない場合には, ports ツリーの net/ncftp2 サブディレクトリで ビルドとインストールを行ないます.

この依存関係は fetch ターゲット中で チェックされます. target の部分は, DEPENDS_TARGET と同じ場合には 省略することができます.

4.10.5. DEPENDS

上記の四つのいずれにもあてはまらないような依存関係がある場合, または他の port がインストールされているだけではなく ソースが展開されている必要がある場合には, この変数を使います. これは上記の四つと違い, 特に``確認''するものが ありませんので, dir[:target] という形式のリストになります. target の部分は DEPENDS_TARGET と同じ場合には 省略することができます.

4.10.6. よくある依存関係を表す変数

その 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 が 含まれていたり, いなかったりします).

4.10.7. 依存関係に関する注意

上で述べたように, 依存する ports が必要になったときに 呼ばれるデフォルトのターゲットは DEPENDS_TARGET で, そのデフォルトは install です. これはユーザが使用する変数であり, port の Makefile で定義するものではありません. もし, その port が特別な方法で依存関係を扱う必要がある場合には, DEPENDS_TARGET を再定義するのではなく *_DEPENDS 変数の :target 部分を使用してください.

make clean と入力したときには, その port が依存する port も自動的に clean されます. そうならないようにしたい場合には, 環境変数 NOCLEANDEPENDS を設定してください.

無条件に他の port に依存させるには, BUILD_DEPENDSRUN_DEPENDS の最初のフィールドに ${NONEXISTENT} という変数を指定してください. これは, 他の port のソースが必要なときのみ使用してください. ターゲットも指定することで, コンパイルの時間を節約できる場合もあります. たとえば

BUILD_DEPENDS=   ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
とすると, 常に JPEG port のディレクトリに行って ソースの展開を行ないます.

あなたがやりたいことが他の方法ではできない場合以外には DEPENDS を使わないでください. これは常に他の port の作成を行ない (さらにデフォルトでは インストールも行ない), package まで作成します. この動作が本当に所望のものでしたら, それを BUILD_DEPENDSRUN_DEPENDS に書くべきでしょう -- 少なくとも意図を明確にすることができます.

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